Übersicht über den Infrarot-CO2-Sensor MH-Z19

In jüngster Zeit waren Geräte beliebt, die den CO 2 -Gehalt anzeigen, sowie Artikel, in denen erläutert wird, wie ein CO 2 -Monitor in einen an einen Computer angeschlossenen Sensor umgewandelt werden kann. Ich möchte andererseits die Lösung des Problems zeigen.

Im Gegensatz zu älteren CO 2 -Sensoren benötigt der MH-Z19 keine spezifische Spannung oder hohe Leistung und kann Daten über UART und PWM übertragen.



  • Hd — , Hd 7 LOW. .
  • SR —
  • Tx — — 3.3
  • Rx — 3.3 ( 5, )
  • Vo — 3.3, 10

  • PWM, : 1004, 2 HIGH, — LOW, «» CO2 0 — 5000ppm ( 2000ppm ).
    Cppm = 5000 * (Thigh — 2ms)/(Thigh + Tlow — 4ms)
    , PWM — , 3.3.
  • AOT —
  • Gnd —
  • Vin — 3.6 — 5.5 ( 3.3, )


Es ist nicht so, dass ich PWM nicht vertraut habe, aber es ist besser, die Daten digital und mit einer Prüfsumme abzurufen. Mit UART können Sie CO 2 -Niveaus abfragen und zwei Arten der Kalibrierung durchführen. Wir überlassen die Kalibrierung Garrus und prüfen die Datenanforderung. Dazu müssen Sie bei einer Geschwindigkeit von 9600 (8 Bit, Stopp - 1, Parität - keine) die folgenden neun Bytes senden:
• 0xFF - der Beginn eines Befehls
• 0x01 - der erste Sensor (es ist nur einer)
• 0x86 - Befehl
• 0x00, 0x00, 0x00, 0x00, 0x00 - Daten
• 0x79 - Prüfsumme.

So etwas wird wiederkommen:
• 0xFF - der Beginn einer Antwort
• 0x86 - Befehl
• 0x01, 0xC1 - hoher und niedriger Wert (256 * 0x01 + 0xC1 = 449)
• 0x3C, 0x04, 0x3C, 0xC1 - Die Dokumentation besagt, dass so etwas wie 0x47, 0x00, 0x00, 0x00 kommen sollte, aber in Wirklichkeit ist nicht klar, was.
• 0x7B - die Prüfsumme.

Die Prüfsumme wird wie folgt berechnet: 7 Bytes der Antwort werden genommen (alle außer dem ersten und dem letzten), addiert, invertiert, um 1: 0x86 + 0x01 ... + 0xC1 = 0x85, 0x85 xoder 0xFF = 0x7A, 0x7A + 1 = 0x7B erhöht.

Der Dokumentation zufolge dauert es etwa drei Minuten, bis der Sensor in den Betriebsmodus wechselt. Beim ersten Einschalten werden entweder 5000 ppm oder 400 ppm erzeugt. Nach einem besonders sorgfältigen Löten kann es zu mehreren Stunden kommen.

Der Sensor reagiert auf eine Änderung der CO 2 -Konzentrationmit einer Verzögerung von etwa einer Minute. Wenn Sie eine Konzentration von 5000 ppm überschreiten (zum Beispiel haben Sie eine Minute lang schwer geatmet), werden für eine Weile falsche Daten ausgegeben, wodurch der CO 2 -Gehalt unterschätzt wird - so habe ich sogar 80 ppm erhalten.

Dies spiegelt sich nicht in der Dokumentation wider, aber Sie sollten UART-Daten nicht öfter als alle 10 Sekunden anfordern, da sonst der Sensor etwas Seltsames ausgibt.

Es ist Zeit für Bilder. Verbinden Sie den Sensor mit dem Arduino Uno über Software Serial, TX / RX in A0 / A1, 5 V, Masse in Gnd:



Ausgeliehene Skizze, in der die Prüfsummenüberprüfung hinzugefügt wird
#include <SoftwareSerial.h>;

SoftwareSerial mySerial(A0, A1); // A0 -  TX , A1 -  RX

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

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

void loop() 
{
  mySerial.write(cmd, 9);
  memset(response, 0, 9);
  mySerial.readBytes(response, 9);
  int i;
  byte crc = 0;
  for (i = 1; i < 8; i++) crc+=response[i];
  crc = 255 - crc;
  crc++;

  if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
    Serial.println("CRC error: " + String(crc) + " / "+ String(response[8]));
  } else {
    unsigned int responseHigh = (unsigned int) response[2];
    unsigned int responseLow = (unsigned int) response[3];
    unsigned int ppm = (256*responseHigh) + responseLow;
    Serial.println(ppm);
  }
  delay(10000);
}


Jede Messung erfolgt in Intervallen von 10 Sekunden. Die Werte hörten auf zu springen, als ich mich vom Sensor entfernte.


Jetzt machen wir den Sensor mobil. Dazu benötigen Sie ein Gerät mit OTG und eine Anwendung wie DroidTerm .
Es gibt eine Feinheit: Um eine Verbindung herzustellen, müssen Sie das Arduino neu starten.


Nachdem wir sichergestellt haben, dass alles funktioniert, entfernen wir das Arduino und ersetzen es durch das FTDI FT232RL.


Der Sensor sollte nach dem Anschließen mit Strom versorgt werden, damit keine Probleme mit dem Anschluss auftreten.
Ich verwende RealTerm , um Binärdaten über den COM-Port zu senden :


Es könnte sich lohnen, die Energieverwaltung über DTR hinzuzufügen, damit der Sensor neu gestartet werden kann.

Nützliche Links:
MH-Z19 Sensorhandbuch Anschlussplan
und Code für PWM
Vergleich mit einem anderen Sensor.
Artikel über GT über MH-Z19 und ESP8266.

Ich habe nur einen Sensor und möchte nicht wirklich zerlegen, was ich einmal getan habe. Ich schlage vor, Sie wählen.

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


All Articles