Innholdsfortegnelse:
Video: Plott DHT11 -data ved hjelp av Raspberry Pi og Arduino UNO: 7 trinn
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Denne instruksen forklarer hvordan jeg plotter temperatursensor DHT11 -data ved hjelp av Arduino Uno og Raspberry Pi. I denne temperatursensoren er koblet til Arduino Uno og Arduino Uno er serielt forbundet med Raspberry Pi. På Raspberry Pi Side brukes matplotlib, numpy og drawow biblioteker for å plotte grafer.
Trinn 1: Ting som trengs for prosjektet
1. Bringebær Pi
2. Arduino Uno
3. DHT11 temperatursensor
4. Jumper Wires
5. Brødbrett
Trinn 2: Last ned og installer Arduino IDE i Raspberry Pi
Merk:- Du kan bruke Arduino IDE for Windows, Linux eller Mac til å laste opp skisse i Arduino UNO.
Første trinn er å installere Arduino IDE for den åpne nettleseren i Raspberry Pi og åpne lenken nedenfor
Arduino Forrige IDE
Last deretter ned Linux ARM -versjonen og trekk den ut med kommando
tar -xf filnavn
Etter utpakking vil du se en ny katalog. Her bruker jeg arduino-1.8.2 IDE. Gå deretter til katalogen ved å bruke kommandoen.
cd arduino-1.8.1
For å kjøre Arduino IDE, bruk denne kommandoen i arduino-1.8.2-katalogen
./arduino
Slik bruker du biblioteker
For å installere eventuelle biblioteker i Arduino, bare last ned biblioteket og lim det inn i arduino 1.8.2 ==> biblioteker -mappen.
MERK:-Kontroller at det ikke er (-) i bibliotekmappen for eks (DHT-sensor). Hvis det er noen (-), gi det nytt navn.
vi vil bruke to biblioteker i denne instruerbare, DHT_Sensor og Adafruit_Sensor
Trinn 3: Kode for Arduino
La oss få python og Arduino til å snakke sammen. For det første trenger vi et enkelt program for å få Arduino som sender data over den serielle porten. Følgende program er et enkelt program som vil ha Arduino -tellingen og sende dataene til serieporten.
Arduino -koden
#inkludere "DHT.h" flyte tempC; // Variabel eller holdbar temp i C flytetid temFF; // Variabel for å holde temp i F flytefuktighet; // Variabel for å holde trykkavlesning
#define DHTPIN 7 // hvilken digital pin vi er koblet til
#define DHTTYPE DHT11 // DHT 11
//#definere DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#definere DHTTYPE DHT21 // DHT 21 (AM2301)
// Initialiser DHT -sensor.
DHT dht (DHTPIN, DHTTYPE);
ugyldig oppsett () {Serial.begin (115200); // slå på seriell skjerm
dht.begin (); // initialiser dht}
void loop () {tempC = dht.readTemperature (); // Sørg for å deklarere variablene dine
fuktighet = dht.readHumidity (); // Les Fuktighet
Serial.print (tempC);
Serial.print (",");
Serial.print (fuktighet);
Serial.print ("\ n"); // for nytt linedelay (2000); // Pause mellom lesningene. }
Når skissen er samlet, velger du brett og port og laster den opp.
Trinn 4: Sett opp Raspberry Pi
Når koden er lastet opp, installerer du noen biblioteker slik at vi kan plotte grafen over data som kommer serielt fra Arduino Uno.
1. PySerial er et bibliotek som gir støtte for serielle tilkoblinger over en rekke forskjellige enheter. For å installere det, bruk kommando.
Sudo apt-get install python-serial
2. Numpy er en pakke som definerer et flerdimensjonalt arrayobjekt og tilhørende hurtige matematiske funksjoner som opererer på det. Det gir også enkle rutiner for lineær algebra og FFT (Fast Fourier Transform) og sofistikert generering av tilfeldige tall. Du kan installere den på mange måter enten ved hjelp av en passende pakke eller pip. Her installerer jeg ved hjelp av pip for at først må vi installere pip
sudo apt-get install python-pip python-dev build-essential
sudo pip installer numpy
eller hvis du vil bruke en passende pakke
sudo apt installer python-numpy
3. Matplotlib er et 2D-plottingsbibliotek som gir et objektorientert API for å legge inn tomter i applikasjoner ved hjelp av GUI-verktøysett som Tkinter, wxPython, Qt eller GTK+. For å installere det, bruk kommando
sudo pip installer matplotlib
eller
sudo apt installer python-matplotlib
4. Drawnow brukes vanligvis for å se resultatene etter hver iterasjon ettersom vi bruker "imshow" i MATLAB. For å installere det, bruk kommando
sudo pip installer drawow
Trinn 5: Python Scipt
Neste trinn er å skrive et python -skript for at du kan bruke hvilken som helst editor for å skrive det.
1. Plott data i en graf
import serial # import Serial Library
import numpy # Import numpy
importer matplotlib.pyplot som plt #import matplotlib bibliotek
fra drawow import *
tempC = #Tom matrisfuktighet =
arduino = serial. Serial ("/dev/ttyACM0", 115200)
plt.ion () # interaktiv modus for å plotte levende datatall = 0
def makeFig (): #Lag en funksjon som lager ønsket plot
plt.ylim (20, 30) #Sett y min og maks verdier
plt.title ('Real Time DHT11 Data') #Plott tittelen
plt.grid (True) #Slå på rutenettet
plt.ylabel ('Temp C') #Sett ylabel
plt.plot (tempC, 'b^-', label = 'Grad C') #plott temperaturen
plt.legend (loc = 'øvre høyre') #tegn legenden
plt2 = plt.twinx () #Lag en andre y -akse
plt.ylim (50, 70) #Angi grenser for andre y -akse
plt2.plot (fuktighet, 'g*-', label = 'Fuktighet') #tomtetrykkdata
plt2.set_ylabel ('Fuktighet') #etikett andre y -akse
plt2.ticklabel_format (useOffset = False)
plt2.legend (loc = 'øvre venstre')
while True: # Mens loop som sløyfer for alltid
while (arduino.inWaiting () == 0): #Vent her til det er data
bestå #ikke gjøre noe
arduinoString = arduino.readline ()
dataArray = arduinoString.split (',') #Del den inn i en matrise
temp = float (dataArray [0])
hum = float (dataArray [1])
tempC.append (temp)
fuktighet. legg til (nynn)
drawow (makeFig)
plt.pause (.000001)
count = count+1 if (count> 20): #bare ta de siste 20 dataene hvis dataene er mer, vil de poppe først
tempC.pop (0)
fuktighet.pop (0)
2. Å plotte fuktighet og temperatur separat
import serial # import Serial Library
import numpy # Import numpy
importer matplotlib.pyplot som plt #import matplotlib bibliotek
fra drawow import *
tempC = #Tom matrise
fuktighet =
arduino = serial. Serial ("/dev/ttyACM0", 115200) #Seriell port som arduino er koblet til og Baudrate
plt.ion () #Fortell matplotlib at du vil at interaktiv modus skal plotte levende data
def CreatePlot (): #Lag en funksjon som lager ønsket plot
tomt. tomt (2, 1, 1) #Høyde, bredde, første tomt
plt.ylim (22, 34) #Sett y min og maks verdier
plt.title ('Real Time DHT11 Data') #Plott tittelen
plt.grid (True) #Slå på rutenettet
plt.ylabel ('Temp C') #Sett etiketter
plt.plot (tempC, 'b^-', label = 'Grad C') #plott temperaturen
plt.legend (loc = 'øvre senter') #tegn legenden
tomt. tomt (2, 1, 2) # Høyde, bredde, andre tomt
plt.grid (sant)
plt.ylim (45, 70) #Angi grenser for andre y -akse
plt.plot (fuktighet, 'g*-', label = 'Fuktighet (g/m^3)') #tomt fuktighetsdata
plt.ylabel ('Fuktighet (g/m^3)') #etikett andre y -akse
plt.ticklabel_format (useOffset = False) #to stoppe autoskala y -aksen
plt.legend (loc = 'øvre senter')
while True: # While loop som sløyfer for alltid
while (arduino.inWaiting () == 0): #Vent her til det er dataoverføring #gjør ingenting
arduinoString = arduino.readline () #les dataene fra seriell port
dataArray = arduinoString.split (',') #Del den inn i en matrise
temp = float (dataArray [0]) #Konverter første element til flytende tall og sett inn temp
hum = float (dataArray [1]) #Konverter andre element til flytende tall og sett inn hum
tempC.append (temp) #Bygg vår tempC -matrise ved å legge til temp -lesing
fuktighet. tilføy (nynn) #Bygge fuktighetsoppsettet vårt ved å legge til nynnlesing
drawow (CreatePlot)
plt.pause (.000001)
telle = telle+1
if (count> 20): #bare ta de siste 20 dataene hvis dataene er flere, vil de dukke opp først
tempC.pop (0) # pop out første element
fuktighet.pop (0)
Trinn 6: Kretsdiagram
Arduino ==> DHT11
3.3V ==> VCC
GND ==> GND
D7 ==> UT