Dicke Luft mit GP2Y1014AU0F messen
« | 20 Dec 2020 | »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 Mikrocontroller super messen und verarbeiten kann. Also auf zum Arduino-Steckbrett.
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 mitgeliefert 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
Staubreflexionen 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:
Ebenso im Datenblatt verzeichnet ist eine Referenzkurve, 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.