Inhoudsopgave:
Video: DHT11-gegevens plotten met Raspberry Pi en Arduino UNO - Ajarnpa
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Deze instructable legt uit hoe ik temperatuursensor DHT11-gegevens plot met Arduino Uno en Raspberry Pi. In deze temperatuursensor is verbonden met Arduino Uno en Arduino Uno is serieel verbonden met Raspberry Pi. Bij Raspberry Pi Side worden matplotlib, numpy en drawow bibliotheken gebruikt om grafieken te plotten.
Stap 1: Dingen die nodig zijn voor het project
1. Raspberry Pi
2. Arduino Uno
3. DHT11-temperatuursensor
4. Doorverbindingsdraden
5. Breadboard
Stap 2: Download en installeer Arduino IDE in Raspberry Pi
Opmerking: - U kunt Arduino IDE van Windows, Linux of Mac gebruiken om schetsen in Arduino UNO te uploaden.
De eerste stap is om Arduino IDE voor die open browser in Raspberry Pi te installeren en de onderstaande link te openen:
Arduino Vorige IDE
Download vervolgens de Linux ARM-versie en pak deze uit met de opdracht
tar -xf bestandsnaam
Na het uitpakken ziet u een nieuwe map. Hier gebruik ik arduino-1.8.2 IDE. Ga vervolgens naar de map met behulp van de opdracht.
cd arduino-1.8.1
Gebruik deze opdracht in de directory arduino-1.8.2 om Arduino IDE uit te voeren
./arduino
Bibliotheken gebruiken
Om bibliotheken in Arduino te installeren, downloadt u eenvoudig de bibliotheek en plakt u deze in de map arduino 1.8.2 ==> bibliotheken.
OPMERKING:- Zorg ervoor dat er geen (-) in de bibliotheekmap staat voor bijvoorbeeld (DHT-sensor). Als er een (-) is, hernoem deze dan.
we zullen twee bibliotheken gebruiken in deze instructable, DHT_Sensor en Adafruit_Sensor
Stap 3: Coderen voor Arduino
Laten we python en Arduino nu samen laten praten. Ten eerste hebben we een eenvoudig programma nodig om de Arduino gegevens over de seriële poort te laten verzenden. Het volgende programma is een eenvoudig programma dat de Arduino laat tellen en de gegevens naar de seriële poort stuurt.
Arduino-code
#include "DHT.h" float tempC; // Variabele of houdtemperatuur in C float tempF; // Variabele voor het vasthouden van temp in F float vochtigheid; // Variabele voor het vasthouden van de drukmeting
#define DHTPIN 7 // met welke digitale pin we zijn verbonden
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Initialiseer de DHT-sensor.
DHT dht(DHTPIN, DHTTYPE);
void setup(){Serial.begin(115200); // zet seriële monitor aan
dht.begin(); // initialiseer dht}
void loop() {tempC = dht.readTemperature(); // Zorg ervoor dat u uw variabelen declareert
vochtigheid = dht.readHumidity(); // Lees Vochtigheid
Serial.print(tempC);
Serieel.print(", ");
Seriële.afdruk (vochtigheid);
Serieel.print("\n"); // voor nieuwe linedelay (2000); // Pauze tussen metingen. }
Nadat de schets is gecompileerd, selecteert u het bord en de poort en uploadt u deze.
Stap 4: Stel Raspberry Pi in
Nadat de code is geüpload, installeert u enkele bibliotheken zodat we de grafiek van gegevens kunnen plotten die serieel van Arduino Uno komen.
1. PySerial is een bibliotheek die ondersteuning biedt voor seriële verbindingen over een groot aantal verschillende apparaten. Gebruik het commando om het te installeren.
Sudo apt-get install python-serial
2. Numpy is een pakket dat een multidimensionaal array-object definieert en bijbehorende snelle wiskundige functies die erop werken. Het biedt ook eenvoudige routines voor lineaire algebra en FFT (Fast Fourier Transform) en geavanceerde generatie van willekeurige getallen. Je kunt het op veel manieren installeren, ofwel met het apt-pakket of met pip. Hier ben ik aan het installeren met pip, daarvoor moeten we eerst pip installeren
sudo apt-get install python-pip python-dev build-essential
sudo pip install numpy
of als je het apt-pakket wilt gebruiken
sudo apt install python-numpy
3. Matplotlib is een 2D-plotbibliotheek die een objectgeoriënteerde API biedt voor het inbedden van plots in toepassingen met behulp van algemene GUI-toolkits zoals Tkinter, wxPython, Qt of GTK+. Om het te installeren gebruik commando
sudo pip install matplotlib
of
sudo apt install python-matplotlib
4. Drawnow wordt over het algemeen gebruikt om de resultaten na elke iteratie te zien, aangezien we "imshow" gebruiken in MATLAB. Om het te installeren gebruik commando
sudo pip install Drawow
Stap 5: Python-script
De volgende stap is het schrijven van een python-script waarvoor je elke editor kunt gebruiken om het te schrijven.
1. Plot gegevens in één grafiek
importeer serienummer # importeer seriële bibliotheek
import numpy # Importeer numpy
importeer matplotlib.pyplot als plt #import matplotlib bibliotheek
van getekendeow import *
tempC = #Empty arrayhumidity =
arduino = serieel. Serial("/dev/ttyACM0", 115200)
plt.ion() # interactieve modus om live datacount te plotten = 0
def makeFig(): #Maak een functie die onze gewenste plot maakt
plt.ylim(20, 30) #Set y min en max waarden
plt.title('Real Time DHT11 Data') #Plot de titel
plt.grid(True) #Schakel het raster in
plt.ylabel('Temp C') #Set ylabel
plt.plot(tempC, 'b^-', label='Grade C') #plot de temperatuur
plt.legend(loc='rechtsboven') #plot the legend
plt2=plt.twinx() #Maak een tweede y-as
plt.ylim(50, 70) #Stel de limieten van de tweede y-as in
plt2.plot(vochtigheid, 'g*-', label='Vochtigheid') #plot drukgegevens
plt2.set_ylabel('Vochtigheid') #label tweede y-as
plt2.ticklabel_format(useOffset=False)
plt2.legend(loc='linksboven')
while True: # While-lus die voor altijd doorloopt
while (arduino.inWaiting()==0): #Wacht hier totdat er gegevens zijn
pas #niets doen
arduinoString = arduino.readline()
dataArray = arduinoString.split(', ') #Split het in een array
temp = zwevend(dataArray[0])
brom = float(dataArray[1])
tempC.toevoegen(temp)
vochtigheid.append(hum)
getekende (makeFig)
plt.pauze(.000001)
count=count+1 if(count>20): #neem alleen de laatste 20 gegevens als er meer gegevens zijn, deze zullen eerst verschijnen
tempC.pop(0)
vochtigheid.pop(0)
2. Om vochtigheid en temperatuur afzonderlijk te plotten
importeer serienummer # importeer seriële bibliotheek
import numpy # Importeer numpy
importeer matplotlib.pyplot als plt #import matplotlib bibliotheek
van getekendeow import *
tempC = #Lege array
vochtigheid =
arduino = serial. Serial("/dev/ttyACM0", 115200) #Seriële poort waarop Arduino is aangesloten en Baudrate
plt.ion() #Vertel matplotlib dat u in de interactieve modus live gegevens wilt plotten
def CreatePlot(): #Maak een functie die onze gewenste plot maakt
plt.subplot(2, 1, 1) #Hoogte, Breedte, Eerste plot
plt.ylim(22, 34) #Stel y min en max waarden in
plt.title('Real Time DHT11 Data') #Plot de titel
plt.grid(True) #Schakel het raster in
plt.ylabel('Temp C') #Set ylabels
plt.plot(tempC, 'b^-', label='Grade C') #plot de temperatuur
plt.legend(loc='upper center') #plot the legend
plt.subplot(2, 1, 2) # Hoogte, Breedte, Tweede plot
plt.grid (waar)
plt.ylim(45, 70) #Stel de limieten van de tweede y-as in
plt.plot(humidity, 'g*-', label='Vochtigheid (g/m^3)') #plot vochtigheidsgegevens
plt.ylabel('Vochtigheid (g/m^3)') #label tweede y-as
plt.ticklabel_format(useOffset=False) #om het automatisch schalen van de y-as te stoppen
plt.legend(loc='bovenste midden')
while True: # While-lus die voor altijd doorloopt
while (arduino.inWaiting()==0): #Wacht hier tot er een gegevenspas is #niets doen
arduinoString = arduino.readline() #lees de gegevens van de seriële poort
dataArray = arduinoString.split(', ') #Split het in een array
temp = float(dataArray[0]) #Converteer eerste element naar zwevend getal en zet in temp
hum = float(dataArray[1]) #Converteer tweede element naar zwevend getal en zet in hum
tempC.append(temp) #Bouw onze tempC-array door tijdelijke uitlezing toe te voegen
vochtigheid.append(hum) #Ons vochtigheidsarray bouwen door bromwaarde toe te voegen
Drawow(CreatePlot)
plt.pauze(.000001)
tel = tel+1
if(count>20): #neem alleen de laatste 20 gegevens als er meer gegevens zijn, wordt het eerst weergegeven
tempC.pop(0) # pop-out eerste element
vochtigheid.pop(0)
Stap 6: Schakelschema
Arduino ==> DHT11
3.3V ==> VCC
GND ==> GND
D7 ==> UIT