Assembler une sonde CO2

Introduction

Pour moins de 50€, il est possible d'assembler soi-même un appareil de mesure fiable de dioxide de carbone afin de vérifier la ventilation d'un lieu fermé et réduire ainsi le risque d'être contaminé par le virus respiratoire SARS-COV2.

Un appareil de base consiste en:

À l'expérience, la solution la plus simple et compacte consiste en 1) une sonde Sensirion/Senseair et 2) une carte TTGO avec un écran intégré, d'autant qu'elle possède aussi une prise JST qui permet d'y connecter un accumulateur type 18650/16340/603449 si on veut pouvoir l'utiliser sans accès à une prise murale et sans s'embêter avec une batterie externe USB.

Outils :

Si aucune expérience de la soudure, le mieux est de s'entraîner au préalable sur une simple carte type place de propotype PCB avant de se lancer pour de vrai. La soudure doit être appliquée rapidement et finement à la jonction entre la plaque et le fil

À l'aide d'un breadboard et des fils, on peut déjà tester le logiciel sans soudure.

Assemblages de Grégoire Rinolfi

https://co2.rinolfi.ch : capteur Senseair S8 LP, carte microcontrôleur LILYGO TTGO T-Display ESP32 + code Arduino à compiler

Belair :  Carte TTGO T-DISPLAY ESP32 + capteur SENSEAIR S8

Grandair :

Composants:

Installation du logiciel

Source : https://twitter.com/ArabellaBrayer

  1. Sur l'ordi, installer l'IDE Arduino . Vers la fin, le programme d'installation va proposer d'installer quelques appareils ("devices"): Choisir l'option par défaut qui est… "Don't Install", puisque le contrôleur ESP32 + TTGO n'est justement pas une carte Arduino.
  2. Installer les cartes basées sur le contrôleur ESP32 (par défaut, l'IDE ne connait que les cartes à processeur AVR, et non les processeurs d'Espressif comme l'ESP32)
  3. Installer la version de Xinyuan-LilyGO de la bibliothèque TFT_eSPI (la version de Bodmer installée lors de l'installation de l'IDE ne fonctionne pas avec cette carte). Il faut l'installer manuellement (le menu Sketch > Include library > Add ZIP library se termine avec "Specified folder/zip file does not contain a valid library")
  4. Choisir la carte "ESP32 Dev Module" dans le menu Tools > Board > ESP32 Arduino; les paramètres ("Upload speed, CPU Frequency, Flash frequency, etc.") par défaut fonctionnent
  5. Copier/coller le code source (section "Logiciel" de la page; il communique avec le capteur en utilisant le protocole ModBus), disponible en version "stand-alone" ou "wifi"; la version "wifi" nécessite d'éditer l'en-tête (ssid1, etc.) et de se créer un compte sur www.thingspeak.com et obtenir une clé API, nécessaire pour que le boîtier envoie toutes les 10mn la dernière mesure données sur le site web
  6. Compiler le code pour vérifier qu'il n'y a pas d'erreur: Sketch > Verify/Compile
  7. Installer le driver pour la puce USB-série qui convient : dans le cas présent, c'est la CH9102F et le driver se trouve ici
  8. Brancher la carte à l'ordi par un câble USB-C court et blindé (important !). Si le contrôleur est alimenté mais pas détecté, essayer un autre câble. Dans Device Manager de Windows, vérifier le port COM assigné, et l'indiquer dans l'IDE via Tools > Port
  9. Flasher la mémoire avec le nouveau programme: Sketch > Upload. Le flashage ne dure que quelques secondes, et l'appareil redémarre de lui-même.

On peut fixer les éléments sur une plaquette en utilisant simplement de la colle cyanoacrylate (attention aux doigts + yeux) voire du scotch double-face, avant de souder les pattes nécessaires à la connexion.

Note : si l'IDE Arduino est très lent à fonctionner, essayer, le cas échéant, de désactiver l'antivirus, au moins le temps de faire le test. Autre solution à essayer : dans File > Preferences, décocher "Check for updates on start up".

Pour voir 1) où se trouve le fichier.bin compilé et 2) les commandes pour flasher la mémoire, et 3) partager le fichier binaire à des gens non équipés pour compiler :

  1. Dans File > Preferences, activer "Show verbose output during compilation" et désactiver "Show verbose output during upload."
  2. Compiler
  3. Chercher le répertoire où se trouvent les fichiers compilés : c'est le fichier .bin qui sera flashé. Sous Windows, ça devrait être quelque chose comme C:\Users\toto\AppData\Local\Temp\arduino_build_123\
  4. Dans File > Preferences, désactiver "Show verbose output during compilation" et activer "Show verbose output during upload."
  5. Flasher la mémoire
  6. Dans l'output, chercher la commande utilsée, qui ressemble à \arduino-1.2.3\…\upload.py --chip esp8266 --port COM19 --baud 921600 --before default_reset --after hard_reset write_flash 0x0 C:\Users\toto\AppData\Local\Temp\arduino_build_123\toto.bin
  7. Pour qu'un utilisateur non-équipé puisse flasher la mémoire, lui fournir a) une version prête à l'emploi de upload.py, b) le .bin et c) un batch pour exécuter la commande.

Étalonnage/calibrage

Pour tester que le capteur est correctement calibré, il suffit de poser l'appareil en extérieur plusieurs minutes, et voir s'il descend bien à ~415PPM. Si le niveau ne se stabilise pas autour de cette valeur, un recalibrage est nécessaire.

La méthode ABC (Automatic Background Calibration) de recalibrage automatique de la sonde ne peut s'effectuer correctement qu'à condition qu'elle soit fréquemment exposée en fonctionnement à l'extérieur, qui est le niveau de référence… ce qui n'est pas le cas si l'appareil n'est utilisé qu'en intérieur et occasionnellement.

Dans ce cas, il faut effectuer régulièrement un recalibrage manuel : laisser l'appareil allumé en extérieur environ 30mn et appuyer sur le bouton à droite de la prise USB quand elle est vers le bas; cette méthode manuelle s'appelle "Background Calibration". La recalibration est correcte quand l'appareil affiche environ 415PPM (Source)

Améliorations possibles

Carte TTGO T8 ESP32-S2 (CH340C)

carte TTGO T8 (processeur ESP32-S2, convertiseur série-USB CH340C, carte TF/SD, connecteur JST 1,25mm) et son interrupteur batterie

À la date de juillet 2022, la bibliothèque TFT_eSPI de Xinyuan-LilyGO une fois installée dans l'IDE Arduino 2(.0.0rc8) ne permet pas de compiler. Désinstaller et essayer celle de Bodmer (source) Si besoin, installer manuellement. Compile OK, reflash OK mais rien à l'écran : envoie chaîne vers USB plutôt qu'écran ?

Quelles pins choisir ?
#define TXD2 21         // série capteur TX; utiliser 17?
#define RXD2 22         // série capteur RX; utiliser 18?

Supporté dans IDE Arduino 1x ? https://github.com/espressif/arduino-esp32/issues/6256

https://docs.espressif.com/projects/arduino-esp32/en/latest/getting_started.html#supported-soc-s

Must upgrade to IDE 2.0 RC (only available for x64)? https://www.arduino.cc/en/software

Supporté par CircuitPython : https://circuitpython.org/board/lilygo_ttgo_t8_s2_st7789/

Supporté par esp-idf https://github.com/Xinyuan-LilyGO/LilyGo-T-Display-S2

 

Connecter à Windows, et lancer Device Manager pour voir si un port COM est attribué. Si le driver est nécessaire : https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all

Installer le ESP-IDF Tools ("Espressif IoT Development Framework") https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup.html

Arduino 1.8.19 + T8 ESP32-S2: A fatal error occurred: This chip is ESP32-S2 not ESP32. Wrong --chip argument?

 

File > Preferences: Additional Board Manager URL: Append the following URL, using a comma if it's not empty:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

ESP-IDF (Espressif IoT Development Framework)

https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/index.html

Manual Installation For the manual procedure, please select according to your operating system (Windows x64 only)

https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup.html

ESP-IDF requires some prerequisite tools to be installed so you can build firmware for supported chips. The prerequisite tools include Python, Git, cross-compilers, CMake and Ninja build tools. For this Getting Started we’re going to use the Command Prompt, but after ESP-IDF is installed you can use Eclipse or another graphical IDE with CMake support instead.

Universal Online Installer 2.15 Windows 10, 11 Size: 4 MB

 

Assemblages de Emariete

NodeMCU + écran OLED + sonde Senseair

De par son écran OLED, cette combinaison consomme moins que l'écran TFT sur le TTGO; elle nécessite environ 170mA; une batterie externe de 2.700mAh permet donc de l'utiliser pendant environ 16 heures (et une batterie de 1.000mAh environ 4-5 heures). Le NodeMCU n'inclut pas de connecteur JST pour y relier une batterie.

Pièces

Procédure

TODO

? Font plus grande ? https://iotforgeeks.com/interface-i2c-oled-display-with-nodemcu/

? Désactiver wifi pour réduire consommation ? https://emariete.com/en/diy-co2-monitor-wifi/comment-page-11/#comment-2103

Liaisons :

  1. Flasher la mémoire avec le firmware ESP Easy.

    Important : avant un flashage de la mémoire, il ne faut pas que les prises TX et RX soient connectées à la sonde CO2 ("This is because the board shares these pins with the USB port and conflicts could occur.")

    Important : utiliser un câble USB de qualité (blindé de préférence), et installer le driver qui correspond au composant USB-UART (dans le cas d'un CP210x, utiliser "Windows driver" et pas "Universal Windows driver"). L'absence de détection du NodeMCU par l'OS peut simplement dû à un câble de mauvaise qualité.

    L'interface web n'est dispo que pour Chrome/Edge, et semble fonctionner à 9.600bps, soit très lent : il vaut mieux essayer de flasher avec l'appli graphique ESP.Easy.Flasher.exe (dans Medidor CO2.zip).

    Comme indiqué lors du premier lancement, l'appli dédiée nécessite de copier deux polices de caractère (AGENCYR.TTF et AGENCYB.TTF) de son sous-répertoire .\APP_DATA vers c:\windows\fonts, et redémarrer l'appli.

    À 115.200bps, le flashage prend un peu moins de deux minutes.

    Appuyer sur le bouton RST, puis utiliser un smartphone ou un ordinateur pour se connecter en wifi au point d'accès du NodeMCU : "ESP-Easy", mot de passe "configesp".
    Si problème pour se connecter au wifi du ESP Easy, essayer de reflasher avec le firmware de NodeMCU, et si OK (point d'accès "FaryLink_blah" visible), utiliser son PyFlasher pour reflasher le firmware d'eMariete.

    Une fois connecté au point d'accès du NodeMCU, l'adresse IP du contrôleur est 192.168.4.1.

    On peut également reconfigurer l'ESP Easy du NodeMCU pour qu'il se connecte en tant que client sur le point d'accès wifi du routeur du réseau local, ce qui permet ensuite de finir de configurer le NodeMCU depuis un ordinateur connecté au routeur. Une fois le NodeMCU configuré en tant que client wifi, son point d'accès wifi disparaît.
  2. On peut faire un premier test des composants en reliant simplement la carte, l'écran voire la sonde avec des fils Dupont femelle-femelle/mâle (selon qu'ils sont équipés ou non de pins).

    Si le NodeMCU est équipé de pins, il est plus simple et compact de souder les fils dans les trous : pour retirer les pins concernées, 1) liquéfier la soudure tout en tirant sur la pin avec un pince, 2) tordre avec une pince les bases noires pour les casser et 3) finir de retirer le reste de soudure existante en tenant le contrôleur dans un étau et liquéfier la soudure d'un côté tout en insérant un poinçon dans le trou par l'autre côté.

    Avant de souder les différents fils, appliquer un tout petit peu de soudure sur leur extrémité pour que les fils restent solidaires.

    Pour relier l'écran au contrôleur : 3V3-VCC, GND-GND; données : D1-SDA, D2-SCL; note : SDA=serial data, SCL=serial clock), installer le driver qui correspond au composant USB-UART (dans le cas d'un CP210x, utiliser "Windows driver" et pas "Universal Windows driver"), connecter le NodeMCU à l'ordi par la prise USB, et flasher la mémoire avec le firmware ESP Easy compilé par eMariete. Le port COM est listé dans DeviceManager.

    Pour la sonde : les deux fils d'alimentation sont sonde.G+ - NodeCMU.VIM (5V) et sonde.GO - NodeCMU.GND; pour les données, ce sont les prises TX et RX côté NodeMCU, et deux prises sur la sonde, cf. diagramme.

    Manip général, avec vidéo :
    https://emariete.com/en/diy-co2-monitor-wifi/ 
     
  3. Comment relier et configurer l'écran SSD1306 :
    https://emariete.com/en/connect-an-oled-display-ssd1306-to-espeasy/

    Comment relier configure la sonde Senseair :
    https://emariete.com/en/meter-co2-esp8266-nodemcu-sensor-senseair-s8/ 

    Une fois tout configuré, on peut lire le niveau de CO2 remonté par la sonde via cette URL : http://adresse.du.NodeMCU/dashboard.esp

    Si l'écran ne s'allume pas, vérifier que les soudures sont correctes (pour l'alimentation : un multimètre). Si erreur, on peut inverser la liaison D1-SCL et D2-SDA par logiciel, dans la section "I2C Interface" de l'onglet Hardware.
     
  4. Visser/coller les composants dans une boîte en plastique transparent

Alimenter le NodeMCU et les composants à l'aide d'un accumulateur type 18650 nécessite des composants supplémentaires pour que le charge + décharge s'effectue sans risque.

Connecter un NodeMCU à un grand écran, une montre, un écran tactile, un écran basse conso :

La boîte à formes

DONE https://www.laboiteaformes.fr/capteur-co2/ : carte micro-contrôleur ESP8266 Wemos d1 mini, capteur CO2 SenseAir S8, écran OLED SSD1306, LED RGB WS2812, boîtier imprimé 3D
https://www.laboiteaformes.fr/wp-content/uploads/2021/08/kit-co2.jpg

NousAerons

DONE http://nousaerons.fr/makersco2/#fabriquer

DONE Guide de câblage pour capteurs Sensirion SCD30/Senseair S8 et carte de développement Arduino Uno/ESP32

Autres projets

http://www.wiki-rennes.fr/Capteur_CO2_Labfab

Détecteur de CO2 v3 (capteurs Senseair S8 LP et Sensirion SHT31D, carte LOLIN D32 PRO v2, écran LOLIN ePaper 2.13/Tri-Color ePaper 2.13, accumulateur type 16340, LEDs, buzzer, encodeur rotatif) https://le-17.net/dokuwiki/geek/co2/v3

https://www.reichelt.com/magazin/en/build-your-own-co2-measuring-device/ NodeMCU ESP32 + MH-Z19C

WeMos D1 Mini ESP8266 https://www.aliexpress.com/item/32643142716.html

NodeMcu V3 Lua WIFI development board based ESP8266 https://www.aliexpress.com/item/32654418046.html

How to reduce the ESP8266 power consumption?

https://gitlab.u-angers.fr/agodon/uaco2 : capteur SCD30,  micro-contrôleur ESP32 NodeMCU, boîtier, LED RGB

MH-Z19 + Domoticz + code MicroPython pour ESP32/ESP8266
MH-Z19 + Domoticz + code Arduino compatible ESP32/ESP8266

https://www.instructables.com/CO2-Monitoring-As-an-Anti-Covid19-Measure/ Adafruit Feather M0 board, Gravity Analog Infrared CO2 Sensor For Arduino SEN0219, CR1220 battery, etc. ~100€

https://www.instructables.com/CO2-Display/ MZ-H19B sensor, Arduino Nano microcontroller, TM1637 display,

LibreCO2: Arduino UNO, Arduino Multifunction Shield, CO2 low cost popular sensor (Sensirion SCD30, Winsen MH-Z14 or MHZ-19 and Cubic CM1106)

https://www.hackster.io/Seluxit/homemade-co2-sensor-unit-22a9d8 Raspberry Pi 3 B, SCD30, SparkFun Atmospheric Sensor Breakout - BME280

Breadboard + Senseair + Wemos D1 Mini https://fabmanager.latreso.fr/#!/projects/capteur-de-co2

Accumulateur

Alternatives à une batterie externe USB:

Infos

"The ESP32 will want 5V or 3.3V ; with a single battery, a 3.3V LDO ("low-dropout regulator") could be used between the battery and the ESP32 to supply 3.3V or use a step up 5V regulator to supply 5V. A USB power bank is a set of LiPo batteries in a case with electronics to make 5V. With that battery, I'd use 2 in series, a USB power bank can be made."

Calibration capteur Senseair S8

"Une calibration « manuelle » du S8 est possible. Pour cela, il suffit de le placer dans un environnement où le taux de CO2 est entre 400 et 430 PPM, par exemple à « l’air libre », à l’extérieur, et de suivre la procédure suivante :

Exemples de montages

Apprendre à souder

Trucs

Capteurs CO2

Sensirion

Made in Switzerland

"The Sensirion SCD-30 features an automatic calibration system, called by Sensirion Automatic Self-Calibration (ASC), and it works quite well."

SCD-40 https://www.adafruit.com/product/5187

SCD-41 https://www.adafruit.com/product/5190

Senseair

Made in Sweden; self-calibration

S8 LP

S8-0053; "For applications where both power consumption and accuracy are critical factors" (Source)

https://www.aliexpress.com/item/4000884582128.html

https://www.amazon.fr/dp/B08QZ86NKD

Si nécessaire, il faut y souder des « pin headers ».

Consommation : average 18mA, peak 300mA

Note : Operation temperature: 0 to 50°C

Winsen

https://www.winsen-sensor.com

MH-Z19B: Recommended, but watch out for fakes; Improved version of MH-Z19; Wait at least 2mn after powering up

MH-Z19C: Not recommended

MH-Z1311A: New kid on the block

Cubic

CM1106SL-NS

Cartes

Lilygo

http://www.lilygo.cn/

Carte TTGO avec écran OLED et processeur ESP32

"On trouve parfois le microcontrôleur vendu déjà équipé de ces « pins headers », ce qui vous évitera une opération de soudure."

Consommation : ~80mA

NodeMCU

"NodeMCU is a low-cost open source IoT platform. It initially included firmware which runs on the ESP8266 Wi-Fi SoC from Espressif Systems, and hardware which was based on the ESP-12 module. Later, support for the ESP32 32-bit MCU was added."

Kit de développement basé sur un ESP8266

Disponible avec un ESP8266 ou ESP32

Un écran OLED (SSD1306) est disponible (Lilygo TTGO)

Peut être alimenté par un chargeur USB

https://www.aliexpress.com/item/4000550036826.html

https://emariete.com/wp-content/uploads/2017/01/CameraZOOM-20170112203504828-1-1024x758.jpg

WeMos D1 Mini

https://www.wemos.cc/

La carte WeMos D1 Mini utilise un ESP8266; version plus petit que le NodeMCU ESP8266; module Wifi intégré; capacité de mémoire et de calcul supérieure aux Arduino; microprocesseur Tensilica 32-bit RISC CPU Xtensa LX106; 64kB RAM, Flash 4000kB; Tension d’alimentation 7-12V

Arduino

"The Arduino is nothing like a computer, as most of Arduino boards are not powerful enough to run an operating system. Indeed, Arduino is designed for electronics projects were you control I/O using C programming with the Arduino IDE installed in a Windows, Linux, or Mac computer. All the hard parts of setting up the hardware are however taken care of or abstracted, so Arduino boards are much easier to use than traditional MCU boards."

Uno

Due

Nanon

Mega

Mega256

Raspberry Pi

https://en.wikipedia.org/wiki/Raspberry_Pi

https://emariete.com/en/home-automation-at-home-raspberry-pi/

Modèles : 1, 2, 3, 4, 400, Zero, Pico

"Raspberry Pi boards run a fully-fledged Linux operating system [eg.Raspbian]".

Atmel SAMD21 ("M0")

BeagleBone

https://en.wikipedia.org/wiki/BeagleBoard

Boîtier

Le plus simple est d'utiliser une petite boîte en plastique acrylique transparent, et de visser ou coller aux parois les composants avec du scotch double-face. Si nécessaire, percer des trous avec une perceuse afin l'air pénètre suffisamment jusqu'au capteur CO2.

Moins rigide : on peut aussi utiliser du polypropylène alvéolaire.

Plus sophistiqué : "imprimer" un boîtier avec une imprimante 3D.

Vocabulaire

Q&R

MCU, SoC, SBC : quelle différence ?

CP2102 vs. CH340 vs. CH9102F

Serial-USB converters just by different manufacturers. "An CP2102 considered as a better one but from my experience there is no difference. Some people complained about problem with CH340 driver installation. However mostly it's just an old OS issue."

https://riton-duino.blogspot.com/2020/02/les-convertisseurs-usb-serie.html

ESP Easy?

https://en.wikipedia.org/wiki/ESP_Easy: "free and open source MCU firmware for the Internet of things (IoT). and originally developed by the LetsControlIt.com community (formerly known as ESP8266.nu community). It runs on ESP8266 Wi-Fi based MCU (microcontroller unit) platforms for IoT from Espressif Systems. […] The firmware is built on the ESP8266 core for Arduino […]. In most cases, ESP8266 modules come with AT or NodeMCU LUA firmware, and you need to replace the existing firmware with the ESP Easy firmware by flashing the hardware with a flash tool to use it."

Protocole ESP-NOW

"Developed by Espressif, allows a very important energy saving, using the hardware for Wi-Fi that we already have in the ESP8266 and ESP32 chips. A process of sending data that with Wi-Fi can take about 10-12 seconds, with ESP-Now it is reduced to a few milliseconds. Of course, the routers and Wi-Fi access points that we have at home do not support ESP-Now, which makes it necessary to include a «translator» or «bridge», something than an ESP-Easy and Wifi. This gateway receives the data from the ultra-low consumption CO2 meter through ESP-Now and forwards it through wifi via MQTT (already available and working), HTTP or whatever we want." (link, link)

Alternative ouverte : LoRa(WAN)

PlatformIO

Alternative IDE to the Arduino IDE.

https://platformio.org/

https://dronebotworkshop.com/platformio/

CircuitPython?

"A variant of MicroPython. Most development is sponsored by Adafruit" (Source)

Why change the DIP switches? So the controller shows up as a disk drive called CIRCUITPY

Ressources