Mundarija:
Video: Arduino bilan ishlaydigan chang zarralarini nazorat qilish stantsiyasi: 4 qadam (rasmlar bilan)
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Siz o'zingizning uyingizdagi changning ifloslanishini 50 dollardan past narxda kuzatib boradigan va o'zingizning uyingizdagi changning ifloslanishini kuzatadigan moslamalarni o'z qo'llaringiz bilan qilishingiz mumkin, shuning uchun siz xonani ventilyatsiya qilishingiz mumkin. Agar siz ifloslangan hududda yashasangiz, tashqariga chiqish xavfsiz.
Men buni maktab loyihasi sifatida qildim, shuning uchun MQTT xabarlarini qabul qiladigan va ularni sizga bildirishnoma yoki elektron pochta kabi yuboradigan xizmatni topishga vaqtim yo'q edi.
Shuni ham yodda tutingki, datchikni har doim quvvatlantirib turish fanning ishlash muddatini qisqartiradi.
1 -qadam: kerakli qismlar
Sizga nima kerak
- Arduino Uno
- Arduino Ethernet qalqoni
- Partikulyar modda lazer sensori (odatda eBay/aliexpress-da $ 10 dan $ 30 gacha)
- DHT11 harorat va namlik sensori (ixtiyoriy)
- Non paneli
- Jumper kabellari
2 -qadam: qismlarni yig'ing
Birinchidan, Arduino -da chekilgan qalqonni ulashingiz kerak
PM sensorida bir nechta simlar bor, lekin bizga VCC, GND, TX, RX kerak.
VCC va GND ni mos ravishda non panelidagi + va - ga ulang.
Arduino -da RX va TX apparatlari bor, lekin biz 2 va 3 -pinlarda RX va TX pinlarini dasturiy taqlididan foydalanamiz. Sensorning RX -ni Arduino -ning TX -ga va sensorning TX -ni Arduino -ning RX -ga ulang.
Agar siz harorat sensori ishlatmoqchi bo'lsangiz, VCC va GND chiziqlarini Breadboard -dagi + va - ga va ma'lumotlar chizig'ini 7 -pinga ulang.
3 -qadam: Kod
Siz MQTT brokerini malina pi yoki har doim uyda bo'lgan kompyuterga o'rnatishingiz yoki Cloud MQTT kabi bulutli MQTT xizmatidan foydalanishingiz mumkin. Keyin siz IFTT veb -kancasiga ma'lumotlarni HTTP sifatida yuboradigan skript yozishingiz mumkin, chunki ular hali MQTT veb -kancalarini qo'llab -quvvatlamaydi va sizning uyingizda chang darajasi juda yuqori bo'lganda xabarnomalarni o'rnatadi.
Arduino havo stantsiyasi
#qo'shing |
#qo'shing |
#qo'shing |
#qo'shing |
#qo'shing |
#qo'shing |
#qo'shing |
#qo'shing |
#belgilashDHT11_PIN7 |
#ta'rifRX_PIN2 |
#defineTX_PIN3 |
IPAddress ip (169, 169, 100, 98); |
baytli mak = { |
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 |
}; |
constchar *mqtt_server = "m23.cloudmqtt.com"; |
doimiy mqtt_port = 11895; |
constchar *mqtt_user = "jetjewk"; |
constchar *mqtt_pass = "QB2p9PiMV6pn"; |
constchar *mqtt_client_name = "arduinoClient1"; // Mijoz ulanishlari bir xil ulanish nomiga ega bo'la olmaydi |
EthernetClient ethClient; |
PubSubClient mijozi (ethClient); |
SoftwareSerial pmSerial (RX_PIN, TX_PIN); |
DHT bilan; |
int pm1; |
int pm2_5; |
int pm10; |
imzosiz identifikator; |
// Fayl myFile; |
Satr s; |
StaticJsonBuffer <200> jsonBuffer; |
JsonObject & root = jsonBuffer.createObject (); |
voidsetup () { |
Serial.begin (57600); |
pmSerial.begin (9600); |
id = 0; |
pm1 = 0; |
pm2_5 = 0; |
pm10 = 0; |
agar (Ethernet.begin (mac) == 0) |
{ |
Serial.println ("Ethernetni DHCP yordamida sozlab bo'lmadi"); |
// sobit IP addr bilan urinish |
Ethernet.begin (mac, ip); |
} |
client.setServer (mqtt_server, mqtt_port); |
client.setCallback (qayta qo'ng'iroq qilish); |
kechikish (2000); |
Serial.println (Ethernet.localIP ()); |
client.connect ("arduinoClient", mqtt_user, mqtt_pass); |
Serial.print ("rc ="); |
Serial.print (client.state ()); |
Serial.print ("\ n"); |
} |
voidloop () { |
intindex = 0; |
char qiymati; |
char oldingiValue; |
agar (! client.connected ()) |
{ |
agar (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) { |
Serial.println ("ulangan"); |
} |
} |
while (pmSerial.available ()) { |
qiymati = pmSerial.read (); |
agar ((indeks == 0 && qiymati! = 0x42) || (indeks == 1 va& qiymati! = 0x4d)) { |
Serial.println ("Ma'lumotlar sarlavhasini topib bo'lmadi."); |
qaytish; |
} |
agar (indeks == 4 || indeks == 6 || indeks == 8 || indeks == 10 || indeks == 12 || indeks == 14) { |
oldingiValue = qiymat; |
} |
elseif (indeks == 5) { |
pm1 = 256 * oldingiValue + qiymati; |
ildiz ["pm1"] = abs (pm1); |
} |
elseif (indeks == 7) { |
pm2_5 = 256 * oldingiValue + qiymati; |
ildiz ["pm2_5"] = abs (pm2_5); |
} |
elseif (indeks == 9) { |
pm10 = 256 * oldingiValue + qiymati; |
ildiz ["pm10"] = abs (pm10); |
} |
elseif (indeks> 15) { |
tanaffus; |
} |
indeks ++; |
} |
while (pmSerial.available ()) pmSerial.read (); |
int chk = DHT.read11 (DHT11_PIN); |
agar (DHT harorati == -999 || DHT. namlik == -999) { |
ildiz ["harorat"] = "Yo'q"; |
ildiz ["namlik"] = "Yo'q"; |
} boshqa { |
ildiz ["harorat"] = DHT.harorat; |
ildiz ["namlik"] = DHT. namlik; |
} |
sendResults (); |
id ++; |
kechikish (5000); |
} |
voidsendResults () { |
// MQTT -da chop etish |
char jsonChar [100]; |
root.printTo (jsonChar); |
Serial.println (client.publish ("arduino", jsonChar)); |
// ketma -ket disk raskadrovka |
root.printTo (ketma -ket); |
Serial.print ('\ n'); |
} |
// Obuna bo'lgan mavzularga kelgan xabarlarni boshqaradi. |
voidcallback (char* mavzu, bayt* yuk, imzosiz uzunlik) { |
} |
GitHub ❤ tomonidan joylashtirilgan rawair_quality.ino -ni ko'rish
4 -qadam: qutini yig'ing
Men shunchaki yotgan qutimni ishlatdim va sensordan havo olish uchun teshik ochdim va kabellar chiqib ketishi uchun teshik kesib tashladim (garchi u juda katta bo'lsa ham).
Sensorni qutiga mahkamlash uchun elim yostiqchalarini ishlatardim, sensorning kirish teshigini qutidagi burg'ulash teshigiga moslashtirdim.
Nihoyat, men chekilgan tarmoq va quvvat kabellarini uladim.