
Seit einiger Zeit werden Aerosole, neben Tröpfchen, als Überträger für das SARS-CoV-2 Virus diskutiert. Das Problem ist: „Während insbesondere größere respiratorische Tröpfchen schnell zu Boden sinken, können Aerosole auch über längere Zeit in der Luft schweben und sich in geschlossenen Räumen verteilen“ (Zitat vom RKI).
Da man Aerosole nicht so einfach messen kann, aber weiß, dass diese ungefähr mit der CO?-Konzentration korrelieren, daher ein Raum der schlecht gelüftet ist und indem dadurch die CO?-Konzentration hoch ist, der hat auch eine hohe Aerosol-Konzentration, haben sich schlaue Menschen um Guido Burger und den Umweltcampus Birkenfeld überlegt, wie man einfach CO? messen kann.
Die Anleitung von Guido Burger auf der Website des Make Magazin
Glücklicherweise gibt es inzwischen von Sensirion einen günstigen Sensor und Guido Burger hat mit der Octopus-Platine eine Bauteil, die diesen steuern kann. Programmiert werden kann der Octopus über ArduBlock, eine visuelle Programmiersprache, bei der man keinen Text eingeben muß, sondern einfach kleine visuelle Blöcke zusammenschieben, aus diesen ergibt sich dann das Programm mit seinen Schleifen, Bedingungen und Zugriff auf Sensoren und Ausgabegeräte.
Update: der UmweltCampus Birkenfeld hat inzwischen eine eigene Seite mit Videos und Tutorial zur Verfügung gestellt. Ein Blick darauf lohnt sich. Es sind auch viele weitere Anzeige-Optionen möglich.
Ich will hier in einem kleinen Tutorial beschreiben wie man sich so ein CO?-Meßgerät baut. Die Umweltwerkstatt Birkenfeld hat die Überlegungen, Hintergründe und ein wenig eine Anleitung auch auf ihrer Website zusamemngefasst. Aber da ich kein technisch begabter Bastler bin, hatte ich so einige Hindernisse zu überwinden, bis ich zum Meßgerät kam. Die einen Basteln eine Ampel, ich möchte eher ein Messgerät haben. Dennoch empfehle ich den Blick auf ihre Website.
Bestell-Liste
- Octopus-Platine – gibt es bei Tindie, auch wenn dort steht das sie gerade ausverkauft sei, Guido Burger hat welche, im Zweifel auf Twitter schreiben. Ich bemühe mich um eine bessere Verfügbarkeit. Ca. 30€
- Kohlendioxidsensor SCD30 – gibt es in verschiedenen Versionen, mit Grove-Steckern, derzeit leider meist ausverkauft. Aber auch ohne, dann muss man vier Beinchen anlöten (Stand Anfang September ’20 waren 765 verfügbar und weitere 1200 bestellt). Ich werde hier immer auf Mouser verlinken, da ich da auch meine Teile beziehe, es sind aber keine Affiliate-Links. Wer woanders bestellen will, muss einfach googeln. (Digikey ab 53€ inklusive MwSt, RS Online ab 72€ mit MwSt, bei Mouser derzeit ausverkauft)
- Grove-Kabel, zum Anschluß von Sensor an die Platine. Ca. 3€
Auf jeden Fall brauchen wir noch eine Stromquelle, etwa eine Powerbank und ein Micro-USB-Kabel und vielleicht noch ein Gehäuse. Das hat man aber in den meisten Haushalten, daher verlinke ich nichts. Hier kann man kreativ sein.
Mehr würde man nicht brauchen. Man kann den Octopus so einstellen, dass er die gemessenen Daten über die serielle Schnittstelle ausgibt. Schaltet man die serielle Ansicht in der Arduino IDE ein, sieht man die aktuellen Messdaten.
Das ist cool, aber immer das Laptop zum messen rumtragen ist dann auf Dauer doch etwas nervig. Daher wollen wir den Wert anzeigen. Dazu gibt es unterschiedliche Möglichkeiten.
- 7-Segment Anzeige unter 10 €
- Grove 16×2 LCD ein nettes LCD Display mit zwei Zeilen und 16 Zeichen, (ca 5 €) allerdings brauchen wir um es gleichzeitig mit Sensor betreiben zu können auch noch einen Grove I2C Hub. (ca 1,50 €). Ich verwende meist diese Anzeige, da sie mehr Werte darstellen kann und billiger ist.
Insgesamt kommen wir also auf ca 90 € für die Teile.
Software installieren
Wir brauchen eine spezielle Version der Arduino IDE in der ein spezielles Blockly mit den Blöcken für unseren Octopus, Sensor und Anzeigen läuft. Das gibt es zum Download auf der Seite der IoT2 Seite vom Umweltcampus Birkenfeld.
Für Windows ist es relativ einfach, Download des aktuelle Zip-File der Werkstatt-Plattform und dann den Chipsatz-Treiber installieren. Wie es geht haben sie in einem PDF erklärt. Wichtig ist unter Werkzeuge den richtigen „COM“-Port auszuwählen.
Für macOS ist es ein wenig komplizierter, aber mit der Anleitung auch gut zu machen. Auch hier den Chipsatz-Treiber installieren, die Arduino IDE von Arduino herunterladen, dann installieren. Dann in den Ordner Programme gehen, dort rechtsklick und „Paketinhalt zeigen“ auswählen. Wir sehen dann was sich hinter dem Icon verbrigt, nämlich die Struktur des Arduino-Programms. Jetzt das Archiv „IoTW.zip“ herunterladen, dann entpacken und öffnen. Da gibt es ein Unterordner namens „Portable“, diesen nehmen und in die auf dem Mac installiere Arduino IDE und da in den Unterordner „Java“ ziehen.
Leider haben sie noch kein fertiges Image für Raspbian, dann könnte man sich einfach RaspberryPis damit flashen und ggf. bei Massenbastelaktionen auch einfach mehrere Stationen aufsetzen. Es gibt aber eine Anleitung für Linux.
Noch sind wir nich ganz fertig, wir gehen noch unter „Werkzeuge“ auf „Boardverwalter“, da gibt es ganz viele Boards. Wir gehen auf „ESP Community“ Package und führen eine Update durch.

