MH-Z19C是一款可以测量空气二氧化碳浓度值的传感器,其主要参数如下表所示,工作电压为5v,预热时间大概为1分钟,通信方式有串口UART和PWM通信(二选一即可) 。
下面是它引脚功能图,本次选用串口通信方式获取传感器数据,Vin为输入工作电压为5v,GND和单片机地线相连,选择一组串口,这边选用的是Arduino上0和1引脚的RX-TX引脚,将其和模块上的TX和RX反接。
下面为模块说明书上的通讯获取的数组,通过Arduino将数组数据发送给模块等待模块应答,接收回传数据即可。
下面是回传数据格式,数据帧头为0xFF,Byte2为二氧化碳浓度值高八位,Byte3为低八位。
CO2 concentration = HIGH * 256 + LOW
上式为浓度计算公式单位为PPM,只要将高八位乘以256+低八位数据就是我们需要求得的浓度值。
下面为完整代码提供参考,使用51单片机和STM32单片机通信原理也是相同的,修改移植即可。
// MH-Z19C二氧化碳传感器的完整通信程序
void setup() {
Serial.begin(9600); // 初始化Arduino板的硬串口
}
void loop() {
// 发送开始通信的指令
byte startCommand[] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
Serial.write(startCommand, sizeof(startCommand));
// 等待传感器响应
delay(100);
// 从MH-Z19C传感器读取数据
while (Serial.available() > 0) {
int response = Serial.read();
// 判断数据帧是否正确
if (response == 0xFF) {
byte data[8];
// 读取剩余的7个字节的数据
for (int i = 1; i < 8; i++) {
data[i] = Serial.read();
}
// 计算二氧化碳浓度
int co2 = 256 * data[2] + data[3];
// 打印二氧化碳浓度到串口监视器
Serial.print("CO2 Concentration: ");
Serial.print(co2);
Serial.println(" ppm");
}
}
delay(2000); // 2秒钟更新一次数据
}