MQ-135-luchtkwaliteitssensor voor Arduino

FunduinoLaatst bijgewerkt op

Schadstoffe in der Luft messen und als einfache Ampel anzeigen

Der MQ-135 ist ein Gassensor, der auf eine ganze Reihe von Stoffen in der Raumluft reagiert – unter anderem auf Rauch, Alkohol, Ammoniak und Kohlendioxid. Er liefert keinen geeichten ppm-Wert, sondern eine Zahl, die steigt, wenn die Luft schlechter wird.

Genau daraus lässt sich etwas Praktisches bauen: In dieser Anleitung liest du den Sensor am Arduino aus, bestimmst deinen eigenen Frischluft-Referenzwert und baust daraus eine Ampel aus einer roten und einer grünen LED.

Rückseite des MQ-135-Sensormoduls mit blauem Potentiometer
Rückseite des MQ-135: über das Potentiometer stellst du den Schwellenwert für den digitalen Ausgang ein

Material

Für dieses Projekt brauchst du:

  • 1× Mikrocontroller mit passendem USB-Kabel
  • 1× Luftqualitätssensor MQ-135
  • 1× Breadboard
  • Breadboardkabel

Für die Ampel im letzten Schritt kommen dazu:

  • 1× rote LED und 1× grüne LED
  • 2× Vorwiderstand 220 Ohm

Die Anschlüsse des MQ-135

Der MQ-135 erfasst die Konzentration verschiedener Schadstoffe in der Luft und gibt sie als analogen Wert aus. Das Modul hat vier Anschlüsse:

  • VCC – Stromversorgung, an den 5V-Pin des Arduino
  • GND – an einen GND-Pin des Arduino
  • A0 – analoger Ausgang, an den Pin A0 des Arduino
  • D0 – digitaler Ausgang, der nur meldet, ob ein Schwellenwert überschritten ist

Für diese Anleitung brauchst du nur VCC, GND und A0. Den Schwellenwert für den digitalen Ausgang stellst du mechanisch am Potentiometer auf der Rückseite des Moduls ein.

Schließe D0 nicht an den Arduino-Pin 0 an. Pin 0 ist zusammen mit Pin 1 die serielle Schnittstelle, über die auch der Sketch hochgeladen wird. Wenn du den digitalen Ausgang nutzen willst, nimm dafür einen freien Pin, zum Beispiel Pin 2.

Rückseite des MQ-135-Sensormoduls mit blauem Potentiometer
Rückseite des MQ-135: über das Potentiometer stellst du den Schwellenwert für den digitalen Ausgang ein

Sensor einbrennen und Referenzwert bestimmen

Der MQ-135 arbeitet mit einem beheizten Sensorelement. Ein fabrikneues Modul liefert deshalb erst nach einer längeren Einbrennzeit stabile Werte. Lass den Sensor dazu am besten 24 bis 48 Stunden durchgehend an der Spannungsversorgung.

Danach bestimmst du deinen persönlichen Referenzwert: Lege den Sensor an die frische Luft, warte einige Minuten und lies den Wert ab, den er dort anzeigt. Dieser Wert ist dein Nullpunkt für „gute Luft“. In unserem Aufbau lag er bei ungefähr 30 – bei dir kann er deutlich abweichen.

Das Sensorelement wird im Betrieb spürbar warm. Das ist normal. Der MQ-135 misst eine Mischung aus verschiedenen Gasen und ist kein geeichtes Messgerät – seine Werte sind Anhaltspunkte, keine ppm-Angaben.

Sensorwert auslesen

Lade den Sketch auf den Mikrocontroller und öffne den Seriellen Monitor mit 9600 Baud. Dort erscheint jede Sekunde der aktuelle Messwert. Halte den Sensor zum Test kurz an eine Duftquelle, zum Beispiel an einen Filzstift – der Wert steigt dann deutlich an.

Sketch 1: Sensorwert auslesen
int Sensorwert;

void setup()
{
  Serial.begin(9600);            // Baudrate 9600 festlegen, damit die Werte im Seriellen Monitor erscheinen.
}

void loop()
{
  Sensorwert = analogRead(A0);   // Der Wert am Pin A0 wird ausgelesen ...
  Serial.print("Der erfasste Wert lautet: ");
  Serial.println(Sensorwert);    // ... und im Seriellen Monitor ausgegeben.
  delay(1000);
}

Eine Ampel aus zwei LEDs bauen

Mit dem Referenzwert aus Schritt 3 baust du jetzt eine kleine Kontrollstation. Erweitere den Aufbau um zwei LEDs mit je einem 220-Ohm-Vorwiderstand: die rote LED an Pin 12, die grüne an Pin 13.

Liegt der Messwert bei 40 oder darüber, leuchtet zwei Sekunden lang die rote LED. Liegt er bei 39 oder darunter, leuchtet die grüne.

Die Schwelle 40 passt zu unserem Referenzwert von rund 30. Liegt dein eigener Frischluftwert höher oder niedriger, verschiebe die beiden Zahlen im Sketch entsprechend – sonst leuchtet immer dieselbe LED.

Sketch 2: Luftqualitaets-Ampel mit zwei LEDs
int Sensorwert;
int LEDgruen = 13;               // Die gruene LED wird mit Pin 13 verbunden
int LEDrot = 12;                 // Die rote LED wird mit Pin 12 verbunden

void setup()
{
  Serial.begin(9600);            // Baudrate 9600 festlegen, damit die Werte im Seriellen Monitor erscheinen.
  pinMode(LEDgruen, OUTPUT);     // Die LEDs dienen als Ausgang
  pinMode(LEDrot, OUTPUT);
}

void loop()
{
  Sensorwert = analogRead(A0);   // Der Wert am Pin A0 wird ausgelesen ...
  Serial.print("Der erfasste Wert lautet: ");
  Serial.println(Sensorwert);    // ... und im Seriellen Monitor ausgegeben.

  if (Sensorwert >= 40)          // Ist der Sensorwert groesser oder gleich 40 ...
  {
    digitalWrite(LEDrot, HIGH);  // ... soll die rote LED ...
    delay(2000);                 // ... fuer 2 Sekunden aufleuchten ...
    digitalWrite(LEDrot, LOW);   // ... und danach wieder ausgehen.
  }

  if (Sensorwert <= 39)          // Ist der Sensorwert kleiner oder gleich 39 ...
  {
    digitalWrite(LEDgruen, HIGH); // ... soll die gruene LED ...
    delay(2000);                  // ... fuer 2 Sekunden aufleuchten ...
    digitalWrite(LEDgruen, LOW);  // ... und danach wieder ausgehen.
  }

  delay(1000);
}
Handleiding beoordelen

Opmerkingen

Stel een vraag of deel je ervaring

Neem contact met ons op als iets niet werkt. Vermeld daarbij je board en de foutmelding.

We controleren elke reactie voordat deze wordt gepubliceerd. Je e-mailadres blijft bij ons.