Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Tento návod vysvětluje, jak vykresluji data snímače teploty DHT11 pomocí Arduino Uno a Raspberry Pi. V tomto teplotním senzoru je připojeno Arduino Uno a Arduino Uno je sériově spojeno s Raspberry Pi. Na Raspberry Pi Side se pro vykreslování grafů používají knihovny matplotlib, numpy a drawnow.
Krok 1: Věci potřebné pro projekt
1. Raspberry Pi
2. Arduino Uno
3. Snímač teploty DHT11
4. Propojovací vodiče
5. Breadboard
Krok 2: Stáhněte a nainstalujte Arduino IDE do Raspberry Pi
Poznámka:- Pro nahrání skici v Arduino UNO můžete použít Arduino IDE Windows, Linux nebo Mac.
Prvním krokem je instalace Arduino IDE pro tento otevřený prohlížeč v Raspberry Pi a otevření níže uvedeného odkazu
Arduino Předchozí IDE
Poté stáhněte verzi Linux ARM a extrahujte ji pomocí příkazu
název souboru tar -xf
Po rozbalení uvidíte nový adresář. Zde používám arduino-1.8.2 IDE. Poté přejděte do adresáře pomocí příkazu.
cd arduino-1.8.1
Chcete-li spustit Arduino IDE, použijte tento příkaz v adresáři arduino-1.8.2
./arduino
Jak používat knihovny
Chcete -li do Arduina nainstalovat libovolné knihovny, jednoduše si knihovnu stáhněte a vložte do složky knihoven arduino 1.8.2 ==>.
POZNÁMKA:-Ujistěte se, že ve složce knihovny není ((DHT-senzor) žádný (-). Pokud existuje (-), přejmenujte jej.
v tomto pokynu použijeme dvě knihovny, DHT_Sensor a Adafruit_Sensor
Krok 3: Kód pro Arduino
Pojďme si nyní promluvit mezi Pythonem a Arduinem. Za prvé potřebujeme jednoduchý program, který umožní Arduinu odesílat data přes sériový port. Následující program je jednoduchý program, který bude mít počet Arduino a odešle data na sériový port.
Arduino kód
#include "DHT.h" float tempC; // Proměnná nebo udržovací teplota v C float tempF; // Proměnná pro udržení teploty ve F float vlhkosti; // Proměnná pro udržení odečtu tlaku
#define DHTPIN 7 // ke kterému digitálnímu pinu jsme připojeni
#define DHTTYPE DHT11 // DHT 11
//#definovat DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#definovat DHTTYPE DHT21 // DHT 21 (AM2301)
// Inicializace snímače DHT.
DHT dht (DHTPIN, DHTTYPE);
neplatné nastavení () {Serial.begin (115200); // zapněte sériový monitor
dht.begin (); // inicializace dht}
void loop () {tempC = dht.readTemperature (); // Nezapomeňte deklarovat proměnné
vlhkost = dht.readHumidity (); // Přečtěte si Vlhkost
Serial.print (tempC);
Serial.print (",");
Sériový tisk (vlhkost);
Serial.print ("\ n"); // for new linedelay (2000); // Pauza mezi čteními. }
Jakmile je skica sestavena, vyberte desku a port a nahrajte ji.
Krok 4: Nastavení Raspberry Pi
Jakmile je kód nahrán, nainstalujte některé knihovny, abychom mohli vykreslit graf dat, která přicházejí sériově z Arduino Uno.
1. PySerial je knihovna, která poskytuje podporu pro sériová připojení přes řadu různých zařízení. Chcete -li jej nainstalovat, použijte příkaz.
Sudo apt-get install python-serial
2. Numpy je balíček, který definuje vícerozměrný objekt pole a související rychlé matematické funkce, které na něm fungují. Poskytuje také jednoduché rutiny pro lineární algebru a FFT (Fast Fourierova transformace) a propracované generování náhodných čísel. Můžete jej nainstalovat mnoha způsoby, buď pomocí balíčku apt nebo pip. Zde instaluji pomocí pipu, protože nejprve musíme nainstalovat pip
sudo apt-get install python-pip python-dev build-essential
sudo pip install numpy
nebo pokud chcete použít balíček apt
sudo apt install python-numpy
3. Matplotlib je 2D vykreslovací knihovna, která poskytuje objektově orientované API pro vkládání grafů do aplikací pomocí obecných nástrojů GUI, jako jsou Tkinter, wxPython, Qt nebo GTK+. Chcete -li jej nainstalovat, použijte příkaz
sudo pip install matplotlib
nebo
sudo apt install python-matplotlib
4. Drawnow se obecně používá k zobrazení výsledků po každé iteraci, protože v MATLABu používáme „imshow“. Chcete -li jej nainstalovat, použijte příkaz
sudo pip install drawnow
Krok 5: Python Scipt
Dalším krokem je napsat skript pythonu, k jehož napsání můžete použít jakýkoli editor.
1. Vykreslení dat do jednoho grafu
import serial # import Serial Library
import numpy # Import numpy
importovat matplotlib.pyplot jako plt #import matplotlib knihovnu
z drawnow import *
tempC = #Prázdná vlhkost pole =
arduino = serial. Serial ("/dev/ttyACM0", 115200)
plt.ion () # interaktivní režim pro vykreslení živého datacount = 0
def makeFig (): #Create a function that makes our desired plot
plt.ylim (20, 30) #Nastavte minimální a maximální hodnoty y
plt.title ('Data DHT11 v reálném čase') #Zadejte název
plt.grid (True) #Zapněte mřížku
plt.ylabel ('Temp C') #Nastavte ylabel
plt.plot (tempC, 'b^-', label = 'Degree C') #vykreslete teplotu
plt.legend (loc = 'vpravo nahoře') #vykreslete legendu
plt2 = plt.twinx () #Vytvořte druhou osu y
plt.ylim (50, 70) #Nastavte limity druhé osy y
plt2.plot (vlhkost, 'g*-', label = 'Vlhkost') #údaje o tlaku v grafu
plt2.set_ylabel ('Vlhkost') #label druhá osa y
plt2.ticklabel_format (useOffset = False)
plt2.legend (loc = 'vlevo nahoře')
while True: # Zatímco smyčka, která smyčky navždy
while (arduino.inWaiting () == 0): #Počkejte zde, dokud nebudou k dispozici data
projít #nedělat nic
arduinoString = arduino.readline ()
dataArray = arduinoString.split (',') #Rozdělte to do pole
temp = float (dataArray [0])
hum = float (dataArray [1])
tempC.append (temp)
vlhkost. připojit (hukot)
drawnow (makeFig)
plt.pause (.000001)
count = count+1 if (count> 20): #onove take last 20 data if data is more it will pop first
tempC.pop (0)
vlhkost.pop (0)
2. Samostatně vykreslete vlhkost a teplotu
import serial # import Serial Library
import numpy # Import numpy
importovat matplotlib.pyplot jako plt #import matplotlib knihovnu
z drawnow import *
tempC = #Prázdné pole
vlhkost =
arduino = serial. Serial ("/dev/ttyACM0", 115200) #Sériový port, ke kterému je připojeno arduino a přenosová rychlost
plt.ion () #Tell matplotlib you want interactive mode to plot live data
def CreatePlot (): #Create a function that makes our desired plot
plt.subplot (2, 1, 1) #Height, Width, First plot
plt.ylim (22, 34) #Nastavte minimální a maximální hodnoty y
plt.title ('Data DHT11 v reálném čase') #Zadejte název
plt.grid (True) #Zapněte mřížku
plt.ylabel ('Temp C') #Nastavte ylabels
plt.plot (tempC, 'b^-', label = 'Degree C') #vykreslete teplotu
plt.legend (loc = 'horní střed') #vykreslete legendu
plt.subplot (2, 1, 2) # Výška, šířka, druhý graf
plt.grid (True)
plt.ylim (45, 70) #Nastavte limity druhé osy y
plt.plot (vlhkost, 'g*-', label = 'Vlhkost (g/m^3)') #údaje o vlhkosti vykreslení
plt.ylabel ('Vlhkost (g/m^3)') #label druhá osa y
plt.ticklabel_format (useOffset = False) #k zastavení osy y automatického škálování
plt.legend (loc = 'horní střed')
while True: # Zatímco smyčka, která smyčky navždy
while (arduino.inWaiting () == 0): #Wait here until there is data pass #do nothing
arduinoString = arduino.readline () #čtěte data ze sériového portu
dataArray = arduinoString.split (',') #Rozdělte to do pole
temp = float (dataArray [0]) #Převede první prvek na plovoucí číslo a vloží temp
hum = float (dataArray [1]) #Převede druhý prvek na plovoucí číslo a vloží hukot
tempC.append (temp) #Build our tempC array by appending temp reading
vlhkost.připojit (hukot) #Budování našeho pole vlhkosti přidáním čtení hukotu
drawnow (CreatePlot)
plt.pause (.000001)
count = count+1
if (count> 20): #onove take last 20 data if data is more it will pop first
tempC.pop (0) # vyskočí první prvek
vlhkost.pop (0)
Krok 6: Schéma zapojení
Arduino ==> DHT11
3,3 V ==> VCC
GND ==> GND
D7 ==> VENKU