CO2 Messen mit dem Octopus

by
So kann das aussehen: oben Rechts am Octopus ist der I2C Stecker, von dorrt das Kabel mit dem Hun verbinden und von da ein Kabel an die

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 CO2 korrelieren, daher ein Raum in dem schlecht gelülftet ist und indem dann auch die CO2 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 CO2 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 Platine, die diesen Steuern kann. Programmiert werden kann der Octopus über ArduBlock, eine visuelle Programmiersprache, bei der man keinen Text eingeben muß, sondern einfach kleine Blöcke zusammenschieben, aus diesen ergibt sich dann das Programm mit seinen Schlaufen, 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’s. Es sind auch viele weitere Anzeige

Ich will hier in einem kleinen Tutorial beschreiben wie man sich so ein CO2 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 Basteln eine Ampel, ich möchte eher ein Meßgerät haben. Dennoch empehle ich den Blick auf ihre Website.

Bestellliste

  • Ocotopus 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 EUR
  • Kohlendioxidsensor SCD30 – gibt es in verschiedenen Versionen, mit Grove Steckern, derzeit leider meist ausverkauft. Aber auch ohne, dann muß man vier Beinchen anlöten (Stand 1.9.2020 waren 765 verfügbar und weitere 1200 bestellt). Ich werde hier immer auf Mouser verlinken, weil ich da auch meine Teile beziehe, es sind aber keine Affiliate Links. Wer woanders bestellen will, muß einfach googeln. (Digikey ab 53 EUR inklusive Mwst, RS Online ab 72 EUR mit MwSt, bei Mouser derzeit ausverkauft)
  • Grove Kabel, zum Anschluß von Sensor an die Platine. Ca. 3 EUR

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 Meßdaten.

Kalibiere, Leuchte das man sieht dass du an bist und dann übermittle alle 3 Sekunden einen Wert.

Das ist cool, aber immer das Laptop zum meßen 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 EUR
  • Grove 16×2 LCD ein nettes LCD Display mit zwei Zeilen und 16 Zeichen, (ca 5 EUR) allerdings brauchen wir um es gleichzeitig mit Sensor betreiben zu können auch noch einen Grove I2C Hub. (ca 1,50 EUR). Ich verwende meist diese Anzeige, da sie mehr Werte darstellen kann und billiger ist.

Insgesamt kommen wir also auf ca 90 EUR 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 RasperryOS, dann könnte man sich einfach Rasperrys 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 weißen Stecker ab und löten die Kabel direkt an.

SensorKabel
VINrot
GND (schlecht zu lesen)schwarz
SCLgelb
RXSDAweiß
Verkabelungsschema
so sollte es dann aussehen, Lötstellen kann man natürlich schöner machen.

Software für den Octopus „programmieren“

Nun sind wir fast fertig. Allerdings müßen wir dem Octopus noch mitteilen was er denn so zu tun hat. Dafür nutzen wir die fertige ArduBlock Oberfläche.

Mein Programm für das Meßgerät. Es soll alle 5 Sekunden den Wert anzeigen. Es ist jetzt keine Warnfunktion oder Ampel integriert.

So sah mein Ampel Programm aus. Man kann das auch anders gestalten, aber das wäre mal ein Vorschlag und er geht!

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 Milisekunden um einen neuen Wert anzuzeigen.

Wir finden die einzelnen Funktionsblöcke auf der linken Seite.

Kontrollstrukturen

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: Einmnal 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. Experimente folgen.

Danke

Ich habe mir dieses Projekt nicht selber 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:

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,

Schlagwörter: , , , , , , , , , , , ,

Hinterlasse einen Kommentar

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..