首先,AO连AO,不要管DO,AO的输出可以模拟浓度
其次,我简单做了一个3.3v的浓度计算,和网上的不太一样,这个和网上的区别是可以测量co,nh3,h2s的浓度,当然,因为传感器原因,肯定不精确,然后把下面2个文件打包成zip格式,即可导入Arduino中,引用很简单
MQ135 gasSensor = MQ135(ANALOGPIN);
float h2s = gasSensor.getH2sPPM(); //h2s浓度
loat nh3 = gasSensor.getNh3PPM(); //nh3浓度
/**************************************************************************/
/*!
@file MQ135.h
@author lihang212010
*/
/**************************************************************************/
#ifndef MQ135_H
#define MQ135_H
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
/// 板上电阻
#define RLOAD 10.0
/// 正常电阻值
#define RZERO 76.63
/// 气体CO2浓度补偿参数
#define PARA 116.6020682
#define PARB 2.769034857
///气体nh3数据参数
#define PARA_NH3 102.2
#define PARB_NH3 2.473
///气体h2s数据参数
#define PARA_H2S 77.255
#define PARB_H2S 3.18
///气体co数据参数
#define PARA_CO 605.18
#define PARB_CO 3.937
/// 温度补偿
#define CORA 0.00035
#define CORB 0.02718
#define CORC 1.39538
#define CORD 0.0018
/// 电阻校验
#define ATMOCO2 397.13
class MQ135 {
private:
uint8_t _pin;
public:
MQ135(uint8_t pin);
float getCorrectionFactor(float t, float h);
float getResistance();
float getCorrectedResistance(float t, float h);
float getPPM();
float getCorrectedPPM(float t, float h);
float getCoPPM();
float getCoCorrectedPPM(float t, float h);
float getNh3PPM();
float getNh3CorrectedPPM(float t, float h);
float getH2sPPM();
float getH2sCorrectedPPM(float t, float h);
float getRZero();
float getCorrectedRZero(float t, float h);
};
#endif
/**************************************************************************/
/*!
@file MQ135.cpp
@author lihang
*/
/**************************************************************************/
#include "MQ135.h"
/**************************************************************************/
/*!
设置端口
*/
/**************************************************************************/
MQ135::MQ135(uint8_t pin) {
_pin = pin;
}
/**************************************************************************/
/*!
@brief 获得温湿度矫正系数
@param[in] t 温度
@param[in] h 湿度
@return
*/
/**************************************************************************/
float MQ135::getCorrectionFactor(float t, float h) {
return CORA * t * t - CORB * t + CORC - (h-33.)*CORD;
}
/**************************************************************************/
/*!
@brief 获得传感器电阻
这里使用3.3除1024得到0.003222656,如果电压是5v,请修改0.004882814
@return 电阻值
*/
/**************************************************************************/
float MQ135::getResistance() {
int val = analogRead(_pin);
// Serial.println(val);
float RS=(33./(val*0.003222656))-10.;
float R0=2.91;
Serial.print("RS/R0");Serial.println(RS/R0);
return RS/R0;
}
/**************************************************************************/
/*!
@brief 获得有温湿度矫正后的电阻
@param[in] t 温度
@param[in] h 湿度
@return 电阻值
*/
/**************************************************************************/
float MQ135::getCorrectedResistance(float t, float h) {
return getResistance()/getCorrectionFactor(t, h);
}
/**************************************************************************/
/*!
@brief 获得浓度
@return co2浓度
*/
/**************************************************************************/
float MQ135::getPPM() {
return PARA * pow(getResistance(), -PARB);
}
/**************************************************************************/
/*!
@brief 获得有温湿度的co2浓度
@param[in] t 温度
@param[in] h 湿度
@return co2浓度
*/
/**************************************************************************/
float MQ135::getCorrectedPPM(float t, float h) {
return PARA * pow(getCorrectedResistance(t, h), -PARB);
}
/**************************************************************************/
/*!
@brief 获得co浓度
@return co浓度
*/
/**************************************************************************/
float MQ135::getCoPPM() {
return PARA_CO * pow(getResistance(), -PARB_CO);
}
/**************************************************************************/
/*!
@brief 获得有温湿度的co浓度
@param[in] t 温度
@param[in] h 湿度
@return co浓度
*/
/**************************************************************************/
float MQ135::getCoCorrectedPPM(float t, float h) {
return PARA_CO * pow(getCorrectedResistance(t, h), -PARB_CO);
}
/**************************************************************************/
/*!
@brief 获得NH3浓度
@return NH3浓度
*/
/**************************************************************************/
float MQ135::getNh3PPM() {
return PARA_NH3 * pow(getResistance(), -PARB_NH3);
}
/**************************************************************************/
/*!
@brief 获得有温湿度的Nh3浓度
@param[in] t 温度
@param[in] h 湿度
@return NH3浓度
*/
/**************************************************************************/
float MQ135::getNh3CorrectedPPM(float t, float h) {
return PARA_NH3 * pow(getCorrectedResistance(t, h), -PARB_NH3);
}
/**************************************************************************/
/*!
@brief 获得H2S浓度
@return H2S浓度
*/
/**************************************************************************/
float MQ135::getH2sPPM() {
return PARA_H2S * pow(getResistance(), -PARB_H2S);
}
/**************************************************************************/
/*!
@brief 获得有温湿度的co浓度
@param[in] t 温度
@param[in] h 湿度
@return co浓度
*/
/**************************************************************************/
float MQ135::getH2sCorrectedPPM(float t, float h) {
return PARA_H2S * pow(getCorrectedResistance(t, h), -PARB_H2S);
}
/**************************************************************************/
/*!
@brief 校准电阻
@return 电阻值
*/
/**************************************************************************/
float MQ135::getRZero() {
return getResistance() * pow((ATMOCO2/PARA), (1./PARB));
}
/**************************************************************************/
/*!
@brief 校准电阻
@param[in] t 温度
@param[in] h 湿度
@return 电阻值
*/
/**************************************************************************/
float MQ135::getCorrectedRZero(float t, float h) {
return getCorrectedResistance(t, h) * pow((ATMOCO2/PARA), (1./PARB));
}