Sadržaj:
Video: Arduino stanica za nadzor čestica prašine: 4 koraka (sa slikama)
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
Možete prilično jednostavno izgraditi "uradi sam" uređaj za stvari koje prati zagađenje prašine u vašem domu za manje od 50 USD i primati obavijesti kada razina prašine postane previsoka kako biste mogli prozračiti sobu ili je postaviti van i dobiti obavijest ako je sigurno izlazite van ako živite u visoko zagađenom području.
Ovo sam napravio kao školski projekt, pa nisam imao dovoljno vremena da pronađem uslugu koja će primati MQTT poruke i slati vam ih poput obavijesti ili e -poruka.
Također imajte na umu da će stalno napajanje senzora smanjiti vijek trajanja ventilatora.
Korak 1: Potrebni dijelovi
Što će vam trebati
- Arduino Uno
- Arduino Ethernet štit
- Laserski senzor čestica (obično košta 10 do 30 USD na eBayu/aliexpressu)
- Senzor temperature i vlažnosti DHT11 (opcionalno)
- Oglasna ploča
- Kratki kabeli
Korak 2: Sastavite dijelove
Prvo morate priključiti Ethernet štit na Arduino
PM osjetnik ima više žica, ali potrebne su nam VCC, GND, TX, RX.
Spojite VCC i GND na + i - na matičnoj ploči.
Arduino ima hardverske RX i TX pinove, ali ćemo koristiti softversku emulaciju RX i TX pinova na pinovima 2 odnosno 3. Priključite RX osjetnika na TX na Arduinu, a TX senzora na RX na Arduinu.
Ako ćete koristiti temperaturni senzor, priključite vodove VCC i GND na + i - na Breadboard -u i podatkovnu liniju na pin 7.
Korak 3: Kôd
Možete instalirati MQTT brokera na malinu pi ili računalo koje imate uvijek kod kuće ili koristiti uslugu oblaka MQTT, poput Cloud MQTT -a. Zatim možete napisati skriptu koja šalje podatke kao HTTP na IFTT webhook, jer oni još ne podržavaju MQTT webhooks i postaviti obavijesti kada razine prašine u vašem domu postanu previsoke.
Zračna stanica Arduino
#uključi |
#uključi |
#uključi |
#uključi |
#uključi |
#uključi |
#uključi |
#uključi |
#defineDHT11_PIN7 |
#defineRX_PIN2 |
#defineTX_PIN3 |
IP adresa ip (169, 169, 100, 98); |
bajt mac = { |
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 |
}; |
constchar *mqtt_server = "m23.cloudmqtt.com"; |
constint mqtt_port = 11895; |
constchar *mqtt_user = "jhetjewk"; |
constchar *mqtt_pass = "QB2p9PiMV6pn"; |
constchar *mqtt_client_name = "arduinoClient1"; // Klijentske veze ne mogu imati isti naziv veze |
EthernetClient ethClient; |
PubSubClient klijent (ethClient); |
SoftwareSerial pmSerial (RX_PIN, TX_PIN); |
dht DHT; |
int pm1; |
int pm2_5; |
int pm10; |
unsignedlong id; |
// Datoteka myFile; |
Nizovi s; |
StaticJsonBuffer <200> jsonBuffer; |
JsonObject & root = jsonBuffer.createObject (); |
voidsetup () { |
Serial.begin (57600); |
pmSerial.begin (9600); |
id = 0; |
pm1 = 0; |
pm2_5 = 0; |
pm10 = 0; |
if (Ethernet.begin (mac) == 0) |
{ |
Serial.println ("Nije uspjelo konfiguriranje Etherneta pomoću DHCP -a"); |
// pokušaj s fiksnim ip adr |
Ethernet.početak (mac, ip); |
} |
client.setServer (mqtt_server, mqtt_port); |
client.setCallback (povratni poziv); |
odgoda (2000); |
Serial.println (Ethernet.localIP ()); |
client.connect ("arduinoClient", mqtt_user, mqtt_pass); |
Serial.print ("rc ="); |
Serial.print (client.state ()); |
Serial.print ("\ n"); |
} |
voidloop () { |
intindeks = 0; |
char vrijednost; |
char previousValue; |
if (! client.connected ()) |
{ |
if (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) { |
Serial.println ("povezan"); |
} |
} |
while (pmSerial.available ()) { |
vrijednost = pmSerial.read (); |
if ((indeks == 0 && vrijednost! = 0x42) || (indeks == 1 && vrijednost! = 0x4d)) { |
Serial.println ("Ne mogu pronaći zaglavlje podataka."); |
povratak; |
} |
if (indeks == 4 || indeks == 6 || indeks == 8 || indeks == 10 || indeks == 12 || indeks == 14) { |
previousValue = vrijednost; |
} |
elseif (indeks == 5) { |
pm1 = 256 * previousValue + vrijednost; |
root ["pm1"] = abs (pm1); |
} |
elseif (indeks == 7) { |
pm2_5 = 256 * previousValue + vrijednost; |
root ["pm2_5"] = abs (pm2_5); |
} |
elseif (indeks == 9) { |
pm10 = 256 * previousValue + vrijednost; |
root ["pm10"] = abs (pm10); |
} |
elseif (indeks> 15) { |
pauza; |
} |
indeks ++; |
} |
while (pmSerial.available ()) pmSerial.read (); |
int chk = DHT.read11 (DHT11_PIN); |
if (DHT.temperature == -999 || DHT.humidity == -999) { |
root ["temperatura"] = "N/A"; |
root ["vlažnost"] = "N/A"; |
} else { |
korijen ["temperatura"] = DHT.temperatura; |
korijen ["vlažnost"] = DHT.vlažnost; |
} |
sendResults (); |
id ++; |
kašnjenje (5000); |
} |
voidsendResults () { |
// objaviti u MQTT -u |
char jsonChar [100]; |
root.printTo (jsonChar); |
Serial.println (client.publish ("arduino", jsonChar)); |
// ispravljanje pogrešaka u serijski |
root.printTo (serijski); |
Serial.print ('\ n'); |
} |
// Obrađuje poruke pristigle na pretplaćene teme |
voidcallback (char* tema, bajt* korisni teret, duljina bez potpisa) { |
} |
pogledajte rawair_quality.ino hosted with ❤ by GitHub
Korak 4: Sastavite kutiju
Upravo sam upotrijebio kutiju koju sam ležao i izbušio rupu za senzor iz kojeg je izlazio zrak i izrezao rupu za izlazak kabela (iako je bila malo prevelika).
Koristio sam jastučiće za ljepilo za pričvršćivanje senzora na kutiju, poravnavajući ulaznu rupu senzora s izbušenom rupom na kutiji.
Konačno, priključio sam Ethernet i kabele za napajanje.