Caractéristiques du détecteur de CO2:
Je tiens à remercier Henri BACHETTI: c'est grâce à la lecture de son blog RitonDuino que j'ai fini par me lancer dans l'électronique et l'Arduino.
Les concepts énoncés ici ne sont pas approfondis, pour plus d’information on pourra consulter les sites Projet CO2 (http://projetco2.fr/), Nous aérons (https://nousaerons.fr/). La science a maintenant montré que le transmission de la COVID-19 se fait majoritairement par le biais des aérosols. Les aérosols sont des «micro-goutelettes» potentiellement chargées en virus qui se diffusent et restent en suspension dans l’air (penser par exemple à de la fumée de cigarette dans un pièce). Une méthode simple et efficace de limiter la transmission est d’aérer le plus possible les espaces intérieurs pour renouveler l’air. La mesure du taux de CO2 dans l’air est un marqueur fiable de l’état de confinement d’un local et permet d’être alerté lorsqu’il devient nécessaire voire impérieux d’aérer.
Le Senseair S8 LP a été testé et recommandé par Projet CO2 (capteur de type NDIR avec processus de calibration manuelle). On peut s'en procurer pour une trentaine d'euros chez Aliexpress par exemple ici. Vérifiez bien la référence 004-0-0053 !
Cette fonction est assurée par un circuit Sensirion SHT31D: composant classique i2c ayant fait ses preuves et pas trop gourmand en énergie (voir par exemple Les capteurs de température, humidité, pression & luminosité).</col>
J'ai choisi la carte D32 PRO v2 de chez LOLIN. Cette carte est équipée d'un ESP32-WROVER classique et possède de plus quelques avantages comme la présence de connecteurs dédiés pour les périphériques i2c et l'écran (ce qui réduit le nombre de soudures à effectuer). On la trouve chez Aliexpress sur la boutique officielle.
Pour l'écran j'ai choisi le ePaper 2.13 de chez LOLIN qui offre une taille et une résolution confortables et dispose du connecteur compatible avec le microcontrôleur. On peut également l'utiliser sans le connecteur avec des connexions classiques par soudure ou Dupont.
Malheureusement en voulant me réapprovisionner je me suis rendu compte que ce modèle n'était plus commercialisé (voir ici. Cependant un modèle plus récent existe: le Tri-Color ePaper 2.13 (SSD1680) qui, à priori, est identique au niveau des dimensions et de la résolution. Cependant le contrôleur est différent et nécessitera une petite adaptation du code source (j'ai commandé un exemplaire et suis en attente de réception).
Le câble pour la connexion TFT: soit chez LOLIN ici soit en prenant un câble de type JST SH1.0 SH à 10 fils droit (non croisé).
Le câble pour la connexion i2c: soit chez LOLIN ici soit en prenant un câble de type JST SH1.0 SH à 4 fils croisés.
Concernant l'alimentation nous avons la majorité du circuit alimenté en 3,3V excepté le capteur S8 qui nécessite du 5V. D'autre part, afin d'être autonome un accumulateur et donc un circuit de charge sont requis.
Après recherche et plusieurs essais afin de créer un circuit dédié à cette tâche les résultats n'étaient pas convaincants par rapport à l'utilisation d'un shield complet gérant le circuit de charge et la sortie des deux tensions.
La v2 du détecteur utilisait un shield basé sur deux accumulateurs 18650 ce qui était surdimensionné: l'autonomie avoisinait les 24 heures. De plus le circuit comportait 5 LED allumées constamment ce qui n'était pas des plus économes (pas de possibilité de les éteindre hormis en les dessoudant). Finalement ce modèle basé sur un accumulateur 16340 est suffisant concernant l'autonomie. Les LED restent allumées uniquement si branché au secteur et il possède un interrupteur.
N'importe quel accumulateur de type 16340 à votre convenance fonctionnera. La boutique en ligne NKON est particulièrement bien fournie à des tarifs raisonnables. Je commande chez eux depuis plus de 10 ans. Plus près de chez nous le magasin GO TRONIC est également une valeur sûre.
L'emploi d'une LED RGB permet de simplifier le circuit (par rapport à l'emploi de 3 ou 4 LED colorées) et de pouvoir faire évoluer les codes couleurs suivant les besoins. Attention à bien sélectionner une LED à anode commune (long lead +) de 5mm de diamètre. J'ai sélectionné ce modèle (Diffused Lens Anode +).
Le buzzer permet d'émettre des bips lorsque le seuil de CO2 est trop élevé. Il faut veiller à prendre un buzzer passif de type piézo-électrique. Ce modèle convient. La version v2 du détecteur utilise ce modèle qui peut également convenir (il faudra juste souder des fils dessus et le caler dans le boîtier).
L'encodeur rotatif permet de gérer les interactions de l'utilisateur: la rotation du bouton permet de faire défiler un menu ou des valeurs et l'appui permet la sélection. Ce modèle est assez compact, facile d'utilisation et fonctionne en 3,3V. Attention à bien sélectionner le modèle doté d'un pas de vis afin de pouvoir le fixer à l'intérieur du boîtier grâce à l'écrou ! Il est disponible ici à l'unité ou là par lot de 10.
Toutes les connexions se font à l'aide de connecteurs Dupont, cela nécessite de posséder les connecteurs adéquats ainsi que la pince à sertir:
Il est également possible de ne pas utiliser de connexions Dupont et de souder directement tous les composants ensembles. Cela risque néanmoins d'être délicat concernant le détecteur S8 pour le caler dans le boîtier.
Le plus compliqué dans ce type de montage réside dans le choix des broches à répartir entre les différents éléments:
Le boîtier a été créé au besoin avec le logiciel OpenSCAD afin d'être le plus compact possible et aéré afin que le capteur CO2 puisse effectuer ses mesures correctement. Le boîtier est composé d'une base, d'une cale pour l'écran, d'un couvercle et d'un bouton en deux parties (à coller) pour l'encodeur rotatif.
Le fichier zip fourni contient les fichiers STL prêt l'emploi pour l'impression ainsi que le fichier source OpenSCAD et les fichiers de bibliothèques additionnelles.
J'ai effectué l'impression en PLA avec hauteur de couche classique de 0.2mm, remplissage à 50%, avec support pour les inévitables parties en porte à faux mais sans support d'adhérence. Comptez plus d'une douzaine d'heures pour l'impression de toutes les pièces. L'impression en PETG est bien sûr possible.
Positionner les 3 en-têtes coudées Dupont et souder une seule broche par connecteur (par exemple B2, V6, X3).
Positionner les 2 supports pour la carte ESP32 (souder les broches inutilisées) et le support pour le capteur S8 (souder les 2 broches inutilisées: X9 et X10).
Vue côté soudures des connecteurs et en-têtes coudées Dupont.
Positionner la résistance de 2 kΩ entre la broche 34 (S2) et le connecteur Vbatt (U6); un fil orange de 2cm entre le connecteur 3.3V (V6) et la broche 3V3 (T2) ainsi que la résistance de 10 Ω entre le connecteur 3.3V (V6) et l'anode du connecteur de la led RGB (W2).
Souder la résistance au connecteur led RGB (A2-B2); le connecteur 3,3V avec la résistance et le câble orange (C5-C6); le connecteur VBatt avec la résistance (D5-D6). Ne pas souder la résistance de 2 kΩ avec la broche 34 (S2) (contrairement à la photo).
Positionner la résistance de 47 Ω en O3-R3; les résistances de 100 Ω en M4-R4 et L5-R5.
Utiliser 15 mm de gaine thermorétractable sur les pattes des résistances côté connecteurs RGB puis les souder. Côté ESP32 souder les résistances sur les points L1, M1 et O1.
Pour la liaison avec le capteur S8 préparer un fil gris de 55 mm entre F9-W7 et un fil jaune de 50 mm entre I9-W8.
Souder les fils en F9-F10, I9-I10, W7-X7 et W8-X8.
Préparer un fil noir de 28 mm et le positionner entre W5 et T9; installer la résistance de 6,8 kΩ entre S2 et S6.
Souder la résistance et le fil noir entre T9-T10; les deux résistances en P01 et le fil noir sur le connecteur d'alimentation entre W5-W6.
Positionner le fil noir (GND) du buzzer sur E9 et le fil rouge (+) sur G9; puis souder entre E9-E10 et G9-G10.
Positionner un fil bleu de 50 mm entre L9-C3, un fil violet de 55mm entre N9-B3 et un fil vert de 55 mm entre H9 et A3. La longueur choisie permet d'éloigner ces câbles de l'emplacement du connecteur de l'écran sur la carte ESP32 afin de libérer de l'espace pour le câble.
Souder les fils avec le connecteur entre A2-A3, B2-B3 et C2-C3 ainsi que tous les connecteurs non encore soudés. La carte est terminée.
Sur le circuit de charge de l'accumulateur, souder des connecteurs 2 points coudés sur 1 sortie 5V et 2 sorties 3.3V comme sur la photo. Puis sur un connecteur coudé supprimer la partie plastique et couper une patte à mi-longueur. Il faut souder cette patte sur la borne positive de l'accumulateur afin de pouvoir mesurer sa tension.
Couper les pattes de la LED (n'oubliez pas de marquer la patte rouge !) Souder ensuite 4 fils de 9 cm sur les pattes et isoler avec de la gaine thermorétractable. De l'autre côté sertir les câbles dans le même ordre sur un connecteur Dupont femelle à 4 plots.
Mettre en place la LED après avoir donné forme à la tresse de câbles: celle-ci doit passer en dessous de l'axe de l'encodeur rotatif et remonter au fond du boîtier.
Préparer l'encodeur rotatif: tordre la petite patte afin qu'elle ne gêne pas et redresser les broches du connecteur Dupont.
Il faut maintenant préparer tous les câbles de connexion. De haut en bas: marron, noir et orange de 9 cm pour le PCB; rouge et noir de 11 cm pour le S8; noir et orange de 11 cm pour l'alimentation du KY-040; vert, violet et bleu de 14 cm pour les données du KY-040.
Brancher les câbles sur le circuit de charge en faisant bien attention à la polarité !
Installer le circuit de charge en l'insérant à 45° pour passer l'interrupteur au fond. Une fois en place il doit se clipser en forçant légèrement. Mettre en place les câbles en attente.
Brancher sur le KY-040 les câbles de données et d'alimentation.
Installer le PCB dans les encoches prévues à cet effet en ayant préalablement passé les câbles de données du KY-040 en dessous afin de les brancher sur le PCB. Brancher également les câbles de la LED et les câbles d'alimentation.
Rassembler les éléments suivants: la carte ESP32, l'écran, le capteur SHT31D et les câbles. Souder les en-têtes Dupont sur la carte ESP32 «à l'envers» comme sur la photo.
Sectionner un des connecteurs du câble i2c et souder les fils sur le capteur SHT31D comme indiqué. Brancher l'écran et le capteur sur l'ESP32.
Installer la carte ESP32 à l'envers en faisant très attention au passage du câble de l'écran. Caler le capteur SHT31D et son câble au mieux.
ATTENTION à ne jamais toucher la partie capteur indiquée par la flèche rouge sur le S8 ! Souder les 2 en-têtes pour l'alimentation d'un côté et les 4 autres pour les données.
Brancher l'alimentation sur le S8 (attention à la polarité il n'y a pas de protection contre l'inversion !) puis insérer le S8 à son emplacement 4 broches. Glisser ensuite la cale pour l'écran dans le rail.
Reste à coller les deux éléments du bouton de l'encodeur rotatif: utiliser de la colle cyanoacrylate (attention aux doigts et aux yeux !). Une fois la colle sèche, insérer le bouton sur l'axe de l'encodeur rotatif. Le montage est maintenant terminé et vous pouvez passer à l'étape de la programmation. Pour cela, vous pouvez surélever la carte PCB pour atteindre le port µUSB de l'ESP32 mais avant lisez bien la remarque au début du chapitre Programmation.
Le couvercle s'installe de la même façon que le circuit de charge dans le boîtier: à 45° en calant les 2 plots dans les nids d'abeille à l'arrière (attention au câble i2c) puis en rabaissant l'avant. Il faut légèrement arrondir le couvercle pour pouvoir passer les 2 plots latéraux à l'avant. Pour le démontage il suffit de presser les deux côtés du couvercle pour l'arrondir et déclipser les 2 plots latéraux à l'avant.
La programmation s'effectue depuis l'environnement Arduino avec la bibliothèques Espressif pour l'ESP32. Vous aurez également besoin de bibliothèques supplémentaires comme indiqué dans l'en-tête du fichier:
L'archive ZIP suivante co2-v3-2022-01-19.zip contient tout le nécessaire pour fabriquer son propre détecteur et même l'améliorer:
Fichier source (à renommer en .ino): co2_v3.3.ino.txt
L'utilisation reste relativement simple. Pour l'installation du boîtier et les concepts de base on pourra se référer aux sites Projet CO2 (http://projetco2.fr/) et Nous aérons (https://nousaerons.fr/).
Pour allumer le boîtier utiliser l'interrupteur coulissant à l'arrière. Au démarrage le boîtier s'initialise:
Au bout de quelques secondes l’écran affiche les informations mesurées:
Le capteur CO2 a une certaine inertie et la mesure des variations n’est pas immédiate. Afin d’augmenter l’autonomie le taux de CO2 n’est mesuré que toutes les 8 secondes. À chaque période l'affichage est mis à jour, la LED clignote suivant le taux mesuré et le buzzer émets une «mélodie» si besoin.
Les seuils de taux de CO2 sont réglés comme suit par défaut:
Taux de CO2 | Couleur LED | Buzzer | Description |
---|---|---|---|
< 550 | verte | non | Qualité de l’air excellente Limite acceptable sans masque (par exemple cantine ou restaurant) |
550 à 799 | bleue | non | Qualité de l’air correcte (avec masque) |
800 à 999 | orange | oui | Qualité de l’air mauvaise : il faut aérer immédiatement |
> 1000 | rouge | oui | Qualité très mauvaise : il faut aérer immédiatement en grand et sortir ! |
À tout moment il est possible de désactiver ou réactiver le buzzer en appuyant sur la bouton de l'encodeur rotatif.
Pour accéder au menu de configuration il faut tourner l'encodeur rotatif pendant le clignotement de la LED ou l'affichage de l'écran. Le menu permet:
La rotation dans un sens ou dans l'autre permet de choisir l'option à modifier. Un appui sur le bouton sélectionne l'option. La rotation permet ensuite de choisir une valeur et un appui sur le bouton valide et retourne sur le choix des options.
Les réglages sont enregistrés dans l'EEPROM de l'ESP32 et sont donc préservés lors des cycles d'arrêt et d'allumage.
La calibration n’est à faire qu’en cas de constat d’une dérive ou d’une anormalité des mesures. Le processus est simple: le capteur utilise la mesure de l'air extérieur pour se calibrer à la valeur de 400 ppm. Pour cela il est nécessaire de positionner le détecteur à l'extérieur et à l'abri de la pluie environ 20 minutes avant et après la calibration afin de stabiliser le processus.
Le mode Calibration est automatisé: une fois sélectionné, placer le boîtier à l'extérieur et attendre la fin du processus. Une barre de défilement indique l'avancée: environ 20 minutes d'attente, calibration et encore 20 minutes d'attente. Une fois le processus terminé le capteur indiquera CALIB: OK pendant encore une vingtaine de minutes avant de disparaître. Il n'est pas nécessaire d'attendre avant de rentrer le détecteur.
Le mode Calibrat. imm. exécute la calibration immédiatement sans temporisation. C'est à vous de placer le détecteur à l'extérieur le temps requis.