スキップしてメイン コンテンツに移動

MH-Z19B の自動校正をオフにする

前回 MH-Z19B を使った持ち歩きできる CO2 センサーを作りました。

このセンサーは24時間で最低の CO2 濃度を 400 ppm とみなす、という自動0点補正の機能が、出荷時に ON になっています。

しかし、持ち歩いて使うときだけ電源を入れる使い方をすると、 CO2 濃度がめったに外気と同じにならないということもありそうなので、自動校正を OFF にしたいと思いました。

MH-Z19B のマニュアルを読んで、自動校正 OFF のプログラムを書きました。

 #include<SoftwareSerial.h>
 #include<Wire.h>
 #include<Adafruit_GFX.h>
 #include<Adafruit_SSD1306.h>

 Adafruit_SSD1306 display(-1);
 SoftwareSerial MHZ19Serial(A0, A1);
 byte Request1[9] = {0xFF, 0x01, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86};
 byte Request2[9] = {0xFF, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78};
 
 void setup() {
   MHZ19Serial.begin(9600);
   Serial.begin(115200);
   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
 }
  
 void loop() {
   MHZ19Serial.write(Request1, sizeof Request1);
   delay(100);  //念のため delay 入れた。たぶんいらない。
   MHZ19Serial.write(Request2, sizeof Request2);
     
   display.clearDisplay();
   display.setTextSize(2);
   display.setTextColor(WHITE);
   display.setCursor(0, 0);
   display.println("0 carib");
   display.println("ABC OFF");
   display.display();
  
   Serial.print(" ");
   Serial.println("zero carib OK.");
   Serial.println("automatic baseline correction off");
   while(1); //終了 無限ループ
 }

こんな感じで屋外で20分以上動作させ、数値が充分下がっていることを確認してから、このプログラムを実行して完了です。

ちなみに自動校正 ON に戻すときは代わりに

0xFF 0x01 0x79 0xA0 0x00 0x00 0x00 0x00 0xE6 

のコマンドを送れば良いようですね。

毎回このように校正するのは大変そうです。センサーの HD ラインと GND を7秒以上短絡させるとゼロ校正されるようなので、下の回路図のように、タクトスイッチを7秒以上押し続けることで、校正できるようにしました。

コメント