Raspberry Pi va Arduino UNO yordamida DHT11 ma'lumotlarini chizish: 7 qadam
Raspberry Pi va Arduino UNO yordamida DHT11 ma'lumotlarini chizish: 7 qadam

Video: Raspberry Pi va Arduino UNO yordamida DHT11 ma'lumotlarini chizish: 7 qadam

Video: Raspberry Pi va Arduino UNO yordamida DHT11 ma'lumotlarini chizish: 7 qadam
Video: Использование Melexis MLX90614 Инфракрасный термометр с Arduino 2025, Yanvar
Anonim
Raspberry Pi va Arduino UNO yordamida DHT11 ma'lumotlarini tuzing
Raspberry Pi va Arduino UNO yordamida DHT11 ma'lumotlarini tuzing

Bu ko'rsatma men DHT11 harorat sensori ma'lumotlarini Arduino Uno va Raspberry Pi yordamida qanday tuzishimni tushuntiradi. Bu harorat sensori Arduino Uno va Arduino Uno Raspberry Pi bilan ketma -ket ulanadi. Raspberry Pi Side -da grafiklarni tuzish uchun matplotlib, numpy va drawow kutubxonalari ishlatiladi.

1 -qadam: Loyiha uchun zarur bo'lgan narsalar

Loyiha uchun zarur bo'lgan narsalar
Loyiha uchun zarur bo'lgan narsalar
Loyiha uchun zarur bo'lgan narsalar
Loyiha uchun zarur bo'lgan narsalar
Loyiha uchun zarur bo'lgan narsalar
Loyiha uchun zarur bo'lgan narsalar

1. Raspberry Pi

2. Arduino Uno

3. DHT11 harorat sensori

4. Jumper simlari

5. Non paneli

2 -qadam: Arduino IDE -ni Raspberry Pi -ga yuklab oling va o'rnating

Raspberry Pi -da Arduino IDE -ni yuklab oling va o'rnating
Raspberry Pi -da Arduino IDE -ni yuklab oling va o'rnating
Raspberry Pi -da Arduino IDE -ni yuklab oling va o'rnating
Raspberry Pi -da Arduino IDE -ni yuklab oling va o'rnating
Raspberry Pi -da Arduino IDE -ni yuklab oling va o'rnating
Raspberry Pi -da Arduino IDE -ni yuklab oling va o'rnating

Eslatma:- Arduino UNO-da eskizni yuklash uchun Windows, Linux yoki Mac-ning Arduino IDE-dan foydalanishingiz mumkin.

Birinchi qadam - Raspberry Pi -da ochiq brauzer uchun Arduino IDE -ni o'rnatish va quyida berilgan havolani ochish

Arduino oldingi IDE

Keyin Linux ARM versiyasini yuklab oling va buyruq yordamida chiqarib oling

tar -xf fayl nomi

Chiqarilgandan so'ng siz yangi katalogni ko'rasiz. Bu erda men arduino-1.8.2 IDE dan foydalanmoqdaman. Keyin buyruq yordamida katalogga o'ting.

CD arduino-1.8.1

Arduino IDE-ni ishga tushirish uchun ushbu buyruqni arduino-1.8.2 katalogidan foydalaning

./arduino

Kutubxonalardan qanday foydalanish kerak

Arduino -ga istalgan kutubxonani o'rnatish uchun kutubxonani yuklab oling va arduino 1.8.2 ==> library kutubxonasiga joylashtiring.

ESLATMA:-kutubxona papkasida (DHT-sensori) (-) yo'qligiga ishonch hosil qiling. Agar (-) bo'lsa, uni qayta nomlang.

biz ikkita kutubxonadan foydalanamiz DHT_Sensor va Adafruit_Sensor

3 -qadam: Arduino uchun kod

Arduino uchun kod
Arduino uchun kod

Keling, python va Arduino bilan birgalikda gaplashaylik. Birinchidan, Arduino ma'lumotlarini ketma -ket port orqali yuborish uchun bizga oddiy dastur kerak. Quyidagi dastur oddiy dastur bo'lib, u Arduino hisobini oladi va ma'lumotlarni ketma -ket portga yuboradi.

Arduino kodi

#"DHT.h" float tempC ni qo'shing; // C float tempF da o'zgaruvchi yoki ushlab turish harorati; // F float namligida haroratni ushlab turish uchun o'zgaruvchi; // Bosim o'qilishini ushlab turish uchun o'zgaruvchi

