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, Prosinac
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 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

Potrebni dijelovi
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

Sastavite dijelove
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

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 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.

Preporučeni: