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¶
- Capteur choisi sur Aliexpress
- Documentation pour le S8-4B 004-0-0024 : https://www.driesen-kern.de/downloads/senseairs84b00400024co2sensors80040dk.pdf
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¶