Mundarija:
Video: Raspberry Pi va Arduino UNO yordamida DHT11 ma'lumotlarini chizish: 7 qadam
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
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
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
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
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
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
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
Arduino ==> DHT11
3.3V ==> VCC
GND ==> GND
D7 ==> OUT