Zum Inhalt

Arduino Raumluftampel

Aufgebaute Raumluftampel

Durch die Corona-Pandemie im Jahr 2020 und 2021 und die hohe Übertragung in Innenräumen durch Aerosole, bekommt zielgerichtetes Lüften eine besondere Aufmerksamkeit. Eine Anzeige über die Qualität der Raumluft kann mehrere Vorteile bieten. Einerseits sinkt die Konzentrationsfähigkeit bei mangelnder Versorgung mit Sauerstoff, andererseits steigt die Wahrscheinlichkeit der Übertragung einer Infektionskrankheit über Aerosole, wenn die Luft nicht häufig durch Lüften ausgetauscht wird.

Daher ist es nicht nur zu Pandemie-Zeiten sinnvoll Klassenzimmer oder Innenräume mit Messgeräten auszustatten, die die Qualität der Raumluft anzeigen.

In den folgenden Abschnitten wird ein einfacher Aufbau einer solchen Ampel vorgestellt, dieser basiert auf einer indirekten Messung der Partikelanzahl in der Luft und der Auswertung mit einem Arduino Microcontroller.

Messprinzip

Der Sensor MQ-135 ist ein breitbandiger Metalloxid-Halbleiter Gassensor. Kernstück ist ein Zinndioxid-Element.

Stark vereinfacht beruht das Messprinzip darauf, dass sich auf dem Material des Sensors Sauerstoffatome anlagern. Dabei nehmen die Sauerstoff-Atmome Elektronen aus dem Sensormaterial auf. Wenn sich nun Partikel aus der Umgebungsluft an die Sauerstoffatome anlagern, geben diese wiederum Elektronen an das Sensormaterial zurück. Durch die gestiegene Anzahl an Elektronen steigt die elektrische Leitfähigkeit des Sensormaterials.

Wenn wir also die elektrische Leitfähigkeit des Sensormaterials messen, können wir Rückschlüsse darauf ziehen, wie viele Partikel sich in der Raumluft befinden.

Damit eignet sich der Sensor nicht zum Nachweis eines spezifischen Gases in der Luft, allerdings aber für eine Messung der Partikelbelastung der Raumluft insgesamt. Daher kann diese Art der Messung als Hinweisgeber für rechtzeitiges Lüften verwendet werden.

Einen guten Eindruck der Vorgänge vermittelt folgende schematische Animation:

Schematische Animation von Figaro Enginnering Inc.

Material

Das Set setzt sich aus folgendem Material zusammen:

  • MQ-135 Luftgüte Sensor (Datenblatt)
    Wichtige Info: Bei erster Inbetriebnahme muss sich der Sensor etwa 24h am Stück "einbrennen". Am besten schließt man den fertigen Aufbau für ein bis zwei Tage an ein USB-Ladegerät an. Nach der Einbrennphase ist auf dem Sensor-Board gespeichert, dass das Einbrennen abgeschlossen ist.

    MQ-135 Sensor

  • Arduino Nano Microcontroller

    Arduino Nano

  • RGB-LED (Datenblatt)

    RGB-LED Platine

  • Buzzer (optional, Datenblatt)

    Buzzer-Platine

  • 400 Pin Steckbrett

    400 Pin Steckbrett

  • Steckbrett Kabel

    Jumper-Kabel

Aufbau

Die Schaltung wird auf einem Steckbrett aufgebaut. Dieses hat außen jeweils zwei Leiterbahnen, die sich für die + und - Verbindungen anbieten. Außerdem in der Mitte einen großen Bereich in dem die Pins immer in Spalten miteinander verbunden sind.

Die Verbindungen sind in folgender Grafik einmal dargestellt:

Schematische Darstellung der Verbindungen auf einem 400 Pin Steckbrett

Die aufgebaute Schaltung mit Sensor und LED-Anzeige sieht wie folgt aus:

Schematische Darstellung des Aufbaus der Raumluftampel

Die Farbe der Kabel spielt für die Funktion des Aufbaus keine Rolle und wurde hier nur der Übersicht halber so gewählt.

Verbindungen

Die einzelnen Bauteile sind mit verschiedenen Kontakten am Arduino verbunden.

Die RGB-LED:

  • Der Pin für die Farbe blau ist beim Arduino mit dem Pin D9 verbunden

  • Der Pin für die Farbe rot ist beim Arduino mit dem Pin D11 verbunden

  • Der Pin für die Farbe grün ist beim Arduino mit dem Pin D10 verbunden

  • Der Pin für den Kontakt am Minuspol (auch GND für Ground) ist über einen Umweg mit dem GND-Pin des Arduino verbunden

Der Gassensor MQ-135:

  • Der VCC Pin für die Spannungeversorgung ist über einen Umwag mit dem 5V Pin des Arduino verbunden

  • Der GND Pin (Ground oder Minuspol) ist über einen Umweg mit dem GND-Pin des Arduino verbunden

  • Der Pin A0, an dem der Widerstand/die Leitfähigkeit des Sensors gemessen wird ist mit dem Pin A0 des Arduino verbunden

Beide Elemente "teilen" sich einen GND-Pin am Arduino.

Einsatz

Auf deinem Arduino läuft bereits ein Programm, welches die Güte der Umgebungsluft misst.

Funktionalität

Das Programm startet sich, wenn der Arduino mit Spannung versorgt wird. Entweder man schließt den Arduino mit dem beiliegenden Kabel an einen Rechner an, oder an ein USB-Ladegerät.
Bei erster Inbetriebnahme sollte man die Einbrennphase des Sensors beachten.

Kalibrierung

Das auf dem Arduino laufende Programm kalibriert den Sensor erst einmal auf frische Luft. Damit die Kalibrierung erfolgreich abgeschlossen werden kann, muss die Schaltung erst einmal etwa 10 Minuten an der frischen Luft sein. Während der Kalibrierung leuchtet die LED blau (so lange sollte die Raumluftampel auch an der frischen Luft sein). Nach Abschluss der Kalibrierung wechselt die LED auf eine andere Farbe.

Während der Kalibrierung wird der Sensor auf Betriebstemperatur gebracht und der Messwert des Sensors als Wert für frische Umgebungsluft festgelegt.

Messung

Anschließend wird einmal pro Sekunde die Partikelbelastung in der Luft gemessen und der Wert über die LED ausgegeben:

  • Grün: Gute Luft

  • Orange: Mittlere Luft

  • Rot: Schlechte Luft

Sollte der Messwert des Sensors unter den der vorher gemessenen frischen Luft fallen, so beginnt der Kalibrierungsvorgang erneut.

Zuverlässigkeit

Durch die indirekte Messung kann es immer vorkommen, dass unser Messgerät keine zuverlässigen Daten liefert. Am stabilsten und zuverlässigsten arbeitet die Raumluftampel, wenn sie lange Zeit am Stück (mehrere Stunden bis Tage) läuft. Am besten lässt man sie dann noch einmal einige Minuten an frischer Luft kalibrieren, um möglichst zuverlässige Ergebnisse zu erhalten.

Unter diesen Umständen liefert der Sensor ähnliche Messwerte, wie ein spezifischer CO2-Sensor.

Programmierung

Arduino Microcontroller

Bevor man sich der tatsächlichen Programmierung zuwendet, sollten wir uns einmal klar machen, was unser ArduinoMicrocontroller eigentlich kann und aus welchen grundlegenden Bestandteilen er besteht:

  • Analoge Eingänge: An den Kontakten A0-A7 kann der Arduino eine anliegende Spannung zwischen 0V und 5V messen.
  • Ein-/Ausgänge: An den Kontakten D0-D13 kann der Arduino:
    • Unterscheiden ob eine Spannung größer ist als 3V (digitaler Eingang)
    • Eine Spannung von 0V oder 5V ausgeben (digitaler Ausgang)
    • Ein Signal ausgeben, das sehr schnell zwischen 0V und 5V wechselt, so dass man eine "virtuelle Spannung" zwischen 0V und 5V ausgeben kann (Pulsweitenmodulation an den Kontakten mit ~ D3,D5,D6,D9,D10,D11)
  • Ein Microcontroller: hier findet die Signalverarbeitung aus den Eingängen statt und Befehle an die Ausgänge werden ausgeführt.

Arduino Nano Pin-Belegung

Mit dem Arduino ist daher eine ganze Menge möglich. Am Ende lässt sich die Funktionalität immer auf das Auslesen von Spannungen an den Eingängen und das Ausgeben von Spannungen an den Ausgängen zurückführen.

ArduBlock

Das Programm wurde in einer grafischen Programmiersprache (ArduBlock) geschrieben, um einfacher verständlich zu sein:

Schematische Darstellung des Codes in ArduBlock

Allerdings nehmen Definitionen und Unterfunktionen sehr viel Raum ein. Dennoch lassen sich auch in der großen und nicht ganz übersichtlichen Grafik einige Dinge erkennen: Das Programm gliedert sich in verschiedene Bereiche, die farblich unterschiedlich markiert sind:

  • Dunkles grün: Der sogennannte Programmkopf. Hier sind Eckdaten zum Programm aufgeführt, wie Programmname, Autor, Version und Datum. Der Microcontrolle hat hier nichts zu tun, diese Informationen sind zur Übersicht gedacht.

    Ardublock Darstellung des Programmkopfes

  • Gelb: Das eigentliche Programm. Hier arbeitet der Microcontroller generell alle Befehle von oben nach unten ab. Der gelbe Bereich gliedert sich wiederum in drei Bereiche

    Ardublock Darstellung des Programmteils

    • Der Bereich vor dem Setup: Hier werden Dinge definiert, die für das ganze Programm von Nutzen sind. Bei unserer Raumluftampel zum Beispiel die Grenzwerte, ab denen die Luft als mittel oder schlecht angesehen wird.

    • Das Setup: Die Befehle hier werden vom Microcontroller nur einmal beim Start ausgeführt und dann nicht mehr.

    • Der Loop: Die Befehle hier, werden von oben nach unten abgearbeitet und dann beginnt der Microcontroller von vorn. So dass diese immer wieder ausgeführt werden.

  • Helles Grün: Funktionen
    Funktionen sind eine Sammlung von Befehlen (die wieder von oben nach unten abgearbeitet werden), welche sich von anderen Stellen im Programmcode ausführen lassen. Das ermöglicht, dass das eigentliche Programm übersichtlicher ist, da statt aller Befehle nur der Funktionsname aufgerufen wird.

    Ardublock Darstellung einer Funktion

