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

Ove upute objašnjavaju 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 crtanje grafikona.

Korak 1: Stvari potrebne za projekt

Stvari potrebne za projekt
Stvari potrebne za projekt
Stvari potrebne za projekt
Stvari potrebne za projekt
Stvari potrebne za projekt
Stvari potrebne za projekt

1. Malina Pi

2. Arduino Uno

3. Senzor temperature DHT11

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:- Arduino IDE za Windows, Linux ili Mac možete koristiti za učitavanje 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 verziju Linux ARM -a 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 knjižnice

Za instaliranje bilo koje knjižnice u Arduinu, jednostavno preuzmite knjižnicu i zalijepite je u mapu biblioteka arduino 1.8.2 ==>.

NAPOMENA:-Provjerite nema li (-) u mapi knjižnice za ex (DHT-senzor). Ako postoji (-), preimenujte ga.

u ovom ćemo uputstvu koristiti dvije knjižnice, DHT_Sensor i Adafruit_Sensor

Korak 3: Kôd za Arduino

Kod za Arduino
Kod 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 mjeriti 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 DHTTIP DHT21 // DHT 21 (AM2301)

// Inicijalizacija DHT osjetnika.

DHT dht (DHTPIN, DHTTYPE);

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

dht.begin (); // inicijalizira dht}

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

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

Serijski.ispis (tempC);

Serial.print (",");

Serijski.tisak (vlažnost);

Serial.print ("\ n"); // za novu podstavljenu traku (2000); // Pauza između čitanja. }

Nakon što se skica sastavi, odaberite ploču i priključak te je prenesite.

Korak 4: Postavljanje Raspberry Pi

Postavljanje Raspberry Pi
Postavljanje Raspberry Pi

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

1. PySerial je knjižnica 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 povezane brze matematičke funkcije koje na njemu rade. Također nudi jednostavne rutine za linearnu algebru i FFT (brzu Fourierovu transformaciju) i sofisticiranu generaciju slučajnih brojeva. Možete ga instalirati na mnogo načina ili pomoću apt paketa ili pipa. 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 knjižnica crtanja koja pruža objektno orijentirani API za ugradnju iscrta u aplikacije pomoću GUI alata 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 prikaz 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 napisati bilo koji uređivač.

1. Iscrtajte podatke u jedan grafikon

import serial # import Serijska knjižnica

import numpy # Uvoz numpy

uvozite matplotlib.pyplot kao plt #import matplotlib knjižnice

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 nacrt

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

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

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

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

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

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

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

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 os

plt2.ticklabel_format (useOffset = False)

plt2.legend (loc = 'gore lijevo')

while True: # While petlja koja se ponavlja zauvijek

while (arduino.inWaiting () == 0): #Pričekajte ovdje dok nema podataka

proći #ne učiniti 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.dolazi (pjevuši)

drawnow (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 knjižnica

import numpy # Uvoz numpy

uvozite matplotlib.pyplot kao plt #import matplotlib knjižnice

iz drawnow uvoza *

tempC = #Prazan niz

vlažnost =

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

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

def CreatePlot (): #Napravite funkciju koja čini naš željeni nacrt

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

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

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

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

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

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

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

plt.subplot (2, 1, 2) # Visina, širina, druga ploha

plt.grid (Istina)

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

plt.legend (loc = 'gornji centar')

while True: # While petlja koja se ponavlja zauvijek

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

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

if (count> 20): #only 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 kruga

Kružni dijagram
Kružni dijagram
Kružni dijagram
Kružni dijagram
Kružni dijagram
Kružni dijagram

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> IZLAZ