ホームページをリニューアルしました。旧HPはこちら
Arduino ソフト・ハードウェア

Arduino MH-Z19 CO2センサー完成 

中国製のMH-Z19赤外線co2センサー用を$24で購入。
Arduinoで測定できるようにした。

MH-Z19にはPWMとUARTの信号端子がある。
定時観測のためにはArduinoとはUARTでのデータのやり取りが必要だが、センサーのTXD、RXD端子を、誤ってArduinoのTXD,RXDにそれぞれつないでいたため通信できず。。。
気がつくまでに1日もかかり、その結果動作プログラムの完成に2日間費やしてしまった。

以下必要な手順を記す:

1、SoftwareSerial Libraryを準備
ArduinoのSoftwareSerial でなく、AltSoftSerial Libraryを活用
SoftwareSerial Library
AltSoftSerial Library

Basic Usage

AltSoftSerial mySerial;
Create the AltSoftSerial object. Only one AltSoftSerial can be used, with the fixed pin assignments shown

above.mySerial.begin(baud);
Initialize the port to communicate at a specific baud rate.

mySerial.print(anything);
Print a number or text. This works the same as Serial.print().

mySerial.available();
Returns the number of bytes received, which can be read.

mySerial.read();
Reads the next byte from the port. If nothing has been received, -1 is returned.

Example Program

#include <AltSoftSerial.h>

AltSoftSerial altSerial;

void setup() {
  Serial.begin(9600);
  Serial.println("AltSoftSerial Test Begin");
  altSerial.begin(9600);
  altSerial.println("Hello World");
}

void loop() {
  char c;

  if (Serial.available()) {
    c = Serial.read();
    altSerial.print(c);
  }
  if (altSerial.available()) {
    c = altSerial.read();
    Serial.print(c);
  }
}
Board Transmit Pin Receive Pin Unusable PWM
Arduino Uno, Duemilanove,
LilyPad, Mini (& other ATMEGA328)
9 8 10

2、UART通信
下記のURLのProgramを参考に、UART通信のProgram作成
CO2センサーから9バイトデータを読み込み、データ計算
センサーのTXD,RXDは3.3V I/Fのため、RXDへの入力信号は、510Ωと1kΩの抵抗分割で、3.3VMAXにレベル降圧させる。

arduino-esp8266-mhz-19-serial/arduino-esp8266-mhz-19-serial.ino

mh-z19-co2-manual(ver1_0)

2017-10-09追加 mh-z19b-co2-ver1_0

sensor

3、UART通信のProgram:

// command to ask for data
byte cmd[9] = {0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
//char buff[9]; // for answer
byte buff[9]; // for answer

co2Serial.write(cmd, 9); //request PPM CO2

if (co2Serial.available())
{
for(n = 0; n<=8; n++) {
buff[n] = co2Serial.read();
delay(100);
}
}

for(n=0; n<=8; n++) {
Serial.print(“n=”);
Serial.print(n);

Serial.print(” DEC=”);
Serial.print(buff[n]);
Serial.print(” HEX=”);
Serial.println(buff[n],HEX);
}

if (buff[0] != 255)
{
Serial.println(“Wrong starting byte from co2 sensor!”);
}

if (buff[1] != 134)
{
Serial.println(“Wrong command from co2 sensor!”);
}

int ppm = 256 * buff[2] + buff[3];
Serial.print(“ppm=”);
Serial.println(ppm);
Serial.println(“ppm ————— “);

———————————————————

bme280_co2sensor_solar_panel_fujimi_%e3%83%96%e3%83%ac%e3%83%83%e3%83%89%e3%83%9c%e3%83%bc%e3%83%89

 

コメント

タイトルとURLをコピーしました