Raspberry Pi жана Arduino UNO аркылуу DHT11 маалыматтарынын сюжети: 7 кадам
Raspberry Pi жана Arduino UNO аркылуу DHT11 маалыматтарынын сюжети: 7 кадам
Anonim
Raspberry Pi жана Arduino UNO аркылуу DHT11 маалыматтарынын сюжети
Raspberry Pi жана Arduino UNO аркылуу DHT11 маалыматтарынын сюжети

Бул көрсөтмө менин температура сенсорунун DHT11 маалыматтарын Arduino Uno жана Raspberry Pi менен кантип түзөөрүмдү түшүндүрөт. Бул температура сенсору Arduino Uno менен, Arduino Uno Raspberry Pi менен сериялык түрдө туташкан. Raspberry Pi Sideде графиктерди түзүү үчүн matplotlib, numpy жана drawow китепканалары колдонулат.

1 -кадам: Долбоорго керектүү нерселер

Долбоорго керектүү нерселер
Долбоорго керектүү нерселер
Долбоорго керектүү нерселер
Долбоорго керектүү нерселер
Долбоорго керектүү нерселер
Долбоорго керектүү нерселер

1. Raspberry Pi

2. Arduino Uno

3. DHT11 Температура Сенсору

4. Jumper Wires

5. Нан тактасы

2 -кадам: Raspberry Piдеги Arduino IDEди жүктөп алып орнотуңуз

Raspberry Piдеги Arduino IDEди жүктөп алып, орнотуңуз
Raspberry Piдеги Arduino IDEди жүктөп алып, орнотуңуз
Raspberry Piдеги Arduino IDEди жүктөп алып, орнотуңуз
Raspberry Piдеги Arduino IDEди жүктөп алып, орнотуңуз
Raspberry Piдеги Arduino IDEди жүктөп алып, орнотуңуз
Raspberry Piдеги Arduino IDEди жүктөп алып, орнотуңуз

Эскертүү:- Сиз Arduino UNOго эскиз жүктөө үчүн Windows, Linux же Macтын Arduino IDE колдоно аласыз.

Биринчи кадам - Raspberry Piдеги ачык браузерге Arduino IDE орнотуу жана төмөндө берилген шилтемени ачуу

Arduino Мурунку IDE

Андан кийин Linux ARM версиясын жүктөп алып, буйрукту колдонуп алыңыз

tar -xf файл аталышы

Чыгаргандан кийин сиз жаңы каталогду көрөсүз. Бул жерде мен arduino-1.8.2 IDE колдонуп жатам. Андан кийин буйрукту колдонуу менен каталогго өтүңүз.

cd arduino-1.8.1

Arduino IDEди иштетүү үчүн, бул буйрукту arduino-1.8.2 каталогунда колдонуңуз

./arduino

Китепканаларды кантип колдонуу керек

Ардуинодо каалаган китепканаларды орнотуу үчүн, китепкананы жүктөп алып, arduino 1.8.2 ==> китепканалар папкасына чаптаңыз.

ЭСКЕРТҮҮ:-Экс (DHT-сенсор) үчүн китепкана папкасында (-) жок экендигин текшериңиз. Эгерде кандайдыр бир (-) болсо, анын атын өзгөртүңүз.

Биз бул китепчеде эки китепкананы колдонобуз, DHT_Sensor жана Adafruit_Sensor

3 -кадам: Arduino коду

Ардуино коду
Ардуино коду

Эми, python менен Arduino чогуу сүйлөшөлү. Биринчиден, Arduino сериялык порт аркылуу маалыматтарды жөнөтүү үчүн жөнөкөй программа керек. Төмөнкү программа Arduino эсептөөчү жана сериялык портко маалыматтарды жөнөтүүчү жөнөкөй программа.

Arduino коду

#include "DHT.h" float tempC; // C float tempF ичинде өзгөрмө же кармап туруучу темп; // F калкып турган нымдуулукта температураны кармоо үчүн өзгөрмө; // Басымдуу окуу үчүн өзгөрмө

#Define DHTPIN 7 // биз кандай санариптик пинге туташып турабыз

