Sadržaj:

Arduino stanica za nadzor čestica prašine: 4 koraka (sa slikama)
Arduino stanica za nadzor čestica prašine: 4 koraka (sa slikama)

Video: Arduino stanica za nadzor čestica prašine: 4 koraka (sa slikama)

Video: Arduino stanica za nadzor čestica prašine: 4 koraka (sa slikama)
Video: Learning iOS: Create your own app with Objective-C! by Tianyu Liu 2024, Novembar
Anonim
Arduino stanica za nadzor čestica prašine
Arduino stanica za nadzor čestica prašine

Možete prilično jednostavno izgraditi "uradi sam" uređaj sa stvarima koji prati zagađenje prašine u vašem domu za manje od 50 USD i primati obavijesti kada nivo prašine postane previsok kako biste mogli provjetriti prostoriju ili je postaviti van i biti obaviješteni ako je možete izaći van ako živite u visoko zagađenom području.

Napravio sam ovo 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

Potrebni dijelovi
Potrebni dijelovi

Šta ć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)
  • Breadboard
  • Premosni kablovi

Korak 2: Sastavite dijelove

Sastavite dijelove
Sastavite dijelove

Prvo morate priključiti Ethernet štit na Arduino

PM senzor 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 i 3 respektivno. Priključite RX senzora na TX na Arduinu, a TX senzora na RX na Arduinu.

Ako ćete koristiti temperaturni senzor, priključite VCC i GND vodove na + i - na Breadboard -u, a liniju podataka na pin 7.

Korak 3: Kôd

Možete instalirati MQTT brokera na malinu pi ili računaru koje imate uvijek kod kuće ili koristiti cloud MQTT uslugu, 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 nivo prašine u vašem domu postane previsok.

Zračna stanica Arduino

#include

#include
#include
#include
#include
#include

#include

#include
#defineDHT11_PIN7
#defineRX_PIN2
#defineTX_PIN3
IPAddress 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 isto ime 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;
String 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 ("Konfiguriranje Etherneta pomoću DHCP -a nije uspjelo");
// pokušaj sa fiksnim ip adr
Ethernet.begin (mac, ip);
}
client.setServer (mqtt_server, mqtt_port);
client.setCallback (povratni poziv);
kašnjenje (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 vrijednost;
char previousValue;
if (! client.connected ())
{
if (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) {
Serial.println ("povezano");
}
}
while (pmSerial.available ()) {
value = pmSerial.read ();
if ((indeks == 0 && vrijednost! = 0x42) || (indeks == 1 && vrijednost! = 0x4d)) {
Serial.println ("Ne mogu pronaći zaglavlje podataka.");
return;
}
if (indeks == 4 || indeks == 6 || indeks == 8 || indeks == 10 || indeks == 12 || indeks == 14) {
previousValue = vrijednost;
}
elseif (indeks == 5) {
pm1 = 256 * previousValue + value;
root ["pm1"] = abs (pm1);
}
elseif (indeks == 7) {
pm2_5 = 256 * previousValue + value;
root ["pm2_5"] = abs (pm2_5);
}
elseif (indeks == 9) {
pm10 = 256 * previousValue + value;
root ["pm10"] = abs (pm10);
}
elseif (indeks> 15) {
break;
}
index ++;
}
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 na MQTT -u
char jsonChar [100];
root.printTo (jsonChar);
Serial.println (client.publish ("arduino", jsonChar));
// otklanjanje grešaka u serial
root.printTo (serijski);
Serial.print ('\ n');
}
// Obrađuje poruke pristigle na pretplaćene teme
voidcallback (char* tema, bajt* korisni teret, dužina bez znaka) {
}

pogledajte rawair_quality.ino hosted with ❤ by GitHub

Korak 4: Sastavite kutiju

Sastavite kutiju
Sastavite kutiju
Sastavite kutiju
Sastavite kutiju
Sastavite kutiju
Sastavite kutiju

Upravo sam upotrijebio kutiju koju sam ležao i izbušio rupu za senzor iz kojeg je izlazio zrak i izrezao otvor za izlazak kabela (iako je bio malo prevelik).

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 kablove za napajanje.

Preporučuje se: