Iscrtajte DHT11 podatke pomoću Raspberry Pi i Arduino UNO: 7 koraka
Iscrtajte DHT11 podatke pomoću Raspberry Pi i Arduino UNO: 7 koraka

Video: Iscrtajte DHT11 podatke pomoću Raspberry Pi i Arduino UNO: 7 koraka

Video: Iscrtajte DHT11 podatke pomoću Raspberry Pi i Arduino UNO: 7 koraka
Video: Measure Temperature and Humidity WiFi with ESP32 DHT11 and DHT22 - Robojax 2025, Januar
Anonim
Iscrtajte DHT11 podatke pomoću Raspberry Pi i Arduino UNO
Iscrtajte DHT11 podatke pomoću Raspberry Pi i Arduino UNO

Ovo uputstvo objašnjava 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 iscrtavanje grafikona.

Korak 1: Stvari potrebne za projekat

Stvari potrebne za projekat
Stvari potrebne za projekat
Stvari potrebne za projekat
Stvari potrebne za projekat
Stvari potrebne za projekat
Stvari potrebne za projekat

1. Malina Pi

2. Arduino Uno

3. DHT11 Senzor temperature

4. Žice za kratkospojnike

5. Oglasna ploča

Korak 2: Preuzmite i instalirajte Arduino IDE u Raspberry Pi

Preuzmite i instalirajte Arduino IDE u Raspberry Pi
Preuzmite i instalirajte Arduino IDE u Raspberry Pi
Preuzmite i instalirajte Arduino IDE u Raspberry Pi
Preuzmite i instalirajte Arduino IDE u Raspberry Pi
Preuzmite i instalirajte Arduino IDE u Raspberry Pi
Preuzmite i instalirajte Arduino IDE u Raspberry Pi

Napomena:- Možete koristiti Arduino IDE za Windows, Linux ili Mac za postavljanje 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 Linux ARM verziju 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 biblioteke

Da biste instalirali bilo koju biblioteku u Arduinu, jednostavno preuzmite biblioteku i zalijepite je u mapu biblioteka arduino 1.8.2 ==>.

NAPOMENA:-Uverite se da nema (-) u fascikli biblioteke za ex (DHT-senzor). Ako postoji (-), preimenujte ga.

mi ćemo koristiti dvije biblioteke u ovom uputstvu, DHT_Sensor i Adafruit_Sensor

Korak 3: Kôd za Arduino

Kôd za Arduino
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 brojati 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 DHTTYPE DHT21 // DHT 21 (AM2301)

// Inicijalizacija DHT senzora.

DHT dht (DHTPIN, DHTTYPE);

void setup () {Serial.begin (115200); // uključivanje serijskog monitora

dht.begin (); // inicijalizira dht}

void loop () {tempC = dht.readTemperature (); // Obavezno navedite svoje varijable

vlažnost = dht.readHumidity (); // Očitajte Vlažnost

Serial.print (tempC);

Serial.print (",");

Serial.print (vlažnost);

Serial.print ("\ n"); // za novi linedelay (2000); // Pauza između čitanja. }

Kada se skica sastavi, odaberite ploču i port i prenesite je.

Korak 4: Postavite Raspberry Pi

Postavljanje Raspberry Pi
Postavljanje Raspberry Pi

Nakon što se kôd učita, instalirajte neke biblioteke kako bismo mogli iscrtati grafikon podataka koji serijski dolazi iz Arduino Uno.

1. PySerial je biblioteka 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 pridružene brze matematičke funkcije koje na njemu rade. Omogućava i jednostavne rutine za linearnu algebru i FFT (brzu Fourierovu transformaciju) i sofisticiranu generaciju slučajnih brojeva. Možete ga instalirati na mnogo načina, koristeći apt paket ili pip. 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 grafička biblioteka koja pruža objektno orijentirani API za ugradnju iscrtavanja u aplikacije koristeći GUI alate 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 pregled rezultata nakon svake iteracije dok koristimo "imshow" u MATLAB -u. Da biste ga instalirali, koristite naredbu

sudo pip install drawnow

Korak 5: Python Scipt

Python Scipt
Python Scipt
Python Scipt
Python Scipt

Sljedeći korak je pisanje python skripte za koju možete koristiti bilo koji uređivač.

1. Iscrtajte podatke u jedan grafikon

import serial # import Serijska biblioteka

import numpy # Uvoz numpy

uvezite matplotlib.pyplot kao plt #import matplotlib biblioteke

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 grafikon

plt.ylim (20, 30) #Postavi y min i max vrijednosti

plt.title ('Podaci u stvarnom vremenu DHT11') #Iscrtajte naslov

plt.grid (True) #Uključite mrežu

plt.ylabel ('Temp C') #Postavi ylabel

plt.plot (tempC, 'b^-', label = 'Stepen C') #iscrtajte temperaturu

plt.legend (loc = 'gore desno') #plot legendu

plt2 = plt.twinx () #Kreirajte drugu y osu

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 osa

plt2.ticklabel_format (useOffset = False)

plt2.legend (loc = 'gore lijevo')

while True: # While petlja koja se petlja zauvijek

while (arduino.inWaiting () == 0): #Sačekajte ovdje dok ne bude podataka

proći #ne raditi 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.dopuštanje (pjevušenje)

izvlačenje (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 biblioteka

import numpy # Uvoz numpy

uvezite matplotlib.pyplot kao plt #import matplotlib biblioteke

iz drawnow uvoza *

tempC = #Prazan niz

vlažnost =

arduino = serial. Serial ("/dev/ttyACM0", 115200) #Serijski port na koji je arduino povezan i brzina prijenosa

plt.ion () #Recite matplotlibu da želite interaktivni način rada za iscrtavanje podataka uživo

def CreatePlot (): #Kreirajte funkciju koja čini naš željeni grafikon

plt.subplot (2, 1, 1) #Height, Width, First plot

plt.ylim (22, 34) #Postavi y min i max vrijednosti

plt.title ('Podaci u stvarnom vremenu DHT11') #Iscrtajte naslov

plt.grid (True) #Uključite mrežu

plt.ylabel ('Temp C') #Postavi ylabele

plt.plot (tempC, 'b^-', label = 'Stepen C') #iscrtajte temperaturu

plt.legend (loc = 'gornji centar') #iscrtajte legendu

plt.subplot (2, 1, 2) # Visina, širina, drugi grafikon

plt.grid (Tačno)

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 skaliranja osi y

plt.legend (loc = 'gornji centar')

while True: # While petlja koja se petlja zauvijek

while (arduino.inWaiting () == 0): #Sačekajte ovdje dok ne prođu podaci #ne činite ništa

arduinoString = arduino.readline () #proč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 = count+1

if (broj> 20): #samo uzmite 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 kola

Dijagram kola
Dijagram kola
Dijagram kola
Dijagram kola
Dijagram kola
Dijagram kola

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> OUT