AirOwl: Echtzeit-Luftqualitätsmonitoring für gesünderes Atmen
Komponenten und Zubehör
| Komponente | Anzahl |
|---|---|
| Arduino 101 (mit BLE) | 1 |
| Feinstaubsensor ZH03A | 1 |
| Adafruit Flora RGB NeoPixel LEDs (4er-Pack) | 1 |
| Jumper-Wires | 10 |
| Widerstand 10 kΩ | 3 |
Apps & Online-Dienste
- Blynk App (iOS/Android)
- Arduino IDE
Projektbeschreibung
AirOwl misst die Luftqualität in Echtzeit und zeigt die Daten über BLE in der Blynk-App an. Drei Ausgabearten:
- Blynk App (BLE): Drei Gauges für PM1, PM2,5, PM10.
- Augenfarben der AirOwl-Figur (NeoPixels):
- Grün = sicher
- Blau = Vorsicht
- Rot = Gefahr
- Serial Monitor: Rohwerte zur Kontrolle.
Schaltung & Aufbau
Der ZH03A sendet Daten per UART (9600 Baud) an den Arduino 101 (Serial1). NeoPixels an Pins 3, 5, 6 (PWM). Stromversorgung über USB oder Batterie. Schaltpläne, PCB-Layout (Eagle/KiCad) und 3D-Modell auf GitHub.
Blynk-Einrichtung
- Blynk App installieren, Account erstellen.
- Neues Projekt → Board: Arduino 101 → Auth-Key per Mail erhalten.
- Workspace: BLE-Widget + 3 Gauges (Pins V1, V2, V3).
- Bluetooth am Handy einschalten, in App verbinden, Play drücken.
Code (Air_owl.ino)
#include
#include
#define BLYNK_SERIAL Print
byte data[24];
unsigned int PM1=0, PM25=0, PM10=0, count=0;
const int PIN1=3, PIN2=5, PIN3=6;
char auth[] = "Auth key"; // Blynk Auth-Key einsetzen
BLEPeripheral blePeripheral;
void setup() {
blePeripheral.setLocalName("AirOwl");
blePeripheral.setDeviceName("AirOwl");
blePeripheral.setAppearance(384);
Blynk.begin(blePeripheral, auth);
blePeripheral.begin();
Serial1.begin(9600); Serial.begin(9600);
pinMode(PIN1, OUTPUT); pinMode(PIN2, OUTPUT); pinMode(PIN3, OUTPUT);
}
void loop() {
Blynk.run(); blePeripheral.poll();
// Serial-Ausgabe
Serial.println("PM1: " + String(PM1/count));
Serial.println("PM2.5: " + String(PM25/count));
Serial.println("PM10: " + String(PM10/count));
delay(500);
WriteData();
// Farblogik
unsigned int avg = (PM1+PM25+PM10)/3;
if (avg <= 100) LedColor(0,255,0); // Grün
else if (avg <= 300) LedColor(255,0,0); // Rot (Achtung: Originalcode vertauscht Blau/Rot)
else LedColor(0,0,255); // Blau
delay(500);
}
void LedColor(int r, int b, int g) { // Parameterreihenfolge beachten!
analogWrite(PIN1, r); analogWrite(PIN2, b); analogWrite(PIN3, g);
}
void getWinsenData() { /* UART-Parsing laut ZH03A-Datenblatt */ }
void WriteData() { getWinsenData(); Blynk.virtualWrite(V1, PM1/count); Blynk.virtualWrite(V2, PM25/count); Blynk.virtualWrite(V3, PM10/count); delay(1000); }
Hinweis: Im Originalcode ist die Farblogik für Blau/Rot vertauscht (Rot bei mittlerer, Blau bei hoher Belastung). Obige Kommentare zeigen die sinnvolle Zuordnung.
Ressourcen
- GitHub (Code, Schaltplan, PCB, 3D): AirOwl_Genuino101
- ZH03A-Datenblatt: Link
- Blynk-Dokumentation: docs.blynk.cc
Herstellungsprozess
- Zehenklemmen (Toe Clamps) erklärt: Merkmale, Vorteile und Auswahlhilfe
- Predictive Maintenance: Effizienz und Risikoreduktion durch datengetriebene Einblicke
- 7 Essentielle React-Bibliotheken, die jeder Entwickler beherrschen sollte
- Den wahren Wert Ihres Unternehmens freisetzen: Leitfaden für kleine und mittlere Hersteller
- Vorrichtungsfüße (Jig Feet Buttons): Funktion & Effizienzsteigerung in der Fertigung
- AC- vs. DC-Motoren: Wichtige Unterschiede & Auswahlhilfe
- PCB-Fertigung meistern: Essenzielle Tipps für erfolgreiches Prototyping
- Maschinenfinanzierung 1×1: Geld sparen, Risiko reduzieren, Unternehmen absichern
- Wichtiger Leitfaden zu Tauchmotorpumpen: Eigenschaften, Betrieb und Installation
- Kreiselpumpen erklärt: Hauptmerkmale, Anwendungen & Vorteile