Talaan ng mga Nilalaman:

Plot DHT11 Data Gamit ang Raspberry Pi at Arduino UNO: 7 Mga Hakbang
Plot DHT11 Data Gamit ang Raspberry Pi at Arduino UNO: 7 Mga Hakbang

Video: Plot DHT11 Data Gamit ang Raspberry Pi at Arduino UNO: 7 Mga Hakbang

Video: Plot DHT11 Data Gamit ang Raspberry Pi at Arduino UNO: 7 Mga Hakbang
Video: MQTT in Python | building MQTT dashboard 2024, Nobyembre
Anonim
Plot DHT11 Data Gamit ang Raspberry Pi at Arduino UNO
Plot DHT11 Data Gamit ang Raspberry Pi at Arduino UNO

Ipinapaliwanag ng tagubilin na ito kung paano ko binabalangkas ang data ng sensor ng temperatura DHT11 gamit ang Arduino Uno at Raspberry Pi. Sa temperatura sensor na ito ay konektado sa Arduino Uno at Arduino Uno ay konektado serally sa Raspberry Pi. Sa Raspberry Pi Side, ang mga library ng matplotlib, numpy at drawnow ay ginagamit upang magplano ng mga grap.

Hakbang 1: Mga Bagay na Kailangan para sa Proyekto

Mga Bagay na Kailangan para sa Proyekto
Mga Bagay na Kailangan para sa Proyekto
Mga Bagay na Kailangan para sa Proyekto
Mga Bagay na Kailangan para sa Proyekto
Mga Bagay na Kailangan para sa Proyekto
Mga Bagay na Kailangan para sa Proyekto

1. Raspberry Pi

2. Arduino Uno

3. DHT11 Temperatura Sensor

4. Mga Jumper Wires

5. Breadboard

Hakbang 2: I-download at I-install ang Arduino IDE sa Raspberry Pi

I-download at I-install ang Arduino IDE sa Raspberry Pi
I-download at I-install ang Arduino IDE sa Raspberry Pi
I-download at I-install ang Arduino IDE sa Raspberry Pi
I-download at I-install ang Arduino IDE sa Raspberry Pi
I-download at I-install ang Arduino IDE sa Raspberry Pi
I-download at I-install ang Arduino IDE sa Raspberry Pi

Tandaan: - Maaari mong gamitin ang Arduino IDE ng mga windows, Linux o Mac upang mag-upload ng sketch sa Arduino UNO.

Ang unang hakbang ay ang pag-install ng Arduino IDE para sa bukas na browser sa Raspberry Pi at buksan ang link na ibinigay sa ibaba

Arduino Nakaraang IDE

Pagkatapos i-download ang bersyon ng Linux ARM at kunin ito gamit ang command

tar -xf pangalan ng file

Pagkatapos ng pagkuha ay makikita mo ang isang bagong direktoryo. Narito gumagamit ako ng arduino-1.8.2 IDE. Pagkatapos ay pumunta sa direktoryo sa pamamagitan ng paggamit ng utos.

cd arduino-1.8.1

Upang patakbuhin ang Arduino IDE, gamitin ang utos na ito sa direktoryo ng arduino-1.8.2

./arduino

Paano gumamit ng mga aklatan

Upang mai-install ang anumang mga aklatan sa Arduino, i-download lamang ang library at i-paste sa arduino 1.8.2 ==> folder ng mga aklatan.

TANDAAN: - Siguraduhing walang (-) sa folder ng library para sa ex (DHT-sensor). Kung mayroong (-), palitan ang pangalan.

gagamitin namin ang dalawang aklatan sa itinuturo na ito, DHT_Sensor at Adafruit_Sensor

Hakbang 3: Code para sa Arduino

Code para sa Arduino
Code para sa Arduino

Ngayon, hinayaan nating magkasama ang pag-uusap ng sawa at Arduino. Una kailangan namin ng isang simpleng programa upang makuha ang pagpapadala ng Arduino ng data sa serial port. Ang sumusunod na programa ay isang simpleng programa na magkakaroon ng bilang ng Arduino at ipadala ang data sa serial port.

