GDW #3 Mise en place sonde CO2 MH-Z14


Messages recommandés

<< Episode 2 : Régulateur de vitesse universel Episode 4 : Réalisation d'un controleur global pour salle de culture >>

 

GDW #3 Mise en place sonde CO2 MH-Z14

Bonjour à tous.

 

Petit historique

 

Au début, je voulais utiliser pour la machine climatique de TMS une sonde de type MG-811 que voici

 

gallery_1_84_833.jpeg

Après tests, il s'avère que cette sonde nécessite une alimentation externe de 6V pour le préchauffage et la tension maximum délivrée par l'arduino est de 5V, ce qui implique un circuit supplémentaire composé d'un transfo, de condensateurs, d'un pont redresseur, et d'un stabilisateur de type LM7806 (la galère quoi !)

Sa précision est de l'ordre de 100PPM, et nécessite un temps de préchauffage de 15 minutes.

De plus cette sonde travaille par réaction chimique

 

Donc cette sonde peut faire l'affaire pour des petits montages cheap cost, mais pour mla part ne me convient pas pour faire un proto pointu.

 

J'ai donc opté pour la sonde suivante, la MH-Z14 qui fonctionne de 0 à 5000PPM (ce qui est bien plus que suffisant pour l'usage que l'on veut en faire)

que voici

 

gallery_1_84_3894.jpeg

 

Son prix est 2,5x supérieur à la précédente, mais sa précision des de l'ordre de 5PPM, son temps de préchauffage est de 3 minutes, et ce détecteur ne fonctionne pas par réaction chimique mais bien par barrière infra-rouge.

 

Mais c'était trop beau pour être vrai, il y a toujours un couac

Apres recherches, il appert que les signaux TTL (digitaux) de cette sonde sont de 3V et le niveau du signal de l'arduino est de 5V donc cela ne pouvait pas fonctionner, surtout que la communication entre les deux est de type bi-directionnelle.Pensez-vous que cela était renseigné quelque part..of course NOT !

 

Donc après plusieurs heures pour ne pas dire jours d'arrachage de cheveux (oui je sais j'en avais déjà plus beaucoup) j'ai trouvé pourquoi cela ne fonctionnait pas!

 

Il fallait convertir les signaux, pour ce faire j'ai utilisé une convertisseur TTL 3-5 Volts que voici

 

gallery_1_84_3757.jpeg

 

et Hop !! Magique, ca fonctionne ^^

 

 

Voici le code :

 

 

 

 

 

 

#include <SoftwareSerial.h>

mySerial (A0, A1); // RX, TX,  //respectivement réception & émission

byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
char reponse[9];

void setup ()
{
// Lancer la connexion série au PC
Serial.begin (9600);
// Lancer la connexion série pour le MH-Z14
mySerial.begin (9600);
}

void loop()
{
  // Ping CO2, lire, répondre et de traduire en PPM
  mySerial.write(cmd,9);
  mySerial.readBytes(reponse, 9);
  int poidsFort = (int) reponse[2];
  int poidsFaible = (int) reponse[3];
  int ppm = (256*poidsFort)+poidsFaible;

   // Affichage du résultat
  Serial.print("PPM ");
  Serial.println(ppm);
  // délais de 2 secondes entre chaque lecture
  delay(2000);
}

 

 

Passons au câblage de la bête

 

5V de l'arduino => pin HV du convertisseur et sur la pin 15 (V+) de la sonde

3,3V de l'arduino => pin LV du convertisseur

GND de l'arduino => sur les 2 pins GND du convertisseur + sur la pin n°2 (V-) de la sonde

Analog 0 de l'arduino => pin TX0 (coté HV) du convertisseur

Analog 1 de l'arduino => pin RXI (coté HV) du convertisseur

TXI du convertisseur (coté LV) => pin n°13 de la sonde (T)

RX0 du convertisseur (coté LV) => pin n°14 de la sonde ®

 

 

Détail des n° de pin sur la sonde MH-Z14

 

gallery_1_84_8714.jpg

 

les détails des pins du convertisseur (voir image plus haut)

 

 

Ce qui nous donne ceci une fois cablé :

 

gallery_1_84_52308.jpg

 

 

gallery_1_84_99965.jpg

 

