查看: 197|回复: 0

[经验] 【传感器大赏】二氧化碳传感器

[复制链接]

该用户从未签到

发表于 2020-9-15 20:33 | 显示全部楼层 |阅读模式
Grove-CO2 Sensor
微信图片_20200915202918.png

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 连接使用,并使用下面的程序来获得电压。
微信图片_20200915202943.png
请注意,传感器的最佳预热时间约为 180s。 有关传感器的详细信息,请参考芯片数据手册。
  1. /*
  2.   This test code is write for Arduino AVR Series(UNO, Leonardo, Mega)
  3.   If you want to use with LinkIt ONE, please connect the module to D0/1 and modify:

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

  6.   #define sensor Serial1
  7. */


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

  10. #define sensor s_serial

  11. const unsigned char cmd_get_sensor[] =
  12. {
  13.     0xff, 0x01, 0x86, 0x00, 0x00,
  14.     0x00, 0x00, 0x00, 0x79
  15. };

  16. unsigned char dataRevice[9];
  17. int temperature;
  18. int CO2PPM;

  19. void setup()
  20. {
  21.     sensor.begin(9600);
  22.     Serial.begin(115200);
  23.     Serial.println("get a 'g', begin to read from sensor!");
  24.     Serial.println("********************************************************");
  25.     Serial.println();
  26. }

  27. void loop()
  28. {
  29.     if(dataRecieve())
  30.     {
  31.         Serial.print("Temperature: ");
  32.         Serial.print(temperature);
  33.         Serial.print("  CO2: ");
  34.         Serial.print(CO2PPM);
  35.         Serial.println("");
  36.     }
  37.     delay(1000);
  38. }

  39. bool dataRecieve(void)
  40. {
  41.     byte data[9];
  42.     int i = 0;

  43.     //transmit command data
  44.     for(i=0; i<sizeof(cmd_get_sensor); i++)
  45.     {
  46.         sensor.write(cmd_get_sensor[i]);
  47.     }
  48.     delay(10);
  49.     //begin reveiceing data
  50.     if(sensor.available())
  51.     {
  52.         while(sensor.available())
  53.         {
  54.             for(int i=0;i<9; i++)
  55.             {
  56.                 data[i] = sensor.read();
  57.             }
  58.         }
  59.     }

  60.     for(int j=0; j<9; j++)
  61.     {
  62.         Serial.print(data[j]);
  63.         Serial.print(" ");
  64.     }
  65.     Serial.println("");

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

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

  72.     return true;
  73. }
复制代码

微信图片_20200915202947.png
校准
如果您需要校准传感器,请将以下代码上传到您的 Arduino。
  1. // Grove - Co2 Sensor calibration

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


  4. const unsigned char cmd_calibrate[] =
  5. {
  6.     0xff, 0x87, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2
  7. };

  8. void setup()
  9. {
  10.     sensor.begin(9600);
  11.     Serial.begin(115200);
  12.     Serial.println("begin to calibrate");

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

  17.     Serial.println("calibrate done");
  18. }

  19. void loop()
  20. {
  21.     // nothing to do
  22. }
复制代码

Warning
请将传感器预热至少 5 分钟再进行校准,并确保传感器在新鲜空气中。
参考资料
· 350~450ppm: 一般户外环境
· 350~1000ppm:空气清新,呼吸顺畅
· 1000~2000ppm:空气污浊让人昏昏欲睡
· 5000ppm:8 小时工作日允许接触的极限值

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

关于第三方IDE
关于第三方IDE
刚开始玩esp8266,用arduino做了几个例子,太蛋疼,开始找第三方ide,目前只研究了vsc
arduino蓝牙接口串口显示为乱码
arduino蓝牙接口串口显示
各位看一下代码,我这串口无论怎么改,通过手机发送信息都是乱码。 #include
开源!白菜白光T12控制器 全新UI界面
开源!白菜白光T12控制器
*声明:本项目源于https://github.com/wagiminator/ATmega-Soldering-Station 采用CC3
关于arduino端口问题,萌新求助帖
关于arduino端口问题,萌
已经下好了 arduino的ide 可以从设备管理器看到 连接的板的名称, 但是不能从ide中找
ESP8266烧录错误
ESP8266烧录错误
-首先-ESP8266新手 使用Arduino IDE Mac版开发, 对eps8266进行例程对烧录,总是报错
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表