LoginSignup
0
0

More than 1 year has passed since last update.

ArduinoUNOとCO2センサーモジュールMH-Z19CでCO2測定

Last updated at Posted at 2021-07-14

x 配線には、自信がないので各自、仕様書を確認の事

目的
今、コロナで流行りのCO2測定器
非営利、教育、研究目的

説明
771_8bitさんのプログラムを非営利目的でArduinoUNOに移植
あくまで参照

変更点
ハードシリアルからソフトウェアシリアル
A6 -> 6
A7 -> 7

co2_bbb_uno_2.jpg

l_3pun_5.jpg

参考

秋月で買える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;
  }

}


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0