Video: Stanice pro sledování částic prachu poháněných Arduinem: 4 kroky (s obrázky)
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Poměrně snadno si můžete vytvořit vlastní zařízení pro internet věcí, které monitoruje znečištění prachem ve vašem domě za méně než 50 USD, a budete upozorněni, když se úroveň prachu zvýší příliš vysoko, takže můžete místnost provzdušnit, nebo ji můžete nastavit venku a dostat oznámení, pokud je pokud žijete ve vysoce znečištěné oblasti, můžete jít bezpečně ven.
Udělal jsem to jako školní projekt, takže jsem neměl dost času najít službu, která bude přijímat zprávy MQTT a posílat vám je jako oznámení nebo e -maily.
Pamatujte také na to, že udržování senzoru stále v provozu sníží životnost ventilátoru.
Krok 1: Potřebné součásti
Co budete potřebovat
- Arduino Uno
- Ethernetový štít Arduino
- Laserový senzor pevných částic (obvykle stojí 10 až 30 USD na eBay/aliexpress)
- Čidlo teploty a vlhkosti DHT11 (volitelně)
- Prkénko
- Propojovací kabely
Krok 2: Sestavte díly
Nejprve musíte připojit ethernetový štít na Arduino
Senzor PM má více vodičů, ale potřebujeme VCC, GND, TX, RX.
Připojte VCC a GND k + a - na prkénku.
Arduino má hardwarové piny RX a TX, ale použijeme softwarovou emulaci pinů RX a TX na pinech 2 a 3. Připojte RX senzoru k TX Arduina a TX senzoru k RX Arduina.
Pokud budete používat teplotní čidlo, připojte vedení VCC a GND k + a - na Breadboardu a datový řádek ke kolíku 7.
Krok 3: Kód
Můžete buď nainstalovat brokera MQTT na Raspberry Pi nebo na počítač, který máte vždy doma, nebo použít cloudovou službu MQTT, jako je Cloud MQTT. Poté můžete napsat skript, který data odešle jako HTTP do webhooku IFTT, protože ještě nepodporují webhooky MQTT, a nastavíte oznámení, když se úroveň prachu ve vaší domácnosti příliš zvýší.
Letecká stanice Arduino
#zahrnout |
#zahrnout |
#zahrnout |
#zahrnout |
#zahrnout |
#zahrnout |
#zahrnout |
#zahrnout |
#defineDHT11_PIN7 |
#defineRX_PIN2 |
#defineTX_PIN3 |
IP adresa 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"; // Klientská připojení nemohou mít stejný název připojení |
Ethernetový klient ethClient; |
Klient PubSubClient (ethClient); |
SoftwareSerial pmSerial (RX_PIN, TX_PIN); |
dht DHT; |
int pm1; |
int pm2_5; |
int pm10; |
nepodepsané id; |
// Soubor myFile; |
Řetězec 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 ("Nepodařilo se konfigurovat ethernet pomocí DHCP"); |
// pokus s pevnou IP adresou |
Ethernet.begin (mac, ip); |
} |
client.setServer (mqtt_server, mqtt_port); |
client.setCallback (zpětné volání); |
zpoždění (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 hodnota; |
char previousValue; |
if (! client.connected ()) |
{ |
if (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) { |
Serial.println ("připojeno"); |
} |
} |
while (pmSerial.available ()) { |
hodnota = pmSerial.read (); |
if ((index == 0 && value! = 0x42) || (index == 1 && value! = 0x4d)) { |
Serial.println ("Nelze najít záhlaví dat."); |
vrátit se; |
} |
if (index == 4 || index == 6 || index == 8 || index == 10 || index == 12 || index == 14) { |
previousValue = hodnota; |
} |
elseif (index == 5) { |
pm1 = 256 * previousValue + hodnota; |
root ["pm1"] = abs (pm1); |
} |
elseif (index == 7) { |
pm2_5 = 256 * previousValue + hodnota; |
root ["pm2_5"] = abs (pm2_5); |
} |
elseif (index == 9) { |
pm10 = 256 * previousValue + hodnota; |
root ["pm10"] = abs (pm10); |
} |
elseif (index> 15) { |
přestávka; |
} |
index ++; |
} |
while (pmSerial.available ()) pmSerial.read (); |
int chk = DHT.read11 (DHT11_PIN); |
if (DHT.temperature == -999 || DHT.humidity == -999) { |
root ["teplota"] = "N/A"; |
root ["vlhkost"] = "N/A"; |
} else { |
root ["teplota"] = DHT.teplota; |
root ["vlhkost"] = DHT.vlhkost; |
} |
sendResults (); |
id ++; |
zpoždění (5000); |
} |
voidsendResults () { |
// publikovat na MQTT |
char jsonChar [100]; |
root.printTo (jsonChar); |
Serial.println (client.publish ("arduino", jsonChar)); |
// ladění na seriál |
root.printTo (sériové); |
Serial.print ('\ n'); |
} |
// Zpracovává zprávy přijaté na předplatená témata |
voidcallback (char* topic, byte* užitečné zatížení, délka bez znaménka) { |
} |
zobrazit rawair_quality.ino hostované s ❤ od GitHub
Krok 4: Sestavte krabici
Právě jsem použil pole, ve kterém jsem ležel, a vyvrtal otvor pro senzor, aby se dostal vzduch, a vyřízl otvor, aby kabely mohly jít ven (i když to bylo trochu příliš velké).
Pomocí lepicích podložek jsem připevnil senzor k krabici a zarovnal vstupní otvor snímače s vyvrtaným otvorem na krabici.
Nakonec jsem zapojil ethernetové a napájecí kabely.