Connexion d'un capteur de CO2 modèle MH-Z19B à l'aide de la sortie analogique Vo

Je souhaite la bienvenue à tous ceux qui s'intéressent à la qualité de l'air intérieur et souhaitent la contrôler et la gérer.

Je me suis moi-même intéressé récemment à ce problème et j'ai décidé de ressentir le capteur de CO2 MH-Z19 B de mes propres mains. J'ai été inspiré par de nombreux articles, par exemple le côté obscur du MH-Z19 .



Cependant, nulle part (même dans les instructions) je n'ai pas trouvé comment travailler avec la broche Vo ...

J'ai attiré l'attention sur ceci: dans l'article Présentation du capteur de CO2 infrarouge MH-Z19 , ce point est mentionné:

  • Vo - tension de sortie 3,3 V, pas plus de 10 mA

Certains magasins en ligne, tels que le « capteur de dioxyde de carbone CO2 MH-Z19B », fournissent des informations similaires:

  • Vo - tension de sortie 3,3 V, pas plus de 10 mA

(en tant que copie carbone)

Mais les instructions ( ici ) en indiquent un peu plus:

  • Vo Sortie analogique (0,4 ~ 2 V) ou (0 ~ 2,5 V)

Et si vous creusez plus, les instructions ( ici ) indiquent encore plus en détail:

  • Vo (Pin2) - Sortie analogique (0,4 ~ 2 V) (la plage 0 ~ 3 V peut être personnalisée)

J'ai rapidement googlé et ... je n'ai rien trouvé sur cette issue! Étrange, pensa Stirlitz, a rapidement connecté cette sortie à l'entrée analogique de l'ESP8266 (pour Arduino, cela est également pertinent) et a commencé à rechercher.

Conclusions:

  1. La tension à la sortie analogique varie de 0.4xx à 2.002v.
  2. La sortie analogique répète la tension du signal numérique ppm.
  3. Lorsque les commandes UART modifient la plage ppm 2k, 5k, 10k, la plage de conversion Vo change en conséquence.
  4. La valeur maximale de Vo = 2.001v ne change pas en fonction de la plage, car la plage de conversion, vous devez définir la valeur maximale en ppm (2/5 / 10k).
  5. La valeur minimale de Vo varie en fonction de la plage (?), Et la plage elle-même commence à 400 ppm.
  6. Si vous sélectionnez la valeur réelle du contrôleur ADC, vous pouvez obtenir une correspondance décente entre la tension et le niveau ppm. Dans la plage allant jusqu'à 2k, l'erreur entre le signal UART numérique et la conversion Vo analogique ne dépasse pas plusieurs unités ppm.
  7. Vous pouvez d'abord configurer le capteur en utilisant le convertisseur USB-TTL ou en utilisant Arduino + (désactiver l'étalonnage automatique et basculer 400 ... 2000ppm sur la plage "home"), puis travailler avec lui comme un signal analogique.

Comment je me suis converti:

[...] const word cADC00v = 3; // ADC = 3 .  0.0v const word cADC04v2k = 235; // ADC = 235 .  400ppm @2k const word cADC04v5k = 174; // ADC = 174 .  400ppm @5k const word cADC04v1k = 153; // ADC = 153 .  400ppm @10k const word cADC20v = 646; // ADC = 646 6.  2.0v word ADC = analogRead(A0); //  10  ADC 0...1023 long Vin = map(ADC, cADC00v, cADC20v, 0, 2001); //  0..3,3v  ,   2,001v long ppm_2k_04_2 = map(ADC, cADC04v2k,cADC20v, 400, 2000); //  Vo  ppm   2k long ppm_5k_04_2 = map(ADC, cADC04v5k,cADC20v, 400, 5000); //  Vo  ppm   5k long ppm_10k_04_2 = map(ADC, cADC04v1k,cADC20v, 400,10000); //  Vo  ppm   10k [...] 

Les nombres "magiques" ont été récupérés expérimentalement. C'est arrivé à la fois plus rapidement et plus précisément. En essayant de calculer très précisément, mathématiquement, une grosse erreur s'est avérée.

Pourquoi ça marche pour moi (0.4 ... 2.0v et pas 0 ... 2.5v) je ne sais pas. Le capteur a été acheté il y a quelques jours, production le 26 septembre 2019. La plage jusqu'à 5 000 ppm est gravée sur le boîtier.

Pourquoi en ai-je besoin? (la réponse à "donc j'aurais mal fait ...")

Eh bien ... il y a des gens qui aiment tenir un fer à souder dans leurs mains, mais ils ne sont pas amis avec les contrôleurs. Pour eux, la sortie analogique allume / éteint au moins le ventilateur, et au maximum - contrôle en douceur de la vitesse d'échappement / d'admission / de récupération.

Plus précisément, pour moi: dans la pièce voisine, un système de ventilation fonctionne depuis 2 ans, que j'ai réalisé sur un contrôleur industriel librement programmable. Parce que le contrôleur est industriel, alors le système de programmation est spécifique, je ne suis pas sûr que vous puissiez y écrire votre propre protocole d'échange UART. Oui, il existe un port série RS484 qui fonctionne bien sur ModBus, mais ce port est occupé par le système de répartition.

Mais il y a une entrée analogique gratuite qui peut être réglée sur 0-10V. Et donc, avec seulement environ 30 $, vous pouvez mettre à niveau le système de ventilation pour une économie d'énergie intelligente (ne ventiler que lorsque cela est nécessaire et exactement autant que nécessaire).

PS: code SoftSerial.readBytes (mhzBuffer, 9); sur mon ESP8266 a refusé de travailler. Il a tué environ cinq heures de sa vie. Ils en ont discuté ici , mais je l'ai lu plus tard. J'ai écrit ma fonction dans le style de if (SoftSerial.available() { x=SoftSerial.read(); } .

Source: https://habr.com/ru/post/fr483826/


All Articles