本文主要是介绍arduino和MG111二氧化碳传感器采集co2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原文地址:http://wiki.dfrobot.com.cn/index.php/(SKU:SEN0159)CO2_二氧化碳传感器模块_V1#.E6.A0.B7.E4.BE.8B.E4.BB.A3.E7.A0.81.E4.BA.8C
(SKU:SEN0159)CO2 二氧化碳传感器模块 V1
目录[隐藏]
|
简介
温室效应、废气排放、冰川融化、岛国淹没,这一切的罪魁祸首就是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
- 模块数据曲线表
使用教程
连线图
注意:使用二氧化传感器时,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.comPeng Wei: peng.wei@sandboxelectronics.comLisence: 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. Moresophisticated 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 = 9600bpspinMode(BOOL_PIN, INPUT); //set pin to inputdigitalWrite(BOOL_PIN, HIGH); //turn on pullup resistorsSerial.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 voltspcurve - 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[0]);} }
结果
打开串口监视器,大约五分钟后,你会得到你周围二氧化碳浓度的数据。
这篇关于arduino和MG111二氧化碳传感器采集co2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!