Mesurer de grosses concentrations de CO2

Mesurer de grosses concentrations de CO2

Le Yocto-CO2-V2 peut mesurer des concentrations jusqu'à 40000ppm soit 4%, mais on nous demande parfois si on n'aurait pas un modèle capable de mesurer des concentrations plus élevées. La réponse est non, mais par contre, il est assez facile d'utiliser des modules Yoctopuce pour interfacer facilement d'autre capteurs de CO2, comme par exemple le K33 ICB-F de Senseair qui peut mesurer des concentrations de CO2 jusqu'à 10%.

Le K33 ICB-F de SenseAir (on a déjà soudé un connecteur)
Le K33 ICB-F de SenseAir (on a déjà soudé un connecteur)


Le capteur se présente sous la forme d'un rectangle vert de 6x5cm, il a deux petites tubulures pour l'arrivée et la sortie du gaz à mesurer. En effet, ce capteur n'est pas vraiment optimisé pour mesurer l'air ambiant puisque qu'une concentration de 10% de CO2 dans l'air peut facilement vous tuer. Le K33 peut être interfacé en I2C ou en série. On a choisi cette seconde méthode pour l'interfacer avec un Yocto-Serial parce que la version I2C impose de calculer des CRC.

Configuration

En lisant la doc du K33, on détermine que son interface série communique en MODBUS RTU. Le port série fonctionne en 9600 baud, 8 bits de données, pas de bit de parité, un bit stop. Le K33 doit être alimenté en 5 volts, mais sa logique de communication fonctionne en 3.3V. Le Yocto-Serial doit donc être configuré en conséquence.

Configuration du Yocto-Serial
Configuration du Yocto-Serial


Connexion

La connexion entre le K33 et le Yocto-Serial est relativement simple, il n'y a que quatre fils. Simplement, il ne faut pas oublier de croiser les fils TX/RX.

Connexion entre le K33 et le Yocto-Serial
Connexion entre le K33 et le Yocto-Serial


Dès qu'il est alimenté, le K33 commence à effectuer ses mesures, environ une toutes les deux secondes.

Lecture par programmation

Pour interroger le capteur, on a besoin de connaître deux paramètres:

  • L'adresse MODBUS du capteur
  • Le registre où est stockée la valeur mesurée


Il semblerait que SenseAir ait un peu oublié de mentionner l'adresse MODBUS du capteur K33 et leurs exemples se contentent utiliser l'adresse de broadcast 254. Qu'à cela ne tienne, notre petite application ModbusTool nous a permis de déterminer que l'adresse de notre capteur est 104 (0x68). Quand à la concentration mesurée, la doc mentionne qu'elle stockée dans l'input register 3 (aka 30004), sous la forme d'un entier 16 bits qui correspond à la concentration de CO2 divisée par 10.

Le code à écrire pour interroger le capteur K33 par l'intermédiaire du Yocto-Serial est donc relativement trivial. Voici la version Python, le principe est identique pour les autres langages de programmation:

import os, sys
from yocto_api import *
from yocto_serialport import *

errmsg = YRefParam()
if YAPI.RegisterHub("usb", errmsg) != YAPI.SUCCESS:
   sys.exit("init error" + errmsg.value)

serialPort = YSerialPort.FirstSerialPort()
if serialPort is None:
   sys.exit('No module connected (check cable)')

while serialPort.isOnline():
   data = serialPort.modbusReadInputRegisters(104,3,1)
   print("CO2 = "+str(data[0]*10)+"ppm")
   YAPI.Sleep(2000,errmsg)

YAPI.FreeAPI()



Lecture par job

Plutôt que d'écrire du code spécifique au capteur, on peut utiliser le système de job interne du Yocto-Serial pour qu'il interroge automatiquement le capteur. Il suffit de créer une tâche périodique (2000ms) qui lit de l'input register 30004 (aka 3) du capteur dont l'adresse MODBUS est 104 (0x68). Il suffit ensuite de multiplier le résultat par dix et de l'affecter au GenericSensor1

writeMODBUS "680400030001" expect "680402($measure:WORD).*" compute "$1=$measure*10"



Avec ce job, le Yocto-Serial se comporte alors comme un capteur Yoctopuce standard avec tous les avantages que cela implique: nom unique, datalogger, callbacks etc.. Vous pouvez télécharger le job tout fait ici.

Une fois le job lancé, on peut utiliser Yocto-Visualization pour visualiser nos mesures. La photo ci-dessous illustre une petite expérience. On a commencé par souffler dans le tube d'entrée, puis on a prélevé du CO2 dans une bouteille de soda qu'on a ensuite injecté dans le capteur à l'aide d'une seringue ce qui a bien évidemment envoyé le capteur en butée. L'occasion de remarquer que même s'il vendu pour 10%, il est apparemment capable de mesurer jusqu'à 12% (120 000ppm). Enfin, on a utilisé la même seringue pour ventiler le capteur et faire baisser le taux de CO2

Petite expérience
Petite expérience



Conclusion

Le Yocto-CO2 est limité en termes de concentration mesurable, mais au besoin, on peut utiliser un Yocto-Serial pour interroger un capteur SenseAir K33 ICB-F, voire un capteur K33 ICB 30% et ainsi mesurer des concentrations de CO2 jusqu'à respectivement 10 et 30%. Cette manière de faire est grandement facilitée par le fait que le Yocto-Serial est capable de gérer tout seul des communications MODBUS sur un lien série.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.