Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
Selles juhendis selgitatakse, kuidas joonistada temperatuurianduri DHT11 andmed Arduino Uno ja Raspberry Pi abil. Selles temperatuuriandur on ühendatud Arduino Unoga ja Arduino Uno on järjestikku ühendatud Raspberry Pi -ga. Raspberry Pi Side'is kasutatakse graafikute joonistamiseks matplotlib, numpy ja drawow raamatukogusid.
Samm: projekti jaoks vajalikud asjad
1. Vaarika Pi
2. Arduino Uno
3. DHT11 temperatuuriandur
4. Jumper Traadid
5. Leivalaud
Samm: laadige alla ja installige Arduino IDE rakendusse Raspberry Pi
Märkus:- Arduino UNO-s eskiisi üleslaadimiseks saate kasutada Windowsi, Linuxi või Maci Arduino IDE-d.
Esimene samm on installida Arduino IDE selle avatud brauseri jaoks Raspberry Pi -s ja avada allolev link
Arduino Eelmine IDE
Seejärel laadige alla Linuxi ARM -i versioon ja ekstraktige see käsuga
tar -xf faili nimi
Pärast kaevandamist näete uut kataloogi. Siin kasutan arduino-1.8.2 IDE. Seejärel minge käsu abil kataloogi.
cd arduino-1.8.1
Arduino IDE käivitamiseks kasutage seda käsku kataloogis arduino-1.8.2
./arduino
Kuidas kasutada raamatukogusid
Arduino teekide installimiseks laadige lihtsalt raamatukogu alla ja kleepige arduino 1.8.2 ==> teegid kausta.
MÄRKUS.-Veenduge, et endise (DHT-anduri) raamatukogu kaustas pole (-). Kui on (-), nimetage see ümber.
selles juhendis kasutame kahte raamatukogu, DHT_Sensor ja Adafruit_Sensor
Samm: Arduino kood
Nüüd laseme pythonil ja Arduinoil rääkida. Esiteks vajame lihtsat programmi, et saada Arduino andmeid jadaporti saatma. Järgmine programm on lihtne programm, mis loeb Arduino ja saadab andmed jadaporti.
Arduino kood
#segu "DHT.h" float tempC; // Muutuv või hoidev temperatuur C float tempF; // Muutuja temperatuuri hoidmiseks F -ujuki niiskuses; // Muutuja rõhunäidu hoidmiseks
#define DHTPIN 7 // millise digitaalse tihvtiga oleme ühendatud
#defineeri DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// DHT -anduri lähtestamine.
DHT dht (DHTPIN, DHTTYPE);
void setup () {Serial.begin (115200); // jadamonitori sisselülitamine
dht.begin (); // initsialiseeri dht}
void loop () {tempC = dht.readTemperature (); // Kindlasti deklareerige oma muutujad
niiskus = dht.readHumidity (); // Lugege niiskust
Serial.print (tempC);
Serial.print (",");
Serial.print (niiskus);
Serial.print ("\ n"); // uue linedelay jaoks (2000); // Lugemiste vahel paus. }
Kui visand on koostatud, valige tahvel ja port ning laadige see üles.
Samm: seadistage Raspberry Pi
Kui kood on üles laaditud, installige mõned teegid, et saaksime joonistada Arduino Unost järjestikku saabuvate andmete graafiku.
1. PySerial on raamatukogu, mis toetab jadaühendusi erinevates seadmetes. Selle installimiseks kasutage käsku.
Sudo apt-get install python-serial
2. Numpy on pakett, mis määratleb mitmemõõtmelise massiiviobjekti ja sellega seotud kiired matemaatikafunktsioonid. Samuti pakub see lihtsaid rida lineaarse algebra ja FFT (Fast Fourier Transform) ning keeruka juhuslike numbrite genereerimise jaoks. Saate selle installida mitmel viisil, kasutades apt paketti või pip. Siin ma installin pip abil, et kõigepealt peame pip installima
sudo apt-get install python-pip python-dev build-essential
sudo pip install numpy
või kui soovite kasutada apt paketti
sudo apt install python-numpy
3. Matplotlib on 2D joonestusteek, mis pakub objektile orienteeritud API-d graafikute manustamiseks rakendustesse, kasutades üldotstarbelisi GUI tööriistakomplekte, nagu Tkinter, wxPython, Qt või GTK+. Selle installimiseks kasutage käsku
sudo pip install matplotlib
või
sudo apt install python-matplotlib
4. Tavaliselt kasutatakse tulemuste nägemiseks pärast iga iteratsiooni drawnow, kuna kasutame MATLAB -is "imshow". Selle installimiseks kasutage käsku
sudo pip install installitud
Samm: Python Scipt
Järgmine samm on kirjutada pythoni skript, mille kirjutamiseks saate kasutada mis tahes redaktorit.
1. Joonistage andmed ühes graafikus
import serial # impordi jadateek
import numpy # Import numpy
impordi matplotlib.pyplot plt #import matplotlib raamatukoguna
tõmmatud impordist *
tempC = #Tühi massiivniiskus =
arduino = jada. Seriaalne ("/dev/ttyACM0", 115200)
plt.ion () # interaktiivne režiim reaalajas andmete loendamiseks = 0
def makeFig (): #Loo funktsioon, mis teeb meie soovitud graafiku
plt.ylim (20, 30) #Määra y min ja max väärtused
plt.title ('Reaalajas DHT11 andmed') #Plot the title
plt.grid (True) #Lülitage võrk sisse
plt.ylabel ('Temp C') #Set ylabel
plt.plot (tempC, 'b^-', label = 'C-kraad') #plot temperatuuri
plt.legend (loc = 'ülemine parem') #plot legend
plt2 = plt.twinx () #Loo teine y telg
plt.ylim (50, 70) #Määrake teise y telje piirid
plt2.plot (niiskus, 'g*-', silt = 'niiskus') #plot rõhu andmed
plt2.set_ylabel ('Niiskus') #silt teine y telg
plt2.ticklabel_format (useOffset = False)
plt2.legend (loc = 'ülemine vasak')
samas tõsi: # Kuigi silmus, mis kordub igavesti
while (arduino.inWaiting () == 0): #Oota siin, kuni on andmeid
pass #ära tee midagi
arduinoString = arduino.readline ()
dataArray = arduinoString.split (',') #Jagage see massiiviks
temp = float (dataArray [0])
hum = ujuk (dataArray [1])
tempC.append (temp)
niiskus. lisa (hum)
tõmmatud (makeFig)
plt. paus (.000001)
count = loendama+1, kui (loend> 20): #võtke ainult viimased 20 andmeid, kui andmeid on rohkem, siis need hüppavad esimesena
tempC.pop (0)
niiskus. pop (0)
2. Eraldi joonistada niiskus ja temperatuur
import serial # impordi jadateek
import numpy # Import numpy
impordi matplotlib.pyplot plt #import matplotlib raamatukoguna
tõmmatud impordist *
tempC = #Tühi massiiv
niiskus =
arduino = jada. Serial ("/dev/ttyACM0", 115200) #Seriaalne port, millega arduino on ühendatud ja Baudrate
plt.ion () #Rääkige matplotlib, et soovite interaktiivset režiimi reaalajas andmete joonistamiseks
def CreatePlot (): #Loo funktsioon, mis teeb meie soovitud graafiku
plt.subplot (2, 1, 1) #Height, Width, First plot
plt.ylim (22, 34) #Määra y min ja max väärtused
plt.title ('Reaalajas DHT11 andmed') #Plot the title
plt.grid (True) #Lülitage võrk sisse
plt.ylabel ('Temp C') #Set ylabels
plt.plot (tempC, 'b^-', label = 'C-kraad') #plot temperatuuri
plt.legend (loc = 'ülemine kese') #plot legend
plt.plokk (2, 1, 2) # Kõrgus, laius, teine graafik
plt.grid (tõsi)
plt.ylim (45, 70) #Määrake teise y telje piirid
plt.plot (niiskus, 'g*-', silt = 'niiskus (g/m^3)') #plot niiskuse andmed
plt.ylabel ('Niiskus (g/m^3)') #sildi teine y telg
plt.ticklabel_format (useOffset = False) #automaatse skaala y telje peatamiseks
plt.legend (loc = 'ülemine keskus')
samas tõsi: # Kuigi silmus, mis kordub igavesti
while (arduino.inWaiting () == 0): #Oota siin, kuni andmed edastatakse #ära tee midagi
arduinoString = arduino.readline () #loe andmeid jadapordist
dataArray = arduinoString.split (',') #Jagage see massiiviks
temp = float (dataArray [0]) #Teisenda esimene element ujuvaks numbriks ja pane temp
hum = ujuk (dataArray [1]) #Teisenda teine element ujuvaks numbriks ja pane hum
tempC.append (temp) #Ehitage meie tempC massiiv, lisades temp lugemise
niiskust. lisage (hum) #Ehitage meie niiskusmassiiv, lisades üminäitu
drawow (CreatePlot)
plt. paus (.000001)
loendama = loendama+1
kui (arv> 20): #võtke ainult viimased 20 andmeid, kui andmeid on rohkem, siis need hüppavad esimesena
tempC.pop (0) # avaneb esimene element
niiskus. pop (0)
6. samm: vooluahela skeem
Arduino ==> DHT11
3.3V ==> VCC
GND ==> GND
D7 ==> VÄLJA