pwm sur capteur mh-z16 co2

Bonjour

Après une longue absence maladie, je reviens doucement sur mes projets.

Après ce topic, données technique capteur co2 WH-Z16 - Français - Arduino Forum, j'avais réussi à extraire des données mais ce n'est pas fiable.

je voulais vérifier avec le coté pwm du capteur. j'ai lu la documentation sur le pwm et celle du capteur et il y a une formule pour avoir la concentration du co2
cppm=2000(Th-2ms)/(Th+TL-4ms)

Th est le temps d'un cycle haut durant un cycle de sortie
TL est le temps d'un cycle bas durant un cycle de sortie.

La documentation est ici http://www.seeedstudio.com/wiki/images/c/ca/MH-Z16_CO2_datasheet_EN.pdf

Je ne comprends pas bien l'implémentation. D'après ce que j'ai cru comprendre, on devrait faire varier
le courant allant sur du capteur(vout ou pin pad2) à un pin pwm de l'arduino durant un cycle de fréquence augmentant de 2ms jusqu'à 1002 ms pour avoir un échantillonage de sortie entre 0 et 2000 ppm.

Je voudrais bien savoir si mon raisonnement est bon. et dans ce cas, il faut bien que j'utilise une fonction du genre micros() et analogwrite()...

le script serait alors en gros :

envoie d'un courant 5V analogwrite (255) pendant 2 ms puis pendant 4 ms jusqu'à 1004 ms pour un cycle de 2000ppm
récupération du temps micros
calcul du taux de c02

merci de votre aide

Le capteur délivre un signal PWM.
La durée du temps à 1 correspond à la concentration en CO2. il y a un chronogramme page 6 de la doc qui explique ça très bien.
Pour avoir un résultat précis, il faut mesurer la période à un et la période à zéro et appliquer la formule. Avec 2 pulseIn une fois avec l'argument LOW et une fois avec l'argument HIGH tu devrais pouvoir calculer ta valeur.

j'avais réussi à extraire des données mais ce n'est pas fiable.

Les données extraites, c'étaient la sortie analogique ou la liaison série?

:o punaise les anti douleurs cela n'aide pas. je n'avais rien capté au chronogramme. je n'avais pas "vu" les ms. effectivement la période est d'environ 1000ms et TL for LOW et TH for hight...

merci pour ta relecture et ton aide.

les données sont en pour l'instant en série. j'ai -32 °c en température or il fait 24...et -32000 en ppm...je vais brancher un autre capteur voir si cela fait la m^me chose.

nonos85

bonjour

j'ai pondu un truc autant dire que j'ai des hiéroglyphes en sortie

j'ai vraiment du rien capter.
c'est bien le capteur qui envoie capteur un signal pwm et on veut lire le signal haut et bas pour calculer la concentration? j'essaie de relire de la documentation. voilà ce que j'ai fait vous pouvez tirer à vue et me dire ce que je ne vois pas

int zh16Pin = 3;     // set output pin for the sensor z16

unsigned long pwm_value_TH;
unsigned long pwm_value_TL;

float co2ppm;
void setup() {
     // declare the ledPin as an OUTPUT:
     pinMode(zh16Pin, OUTPUT);
     Serial.begin(115200);
}

void loop() {
     
    
     
     pwm_value_TH=pulseIn(zh16Pin,HIGH);
     
     pwm_value_TL=pulseIn(zh16Pin,LOW);
          
     Serial.println("H" + pwm_value_TH);
     Serial.println("L" + pwm_value_TL);
     
    //co2ppm = 2000(pwm_value_TH-2000)/(pwm_value_TH+pwm_value_TL-4000);
     //Serial.println (co2ppm);
     
     
}

merci

bonjour,
si ca peut aider
http://www.seeedstudio.com/wiki/Grove_-_CO2_Sensor

bonsoir infobarquee.

j'ai vu pour la sortie série. j'avais trouvé un code identique à peu prêt et j'ai corrigé avec mais j'ai toujours ces résultats incohérents avec 2 capteurs et 2 cartes.

nonos85