目录[隐藏]
|
用户还可以用板子上的电位器直接设置阈值,当CO2浓度高达一定程度时,探头旁边的3P针头会输出一个信号(数字量)。
该模块采用工业级的MG-811 CO2探头,对CO2极为敏感,同时还能排除酒精和CO的干扰。该探头对环境温湿度的依赖小,性能稳定,快速恢复响应。模块自带信号放大电路,进一步提高灵敏度。另外,板子上的加热电路直接把5V转换成稳定6V,为探头加热供电,提高模块适应性。
注意:使用二氧化传感器时,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: [email protected] Peng Wei: [email protected] 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=ZERO_POINT_VOLTAGE) { return -1; } else { return pow(10, ((volts/DC_GAIN)-pcurve[1])/pcurve[2]+pcurve[0]); } }
打开串口监视器,大约五分钟后,你会得到你周围二氧化碳浓度的数据。