Übersicht Ardublock und Microcontroller

Eine hervorragende Übersicht über Grundlagen der Funktion eines Microcontrollers und der Bedienung mittels ArduBlock finden sich in den Begleitheften des letsgoING-Kurses der Hochschule Reutlingen:

  1. Microcontroller kennenlernen
  2. Digitale Signale und Variablen
  3. Analoge Signale und Variablen

Installation ArduinoIDE und ArduBlock

Um das auf dem Arduino lufende Programm den eigenen Bedürfnissen anzupassen, benötigt man ein Programm um einerseits den Code zu schreiben und andererseits das Programm auf den Arduino hochzuladen.

Eine Software mit der Code für den Arduino Microcontroller geschrieben und auf den Arduino hochgeladen werde kann ist die Arduino IDE. Sie kann hier heruntergeladen und anschließend installiert werden:
Arduino-IDE Download

Die Installation der grafischen Programmieroberfläche ArduBlock ist leider etwas umständlicher und beinhaltet folgende Schritte:

  1. Installation der Arduino-IDE

  2. Einmaliger Start der Arduino-IDE
    Dabei erstellt die IDE in deinem Benutzerverzeichnis einen Ordner Arduino.

  3. Erstelle in dem Arduino-Ordner in deinem Dokumentenverzeichnis folgende Ordnerstruktur:
    tools/ArduBlockTool/tool/ also im Ordner Arduino einen Ordner tools in diesem einen Ordner ArduBlockTool und in diesem wiederum einen Ordner tool.
    Bebilderte Anleitung für Windows

  4. Lade die ArduBlock-Datei herunter: ArduBlock Download

  5. Verschiebe die heruntergeladene .jar-Datei in den eben erstellten tools-Ordner.

Nun kannst du die ArduBlock-Umgebung starten, indem du in der ArduinoIDE zu Werkzeuge → ArduBlock navigierst.

Ardublock aus der IDE starten

Auslesen der Sensorwerte der Raumluftampel:

Ist die Raumluftampel an einen Rechner angeschlossen, so kann man sich über den Serial Monitor die Messwerte ausgeben lassen. Die Raumluftampel gibt einen virtuellen CO2-Gehalt der Luft an, unter der Annahme, dass nur CO2 als Spurengas vorhanden ist.

Aufruf des Serial Monitors:

  • Aus der Arduino IDE: Werkzeuge → Serieller Monitor ( Strg + Shift ↑ + M )
  • Aus ArduBlock: In der oberen Leiste Klick auf Serieller Monitor

Upload eines Programms auf den Arduino

Der Arduino Microcontroller führt immer das zuletzt hochgeladene Programm aus. Um also Änderungen vorzunehmen, muss man das geänderte Programm auf den Arduino hochladen.
Es gibt keine Möglichkeit sich anzeigen zu lassen, welcher Code gerade auf dem Arduino ausgeführt wird. Wir haben immer nur die Möglichkeit unseren aktuellen Code auf den Arduino hochzuladen, so dass dieser ausgeführt wird.

Generell geschieht das aus ArduBlock heraus. In der oberen Zeile ist ein Button Hochladen auf den Arduino. Nachdem dieser gedrückt wurde übergibt ArduBlock das Programm an die Arduino IDE. Diese baut aus dem generierten geschriebenen Code einen maschinenlesbaren Code (dieser Vorgang nennt sich kompilieren) und versucht dann den maschinenlesbaren Code auf den Arduino hochzuladen. Damit das gelingt müssen ein paar Voraussetzungen erfüllt sein:

  • Der Port (Werkzeuge → Port) muss korrekt ausgewählt sein
  • Das Board muss korrekt ausgewählt sein: Werkzeuge → Board → Arduino Nano
  • Unter Prozessor muss der alte Bootloader ausgewählt sein: Werkzeuge → Prozessor → ATmega328P (old bootloader)

Nach diesen Vorbereitungen sollte es möglich sein, den mit ArduBlock geschriebenen grafischen Code auf den Arduino hochzuladen, ohne eine weitere Fehlermeldung angezeigt zu bekommen.

Hier sind in ungeordnerter Reihenfolge Quellen aufgelistet, die Vorbild für dieses Projekt waren, oder die einfach weiterführende Informationen bieten, teilweise sind die Informationen nur auf Englisch verfügbar. Die Links verweisen alle auf das Web-Archive um langfristig auf denselben Inhalt zu verweisen.