Complotați datele DHT11 folosind Raspberry Pi și Arduino UNO: 7 pași
Complotați datele DHT11 folosind Raspberry Pi și Arduino UNO: 7 pași

Video: Complotați datele DHT11 folosind Raspberry Pi și Arduino UNO: 7 pași

Video: Complotați datele DHT11 folosind Raspberry Pi și Arduino UNO: 7 pași
Video: Statistical Plotting with Matplotlib! 2025, Ianuarie
Anonim
Complotați datele DHT11 folosind Raspberry Pi și Arduino UNO
Complotați datele DHT11 folosind Raspberry Pi și Arduino UNO

Această instrucțiune explică modul în care trasez datele DHT11 ale senzorului de temperatură folosind Arduino Uno și Raspberry Pi. În acest senzor de temperatură este conectat cu Arduino Uno și Arduino Uno este conectat în serie cu Raspberry Pi. La Raspberry Pi Side, bibliotecile matplotlib, numpy și drawow sunt utilizate pentru graficarea graficelor.

Pasul 1: Lucruri necesare proiectului

Lucruri necesare proiectului
Lucruri necesare proiectului
Lucruri necesare proiectului
Lucruri necesare proiectului
Lucruri necesare proiectului
Lucruri necesare proiectului

1. Raspberry Pi

2. Arduino Uno

3. Senzor de temperatură DHT11

4. Sârme jumper

5. Pană de pâine

Pasul 2: Descărcați și instalați Arduino IDE în Raspberry Pi

Descărcați și instalați Arduino IDE în Raspberry Pi
Descărcați și instalați Arduino IDE în Raspberry Pi
Descărcați și instalați Arduino IDE în Raspberry Pi
Descărcați și instalați Arduino IDE în Raspberry Pi
Descărcați și instalați Arduino IDE în Raspberry Pi
Descărcați și instalați Arduino IDE în Raspberry Pi

Notă: - Puteți utiliza Arduino IDE pentru Windows, Linux sau Mac pentru a încărca schițe în Arduino UNO.

Primul pas este să instalați Arduino IDE pentru acel browser deschis în Raspberry Pi și să deschideți linkul de mai jos

Arduino IDE anterior

Apoi descărcați versiunea Linux ARM și extrageți-o folosind comanda

tar -xf numele fișierului

După extragere, veți vedea un nou director. Aici folosesc IDE arduino-1.8.2. Apoi mergeți la director folosind comanda.

cd arduino-1.8.1

Pentru a rula Arduino IDE, utilizați această comandă în directorul arduino-1.8.2

./arduino

Cum se utilizează bibliotecile

Pentru a instala orice biblioteci în Arduino, pur și simplu descărcați biblioteca și lipiți în arduino 1.8.2 ==> folderul biblioteci.

NOTĂ: - Asigurați-vă că nu există (-) în folderul bibliotecii de ex (senzor DHT). Dacă există (-), redenumiți-l.

vom folosi două biblioteci în acest instructable, DHT_Sensor și Adafruit_Sensor

Pasul 3: Cod pentru Arduino

Cod pentru Arduino
Cod pentru Arduino

Acum, permiteți ca Python și Arduino să vorbească împreună. În primul rând, avem nevoie de un program simplu pentru ca Arduino să trimită date prin portul serial. Următorul program este un program simplu care va avea numărul Arduino și va trimite datele către portul serial.

Cod Arduino

#includeți "DHT.h" float tempC; // Variabila sau menținerea temperaturii în C float tempF; // Variabil pentru menținerea temperaturii în umiditatea plutitoare F; // Variabilă pentru menținerea citirii presiunii

#define DHTPIN 7 // la ce pin digital suntem conectați

#define DHTTYPE DHT11 // DHT 11

// # define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

// # define DHTTYPE DHT21 // DHT 21 (AM2301)

// Inițializați senzorul DHT.

DHT dht (DHTPIN, DHTTYPE);

