Turinys:

„Arduino“dulkių dalelių stebėjimo stotis: 4 žingsniai (su nuotraukomis)
„Arduino“dulkių dalelių stebėjimo stotis: 4 žingsniai (su nuotraukomis)

Video: „Arduino“dulkių dalelių stebėjimo stotis: 4 žingsniai (su nuotraukomis)

Video: „Arduino“dulkių dalelių stebėjimo stotis: 4 žingsniai (su nuotraukomis)
Video: Scentroid's CTAir Continuous Urban Air Quality Monitor Seminar A 12.08.2020 (Subtitled) 2024, Lapkritis
Anonim
„Arduino“varoma dulkių dalelių stebėjimo stotis
„Arduino“varoma dulkių dalelių stebėjimo stotis

Galite gana lengvai sukurti „pasidaryk pats“daiktų interneto įrenginį, kuris stebi jūsų namų dulkių už mažiau nei 50 USD, ir gauti pranešimą, kai dulkių lygis tampa per didelis, kad galėtumėte vėdinti kambarį, arba galite nustatyti jį lauke ir gauti pranešimą, jei jis saugu išeiti į lauką, jei gyvenate labai užterštoje vietoje.

Tai padariau kaip mokyklos projektą, todėl neturėjau pakankamai laiko surasti paslaugą, kuri priims MQTT pranešimus ir išsiųs juos jums kaip pranešimus ar el.

Taip pat atkreipkite dėmesį, kad jutiklio nuolatinis maitinimas sumažins ventiliatoriaus tarnavimo laiką.

1 žingsnis: reikalingos dalys

Reikalingos dalys
Reikalingos dalys

Ko jums reikės

  • Arduino Uno
  • „Arduino Ethernet“skydas
  • Kietųjų dalelių lazerinis jutiklis (paprastai kainuoja 10–30 USD „eBay“/„aliexpress“)
  • DHT11 temperatūros ir drėgmės jutiklis (neprivaloma)
  • Bandomoji Lenta
  • Trumpieji kabeliai

2 žingsnis: Surinkite dalis

Surinkite dalis
Surinkite dalis

Pirmiausia turite prijungti „Arduino“eterneto skydą

PM jutiklis turi kelis laidus, tačiau mums reikia VCC, GND, TX, RX.

Prijunkite VCC ir GND prie + ir - duonos lentos.

„Arduino“turi aparatūros RX ir TX kaiščius, tačiau mes naudosime programinę RX ir TX kaiščių emuliaciją atitinkamai 2 ir 3 smeigtukuose. Prijunkite jutiklio RX prie „Arduino“ir „TX“prie „Arduino“.

Jei ketinate naudoti temperatūros jutiklį, prijunkite VCC ir GND linijas prie „ +“ir „Breadboard“, o duomenų linijos - prie 7 kaiščio.

3 žingsnis: Kodas

Galite įdiegti MQTT brokerį į aviečių pi arba kompiuterį, kurį visada turite namuose, arba naudoti debesies MQTT paslaugą, pvz., „Cloud MQTT“. Tada galite parašyti scenarijų, kuris siunčia duomenis kaip HTTP į IFTT žiniatinklio užraktą, nes jie dar nepalaiko MQTT žiniatinklio kabliukų ir nustatyti pranešimus, kai jūsų namuose padidėja dulkių lygis.

Arduino oro stotis

#įtraukti

#įtraukti
#įtraukti
#įtraukti
#įtraukti
#įtraukti

#įtraukti

#įtraukti
#defineDHT11_PIN7
#defineRX_PIN2
#defineTX_PIN3
IP adresas ip (169, 169, 100, 98);
baitas 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"; // Kliento ryšiai negali turėti to paties ryšio pavadinimo
„EthernetClient ethClient“;
PubSubClient klientas (ethClient);
SoftwareSerial pmSerial (RX_PIN, TX_PIN);
dht DHT;
int pm1;
int pm2_5;
int pm10;
unsignedlong ID;
// Failas myFile;
Stygos 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 ("Nepavyko konfigūruoti eterneto naudojant DHCP");
// bandymas su fiksuotu IP adresu
„Ethernet.begin“(„mac“, „ip“);
}
client.setServer (mqtt_server, mqtt_port);
client.setCallback (atšaukimas);
vėlavimas (2000 m.);
Serial.println (Ethernet.localIP ());
client.connect ("arduinoClient", mqtt_user, mqtt_pass);
Serijinis atspaudas ("rc =");
Serial.print (client.state ());
Serial.print ("\ n");
}
voidloop () {
intindex = 0;
anglies vertė;
char previousValue;
jei (! client.connected ())
{
if (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) {
Serial.println ("prijungtas");
}
}
while (pmSerial.available ()) {
vertė = pmSerial.read ();
if ((indeksas == 0 && vertė! = 0x42) || (indeksas == 1 && vertė! = 0x4d)) {
Serial.println ("Nepavyksta rasti duomenų antraštės.");
grįžti;
}
jei (indeksas == 4 || indeksas == 6 || indeksas == 8 || indeksas == 10 || indeksas == 12 || indeksas == 14) {
previousValue = vertė;
}
elseif (indeksas == 5) {
pm1 = 256 * previousValue + vertė;
šaknis ["pm1"] = abs (pm1);
}
elseif (indeksas == 7) {
pm2_5 = 256 * previousValue + vertė;
šaknis ["pm2_5"] = abs (pm2_5);
}
elseif (indeksas == 9) {
pm10 = 256 * previousValue + vertė;
šaknis ["pm10"] = abs (pm10);
}
elseif (indeksas> 15) {
pertrauka;
}
indeksas ++;
}
while (pmSerial.available ()) pmSerial.read ();
int chk = DHT.read11 (DHT11_PIN);
jei (DHT.temperatūra == -999 || DHT. drėgmė == -999) {
šaknis ["temperatūra"] = "N/A";
šaknis ["drėgmė"] = "N/A";
} Kitas {
šaknis ["temperatūra"] = DHT.temperatūra;
šaknis ["drėgmė"] = DHT. drėgmė;
}
sendResults ();
id ++;
vėlavimas (5000);
}
voidsendResults () {
// paskelbti MQTT
char jsonChar [100];
root.printTo (jsonChar);
Serial.println (client.publish ("arduino", jsonChar));
// derinti į serialą
root.printTo (Serial);
Serial.print ('\ n');
}
// Tvarko pranešimus, gautus už prenumeruojamą temą (-as)
voidcallback (char* tema, baitas* naudingoji apkrova, unsignedint ilgis) {
}

peržiūrėkite rawair_quality.ino, kurį kartu su ❤ talpina „GitHub“

4 žingsnis: Surinkite dėžutę

Surinkite dėžutę
Surinkite dėžutę
Surinkite dėžutę
Surinkite dėžutę
Surinkite dėžutę
Surinkite dėžutę

Aš tiesiog panaudojau dėžutę, kurią gulėjau, ir išgręžiau skylę jutikliui, kad gautų orą, ir iškirpiau skylę kabeliams išeiti (nors ji buvo šiek tiek per didelė).

Aš naudoju klijų pagalvėles, kad pritvirtinčiau jutiklį prie dėžutės, suderindamas jutiklio įvesties angą su išgręžta skylute ant dėžutės.

Galiausiai prijungiau eterneto ir maitinimo kabelius.

Rekomenduojamas: