【传感器大赏】二氧化碳传感器
程序员文章站
2024-02-27 12:28:09
...
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 小时工作日允许接触的极限值
上一篇: 团体程序设计天梯赛-练习集 L1-008 求整数段和 (10分)
下一篇: 实现计算器
推荐阅读
-
CCS811二氧化碳和TVOC传感器 HAL库 模拟IIC调试成功 适用于CubeMX CubeIDE
-
【传感器大赏】二氧化碳传感器
-
STM32F103ZET6控制MH-Z14A二氧化碳传感器
-
SENSIRION SCD30 二氧化碳传感器测量数据转换
-
STM32 F030C8 AHT10驱动程序 温湿度传感器
-
树莓派开发笔记(七):GPIO口的SPI使用(BME280三合一传感器)
-
详解Android 传感器开发 完全解析
-
STM32——多路ADC通道+DMA+定时器循环采集传感器数据(二)
-
STM32f407的485传感器数据获取
-
(二十九)树莓派3B+ 获取BH1750FVI光强度传感器数据