Skip to Content

Staubsensor GP2Y1010AU0F mit Arduino

Staubsensor GP2Y1010AU0F mit Arduino

In diesem Tutorial lernst du, wie du den Staubsensor GP2Y1010AU0F mit einem Arduino verwendest, um die Staubdichte zu messen. Wir besprechen die Eigenschaften des Sensors, wie man ihn an ein Arduino-Board anschließt und wie man die gelieferten Daten interpretiert.

Das Messen von Staubdichten ist wichtig für die Gesundheit, da hohe Staubkonzentrationen in der Luft zu Atemwegsproblemen, Allergien und anderen gesundheitlichen Beschwerden führen können. Die Überwachung der Staubwerte ermöglicht es uns, die Luftqualität drinnen und draußen zu beurteilen, potenzielle Gesundheitsrisiken zu erkennen und geeignete Maßnahmen zur Verbesserung der Luftqualität zu ergreifen.

Benötigte Teile

Ich habe für dieses Projekt ein Arduino Uno verwendet, aber jedes andere Arduino-Board oder ein ESP8266/ESP32-Board funktioniert genauso gut.

Der GP2Y1010AU0F Staubsensor wird mit einem 220µF Kondensator und einem 150Ω Widerstand geliefert, die für den Anschluss an ein Arduino benötigt werden. Du musst sie nicht separat kaufen.

Staubsensor GP2Y1010AU0F

Arduino

Arduino Uno

Dupont wire set

Dupont-Kabelset

Half_breadboard56a

Breadboard

USB Data Sync cable Arduino

USB-Kabel für Arduino UNO

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Grundlagen des GP2Y1010AU0F Staubsensors

Der GP2Y1010AU0F ist ein optischer Luftqualitätssensor, der Staubpartikel erkennt. Er ist besonders effektiv beim Nachweis sehr feiner Partikel wie Zigarettenrauch und wird häufig in Luftreinigungssystemen eingesetzt. Das folgende Bild zeigt den Sensor.

Picture of the GP2Y1010AU0F Dust Sensor
Bild des GP2Y1010AU0F Staubsensors

Interner Aufbau

Im Inneren des Sensors sind eine Infrarot-LED und ein Infrarot-Photoresistor diagonal angeordnet. Das Licht der IR-LED wird von den Staubpartikeln reflektiert, die durch eine Öffnung (Staubpfad) in das Gerät gelangen. Die Menge des reflektierten IR-Lichts wird vom Infrarotsensor gemessen und in eine Ausgangsspannung umgewandelt. Je mehr Staub sich im Staubpfad befindet, desto mehr Licht wird reflektiert und desto höher ist die Ausgangsspannung. Das Bild unten zeigt den inneren Aufbau des GP2Y1010AU0F Sensors.

Internal construction of GP2Y1010AU0F
Interner Aufbau des GP2Y1010AU0F

Der GP2Y1010AU0F hat einen niedrigen Stromverbrauch von maximal 20mA bzw. typisch 11mA und läuft mit 5V. Die Ausgangsspannung ist proportional zur gemessenen Staubdichte, mit einer Empfindlichkeit von 0,5V/0,1mg/m 3 . Der Sensor kann Partikel ab einer Größe von 0,5µm erkennen und die maximale Staubdichte, die er messen kann, beträgt 580 µg/m 3 .

Interne Schaltung

Das folgende Bild zeigt die interne Schaltung des GP2Y1010AU0F. Du siehst die Schaltung, die die IR-LED (IRED) ansteuert, und die Verstärkerschaltung mit der IR-Photodiode (PD), die das Ausgangssignal Vo an Pin 5 erzeugt.

Internal schematic of GP2Y1010AU0F
Interne Schaltung des GP2Y1010AU0F ( source )

Es gibt auch einen Trimmer (einstellbarer Widerstand Rs) zur Justierung der Empfindlichkeit des Sensors, aber du solltest ihn nicht verstellen. Im Bild unten siehst du die Position des Trimmers und des Verstärker-ICs.

Electronics of the GP2Y1010AU0F
Elektronik des GP2Y1010AU0F

Der GP2Y1010AU0F hat einen sechspoligen Anschluss. Die Infrarot-LED wird über (1) V-LED und (2) LED-GND mit Strom versorgt und über Pin (3) LED angesteuert. Der Signalverstärker-IC wird über (6) Vcc und (4) S-GND mit Strom versorgt und das Ausgangssignal Vo liegt an Pin (5) an.

Datenblätter

Für detailliertere Informationen zum GP2Y1010AU0F wirf einen Blick in das Datenblatt und die unten verlinkten Anwendungshinweise.

Anschluss des GP2Y1010AU0F an Arduino

Um den GP2Y1010AU0F mit Arduino zu verbinden, folgen wir dem Anwendungsbeispiel aus den Application Notes (siehe unten).

