Cuprins:
Video: Complotați datele DHT11 folosind Raspberry Pi și Arduino UNO: 7 pași
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Această instrucțiune explică modul în care trasez datele DHT11 ale senzorului de temperatură folosind Arduino Uno și Raspberry Pi. În acest senzor de temperatură este conectat cu Arduino Uno și Arduino Uno este conectat în serie cu Raspberry Pi. La Raspberry Pi Side, bibliotecile matplotlib, numpy și drawow sunt utilizate pentru graficarea graficelor.
Pasul 1: Lucruri necesare proiectului
1. Raspberry Pi
2. Arduino Uno
3. Senzor de temperatură DHT11
4. Sârme jumper
5. Pană de pâine
Pasul 2: Descărcați și instalați Arduino IDE în Raspberry Pi
Notă: - Puteți utiliza Arduino IDE pentru Windows, Linux sau Mac pentru a încărca schițe în Arduino UNO.
Primul pas este să instalați Arduino IDE pentru acel browser deschis în Raspberry Pi și să deschideți linkul de mai jos
Arduino IDE anterior
Apoi descărcați versiunea Linux ARM și extrageți-o folosind comanda
tar -xf numele fișierului
După extragere, veți vedea un nou director. Aici folosesc IDE arduino-1.8.2. Apoi mergeți la director folosind comanda.
cd arduino-1.8.1
Pentru a rula Arduino IDE, utilizați această comandă în directorul arduino-1.8.2
./arduino
Cum se utilizează bibliotecile
Pentru a instala orice biblioteci în Arduino, pur și simplu descărcați biblioteca și lipiți în arduino 1.8.2 ==> folderul biblioteci.
NOTĂ: - Asigurați-vă că nu există (-) în folderul bibliotecii de ex (senzor DHT). Dacă există (-), redenumiți-l.
vom folosi două biblioteci în acest instructable, DHT_Sensor și Adafruit_Sensor
Pasul 3: Cod pentru Arduino
Acum, permiteți ca Python și Arduino să vorbească împreună. În primul rând, avem nevoie de un program simplu pentru ca Arduino să trimită date prin portul serial. Următorul program este un program simplu care va avea numărul Arduino și va trimite datele către portul serial.
Cod Arduino
#includeți "DHT.h" float tempC; // Variabila sau menținerea temperaturii în C float tempF; // Variabil pentru menținerea temperaturii în umiditatea plutitoare F; // Variabilă pentru menținerea citirii presiunii
#define DHTPIN 7 // la ce pin digital suntem conectați
#define DHTTYPE DHT11 // DHT 11
// # define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
// # define DHTTYPE DHT21 // DHT 21 (AM2301)
// Inițializați senzorul DHT.
DHT dht (DHTPIN, DHTTYPE);
void setup () {Serial.begin (115200); // porniți monitorul serial
dht.begin (); // inițializați dht}
bucla void () {tempC = dht.readTemperature (); // Asigurați-vă că declarați variabilele
umiditate = dht.readHumidity (); // Citește Umiditate
Serial.print (tempC);
Serial.print (",");
Serial.print (umiditate);
Serial.print ("\ n"); // pentru linedelay nou (2000); // Pauză între citiri. }
Odată ce schița este compilată, selectați placa și portul și încărcați-le.
Pasul 4: Configurați Raspberry Pi
Odată ce codul este încărcat, Instalați câteva biblioteci, astfel încât să putem trage graficul de date care provin în serie de la Arduino Uno.
1. PySerial este o bibliotecă care oferă suport pentru conexiuni seriale pe o varietate de dispozitive diferite. Pentru ao instala folosiți comanda.
Sudo apt-get install python-serial
2. Numpy este un pachet care definește un obiect multi-dimensional și funcțiile matematice rapide asociate care operează pe acesta. De asemenea, oferă rutine simple pentru algebră liniară și FFT (Transformare Fourier rapidă) și generare sofisticată de numere aleatorii. Puteți să-l instalați în mai multe moduri, fie utilizând pachetul apt, fie pip. Aici instalez folosind pip pentru că mai întâi trebuie să instalăm pip
sudo apt-get install python-pip python-dev build-essential
sudo pip instalează numpy
sau dacă doriți să utilizați pachetul apt
sudo apt instalează python-numpy
3. Matplotlib este o bibliotecă de graficare 2D care oferă un API orientat obiect pentru încorporarea graficelor în aplicații folosind seturi de instrumente GUI de uz general precum Tkinter, wxPython, Qt sau GTK +. Pentru instalare utilizați comanda
sudo pip instalează matplotlib
sau
sudo apt instalează python-matplotlib
4. Drawnow este utilizat în general pentru a vedea rezultatele după fiecare iterație, deoarece folosim „imshow” în MATLAB. Pentru ao instala folosiți comanda
sudo pip instala drawow
Pasul 5: Python Scipt
Următorul pas este să scrieți un script python pentru care puteți folosi orice editor pentru a-l scrie.
1. Plasați datele într-un singur grafic
import serial # import Serial Library
import numpy # Import numpy
import matplotlib.pyplot ca plt #import bibliotecă matplotlib
din importul drawow *
tempC = #Empty arrayhumidity =
arduino = serial. Serial ("/ dev / ttyACM0", 115200)
plt.ion () # mod interactiv pentru a grafica cont de date live = 0
def makeFig (): #Creați o funcție care face complotul dorit
plt.ylim (20, 30) #Setați valorile y min și max
plt.title („Date DHT11 în timp real”) #Potează titlul
plt.grid (Adevărat) #Porniți grila
plt.ylabel („Temp C”) #Setează ylabel
plt.plot (tempC, 'b ^ -', etichetă = 'Grad C') #plot temperatura
plt.legend (loc = 'dreapta sus') #plot legenda
plt2 = plt.twinx () #Creați a doua axă y
plt.ylim (50, 70) #Set limitele celei de-a doua axe y
plt2.plot (umiditate, 'g * -', etichetă = 'Umiditate') #plot date data
plt2.set_ylabel („Umiditate”) #label a doua axă y
plt2.ticklabel_format (useOffset = False)
plt2.legend (loc = 'stânga sus')
în timp ce este adevărat: # bucla în timp ce se bucură pentru totdeauna
while (arduino.inWaiting () == 0): # Așteptați aici până când există date
trece # nu face nimic
arduinoString = arduino.readline ()
dataArray = arduinoString.split (',') #Split-o într-o matrice
temp = float (dataArray [0])
hum = float (dataArray [1])
tempC.append (temp)
umiditate.
drawow (makeFig)
plt.pause (.000001)
count = count + 1 if (count> 20): # luați doar ultimele 20 de date dacă datele sunt mai multe, va apărea mai întâi
tempC.pop (0)
umiditate.pop (0)
2. Pentru a stabili umiditatea și temperatura separat
import serial # import Serial Library
import numpy # Import numpy
import matplotlib.pyplot ca plt #import bibliotecă matplotlib
din importul drawow *
tempC = # Matrice goală
umiditate =
arduino = serial. Serial ("/ dev / ttyACM0", 115200) #Serial port la care este conectat arduino și Baudrate
plt.ion () # Spuneți matplotlib că doriți modul interactiv pentru graficarea datelor live
def CreatePlot (): #Create o funcție care face complotul dorit
plt.subplot (2, 1, 1) #Height, Width, First plot
plt.ylim (22, 34) #Setați valorile y min și max
plt.title („Date DHT11 în timp real”) #Potează titlul
plt.grid (Adevărat) #Porniți grila
plt.ylabel („Temp C”) #Setează ylabels
plt.plot (tempC, 'b ^ -', etichetă = 'Grad C') #plot temperatura
plt.legend (loc = 'centrul superior') #plot legenda
plt.subplot (2, 1, 2) # Înălțime, lățime, al doilea complot
plt.grid (Adevărat)
plt.ylim (45, 70) #Set limitele celei de-a doua axe y
plt.plot (umiditate, 'g * -', etichetă = 'Umiditate (g / m ^ 3)') #plot date umiditate
plt.ylabel ('Umiditate (g / m ^ 3)') #label a doua axă y
plt.ticklabel_format (useOffset = False) #pentru a opri autoscala axei y
plt.legend (loc = 'centrul superior')
while True: # While loop care se bucură pentru totdeauna
while (arduino.inWaiting () == 0): # Așteptați aici până când există date de trecere # nu face nimic
arduinoString = arduino.readline () #citește datele din portul serial
dataArray = arduinoString.split (',') #Split-o într-o matrice
temp = float (dataArray [0]) #Convertiți primul element în număr mobil și puneți temp
hum = float (dataArray [1]) #Convertiți al doilea element în număr mobil și puneți hum
tempC.append (temp) #Construiți matricea noastră de tempC adăugând citirea temporară
umiditate.append (zumzet) #Construirea matricei noastre de umiditate prin adăugarea citirii zumzetului
drawow (CreatePlot)
plt.pause (.000001)
count = count + 1
if (count> 20): # luați doar ultimele 20 de date dacă datele sunt mai multe, va apărea mai întâi
tempC.pop (0) # scoate primul element
umiditate.pop (0)
Pasul 6: Diagrama circuitului
Arduino ==> DHT11
3.3V ==> VCC
GND ==> GND
D7 ==> OUT