From 8a929cff7f1574b36b6054123638c3ff58cbc943 Mon Sep 17 00:00:00 2001 From: miguel5612 Date: Wed, 14 Aug 2019 20:47:24 -0500 Subject: [PATCH] Updated constants --- WPDigitalizer/MQ3/MQ3_Analisis.xlsx | Bin 78623 -> 79516 bytes src/MQUnifiedsensor.cpp | 34 ++++++++++---------------- src/MQUnifiedsensor.h | 36 +++++++++++++++------------- 3 files changed, 32 insertions(+), 38 deletions(-) diff --git a/WPDigitalizer/MQ3/MQ3_Analisis.xlsx b/WPDigitalizer/MQ3/MQ3_Analisis.xlsx index aad7ccc8b8588bc38d7e4f4ce975a0b3c1100d26..c7ee397c5c4b23766bb95de4e20eff2216a2de03 100644 GIT binary patch delta 14996 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%0DU0N_?5>AzWBs8!yANv%TS~%GHPo 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 KXC{THq5cn`cN>xb diff --git a/src/MQUnifiedsensor.cpp b/src/MQUnifiedsensor.cpp index b33010d..9cf5462 100644 --- a/src/MQUnifiedsensor.cpp +++ b/src/MQUnifiedsensor.cpp @@ -90,6 +90,10 @@ //_MQ = MQ309; } } +void MQUnifiedsensor::update() +{ + _sensor_volt = this->getVoltage(); +} void MQUnifiedsensor::setVoltResolution(float voltaje) { _VOLT_RESOLUTION = voltaje; @@ -100,18 +104,19 @@ void MQUnifiedsensor::inicializar() } int MQUnifiedsensor::readSensor(String nameLectureRequeired, bool print) { - setSensorCharacteristics(nameLectureRequeired, print); - _PPM =readPPM(_m, _b); + setSensorCharacteristics(nameLectureRequeired, print); //In this function update _a and _b + _RS_Calc = ((_VOLT_RESOLUTION*_RLValue)/_sensor_volt)-_RLValue; //Get value of RS in a gas + _ratio = _RS_Calc / this->_R0; // Get ratio RS_gas/RS_air + _PPM= a*pow(_ratio, b); + if(print) { String nameLecture = getnameLecture(); Serial.println("**********************"); - Serial.println("* PPM_log = (log10(Rs/R0) - b)/m"); - Serial.println("* PPM = pow(10, PPM_Log)"); Serial.println("* Sensor: MQ-" + String(_type)); - Serial.println("* m =" + String(_m) + " ,b =" + String(_b) + ", R0 = " + _R0); Serial.println("* Vcc: " + String(_VOLT_RESOLUTION) + ", RS: " + String(_RS_Calc)); Serial.println("* RS/R0 = " + String(_ratio) + " ,Voltaje leido(ADC): " + String(_sensor_volt)); + Serial.println("* PPM = " + _a + "pow(Rs/R0, +" + _b + ")"); Serial.println("* Lectura(" + nameLecture + ")=" + String(_PPM) + " PPM"); Serial.println("**********************"); } @@ -515,19 +520,6 @@ void MQUnifiedsensor::setSensorCharacteristics(String nameLectureRequeired, bool } //Serial debugging } -float MQUnifiedsensor::readPPM(int m, int b) { - /** - * Returns the PPM concentration - */ - //More explained in: https://jayconsystems.com/blog/understanding-a-gas-sensor - _sensor_volt = this->getVoltage(); - //_RS_Calc; //Define variable for sensor resistance - _RS_Calc = ((_VOLT_RESOLUTION*_RLValue)/_sensor_volt)-_RLValue; //Get value of RS in a gas - _ratio = _RS_Calc / this->_R0; // Get ratio RS_gas/RS_air - float ppm = a*pow(_ratio, b); - - return floor(ppm); -} long MQUnifiedsensor::calibrate(boolean print) { //More explained in: https://jayconsystems.com/blog/understanding-a-gas-sensor /* @@ -541,17 +533,15 @@ long MQUnifiedsensor::calibrate(boolean print) { RS = [(VC x RL) - (VRL x RL)] / VRL RS = [(VC x RL) / VRL] - RL */ - _sensor_volt; //Define variable for sensor voltage float RS_air; //Define variable for sensor resistance float R0; //Define variable for R0 - _sensor_volt = this->getVoltage(); //Convert average to voltage RS_air = ((_VOLT_RESOLUTION*_RLValue)/_sensor_volt)-_RLValue; //Calculate RS in fresh air R0 = RS_air/_ratioInCleanAir; //Calculate R0 if(print) { Serial.println("*******Calibrating*********"); - Serial.println("* Vcc: " + String(_VOLT_RESOLUTION) + "*"); Serial.println("* Sensor: MQ-" + String(_type) + "*"); + Serial.println("* Vcc: " + String(_VOLT_RESOLUTION) + "*"); Serial.println("* _sensor_volt: " + String(_sensor_volt) + "*"); Serial.println("* _RLValue: " + String(_RLValue) + "*"); Serial.println("* _ratioInCleanAir: " + String(_ratioInCleanAir) + "*"); @@ -561,7 +551,7 @@ long MQUnifiedsensor::calibrate(boolean print) { return R0; } double MQUnifiedsensor::getVoltage(int read) { - double voltage = _sensor_volt; + double voltage = 0; if(read) { double avg = 0.0; diff --git a/src/MQUnifiedsensor.h b/src/MQUnifiedsensor.h index 8f8457f..a1d584f 100644 --- a/src/MQUnifiedsensor.h +++ b/src/MQUnifiedsensor.h @@ -83,23 +83,23 @@ #define MQ2_Benzene_b 2.7901 /********************** MQ3 ******************************************************/ -#define MQ3_LPG_a -3.1851 -#define MQ3_LPG_b 4.7048 +#define MQ3_LPG_a 44771 +#define MQ3_LPG_b -3.245 -#define MQ3_CH4_a -17.531 -#define MQ3_CH4_b 28.785 +#define MQ3_CH4_a 2*10^31 +#define MQ3_CH4_b 19.01 -#define MQ3_CO_a -4.339 -#define MQ3_CO_b 6.4432 +#define MQ3_CO_a 521853 +#define MQ3_CO_b -3.821 -#define MQ3_Alcohol_a -1.435 -#define MQ3_Alcohol_b 0.4103 +#define MQ3_Alcohol_a 0.3934 +#define MQ3_Alcohol_b -1.504 -#define MQ3_Benzene_a -2.7009 -#define MQ3_Benzene_b 0.632 +#define MQ3_Benzene_a 1.8006 +#define MQ3_Benzene_b -0.373 -#define MQ3_Hexane_a -2.7268 -#define MQ3_Hexane_b 3.6299 +#define MQ3_Hexane_a 22.996 +#define MQ3_Hexane_b -0.351 /********************** MQ4 ******************************************************/ #define MQ4_LPG_a -2.5818 @@ -267,20 +267,24 @@ class MQUnifiedsensor { public: MQUnifiedsensor(int pin, int type); + + //Functions to set values void inicializar(); + void update(); void setR0(double R0); void setVoltResolution(float voltaje); void setSensorCharacteristics(String nameLectureReqeuired, bool print); void setDefaultGas(); + //user functions + long calibrate(boolean print = false); int readSensor(String nameLectureRequeired = "", bool print = false); - long calibrate(boolean print = false); - double getVoltage(int read = true); - double stringToDouble(String & str); + //get function for info double getR0(); float readPPM(int m, int b); - + double getVoltage(int read = true); + double stringToDouble(String & str); String getnameLecture();