Dicke Luft mit GP2Y1014AU0F messen

Kurz bevor Großmutter so richtig wütend wurde, kündigte sie mit

Gleich staubt’s!

die aufbrodelnde Emotion an.
In Sachen Feinstaub-Belastung merkt man es leider nicht immer so deutlich, ab wann die Luft schlecht wird.

Doch genau dafür gibt es ja entsprechende Sensoren.


Modelle der GP2Y10 Serie von Sharp sind für Bastler und IoT Freunde für wenige Euros käuflich erwerbbar. Der Sensor beinhaltet eine Infrarot-Diode und einen Empfänger, die so positioniert sind, dass sie an einander vorbei schauen. Doch wo sich ihr Blickwinkel kreuzt, kann die Luft durchfließen und wenn sie mit Staub angereichert ist, wird das Licht in andere Richtungen reflektiert und damit auch quasi “um die Ecke” zum Empfänger.

Je dreckiger die Luft ist, um so mehr Lichtwellen kommen dann am Empfänger an.

Das wird dann noch in eine Spannung umgewandelt, und schon hat man etwas, was man am Mikrokontroller super messen und verarbeiten kann. Also auf zum Arduino-Steckbrett.

GP2Y1014AU0F dust sensor

Verkabelung

Mein GP2Y1014AU0F kommt mit 6 Leitungen, die der Stromversorgung, Aktivierung und Datenausgabe dienen.

Pin Bedeutung Anmerkung
1 (Blau) IR-LED VCC (3.3 V) Mit 150 Ohm Vorwiderstand auf 5 V
2 (Grün) IR-LED GND Auf Arduino GND
3 (Weiß) On/Off - Pin Auf digitalen Pin (z.B. D13)
4 (Gelb) Sensor GND Auf Arduino GND
5 (Schwarz) Sensor Output And analogen Pin (z.B. A0)
6 (Rot) Sensor VCC (5 V) Auf auf 5 V

Die LED soll nur mit etwa 3.3 Volt betrieben werden, weshalb ein 150 Ohm Vorwiderstand vor der 5 Volt Spannungsversorgung und dem Gerät geschaltet werden muss. Man kann natürlich auch den 3.3 Volt Ausgang der Arduino Boards nutzen, aber nachdem der 150 Ohm Widerstand beim Gerät mitgelieft wird, nutze ich diesen direkt.

Außerdem soll laut Datenblatt ein 220mF Kondensator nach dem Widerstand zur Stabilisierung zwischen LED-Spannung und Ground gesetzt werden.

Funktionsweise

Wird Staub erkannt, erhöht sich die Spannung am Output-Pin. Dabei muss man wissen, dass auch bei Staubfreiheit eine geringe Spannung ausgegeben wird. Laut Datenblatt liegt die bei durchschnittlich 0.6 Volt und sollte nie das Maximum von 1.1 Volt überschreiten.
Das heißt also, beim Arduino analogRead(), das die Spannungswerte als Ganzzahl zwischen 0 und 1023 zurückgibt, würde erst ein Wert von größer 122 auf gemessenen Staub hinweisen und ab 225 haben wir garantiert Staub in der Luft.

Das Messen selbst ist außerdem kein kontinuierlicher Vorgang. Gemäß Datenblatt wird die Messung über den On/Off Pin aktiviert, wenn dieser LOW geschaltet ist, und dann sollten 0.28 Millisekunden (als 280 Mikrosekunden) vergehen um Staubreflektionen zu detektieren. Danach sollte man etwa 10 Millisekunden im ausgeschalteten Zustand (On/Off-Pin-> HIGH) vergehen, ehe man erneut eine Messung durchführen kann.

Das heißt also:

1digitalWrite(ONOFF_PIN, LOW);          // switch ON
2delayMicroseconds(280);
3int rawSensorValue = analogRead(SENSOR_PIN);
4digitalWrite(ONOFF_PIN, HIGH);        // switch OFF
5delay(10);

Ebenso im Datenblatt verzeichnet ist eine Refernzkurve, die den Spannungswerten eine physikalische Größe, nämlich Mikrogramm pro Quadratmeter (ug/m2) zuordnet. 0.6 V bis 3.5 Volt decken ziemlich linear den Verlauf von 0 bis 500 Mikrogramm ab. Das bedeutet also, aus der gemessenen Spannung V, ergibt sich die Staubmenge nach der Formel: 500 * (V - 0.6) / 2.9

Wenn man gleich mit den Werten des A/D Wandlers von 0 bis 1023 (für 0 - 5 Volt) rechnen möchte, wäre das dann: 500 * (AD - 122) / 716

Werte kleiner 0.6 Volt sollten immer als Null ausgefiltert werden, während alles über 3.5 Volt einfach nur “größer als 500 ug” bedeutet.

Fazit

Meine Wohnung ist gar nicht mal so schlimm. Der Sensor kann nämlich fast keinen Staub erkennen.
Außer ich lasse den Staubsauger fahren, der alles aufwirbelt, und schon meldet der Sensor Werte.

Interessant wird der Sensor im Sommer, wenn ich häufig das Fenster zur Straße offen habe, denn da sammelt sich auch schnell bei mir mehr sichtbarer Staub im Zimmer an.

Dieser preiswerte Sensor ist also gut geeignet um ungefähr die Luftqualität einzuschätzen. Wird über einige Zeit Staub festgestellt, empfiehlt sich ein Luftreiniger oder Filter, denn zu viele Partikel sind für die Lunge absolut nicht gesund.


Wenn sich eine triviale Erkenntnis mit Dummheit in der Interpretation paart, dann gibt es in der Regel Kollateralschäden in der Anwendung.
frei zitiert nach A. Van der Bellen
... also dann paaren wir mal eine komplexe Erkenntnis mit Klugheit in der Interpretation!