Hackster is hosting Hackster Holidays, Ep. 6: Livestream & Giveaway Drawing. Watch previous episodes or stream live on Monday!Stream Hackster Holidays, Ep. 6 on Monday!
fab-lab.eu
Published © CC BY-NC

CO2 Traffic Light for Indoor Air Quality, COVID and beyond

While we started with CO2 monitor almost 2 years back, we always look for new housings... 3D printed, laser cut - now an IKEA "PELARBOJ"

IntermediateFull instructions provided2 hours1,388
CO2 Traffic Light for Indoor Air Quality, COVID and beyond

Things used in this project

Hardware components

IKEA "PELARBOJ"
×1
IoT Octopus
×1
SCD30
×1
Adafruit NeoPixel Feather Wing
×1

Software apps and online services

IoT Werkstatt
QuickStart contains download link to portable Arduino IDE incl Ardublock with our unique set of IoT super blocks :-)

Story

Read more

Custom parts and enclosures

mounting plate for the IoT Octopus

replaces the original LED plate

Code

CO2 Traffic Light Sample

Arduino
Incl. "MyDosis" as experimental code
/* 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
can only be used with the Ardublock plug-in Arduino, with special IoT Werkstatt blocks.
<?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>&lt;</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>&lt;</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>

Credits

fab-lab.eu

fab-lab.eu

22 projects • 276 followers
Maker!

Comments