Code ng Arduino

# isama ang "DHT.h" float tempC; // Variable o holding temp sa C float tempF; // Variable para sa paghawak ng temp sa F float na halumigmig; // Variable para sa pagpindot sa pagbabasa ng presyon

#define DHTPIN 7 // kung anong digital pin ang nakakonekta sa amin

# tukuyin ang DHTTYPE DHT11 // DHT 11

// # tukuyin ang DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

// # tukuyin ang DHTTYPE DHT21 // DHT 21 (AM2301)

// Initialize DHT sensor.

DHT dht (DHTPIN, DHTTYPE);

void setup () {Serial.begin (115200); // i-on ang serial monitor

dht.begin (); // initialize dht}

void loop () {tempC = dht.readTemperature (); // Siguraduhing ideklara ang iyong mga variable

halumigmig = dht.readHumidity (); // Basahin ang Humidity

Serial.print (tempC);

Serial.print (",");

Serial.print (halumigmig);

Serial.print ("\ n"); // para sa bagong linedelay (2000); // I-pause sa pagitan ng mga pagbasa. }

Kapag naipon ang sketch, piliin ang board at port at i-upload ito.

Hakbang 4: I-setup ang Raspberry Pi

I-setup ang Raspberry Pi
I-setup ang Raspberry Pi

Kapag na-upload na ang code, Mag-install ng ilang mga aklatan upang makapagplano kami ng graph ng data na darating nang serial mula sa Arduino Uno.

1. Ang PySerial ay isang silid-aklatan na nagbibigay ng suporta para sa mga serial na koneksyon sa iba't ibang mga iba't ibang mga aparato. Upang mai-install ito gumamit ng utos.

Sudo apt-get install python-serial

2. Ang Numpy ay isang pakete na tumutukoy sa isang multi-dimensional na object ng array at nauugnay na mga mabilis na pag-andar ng matematika na gumana dito. Nagbibigay din ito ng mga simpleng gawain para sa linear algebra at FFT (Fast Fourier Transform) at sopistikadong henerasyon na random-number. Maaari mo itong mai-install sa maraming paraan alinman sa gumamit ng apt package o pip. Narito ang aking pag-install gamit ang pip para sa unang kailangan naming mag-install ng pip

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

sudo pip install numpy

o kung nais mong gumamit ng apt package

sudo apt i-install ang python-numpy

3. Ang Matplotlib ay isang 2D na paglalagay ng silid-aklatan na nagbibigay ng isang object na nakatuon sa API para sa pag-embed ng mga plots sa mga application gamit ang mga pangkalahatang layunin na toolkit ng GUI tulad ng Tkinter, wxPython, Qt, o GTK +. Upang mai-install ito gumamit ng utos

sudo pip install matplotlib

o

sudo apt i-install ang python-matplotlib

4. Ang drawnow ay karaniwang ginagamit upang makita ang mga resulta pagkatapos ng bawat pag-ulit habang gumagamit kami ng "imshow" sa MATLAB. Upang mai-install ito gumamit ng utos

sudo pip install drawnow

Hakbang 5: Python Scipt

Python Scipt
Python Scipt
Python Scipt
Python Scipt

Susunod na hakbang ay ang pagsulat ng isang script ng sawa para sa na maaari mong gamitin ang anumang editor upang isulat ito.

1. Plot data sa isang grap

i-import ang serial # import Serial Library

i-import ang numpy # I-import ang numpy

i-import ang matplotlib.pyplot bilang plt #import matplotlib library

mula sa drawnow import *

tempC = #Empty arrayhumidity =

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

plt.ion () # interactive mode upang magplano ng live na datacount = 0

def makeFig (): # Lumikha ng isang pagpapaandar na gumagawa ng aming nais na balangkas

plt.ylim (20, 30) #Set y min at max na mga halaga

plt.title ('Real Time DHT11 Data') #Iplay ang pamagat

plt.grid (True) #I-on ang grid

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

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

plt.legend (loc = 'itaas na kanan') #plot the legend

plt2 = plt.twinx () # Lumikha ng pangalawang y axis

plt.ylim (50, 70) #Itakda ang mga limitasyon ng pangalawang y axis

plt2.plot (halumigmig, 'g * -', label = 'Humidity') #plot pressure data

plt2.set_ylabel ('Humidity') #label pangalawang y axis

plt2.ticklabel_format (useOffset = Mali)

plt2.legend (loc = 'itaas na kaliwa')

habang Totoo: # Habang loop na loop na magpakailanman

habang (arduino.inWaiting () == 0): # Maghintay dito hanggang sa mayroong data

ipasa ang # walang anuman

arduinoString = arduino.readline ()

dataArray = arduinoString.split (',') #Split ito sa isang array

temp = float (dataArray [0])

hum = float (dataArray [1])

tempC.append (temp)

halumigmig.append (hum)

drawnow (makeFig)

plt.pause (.000001)

count = count + 1 kung (count> 20): # Tanging magtagal ng huling 20 data kung ang data ay higit na ito ay pop muna

tempC.pop (0)

halumigmig.pop (0)

2. Upang magkahiwalay na balangkas ng kahalumigmigan at temperatura

i-import ang serial # import Serial Library

i-import ang numpy # I-import ang numpy

i-import ang matplotlib.pyplot bilang plt #import matplotlib library

mula sa drawnow import *

tempC = #Mga sintomas ng array

halumigmig =

arduino = serial. Serial ("/ dev / ttyACM0", 115200) #Serial port kung saan ang arduino ay konektado at Baudrate

plt.ion () #Sabihin matplotlib na nais mong interactive mode upang magbalangkas ng live na data

def CreatePlot (): # Lumikha ng isang pagpapaandar na gumagawa ng aming nais na balangkas

plt.subplot (2, 1, 1) # Taas, Lapad, Unang balangkas

plt.ylim (22, 34) #Set y min at max na mga halaga

plt.title ('Real Time DHT11 Data') #Iplay ang pamagat

plt.grid (True) #I-on ang grid

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

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

plt.legend (loc = 'itaas na gitna') #plot ang alamat

plt.subplot (2, 1, 2) # Taas, Lapad, Pangalawang balangkas

plt.grid (Totoo)

plt.ylim (45, 70) #Itakda ang mga limitasyon ng pangalawang y axis

plt.plot (kahalumigmigan, 'g * -', label = 'Humidity (g / m ^ 3)') #plot data ng kahalumigmigan

plt.ylabel ('Humidity (g / m ^ 3)') #label pangalawang y axis

plt.ticklabel_format (useOffset = Mali) #to ihinto ang autoscale y axis

plt.legend (loc = 'itaas na gitna')

habang Totoo: # Habang loop na loop na magpakailanman

habang (arduino.inWaiting () == 0): # Maghintay dito hanggang sa may dumaan na data #walan ng anuman

arduinoString = arduino.readline () #read the data from serial port

dataArray = arduinoString.split (',') #Split ito sa isang array

temp = float (dataArray [0]) # I-convert ang unang elemento sa lumulutang na numero at ilagay sa temp

hum = float (dataArray [1]) # I-convert ang pangalawang elemento sa lumulutang na numero at ilagay sa hum

tempC.append (temp) #Buo ang aming tempC array sa pamamagitan ng pagdaragdag ng pagbabasa ng temp

halumigmig.append (hum) #Pagbuo ng aming hanay ng kahalumigmigan sa pamamagitan ng pagdaragdag ng pagbabasa ng hum

drawnow (CreatePlot)

plt.pause (.000001)

bilangin = bilangin + 1

kung (count> 20): # Tanging kumuha ng huling 20 data kung ang data ay higit na ito ay pop muna

tempC.pop (0) # pop out first element

halumigmig.pop (0)

Hakbang 6: Diagram ng Circuit

Diagram ng Circuit
Diagram ng Circuit
Diagram ng Circuit
Diagram ng Circuit
Diagram ng Circuit
Diagram ng Circuit

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> LABAS

Inirerekumendang: