AirOwl: realtime luchtkwaliteitsmonitoring voor gezonder ademen
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino 101 (Genuino 101) | 1 |
| Stofsensor ZH03A | 1 |
| Adafruit Flora RGB NeoPixel LEDs (pak van 4) | 1 |
| Draadjes (algemeen) | 10 |
| Weerstand 10k ohm | 3 |
Apps en online diensten
- Blynk (BLE)
- Arduino IDE
Over dit project
AirOwl is een realtime luchtkwaliteitsmonitor. Het meet de luchtkwaliteit via de stofsensor en toont de data op de Blynk-app via BLE van de Arduino/Genuino 101. Een project om te weten wat we inademen!
Menselijke activiteiten beïnvloeden het milieu. Dit apparaat helpt de omgeving in de gaten te houden en actie te ondernemen.
Drie manieren om luchtkwaliteit te zien
- Blynk-app (BLE) – dashboards met meters voor PM1, PM2.5, PM10.
- Kleur van AirOwl's ogen (NeoPixels):
- Groen = veilige omgeving
- Blauw = let op
- Rood = gevaar
- Seriële monitor – ruwe waarden.
Schema en ontwerp
Zie GitHub voor schema's, PCB-ontwerp (Eagle/KiCad), 3D-beelden en alle bestanden.
Blynk instellen
- Installeer Blynk (Play Store / App Store).
- Maak account, nieuw project, selecteer board, geef naam.
- Klik Create → ontvang Auth Token per e-mail.
- Voeg widgets toe: BLE, 3x Gauge (pins V1, V2, V3 voor PM1, PM2.5, PM10).
- Activeer Bluetooth op telefoon, klik BLE-icoon in app, start project.
Code
/* Copyright (C) 2017 Anith Patel & Sohil Patel. GNU FDL v1.3+ */
#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[] = "JOUW_AUTH_TOKEN";
BLEPeripheral blePeripheral;
void setup() {
blePeripheral.setLocalName("AirOwl");
blePeripheral.setDeviceName("AirOwl");
blePeripheral.setAppearance(384);
Blynk.begin(blePeripheral, auth);
blePeripheral.begin();
Serial1.begin(9600); // UART naar sensor
Serial.begin(9600);
pinMode(PIN1, OUTPUT); pinMode(PIN2, OUTPUT); pinMode(PIN3, OUTPUT);
}
void loop() {
Blynk.run();
blePeripheral.poll();
Serial.println("PM1: " + String(PM1/count));
Serial.println("PM2.5: " + String(PM25/count));
Serial.println("PM10: " + String(PM10/count));
delay(500);
WriteData();
// LED logica op basis van gemiddelde
int avg = (PM1 + PM25 + PM10) / 3 / count;
if (avg <= 100) LedColor(0, 255, 0); // Groen
else if (avg <= 300) LedColor(255, 0, 0); // Rood (let op: orig. code had rood/blauw omgedraaid?)
else LedColor(0, 0, 255); // Blauw
delay(500);
}
void LedColor(int r, int b, int g) {
analogWrite(PIN1, r); analogWrite(PIN2, b); analogWrite(PIN3, g);
}
void getWinsenData() {
byte i = 0, checksum = 0;
Serial1.flush();
while (Serial1.available()) {
data[i] = Serial1.read();
if (i <= 21) checksum += data[i];
if (i == 23) {
if (checksum == (256 * data[22] + data[23])) {
if (data[0] == 0x42 && data[1] == 0x4D) { // "BM"
PM1 += (data[4] * 256 + data[5]);
PM25 += (data[6] * 256 + data[7]);
PM10 += (data[8] * 256 + data[9]);
count++;
Serial1.flush();
break;
}
} else break;
}
i++; delay(10);
}
}
void WriteData() {
getWinsenData();
Blynk.virtualWrite(V1, PM1/count);
Blynk.virtualWrite(V2, PM25/count);
Blynk.virtualWrite(V3, PM10/count);
delay(1000);
}
Let op: In de oorspronkelijke code was de kleurlogica mogelijk omgedraaid (blauw/rood). Hierboven gecorrigeerd naar standaard: groen=goed, rood=matig, blauw=slecht. Controleer datasheet ZH03A voor exacte drempels.
Bronnen
- Sensor datasheet: link
- Blynk docs: docs.blynk.cc
- Projectbestanden: GitHub
- 3D-print bestanden: GitHub
Productieproces
- Schaalvoetknoppen Uitgelegd: Hoe Ze Uw Schablonen Bevestigen en Productie-efficiëntie Verhogen
- PCB-fabricatie meesteren: essentiële tips voor prototyping succes
- Essentiële gids voor potgietmotorpompen: kenmerken, werking en installatie
- Centrifugale Pompen Uitgelegd: Belangrijkste Kenmerken, Toepassingen & Voordelen
- De ware waarde van uw bedrijf ontgrendelen: Gids voor kleine en middelgrote fabrikanten
- Teen-klemmen Uitgelegd: Kenmerken, Voordelen en Hoe de Juiste te Kiezen
- AC vs DC Motoren: Belangrijkste Verschillen & Hoe De Juiste Te Kiezen
- Apparatuurfinanciering 101: Geld besparen, risico verminderen, uw bedrijf beveiligen
- Voorspellend Onderhoud: Efficiëntie en Risicoreductie met Datagestuurde Inzichten
- 7 Essentiële React-bibliotheken die Elke Ontwikkelaar Moet Beheersen
- Koolstofvezel Vormen: Essentiële Inzichten Voor Moderne Fabricage