gallery_1_84_160427.jpg

 

Et voici la vidéo de l'ensemble

 

https://www.youtube....h?v=_o5shuNeRsw

 

Cordialement.

GEN

 

<< Episode 2 : Régulateur de vitesse universel Episode 4 : Réalisation d'un controleur global pour salle de culture >>

  • Like 6
Lien à poster
Partager sur d’autres sites
  • 10 mois après ...

Salut Papagayo.

 

Effectivement, pas besoin d'un convertisseur, les tensions RX & TX sont de 3V3.

Par contre l'alimentation est bien en 5V.

 

++

GEN

Lien à poster
Partager sur d’autres sites
  • 4 semaines après ...

Bonjour tous le monde,

Au hasard des recherches pour mon projet de gestion climatique, déjà bien entamé, je suis tombé sur une de tes vidéos sur YouTube car je recherchais des infos sur les sondes MH-Z**.

J'ai trouvé ça génial et parfaitement synchro avec ma démarche :) D'autant plus que je suis un vieux de feu-CT (tout premier JDC là-bas, y'a plus de 10ans !!! où j'avais pu avoir plein de bons conseils de ta part pour débuter :) )

 

---

Du coup j'ai reçu ma sonde MH-Z14a et j'ai donc appliqué le circuit (avec le LC) + code que tu proposes.

Ca fonctionne, mais...

C'est assez peu précis, il y a des 'sautes' comme si la sonde se recalibrait, et ce de manière assez aléatoire.

La résolution et la plage de valeurs sont assez frustes aussi.

 

En faisant quelques recherches j'ai pu trouver un bout de code pour exploiter la sonde en PWM, a priori l'interface la plus adaptée pour cette sonde.

// source : https://forum.mysensors.org/topic/3821/mh-z14a-co2-sensor/2
// *   Pad 1, Pad 5: Vin (Voltage input 4.5V-6V)
// *   Pad 2, Pad 3, Pad 12: GND
// *   Pad 6: PWM output ==> pin 6

// set pin number:
const int sensorPin = 2;     // the number of the sensor pin
long ppm=0;
unsigned long duration;

void setup() {
  Serial.begin(9600);
  // initialize the sensor pin as an input
  pinMode(sensorPin, INPUT);
}

void loop(){
  duration = pulseIn(sensorPin,HIGH,2000000);
  ppm = 5000 * (((duration)/1000)-2)/1000;
    Serial.println("CO2 = " + String(ppm) + " ppm");
    delay(10000);
}

et ben... c'est beaucoup mieux :)

 

Les valeurs sont biens plus stables et nivelées, la plages de fonctionnement plus importante, la sonde dé-sature moins vite aussi j'ai l'impression.

 

Le code est plus simple et surtout... pas de convertisseur de tension obligatoire !

 

Juste 3 fils petits fils qui partent de l'arduino : +5 / GND / D. Pin

 

 

Elle est pas belle la vie ? :)

Modifié par Dodelinette
Lien à poster
Partager sur d’autres sites

yop/

 

a priori l'interface la plus adaptée pour cette sonde dis-tu ?

 

Expliques-moi en quoi l’interprétation d'une valeur analogique est plus adaptée qu'une valeur digitale ...

 

++

GEN

Lien à poster
Partager sur d’autres sites

Salut,

je ne saurais retrouver précisemment l'article de blog qui préconisait d'utiliser plutôt l'interface PWM plutôt qu'analogique pour avoir plus de précision. Si je retombe dessus je mettrais le lien.

De plus je n'ai pas les connaissances nécessaires pour le moment pour t'expliquer ça, j'ai commencé arduino il n'y a que 3 mois ;)

Sans être une explication quelqu'un a fait les mêmes observations que moi ici :

https://forum.arduino.cc/index.php?topic=247129.0

C'est à dire des valeurs pas stables du tout qui change de pallier brusquement, et je dépasse pas les 1024 aussi. :(

 

Enfin voilà, le principal c'est que ça marche maintenant ;)

Lien à poster
Partager sur d’autres sites

Soit !

 

Mon avis est que le problème que tu as rencontré est lié au temps d'échantillonnage, chez moi en digital ça marche à merveille.

 

++

GEN

Lien à poster
Partager sur d’autres sites
Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.