二酸化炭素センサ1

週末は二酸化炭素モニター用のセンサでちょっくら遊んでいました。
www.winsen-sensor.com

サンプルプログラムをここからコピーしてきた。

#include <SoftwareSerial.h>
SoftwareSerial SerialCom (A1,A0);
int myDelay = 2000;
 
byte addArray[] = { 0XFF, 0x86, 0x02, 0x60, 0x47, 0x00, 0x00, 0x00, 0xD1 };
 
char dataValue[9];
String dataString = "";
 
void setup(){
  Serial.begin(9600);
  SerialCom.begin(9600);
  Serial.println("MH-Z14 C02 Sensor Test Code");
  Serial.println("------------------------------------");
}
 
void loop() {
  SerialCom.write(addArray, 9);
  SerialCom.readBytes(dataValue, 9);
  int resHigh = (int) dataValue[2];
  int resLow  = (int) dataValue[3];
  int pulse = (256*resHigh)+resLow;
  dataString = String(pulse);
  Serial.print("PPM: ");
  Serial.println(pulse);
  delay(myDelay);
}

途中読み出した値をintにキャストするところは、unsigned signにしないとまずい。(僕もはじめ少しハマった)
あとは、送信するコマンドはMH-Z14Aのマニュアルを見て修正する必要がある。

byte addArray[] = { 0XFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 };

これらを組み合わせると、なんとか二酸化炭素濃度が測れるようになりました。ちなみにマニュアルではサラッと書いてあるけど、センサのキャリブレーションは基本的には実行してはいけない。自宅で二酸化炭素濃度を定量的に制御して再校正することがほぼ不可能だからだ。


それから、ネットワークについての入門書を買った勢いで、Linuxマシン1台あればTCP/IPの実験ができるというこちらの本を買ってみた。

ip netnsを使って仮想的なネットワークを構成し、ルータを介したipネットワークを構築することができた。また上位プロトコルについても解説されていて、思いがけずカバレッジが良い良書だった。