#аныктоо DHTTYPE DHT11 // DHT 11

//#DHTTYPE DHT22 аныктоо // DHT 22 (AM2302), AM2321

//#DHTTYPE DHT21 аныктоо // DHT 21 (AM2301)

// DHT сенсорун баштоо.

DHT dht (DHTPIN, DHTTYPE);

void setup () {Serial.begin (115200); // сериялык мониторду күйгүзүү

dht.begin (); // баштоо dht}

void loop () {tempC = dht.readTemperature (); // Өзгөрмөлөрүңүздү жарыя кылууну унутпаңыз

нымдуулук = dht.readHumidity (); // Нымдуулукту окуу

Serial.print (tempC);

Serial.print (",");

Serial.print (нымдуулук);

Serial.print ("\ n"); // жаңы линейка үчүн (2000); // Окуунун ортосунда тыныгуу. }

Эскиз түзүлгөндөн кийин, тактаны жана портту тандап, жүктөңүз.

4 -кадам: Raspberry Pi орнотуу

Raspberry Pi орнотуу
Raspberry Pi орнотуу

Код жүктөлгөндөн кийин, кээ бир китепканаларды орнотуңуз, ошондо биз Arduino Unoдон келе жаткан маалыматтардын графигин түзө алабыз.

1. PySerial - бул ар кандай түзмөктөрдүн сериялык байланыштарын колдогон китепкана. Аны орнотуу үчүн, буйрукту колдонуңуз.

Sudo apt-get install python-serial

2. Numpy-бул көп өлчөмдүү массив объектисин жана аны менен байланышкан тез математикалык функцияларды аныктоочу пакет. Ал ошондой эле сызыктуу алгебра жана FFT (Fast Fourier Transform) жана татаал туш келди сандарды түзүү боюнча жөнөкөй иштерди камсыз кылат. Сиз аны ар кандай жолдор менен орното аласыз же apt пакетин же пипти колдонуңуз. Бул жерде мен пипти колдонуп орнотуп жатам, адегенде биз пипти орнотушубуз керек

Sudo apt-get python-pip python-dev install-essential орнотуу

sudo pip орнотуу numpy

же эгер сиз apt пакетин колдонууну кааласаңыз

sudo apt install python-numpy

3. Matplotlib-бул 2D графикалык китепкана, ал Tkinter, wxPython, Qt же GTK+сыяктуу жалпы максаттуу GUI инструменттерин колдонуп, сюжеттерди тиркемелерге киргизүү үчүн объектке багытталган API менен камсыз кылат. Аны орнотуу үчүн, буйрукту колдонуңуз

sudo pip орнотуу matplotlib

же

sudo apt install python-matplotlib

4. Drawnow көбүнчө MATLABда "imshow" колдонуп жаткандыктан, ар бир кайталоодон кийин натыйжаларды көрүү үчүн колдонулат. Аны орнотуу үчүн буйрукту колдонуңуз

sudo pip орнотулган

5 -кадам: Python скрипти

Python Scipt
Python Scipt
Python Scipt
Python Scipt

Кийинки кадам - бул питон скриптин жазуу, аны каалаган редакторду колдоно аласыз.

1. Маалыматтарды бир графикке салыңыз

импорттук сериялык # импорттук сериялык китепкана

импорттоо numpy # Импорттук numpy

matplotlib.pyplot импорттоо plt #import matplotlib китепканасы

тартылган импорттон *

tempC = #Empty arrayhumidity =

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

plt.ion () # интерактивдүү режими түз datacount = 0 үчүн

def makeFig (): #Биз каалаган участокту түзүүчү функцияны түзүңүз

plt.ylim (20, 30) #Min y жана max маанилерди коюңуз

plt.title ('Real Time DHT11 Data') #Аталышын жазыңыз

plt.grid (True) #Торду күйгүзүү

plt.ylabel ('Temp C') #Ylabel коюу

plt.plot (tempC, 'b^-', label = 'C Даражасы C') #температура графиги

plt.legend (loc = 'жогорку оң') #легендага сюжет

plt2 = plt.twinx () #Экинчи у огун түзүү

plt.ylim (50, 70) #Экинчи у огунун чектерин коюңуз

plt2.plot (нымдуулук, 'g*-', label = 'Нымдуулук') #участоктун басым маалыматы

plt2.set_ylabel ('Нымдуулук') #белгиси экинчи y огу

plt2.ticklabel_format (useOffset = False)

plt2.legend (loc = 'жогорку сол')

while True: # while цикли түбөлүккө айланат

while (arduino.inWaiting () == 0): #Маалымат жок болгуча бул жерде күт

#эч нерсе кылба

arduinoString = arduino.readline ()

dataArray = arduinoString.split (',') #Аны массивге бөлүү

темп = калкып чыгуу (dataArray [0])

hum = float (dataArray [1])

tempC.append (темп)

нымдуулук.

тартылган (makeFig)

plt.pause (.000001)

count = count+1 if (count> 20): #маалыматтар көбүрөөк болсо, биринчи гана 20 акыркы маалыматты алыңыз

tempC.pop (0)

nem.pop (0)

2. Нымдуулукту жана температураны өзүнчө пландаштыруу

импорттук сериялык # импорттук сериялык китепкана

импорттоо numpy # Импорттук numpy

matplotlib.pyplot импорттоо plt #import matplotlib китепканасы

тартылган импорттон *

tempC = #Бош массив

нымдуулук =

arduino = serial. Serial ("/dev/ttyACM0", 115200) #Ардуино туташкан сериялык порт жана Baudrate

plt.ion () #Айтыңыз matplotlib, интерактивдүү режимде жандуу маалыматтарды пландаштыргыңыз келет

def CreatePlot (): #Биз каалаган участокту түзүүчү функцияны түзүңүз

plt.subplot (2, 1, 1) #Бийиктиги, Туурасы, Биринчи сюжет

plt.ylim (22, 34) #Min y жана max маанилерди коюңуз

plt.title ('Real Time DHT11 Data') #Аталышын жазыңыз

plt.grid (True) #Торду күйгүзүү

plt.ylabel ('Temp C') #Жылдык белгилерди коюу

plt.plot (tempC, 'b^-', label = 'C Degree C') #температура участогу

plt.legend (loc = 'жогорку борбор') #легенда

plt.subplot (2, 1, 2) # Бийиктик, Туура, Экинчи участок

plt.grid (Чыныгы)

plt.ylim (45, 70) #Экинчи у огунун чектерин коюу

plt.plot (нымдуулук, 'g*-', label = 'Нымдуулук (g/m^3)') #участоктун нымдуулук маалыматы

plt.ylabel ('Нымдуулук (g/m^3)') #энбелгиси экинчи y огу

plt.ticklabel_format (useOffset = False) #автоматтык масштабдагы y огун токтотуу үчүн

plt.legend (loc = 'жогорку борбор')

while True: # while цикли түбөлүккө айланат

while (arduino.inWaiting () == 0): #Бул жерде маалымат өтмөйүнчө күт #эчтеке кылба

arduinoString = arduino.readline () #сериялык порттон маалыматтарды окуу

dataArray = arduinoString.split (',') #Аны массивге бөлүү

temp = float (dataArray [0]) #Биринчи элементти өзгөрмөлүү санга айлантып, темпти коюңуз

hum = float (dataArray [1]) #Экинчи элементти өзгөрмөлүү санга айландырып, хумга коюңуз

tempC.append (temp) #tempC массивин темп окуусун кошуу менен куруңуз

нымдуулук

drawow (CreatePlot)

plt.pause (.000001)

эсептөө = саноо+1

if (count> 20): #гана акыркы 20 маалыматты алып, эгер маалымат көбүрөөк болсо, анда ал биринчи чыгат

tempC.pop (0) # биринчи элемент чыгып

nem.pop (0)

6 -кадам: Райондук диаграмма

Райондук диаграмма
Райондук диаграмма
Райондук диаграмма
Райондук диаграмма
Райондук диаграмма
Райондук диаграмма

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> ЧЫГЫП

Сунушталууда: