INHOUDSOPGAWE:

Stel DHT11 -data op met Raspberry Pi en Arduino UNO: 7 stappe
Stel DHT11 -data op met Raspberry Pi en Arduino UNO: 7 stappe

Video: Stel DHT11 -data op met Raspberry Pi en Arduino UNO: 7 stappe

Video: Stel DHT11 -data op met Raspberry Pi en Arduino UNO: 7 stappe
Video: Установка приложения ArduBlock 2024, November
Anonim
Stel DHT11 -data op met Raspberry Pi en Arduino UNO
Stel DHT11 -data op met Raspberry Pi en Arduino UNO

Hierdie instruksies verduidelik hoe ek die temperatuur sensor DHT11 data met behulp van Arduino Uno en Raspberry Pi plot. In hierdie temperatuursensor is verbinding met Arduino Uno en Arduino Uno is serieel verbind met Raspberry Pi. By Raspberry Pi Side word matplotlib-, numpy- en drawow -biblioteke gebruik om grafieke te teken.

Stap 1: Dinge wat nodig is vir die projek

Dinge wat nodig is vir die projek
Dinge wat nodig is vir die projek
Dinge wat nodig is vir die projek
Dinge wat nodig is vir die projek
Dinge wat nodig is vir die projek
Dinge wat nodig is vir die projek

1. Framboos Pi

2. Arduino Uno

3. DHT11 Temperatuursensor

4. Springdrade

5. Broodbord

Stap 2: Laai en installeer Arduino IDE in Raspberry Pi

Laai en installeer Arduino IDE in Raspberry Pi
Laai en installeer Arduino IDE in Raspberry Pi
Laai en installeer Arduino IDE in Raspberry Pi
Laai en installeer Arduino IDE in Raspberry Pi
Laai en installeer Arduino IDE in Raspberry Pi
Laai en installeer Arduino IDE in Raspberry Pi

Nota:- U kan Arduino IDE van Windows, Linux of Mac gebruik om skets in Arduino UNO op te laai.

Die eerste stap is om Arduino IDE vir die oop blaaier in Raspberry Pi te installeer en die onderstaande skakel oop te maak

Arduino Vorige IDE

Laai dan die Linux ARM -weergawe af en haal dit uit met die opdrag

tar -xf lêernaam

Na uittreksel sien u 'n nuwe gids. Hier gebruik ek arduino-1.8.2 IDE. Gaan dan na die gids deur die opdrag te gebruik.

cd arduino-1.8.1

Gebruik hierdie opdrag in die arduino-1.8.2-gids om Arduino IDE uit te voer

./arduino

Hoe om biblioteke te gebruik

Om 'n biblioteek in Arduino te installeer, laai die biblioteek af en plak dit in die gids arduino 1.8.2 ==> biblioteke.

OPMERKING:-Maak seker dat daar geen (-) in die biblioteekmap vir ex (DHT-sensor) is nie. As daar enige (-) is, hernoem dit.

ons sal twee biblioteke in hierdie instruksies gebruik, DHT_Sensor en Adafruit_Sensor

Stap 3: Kode vir Arduino

Kode vir Arduino
Kode vir Arduino

Laat ons nou luislang en Arduino aan die praat kry. Eerstens benodig ons 'n eenvoudige program om die Arduino -data oor die seriële poort te stuur. Die volgende program is 'n eenvoudige program met die Arduino -telling en stuur die data na die seriële poort.

Arduino -kode

#sluit 'DHT.h' vlot tempC in; // Veranderlike of hou temp in C float tempF; // Veranderlik om temperatuur in F -vlottervochtigheid te hou; // Veranderlik vir drukdrukmeting

#define DHTPIN 7 // aan watter digitale pen ons gekoppel is

#define DHTTYPE DHT11 // DHT 11

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

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

// Initialiseer DHT -sensor.

DHT dht (DHTPIN, DHTTYPE);

ongeldige opstelling () {Serial.begin (115200); // skakel die seriële monitor aan

dht.begin (); // initialiseer dht}

leemte -lus () {tempC = dht.readTemperature (); // Maak seker dat u u veranderlikes verklaar

humiditeit = dht.readHumidity (); // Lees Humiditeit

Serial.print (tempC);

Serial.print (",");

Reeks.afdruk (humiditeit);

Serial.print ("\ n"); // vir nuwe gevoerde lêer (2000); // Pouse tussen lesings. }

Sodra die skets saamgestel is, kies die bord en poort en laai dit op.

Stap 4: Stel Raspberry Pi op

Stel Raspberry Pi op
Stel Raspberry Pi op

Sodra die kode opgelaai is, installeer 'n paar biblioteke sodat ons 'n grafiek kan teken van die data wat in serie uit die Arduino Uno kom.

1. PySerial is 'n biblioteek wat ondersteuning bied vir reeksverbindings oor verskillende toestelle. Gebruik die opdrag om dit te installeer.

Sudo apt-get install python-reeks

2. Numpy is 'n pakket wat 'n multidimensionele skikkingvoorwerp en gepaardgaande vinnige wiskundige funksies definieer wat daarop werk. Dit bied ook eenvoudige roetines vir lineêre algebra en FFT (Fast Fourier Transform) en gesofistikeerde generering van ewekansige getalle. U kan dit op baie maniere installeer, met behulp van 'n geskikte pakket of pip. Hier installeer ek met behulp van pip, daarvoor moet ons eers pip installeer

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

sudo pip installeer numpy

of as u 'n geskikte pakket wil gebruik

sudo apt installeer python-numpy

3. Matplotlib is 'n 2D-plotbiblioteek wat 'n objekgeoriënteerde API bied om erwe in programme in te sluit deur gebruik te maak van algemene GUI-toolkits soos Tkinter, wxPython, Qt of GTK+. Gebruik die opdrag om dit te installeer

sudo pip installeer matplotlib

of

sudo apt installeer python-matplotlib

4. Drawnow word gewoonlik gebruik om die resultate na elke herhaling te sien, aangesien ons 'imshow' in MATLAB gebruik. Gebruik die opdrag om dit te installeer

sudo pip installeer drawow

Stap 5: Python Scipt

Python Scipt
Python Scipt
Python Scipt
Python Scipt

Die volgende stap is om 'n python -script te skryf, waarvoor u enige redakteur kan gebruik om dit te skryf.

1. Teken data in een grafiek

invoer reeks # invoer reeksbiblioteek

invoer numpy # Invoer numpy

voer matplotlib.pyplot in as plt #import matplotlib biblioteek

vanaf die invoer *

tempC = #Leë reeks humiditeit =

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

plt.ion () # interaktiewe modus om lewendige datacount = 0 op te stel

def makeFig (): #Skep 'n funksie wat ons gewenste plot maak

plt.ylim (20, 30) #Stel y min en maksimum waardes

plt.title ('Real Time DHT11 -data') #Plaas die titel

plt.grid (waar) #Skakel die rooster aan

plt.ylabel ('Temp C') #Stel etiket in

plt.plot (tempC, 'b^-', label = 'Graad C') #plot die temperatuur

plt.legend (loc = 'regs bo') #plot die legende

plt2 = plt.twinx () #Skep 'n tweede y -as

plt.ylim (50, 70) #Stel die grense van die tweede y -as

plt2.plot (humiditeit, 'g*-', label = 'Humiditeit') #plotdrukdata

plt2.set_ylabel ('humiditeit') #etiket tweede y -as

plt2.ticklabel_format (useOffset = Onwaar)

plt2.legend (loc = 'links bo')

terwyl dit waar is: # Terwyl die lus vir ewig loop

terwyl (arduino.inWaiting () == 0): #Wag hier totdat daar data is

slaag #doen niks

arduinoString = arduino.readline ()

dataArray = arduinoString.split (',') #Verdeel dit in 'n skikking

temp = float (dataArray [0])

hum = float (dataArray [1])

tempC.aanhang (temp)

humiditeit. voeg by (neurie)

tekening (makeFig)

pouse (.000001)

count = count+1 if (count> 20): #neem slegs die laaste 20 data, as die data meer is, verskyn dit eers

tempC.pop (0)

humiditeit.pop (0)

2. Om humiditeit en temperatuur apart te teken

invoer reeks # invoer reeksbiblioteek

invoer numpy # Invoer numpy

voer matplotlib.pyplot in as plt #import matplotlib biblioteek

vanaf invoer *

tempC = #leë skikking

humiditeit =

arduino = serial. Serial ("/dev/ttyACM0", 115200) #Seriële poort waarop arduino gekoppel is en Baudrate

plt.ion () #Vertel matplotlib dat u wil hê dat die interaktiewe modus lewendige data moet opstel

def CreatePlot (): #Skep 'n funksie wat ons gewenste plot maak

plt.subplot (2, 1, 1) #Hoogte, breedte, eerste plot

plt.ylim (22, 34) #Stel y min en maksimum waardes

plt.title ('Real Time DHT11 -data') #Plaas die titel

plt.grid (waar) #Skakel die rooster aan

plt.ylabel ('Temp C') #Stel etikette

plt.plot (tempC, 'b^-', label = 'Graad C') #plot die temperatuur

plt.legend (loc = 'upper center') #plot die legende

plt.subplot (2, 1, 2) # Hoogte, breedte, tweede plot

plt.grid (waar)

plt.ylim (45, 70) #Stel die grense van die tweede y -as

plt.plot (humiditeit, 'g*-', label = 'Humiditeit (g/m^3)') #plot humiditeitsdata

plt.ylabel ('Humidity (g/m^3)') #label tweede y -as

plt.ticklabel_format (useOffset = Onwaar) #tom outoskaal y -as te stop

plt.legend (loc = 'boonste middel')

terwyl dit waar is: # Terwyl die lus vir ewig loop

while (arduino.inWaiting () == 0): #Wag hier totdat daar data slaag #doen niks

arduinoString = arduino.readline () #lees die data vanaf die seriële poort

dataArray = arduinoString.split (',') #Verdeel dit in 'n skikking

temp = float (dataArray [0]) #Skakel die eerste element om in 'n drywende getal en sit dit in temp

hum = float (dataArray [1]) #Skakel die tweede element om in 'n drywende getal en sit hum

tempC.append (temp) #Bou ons tempC -skikking op deur temp -lees by te voeg

humiditeit. voeg by (neurie) #Bou ons humiditeitsreeks op deur die neurielesing by te voeg

drawow (CreatePlot)

pouse (.000001)

tel = tel+1

as (telling> 20): #neem slegs die laaste 20 data, as die data meer is, verskyn dit eerste

tempC.pop (0) # pop -out eerste element

humiditeit.pop (0)

Stap 6: Kringdiagram

Stroombaandiagram
Stroombaandiagram
Stroombaandiagram
Stroombaandiagram
Stroombaandiagram
Stroombaandiagram

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> UIT

Aanbeveel: