A CO2 sensor node with display


  • Use the Amphenol / Telaire T6703-5K CO2 sensor, measure every 30s, show the result on a small OLED display, and send the readout to the MySensors controller.

  • Use an Arduino Nano on 5V.

  • I read this for a commercial CO2 meter, see below (translated). Hence, it would be good to add green, yellow and red LEDs:

    The EnviSense CO2 meter fulfills the demands that are included in the Construction prescriptions. This includes the fact that the CO2 meter works on the continous mains net and that the device will calibrate itself. Also, the meter has a range from 0 - 5000 ppm and is equipped with 3 color codes: green for less than 800 ppm, yellow for 800 - 1200 ppm and red for a CO2-level of 1200 and higher.

The result

Complete Prototype

The first prototype

Built in a box

The node built in a box

The inside of the box

The inside of the box

Used Components


Component Pin Wire color / component Pin Component
ArduinoNano5V VCC red 5V Breadboard / Power Supply
ArduinoNano5V GND black GND Breadboard / Power Supply
T6703 1 SDA green A4 ArduinoNano5V
T6703 2 SCL blue A5 ArduinoNano5V
T6703 3 red VCC Breadboard / Power Supply
T6703 4 black GND Breadboard / Power Supply
T6703 5 PWM output (not used)    
T6703 6 brown GND Breadboard / Power Supply
OLED-Display VCC red VCC ArduinoNano5V
OLED-Display GND black GND ArduinoNano5V
OLED-Display SCL A5 Purple ArduinoNano5V
OLED-Display SDA A4 Green ArduinoNano5V
NRF24L01+ Adapter VCC red 5V Breadboard / Power Supply
NRF24L01+ Adapter GND brown GND Breadboard / Power Supply
NRF24L01+ Adapter CE blue 9 ArduinoNano5V
NRF24L01+ Adapter CSN purple 10 ArduinoNano5V
NRF24L01+ Adapter SCK yellow 13 ArduinoNano5V
NRF24L01+ Adapter M0 (MOSI) gray 11 ArduinoNano5V
NRF24L01+ Adapter M1 (MISO) white 12 ArduinoNano5V
NRF24L01+ Adapter IRQ green - OPTIONAL - NOT USED! 2 ArduinoNano5V


Code at: CO2Node.ino

Beware: Using the OLED display library, reading the CO2 meter, and MySensors is a bit much for the Arduino ATmega328p: there is a lack of enough memory. The code had to be reduced to the bare essentials, to limit RAM and Flash-RAM use. Hence: no debug information from MySensors.

Compile as follows:
  • CD to the folder where the file platformio.ini is.
  • Run pio run
  • Run pio run -t upload -t monitor

First sign of life

__  __       ____
|  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
| |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
| |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
|_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
        |___/                      2.3.2


Initially, the meter is not very stable. After an hour, the measurements vary only 1 or 2 ppm per measurement. For calibration, it is imperative that the sensor at least once a day or week can measure outside air. In my case, it is sufficient to have no people in the room during the night, while the ventilation system refreshes the air; this way the level of CO2 will be the same as outside in the morning.

Graph of CO2 ppm over 48h

This graph shows the CO2 ppm over the last 48 hours. During the day, there are people in the room, and the ppm value goes up. During the night the room is empty, the ventilation system refreshes the air and the ppm value goes down to 400.

Tags: domotica nodes