Indholdsfortegnelse:

Arduino Powered Dust Particles Monitoring Station: 4 trin (med billeder)
Arduino Powered Dust Particles Monitoring Station: 4 trin (med billeder)

Video: Arduino Powered Dust Particles Monitoring Station: 4 trin (med billeder)

Video: Arduino Powered Dust Particles Monitoring Station: 4 trin (med billeder)
Video: Measuring Air Quality with ESP32 & Arduino 2024, December
Anonim
Arduino Powered Dust Particles Monitoring Station
Arduino Powered Dust Particles Monitoring Station

Du kan nogenlunde nemt bygge en DIY internet of things -enhed, der overvåger støvforurening i dit hjem for mindre end $ 50 og få besked, når støvniveauet bliver for højt, så du kan lufte rummet, eller du kan stille det udenfor og få besked, hvis det er sikkert at gå udenfor, hvis du bor i et meget forurenet område.

Jeg lavede dette som et skoleprojekt, så jeg havde ikke tid nok til at finde en service, der vil tage MQTT -beskeder og sende dem til dig som notifikationer eller e -mails.

Bemærk også, at hvis du holder sensoren tændt hele tiden, reduceres ventilatorens levetid.

Trin 1: Nødvendige dele

Nødvendige dele
Nødvendige dele

Hvad du skal bruge

  • Arduino Uno
  • Arduino Ethernet -skjold
  • Partikelflasersensor (koster normalt $ 10- $ 30 på eBay/aliexpress)
  • DHT11 temperatur- og fugtighedsføler (valgfrit)
  • Brødbræt
  • Jumper kabler

Trin 2: Saml delene

Saml delene
Saml delene

Først skal du tilslutte ethernet -skjoldet på Arduino

PM -sensoren har flere ledninger, men dem vi har brug for er VCC, GND, TX, RX.

Tilslut VCC og GND til henholdsvis + og - på brødbrættet.

Arduino har hardware RX og TX ben, men vi bruger softwareemulering af RX og TX ben på henholdsvis ben 2 og 3. Tilslut sensorens RX til TX på Arduino og TX på sensoren til RX på Arduino.

Hvis du skal bruge temperatursensoren, skal du tilslutte VCC- og GND -linjerne til + og - på brødbrættet og datalinjen til pin 7.

Trin 3: Koden

Du kan enten installere MQTT -mægler på en hindbærpi eller en computer, du altid har på derhjemme, eller bruge en MQTT -tjeneste i skyen, som Cloud MQTT. Derefter kan du skrive et script, der sender dataene som HTTP til et IFTT -webhook, da de endnu ikke understøtter MQTT -webhooks og konfigurerer meddelelser om, hvornår støvniveauer i dit hjem bliver for høje.

Arduino luftstation

#omfatte

#omfatte
#omfatte
#omfatte
#omfatte
#omfatte

#omfatte

#omfatte
#defineDHT11_PIN7
#definereRX_PIN2
#definereTX_PIN3
IPAddress ip (169, 169, 100, 98);
byte 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"; // Klientforbindelser kan ikke have det samme forbindelsesnavn
EthernetClient ethClient;
PubSubClient -klient (ethClient);
SoftwareSerial pmSerial (RX_PIN, TX_PIN);
dht DHT;
int pm1;
int pm2_5;
int pm10;
unsignedlong id;
// Filer minFile;
Strenge s;
StaticJsonBuffer <200> jsonBuffer;
JsonObject & root = jsonBuffer.createObject ();
voidsetup () {
Serial.begin (57600);
pmSerial.begin (9600);
id = 0;
pm1 = 0;
pm2_5 = 0;
pm10 = 0;
hvis (Ethernet.begin (mac) == 0)
{
Serial.println ("Kunne ikke konfigurere Ethernet ved hjælp af DHCP");
// forsøg med fast ip addr
Ethernet.begynder (mac, ip);
}
client.setServer (mqtt_server, mqtt_port);
client.setCallback (tilbagekald);
forsinkelse (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;
kulværdi;
char previousValue;
hvis (! client.connected ())
{
hvis (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) {
Serial.println ("tilsluttet");
}
}
mens (pmSerial.available ()) {
værdi = pmSerial.read ();
hvis ((indeks == 0 && værdi! = 0x42) || (indeks == 1 && værdi! = 0x4d)) {
Serial.println ("Kan ikke finde dataoverskriften.");
Vend tilbage;
}
hvis (indeks == 4 || indeks == 6 || indeks == 8 || indeks == 10 || indeks == 12 || indeks == 14) {
previousValue = værdi;
}
elseif (indeks == 5) {
pm1 = 256 * previousValue + værdi;
root ["pm1"] = abs (pm1);
}
elseif (indeks == 7) {
pm2_5 = 256 * previousValue + værdi;
root ["pm2_5"] = abs (pm2_5);
}
elseif (indeks == 9) {
pm10 = 256 * foregående værdi + værdi;
root ["pm10"] = abs (pm10);
}
elseif (indeks> 15) {
pause;
}
indeks ++;
}
mens (pmSerial.available ()) pmSerial.read ();
int chk = DHT.read11 (DHT11_PIN);
hvis (DHT.temperatur == -999 || DHT.fugtighed == -999) {
root ["temperatur"] = "Ikke relevant";
root ["luftfugtighed"] = "Ikke relevant";
} andet {
root ["temperatur"] = DHT.temperatur;
root ["fugtighed"] = DHT.fugtighed;
}
sendResults ();
id ++;
forsinkelse (5000);
}
voidsendResults () {
// offentliggøre til MQTT
char jsonChar [100];
root.printTo (jsonChar);
Serial.println (client.publish ("arduino", jsonChar));
// debug til seriel
root.printTo (seriel);
Serial.print ('\ n');
}
// Håndterer meddelelser, der er ankommet om emner, der er tilmeldt
voidcallback (tegn* emne, byte* nyttelast, usigneret længde) {
}

se rawair_quality.ino hostet af ❤ af GitHub

Trin 4: Saml æsken

Saml æsken
Saml æsken
Saml æsken
Saml æsken
Saml æsken
Saml æsken

Jeg brugte bare en kasse jeg havde liggende og borede et hul til sensoren for at få luft fra og skar et hul ud for at kablerne skulle gå ud (selvom det var lidt for stort).

Jeg brugte limpuder til at fastgøre sensoren til kassen, så sensorens inputhul blev tilpasset det borede hul på kassen.

Endelig tilsluttede jeg ethernet og strømkabler.

Anbefalede: