Cuprins:

Stație de monitorizare a particulelor de praf alimentate de Arduino: 4 pași (cu imagini)
Stație de monitorizare a particulelor de praf alimentate de Arduino: 4 pași (cu imagini)

Video: Stație de monitorizare a particulelor de praf alimentate de Arduino: 4 pași (cu imagini)

Video: Stație de monitorizare a particulelor de praf alimentate de Arduino: 4 pași (cu imagini)
Video: Smart science IoT kit - Hai sa monitorizam calitatea aerului pe care il respiram 2024, Iulie
Anonim
Stație de monitorizare a particulelor de praf alimentate de Arduino
Stație de monitorizare a particulelor de praf alimentate de Arduino

Puteți construi destul de ușor un dispozitiv DIY de obiecte care monitorizează poluarea prafului în casa dvs. pentru mai puțin de 50 USD și primiți notificări atunci când nivelul de praf devine prea mare, astfel încât să puteți aeriza camera sau puteți să o setați în exterior și să primiți o notificare dacă este să ieșiți în siguranță dacă locuiți într-o zonă foarte poluată.

Am făcut acest lucru ca un proiect școlar, așa că nu am avut suficient timp să găsesc un serviciu care să preia mesaje MQTT și să vi le trimită ca notificări sau e-mailuri.

De asemenea, rețineți că menținerea senzorului alimentat în orice moment va reduce durata de viață a ventilatorului.

Pasul 1: Piese necesare

Piese necesare
Piese necesare

De ce vei avea nevoie

  • Arduino Uno
  • Scut Ethernet Arduino
  • Senzor laser pentru particule (de obicei, costă între 10 și 30 USD pe eBay / AliExpress)
  • Senzor de temperatură și umiditate DHT11 (opțional)
  • Pană de pâine
  • Cabluri jumper

Pasul 2: Asamblați piesele

Asamblați piesele
Asamblați piesele

Mai întâi, trebuie să conectați scutul Ethernet pe Arduino

Senzorul PM are mai multe fire, dar cele de care avem nevoie sunt VCC, GND, TX, RX.

Conectați VCC și GND la + și, respectiv, pe panoul de verificare.

Arduino are pin RX și TX hardware, dar vom folosi emularea software a pinilor RX și TX pe pinii 2 și respectiv 3. Conectați RX-ul senzorului la TX al Arduino și TX al senzorului la RX al Arduino.

Dacă doriți să utilizați senzorul de temperatură, conectați liniile VCC și GND la + și - pe Breadboard și linia de date la pinul 7.

Pasul 3: Codul

Puteți să instalați brokerul MQTT pe un raspberry pi sau pe un computer pe care îl aveți mereu acasă sau puteți utiliza un serviciu cloud MQTT, cum ar fi Cloud MQTT. Apoi, puteți scrie un script care trimite datele ca HTTP către un webhook IFTT, deoarece acestea nu acceptă încă webhook-urile MQTT și puteți configura notificări pentru momentul în care nivelul de praf din casa dvs. devine prea mare.

Stația aeriană Arduino

#include

#include
#include
#include
#include
#include

#include

#include
# defineDHT11_PIN7
# defineRX_PIN2
# defineTX_PIN3
Adresă IP ip (169, 169, 100, 98);
octet 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"; // Conexiunile clientului nu pot avea același nume de conexiune
EthernetClient ethClient;
Clientul PubSubClient (ethClient);
SoftwareSerial pmSerial (RX_PIN, TX_PIN);
dht DHT;
int pm1;
int pm2_5;
int pm10;
unsignedlong id;
// Înregistrează fișierul meu;
Siruri de caractere;
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 („Nu s-a putut configura Ethernet folosind DHCP”);
// incercati cu adr ip fix
Ethernet.begin (mac, ip);
}
client.setServer (mqtt_server, mqtt_port);
client.setCallback (apel invers);
întârziere (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;
valoarea char;
char precedentValoare;
if (! client.connected ())
{
if (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) {
Serial.println („conectat”);
}
}
while (pmSerial.available ()) {
valoare = pmSerial.read ();
if ((index == 0 && value! = 0x42) || (index == 1 && value! = 0x4d)) {
Serial.println ("Nu se poate găsi antetul de date.");
întoarcere;
}
if (index == 4 || index == 6 || index == 8 || index == 10 || index == 12 || index == 14) {
precedentValoare = valoare;
}
elseif (index == 5) {
pm1 = 256 * precedentValoare + valoare;
rădăcină ["pm1"] = abs (pm1);
}
elseif (index == 7) {
pm2_5 = 256 * Valoare precedentă + valoare;
rădăcină ["pm2_5"] = abs (pm2_5);
}
elseif (index == 9) {
pm10 = 256 * Valoare precedentă + valoare;
rădăcină ["pm10"] = abs (pm10);
}
elseif (index> 15) {
pauză;
}
index ++;
}
while (pmSerial.available ()) pmSerial.read ();
int chk = DHT.read11 (DHT11_PIN);
if (DHT.temperature == -999 || DHT.humidity == -999) {
root ["temperature"] = "N / A";
rădăcină ["umiditate"] = "N / A";
} altceva {
root ["temperature"] = temperatura DHT;
rădăcină ["umiditate"] = DHT.umiditate;
}
sendResults ();
id ++;
întârziere (5000);
}
voidsendResults () {
// publică pe MQTT
char jsonChar [100];
root.printTo (jsonChar);
Serial.println (client.publish ("arduino", jsonChar));
// depanare la serial
root.printTo (Serial);
Serial.print ('\ n');
}
// Gestionează mesajele sosite pe subiect (e) abonat (e)
voidcallback (char * topic, octet * sarcină utilă, lungime nesemnată) {
}

vizualizați rawair_quality.ino găzduit cu ❤ de GitHub

Pasul 4: Asamblați cutia

Asamblați cutia
Asamblați cutia
Asamblați cutia
Asamblați cutia
Asamblați cutia
Asamblați cutia

Tocmai am folosit o cutie pe care o aveam întinsă și am forat o gaură pentru ca senzorul să obțină aer și am tăiat o gaură pentru ca cablurile să iasă (deși era cam prea mare).

Am folosit tampoane de adeziv pentru a atașa senzorul la cutie, alinierea orificiului de intrare al senzorului cu gaura forată de pe cutie.

În cele din urmă, am conectat cablurile Ethernet și de alimentare.

Recomandat: