Projet

Général

Profil

Senseair S8

Capteur de CO2 de type NDIR NonDispersive InfraRed.
Catalogue avec les différents modèles de S8, page 46 :
https://www.sensorstecnics.net/media/aplicacions/pdf/Product_Catalogue_Senseair_Sensorstecnics.pdf

Modèle Senseair S8-4B 004-0-0024

D'après ce document, ce modèle a une précision de ± 1000 ppm ce qui est insuffisant pour notre projet.

Modèle Senseair S8 LP (Low Power)

  • Documentation du fabricant : https://senseair.com/products/size-counts/s8-lp/
  • Précision : ± 40 ppm ± 3% of reading
  • Capteur choisi sur Aliexpress
  • Communication série UART
  • Alimentation électrique : 4.5 - 5.25V /!\ Pas de protection contre les surtensions /!\
  • Consommation : 300 mA pic, <18 mA moyenne

Précautions de manipulation et de mise en œuvre

  • Le capteur est sensible à l'*électricité statique !* il faut donc le manipuler en mettant ses doigts sur le PCB.
  • Il ne doit rien touché et en particulier le filtre à particules (surface noire).
  • Toutes les informations à ce sujet ici

Exemple de projet avec un ESP32

A partir de la page 11 sur ce document :
http://lafabrique.centralesupelec.fr/projetco2/document/la_fabrique_projetCO2_v7.pdf
(Attention exemple de câblage avec un Senseair S8,le câblage du Senseair S8 LP est légèrement différèrent,utilisé celui de l'image plus bas)

Avec le code : https://github.com/SFeli/ESP32_S8

Essais d'un code pour mesurer le taux de CO2

Les 5 et 6 mai 2021 : Le code semble prometteur mais j'ai grillé le capteur en faisant un mauvais branchement ...

#include <Arduino.h>https://www.14core.com/senseair-lp8s8-co2-carbon-dioxide-infrared-sensor/
//#include <Wire.h>
#include <HardwareSerial.h>     //biblio pour com série                                 

#define BAUDRATE 9600                                      // Device to MH-Z19 Serial baudrate (should not be changed)

HardwareSerial Serial_S8(2);     //création objet pour com série sur broches U0_TXD et U0_RXD

unsigned long getDataTimer = 0;     //variable pour fréquence des mesures

byte CO2req[] = {0xFE, 0x04, 0x00, 0x03, 0x00, 0x01, 0xD5, 0xC5};
byte CO2out[] = {0, 0, 0, 0, 0, 0, 0};

void RequestCO2()
{
  while (!Serial_S8.available())
  {
    Serial_S8.write(CO2req, 7);
    //Serial.print("request");
    delay(50);
  }
  int timeout = 0;

  while (Serial_S8.available() < 7)
  {
    timeout++;
    if (timeout > 10)
    {
      while (Serial_S8.available())
        Serial_S8.read();
      break;
    }
    delay(50);
  }

  for (int i = 0; i < 7; i++)
  {
    CO2out[i] = Serial_S8.read();
  }
}

unsigned long CO2count()
{
  int high = CO2out[3];
  int low = CO2out[4];
  unsigned int val = high * 256 + low;
  return val;
}

void setup()
{
    Serial.begin(BAUDRATE);                                     // Device to serial monitor feedback
    Serial_S8.begin(BAUDRATE);
}

void loop() {
  if (millis() - getDataTimer >= 2000)
  {
    RequestCO2();
    unsigned int CO2 = CO2count();
    for (int i = 0; i < 7; i++)
    {
      Serial.print(CO2out[i],HEX);
    }

    Serial.println("\nCO2 :" + String(CO2));
    getDataTimer = millis();
  }
}

Câblage du Senseair S8 LP


Source