Sadržaj:
Video: Iscrtajte DHT11 podatke pomoću Raspberry Pi i Arduino UNO: 7 koraka
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
Ovo uputstvo objašnjava kako iscrtavam podatke senzora temperature DHT11 pomoću Arduino Uno i Raspberry Pi. U ovom senzoru temperature povezan je s Arduino Uno, a Arduino Uno je serijski povezan s Raspberry Pi. Na Raspberry Pi Sideu biblioteke matplotlib, numpy i drawnow koriste se za iscrtavanje grafikona.
Korak 1: Stvari potrebne za projekat
1. Malina Pi
2. Arduino Uno
3. DHT11 Senzor temperature
4. Žice za kratkospojnike
5. Oglasna ploča
Korak 2: Preuzmite i instalirajte Arduino IDE u Raspberry Pi
Napomena:- Možete koristiti Arduino IDE za Windows, Linux ili Mac za postavljanje skice u Arduino UNO.
Prvi korak je instalirati Arduino IDE za taj otvoreni preglednik u Raspberry Pi i otvoriti donju vezu
Arduino Prethodni IDE
Zatim preuzmite Linux ARM verziju i ekstrahirajte je pomoću naredbe
tar -xf naziv datoteke
Nakon izdvajanja vidjet ćete novi direktorij. Ovdje koristim arduino-1.8.2 IDE. Zatim idite u direktorij pomoću naredbe.
cd arduino-1.8.1
Da biste pokrenuli Arduino IDE, koristite ovu naredbu u direktoriju arduino-1.8.2
./arduino
Kako koristiti biblioteke
Da biste instalirali bilo koju biblioteku u Arduinu, jednostavno preuzmite biblioteku i zalijepite je u mapu biblioteka arduino 1.8.2 ==>.
NAPOMENA:-Uverite se da nema (-) u fascikli biblioteke za ex (DHT-senzor). Ako postoji (-), preimenujte ga.
mi ćemo koristiti dvije biblioteke u ovom uputstvu, DHT_Sensor i Adafruit_Sensor
Korak 3: Kôd za Arduino
Ajmo sada python i Arduino razgovarati zajedno. Prvo nam je potreban jednostavan program da Arduino šalje podatke preko serijskog porta. Sljedeći program je jednostavan program koji će brojati Arduino i slati podatke na serijski port.
Arduino kod
#include "DHT.h" plutajući tempC; // Promjenjiva ili temp. Držanja u C float tempF; // Varijabla za držanje temperature u vlažnosti plutajućeg F; // Varijabla za očitavanje pritiska držanja
#define DHTPIN 7 // na koji smo digitalni pin povezani
#define DHTTYPE DHT11 // DHT 11
//#definiraj DHTTIP DHT22 // DHT 22 (AM2302), AM2321
//#definiraj DHTTYPE DHT21 // DHT 21 (AM2301)
// Inicijalizacija DHT senzora.
DHT dht (DHTPIN, DHTTYPE);
void setup () {Serial.begin (115200); // uključivanje serijskog monitora
dht.begin (); // inicijalizira dht}
void loop () {tempC = dht.readTemperature (); // Obavezno navedite svoje varijable
vlažnost = dht.readHumidity (); // Očitajte Vlažnost
Serial.print (tempC);
Serial.print (",");
Serial.print (vlažnost);
Serial.print ("\ n"); // za novi linedelay (2000); // Pauza između čitanja. }
Kada se skica sastavi, odaberite ploču i port i prenesite je.
Korak 4: Postavite Raspberry Pi
Nakon što se kôd učita, instalirajte neke biblioteke kako bismo mogli iscrtati grafikon podataka koji serijski dolazi iz Arduino Uno.
1. PySerial je biblioteka koja pruža podršku za serijske veze na različitim uređajima. Da biste ga instalirali, koristite naredbu.
Sudo apt-get install python-serial
2. Numpy je paket koji definira višedimenzionalni objekt niza i pridružene brze matematičke funkcije koje na njemu rade. Omogućava i jednostavne rutine za linearnu algebru i FFT (brzu Fourierovu transformaciju) i sofisticiranu generaciju slučajnih brojeva. Možete ga instalirati na mnogo načina, koristeći apt paket ili pip. Ovdje instaliram pomoću pipa. Prvo moramo instalirati pip
sudo apt-get install python-pip python-dev build-essential
sudo pip install numpy
ili ako želite koristiti apt paket
sudo apt install python-numpy
3. Matplotlib je 2D grafička biblioteka koja pruža objektno orijentirani API za ugradnju iscrtavanja u aplikacije koristeći GUI alate opće namjene kao što su Tkinter, wxPython, Qt ili GTK+. Da biste ga instalirali, koristite naredbu
sudo pip install matplotlib
ili
sudo apt install python-matplotlib
4. Drawnow se općenito koristi za pregled rezultata nakon svake iteracije dok koristimo "imshow" u MATLAB -u. Da biste ga instalirali, koristite naredbu
sudo pip install drawnow
Korak 5: Python Scipt
Sljedeći korak je pisanje python skripte za koju možete koristiti bilo koji uređivač.
1. Iscrtajte podatke u jedan grafikon
import serial # import Serijska biblioteka
import numpy # Uvoz numpy
uvezite matplotlib.pyplot kao plt #import matplotlib biblioteke
iz drawnow uvoza *
tempC = #Prazan niz vlažnost =
arduino = serial. Serial ("/dev/ttyACM0", 115200)
plt.ion () # interaktivni način za iscrtavanje broja podataka uživo = 0
def makeFig (): #Kreirajte funkciju koja čini naš željeni grafikon
plt.ylim (20, 30) #Postavi y min i max vrijednosti
plt.title ('Podaci u stvarnom vremenu DHT11') #Iscrtajte naslov
plt.grid (True) #Uključite mrežu
plt.ylabel ('Temp C') #Postavi ylabel
plt.plot (tempC, 'b^-', label = 'Stepen C') #iscrtajte temperaturu
plt.legend (loc = 'gore desno') #plot legendu
plt2 = plt.twinx () #Kreirajte drugu y osu
plt.ylim (50, 70) #Postavi ograničenja druge osi y
plt2.plot (vlažnost, 'g*-', label = 'Vlažnost') #podaci o tlaku parcele
plt2.set_ylabel ('Humidity') #label druga y osa
plt2.ticklabel_format (useOffset = False)
plt2.legend (loc = 'gore lijevo')
while True: # While petlja koja se petlja zauvijek
while (arduino.inWaiting () == 0): #Sačekajte ovdje dok ne bude podataka
proći #ne raditi ništa
arduinoString = arduino.readline ()
dataArray = arduinoString.split (',') #Podijelite ga u niz
temp = float (dataArray [0])
hum = float (dataArray [1])
tempC.append (temp)
vlažnost.dopuštanje (pjevušenje)
izvlačenje (makeFig)
plt.pause (.000001)
count = count+1 if (count> 20): #samo uzmite zadnjih 20 podataka ako je podataka više, oni će se prvi pojaviti
tempC.pop (0)
vlažnost.pop (0)
2. Zasebno iscrtati vlažnost i temperaturu
import serial # import Serijska biblioteka
import numpy # Uvoz numpy
uvezite matplotlib.pyplot kao plt #import matplotlib biblioteke
iz drawnow uvoza *
tempC = #Prazan niz
vlažnost =
arduino = serial. Serial ("/dev/ttyACM0", 115200) #Serijski port na koji je arduino povezan i brzina prijenosa
plt.ion () #Recite matplotlibu da želite interaktivni način rada za iscrtavanje podataka uživo
def CreatePlot (): #Kreirajte funkciju koja čini naš željeni grafikon
plt.subplot (2, 1, 1) #Height, Width, First plot
plt.ylim (22, 34) #Postavi y min i max vrijednosti
plt.title ('Podaci u stvarnom vremenu DHT11') #Iscrtajte naslov
plt.grid (True) #Uključite mrežu
plt.ylabel ('Temp C') #Postavi ylabele
plt.plot (tempC, 'b^-', label = 'Stepen C') #iscrtajte temperaturu
plt.legend (loc = 'gornji centar') #iscrtajte legendu
plt.subplot (2, 1, 2) # Visina, širina, drugi grafikon
plt.grid (Tačno)
plt.ylim (45, 70) #Postavi ograničenja druge osi y
plt.plot (vlažnost, 'g*-', label = 'Vlažnost (g/m^3)') #podaci o vlažnosti zemljišta
plt.ylabel ('Vlažnost (g/m^3)') #oznaka druge osi y
plt.ticklabel_format (useOffset = False) #za zaustavljanje automatskog skaliranja osi y
plt.legend (loc = 'gornji centar')
while True: # While petlja koja se petlja zauvijek
while (arduino.inWaiting () == 0): #Sačekajte ovdje dok ne prođu podaci #ne činite ništa
arduinoString = arduino.readline () #pročitajte podatke sa serijskog porta
dataArray = arduinoString.split (',') #Podijelite ga u niz
temp = float (dataArray [0]) #Prebaci prvi element u plutajući broj i stavi u temp
hum = float (dataArray [1]) #Pretvorite drugi element u plutajući broj i stavite u hum
tempC.append (temp) #Izgradite naš tempC niz dodavanjem čitanja temp
vlažnost.append (hum) #Izgradnja našeg niza vlažnosti dodavanjem čitanja hum
drawnow (CreatePlot)
plt.pause (.000001)
count = count+1
if (broj> 20): #samo uzmite zadnjih 20 podataka ako je podataka više, oni će se prvi pojaviti
tempC.pop (0) # iskačući prvi element
vlažnost.pop (0)
Korak 6: Dijagram kola
Arduino ==> DHT11
3.3V ==> VCC
GND ==> GND
D7 ==> OUT