CO2 Traffic Light
The CO2 Traffic Light will help to vent rooms at school, home, work to keep the aerosol concentrations low. We recommend to set the red light alert "must ventilate, open windows and doors" at 800ppm CO2. max 1000ppm. Follow your local government regulations. CO2 monitors are just a indicator for air quality, it will no protect you against virus or anything else. If you are not sure check resources on the principal of CO2 in breathing air and CO2 traffic lights in general. This is not meant to be a healthcare device or like. See this a foundation for STEM projects to work with sensor, IoT and learn about aerosols and CO2 impacting air quality indoors.
First get your "PELARBOJ" from local IKEA store and open the unit (with the hack you will loose warranty, unplug any cables first) to do so you need to unfasten the one screen at the back, twist the top by 25° to open the case. Now you can unfasten the three screws keeping the mount plate with the LEDs in place. Keep the screws we will use them later. Remove all the parts underneath, controller PCB and switch, cables. There is one plate (white) that carries the control PCB we will also use that again later.
Print the new mounting plate. It will carry the IoT Octopus with the NeoPixel Feather Wing stack on top. There are notes added to the TinkerCAD design.
The design is attached as ready to print sty or you get the source here https://www.tinkercad.com/things/4BQBey7br2W
The code is generated with our "IoT Werkstatt" which you can find here: https://www.umwelt-campus.de/en/research/projects/translate-to-englisch-iot-werkstatt it is based on the Arduino IDE and Ardublock extension, including all needed libs in a portable version - just download, no install needed. (Or use the attached WIP source code, and find the libs yourself)
To mount the SCD30, first solder an grove cable (yellow-SCL, white-SDA, black-GND, red-3.3V) according to the datasheet of the sensor. Slide the SCD30 in the space that was used by the original PCB board, check the pictures to navigate you to the right place. No pressure on the sensor! We careful not to damage it. The space is right large enough if you feel any force on the sensor something is wrong.
Final step: fix the plate with the three screws. Bend the Micro-USB cable to fit or better use a 90° angled one. The cable leaves the housing where the power socket was. You don't need the drill anything. If you want to can use a wall mount USB cable as shown in the picture to look even more professional :-) When adding the top cover find the way for the fixing anchors just a 10° offset is needed, rotate the top to snap it into place, no screws needed to fix it.
Don't forget to calibrate your CO2 Traffic Light before use... fresh outside air will provide you roughly 420 ppm...
You can add later any additional sensor you want PM2.5, BME680 (VOC) is already on the IoT Octopus board ... Be curious and add your ideas to this project!
Have fun.
Pro-Tip: if you want to get the SCD30 react faster you might want to drill some more hole into the base of the lamp ... like the one we do use. Don't use a fan. If you want to use the BME680 you need to have couple drill on the top to make sure the air can flow through the lamp, otherwise you will end up measuring VOC within the case only. The BME680 can measure with the BSEC lib also IAQ (indoor air quality index).
/* This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. */
#include <SparkFun_SCD30_Arduino_Library.h>
#include <Wire.h>
#include <Adafruit_NeoPixel.h>
#include <ESP8266WiFi.h>
int fresh_air = 0 ;
int CO2 = 0 ;
//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
int MyDosis = 0 ; // MyDosis is at this stage experimental only
// global var for integral ( CO2 - fresh_air )
float val_Dosis15293=0.0;
float sum_Dosis15293=0.0;
unsigned long t_Dosis15293=0;
/*------------------------ Integration formula trap */
float DosisIntegral(float val, int res, float& sum, unsigned long& t_old, float& val_old) {
unsigned long dt = (millis() - t_old); // time between measurements (ms)
t_old = millis();
if (res >= 1)
sum = 0;
else
sum = sum + (float)dt*(val_old+val)/7200e3; // integral, trapz, time in h
val_old = val;
return sum;
}
// ----------------------- NeoPixelWing-Farbansteuerung
Adafruit_NeoPixel neoWing = Adafruit_NeoPixel(32,15,NEO_GRB + NEO_KHZ800);
void neoWingColor(uint8_t r,uint8_t g,uint8_t b) {
for(uint16_t i=0; i<neoWing.numPixels(); i++) {
neoWing.setPixelColor(i, r&0x3F,g&0x3F,b&0x3F);
}
neoWing.show();
}
void setup(){ // Einmalige Initialisierung
WiFi.forceSleepBegin(); // Wifi off
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);
}
}
airSensorSCD30.setAutoSelfCalibration(false); // Sensirion no auto calibration
airSensorSCD30.setMeasurementInterval(2); // CO2-Messung alle 2 s
float dum15293=DosisIntegral(( CO2 - fresh_air ),true,sum_Dosis15293,t_Dosis15293,val_Dosis15293); // Init Integral
Serial.begin(115200);
Serial.println();
neoWing.begin();
delay(1);
neoWingColor(0,0,0);
fresh_air = 400 ;
Wire.setClock(100000L); // 100 kHz SCD30
Wire.setClockStretchLimit(200000L);// CO2-SCD30
}
void loop() { // Kontinuierliche Wiederholung
CO2 = airSensorSCD30.getCO2() ;
MyDosis = DosisIntegral(( CO2 - fresh_air ),( ( CO2 ) < ( 600 ) ),sum_Dosis15293,t_Dosis15293,val_Dosis15293) ;
Serial.print("CO2:"+String(String(CO2)));
Serial.print(",MyDosis:"+String(String(MyDosis)));
Serial.println();
if (( ( CO2 ) < ( 800 ) ))
{
if (( ( CO2 ) < ( 600 ) ))
{
neoWingColor((0<63)?0:63,(0<63)?0:63,(32<63)?32:63);
}
delay( 1000 );
neoWingColor((0<63)?0:63,(32<63)?32:63,(0<63)?0:63);
}
else
{
if (( ( CO2 ) < ( 1000 ) ))
{
neoWingColor((32<63)?32:63,(32<63)?32:63,(0<63)?0:63);
}
else
{
neoWingColor((32<63)?32:63,(0<63)?0:63,(0<63)?0:63);
}
}
delay( 5000 );
}
Ardublock - CO2 Traffic Light Sample
XML<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<cb:CODEBLOCKS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://education.mit.edu/openblocks/ns http://education.mit.edu/openblocks/codeblocks.xsd" xmlns:cb="http://education.mit.edu/openblocks/ns">
<Pages collapsible-pages="yes" drawer-with-page="yes">
<Page page-color="128 128 128" page-drawer="Main" page-infullview="yes" page-name="Main" page-width="1440">
<PageBlocks>
<Block genus-name="if" id="405">
<Location>
<X>385</X>
<Y>452</Y>
</Location>
<BeforeBlockId>383</BeforeBlockId>
<AfterBlockId>413</AfterBlockId>
<Sockets num-sockets="2">
<BlockConnector con-block-id="406" connector-kind="socket" connector-type="boolean" init-type="boolean" label="teste" position-type="single"></BlockConnector>
<BlockConnector con-block-id="409" connector-kind="socket" connector-type="cmd" init-type="cmd" label="dann" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="delay" id="413">
<Location>
<X>385</X>
<Y>576</Y>
</Location>
<BeforeBlockId>405</BeforeBlockId>
<AfterBlockId>387</AfterBlockId>
<Sockets num-sockets="1">
<BlockConnector con-block-id="414" connector-kind="socket" connector-type="number" init-type="number" label="Millisekunden" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="number" id="414">
<Label>1000</Label>
<Location>
<X>529</X>
<Y>579</Y>
</Location>
<Plug>
<BlockConnector con-block-id="413" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="iot_neowing" id="409">
<Location>
<X>478</X>
<Y>488</Y>
</Location>
<BeforeBlockId>405</BeforeBlockId>
<Sockets num-sockets="3">
<BlockConnector con-block-id="410" connector-kind="socket" connector-type="number" init-type="number" label="Rot" position-type="single"></BlockConnector>
<BlockConnector con-block-id="411" connector-kind="socket" connector-type="number" init-type="number" label="Gruen" position-type="single"></BlockConnector>
<BlockConnector con-block-id="412" connector-kind="socket" connector-type="number" init-type="number" label="Blau" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="number" id="412">
<Label>32</Label>
<Location>
<X>658</X>
<Y>539</Y>
</Location>
<Plug>
<BlockConnector con-block-id="409" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="number" id="411">
<Label>0</Label>
<Location>
<X>658</X>
<Y>515</Y>
</Location>
<Plug>
<BlockConnector con-block-id="409" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="number" id="410">
<Label>0</Label>
<Location>
<X>658</X>
<Y>491</Y>
</Location>
<Plug>
<BlockConnector con-block-id="409" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="less" id="406">
<Label><</Label>
<Location>
<X>481</X>
<Y>455</Y>
</Location>
<Comment>
<Text>Frische Luft erkannt ...</Text>
<Location>
<X>830</X>
<Y>507</Y>
</Location>
<BoxSize>
<Width>143</Width>
<Height>64</Height>
</BoxSize>
</Comment>
<Plug>
<BlockConnector con-block-id="405" connector-kind="plug" connector-type="boolean" init-type="boolean" label="" position-type="mirror"></BlockConnector>
</Plug>
<Sockets num-sockets="2">
<BlockConnector con-block-id="407" connector-kind="socket" connector-type="number" init-type="number" label="" position-type="bottom"></BlockConnector>
<BlockConnector con-block-id="408" connector-kind="socket" connector-type="number" init-type="number" label="" position-type="bottom"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="number" id="408">
<Label>600</Label>
<Location>
<X>598</X>
<Y>458</Y>
</Location>
<Plug>
<BlockConnector con-block-id="406" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="variable_number" id="407">
<Label>CO2</Label>
<Location>
<X>491</X>
<Y>458</Y>
</Location>
<Plug>
<BlockConnector con-block-id="406" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="delay" id="193">
<Location>
<X>250</X>
<Y>919</Y>
</Location>
<BeforeBlockId>383</BeforeBlockId>
<Sockets num-sockets="1">
<BlockConnector con-block-id="194" connector-kind="socket" connector-type="number" init-type="number" label="Millisekunden" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="number" id="194">
<Label>5000</Label>
<Location>
<X>394</X>
<Y>922</Y>
</Location>
<Plug>
<BlockConnector con-block-id="193" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="number" id="389">
<Label>32</Label>
<Location>
<X>565</X>
<Y>633</Y>
</Location>
<Plug>
<BlockConnector con-block-id="387" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="number" id="397">
<Label>32</Label>
<Location>
<X>699</X>
<Y>759</Y>
</Location>
<Plug>
<BlockConnector con-block-id="395" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="iot_neowing" id="401">
<Location>
<X>518</X>
<Y>822</Y>
</Location>
<BeforeBlockId>391</BeforeBlockId>
<Sockets num-sockets="3">
<BlockConnector con-block-id="402" connector-kind="socket" connector-type="number" init-type="number" label="Rot" position-type="single"></BlockConnector>
<BlockConnector con-block-id="403" connector-kind="socket" connector-type="number" init-type="number" label="Gruen" position-type="single"></BlockConnector>
<BlockConnector con-block-id="404" connector-kind="socket" connector-type="number" init-type="number" label="Blau" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="number" id="404">
<Label>0</Label>
<Location>
<X>698</X>
<Y>873</Y>
</Location>
<Plug>
<BlockConnector con-block-id="401" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="number" id="403">
<Label>0</Label>
<Location>
<X>698</X>
<Y>849</Y>
</Location>
<Plug>
<BlockConnector con-block-id="401" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="number" id="402">
<Label>32</Label>
<Location>
<X>698</X>
<Y>825</Y>
</Location>
<Plug>
<BlockConnector con-block-id="401" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="ifelse" id="391">
<Label>Falls/sonst</Label>
<Location>
<X>384</X>
<Y>696</Y>
</Location>
<BeforeBlockId>383</BeforeBlockId>
<Sockets num-sockets="3">
<BlockConnector con-block-id="392" connector-kind="socket" connector-type="boolean" init-type="boolean" label="teste" position-type="single"></BlockConnector>
<BlockConnector con-block-id="395" connector-kind="socket" connector-type="cmd" init-type="cmd" label="dann" position-type="single"></BlockConnector>
<BlockConnector con-block-id="401" connector-kind="socket" connector-type="cmd" init-type="cmd" label="sonst" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="iot_neowing" id="395">
<Label>NeoWing</Label>
<Location>
<X>519</X>
<Y>732</Y>
</Location>
<BeforeBlockId>391</BeforeBlockId>
<Sockets num-sockets="3">
<BlockConnector con-block-id="396" connector-kind="socket" connector-type="number" init-type="number" label="Rot" position-type="single"></BlockConnector>
<BlockConnector con-block-id="397" connector-kind="socket" connector-type="number" init-type="number" label="Gruen" position-type="single"></BlockConnector>
<BlockConnector con-block-id="398" connector-kind="socket" connector-type="number" init-type="number" label="Blau" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="number" id="398">
<Label>0</Label>
<Location>
<X>699</X>
<Y>783</Y>
</Location>
<Plug>
<BlockConnector con-block-id="395" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="number" id="396">
<Label>32</Label>
<Location>
<X>699</X>
<Y>735</Y>
</Location>
<Plug>
<BlockConnector con-block-id="395" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="less" id="392">
<Label><</Label>
<Location>
<X>522</X>
<Y>699</Y>
</Location>
<Plug>
<BlockConnector con-block-id="391" connector-kind="plug" connector-type="boolean" init-type="boolean" label="" position-type="mirror"></BlockConnector>
</Plug>
<Sockets num-sockets="2">
<BlockConnector con-block-id="393" connector-kind="socket" connector-type="number" init-type="number" label="" position-type="bottom"></BlockConnector>
<BlockConnector con-block-id="394" connector-kind="socket" connector-type="number" init-type="number" label="" position-type="bottom"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="number" id="394">
<Label>1000</Label>
<Location>
<X>625</X>
<Y>702</Y>
</Location>
<Plug>
<BlockConnector con-block-id="392" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="variable_number" id="393">
<Label>CO2</Label>
<Location>
<X>532</X>
<Y>702</Y>
</Location>
<Plug>
<BlockConnector con-block-id="392" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="program" id="177">
<Location>
<X>102</X>
<Y>60</Y>
</Location>
<Sockets num-sockets="2">
<BlockConnector con-block-id="205" connector-kind="socket" connector-type="cmd" init-type="cmd" label="Setup" position-type="single"></BlockConnector>
<BlockConnector con-block-id="178" connector-kind="socket" connector-type="cmd" init-type="cmd" label="Schleife" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="setter_variable_number" id="178">
<Location>
<X>250</X>
<Y>133</Y>
</Location>
<BeforeBlockId>177</BeforeBlockId>
<AfterBlockId>181</AfterBlockId>
<Sockets num-sockets="2">
<BlockConnector con-block-id="179" connector-kind="socket" connector-type="number" init-type="number" label="Variable" position-type="single"></BlockConnector>
<BlockConnector con-block-id="199" connector-kind="socket" connector-type="number" init-type="number" label="Wert" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="setter_variable_number" id="181">
<Label>Setze Zahl-Variable</Label>
<Location>
<X>250</X>
<Y>222</Y>
</Location>
<BeforeBlockId>178</BeforeBlockId>
<AfterBlockId>187</AfterBlockId>
<Sockets num-sockets="2">
<BlockConnector con-block-id="182" connector-kind="socket" connector-type="number" init-type="number" label="Variable" position-type="single"></BlockConnector>
<BlockConnector con-block-id="184" connector-kind="socket" connector-type="number" init-type="number" label="Wert" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="serial_print" id="187">
<Location>
<X>250</X>
<Y>308</Y>
</Location>
<BeforeBlockId>181</BeforeBlockId>
<AfterBlockId>190</AfterBlockId>
<Sockets num-sockets="2">
<BlockConnector con-block-id="188" connector-kind="socket" connector-type="string" init-type="string" label="Text" position-type="single"></BlockConnector>
<BlockConnector con-block-id="189" connector-kind="socket" connector-type="boolean" init-type="boolean" label="neue Zeile" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="serial_print" id="190">
<Label>Serial print</Label>
<Location>
<X>250</X>
<Y>362</Y>
</Location>
<BeforeBlockId>187</BeforeBlockId>
<AfterBlockId>383</AfterBlockId>
<Sockets num-sockets="2">
<BlockConnector con-block-id="191" connector-kind="socket" connector-type="string" init-type="string" label="Text" position-type="single"></BlockConnector>
<BlockConnector con-block-id="192" connector-kind="socket" connector-type="boolean" init-type="boolean" label="neue Zeile" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="ifelse" id="383">
<Location>
<X>250</X>
<Y>416</Y>
</Location>
<BeforeBlockId>190</BeforeBlockId>
<AfterBlockId>193</AfterBlockId>
<Sockets num-sockets="3">
<BlockConnector con-block-id="384" connector-kind="socket" connector-type="boolean" init-type="boolean" label="teste" position-type="single"></BlockConnector>
<BlockConnector con-block-id="405" connector-kind="socket" connector-type="cmd" init-type="cmd" label="dann" position-type="single"></BlockConnector>
<BlockConnector con-block-id="391" connector-kind="socket" connector-type="cmd" init-type="cmd" label="sonst" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="iot_neowing" id="387">
<Location>
<X>385</X>
<Y>606</Y>
</Location>
<BeforeBlockId>413</BeforeBlockId>
<Sockets num-sockets="3">
<BlockConnector con-block-id="388" connector-kind="socket" connector-type="number" init-type="number" label="Rot" position-type="single"></BlockConnector>
<BlockConnector con-block-id="389" connector-kind="socket" connector-type="number" init-type="number" label="Gruen" position-type="single"></BlockConnector>
<BlockConnector con-block-id="390" connector-kind="socket" connector-type="number" init-type="number" label="Blau" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="number" id="390">
<Label>0</Label>
<Location>
<X>565</X>
<Y>657</Y>
</Location>
<Plug>
<BlockConnector con-block-id="387" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="number" id="388">
<Label>0</Label>
<Location>
<X>565</X>
<Y>609</Y>
</Location>
<Plug>
<BlockConnector con-block-id="387" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="less" id="384">
<Location>
<X>388</X>
<Y>419</Y>
</Location>
<Plug>
<BlockConnector con-block-id="383" connector-kind="plug" connector-type="boolean" init-type="boolean" label="" position-type="mirror"></BlockConnector>
</Plug>
<Sockets num-sockets="2">
<BlockConnector con-block-id="385" connector-kind="socket" connector-type="number" init-type="number" label="" position-type="bottom"></BlockConnector>
<BlockConnector con-block-id="386" connector-kind="socket" connector-type="number" init-type="number" label="" position-type="bottom"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="number" id="386">
<Label>800</Label>
<Location>
<X>491</X>
<Y>422</Y>
</Location>
<Plug>
<BlockConnector con-block-id="384" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="variable_number" id="385">
<Label>CO2</Label>
<Location>
<X>398</X>
<Y>422</Y>
</Location>
<Plug>
<BlockConnector con-block-id="384" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="true" id="192">
<Label>true</Label>
<Location>
<X>424</X>
<Y>389</Y>
</Location>
<Plug>
<BlockConnector con-block-id="190" connector-kind="plug" connector-type="boolean" init-type="boolean" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="message" id="191">
<Label>,MyDosis:</Label>
<Location>
<X>424</X>
<Y>365</Y>
</Location>
<Plug>
<BlockConnector con-block-id="190" connector-kind="plug" connector-type="string" init-type="string" label="" position-type="single"></BlockConnector>
</Plug>
<Sockets num-sockets="1">
<BlockConnector con-block-id="196" connector-kind="socket" connector-type="string" init-type="string" label="" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="glue_sn" id="196">
<Label>verbinde</Label>
<Location>
<X>516</X>
<Y>365</Y>
</Location>
<Plug>
<BlockConnector con-block-id="191" connector-kind="plug" connector-type="string" init-type="string" label="" position-type="single"></BlockConnector>
</Plug>
<Sockets num-sockets="1">
<BlockConnector con-block-id="197" connector-kind="socket" connector-type="number" init-type="number" label="" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="variable_number" id="197">
<Label>MyDosis</Label>
<Location>
<X>600</X>
<Y>365</Y>
</Location>
<Plug>
<BlockConnector con-block-id="196" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="false" id="189">
<Location>
<X>424</X>
<Y>335</Y>
</Location>
<Plug>
<BlockConnector con-block-id="187" connector-kind="plug" connector-type="boolean" init-type="boolean" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="message" id="188">
<Label>CO2:</Label>
<Location>
<X>424</X>
<Y>311</Y>
</Location>
<Plug>
<BlockConnector con-block-id="187" connector-kind="plug" connector-type="string" init-type="string" label="" position-type="single"></BlockConnector>
</Plug>
<Sockets num-sockets="1">
<BlockConnector con-block-id="195" connector-kind="socket" connector-type="string" init-type="string" label="" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="glue_sn" id="195">
<Location>
<X>480</X>
<Y>311</Y>
</Location>
<Plug>
<BlockConnector con-block-id="188" connector-kind="plug" connector-type="string" init-type="string" label="" position-type="single"></BlockConnector>
</Plug>
<Sockets num-sockets="1">
<BlockConnector con-block-id="198" connector-kind="socket" connector-type="number" init-type="number" label="" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="variable_number" id="198">
<Label>CO2</Label>
<Location>
<X>564</X>
<Y>311</Y>
</Location>
<Plug>
<BlockConnector con-block-id="195" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="DosisIntegral" id="184">
<Location>
<X>462</X>
<Y>249</Y>
</Location>
<Plug>
<BlockConnector con-block-id="181" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="single"></BlockConnector>
</Plug>
<Sockets num-sockets="2">
<BlockConnector con-block-id="204" connector-kind="socket" connector-type="number" init-type="number" label="input" position-type="single"></BlockConnector>
<BlockConnector con-block-id="201" connector-kind="socket" connector-type="boolean" init-type="boolean" label="reset" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="less" id="201">
<Location>
<X>620</X>
<Y>277</Y>
</Location>
<Comment>
<Text>Dosis zurcksetzen, wenn ausreichend gelftet!</Text>
<Location>
<X>826</X>
<Y>309</Y>
</Location>
<BoxSize>
<Width>150</Width>
<Height>100</Height>
</BoxSize>
</Comment>
<Plug>
<BlockConnector con-block-id="184" connector-kind="plug" connector-type="boolean" init-type="boolean" label="" position-type="mirror"></BlockConnector>
</Plug>
<Sockets num-sockets="2">
<BlockConnector con-block-id="202" connector-kind="socket" connector-type="number" init-type="number" label="" position-type="bottom"></BlockConnector>
<BlockConnector con-block-id="203" connector-kind="socket" connector-type="number" init-type="number" label="" position-type="bottom"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="number" id="203">
<Label>600</Label>
<Location>
<X>737</X>
<Y>280</Y>
</Location>
<Plug>
<BlockConnector con-block-id="201" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="variable_number" id="202">
<Label>CO2</Label>
<Location>
<X>630</X>
<Y>280</Y>
</Location>
<Plug>
<BlockConnector con-block-id="201" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="subtraction" id="204">
<Location>
<X>620</X>
<Y>249</Y>
</Location>
<Comment>
<Text>Dosis wird nur dem von Menschen ausgeatmete delta berechnet</Text>
<Location>
<X>860</X>
<Y>125</Y>
</Location>
<BoxSize>
<Width>150</Width>
<Height>100</Height>
</BoxSize>
</Comment>
<Plug>
<BlockConnector con-block-id="184" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
<Sockets num-sockets="2">
<BlockConnector con-block-id="186" connector-kind="socket" connector-type="number" init-type="number" label="" position-type="bottom"></BlockConnector>
<BlockConnector con-block-id="208" connector-kind="socket" connector-type="number" init-type="number" label="" position-type="bottom"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="variable_number" id="208">
<Label>fresh_air</Label>
<Location>
<X>737</X>
<Y>252</Y>
</Location>
<Plug>
<BlockConnector con-block-id="204" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="variable_number" id="186">
<Label>CO2</Label>
<Location>
<X>630</X>
<Y>252</Y>
</Location>
<Plug>
<BlockConnector con-block-id="204" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="variable_number" id="182">
<Label>MyDosis</Label>
<Location>
<X>462</X>
<Y>225</Y>
</Location>
<Plug>
<BlockConnector con-block-id="181" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="GetSCD30" id="199">
<Location>
<X>462</X>
<Y>160</Y>
</Location>
<Plug>
<BlockConnector con-block-id="178" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="single"></BlockConnector>
</Plug>
<Sockets num-sockets="1">
<BlockConnector con-block-id="200" connector-kind="socket" connector-type="number" init-type="number" label="Sensor" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="SCD30VectorCO2" id="200">
<Label>CO2</Label>
<Location>
<X>688</X>
<Y>160</Y>
</Location>
<Plug>
<BlockConnector con-block-id="199" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="single"></BlockConnector>
</Plug>
</Block>
<Block genus-name="variable_number" id="179">
<Label>CO2</Label>
<Location>
<X>462</X>
<Y>136</Y>
</Location>
<Plug>
<BlockConnector con-block-id="178" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="setter_variable_number" id="205">
<Location>
<X>251</X>
<Y>68</Y>
</Location>
<BeforeBlockId>177</BeforeBlockId>
<Sockets num-sockets="2">
<BlockConnector con-block-id="206" connector-kind="socket" connector-type="number" init-type="number" label="Variable" position-type="single"></BlockConnector>
<BlockConnector con-block-id="207" connector-kind="socket" connector-type="number" init-type="number" label="Wert" position-type="single"></BlockConnector>
</Sockets>
</Block>
<Block genus-name="number" id="207">
<Label>400</Label>
<Location>
<X>463</X>
<Y>95</Y>
</Location>
<Comment>
<Text>Frische Luft, aktueller CO2 Wert fr Aussenluft, wegen Messungenauigkeit reicht hier 400ppm</Text>
<Location>
<X>646</X>
<Y>0</Y>
</Location>
<BoxSize>
<Width>165</Width>
<Height>137</Height>
</BoxSize>
</Comment>
<Plug>
<BlockConnector con-block-id="205" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
<Block genus-name="variable_number" id="206">
<Label>fresh_air</Label>
<Location>
<X>463</X>
<Y>71</Y>
</Location>
<Plug>
<BlockConnector con-block-id="205" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"></BlockConnector>
</Plug>
</Block>
</PageBlocks>
</Page>
</Pages>
</cb:CODEBLOCKS>
Comments