Präzisen Luftqualitäts-Monitor mit Sharp GP2Y1010AU0F Sensor bauen
Komponenten und Zubehör
| Arduino Nano R3 | × | 1 |
| Kondensator, 220 µF | × | 1 |
| Durchgangswiderstand, 150 Ohm | × | 1 |
Benötigte Werkzeuge und Maschinen
- Lötkolben (allgemein)
Apps und Online-Dienste
- Arduino IDE
- The Processing Foundation Processing
Über dieses Projekt
Der Sharp Optical Dust Sensor (GP2Y1010AU0F) eignet sich besonders gut zur Erkennung sehr feiner Partikel wie Zigarettenrauch und wird häufig in Luftreinigern eingesetzt. Eine Infrarot-Emissionsdiode und ein Phototransistor sind diagonal angeordnet, um das von Staub in der Luft reflektierte Licht zu detektieren.
In früheren Videos zeigte ich Luftqualitätsmonitore basierend auf DSM501A und PPD42NS. Diesmal präsentiere ich dasselbe Gerät, nun basierend auf dem Sharp GP2Y1010AU0F-Sensor, der ebenfalls sehr günstig ist (ca. 5 $). Das elektrische Schema ist sehr einfach (siehe Abbildung). Der Sensor verbraucht sehr wenig Strom (max. 20 mA, typ. 11 mA) und kann direkt vom Arduino gespeist werden. Der Ausgang ist eine analoge Spannung proportional zur gemessenen Staubdichte, mit einer Empfindlichkeit von 0,5 V / 0,1 mg/m³.
Ich habe den Arduino-Beispielcode von „Dfrobot“ so angepasst, dass die Werte in µg/m³ ausgegeben werden. Zudem schrieb ich einen Processing-Code basierend auf der „meter“-Bibliothek, damit die Werte als großes Analoginstrument auf dem PC-Monitor dargestellt werden – für einen besonderen visuellen Effekt.

Zum Schluss vergleichen wir alle drei Sensorboards (DSM501A, PPD42NS aus früheren Videos und Sharp GP2Y1010AU0F). Alle drei sind sehr günstig (wenige Dollar). Nach Tests unter identischen Bedingungen ist der Sieger der Sharp GP2Y1010AU0F. Positive Aspekte:
- Empfindlicher bei sehr niedrigen Werten
- Sehr geringer Stromverbrauch, direkte Speisung vom Arduino möglich
- Sehr einfacher, leicht anpassbarer Arduino-Code
- Analogausgang – direkter Anschluss an Messgeräte ohne Zusatzelektronik
Diesen Sensor können Sie bei AliExpress kaufen: https://www.aliexpress.com/item/32661666070.html?spm=a2g0s.9042311.0.0.27424c4dKW7gUj
Danke fürs Zuschauen!
Code
Arduino-Code (Arduino)
/* Standalone Sketch to use with a Arduino UNO and a Sharp Optical Dust Sensor GP2Y1010AU0F */ int measurePin = 0; //Connect dust sensor to Arduino A0 pin int ledPower = 2; //Connect 3 led driver pins of dust sensor to Arduino 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); // power on the LED delayMicroseconds(samplingTime); voMeasured = analogRead(measurePin); // read the dust value delayMicroseconds(deltaTime); digitalWrite(ledPower,HIGH); // turn the LED off delayMicroseconds(sleepTime); // 0 - 5V mapped to 0 - 1023 integer values // recover voltage calcVoltage = voMeasured * (5.0 / 1024.0); // linear eqaution taken from https://www.howmuchsnow.com/arduino/airquality/ // Chris Nafis (c) 2012 dustDensity = 170 * calcVoltage - 0.1; Serial.println(dustDensity); // unit: ug/m3 delay(1000); }
Processing-Code (C/C++)
/* //<>// Meter as a partial circle. Change a few colors. Note that the circle starts at 90.0 degrees (6:00 OClock) and moves clockwise. The scale labels have to be in this order. Non-Hardware example. created April 19, 2017 by Bill (Papa) Kujawa. This example code is in the public domain. */ 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); // Display a full circle meter. m = new Meter(this, 125, 25, true); // Instantiate a full circle meter class. 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)); // Define where the scale labele will appear m.setArcMinDegrees(90.0); // (start) m.setArcMaxDegrees(360.0); // ( end) m.setArcThickness(5); m.setNeedleThickness(4); // Set the meter value correspond to the scale labels. 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); // Change the title from the default "Voltage" to a more meaningful label. m.setTitle("Airquality (ug/m3)"); // Display the digital meter value. m.setDisplayDigitalMeterValue(true); } void draw() { if (port.available() > 0) { String val = port.readString(); list = split(val, ','); float air = float(list[0]); println("Airquality: " + air + " mg/m3 " ); m.updateMeter(int(air)); } }
Schaltplan
Herstellungsprozess
- Bosch Sensortec stellt KI-fähigen BME688 Luftqualitätssensor vor, um Virusübertragungsrisiko zu senken
- Raspberry Pi Luftqualitäts- & Wetterstation mit InfluxDB & Grafana bauen
- Luftqualität messen mit OpenSensors: Arduino & Python Anleitung
- Helium-basierter solarbetriebener Luftqualitätssensor: Design- und Deployments-Guide
- LoRa-basiertes Smart-City-Luftqualitäts-Monitoring-System
- Retro-Numitron-Uhr mit Arduino bauen: Einfach, zuverlässig & energieeffizient
- DHT11 Temperatur- & Feuchtesensor mit LED-Anzeige & Piezo-Summer
- Smartes System zur Luftqualitäts- & Abfallüberwachung mit Raspberry Pi, Arduino & IOTA
- K30 CO₂-Sensor: Echtzeit-Luftqualitätsmessung mit Arduino
- Fortschrittlicher kohlenstoffbasierter NO₂-Sensor verbessert Innenraumluftüberwachung