Application Example GP2Y1010AU0F
Anwendungsbeispiel GP2Y1010AU0F ( source )

Du siehst, dass das Ausgangssignal Vo an Pin (5) in den Analog-Digital-Wandler (A/D) des Mikrocontrollers geht und dass die IR-LED an Pin (3) über einen Ausgangspin des Mikrocontrollers angesteuert wird.

Wir benötigen den abgebildeten Transistor zum Ansteuern der IR-LED nicht, da ein Arduino-GPIO-Pin problemlos die benötigten 20mA für die LED liefern kann. Es gibt noch etwas zusätzliche Beschaltung wie einen 150Ω Vorwiderstand für die IR-LED und einen 220µF Kondensator, aber das ist alles recht unkompliziert.

Das folgende Pinout zeigt, wo sich die sechs Pins am Anschluss des Sensors befinden.

Pinout of GP2Y1010AU0F
Pinout des GP2Y1010AU0F

V-LED versorgt die LED mit Strom und muss mit 5V über einen 150Ω Widerstand verbunden werden. LED-GND  ist die Masse für die IR-LED und wird mit dem GND Pin des Arduino verbunden. LED dient zum Schalten der LED und wird an Pin 7 des Arduino angeschlossen. Jeder andere digitale Ausgangspin funktioniert aber auch.

S-GND  ist die Masse für den Sensor und sollte mit dem GND Pin des Arduino verbunden werden. Vo liefert den Sensorausgang und wird mit dem analogen Eingang A0 des Arduino verbunden. Vcc ist die Stromversorgung für das Sensormodul und muss an 5V angeschlossen werden.

Das folgende Bild zeigt die komplette Verdrahtung auf einem Breadboard, inklusive des 220µF Kondensators.

Connecting GP2Y1010AU0F to Arduino
Anschluss des GP2Y1010AU0F an Arduino

Achte beim Anschließen des Kondensators auf die richtige Polung. Der Minuspol (meist kürzer und mit einem weißen Streifen markiert) muss mit Masse (schwarzes Kabel) verbunden werden.

Code zur Messung der Staubdichte mit dem GP2Y1010AU0F

Um die Staubdichte zu messen, schauen wir uns zuerst die Kennlinie des GP2Y1010AU0F an. Sie zeigt, wie sich die Ausgangsspannung Vo mit steigender Staubdichte verändert, gemessen in Milligramm pro Kubikmeter (mg/m 3 ).

Response Curve of GP2Y1010AU0F
Kennlinie des GP2Y1010AU0F ( source )

Für Staubdichten von 0 bis 0,5 mg/m 3 zeigt das Diagramm eine weitgehend lineare Beziehung zwischen Spannung und Staubdichte. Sobald wir uns dem Maximalwert von 580 µg/m 3 (=0,58 mg/m 3 ), den der Sensor erfassen kann, nähert sich die Kurve einem Plateau und wir können keine sinnvollen Werte mehr messen. Die maximale Ausgangsspannung liegt dann bei etwa 3,7V.

Berechnung der Staubdichte

Der lineare Bereich der Kennlinie lässt sich mit folgender Gleichung beschreiben:

D[mg/m 3 ] = 0,170 x Vo − 0,1

Damit können wir die Staubdichte D in mg/m 3 berechnen, indem wir die Ausgangsspannung Vo mit dem Arduino messen. Da die Staubdichten in mg/m 3 meist kleine Zahlen sind, können wir die Dichte auch in µg/m 3 angeben, indem wir die Werte in mg/m 3 einfach mit 1000 multiplizieren.

D[µg/m 3 ] = (0,170 x Vo − 0,1) x 1000

Abtastprotokoll

Das Datenblatt des GP2Y1010AU0F empfiehlt folgendes Abtastprotokoll zur Messung der Staubdichte: Nach dem Einschalten der IR-LED soll man 0,28 Millisekunden warten, dann die Ausgangsspannung Vo messen und danach die IR-LED wieder ausschalten.

Sampling Protocol for GP2Y1010AU0F
Abtastprotokoll für GP2Y1010AU0F ( source )

Mit der oben genannten Staubdichte-Gleichung und dem Abtastprotokoll haben wir nun alle Informationen, um den Code zu schreiben, der die Staubdichte mit dem GP2Y1010AU0F und einem Arduino misst.

Code zur Messung der Staubdichte

Schau dir zuerst den vollständigen Code an, danach gehen wir die Details Schritt für Schritt durch.

const int sensorPin = A0;
const int ledPin = 7;
const int adcMax = 1023;
const float Vcc = 5.0;

