Aide pour calibrer un capteur à CO2

Bonsoir,
Je crée ce topic car j'ai besoin d'aide pour calibrer mes capteurs à CO2.
En effet, je suis en possession de 2 capteurs de chez DFROBOT : le SEN0159 et le SEN0219 .
Pour les utiliser, j'ai utilisé une librairie que j'ai trouvé sur GitHub (GitHub - solvek/CO2Sensor: Arduino library for modules based on CO2 sensors TGS-4161 or MG-811) ce qui m'a donné ce code :

(Relevé de taux de CO2 puis enregistrement sur une carte SD)

#include <SD.h>
#include "CO2Sensor.h"

// Variables utilisées pour la carte SD
const int   sdCardPinChipSelect     = 10;               // Le lecteur de carte SD sera branché sur la pin 10 pour le CS (chip select), 11/12/13 pour le MOSI/MISO/SCK du bus SPI
const char* nomDuFichier            = "donnees.csv";    // Format 8.3 (c'est à dire 8 lettres maximum pour le nom, et optionnellement 3 pour l'extension)
File monFichier;

// Variables utilisées pour le MG-811
CO2Sensor co2Sensor(A0, 0.99, 100);

// Autres variables
const long delaiIntervalleDeMesures = 2000;
unsigned long t;

// Intervalle de mesure/enregistrement (exprimé en millis secondes)

// ========================
// Initialisation programme
// ========================
void setup() {
  
  // Initialisation de la liaison série (pour retourner les infos au moniteur série de l'ordi)
  Serial.begin(9600);
  Serial.println("=== Initialized ===");
  
  // ----------------------------------------------------------------------------
  // Vérification : est-ce que la carte SD est bien accessible depuis l'arduino ?
  // ----------------------------------------------------------------------------
  Serial.print(F("Initialisation de la carte SD..."));
  if (!SD.begin(sdCardPinChipSelect)) {
    Serial.println();
    Serial.println();
    Serial.println(F("Échec de l'initialisation du lecteur de SD card. Vérifiez :"));
    Serial.println(F("1. que la carte SD soit bien insérée"));
    Serial.println(F("2. que votre câblage soit bon"));
    Serial.println(F("3. que la variable 'sdCardPinChipSelect' corresponde bien au branchement de la pin CS de votre carte SD sur l'Arduino"));
    Serial.println(F("Et appuyez sur le bouton RESET de votre Arduino une fois le pb résolu, pour redémarrer ce programme !"));
    while (true);
  }
  Serial.println(F(" réussie !"));
  Serial.println();

  // ----------------------------------------------------------------------------
  // Initialisation du MG-811
  // ----------------------------------------------------------------------------
  t = millis();

  // ----------------------------------------------------------------------------
  // Initialisation du MG-811
  // ----------------------------------------------------------------------------
  co2Sensor.calibrate();
}
// =================
// Boucle principale
// =================
void loop() {
  int CO2 = co2Sensor.read();
 
  // Affichage des valeurs sur le moniteur série de l'IDE Arduino
      Serial.print("CO2 concentration: ");
      Serial.print(CO2);
      Serial.println("ppm");
      Serial.print("Temps depuis le début de l'expérience: ");
      Serial.print(t);
      Serial.println("s");

  // Enregistrement de ces données sur la carte SD
  monFichier = SD.open(nomDuFichier, FILE_WRITE);
  if (monFichier) {    
    monFichier.print(t);
    monFichier.print(";");
    monFichier.println(CO2);
    monFichier.close();                     // L'enregistrement des données se fait au moment de la clôture du fichier
    Serial.println(F("Enregistrement réussi en carte SD"));
  }
  else {
    Serial.println(F("Erreur lors de la tentative d'ouverture du fichier en écriture, sur la carte SD"));
  }

  // Change la boucle (temps)
  t = t + 2;
  
  // Temporisation de X secondes
  Serial.println();
  delay(delaiIntervalleDeMesures);
}

J'utilise le même code pour les 2 capteurs et j'ai des relevés.

Maintenant le problème c'est que je dois les calibrer et je ne sais pas comment faire parce que la fiche du GitHub me dit de modifier le paramètre a tel que a = v + b où b est une constante (ici il choisit 600) et v une valeur en mV (car si j'ai bien compris une valeur de V compris entre 0V et 5V correspond à un taux de CO2 en ppm et faut la référence en mV pour 400ppm) mais je ne sais pas comment lire obtenir v ou sinon il y a des indications de calibrations pour chaque capteur et je ne sais pas comment faire.

Pourriez vous me guider dans la calibration de mes capteurs ? Merci.

Bonjour,
Regarde, tu trouveras peut être ton bonheur sur les exemples :

https://wiki.dfrobot.com/Gravity__Analog_Infrared_CO2_Sensor_For_Arduino_SKU__SEN0219

Justement je dois calibrer avec les indications du capteur où ceux de la librairie ?

Caliber des capteurs, quand on veut faire simple, on considère que la 'réponse' est linéaire..

C'est la bonne vieille courbe que l'on à tous fait au collège sur un graph.. sur papier millimétré pour les plus vieux d'entrée nous...! :stuck_out_tongue_winking_eye: (De nos jours, rien de tel qu'un bon tableur..).

Te voilà donc avec ce bon vieux y = ax + b

Y est ta valeur Co2 finale corrigée,
A est ta valeur d'acquisition analogique ou digitale de volts ou mA mesurés en sortie de ton capteur de Co2,
X est le coefficient multiplicateur propre à ton capteur, il détermine l'aspec plus ou moins vertical/horizontal de ta courbe,
B est ta correction (threshold), c'est le décalage vertical de la position de ta courbe.

À partir de là, c'est de tres simple à plus compliqué..

Si tu considères que la réponse de ton capteur est linéaire et juste de la valeur mini à la valeur maxi.. alors tu n'as que b à corriger, tu fais une calibration à un point.

Si tu veux plus de précision et que tu considères ton capteur suffisamment linéaire, tu fais une calibration à deux points.

Tu peux aussi considérer (à juste titre) que rien n'est parfait, et que toute linéarité est relative... Et là c'est plus compliqué comme calibration et comme correction dans ton sketch... Et c'est surtout overkill sauf si c'est dans un domaine scientifique, car il faudra que chaque mesure soir corrigée en temps réel de façon dynamique en fonction de la plage de la mesure prise et d'un tableau de corrections couvrant les corrections pour toutes les plages... Bref...:woozy_face:

Dans tous les cas, c'est expliqué ICI

Le problème de la calibration c'est que dans le code d'exploitation du module SEN0159, ils disent de relever la tension en sortie du capteur lorsqu'il est placé dans un milieu à 400ppm et à 1000ppm de CO².

//These two values differ from sensor to sensor. user should derermine this value.
#define         ZERO_POINT_VOLTAGE           (0.220) //define the output of the sensor in volts when the concentration of CO2 is 400PPM
#define         REACTION_VOLTGAE             (0.030) //define the voltage drop of the sensor when move the sensor from air into 1000ppm CO2

Donc, sans un capteur de référence, on est pas certain de faire la calibration dans de bonnes conditions.

Pour le second capteur, il y a un mode "automatique" pour un fonctionnement en intérieur avec une précision réduite.

On pourrait imaginer lancer le capteur Gravity pendant 24h pour qu'il fasse sa calibration automatique et calibrer l'autre senseur à partir des résultats du premier. Mais, comme le SEN0159 est déjà moins précis que le Gravity si en plus on le calibre avec une erreur potentielle à la base quelle est la pertinence du résultat obtenu?

Peut-être faut-il en savoir plus sur l'usage final?

Si c'est juste pour surveiller le taux de Co2 dans une classe ou un bureau,.. alors il doit être suffisant de calibrer en un point sur la valeur médiane, situation normale avec la pièce toutes fenêtres ouvertes depuis 10 minutes, taux de Co2 normal.

Après tout, on ne chercherait pas ici à connaître un valeur précise, mais juste à alerter oui visualiser sur un simple bar-graph

Voyons, nous sommes à la fin janvier, l'usage final est, espérons le personnel, mais il ne faut pas exclure un sujet pour le bac et probablement STI2D. L'EN aime bien ce genre de capteur.

Bonjour
Il existe des bouteilles de gaz/mélange "étalon", mais ce n'est pas "cadeau"
exemple

Perso , j'ai récupéré récemment un kit de développement "calibré usine" et facile à réétalonner.

:rofl:

... Après, l'un n'empêche pas l'autre...:stuck_out_tongue_winking_eye:

Énoncé:
"Sur la base d'un capteur de Co2.. Développez un système ayant pour but de surveiller le taux de Co2 de votre classe, et d'alerter si ce niveau vient à doubler à cause d'une mauvaise ventilation.. la référence étant le taux de Co2 après 10 minutes de ventilation de la pièce.." :star_struck:

Bonjour,
Il y a eu un article sur le sujet dans Elektor 11-12/2021.
Il s'agit d'un projet de l'Université des Sciences Appliquées d'Aix la Chapelle
https://maskor.fh-aachen.de/activities/CO2Meter/

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.