【传感器大赏】二氧化碳传感器

                                          Grove-CO2 Sensor

Grove - CO2 Sensor 模块是一款红外的高灵敏度与高分辨率的二氧化碳传感器。红外二氧化碳传感器 MH-Z16 是一种通用的小型传感器,采用非色散红外( NDIR )吸收法检测空气中二氧化碳的原理,具有良好的选择性,氧气依赖,寿命长,内置温度传感器,具有温度补偿,UART 输出便于使用。可广泛应用于高压交流电、室内空气质量检测、工业过程监控与安全、农业与畜牧业生产过程监控。

Caution

请注意传感器值仅反映气体浓度在允许误差范围内的近似趋势,它不表示精确的气体浓度。 空气中某些部件的检测通常需要更精确和更昂贵的仪器,这些仪器不能用单个气体传感器来完成。 如果您的项目旨在以非常精确的水平获得气体浓度,那么我们不推荐使用这种气体传感器。

规格参数

  • 测量的范围 0-2000PPM
  • 分辨率为 1PPM 在 0-2000PPM 之间
  • 精度 200PPM
  • 准备时间 3 分钟
  • 反应时间 < 90 秒
  • 工作温度 0~50℃
  • 工作湿度 0%~90%RH
  • 存储温度 -20~60℃
  • 工作电压 4.5~6VDC
  • 当前最大电流小于 100mA,平均电流小于 50mA
  • UART 输出模式

Platforms Supported

操作示例

如下图将模块与 Grove Shield 连接使用,并使用下面的程序来获得电压。

/*
  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;
}

请注意,传感器的最佳预热时间约为 180s。 有关传感器的详细信息,请参考芯片数据手册。

校准

如果您需要校准传感器,请将以下代码上传到您的 Arduino。

// 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
}

Warning

请将传感器预热至少 5 分钟再进行校准,并确保传感器在新鲜空气中。

参考资料

  • 350~450ppm: 一般户外环境
  • 350~1000ppm:空气清新,呼吸顺畅
  • 1000~2000ppm:空气污浊让人昏昏欲睡
  • 5000ppm:8 小时工作日允许接触的极限值

 

 

 

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值