float readDensity() {
  digitalWrite(ledPin, LOW);
  delayMicroseconds(280);
  int adc = analogRead(sensorPin);  
  float v0 = Vcc * adc / adcMax;
  float density = 0.170 * v0 - 0.1;  // mg/m^3
  digitalWrite(ledPin, HIGH);
  return density * 1000;             // ug/m^3
}

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  delay(1000);
}

void loop() {
  Serial.print("Dust:");
  Serial.println(readDensity());
  delay(1000);
}

Konstanten

Der Code beginnt mit der Definition einiger Konstanten. sensorPin ist der analoge Eingang, an den der Vo Ausgang des Staubsensors angeschlossen ist, und ledPin ist der digitale Ausgang, der die IR-LED im Staubsensor steuert.

adcMax ist der Maximalwert, den der Analog-Digital-Wandler (ADC) liefern kann. Beim Arduino Uno mit 10-Bit-ADC ist das 1023. Wenn du einen anderen Mikrocontroller verwendest, musst du diesen Wert anpassen. Siehe die analogRead() Funktion oder das Datenblatt deines Mikrocontrollers für weitere Infos.

Wir geben hier auch die Versorgungsspannung Vcc an. Theoretisch kann der Sensor auch mit 3,3V betrieben werden, dann musst du aber den Widerstand für die IR-LED anpassen oder diese Spannung bei 5V belassen. Außerdem musst du sicherstellen, dass der analoge Eingang die maximale Spannung nicht überschreitet. Um es einfach zu halten, bleib am besten bei 5V.

const int sensorPin = A0;
const int ledPin = 7;
const int adcMax = 1023;
const float Vcc = 5.0;

Staubdichte auslesen

Als nächstes haben wir die Funktion readDensity() , die die vom Sensor gemessene Staubdichte ausliest. Zuerst schaltet die Funktion die IR-LED über digitalWrite(ledPin, LOW) ein. Beachte, dass die Logik invertiert ist (LOW bedeutet an).

Dann warten wir die 0,28ms (=280µs) wie im Datenblatt empfohlen, bevor wir den Vo Ausgang des Sensors mit analogRead() auslesen. Der ADC des Arduino liefert jedoch keinen Spannungswert an A0, sondern einen Rohwert (0…1023), den wir in die v0 Spannung umrechnen müssen mit v0 = Vcc * adc / adcMax .

Jetzt können wir die oben gezeigte Gleichung anwenden, um die v0 Spannung in eine Staub- density Messung in mg/m^3 umzuwandeln. Nach dem Ausschalten der IR-LED multiplizieren wir die Staub- density mit 1000, um einen Wert in µg/m 3 zu erhalten.

float readDensity() {
  digitalWrite(ledPin, LOW);
  delayMicroseconds(280);
  int adc = analogRead(sensorPin);  
  float v0 = Vcc * adc / adcMax;
  float density = 0.170 * v0 - 0.1;  // mg/m^3
  digitalWrite(ledPin, HIGH);
  return density * 1000;             // ug/m^3
}

Setup-Funktion

Die Setup-Funktion ist einfach. Wir starten die serielle Schnittstelle, setzen den Modus von ledPin auf OUTPUT und warten eine Sekunde – laut Datenblatt braucht der Sensor etwa 1 Sekunde zum Hochfahren.

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  delay(1000);
}

Loop-Funktion

In der Loop-Funktion rufen wir einfach unsere readDensity() Funktion auf und geben die gemessene Staubdichte im seriellen Monitor aus. Die Messung wird etwa jede Sekunde wiederholt (die 0,28ms für die Messung nicht mitgerechnet). Du kannst auch schneller abtasten, bis zu 100ms funktioniert gut. Schneller als das und ich habe festgestellt, dass der Sensor nicht mehr richtig reagiert.

void loop() {
  Serial.print("Dust:");
  Serial.println(readDensity());
  delay(1000);
}

Ausgabe-Beispiel

Wenn du den Serial Plotter öffnest, solltest du sehen, dass die normalen Staubdichten um 0 µg/m 3 schwanken. Ich habe kräftig einen Staubwedel vor dem Sensor geschüttelt und du siehst den Ausschlag in der Staubdichte im Diagramm unten.

Serial Plotter output when Sensor is exposed to dust
Serial Plotter-Ausgabe, wenn der Sensor Staub ausgesetzt ist

Dann habe ich ein Streichholz abgebrannt und der Sensor hat wieder stark auf den entstehenden Rauch reagiert. Beachte, dass der Rauch länger in der Luft blieb als der Staub.

Serial Plotter output when Sensor is exposed to Smoke
Serial Plotter-Ausgabe, wenn der Sensor Rauch ausgesetzt ist

Zum Schluss kannst du die Funktion von Sensor und Code auch testen, indem du den Staubpfad mit einem Gegenstand blockierst, zum Beispiel mit einem kleinen Schraubendreher wie im Bild unten gezeigt.