void setup () {Serial.begin (115200); // porniți monitorul serial

dht.begin (); // inițializați dht}

bucla void () {tempC = dht.readTemperature (); // Asigurați-vă că declarați variabilele

umiditate = dht.readHumidity (); // Citește Umiditate

Serial.print (tempC);

Serial.print (",");

Serial.print (umiditate);

Serial.print ("\ n"); // pentru linedelay nou (2000); // Pauză între citiri. }

Odată ce schița este compilată, selectați placa și portul și încărcați-le.

Pasul 4: Configurați Raspberry Pi

Configurați Raspberry Pi
Configurați Raspberry Pi

Odată ce codul este încărcat, Instalați câteva biblioteci, astfel încât să putem trage graficul de date care provin în serie de la Arduino Uno.

1. PySerial este o bibliotecă care oferă suport pentru conexiuni seriale pe o varietate de dispozitive diferite. Pentru ao instala folosiți comanda.

Sudo apt-get install python-serial

2. Numpy este un pachet care definește un obiect multi-dimensional și funcțiile matematice rapide asociate care operează pe acesta. De asemenea, oferă rutine simple pentru algebră liniară și FFT (Transformare Fourier rapidă) și generare sofisticată de numere aleatorii. Puteți să-l instalați în mai multe moduri, fie utilizând pachetul apt, fie pip. Aici instalez folosind pip pentru că mai întâi trebuie să instalăm pip

sudo apt-get install python-pip python-dev build-essential

sudo pip instalează numpy

sau dacă doriți să utilizați pachetul apt

sudo apt instalează python-numpy

3. Matplotlib este o bibliotecă de graficare 2D care oferă un API orientat obiect pentru încorporarea graficelor în aplicații folosind seturi de instrumente GUI de uz general precum Tkinter, wxPython, Qt sau GTK +. Pentru instalare utilizați comanda

sudo pip instalează matplotlib

sau

sudo apt instalează python-matplotlib

4. Drawnow este utilizat în general pentru a vedea rezultatele după fiecare iterație, deoarece folosim „imshow” în MATLAB. Pentru ao instala folosiți comanda

sudo pip instala drawow

Pasul 5: Python Scipt

Python Scipt
Python Scipt
Python Scipt
Python Scipt

Următorul pas este să scrieți un script python pentru care puteți folosi orice editor pentru a-l scrie.

1. Plasați datele într-un singur grafic

import serial # import Serial Library

import numpy # Import numpy

import matplotlib.pyplot ca plt #import bibliotecă matplotlib

din importul drawow *

tempC = #Empty arrayhumidity =

arduino = serial. Serial ("/ dev / ttyACM0", 115200)

plt.ion () # mod interactiv pentru a grafica cont de date live = 0

def makeFig (): #Creați o funcție care face complotul dorit

plt.ylim (20, 30) #Setați valorile y min și max

plt.title („Date DHT11 în timp real”) #Potează titlul

plt.grid (Adevărat) #Porniți grila

plt.ylabel („Temp C”) #Setează ylabel

plt.plot (tempC, 'b ^ -', etichetă = 'Grad C') #plot temperatura

plt.legend (loc = 'dreapta sus') #plot legenda

plt2 = plt.twinx () #Creați a doua axă y

plt.ylim (50, 70) #Set limitele celei de-a doua axe y

plt2.plot (umiditate, 'g * -', etichetă = 'Umiditate') #plot date data

plt2.set_ylabel („Umiditate”) #label a doua axă y

plt2.ticklabel_format (useOffset = False)

plt2.legend (loc = 'stânga sus')

în timp ce este adevărat: # bucla în timp ce se bucură pentru totdeauna

while (arduino.inWaiting () == 0): # Așteptați aici până când există date

trece # nu face nimic

arduinoString = arduino.readline ()

dataArray = arduinoString.split (',') #Split-o într-o matrice

temp = float (dataArray [0])

hum = float (dataArray [1])

tempC.append (temp)

umiditate.

drawow (makeFig)

plt.pause (.000001)

count = count + 1 if (count> 20): # luați doar ultimele 20 de date dacă datele sunt mai multe, va apărea mai întâi

tempC.pop (0)

umiditate.pop (0)

2. Pentru a stabili umiditatea și temperatura separat

import serial # import Serial Library

import numpy # Import numpy

import matplotlib.pyplot ca plt #import bibliotecă matplotlib

din importul drawow *

tempC = # Matrice goală

umiditate =

arduino = serial. Serial ("/ dev / ttyACM0", 115200) #Serial port la care este conectat arduino și Baudrate

plt.ion () # Spuneți matplotlib că doriți modul interactiv pentru graficarea datelor live

def CreatePlot (): #Create o funcție care face complotul dorit

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

plt.ylim (22, 34) #Setați valorile y min și max

plt.title („Date DHT11 în timp real”) #Potează titlul

plt.grid (Adevărat) #Porniți grila

plt.ylabel („Temp C”) #Setează ylabels

plt.plot (tempC, 'b ^ -', etichetă = 'Grad C') #plot temperatura

plt.legend (loc = 'centrul superior') #plot legenda

plt.subplot (2, 1, 2) # Înălțime, lățime, al doilea complot

plt.grid (Adevărat)

plt.ylim (45, 70) #Set limitele celei de-a doua axe y

plt.plot (umiditate, 'g * -', etichetă = 'Umiditate (g / m ^ 3)') #plot date umiditate

plt.ylabel ('Umiditate (g / m ^ 3)') #label a doua axă y

plt.ticklabel_format (useOffset = False) #pentru a opri autoscala axei y

plt.legend (loc = 'centrul superior')

while True: # While loop care se bucură pentru totdeauna

while (arduino.inWaiting () == 0): # Așteptați aici până când există date de trecere # nu face nimic

arduinoString = arduino.readline () #citește datele din portul serial

dataArray = arduinoString.split (',') #Split-o într-o matrice

temp = float (dataArray [0]) #Convertiți primul element în număr mobil și puneți temp

hum = float (dataArray [1]) #Convertiți al doilea element în număr mobil și puneți hum

tempC.append (temp) #Construiți matricea noastră de tempC adăugând citirea temporară

umiditate.append (zumzet) #Construirea matricei noastre de umiditate prin adăugarea citirii zumzetului

drawow (CreatePlot)

plt.pause (.000001)

count = count + 1

if (count> 20): # luați doar ultimele 20 de date dacă datele sunt mai multe, va apărea mai întâi

tempC.pop (0) # scoate primul element

umiditate.pop (0)

Pasul 6: Diagrama circuitului

Diagrama circuitului
Diagrama circuitului
Diagrama circuitului
Diagrama circuitului
Diagrama circuitului
Diagrama circuitului

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> OUT