Precieze Luchtkwaliteit Monitor met Sharp GP2Y1010AU0F Sensor
Onderdelen en benodigdheden
| Arduino Nano R3 | 1 |
| Condensator, 220 µF | 1 |
| Doorsteekweerstand, 150 ohm | 1 |
Benodigde tools en machines
- Solderbout
Apps en online diensten
- Arduino IDE
- Processing (The Processing Foundation)
Over dit project
De Sharp Optical Dust Sensor (GP2Y1010AU0F) is bijzonder effectief in het detecteren van zeer fijn stof zoals sigarettenrook, en wordt veel gebruikt in luchtzuiveringssystemen. Een infrarood LED en een fototransistor zijn diagonaal gerangschikt om gereflecteerd licht van stofdeeltjes in de lucht te detecteren.
In eerdere projecten toonde ik luchtkwaliteitmonitors gebaseerd op DSM501A en PPD42NS sensoren. Deze Sharp sensor is even goedkoop (±$5) en heeft een heel eenvoudig elektrisch schema. De sensor verbruikt weinig stroom (max 20mA, typisch 11mA) en kan direct van de Arduino gevoed worden. De output is een analoge spanning evenredig aan de stofdichtheid, met een gevoeligheid van 0.5V per 0.1mg/m³.
Ik heb de Arduino-voorbeeldcode van Dfrobot aangepast zodat de waarden in µg/m³ worden weergegeven. Daarnaast schreef ik een Processing-sketch (gebaseerd op de 'meter' bibliotheek) die de waarden op de pc-monitor weergeeft als een groot analoog instrument - een duidelijk visueel effect.
Vergelijking van sensoren
Alle drie sensoren (DSM501A, PPD42NS, Sharp GP2Y1010AU0F) zijn goedkoop ( paar dollar). Na testen onder dezelfde omstandigheden is de Sharp GP2Y1010AU0F de winnaar:
- Gevoeliger voor zeer lage waarden
- Zeer laag stroomverbruik, direct van Arduino te voeden
- Eenvoudige, aanpasbare Arduino-code
- Analoge output, direct aan meetinstrument te koppelen zonder extra elektronica
De sensor is verkrijgbaar via AliExpress.
Code
Arduino Code
/* Standalone Sketch voor Arduino UNO en Sharp Optical Dust Sensor GP2Y1010AU0F */
int measurePin = 0; // A0
int ledPower = 2; // D2
int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
void setup(){
Serial.begin(9600);
pinMode(ledPower,OUTPUT);
}
void loop(){
digitalWrite(ledPower,LOW); // LED aan
delayMicroseconds(samplingTime);
voMeasured = analogRead(measurePin);
delayMicroseconds(deltaTime);
digitalWrite(ledPower,HIGH); // LED uit
delayMicroseconds(sleepTime);
calcVoltage = voMeasured * (5.0 / 1024.0);
// Lineaire vergelijking van Chris Nafis (c) 2012
dustDensity = 170 * calcVoltage - 0.1;
Serial.println(dustDensity); // µg/m³
delay(1000);
}
Processing Code
/* Meter als gedeeltelijke cirkel. Kleuren aangepast.
Cirkel start op 90 graden (6 uur) en beweegt met de klok mee.
Schaal labels in deze volgorde. Non-hardware voorbeeld.
Gemaakt 19 april 2017 door Bill (Papa) Kujawa. Publiek domein. */
import processing.serial.*;
import meter.*;
Serial port;
String[] list;
Meter m;
void setup() {
size(1150, 910);
background(255, 255, 200);
port = new Serial(this, "COM4", 9600);
m = new Meter(this, 125, 25, true);
m.setMeterWidth(850);
m.setFrameColor(color(100, 0, 0));
m.setTitleFontColor(color(0, 200, 0));
m.setPivotPointColor(color(255, 0, 0));
m.setArcColor(color(0, 0, 200));
m.setScaleFontColor(color(200, 100, 0));
m.setTicMarkColor(color(217, 22, 247));
m.setArcMinDegrees(90.0);
m.setArcMaxDegrees(360.0);
m.setArcThickness(5);
m.setNeedleThickness(4);
m.setMinScaleValue(0.0);
m.setMaxScaleValue(800.0);
m.setInputSignalOutOfRangeFontColor(color(0, 255, 0));
m.setMinInputSignal(0);
m.setMaxInputSignal(800);
m.setHighSensorWarningActive(true);
m.setHighSensorWarningValue((float)200.0);
String[] scaleLabelsA = {"0", "100", "200", "300", "400", "500", "600", "700", "800"};
m.setScaleLabels(scaleLabelsA);
m.setTitle("Luchtkwaliteit (µg/m³)");
m.setDisplayDigitalMeterValue(true);
}
void draw() {
if (port.available() > 0) {
String val = port.readString();
list = split(val, ',');
float air = float(list[0]);
println("Luchtkwaliteit: " + air + " µg/m³");
m.updateMeter(int(air));
}
}
Schema's
Zie het bijgevoegde schakelschema voor de aansluiting van de sensor op de Arduino.
Productieproces
- Bouw Een Raspberry Pi Luchtkwaliteit & Weerstation Met InfluxDB & Grafana
- Luchtkwaliteit meten met OpenSensors: Een Arduino & Python Handleiding
- Helium-gebaseerde Zon-Powered Luchtsensor: Ontwerp & Implementatiegids
- Slimme stadsmonitoring van luchtkwaliteit met LoRa
- Bouw een retro Numitron-klok met Arduino: Eenvoudig, betrouwbaar en energiezuinig
- DHT11 Temperatuur- & Vochtigheidsensor Project met LED-indicatoren en Piezo-luidspreker
- Slim Binnenklimaat- & Afvalmonitoringssysteem met Raspberry Pi en Arduino
- K30 CO2-sensor: Real-time binnenluchtkwaliteitmonitoring met Arduino
- Een eenvoudige obstakelsensor bouwen met Arduino – IR LED & Fotodiodo Tutorial
- Bosch Sensortec onthult AI-ingeschakelde BME688 luchtkwaliteitssensor om virusoverdrachtsrisico te verminderen
- Geavanceerde Koolstofgebaseerde NO₂-sensor Verbetert Binnenluchtkwaliteitsmonitoring