작은항해자의 항해

MH-Z16 적외선 CO2 Sensor 본문

IT 이야기/IOT 센서

MH-Z16 적외선 CO2 Sensor

작은항해자 2019. 1. 21. 14:48

MH-Z16 적외선 CO2 Sensor





적외선 CO2 센서로 높은 민감도와 높은 분해능을 가지고 있다.

NDIR(Non-Dispersive Infrared)을 이용하여 공기중의 CO2를 검출한다.

온도센서가 내장되어 있어 온도 보정을 하며, UART로 센서 데이터를 출력한다.

공기 품질모니터링, 농업, 가축 사육장 등에서 사용이 가능.



Specifications

  • Measuring the range of 0-2000 parts per million (PPM)
  • Resolution of 1 PPM 0-2000 parts per million (PPM)
  • Accuracy of 200 PPM
  • A Warm - up time 3 minutes
  • Response Time < 90s
  • Operating temperature 0 to 50℃
  • Operating Humidity 0% ~ 90% RH
  • Storage temperature - 20-60℃
  • Operating Voltage4.5 V to 6 V DC
  • The Current maximum Current of less than 100 ma, the average Current of less than 50 ma
  • Output mode UART

Pin Line


처음 가동시 센서의 예열 시간은 약 180초이다.


Reference

  • 350~450ppm: General outdoor environment
  • 350~1000ppm:The air is fresh and breathing smooth
  • 1000~2000ppm:The air was stagnant and feel asleep
  • 5000ppm:Permissible exposure limit for an 8h work day

DataSheet EN :  MH-Z16_CO2_datasheet_EN.pdf


참조 : http://wiki.seeedstudio.com/Grove-CO2_Sensor/




SourceCode

/*
  This test code is write for Arduino AVR Series(UNO, Leonardo, Mega)
  If you want to use with LinkIt ONE, please connect the module to D0/1 and modify:

  // #include <SoftwareSerial.h>
  // SoftwareSerial s_serial(2, 3);      // TX, RX

  #define sensor Serial1
*/


#include <SoftwareSerial.h>
SoftwareSerial s_serial(2, 3);      // TX, RX

#define sensor s_serial

const unsigned char cmd_get_sensor[] =
{
    0xff, 0x01, 0x86, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x79
};

unsigned char dataRevice[9];
int temperature;
int CO2PPM;

void setup()
{
    sensor.begin(9600);
    Serial.begin(115200);
    Serial.println("get a 'g', begin to read from sensor!");
    Serial.println("********************************************************");
    Serial.println();
}

void loop()
{
    if(dataRecieve())
    {
        Serial.print("Temperature: ");
        Serial.print(temperature);
        Serial.print("  CO2: ");
        Serial.print(CO2PPM);
        Serial.println("");
    }
    delay(1000);
}

bool dataRecieve(void)
{
    byte data[9];
    int i = 0;

    //transmit command data
    for(i=0; i<sizeof(cmd_get_sensor); i++)
    {
        sensor.write(cmd_get_sensor[i]);
    }
    delay(10);
    //begin reveiceing data
    if(sensor.available())
    {
        while(sensor.available())
        {
            for(int i=0;i<9; i++)
            {
                data[i] = sensor.read();
            }
        }
    }

    for(int j=0; j<9; j++)
    {
        Serial.print(data[j]);
        Serial.print(" ");
    }
    Serial.println("");

    if((i != 9) || (1 + (0xFF ^ (byte)(data[1] + data[2] + data[3] + data[4] + data[5] + data[6] + data[7]))) != data[8])
    {
        return false;
    }

    CO2PPM = (int)data[2] * 256 + (int)data[3];
    temperature = (int)data[4] - 40;

    return true; 

} 

실행화면

센서보정시 Code

// Grove - Co2 Sensor calibration

#include <SoftwareSerial.h>
SoftwareSerial sensor(A5, A4);      // TX, RX


const unsigned char cmd_calibrate[] = 
{
    0xff, 0x87, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2
};

void setup()
{
    sensor.begin(9600);
    Serial.begin(115200);
    Serial.println("begin to calibrate");

    for(int i=0; i<sizeof(cmd_calibrate); i++)
    {
        sensor.write(cmd_calibrate[i]);
    }

    Serial.println("calibrate done");
}

void loop()
{ 

// nothing to do 


'IT 이야기 > IOT 센서' 카테고리의 다른 글

MH-Z14A CO2 Sensor  (0) 2019.01.21
MH-Z19 CO2 Sensor  (4) 2019.01.21
Hall Sensor(홀 센서)  (0) 2019.01.16
NDVI 카메라  (0) 2019.01.15
SHT10 토양 온습도 센서  (0) 2019.01.14