Taula de continguts:

Representar dades DHT11 mitjançant Raspberry Pi i Arduino UNO: 7 passos
Representar dades DHT11 mitjançant Raspberry Pi i Arduino UNO: 7 passos

Vídeo: Representar dades DHT11 mitjançant Raspberry Pi i Arduino UNO: 7 passos

Vídeo: Representar dades DHT11 mitjançant Raspberry Pi i Arduino UNO: 7 passos
Vídeo: 09 Diagrama de sectores 2024, Desembre
Anonim
Representar dades DHT11 mitjançant Raspberry Pi i Arduino UNO
Representar dades DHT11 mitjançant Raspberry Pi i Arduino UNO

Aquest instructiu explica com dibuixo les dades del sensor DHT11 del sensor de temperatura mitjançant Arduino Uno i Raspberry Pi. En aquest sensor de temperatura es connecta Arduino Uno i Arduino Uno es connecta en sèrie amb Raspberry Pi. A Raspberry Pi Side, les biblioteques matplotlib, numpy i drawow s’utilitzen per representar gràfics.

Pas 1: coses necessàries per al projecte

Coses necessàries per al projecte
Coses necessàries per al projecte
Coses necessàries per al projecte
Coses necessàries per al projecte
Coses necessàries per al projecte
Coses necessàries per al projecte

1. Raspberry Pi

2. Arduino Uno

3. Sensor de temperatura DHT11

4. Cables de pont

5. Taula de pa

Pas 2: descarregueu i instal·leu Arduino IDE a Raspberry Pi

Descarregueu i instal·leu Arduino IDE a Raspberry Pi
Descarregueu i instal·leu Arduino IDE a Raspberry Pi
Descarregueu i instal·leu Arduino IDE a Raspberry Pi
Descarregueu i instal·leu Arduino IDE a Raspberry Pi
Descarregueu i instal·leu Arduino IDE a Raspberry Pi
Descarregueu i instal·leu Arduino IDE a Raspberry Pi

Nota: - Podeu utilitzar Arduino IDE de Windows, Linux o Mac per penjar esbossos a Arduino UNO.

El primer pas és instal·lar Arduino IDE per a aquest navegador obert a Raspberry Pi i obrir l'enllaç que es mostra a continuació

Arduino IDE anterior

A continuació, descarregueu la versió de Linux ARM i extracteu-la amb l'ordre

nom del fitxer tar -xf

Després d’extreure-la, veureu un nou directori. Aquí estic fent servir arduino-1.8.2 IDE. A continuació, aneu al directori mitjançant l'ordre.

cd arduino-1.8.1

Per executar Arduino IDE, utilitzeu aquesta ordre al directori arduino-1.8.2

./arduino

Com s'utilitzen les biblioteques

Per instal·lar qualsevol biblioteca a Arduino, simplement descarregueu-la i enganxeu-la a la carpeta arduino 1.8.2 ==> biblioteques.

NOTA: - Assegureu-vos que no hi ha cap (-) a la carpeta de la biblioteca per ex (sensor DHT). Si n'hi ha algun (-), canvieu-lo.

utilitzarem dues biblioteques en aquest instructiu, DHT_Sensor i Adafruit_Sensor

Pas 3: Codi per a Arduino

Codi per a Arduino
Codi per a Arduino

Ara, permetem que Python i Arduino parlin junts. En primer lloc, necessitem un programa senzill per fer que l’Arduino enviï dades pel port sèrie. El següent programa és un programa senzill que tindrà el recompte d'Arduino i enviarà les dades al port sèrie.

Codi Arduino

#include tempC flotant "DHT.h"; // Temperatura variable o de manteniment en C float tempF; // Variable per mantenir la temperatura en humitat flotant F; // Variable per mantenir la lectura de pressió

#define DHTPIN 7 // a quin pin digital estem connectats

#define DHTTYPE DHT11 // DHT 11

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

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

// Inicialitzar el sensor DHT.

DHT dht (DHTPIN, DHTTYPE);