Blocking Dust Path for Testing
Staubpfad zum Testen blockieren

Die gemessene Staubdichte sollte dann nahe an den Maximalwert von etwa 580 µg/m 3 kommen, den der Sensor messen kann. Ich habe einen Wert von 534 µg/m 3 erhalten.

Und das war’s! Ein praktischer kleiner Staubsensor, der dir hilft, deine Umgebung gesund zu halten.

Fazit

Der GP2Y1010AU0F ist einfach zu verwenden und ziemlich empfindlich. Er reagiert gut auf Staub, Rauch und sollte auch Pollen erkennen können, auch wenn ich das noch nicht getestet habe.

Wenn du den Sensor an einen anderen Mikrocontroller als das hier verwendete Arduino Uno anschließt, achte auf unterschiedliche Spannungen (5V vs. 3,3V) sowie auf die Auflösung und den Eingangsbereich des Analog-Digital-Wandlers (ADC). Viele Anleitungen zum GP2Y1010AU0F machen hier kleine Fehler, was zu falschen Staubdichte-Messungen führt. Achte auch auf die Umrechnung von mg/m 3 zu µg/m 3 , die manchmal falsch umgesetzt wird.

Wenn du einen Sensor brauchst, der die Konzentration von PM2.5-Partikeln messen kann, schau dir den DSM501 sensor an.

FAQ

Was sind gesunde und ungesunde Staubdichten, gemessen in µg/m 3 ?

Gesunde Staubdichten liegen typischerweise unter 50 µg/m 3 , während ungesunde Werte über 150 µg/m 3 liegen.

Wie ist der Zusammenhang zwischen Staubdichte in µg/m 3 und Feinstaub (PM), insbesondere PM2.5 und PM10?

Die in µg/m 3 gemessene Staubdichte steht in direktem Zusammenhang mit Feinstaub (PM), einschließlich PM2.5 und PM10. PM2.5 bezeichnet Partikel mit einem Durchmesser von 2,5 µm oder kleiner, während PM10 Partikel mit einem Durchmesser von 10 µm oder kleiner meint. Eine höhere Staubdichte bedeutet höhere Werte von PM2.5 und PM10 in der Luft.

Particle Size Comparison
Vergleich der Partikelgrößen ( source )

Warum ist PM2.5-Belastung schlecht für die Gesundheit?

Von allen Luftschadstoffen stellt PM2.5 die größte Gesundheitsgefahr dar. Aufgrund ihrer geringen Größe können PM2.5-Partikel lange in der Luft schweben und beim Einatmen tief in den Blutkreislauf gelangen.

Was sind die Hauptquellen für PM2.5-Belastung?

Typische Quellen für PM2.5 sind Motor- und Verbrennungsprozesse, Industrie, Öfen, Kamine und Holzheizungen im Haushalt, Rauch von Feuerwerk und Waldbränden, Rauchen, Staub- und Pollenpartikel.

Kann ein PM2.5- oder PM10-Sensor Pollen messen?

Die meisten Pollenpartikel sind größer als PM2.5- und PM10-Partikel und werden von einem PM2.5- oder PM10-Sensor ignoriert. Allerdings können Pollen, die normalerweise größer als 10 µm sind, in kleinere Partikel im PM2.5-Bereich zerfallen, die dann gemessen werden können.

Kann ich den GP2Y1010AU0F-Sensor kalibrieren, um PM2.5- oder PM25-Werte zu messen?

Nein, der GP2Y1010AU0F-Sensor ist für größere Partikel ausgelegt und kann nicht für die Messung von PM2.5- oder PM25-Werten kalibriert werden.

Wie groß sind Pollen typischerweise und kann ein Staubsensor wie der GP2Y1010AU0F die Pollendichte messen?

Pollen sind typischerweise etwa 10-100 µm groß. Wenn du Pollen in der Luft schweben siehst, sind die Partikel ziemlich groß, mindestens 60 µm. Der GP2Y1010AU0F Staubsensor kann Partikel ab 0,5 µm erkennen und somit auch Pollen erfassen.

Was ist ein ungesunder Wert für die Pollendichte?

Ein ungesunder Wert für die Pollendichte gilt in der Regel als hoch, wenn er 100 Pollenkörner pro Kubikmeter überschreitet, was bei empfindlichen Personen Allergien auslösen kann.

Welcher Wert in µg/m^3 entspricht 100 Pollenkörnern pro Kubikmeter?

Die Umrechnung von Körnern in Mikrogramm pro Kubikmeter (µg/m^3) hängt von der Dichte des jeweiligen Materials ab. Für Pollen beträgt der Umrechnungsfaktor etwa 1 Korn = 6,48 µg/m^3. Daher entsprechen 100 Pollenkörner etwa 648 µg/m^3.