Inhaltsverzeichnis:
Video: Arduino-betriebene Staubpartikel-Überwachungsstation - Gunook
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
Sie können ziemlich einfach ein DIY-Internet der Dinge bauen, das die Staubverschmutzung in Ihrem Zuhause für weniger als 50 US-Dollar überwacht und benachrichtigt wird, wenn der Staubgehalt zu hoch wird, damit Sie den Raum belüften können, oder Sie können es nach draußen stellen und benachrichtigt werden, wenn dies der Fall ist Sie können sicher nach draußen gehen, wenn Sie in einer stark verschmutzten Gegend leben.
Ich habe dies als Schulprojekt erstellt, daher hatte ich nicht genug Zeit, um einen Dienst zu finden, der MQTT-Nachrichten entgegennimmt und sie wie Benachrichtigungen oder E-Mails an Sie sendet.
Beachten Sie auch, dass die ständige Stromversorgung des Sensors die Lebensdauer des Lüfters verkürzt.
Schritt 1: Benötigte Teile
Was du brauchen wirst
- Arduino Uno
- Arduino-Ethernet-Schild
- Partikellasersensor (normalerweise für 10 bis 30 US-Dollar bei eBay / aliexpress)
- DHT11 Temperatur- und Feuchtigkeitssensor (optional)
- Steckbrett
- Überbrückungskabel
Schritt 2: Montieren Sie die Teile
Zuerst müssen Sie das Ethernet-Shield auf den Arduino stecken
Der PM-Sensor hat mehrere Drähte, aber die, die wir brauchen, sind VCC, GND, TX, RX.
Verbinden Sie VCC und GND mit + bzw. - auf dem Steckbrett.
Der Arduino hat Hardware-RX- und TX-Pins, aber wir verwenden die Software-Emulation von RX- und TX-Pins an den Pins 2 bzw. 3. Stecken Sie den RX des Sensors auf den TX des Arduino und den TX des Sensors auf den RX des Arduino.
Wenn Sie den Temperatursensor verwenden möchten, stecken Sie die VCC- und GND-Leitungen an + und - am Steckbrett und die Datenleitung an Pin 7.
Schritt 3: Der Code
Sie können den MQTT-Broker entweder auf einem Raspberry Pi oder einem Computer installieren, den Sie immer zu Hause haben, oder einen Cloud-MQTT-Dienst wie Cloud MQTT verwenden. Dann können Sie ein Skript schreiben, das die Daten als HTTP an einen IFTT-Webhook sendet, da diese MQTT-Webhooks noch nicht unterstützen, und Benachrichtigungen einrichten, wenn die Staubbelastung in Ihrem Zuhause zu hoch wird.
Arduino-Flugstation
#enthalten |
#enthalten |
#enthalten |
#enthalten |
#enthalten |
#enthalten |
#enthalten |
#enthalten |
#defineDHT11_PIN7 |
#defineRX_PIN2 |
#defineTX_PIN3 |
IP-Adresse ip(169, 169, 100, 98); |
Byte-Mac = { |
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 |
}; |
constchar *mqtt_server = "m23.cloudmqtt.com"; |
konstant mqtt_port = 11895; |
constchar *mqtt_user = "jhetjewk"; |
constchar *mqtt_pass = "QB2p9PiMV6pn"; |
constchar *mqtt_client_name = "arduinoClient1"; // Clientverbindungen dürfen nicht denselben Verbindungsnamen haben |
EthernetClient ethClient; |
PubSubClient-Client (ethClient); |
SoftwareSerial pmSerial(RX_PIN, TX_PIN); |
dht-DHT; |
int pm1; |
int pm2_5; |
int pm10; |
unsignedlong id; |
//Datei meineDatei; |
Zeichenfolge 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("Ethernet konnte nicht mit DHCP konfiguriert werden"); |
// Versuch mit fester IP-Adresse |
Ethernet.begin(mac, ip); |
} |
client.setServer(mqtt_server, mqtt_port); |
client.setCallback (Rückruf); |
Verzögerung (2000); |
Serial.println (Ethernet.localIP()); |
client.connect("arduinoClient", mqtt_user, mqtt_pass); |
Serial.print("rc="); |
Serial.print (client.state ()); |
Serial.print("\n"); |
} |
Leerschleife () { |
intindex = 0; |
Zeichenwert; |
char vorherigerWert; |
if (!client.connected()) |
{ |
if (client.connect("arduinoClient", mqtt_user, mqtt_pass)) { |
Serial.println ("verbunden"); |
} |
} |
while (pmSerial.available()) { |
Wert = pmSerial.read(); |
if ((Index == 0 && Wert != 0x42) || (Index == 1 && Wert != 0x4d)) { |
Serial.println ("Kann den Datenheader nicht finden."); |
Rückkehr; |
} |
if (Index == 4 || Index == 6 || Index == 8 || Index == 10 || Index == 12 || Index == 14) { |
vorherigerWert = Wert; |
} |
sonst (index == 5) { |
pm1 = 256 * vorherigerWert + Wert; |
root["pm1"] = abs(pm1); |
} |
sonst (index == 7) { |
pm2_5 = 256 * vorherigerWert + Wert; |
root["pm2_5"] = abs(pm2_5); |
} |
sonst (index == 9) { |
pm10 = 256 * vorherigerWert + Wert; |
root["pm10"] = abs(pm10); |
} |
sonst (Index >15) { |
brechen; |
} |
index++; |
} |
while (pmSerial.available()) pmSerial.read(); |
int chk = DHT.read11(DHT11_PIN); |
if (DHT. Temperatur == -999 || DHT. Luftfeuchtigkeit == -999) { |
root["Temperatur"] = "N/A"; |
root["Luftfeuchtigkeit"] = "N/A"; |
} anders { |
root["temperatur"] = DHT.temperatur; |
root["Luftfeuchtigkeit"] = DHT. Luftfeuchtigkeit; |
} |
sendResults(); |
id++; |
Verzögerung (5000); |
} |
voidsendResults() { |
// in MQTT veröffentlichen |
char jsonChar[100]; |
root.printTo(jsonChar); |
Serial.println (client.publish ("arduino", jsonChar)); |
// Debug auf seriell |
root.printTo(Seriell); |
Serial.print ('\n'); |
} |
// Behandelt eingehende Nachrichten zu abonnierten Themen |
voidcallback(char* topic, byte* payload, unsignedint Länge) { |
} |
view rawair_quality.ino hosted with ❤ by GitHub
Schritt 4: Bauen Sie die Box zusammen
Ich habe einfach eine Box benutzt, die ich herumgelegt hatte, und ein Loch für den Sensor gebohrt, um Luft zu bekommen, und ein Loch für die Kabel ausgeschnitten (obwohl es etwas zu groß war).
Ich habe Klebepads verwendet, um den Sensor an der Box zu befestigen und das Eingangsloch des Sensors mit dem gebohrten Loch auf der Box auszurichten.
Schließlich habe ich das Ethernet- und das Stromkabel angeschlossen.