configuració nul·la () {Serial.begin (115200); // activar el monitor sèrie

dht.begin (); // inicialitzar dht}

bucle buit () {tempC = dht.readTemperature (); // Assegureu-vos de declarar les vostres variables

humitat = dht.readHumidity (); // Llegir Humitat

Serial.print (tempC);

Serial.print (",");

Serial.print (humitat);

Serial.print ("\ n"); // per a nou linedelay (2000); // Pausa entre lectures. }

Un cop s'hagi compilat l'esbós, seleccioneu el tauler i el port i pengeu-lo.

Pas 4: configureu Raspberry Pi

Configuració de Raspberry Pi
Configuració de Raspberry Pi

Un cop carregat el codi, instal·leu algunes biblioteques perquè puguem traçar un gràfic de dades que provenen en sèrie d'Arduino Uno.

1. PySerial és una biblioteca que proporciona suport per a connexions en sèrie a través de diversos dispositius. Per instal·lar-lo utilitzeu l'ordre.

Sudo apt-get install python-serial

2. Numpy és un paquet que defineix un objecte de matriu multidimensional i funcions matemàtiques ràpides associades que hi operen. També proporciona rutines simples per a l’àlgebra lineal i FFT (Transformada de Fourier ràpida) i sofisticada generació de nombres aleatoris. Podeu instal·lar-lo de moltes maneres: utilitzeu apt package o pip. Aquí estic instal·lant amb pip perquè primer hem d’instal·lar pip

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

sudo pip instal·la numpy

o si voleu utilitzar el paquet apt

sudo apt install python-numpy

3. Matplotlib és una biblioteca de dibuix 2D que proporciona una API orientada a objectes per incrustar gràfics en aplicacions que utilitzen jocs d’eines GUI d’ús general com Tkinter, wxPython, Qt o GTK +. Per instal·lar-lo utilitzeu l'ordre

sudo pip instal·lar matplotlib

o bé

sudo apt install python-matplotlib

4. El dibuix s'utilitza generalment per veure els resultats després de cada iteració, ja que fem servir "imshow" a MATLAB. Per instal·lar-lo utilitzeu l'ordre

sudo pip instal·la drawow

Pas 5: Python Scipt

Python Scipt
Python Scipt
Python Scipt
Python Scipt

El següent pas és escriure un script Python per al qual pugueu utilitzar qualsevol editor per escriure'l.

1. Representa les dades en un gràfic

importa la sèrie # importa la biblioteca serial

import numpy # Importa numpy

importa matplotlib.pyplot com a llibreria # import matplotlib

des de la importació de dibuixos *

tempC = #Ehumid array array =

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

plt.ion () # mode interactiu per representar el recompte de dades en viu = 0

def makeFig (): #Crea una funció que faci la trama desitjada

plt.ylim (20, 30) # Establir valors mínims i màxims

plt.title ("Dades DHT11 en temps real") # Traceu el títol

plt.grid (True) # Activa la graella

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

plt.plot (tempC, 'b ^ -', label = 'Grau C') #plot la temperatura

plt.legend (loc = 'superior dret') #plot la llegenda

plt2 = plt.twinx () # Crea un segon eix y

plt.ylim (50, 70) # Establir límits del segon eix y

plt2.plot (humitat, 'g * -', label = 'Humitat') #plot dades de pressió

plt2.set_ylabel ('Humitat') #label segon eix y

plt2.ticklabel_format (useOffset = False)

plt2.legend (loc = 'esquerra superior')

mentre és cert: # bucle mentre es fa un bucle per sempre

while (arduino.inWaiting () == 0): # Espereu aquí fins que hi hagi dades

passar # no fer res

arduinoString = arduino.readline ()

dataArray = arduinoString.split (',') #Split en una matriu

temp = float (dataArray [0])

hum = float (dataArray [1])

tempC.append (temp)

humitat.afegir (brunzit)

dibuixat (makeFig)

plt.pause (.000001)

compta = compta + 1 si (compta> 20): # només pren les últimes 20 dades si les dades són més, apareixerà primer

tempC.pop (0)

humitat.pop (0)

2. Representar la humitat i la temperatura per separat

importa la sèrie # importa la biblioteca serial

import numpy # Importa numpy

importa matplotlib.pyplot com a llibreria # import matplotlib

des de la importació de dibuixos *

tempC = # Matriu buida

humitat =

arduino = serial. Serial ("/ dev / ttyACM0", 115200) # Port serial al qual està connectat arduino i Baudrate

plt.ion () #Tell matplotlib que voleu el mode interactiu per representar dades en viu

def CreatePlot (): #Crea una funció que faci la trama desitjada

plt.subplot (2, 1, 1) #Altura, Amplada, Primera parcel·la

plt.ylim (22, 34) #Set y valors mínims i màxims

plt.title ("Dades DHT11 en temps real") # Traceu el títol

plt.grid (True) # Activa la graella

plt.ylabel ('Temp C') #Set ylabels

plt.plot (tempC, 'b ^ -', label = 'Grau C') #plot la temperatura

plt.legend (loc = 'centre superior') #plot la llegenda

plt.subplot (2, 1, 2) # Altura, amplada, segona trama

plt.grid (True)

plt.ylim (45, 70) # Establir límits del segon eix y

plt.plot (humitat, 'g * -', label = 'Humitat (g / m ^ 3)') #plot data data

plt.ylabel ('Humitat (g / m ^ 3)') #label segon eix y

plt.ticklabel_format (useOffset = False) # per aturar l’escala automàtica de l’eix y

plt.legend (loc = 'centre superior')

mentre és cert: # Mentre es fa un bucle per sempre

while (arduino.inWaiting () == 0): # Espereu aquí fins que hi hagi dades passades # no fer res

arduinoString = arduino.readline () #llegeix les dades des del port sèrie

dataArray = arduinoString.split (',') #Split en una matriu

temp = float (dataArray [0]) #Converteix el primer element en nombre flotant i posa temp

hum = float (dataArray [1]) #Converteix el segon element en nombre flotant i posa-hi hum

tempC.append (temp) #Construeix el nostre array tempC afegint la lectura temporal

humitat.append (brunzit) #Construint la nostra matriu d'humitat afegint la lectura del brunzit

dibuixat (CreatePlot)

plt.pause (.000001)

comptar = comptar + 1

if (recompte> 20): #nol prendre les últimes 20 dades si les dades són més, apareixerà primer

tempC.pop (0) # surt el primer element

humitat.pop (0)

Pas 6: Diagrama de circuits

Esquema de connexions
Esquema de connexions
Esquema de connexions
Esquema de connexions
Esquema de connexions
Esquema de connexions

Arduino ==> DHT11

3,3 V ==> VCC

GND ==> GND

D7 ==> OUT

Recomanat: