ESP8266(Arduino)MQ135的库文件编写

首先,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));
}
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值