#DHTPIN 7 ni aniqlang // biz qanday raqamli pin bilan bog'langanmiz

#DHTTYPE DHT11 // DHT 11 ni aniqlang

//#DHTTYPE DHT22 ni aniqlang // DHT 22 (AM2302), AM2321

//#DHTTYPE DHT21 ni aniqlang // DHT 21 (AM2301)

// DHT sensorini ishga tushiring.

DHT dht (DHTPIN, DHTTYPE);

void setup () {Serial.begin (115200); // ketma -ket monitorni yoqing

dht.begin (); // boshlang dht}

void loop () {tempC = dht.readTemperature (); // O'zgaruvchilarni e'lon qilganingizga ishonch hosil qiling

namlik = dht.readHumidity (); // Namlikni o'qing

Serial.print (tempC);

Serial.print (",");

Ketma -ket bosma (namlik);

Serial.print ("\ n"); // yangi chiziqli kun uchun (2000); // O'qishlar orasidagi pauza. }

Eskiz tuzilgach, taxta va portni tanlang va yuklang.

4 -qadam: Raspberry Pi -ni o'rnating

Raspberry Pi -ni sozlash
Raspberry Pi -ni sozlash

Kod yuklangandan so'ng, Arduino Uno -dan ketma -ket keladigan ma'lumotlar grafikini tuzish uchun ba'zi kutubxonalarni o'rnating.

1. PySerial - bu turli xil qurilmalarda ketma -ket ulanishni qo'llab -quvvatlaydigan kutubxona. O'rnatish uchun buyruqdan foydalaning.

Sudo apt-get install python-serial

2. Numpy-bu ko'p o'lchovli massiv ob'ektini va unda ishlaydigan tezkor matematik funktsiyalarni belgilaydigan paket. Shuningdek, u chiziqli algebra va FFT (Fast Fourier Transform) va oddiy tasodifiy sonlarni yaratish bo'yicha oddiy tartiblarni taqdim etadi. Siz uni ko'p jihatdan apt to'plami yoki pip yordamida o'rnatishingiz mumkin. Bu erda men pip yordamida o'rnatyapman, buning uchun biz avval pip o'rnatishimiz kerak

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

sudo pip ni o'rnatish

yoki agar siz apt paketidan foydalanmoqchi bo'lsangiz

sudo apt install python-numpy

3. Matplotlib-bu 2D chizilgan kutubxona, u Tkinter, wxPython, Qt yoki GTK+kabi umumiy maqsadli GUI asboblar to'plamidan foydalangan holda dasturlarni joylashtirish uchun ob'ektga yo'naltirilgan API bilan ta'minlaydi. O'rnatish uchun buyruqdan foydalaning

sudo pip o'rnatish matplotlib

yoki

sudo apt install python-matplotlib

4. Drawnow odatda har bir iteratsiyadan keyin natijalarni ko'rish uchun ishlatiladi, chunki biz MATLABda "imshow" dan foydalanamiz. O'rnatish uchun buyruqdan foydalaning

sudo pip install drawow

5 -qadam: Python skipt

Python skript
Python skript
Python skript
Python skript

Keyingi qadam - bu python skriptini yozish, uni yozish uchun har qanday tahrirlovchidan foydalanishingiz mumkin.

1. Ma'lumotlarni bitta grafikda chizish

import serial # import Serial kutubxona

import numpy # Import numpy

matplotlib.pyplot -ni plt #import matplotlib kutubxonasi sifatida import qilish

chizilgan importdan *

tempC = #Bo'sh qator namligi =

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

plt.ion () # interaktiv rejim, jonli ma'lumotlar hisobini tuzish uchun = 0

def makeFig (): #Biz xohlagan syujetni bajaradigan funktsiyani yarating

plt.ylim (20, 30) #Min va maksimal qiymatlarni o'rnating

plt.title ('Haqiqiy vaqt DHT11 ma'lumotlari') #Sarlavhani belgilang

plt.grid (To'g'ri) #Tarmoqni yoqing

plt.ylabel ('Temp C') #Ylabelni o'rnating

plt.plot (tempC, 'b^-', label = 'C daraja') #haroratni chizish

plt.legend (loc = 'yuqori o'ng') #afsonani chizish

plt2 = plt.twinx () #Ikkinchi y o'qini yarating

plt.ylim (50, 70) #Ikkinchi y o'qining chegaralarini o'rnating

plt2.plot (namlik, 'g*-', label = 'Namlik') #uchastkadagi bosim ma'lumotlari

plt2.set_ylabel ("Namlik") #teg ikkinchi y o'qi

plt2.ticklabel_format (useOffset = False)

plt2.legend (loc = 'yuqori chap')

while True: # abadiy aylanadigan loop

while (arduino.inWaiting () == 0): #Ma'lumotlar bo'lguncha shu erda kuting

#hech narsa qilmang

arduinoString = arduino.readline ()

dataArray = arduinoString.split (',') #Uni qatorga ajratish

temp = float (dataArray [0])

hum = float (dataArray [1])

tempC.append (temp)

namlik.

chizilgan (makeFig)

pt.pauza (.000001)

count = count+1 if (count> 20): #faqat oxirgi 20 ma'lumotni oling, agar ma'lumotlar ko'p bo'lsa, u birinchi bo'lib chiqadi

tempC.pop (0)

namlik.pop (0)

2. Namlik va haroratni alohida chizish

import serial # import Serial kutubxona

import numpy # Import numpy

matplotlib.pyplot -ni plt #import matplotlib kutubxonasi sifatida import qilish

chizilgan importdan *

tempC = #Bo'sh qator

namlik =

arduino = serial. Serial ("/dev/ttyACM0", 115200) #Arduino ulangan serial port va Baudrate

plt.ion () #Matplotlib ayting, interaktiv rejimda jonli ma'lumotlarni chizish kerak

def CreatePlot (): #Biz xohlagan syujetni bajaradigan funktsiyani yarating

plt.subplot (2, 1, 1) #Boylik, Kenglik, Birinchi syujet

plt.ylim (22, 34) #Min va maksimal qiymatlarni o'rnating

plt.title ('Haqiqiy vaqt DHT11 ma'lumotlari') #Sarlavhani belgilang

plt.grid (To'g'ri) #Tarmoqni yoqing

plt.ylabel ('Temp C') #Yablagichlarni o'rnating

plt.plot (tempC, 'b^-', label = 'C daraja') #haroratni chizish

plt.legend (loc = 'yuqori markaz') #afsonani chizish

plt.subplot (2, 1, 2) # Balandlik, Kenglik, Ikkinchi uchastka

plt.grid (To'g'ri)

plt.ylim (45, 70) #Ikkinchi y o'qining chegaralarini o'rnating

plt.plot (namlik, 'g*-', label = 'Namlik (g/m^3)') #uchastka namlik ma'lumoti

plt.ylabel ('Namlik (g/m^3)') #teg ikkinchi y o'qi

plt.ticklabel_format (useOffset = False) #avtomatik o'qi y o'qini to'xtatish uchun

plt.legend (loc = "yuqori markaz")

while True: # abadiy aylanadigan loop

while (arduino.inWaiting () == 0): #Ma'lumotlar o'tguncha shu erda kuting #hech narsa qilmang

arduinoString = arduino.readline () #ma'lumotlarni ketma -ket portdan o'qing

dataArray = arduinoString.split (',') #Uni qatorga ajratish

temp = float (dataArray [0]) #Birinchi elementni suzuvchi raqamga aylantiring va tempni kiriting

hum = float (dataArray [1]) #Ikkinchi elementni suzuvchi raqamga aylantirib, xumga qo'ying

tempC.append (temp) #tempC massivini temp o'qishni qo'shish orqali yarating

namlik.append (hum) #Hum o'qishni qo'shib namlik qatorimizni qurish

chizilgan (CreatePlot)

pt.pauza (.000001)

hisoblash = hisoblash+1

if (count> 20): #faqat oxirgi 20 ma'lumotni oling, agar ma'lumotlar ko'p bo'lsa, u birinchi bo'lib chiqadi

tempC.pop (0) # birinchi element chiqadi

namlik.pop (0)

6 -qadam: O'chirish diagrammasi

O'chirish diagrammasi
O'chirish diagrammasi
O'chirish diagrammasi
O'chirish diagrammasi
O'chirish diagrammasi
O'chirish diagrammasi

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> OUT