“Mit den Ampeln ist es möglich zu messen wie viel CO2 in der Luft eines Klassenzimmers oder eines anderen Raums vorhanden ist und ab einer bestimmten Konzentration einen Hinweis auf das Lüften zu geben.”, erläutert Lehrer Schreier. “Die Schulen sind vom Kultusministerium gehalten alle 20 min zu lüften. Aber wie lange soll man lüften? Bis alle frieren oder bis die Raumluft erneuert wurde? Das können wir jetzt bestimmen”
CO2 ist ein gutes Maß für die Konzentration von Aerosolen, die neben Tröpfchen, als dem direkten Anhusten, für die Übertragung von SARS-COV2 verantwortlich sein können.
Weil mich immer mal wieder Menschen nach einem Beispiel für Code und Installation der CO2 Ampel mit dem Octopus und SCD30 Sensor fragen, hier mal als Inspiration ein Beispielprojekt:
Ohne das sie es groß bekannt gemacht haben, haben die netten Leute vom Umweltcampus Birkenfeld gleich ein paar neue Blöcke für die Octopus Platine bereitgestellt.
Recht unspektakulär aber nützlich, sind die beiden C code Blöcke. Mit diesen kann man freien, eigenen C Code einfügen, bereits im Ardublockly und nicht erst in der Arduino IDE. Die finden sich bei Kontrollstrukturen.
Viel spektakulärer ist der CO2-Server Block. Er stellt auf dem Octopus einen kleinen Server zur Verfügung, der eine kleine Ampel darstellt. Diese kann mit jedem Gerät, das sich in ein WLAN einwählen kann und Webseiten darstellen, ausgelesen werden.
Ich habe sie mit dem AcessPoint Block kombiniert. Nun spannt der Octopus sein eigenes WLAN auf und man kann auf der Adresse http://192.168.4.1 auf die Website zugreifen. Die Werte die er unter Value empfängt, etwa aus dem SCD30 Block werden zum einen als Wert dargestellt, zum anderen lassen sich auch „Limits“ Schwellen eintragen, ab denen das Smiley gelb und rot wird. Die Adresse wird beim hochfahren im Seriellmonitor angezeigt. Zugriff auf diesen im Ardublock Übersicht Button „Seriellmonitor“
Bei Sensor 1 und Value 1 lassen sich dann einfach weitere Sensoren hinzufügen. Das praktische ist, das sich so ohne eine zusätzliche Anzeige, mit einem Mobilgerät die Werte auslesen lassen. Wodurch man nochmal den Preis senken kann (nicht jede Platine hat ja Neopixel dran).
Man kann die Daten für den WLAN Acesspoint etwa in einen QR Code eingeben, dann können es die Anwesenden gleich abscannen. Und ggf. einen zweiten QR Code mit dem Link.
SSID: MeinOctiWLAN mit Passwort: MeinOctiWLAN zum scannen
Lange habe ich mich gesträubt einen fertigen Code bzw. ein Bild eines fertigen Ardublock Codes zu veröffentlichen für die CO2, so ist ja ein Teil des Spaßes an den Workshops selbst mithilfe der Fallunterscheidungen (wenn/dann/sonst) herauszufinden, wie man sich so eine Ampel baut. Aber im letzten Bastelworkshop hat ein Teilnehmer den folgenden coolen Code für einen CO2 Ampel auf Octopus Platinen Basis entwickelt:
Was macht der Code: Ganz oben sehen wir die Zahl-Variabel, die bezeichnet die Werte aus dem CO2 Sensor. Als erstes wird der Wert im LCD Display angezeigt. So weit unspektakulär. Dann aber wird es spannend.
Pi & Octopus ?
Die erste Falls/Sonst Unterscheidung testet ob der CO2 Sensor überhaupt einen sinnvollen Wert liefert. Wenn er aber 0 ausgibt, dann blinkt der rechte Neopixel blau/weiß. Die nächsten beiden Fall/Sonst Unterscheidungen arbeiten dann wie immer bei den Ampeln: Zunächst wird geprüft ob der Wert größer ist als 1000 ppm CO2. Wenn ja dann blinkt der rechte Neopixel rot. Wenn nein dann bei über 700 leuchtet sie gelb und bei unter 700 leuchtet sie grün.
Blynk is another way of sending and visualising data, from the Octopus, besides using Thingsspeak. To use Blynk, one needs to register with Blynk and download the Blynk app (available on iOS and Android).
Set up a remote sensing device on Blynk
To set up a data transmitting device on Blynk, one needs to do the following:
From the Blynk app : – Open the Blynk app on your smartphone. – Click on “new project”. – Choose “esp8266” for the “choose device” question. – Wait for the “Auth Token” email that Blynk has sent.
(then) In ArduBlocks : – In the Setup part of your ArduBlocks sketch, add aWLAN block and a Blynk-Cloud block. – In the WLAN block : specify the name of your wifi network and the password. – In the Blynk-Cloud block : the Copy the Auth Token from the Blynk email, and paste it into the API-Key part of the ArduBlocks Blynk-Cloud block.
As one might not always have an Octopus microcontroller at hand, people have asked me how to build a CO2Ampel – CO2 traffic light warning gadget – with a different microcontroller. Thankfully, such a device was recently assembled at Chaos Computer Club Freiburg.
To keep things inexpensive, we’re skipping the NeoPixel LED of the other tutorial, in this tutorial. Thus parts could be obtained for around 55 EUR. Later, we’ll cover how to connect the measuring device described here, to various displays . Also, those interested in finding further tips and information, can find more information in the Octopus section of this blog. (This post is for the most part identical with the CO2 Messen mit dem Octopus tutorial, also on this blog.)
Parts
I have provided links to the Mouser Onlineshop and to Tindie. You can also find the parts elsewhere, and my links aren’t affiliate links.
Node MCU (microcontroller, controlling the other elements ), via Amazon or Mouser.
CO2 sensor SCD30 – these are available with different interfaces. Eg. With a Grove connector – although often sold out – as well as without. In the case of the CO2 sensors without a grove connector, one needs to solder or otherwise connect it to the microcontroller. Slightly cumbersome but manageable. (Digikey from 53 EUR, RS Online from 72 EUR, Mouser around 50 EUR – at time of writing these were sold out, but new ones are orderd)
LCD panel – To display the data from the CO2 sensor. There are several variants, also with Grove connectors. From 6 EUR. from Mouser.
A power source – Likely you already have one – a USB charger. Just make sure you have a Micro-USB cable. Powerbanks are an alternative, especially if you want to carry the device around.
I2C Hub – a hub connecting several Grove connector cables. Grove connector cable – 2.5 EUR by Mouser.
A case – There are many ideas around. From Ikea picture frames, to Bird houses.
A Data ready USB cable – You probably have one at home, but may have to try several USB cables before you find one that can transmit data as well as power. Please note, quite often the USB cables one gets with various bits of electronics can only carry power. So it makes sense to try different USB cables if USB cable one doesn’t work.
Programming
To program Arduino code with visual programming (Ardu)blocks, we need to modify the Ardunio IDE code editor a bit. (For those that prefer text-code, you’ll find the produced Ardublocks code, in text form, at the end of this tutorial).
Windows: download the zip file with the ‘blocky’ Arduino IDE and then install the relevant hardware driver software. Install the Arduino into a very short File tree, et. C:/iotw. You may also have to take care if you have another Arduino Version already installed. Pay attention which do you start. Start by double clicking on the „IOTWerkstatt.bat“ file.
Mac OS: this is a bit more complicated compared to Windows, but accomplishable using these instructions (in German, again), or the ones below. Here too, you need to install the relevant hardware driver software, and download the special Arduino IDE. This is done as follows:
Following the installation of the Arduino IDE, right-click on the Arduino IDE icon, and select “Show package content” from the menu. This shows the files that make up the Arduino IDE.
Open the “Contents” folder of the just-opened Aruduino package.
Open the downloaded IoTW.zip file.
Drag the “Portable” folder (of the expanded IoTW.zip file ) into the “Java” folder of the expanded Arduino IDE files.
Now open the Arduino IDE.
Open the “Tools” menu and go to Port submenu, and select “Dev/cu.SLAB_USBtoUART” option, to select the right port.
Open the “Tools” menu, as before, and now open the “Board” submenu, and select the “Generic ESP8266 Module”, as our board.
Cabling
The ESP9266 is cheap and can be used as the microcontroller for the CO2 Traffic lights.
Connect yellow on the D1, white on the D2, black on the GND, and red on the 3V. The cables connect with the Node MCU as shown in the table below. Now we need to solder them into place.
Node MCU pin
I2C / Grove Cable
3.3 V
red
GND
black
D1
yellow / SCL
D2
white / SDA
Here and now is a good time to solder the (Grove) cables to the Node MCU. Then we can do fun things like connect a Grove LCD and a SCD30 CO2 sensor to the Node NCU, via a I2C hub. As the grove Cables have preset colours, this should be simple.
Damit habe ich nun daheim und im Büro ein wenig die Luft ausgewertet und auch schöne Dashboards gebaut.
Ähnlich verläuft es mit #IAQ Indoor Air Quality Index und dem #VOC Volatile Organischen Komponenten. Beim #Löten hatte ich die Fenster offen. Gemessen wurde aber nicht in der Nähe des Lötkolbens, sondern bei der Wohnungstür. Darstellung mit #thingsspeak#luftqualitätpic.twitter.com/GzZm6tTpQX
Was man an meiner kleinen Wohnung gut sieht: Nachts steigt der CO2 Wert auf über 2000 ppm – im Winter wenn es kalt ist, mache ich beim Schlafen die Fenster zu – sobald morgens gelüftet wird ,sinkt aber der Wert wieder deutlich.
Diesen Wert Messe ich in der Nähe der Wohnungstür, denn da war noch eine Steckdose frei. Auch das Öffnen der Wohnungstür, senkt den Wert deutlich. Querlüften ist übrigens effizienter, wenn ich entweder die Wohnungstür offen lasse oder aber auch den Lüfter im Bad angeschaltet.
Gleichzeitig messe ich auch noch Werte aus dem BME680 Sensor von Bosch: Den Indoor Air Quality Index (IAQ), das CO2 Äquivalent (rechnet der aus dem IAQ raus) und auch noch die Volatilen Organischen Komponenten. Optisch verlaufen die im gleichen Trend, sogar mit dem CO2 aus der Ampel.
Nicht immer hat eine Octopus Platine zur Hand. Deshalb haben mich einige gefragt, wie man eine CO2 Ampel bzw. eine Meßgerät mit einer anderen Platine bauen kann. Im Chaos Computer Club hier in Freiburg wurde schließlich so eine Ampel gebaut. Wir haben hier – auch aus Kostengründen, diese Teile dürften etwa bei 55 EUR liegen – etwa auf eine NeoPixel LED verzichtet. Später wird es hier Tipps geben, wie man dieses Meßgerät mit anderen Ausgabegeräten verbinden kann. Wer aber dazu noch Tipps sucht, dem seien die anderen Artikel zum Thema Ocotopus auf dem Blog angeraten. Dieser Post ist in Teilen identisch mit der Anleitung CO2 Messen mit dem Octopus.
Stromversorgung, entweder Powerbank oder Handyladegerät
Programmcode
Hier gibt es zunächst eine Anleitung, eigenen Code mithilfe der Ardublock Software zu schreiben bzw. zusammen zu klicken, wer das nicht will und einfach mit der Arduino IDE Code reinkopieren, der findet unten ein Beispiel mit einer Anleitung.
ein ganz einfacher Code im Ardublockly, der aber alles zeigt was wir zum Meßen brauchen.
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.
Noch sind wir nicht ganz fertig, wir gehen noch unter „Werkzeuge“ auf „Boardverwalter“, da gibt es ganz viele Boards. Wir gehen auf „ESP Community“ Package und führen ggf. 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.
Verkabelung
Gelb an D1, Weiß an D2, Schwarz an GND und Rot and 3V.
Wir verkabeln an den Node MCU wie folgt und löten dann ggf.:
Node MCU Beinchen
I2C / Grove Kabel
3,3 V
rot
GND
schwarz
D1
gelb / SCL
D2
weiß / SDA
Hier können wir die Kabel auch schon an den Node MCU anlöten. Danach stecken wir auf dem I2C Hub sowohl das Kabel an das Grove LCD Display als auch an den SCD 30 CO2 Sensor.