Anschließen eines CO2-Sensors Modell MH-Z19B über den analogen Vo-Ausgang

Ich begrüße alle, die sich für die Luftqualität in Innenräumen interessieren und diese kontrollieren und verwalten möchten.

Ich selbst habe mich vor kurzem für diese Ausgabe interessiert und beschlossen, den CO2-Sensor MH-Z19 B mit meinen eigenen Händen zu fühlen. Ich wurde von vielen Artikeln inspiriert, zum Beispiel von der dunklen Seite des MH-Z19 .



Allerdings habe ich nirgends (auch in der Anleitung) nicht gefunden, wie man mit dem Vo-Pin arbeitet ...

Ich habe darauf hingewiesen : In der Artikelübersicht des Infrarot-CO2-Sensors MH-Z19 wird dieser Punkt erwähnt:

  • Vo - Ausgangsspannung 3,3 V, nicht mehr als 10 mA

Einige Online-Shops, wie der „ Kohlendioxidsensor CO2 MH-Z19B “, bieten ähnliche Informationen:

  • Vo - Ausgangsspannung 3,3 V, nicht mehr als 10 mA

(als Durchschlag)

Aber die Anweisungen ( hier ) zeigen ein bisschen mehr:

  • Vo Analogausgang (0,4 bis 2 V) oder (0 bis 2,5 V)

Und wenn Sie mehr graben, dann zeigen die Anweisungen ( hier ) noch mehr im Detail:

  • Vo (Pin2) - Analogausgang (0,4 ~ 2 V) (0 ~ 3 V-Bereich kann angepasst werden)

Ich googelte schnell und ... fand nichts über diesen Ausweg! Seltsam, dachte Stirlitz, verband diesen Ausgang schnell mit dem analogen Eingang des ESP8266 (für Arduino ist dies ebenfalls relevant) und begann zu recherchieren.

Schlussfolgerungen:

  1. Die Spannung am Analogausgang variiert zwischen 0,4xx und 2,002 V.
  2. Der Analogausgang wiederholt die Spannung des digitalen ppm-Signals.
  3. Wenn die UART-Befehle den ppm-Bereich 2k, 5k, 10k ändern, ändert sich der Vo-Umwandlungsbereich entsprechend.
  4. Der Maximalwert von Vo = 2.001 V ändert sich je nach Bereich nicht, da für den Konvertierungsbereich der Maximalwert in ppm (2/5 / 10k) festgelegt werden muss.
  5. Der Mindestwert von Vo variiert je nach Bereich (?). Der Bereich selbst beginnt bei 400 ppm.
  6. Wenn Sie den tatsächlichen Wert des ADC-Reglers auswählen, erhalten Sie eine anständige Übereinstimmung zwischen Spannung und ppm-Pegel. Im Bereich bis zu 2k überschreitet der Fehler zwischen dem digitalen UART-Signal und der analogen Vo-Umwandlung nicht mehrere ppm-Einheiten.
  7. Sie können den Sensor entweder zuerst mit dem USB-TTL-Konverter oder mit Arduino + konfigurieren (automatische Kalibrierung deaktivieren und 400 ... 2000ppm in den "Home" -Bereich schalten) und dann wie ein analoges Signal damit arbeiten.

Wie ich konvertierte:

[...] 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 [...] 

"Magic" -Nummern wurden experimentell aufgenommen. Es passierte sowohl schneller als auch genauer. Bei dem Versuch, mathematisch sehr genau zu berechnen, stellte sich tatsächlich ein großer Fehler heraus.

Warum es bei mir funktioniert (0,4 ... 2,0V und nicht 0 ... 2,5V), weiß ich nicht. Der Sensor wurde vor ein paar Tagen gekauft, Produktion 26. September 2019. Der Bereich bis zu 5k ppm ist auf dem Gehäuse eingeprägt.

Warum brauche ich das? (Die Antwort auf "also hätte ich falsch gemacht ...")

Nun ... es gibt Leute, die gerne einen Lötkolben in der Hand halten, aber mit Controllern nicht befreundet sind. Für sie ist der Analogausgang mindestens ein Ein- / Ausschalten des Lüfters und eine maximal gleichmäßige Steuerung der Geschwindigkeit von Auslass / Einlass / Rekuperator.

Speziell für mich: Im Nebenraum arbeitet seit 2 Jahren eine Lüftungsanlage, die ich auf einem frei programmierbaren Industrieregler erstellt habe. Weil Der Controller ist industriell und das Programmiersystem ist spezifisch. Ich bin nicht sicher, ob Sie Ihr eigenes UART-Austauschprotokoll darauf schreiben können. Ja, es gibt eine serielle RS484-Schnittstelle, die auf ModBus einwandfrei funktioniert, aber diese Schnittstelle wird vom Versandsystem belegt.

Es gibt jedoch einen freien Analogeingang, der auf 0-10 V eingestellt werden kann. Mit nur etwa 30 US-Dollar können Sie das Lüftungssystem für intelligente Energieeinsparungen aufrüsten (nur bei Bedarf und genau so viel lüften, wie Sie benötigen).

PS: Code SoftSerial.readBytes (mhzBuffer, 9); auf meinem ESP8266 weigerte sich zu arbeiten. Er hat ungefähr fünf Stunden seines Lebens getötet. Sie haben es hier besprochen, aber ich habe es später gelesen. Ich habe meine Funktion im Stil von if (SoftSerial.available() { x=SoftSerial.read(); } .

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


All Articles