Sonde à CO2 MH-Z16

Bonjour à tous,

Je me lance dans un projet arduino visant à contrôler la concentration en CO2 dans une atmosphère de laboratoire. Après plusieurs recherches j'ai acheté une sonde MH-Z16 directement chez le fabriquant (Winsen Sensor). J'ai décidé d'utiliser un arduino Mega 2560. D'après la documentation technique le capteur est compatible avec plusieurs méthodes de communication : "UART, analog voltage signal, PWM wave". J'ai fait quelques recherches qui m'ont permis de conclure que le plus simple serait d'utiliser la première méthode, UART, car c'est le standard de communication utilisé par les ports séries présent sur l'arduino mega. J'ai donc connecté :

  • les fils N°3 (GND) et N°4 (Vin) du capteur sur les bornes GND et +5V de la carte Mega
  • les fils N°5 et N°6 sur les bornes N°18 (Série Serial 1 TX)et N°19 (Série Serial 1 RX)

J'ai ensuite tenté de lire les données reçues via le port série dans le Moniteur série du Logiciel Arduino. Je n'ai pas réussi à obtenir de résultat. Après quelques recherches sur le net je me suis rendu compte que les ports série de la carte Méga 2560 fonctionnent en 5V. Dans la documentation du capteur il est indiqué que les port UART fonctionnent sur du entre 0 et 3.3V . J'espère ne pas l'avoir abîmé avec ma manipulation :confused: .

Pensez vous que je puisse utiliser ce type de convertisseur afin de faire communiquer correctement le capteur avec la carte Mega ?

Merci.

Bonjour
cet adaptateur peut faire l'affaire

J'espère ne pas l'avoir abîmé avec ma manipulation :confused: .

Tout dépend de la robustesse de l'entrée Rx de la sonde, pas de souci pour sa sortie Tx

J'ai ensuite tenté de lire les données reçues via le port série dans le Moniteur série du Logiciel Arduino. Je n'ai pas réussi à obtenir de résultat

Nous devons supposer que le code était OK pour bien communiquer avec un appareil câblé sur Serial1
bon débit, bonne trame de commandes envoyée à la sonde pour l'interroger....

Bonjour al1fch,
Merci pour votre réponse. Je passe commande et je fais un retour sur ce topic dès que j'aurais fait le montage :wink: .

Bonjour,

Tu pourrais essayer un pont diviseur sur le TX de la mega pour ramener la sortie à 3.3V.

Bonjour a vous,

Merci pour ton post kamill je n'ai pas pris le temps d'y répondre. Je me suis renseigné sur le pont diviseur mais j'ai commandé le module 3v / 5v dont je parlais plus haut.
J'ai reçu le module cette semaine, j'ai soudé les pins fait les branchements comme indiqués sur le site du vendeur AXX coté 5V et BXX 3.3V. J'ai vérifié les tensions avec un multimètre, elles sont correctes.

J'ai ensuite testé le code suivant disponible à cette adresse.

#include <NDIR_I2C.h>

#include <SoftwareSerial.h>
#include <NDIR_SoftwareSerial.h>

//Select 2 digital pins as SoftwareSerial's Rx and Tx. For example, Rx=2 Tx=3
NDIR_SoftwareSerial mySensor(19,18);

void setup()
{
    Serial.begin(9600);

    if (mySensor.begin()) {
        Serial.println("Wait 10 seconds for sensor initialization...");
        delay(10000);
    } else {
        Serial.println("ERROR: Failed to connect to the sensor.");
        while(1);
    }
}

void loop() {
    if (mySensor.measure()) {
        Serial.print("CO2 Concentration is ");
        Serial.print(mySensor.ppm);
        Serial.println("ppm");
    } else {
        Serial.println("Sensor communication error.");
    }

    delay(1000);
}

Le moniteur série me renvoie :
Sensor communication error.

J'ai testé le code suivant pour voir si ma carte Méga recevait des données via le port série :

int incomingByte = 0;   // for incoming serial data

void setup() {
        Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
}

void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
        }
}

Mais je n'ai aucun retour dans le Moniteur série.

Avez vous des conseils ou des pistes ? j'ai parcouru pas mal de post concernant les MH-Z16 sans trouver de solution.

Bonjour,
on a pas toutes les liaisons que tu as faites mais ton capteur doit être alimenté en 5v pas en 3.3v donc pad4 doit être relié au 5v de l'arduino pas à BVCC

Bonsoir rjnc38,

Merci pour ton retour , en effet je me suis planté en connectant l'alimentation de ma sonde sur le BVCC, j'ai refait mes tests en le connectant sur la sortie 5v de ma carte Mega , mais je n'ai toujours aucun retour dans mon moniteur série.

Bonjour,

Je ne parviens toujours pas à récupérer d'information en provenance de mon capteur. Je me demande si je ne l'ai pas endommagé après avoir connecté les fils RX et TX sur la carte méga sans réducteur de tension.
Avant de me lancer dans l'achat d'une autre sonde je voudrais pouvoir confirmer cette hypothèse. Quel mode opératoire puis-je suivre ? j'ai commander un autre module 3.3v vers 5v pour être sur que le problème ne viens pas de là (ceci étant ça m'étonnerais les tensions aux différentes bornes sont correctes). J'ai effectué mes tests avec les codes précédemment cités il me parais plus probable que le problème trouve son origine à ce niveau mais je n'arrive pas à avancer. :frowning: Merci d'avance.