Gen 2 808 Posté(e) novembre 1, 2015 Partager Posté(e) novembre 1, 2015 << 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 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 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 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 les détails des pins du convertisseur (voir image plus haut) Ce qui nous donne ceci une fois cablé : 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 >> 6 Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) novembre 1, 2015 Auteur Partager Posté(e) novembre 1, 2015 Merci Indy ++ Lien à poster Partager sur d’autres sites
Papagayo420 0 Posté(e) septembre 29, 2016 Partager Posté(e) septembre 29, 2016 Salute Gen, Y'a t-il besoin d'un convertisseur pour piloter une mh-z14 sur une framboise b+ sachant qu'après information le signal ttl de ce dernier est de 3.3V ? Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) septembre 29, 2016 Auteur Partager Posté(e) septembre 29, 2016 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
Papagayo420 0 Posté(e) septembre 29, 2016 Partager Posté(e) septembre 29, 2016 Merci pour ta vivacité Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) septembre 29, 2016 Auteur Partager Posté(e) septembre 29, 2016 2 rien pinpin ++ GEN Lien à poster Partager sur d’autres sites
Dodelinette 2 Posté(e) octobre 23, 2016 Partager Posté(e) octobre 23, 2016 (modifié) 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é octobre 23, 2016 par Dodelinette Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) octobre 23, 2016 Auteur Partager Posté(e) octobre 23, 2016 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
Dodelinette 2 Posté(e) octobre 24, 2016 Partager Posté(e) octobre 24, 2016 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
Gen 2 808 Posté(e) octobre 24, 2016 Auteur Partager Posté(e) octobre 24, 2016 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
Messages recommandés