Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
Ove upute objašnjavaju 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 crtanje grafikona.
Korak 1: Stvari potrebne za projekt
1. Malina Pi
2. Arduino Uno
3. Senzor temperature DHT11
4. Žice za kratkospojnike
5. Oglasna ploča
Korak 2: Preuzmite i instalirajte Arduino IDE u Raspberry Pi
Napomena:- Arduino IDE za Windows, Linux ili Mac možete koristiti za učitavanje 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 verziju Linux ARM -a 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 knjižnice
Za instaliranje bilo koje knjižnice u Arduinu, jednostavno preuzmite knjižnicu i zalijepite je u mapu biblioteka arduino 1.8.2 ==>.
NAPOMENA:-Provjerite nema li (-) u mapi knjižnice za ex (DHT-senzor). Ako postoji (-), preimenujte ga.
u ovom ćemo uputstvu koristiti dvije knjižnice, 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 mjeriti 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 DHTTIP DHT21 // DHT 21 (AM2301)
// Inicijalizacija DHT osjetnika.
DHT dht (DHTPIN, DHTTYPE);
void setup () {Serial.begin (115200); // uključivanje serijskog monitora
dht.begin (); // inicijalizira dht}
void loop () {tempC = dht.readTemperature (); // Obavezno deklarirajte svoje varijable
vlažnost = dht.readHumidity (); // Očitajte Vlažnost
Serijski.ispis (tempC);
Serial.print (",");
Serijski.tisak (vlažnost);
Serial.print ("\ n"); // za novu podstavljenu traku (2000); // Pauza između čitanja. }
Nakon što se skica sastavi, odaberite ploču i priključak te je prenesite.
Korak 4: Postavljanje Raspberry Pi
Nakon što se kôd učita, instalirajte neke knjižnice kako bismo mogli iscrtati grafikon podataka koji serijski dolazi iz Arduino Uno.
1. PySerial je knjižnica 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 povezane brze matematičke funkcije koje na njemu rade. Također nudi jednostavne rutine za linearnu algebru i FFT (brzu Fourierovu transformaciju) i sofisticiranu generaciju slučajnih brojeva. Možete ga instalirati na mnogo načina ili pomoću apt paketa ili pipa. 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 knjižnica crtanja koja pruža objektno orijentirani API za ugradnju iscrta u aplikacije pomoću GUI alata 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 prikaz 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 napisati bilo koji uređivač.
1. Iscrtajte podatke u jedan grafikon
import serial # import Serijska knjižnica
import numpy # Uvoz numpy
uvozite matplotlib.pyplot kao plt #import matplotlib knjižnice
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 nacrt
plt.ylim (20, 30) #Postavi y min i max vrijednosti
plt.title ('DHT11 podaci u stvarnom vremenu') #Iscrtajte naslov
plt.grid (True) #Uključite mrežu
plt.ylabel ('Temp C') #Postavi ylabel
plt.plot (tempC, 'b^-', label = 'Stupanj C') #iscrtajte temperaturu
plt.legend (loc = 'gore desno') #iscrtajte legendu
plt2 = plt.twinx () #Kreirajte drugu os y
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 os
plt2.ticklabel_format (useOffset = False)
plt2.legend (loc = 'gore lijevo')
while True: # While petlja koja se ponavlja zauvijek
while (arduino.inWaiting () == 0): #Pričekajte ovdje dok nema podataka
proći #ne učiniti 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.dolazi (pjevuši)
drawnow (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 knjižnica
import numpy # Uvoz numpy
uvozite matplotlib.pyplot kao plt #import matplotlib knjižnice
iz drawnow uvoza *
tempC = #Prazan niz
vlažnost =
arduino = serial. Serial ("/dev/ttyACM0", 115200) #Serijski port na koji je arduino spojen i brzina prijenosa
plt.ion () #Recite matplotlibu da želite interaktivni način za iscrtavanje podataka uživo
def CreatePlot (): #Napravite funkciju koja čini naš željeni nacrt
plt.subplot (2, 1, 1) #Height, Width, First plot
plt.ylim (22, 34) #Postavi y min i max vrijednosti
plt.title ('DHT11 podaci u stvarnom vremenu') #Iscrtajte naslov
plt.grid (True) #Uključite mrežu
plt.ylabel ('Temp C') #Postavi ylabele
plt.plot (tempC, 'b^-', label = 'Stupanj C') #iscrtajte temperaturu
plt.legend (loc = 'gornji centar') #iscrtajte legendu
plt.subplot (2, 1, 2) # Visina, širina, druga ploha
plt.grid (Istina)
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 mjerenja osi y
plt.legend (loc = 'gornji centar')
while True: # While petlja koja se ponavlja zauvijek
while (arduino.inWaiting () == 0): #Pričekajte ovdje dok ne prođu podaci #ne činite ništa
arduinoString = arduino.readline () #č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 = brojanje+1
if (count> 20): #only 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 kruga
Arduino ==> DHT11
3.3V ==> VCC
GND ==> GND
D7 ==> IZLAZ