CO2 二氧化碳传感器模块 V1

SEN0159.JPG

目录

1 简介
2 产品参数
3 使用教程

3.1 连线图
3.2 样例代码一
3.3 样例代码二
3.4 结果

4 疑难解答

简介
温室效应、废气排放、冰川融化、岛国淹没,这一切的罪魁祸首就是CO2的过度排放。是时候家中常备一款CO2监测装置,来知道我们的环境危机是多么的紧迫。它还可以告诉你室内空气的质量,及时开窗降低CO2浓度。DFRobot为您带来这款CO2传感器。CO2浓度越高,输出的电压值就越小。通过我们的说明书和样例代码,用户可以轻松的读取CO2数值。 用户还可以用板子上的电位器直接设置阈值,当CO2浓度高达一定程度时,探头旁边的3P针头会输出一个信号(数字量)。
该模块采用工业级的MG-811 CO2探头,对CO2极为敏感,同时还能排除酒精和CO的干扰。该探头对环境温湿度的依赖小,性能稳定,快速恢复响应。模块自带信号放大电路,进一步提高灵敏度。另外,板子上的加热电路直接把5V转换成稳定6V,为探头加热供电,提高模块适应性。

产品参数
传感器探头工作电压:6v
内置升压电路,支持3.7~5v DC电源输入,电源电流大于500mA
兼容蜂鸣器,通过调节板载金属电位器,可快速实现CO2超标蜂鸣器警报功能
高品质接头,耐反复插拔
沉金工艺,金色质感
板子上带有模拟传感图标“A”和明显的电位器标识
尺寸:32*42mm

模块数据曲线表

数据曲线表

使用教程
连线图
SEN0159 Diagram

注意:使用二氧化传感器时,Arduino必须外接供电(7.5V-9V),否则会造成数据不准确。另外,样例2中需要更改代码,具体看#define 部分Application Related Macros
细节说明:电位器用来设置阀值,当设置的阀值小于测得的数值时,数字输出口便输出一个高电平。你可以在数字输出口接蜂鸣器模块或者LED模块用作报警显示。

样例代码一

void setup(){

Serial.begin(9600);

}

void loop(){
Serial.print("Sample value:");
Serial.println(analogRead(0));
delay(100);
}

样例代码二

/*******************Demo for MG-811 Gas Sensor Module V1.1***************************** Author: Tiequan Shao: tiequan.shao@sandboxelectronics.com
Peng Wei: peng.wei@sandboxelectronics.com

Lisence: Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0)

Note: This piece of source code is supposed to be used as a demostration ONLY. More
sophisticated calibration is required for industrial field application.

                                                Sandbox Electronics    2012-05-31

************************************************************************************/

/************************Hardware Related Macros************************************/
#define MG_PIN (0) //define which analog input channel you are going to use
#define BOOL_PIN (2)
#define DC_GAIN (8.5) //define the DC gain of amplifier

/***********************Software Related Macros************************************/
#define READ_SAMPLE_INTERVAL (50) //define how many samples you are going to take in normal operation
#define READ_SAMPLE_TIMES (5) //define the time interval(in milisecond) between each samples in
//normal operation

/**********************Application Related Macros**********************************/
//These two values differ from sensor to sensor. user should derermine this value.
#define ZERO_POINT_VOLTAGE (0.324) //define the output of the sensor in volts when the concentration of CO2 is 400PPM
#define REACTION_VOLTGAE (0.020) //define the voltage drop of the sensor when move the sensor from air into 1000ppm CO2

/*****************************Globals***********************************************/
float CO2Curve[3] = {2.602,ZERO_POINT_VOLTAGE,(REACTION_VOLTGAE/(2.602-3))};
//two points are taken from the curve.
//with these two points, a line is formed which is
//"approximately equivalent" to the original curve.
//data format:{ x, y, slope}; point1: (lg400, 0.324), point2: (lg4000, 0.280)
//slope = ( reaction voltage ) / (log400 –log1000)

void setup()
{
Serial.begin(9600); //UART setup, baudrate = 9600bps
pinMode(BOOL_PIN, INPUT); //set pin to input
digitalWrite(BOOL_PIN, HIGH); //turn on pullup resistors

Serial.print("MG-811 Demostration\n");
}

void loop()
{
int percentage;
float volts;

volts = MGRead(MG_PIN);
Serial.print( "SEN0159:" );
Serial.print(volts); 
Serial.print( "V           " );

percentage = MGGetPercentage(volts,CO2Curve);
Serial.print("CO2:");
if (percentage == -1) {
    Serial.print( "<400" );
} else {
    Serial.print(percentage);
}
Serial.print( "ppm" );  
Serial.print( "       Time point:" );
Serial.print(millis());
Serial.print("\n");

if (digitalRead(BOOL_PIN) ){
    Serial.print( "=====BOOL is HIGH======" );
} else {
    Serial.print( "=====BOOL is LOW======" );
}
  
Serial.print("\n");

delay(200);

}

/***************************** MGRead ********************************************* Input: mg_pin - analog channel
Output: output of SEN0159
Remarks: This function reads the output of SEN0159
************************************************************************************/
float MGRead(int mg_pin)
{
int i;
float v=0;

for (i=0;i<READ_SAMPLE_TIMES;i++) {
    v += analogRead(mg_pin);
    delay(READ_SAMPLE_INTERVAL);
}
v = (v/READ_SAMPLE_TIMES) *5/1024 ;

return v;  

}

/***************************** MQGetPercentage ********************************** Input: volts - SEN-000007 output measured in volts
pcurve - pointer to the curve of the target gas
Output: ppm of the target gas
Remarks: By using the slope and a point of the line. The x(logarithmic value of ppm)
of the line could be derived if y(MG-811 output) is provided. As it is a
logarithmic coordinate, power of 10 is used to convert the result to non-logarithmic
value.
************************************************************************************/
int MGGetPercentage(float volts, float *pcurve)
{
if ((volts/DC_GAIN )>=ZERO_POINT_VOLTAGE) {
return -1;
} else {
return pow(10, ((volts/DC_GAIN)-pcurve[1])/pcurve[2]+pcurve[]);
}
}

结果
打开串口监视器,大约五分钟后,你会得到你周围二氧化碳浓度的数据。

Result co2 density.png

疑难解答
更多问题及有趣的应用,请访问论坛

Nextredirectltr.png购买

标签: Arduino传感器