














MH-Z14是基于非色散红外(NDIR)原理的CO2浓度传感器模组,由郑州炜盛电子生产。其主要特性有:

可能是为了方便连接,大部分管脚功能在排针孔上有重复。
采用串口方式与Arduino UNO通讯。考虑到Arduino仅有一个硬件串口(D0、D1),并且该串口还要用于程序更新或打印,因此利用官方SoftwareSerial库在其他管脚上实现uart的功能。

MH-Z14 Arduino UNO
V+ <------> 5V
V- <------> GND
T <------> D2 (可代码指定)
R <------> D3 (可代码指定)
1. SoftwareSerial库采用的Serial buffer大小为64字节,使用该库时,串口收到的数据最好尽快读出来,不然buffer很容易用完。
2. 模块刚上电时有一个预热过程,此时读取测量结果,可能一直返回浓度值为“400ppm”。
3. 手册中说模块还会返回传感器温度和环境温度值,但实际调试时温度值读出来都是0。
4. 发送读取命令后,应延迟一小段时间再读取返回结果,不然模块可能还未来得及返回结果。
1 /* 2 Measurement of CO2 concentration using MH-Z14 sensor 3 */ 4 #include <SoftwareSerial.h> 5 6 byte cmd[] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79}; 7 byte buffer[20]; 8 9 int backNum = 0; 10 int co2 = 0; //ppm 11 12 SoftwareSerial mySerial(2, 3); // RX, TX 13 14 void setup() 15 { 16 Serial.begin(9600); 17 18 // set the data rate for the SoftwareSerial port 19 mySerial.begin(9600); 20 mySerial.listen(); 21 } 22 23 void loop() 24 { 25 // send the command 26 for(int i = 0; i < sizeof(cmd); i++) 27 { 28 mySerial.write(cmd[i]); 29 } 30 31 delay(100); 32 backNum = mySerial.available(); 33 34 // get the result 35 for(int i = 0; i < backNum; i++) 36 { 37 buffer[i] = mySerial.read(); 38 } 39 co2 = buffer[2]*256 + buffer[3]; 40 41 // print 42 Serial.print("CO2 = "); Serial.print(co2); Serial.print(" ppm "); 43 44 // check the value 45 if ((buffer[1] == 0x86) && (CheckVal(buffer, 9) == 0xFF)) 46 { 47 Serial.println("value checked."); 48 } 49 else 50 { 51 Serial.println("error"); 52 } 53 54 delay(2000); 55 } 56 57 byte CheckVal(byte data[], byte len) 58 { 59 byte result = 0; 60 for(int i = 0; i < len; i++) 61 { 62 result = result + data[i]; 63 } 64 return result; 65 }
Arduino每隔2秒钟读取一次测量结果,并将结果打印。

MH-Z14 CO2传感器模组 - 郑州炜盛
Arduino - SoftwareSerial
Automatic Background Calibration (ABC) 原理解释
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。