Bei „Werkzeuge“ wählen wir noch unter Port: „/dev/cu.SLAB…“ aus. Als Board stellen wir „Generic ESP8266 Module“ ein. Mehr müßen wir nicht einstellen.
Sollte etwas beim flashen der Software auf das Board nicht klappen, vielleicht mal ein anderes USB Kabel verwenden.
Hardware zusammenbauen
Wir müßen an den SCD30 Sensor nun auch noch das Grove Kabel anlöten. Das hört sich schwerer an als gedacht. Wir schneiden also an einem Ende den weissen Stecker ab und löten die Kabel direkt an.
Sensor | Kabel |
VIN | rot |
GND (schlecht zu lesen) | schwarz |
SCL | gelb |
RXSDA | weiß |
Software für den Octopus „programmieren“
Nun sind wir fast fertig. Allerdings müssen wir dem Octopus noch mitteilen was er denn so zu tun hat. Dafür nutzen wir die fertige ArduBlock Oberfläche.


Es gibt grundsätzlich zwei Teile:
Setup – hier werden alle Sachen eingetragen, die der Octopus machen soll wenn er hochfährt. In unserem fall ist es den rechten Neopixel blau leuchten lassen, beim SCD30 die Kalibrierung auf 233 m durchführen, am 7-Segment-Display „5000“ anzeigen.
Schleife – der Neopixel wird weiß, als Zeichen das er nun in der Schleife ist, auf dem 7-Segment-Display wir der Wert angezeigt und dann wartet der Octopus wiederum 5 Sekunden, also 5000 Millisekunden um einen neuen Wert anzuzeigen.
Wir finden die einzelnen Funktionsblöcke auf der linken Seite.

Für uns ist spannend unter Kontrollstrukturen der Block „Warte“. 1000 Milisekunden sind eine Sekunde.

Bei „externe Interfaces“ finden wir zwei Blöcke die für uns sehr nützlich sind: Einmal das 7-Segment Display

und den eigentlichen Umweltsensor.

Wir können diese miteinander verketten, dann zeigt das 7-Segment-Display den Wert den der Sensor uns gibt an. Wobei man im roten Pfeil auch andere Meßwerte auswählen kann, etwa Feuchte oder Temperatur.

So viel dazu – weitere Experimente folgen.
Danke
Ich habe mir dieses Projekt nicht selbst ausgedacht, sondern hier nur aufgeschrieben, wie ich es nach der Anleitung und dem Austausch diverser Twitter-DMs gemacht habe. Erfunden hat es Guido Burger und der Umweltcampus Birkenfeld mit ihrer IoT Werkstatt.
Weitere Informationen
Quellcode
Erstellt mit Ardublocks.
#include <Adafruit_NeoPixel.h>
#include <SparkFun_SCD30_Arduino_Library.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_LEDBackpack.h>
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(2,13,NEO_GRBW + NEO_KHZ800);
//Reading CO2, humidity and temperature from the SCD30 By: Nathan Seidle SparkFun Electronics
//https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library
SCD30 airSensorSCD30; // Objekt SDC30 Umweltsensor
// Adafruit Feather 7 Segment https://learn.adafruit.com/adafruit-7-segment-led-featherwings/overview
Adafruit_7segment matrix7Seg = Adafruit_7segment(); // 7Segment Feather
void setup(){ // Einmalige Initialisierung
pixels.begin();//-------------- Initialisierung Neopixel
delay(1);
pixels.show();
pixels.setPixelColor(0,0,0,0,0); // alle aus
pixels.setPixelColor(1,0,0,0,0);
pixels.show(); // und anzeigen
Wire.begin(); // ---- Initialisiere den I2C-Bus
if (Wire.status() != I2C_OK) Serial.println("Something wrong with I2C");
if (airSensorSCD30.begin() == false) {
Serial.println("The SCD30 did not respond. Please check wiring.");
while(1) {
yield();
delay(1);
}
}
Serial.begin(115200);
matrix7Seg.begin(0x70); // ---- Initialisiere 7Segment Matrix
matrix7Seg.clear(); //
matrix7Seg.writeDisplay();
airSensorSCD30.setAutoSelfCalibration(false); // Sensirion no auto calibration
airSensorSCD30.setMeasurementInterval(2); // CO2-Messung alle 5 s
pixels.setPixelColor(0,0,0,30,0);
pixels.show();
// Forced Calibration Sensirion SCD 30
airSensorSCD30.setAltitudeCompensation(233); // Altitude in m ü NN
airSensorSCD30.setForcedRecalibrationFactor(400); // fresh air
matrix7Seg.print(5000);
matrix7Seg.writeDisplay();
delay( 5000 );
Wire.setClock(100000L); // 100 kHz SCD30
Wire.setClockStretchLimit(200000L);// CO2-SCD30
}
void loop() { // Kontinuierliche Wiederholung
pixels.setPixelColor(0,0,0,0,30);
pixels.show();
matrix7Seg.print(airSensorSCD30.getCO2());
matrix7Seg.writeDisplay();
delay( 5000 );
}
Weitere Octopus-Basteleien:
- Octopus mit dem Internet verbinden und Daten empfangen
- Octopus un MacOS
- Daten versenden mit dem Octopus und Thingsspeak
Auf der Website von Umweltcampus Birkenfeld gibt es eine gute Übersicht zum Octopus allgemein, mit Anleitungen für unterschiedliche Betriebssysteme und die Programmblöcke. Sowie auch die Anleitung zur CO2 Ampel,