mq lib
Dependents: gather_sensor_data
Revision 0:a43405a3d273, committed 2016-09-08
- Comitter:
- readysteadygo2006
- Date:
- Thu Sep 08 14:05:33 2016 +0000
- Commit message:
- test
Changed in this revision
MQ135.cpp | Show annotated file Show diff for this revision Revisions of this file |
MQ135.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r a43405a3d273 MQ135.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MQ135.cpp Thu Sep 08 14:05:33 2016 +0000 @@ -0,0 +1,126 @@ +/**************************************************************************/ +/*! +@file MQ135.cpp +@author G.Krocker (Mad Frog Labs) +@license GNU GPLv3 + +First version of an Arduino Library for the MQ135 gas sensor +TODO: Review the correction factor calculation. This currently relies on +the datasheet but the information there seems to be wrong. + +@section HISTORY + +v1.0 - First release +*/ +/**************************************************************************/ + +#include "MQ135.h" + +/**************************************************************************/ +/*! +@brief Default constructor + +@param[in] pin The analog input pin for the readout of the sensor +*/ +/**************************************************************************/ +MQ135::MQ135(PinName pin) { + _pin = pin; +} + +MQ135::~MQ135() { +} + +/**************************************************************************/ +/*! +@brief Get the correction factor to correct for temperature and humidity + +@param[in] t The ambient air temperature +@param[in] h The relative humidity + +@return The calculated correction factor +*/ +/**************************************************************************/ +float MQ135::getCorrectionFactor(float t, float h) { + return CORA * t * t - CORB * t + CORC - (h-33.)*CORD; +} + +/**************************************************************************/ +/*! +@brief Get the resistance of the sensor, ie. the measurement value + +@return The sensor resistance in kOhm +*/ +/**************************************************************************/ +float MQ135::getResistance() { +// AnalogIn ain(_pin); + AnalogIn ain(PA_0); + int val = ain.read(); + return ((1023./(float)val) * 5. - 1.)*RLOAD; +} + +/**************************************************************************/ +/*! +@brief Get the resistance of the sensor, ie. the measurement value corrected + for temp/hum + +@param[in] t The ambient air temperature +@param[in] h The relative humidity + +@return The corrected sensor resistance kOhm +*/ +/**************************************************************************/ +float MQ135::getCorrectedResistance(float t, float h) { + return getResistance()/getCorrectionFactor(t, h); +} + +/**************************************************************************/ +/*! +@brief Get the ppm of CO2 sensed (assuming only CO2 in the air) + +@return The ppm of CO2 in the air +*/ +/**************************************************************************/ +float MQ135::getPPM() { + return PARA * pow((getResistance()/RZERO), -PARB); +} + +/**************************************************************************/ +/*! +@brief Get the ppm of CO2 sensed (assuming only CO2 in the air), corrected + for temp/hum + +@param[in] t The ambient air temperature +@param[in] h The relative humidity + +@return The ppm of CO2 in the air +*/ +/**************************************************************************/ +float MQ135::getCorrectedPPM(float t, float h) { + return PARA * pow((getCorrectedResistance(t, h)/RZERO), -PARB); +} + +/**************************************************************************/ +/*! +@brief Get the resistance RZero of the sensor for calibration purposes + +@return The sensor resistance RZero in kOhm +*/ +/**************************************************************************/ +float MQ135::getRZero() { + return getResistance() * pow((ATMOCO2/PARA), (1./PARB)); +} + +/**************************************************************************/ +/*! +@brief Get the corrected resistance RZero of the sensor for calibration + purposes + +@param[in] t The ambient air temperature +@param[in] h The relative humidity + +@return The corrected sensor resistance RZero in kOhm +*/ +/**************************************************************************/ +float MQ135::getCorrectedRZero(float t, float h) { + return getCorrectedResistance(t, h) * pow((ATMOCO2/PARA), (1./PARB)); +}
diff -r 000000000000 -r a43405a3d273 MQ135.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MQ135.h Thu Sep 08 14:05:33 2016 +0000 @@ -0,0 +1,53 @@ +/**************************************************************************/ +/*! +@file MQ135.h +@author G.Krocker (Mad Frog Labs) +@license GNU GPLv3 + +First version of an Arduino Library for the MQ135 gas sensor +TODO: Review the correction factor calculation. This currently relies on +the datasheet but the information there seems to be wrong. + +@section HISTORY + +v1.0 - First release +*/ +/**************************************************************************/ +#ifndef MQ135_H +#include "mbed.h" + +#define MQ135_H + +/// The load resistance on the board +#define RLOAD 10.0 +/// Calibration resistance at atmospheric CO2 level +#define RZERO 76.63 +/// Parameters for calculating ppm of CO2 from sensor resistance +#define PARA 116.6020682 +#define PARB 2.769034857 + +/// Parameters to model temperature and humidity dependence +#define CORA 0.00035 +#define CORB 0.02718 +#define CORC 1.39538 +#define CORD 0.0018 + +/// Atmospheric CO2 level for calibration purposes +#define ATMOCO2 397.13 + +class MQ135 { + private: + PinName _pin; + + public: + MQ135(PinName pin); + ~MQ135(); + float getCorrectionFactor(float t, float h); + float getResistance(); + float getCorrectedResistance(float t, float h); + float getPPM(); + float getCorrectedPPM(float t, float h); + float getRZero(); + float getCorrectedRZero(float t, float h); +}; +#endif