Innholdsfortegnelse:
Video: Arduino Powered Dust Particles Monitoring Station: 4 trinn (med bilder)
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Du kan ganske enkelt bygge en DIY -enhet for ting som overvåker støvforurensning i hjemmet ditt for mindre enn $ 50 og bli varslet når støvnivået blir for høyt, slik at du kan lufte rommet, eller du kan sette det utenfor og bli varslet om det er trygt å gå utenfor hvis du bor i et sterkt forurenset område.
Jeg laget dette som et skoleprosjekt, så jeg hadde ikke nok tid til å finne en tjeneste som tar MQTT -meldinger og sender dem til deg som varsler eller e -post.
Vær også oppmerksom på at det å holde sensoren drevet til enhver tid vil redusere viftens levetid.
Trinn 1: Nødvendige deler
Hva du trenger
- Arduino Uno
- Arduino Ethernet -skjerm
- Partikkelmateriale lasersensor (koster vanligvis $ 10- $ 30 på eBay/aliexpress)
- DHT11 temperatur- og fuktighetssensor (valgfritt)
- Brødbrett
- Hoppekabler
Trinn 2: Monter delene
Først må du koble ethernet -skjoldet på Arduino
PM -sensoren har flere ledninger, men de vi trenger er VCC, GND, TX, RX.
Koble VCC og GND til henholdsvis + og - på brødbrettet.
Arduino har maskinvare RX og TX pins, men vi bruker programvareemulering av henholdsvis RX og TX pins på pins 2 og 3. Koble sensorens RX til TX på Arduino og TX på sensoren til RX på Arduino.
Hvis du skal bruke temperatursensoren, kobler du VCC- og GND -linjene til + og - på brødbrettet og datalinjen til pinne 7.
Trinn 3: Koden
Du kan enten installere MQTT -megler på en bringebærpi eller en datamaskin du alltid har på hjemme, eller bruke en MQTT -tjeneste i skyen, som Cloud MQTT. Deretter kan du skrive et skript som sender dataene som HTTP til en IFTT webhook, ettersom de ennå ikke støtter MQTT webhooks og konfigurerer varsler for når støvnivåer i hjemmet ditt blir for høyt.
Arduino flystasjon
#inkludere |
#inkludere |
#inkludere |
#inkludere |
#inkludere |
#inkludere |
#inkludere |
#inkludere |
#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 ha samme tilkoblingsnavn |
EthernetClient ethClient; |
PubSubClient -klient (ethClient); |
SoftwareSerial pmSerial (RX_PIN, TX_PIN); |
dht DHT; |
int pm1; |
int pm2_5; |
int pm10; |
usignert lang ID; |
// Fil myFile; |
Streng 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 hjelp av DHCP"); |
// forsøk med fast ip addr |
Ethernet.begynner (mac, ip); |
} |
client.setServer (mqtt_server, mqtt_port); |
client.setCallback (tilbakeringing); |
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; |
røye verdi; |
char previousValue; |
hvis (! client.connected ()) |
{ |
if (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) { |
Serial.println ("tilkoblet"); |
} |
} |
while (pmSerial.available ()) { |
verdi = pmSerial.read (); |
hvis ((indeks == 0 && verdi! = 0x42) || (indeks == 1 && verdi! = 0x4d)) { |
Serial.println ("Kan ikke finne dataoverskriften."); |
komme tilbake; |
} |
hvis (indeks == 4 || indeks == 6 || indeks == 8 || indeks == 10 || indeks == 12 || indeks == 14) { |
previousValue = verdi; |
} |
elseif (indeks == 5) { |
pm1 = 256 * forrige verdi + verdi; |
root ["pm1"] = abs (pm1); |
} |
elseif (indeks == 7) { |
pm2_5 = 256 * forrige verdi + verdi; |
root ["pm2_5"] = abs (pm2_5); |
} |
elseif (indeks == 9) { |
pm10 = 256 * forrige verdi + verdi; |
root ["pm10"] = abs (pm10); |
} |
elseif (indeks> 15) { |
gå i stykker; |
} |
indeks ++; |
} |
while (pmSerial.available ()) pmSerial.read (); |
int chk = DHT.read11 (DHT11_PIN); |
hvis (DHT.temperatur == -999 || DHT.fuktighet == -999) { |
root ["temperatur"] = "Ikke relevant"; |
root ["fuktighet"] = "N/A"; |
} annet { |
root ["temperatur"] = DHT.temperatur; |
root ["fuktighet"] = DHT.fuktighet; |
} |
sendResults (); |
id ++; |
forsinkelse (5000); |
} |
voidsendResults () { |
// publiser til MQTT |
char jsonChar [100]; |
root.printTo (jsonChar); |
Serial.println (client.publish ("arduino", jsonChar)); |
// debug to serial |
root.printTo (seriell); |
Serial.print ('\ n'); |
} |
// Håndterer meldinger som kommer om emne (r) som abonnerer |
voidcallback (tegn* emne, byte* nyttelast, usignert lengde) { |
} |
se rawair_quality.ino hostet av ❤ av GitHub
Trinn 4: Monter esken
Jeg brukte bare en boks jeg hadde liggende og boret et hull for sensoren for å få luft fra og kuttet ut et hull for at kablene skulle gå ut (selv om det var litt for stort).
Jeg brukte limputer for å feste sensoren til esken, og justere inngangshullet til sensoren med det borede hullet på esken.
Til slutt koblet jeg til ethernet og strømkabler.