x 配線には、自信がないので各自、仕様書を確認の事
目的
今、コロナで流行りのCO2測定器
非営利、教育、研究目的
説明
771_8bitさんのプログラムを非営利目的でArduinoUNOに移植
あくまで参照
変更点
ハードシリアルからソフトウェアシリアル
A6 -> 6
A7 -> 7
参考
秋月で買えるCO2センサーを使う(MH-Z19C)
//caa45040が追加 始まり
# include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 2); // RX, TX
//caa45040が追加 終わり
uint16_t uartco2;
unsigned long pwmco2;
bool reset = false;
byte ReadCO2[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
byte SelfCalOn[9] = {0xFF, 0x01, 0x79, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xE6};
byte SelfCalOff[9] = {0xFF, 0x01, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86};
byte retval[9];
void setup() {
pinMode(7 /*変更*/, INPUT);
pinMode(6 /*変更*/, OUTPUT);
Serial.begin(9600);
Serial.print("400ppm");
Serial.print(",");
Serial.print("UART");
Serial.print(",");
Serial.println("PWM");
delay(2000);
mySerial.begin(9600);
mySerial.write(SelfCalOn,sizeof SelfCalOn);
}
void loop() {
//PWMでデータ取得
pwmco2=pulseIn(7 /*変更*/,HIGH,2000000);
//UARTでデータ取得
mySerial.write(ReadCO2,sizeof ReadCO2);
mySerial.readBytes((char *)retval, sizeof retval);
uartco2 = retval[2]*256 + retval[3];
//PCに送信
Serial.print(2*(202000-2000)/1000);
Serial.print(",");
Serial.print(uartco2);
Serial.print(",");
Serial.println(5*(pwmco2-1200)/1000);
delay(100);
//起動20分後手動キャリブレーション
if(millis()>1200000 && !reset){
digitalWrite(6 /*変更*/,LOW);
delay(8000);
digitalWrite(6 /*変更*/,HIGH);
reset=true;
}
}