Innehållsförteckning:
Video: Arduino Powered Dust Particles Monitoring Station: 4 steg (med bilder)
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Du kan ganska enkelt bygga en DIY -enhet för saker som övervakar dammföroreningar i ditt hem för mindre än $ 50 och få ett meddelande när dammnivån blir för hög så att du kan lufta rummet, eller så kan du ställa det utanför och få ett meddelande om det är säkert att gå ut om du bor i ett mycket förorenat område.
Jag gjorde detta som ett skolprojekt, så jag hade inte tillräckligt med tid att hitta en tjänst som tar MQTT -meddelanden och skickar dem till dig som meddelanden eller e -postmeddelanden.
Observera också att när du håller sensorn påslagen hela tiden minskar fläktens livslängd.
Steg 1: Delar som behövs
Vad du behöver
- Arduino Uno
- Arduino Ethernet -sköld
- Partikelsensorsensor (kostar vanligtvis $ 10- $ 30 på eBay/aliexpress)
- DHT11 temperatur- och fuktsensor (tillval)
- Bakbord
- Startkablar
Steg 2: Montera delarna
Först måste du ansluta ethernet -skärmen på Arduino
PM -sensorn har flera ledningar, men de vi behöver är VCC, GND, TX, RX.
Anslut VCC och GND till + och - på brödbrädan.
Arduino har hårdvaru -RX- och TX -stift, men vi kommer att använda programvaruemulering av RX- och TX -stift på stift 2 respektive 3. Anslut sensorns RX till TX på Arduino och TX på sensorn till RX på Arduino.
Om du ska använda temperatursensorn, anslut VCC- och GND -linjerna till + och - på brödbrädan och dataraden till stift 7.
Steg 3: Koden
Du kan antingen installera MQTT -mäklare på en hallon -pi eller en dator som du alltid har på hemma, eller använda en moln -MQTT -tjänst, som Cloud MQTT. Sedan kan du skriva ett skript som skickar data som HTTP till en IFTT -webhook, eftersom de ännu inte stöder MQTT -webhooks och ställer in aviseringar för när dammnivåer i ditt hem blir för höga.
Arduino flygstation
#omfatta |
#omfatta |
#omfatta |
#omfatta |
#omfatta |
#omfatta |
#omfatta |
#omfatta |
#definieraDHT11_PIN7 |
#definieraRX_PIN2 |
#definieraTX_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"; // Klientanslutningar kan inte ha samma anslutningsnamn |
EthernetClient etClient; |
PubSubClient -klient (etClient); |
SoftwareSerial pmSerial (RX_PIN, TX_PIN); |
dht DHT; |
int pm1; |
int pm2_5; |
int pm10; |
osignerat långt id; |
// File myFile; |
Sträng 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 ("Det gick inte att konfigurera Ethernet med DHCP"); |
// försök med fast ip addr |
Ethernet. Börjar (mac, ip); |
} |
client.setServer (mqtt_server, mqtt_port); |
client.setCallback (återuppringning); |
fördröjning (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; |
röding värde; |
char previousValue; |
om (! client.connected ()) |
{ |
if (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) { |
Serial.println ("ansluten"); |
} |
} |
medan (pmSerial.available ()) { |
värde = pmSerial.read (); |
if ((index == 0 && värde! = 0x42) || (index == 1 && värde! = 0x4d)) { |
Serial.println ("Kan inte hitta datahuvudet."); |
lämna tillbaka; |
} |
if (index == 4 || index == 6 || index == 8 || index == 10 || index == 12 || index == 14) { |
föregående värde = värde; |
} |
elseif (index == 5) { |
pm1 = 256 * föregående värde + värde; |
root ["pm1"] = abs (pm1); |
} |
elseif (index == 7) { |
pm2_5 = 256 * föregående värde + värde; |
root ["pm2_5"] = abs (pm2_5); |
} |
elseif (index == 9) { |
pm10 = 256 * föregående värde + värde; |
root ["pm10"] = abs (pm10); |
} |
elseif (index> 15) { |
ha sönder; |
} |
index ++; |
} |
medan (pmSerial.available ()) pmSerial.read (); |
int chk = DHT.read11 (DHT11_PIN); |
om (DHT.temperatur == -999 || DHT.fuktighet == -999) { |
root ["temperatur"] = "Ej tillgängligt"; |
root ["fuktighet"] = "Ej tillgängligt"; |
} annat { |
root ["temperatur"] = DHT.temperatur; |
root ["fuktighet"] = DHT.fuktighet; |
} |
sendResults (); |
id ++; |
fördröjning (5000); |
} |
voidsendResults () { |
// publicera till MQTT |
char jsonChar [100]; |
root.printTo (jsonChar); |
Serial.println (client.publish ("arduino", jsonChar)); |
// felsöka till seriell |
root.printTo (seriell); |
Serial.print ('\ n'); |
} |
// Hanterar meddelanden som kommit till ämnen som prenumererar |
voidcallback (karaktär* ämne, byte* nyttolast, osignerad längd) { |
} |
visa rawair_quality.ino värd med ❤ av GitHub
Steg 4: Montera lådan
Jag använde bara en låda som jag hade liggande och borrade ett hål för sensorn för att få luft från och skar ut ett hål för att kablarna skulle gå ut (även om det var lite för stort).
Jag använde limkuddar för att fästa sensorn i lådan och anpassa sensorns ingångshål med det borrade hålet på lådan.
Slutligen kopplade jag in ethernet och strömkablarna.