CO2 Soil Respiration Chamber

From Hackteria Wiki
Revision as of 22:54, 20 March 2024 by Tez (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Developed during the RandeLab Soil Retreat as part of the HUMUS.Sapiens research phase and discussed on the forum. Continued during UROS (UROŠ - Ubiquitous Rural Open Science Hardware) in Maribor, 2021.

Nano's documentation of camara-respiración-suelo

Imagen1 CRS en campo.jpegV1 respira.jpeg

Also discussed on the GOSH forum here:

UROŠ new CO2 soil chambers

Based on FeatherS2 and new SCD41 Sensor sponsored by Sensirio. We'd like to thank here again for the Sensirion eval-kit donated to the UROŠ project and we are looking forward to receive more sensor chips and manufacture our own UROŠ break-out boards, see below.

FeatherS2 version using arduino libraries

NewFeather2 version.jpgDisplay SCD41 logo.jpg

See the first test code on github

Electronic Materials and links:

  • ... what else? speaker?

Wiring diagram

CO2 Wiring diagram.png


Installing the ESP-32 and firmware

Send and receive data via Serial

The data is sent in the following format:

  • Each line is timestamped (in sec, could be also in millis)
  • data rate can be modified. At the moment BMP280 is read every 200 millis, SCD41 every 5000 millis, DS18b20 every 30sec
  • Maybe some delays here and there. Still needs optimization
  • 3 values from SCD41:
    • CO2 (ppm)
    • Temperature (ºC)
    • Humidity (%)
  • 3 values from BMB280:
    • Pressure (Pa) (could be also sent in hPa?)
    • Altitude (calculated in meter above sea level, calibrated with: #define SEA_LEVEL_PRESSURE 1010.0f // sea level pressure 1013.25
    • Temperature (ºC)
  • 1 value from soil temperature probe (DS18b20)
    • ** Temperature (ºC)
TimeSec: 256	CO2: 419	Temp: 31.09	Hum%: 76.58	BMB-Pres: 98763	Alti: 188.50	BMP-Temp: 30.14	SoilTemp: n.c.
TimeSec: 256	CO2: 419	Temp: 31.09	Hum%: 76.58	BMB-Pres: 98763	Alti: 188.50	BMP-Temp: 30.14	SoilTemp: n.c.
TimeSec: 257	CO2: 419	Temp: 31.09	Hum%: 76.58	BMB-Pres: 98763	Alti: 188.52	BMP-Temp: 30.13	SoilTemp: n.c.
TimeSec: 257	CO2: 419	Temp: 31.09	Hum%: 76.58	BMB-Pres: 98763	Alti: 188.52	BMP-Temp: 30.13	SoilTemp: n.c.

You can reveive the data for testing in the Arduino IDE, and it should look as following:

UROS CO2 serial-output.jpg

You can also receive the data in a serial plotter, i suggest for example the tauno-serial plotter

SerialTaunoPlotter example.jpg

The regosh team in Mendoza has been working on a python based serial plotter dedicated to soil respiration measurements. See their gitlab for more details.

SerialPlot regosh.png

Optimizing display and usability

Display logoHackteria.jpgDisplay logoRegosh.jpgDisplay logoROSA-Humus.jpg

Display SCD41 TestSuccess.jpgDisplay BMP data.jpgDisplay plotMeasurement.jpg

PVC chamber for field-use

Building the chamber

  • Standard PVC piping (4 inch / 10 cm diameter)
  • Standard PVC covers/lids (4 inch / 10 cm diameter)
  • Aviation connectors, 5 pin
  • Aviation connectors, 3 pin (for external soil temperatur probe)
  • small computer fan, 5-12V (has to run on very low rpm)

Testing and hacking the SCD 41

<< CO2 Soil Respiration Chamber#UROŠ new CO2 soil chambers

Sensirion webScreenshot.jpg

Comparing the different Sensors

Nano sensorTest.jpg

Nano sensorPerformace.jpgRewetted soil.png

Circuit Python and FeatherS2

ESP32 co2onOLED.jpg

RandePrototype SCD41 feathers2.jpg

See some first notes and experiments here:

Mbe add even another VOC sensor?

With all the libraries and examples prepared by sensirion and Adafruit, it was easy to connect it all together using the FeatherS2 and CircuitPython. A first prototype is connected and working.

RandePrototype SCD41 indoorTest.jpg

First measurements look promising, very stable, relatively fast response times. The library is very easy to use, auto-calibration has to be turned off. During the start of the code you can adjust a temperature_offset to calibrate the temp sensor. Additionally you have to adjust the pressure or altitude to where you are doing the measurement, altitude offset (default hardware is 0m). First experiments show that this is pretty crucial, details will have to explored and discussed with the sensirion tech team.

Testing and hacking the SCD 41

Checking the PCB and the footprint to plan our own reflowing of PCB

Opening up the sensor

What is inside? As described on the sensirion product page, the new sensor works on the "photo-accoustic effect". So it's similar, but also a different method, than other NDIR sensors.

It's pretty easy to understand what's under the hood for the SCD41. There is a signal-processor, to read and control the sensor components and communicate to the outside via I2C, there is the "classic" SH40 temperature & humidity sensor, and now... There is an IR emmiter with a dedicted filter on it and a MEMS microphone. Everything is enclosed within a small metal case, with a hole to the outside world and a particle filter stuck onto it.

Photoacoustic effect is the generation of acoustic waves as a result of light absorption in a material. As an example, consider a laser beam that is passed through a gas sample, which is enclosed in a cell of a constant volume. The laser energy absorbed by the sample molecules leads to local heating of the gas, which causes a pressure increase. If the optical excitation of molecules is done periodically, by modulating the laser power or frequency, also the pressure change is periodic. This acoustic wave at the modulation frequency can be detected with a microphone. The microphone signal is directly proportional to the absorbed power, which makes it possible to determine the concentration of absorbing molecules in the sample. Taken from this source on laser spectroscopy

Designing UROŠ - CO2 brkout PCB

UROS CO2-brkout BackFront.png

PCB (printed circuit board) breakout board for CO2 sensor (SCD41), NEO-pixel (WS2812B) and I2C interface (JST-SH4)

Designed with open source software: Kicad, Inkscape and svg2shenzhen

The files "as ordered" are available on github:

It arrived!!!

UROS pcb foto2.jpgUROS pcb foto1.jpg

UROŠ - CO2 brkout PCB reflow soldering

First reflowed UROS CO2-board.jpg

We managed to reflow a first working version of our own PCB!!!

Just un-flowed from the original Sensirion break-out board using our nice little reflow hotplate. Cos we didn't have proper reflow solder paste, we just tinned all the pads with normal solder, and wigged it off to create a very thin flat layer of solder on all the copper for the SCD41 sensor. Then mounted the sensor and back onto the hotplate, using 220 / 250 °C, and after it seemed to have settled down into the molten solder, we took the board off and cooled it down.

Then we soldered the remaining parts, some resistors for pull-up on the I2C channel, LED and a NeoPixel on the backside.

UROS CO2-board back.jpg

Wiring it up, connecting the I2C connection and the extra wire for the neo-pixel.... It works!!

First working CO2-board.jpg

Minting UROŠ - CO2 brkout as NFT on OpenSea

UROS-brkout NFT.jpg

Go to OpenSea NFT marketplace

Serial Plotter and how to get dedicated soil resp data

Started to use this tool tauno-serial-plotter to plot data and export .png or .csv for further analysis / storage.

Export blowTest2.png

Testing the soil chamber at the beach

See all data on dusjagr's public channel:

CO2 soil chambers


Further developments during dusjagr's residency at Lifepatch June - August 2018

IMG 20180616 122121.jpgKiljuChamber laserCut new.jpg

Teensy Code

See RandeLab repo on GitHub

results on our-sci

using this script:

PVC pipe Chambers

FieldTest BambooBox PVC-Chamber.jpgPipeChamber stickers.jpg

Wiring diagram

CO2-BambooBox WiringSchema v03.jpg

RandeChamber aka Kilju Chamber

RandeSoilChamber.jpgKiljuChamber laserCut.jpg

Failed PCB...

KiljuBox SZ-Ready.pngCO2 littleBox digitalMockUp.png



Another version of the chamber, featuring a motorized cap and local/wireless sensor data visualization and control via a browser-based App (websockets, HTML5, Javscript, css..) has been developed in Amsterdam by TeZ and fully documented in the SOLARPUNK LAB Github.


A dedicated PCB board and software demo were designed and tested in the lab for this project.



Test Measurements @ Yogyakarta / Lifepatch

Respiration measurement Lifepatch rooftop

Lifepatch rooftop Env.jpgLifepatch rooftop Setup.jpg

1st measurement, late afternoon

ExampleMeasurement Lifepatch rooftop.png

2nd measurement, noon

ExampleMeasurement Lifepatch Noon rooftop.png

Respiration measurement Lifepatch frontyard

1st measurement around noon

Lifepatch frontyard overview.jpgLifepatch frontyard Setup.jpg

Lifepatch front Noon overview.png

Tibor's rice experiment

Lifepatch frontyard TiborRice.jpg

Lifepatch front NoonRice 900s-PVC-chamber on soil.png

CO2 absorbtion with NaOH crystals

NaOH absorbtionTest Setup.jpg

NaOH absorbtionTest high.png

Beach Sand | dried and rewetted

BeachSand Collection.jpg

BeachSand rewetted.png

Soil Geeking @ Lifepatch with Matt

Great opportunity to do some testing and sharing of protocols with Matthew Daniel from Global Urban Forest. This turned out to be a great little gathering of overlapping networks from GOSH, our-sci, hackteria and the local soil, gardening and permaculture geeks around Lifepatch.

Testing trials in lifepatch garden

Screenshot 2018-06-19-17-24-23-271

Visit to Pak Paning's permaculture farm

Early Experiments

First Prototypes

First CO2 setup MH-Z19.jpgFirst CO2 soil trial MH-Z19.jpg

Comparing sensors and chambers

Using the Our-Sci Platform

IMG 20180419 172702 HDR.jpg

Our-sci dataPlot.png

More about CO2 sensors:

See RandeLab GitHub for Arduino / Teensy codes

New Sensirion SCD 4x Optoaccoustic sensor

RandePrototype SCD41 feathers2.jpgRandePrototype SCD41 indoorTest.jpg

See Adafruit libraries and circuitpython examples:

Nondispersive infrared sensor

Sensirion SCD30

SCD30 sensirion.png

MH-Z16, available with an I2C board:


New Library!:

MH-Z19 working.jpg

This page is about the MH-Z19 CO2 sensor and some experiments done with it:

Using the MH-Z19 CO2 sensor PWM readout, simple arduino code:

More on ABC, Automatic Baseline Correction

Immerhin kann man den Sensor per Hd-Pin (7s gegen GND) auf 400ppm (Außenluft) eichen.


CCS BME combo

2017-03-25T20-47-46.605Z-BME280 CCS811.jpg

This one I ordered 2.... but check I2C adress. and connect "WAK" to GND

  • #define CCS811_ADDR 0x5A //Alternate I2C Address
  • myBME280.settings.I2CAddress = 0x76;


A low-cost versatile system for continuous real-time respiratory activity measurement as a tool in environmental research

File:2021_A low-cost versatile system.pdf