diff --git a/src/MQUnifiedsensor.cpp b/src/MQUnifiedsensor.cpp index d097822..162556a 100644 --- a/src/MQUnifiedsensor.cpp +++ b/src/MQUnifiedsensor.cpp @@ -1,93 +1,48 @@ #include "MQUnifiedsensor.h" - MQUnifiedsensor::MQUnifiedsensor(int pin, int type) { - +MQUnifiedsensor::MQUnifiedsensor(String Placa, int Voltage_Resolution, int pin, String type) { this->_pin = pin; - this->_type = type; //2,3,4,5,6,7,8,9,131,135,303,309 - //Set _MQ variable with MQ sensor selected - if(_type == 2) + this->_type = type; //MQ-2, MQ-3 ... MQ-309A + this->_placa = Placa; + this-> _VOLT_RESOLUTION = Voltage_Resolution; +} +MQUnifiedsensor::serialDebug(boolean onSetup) +{ + if(onSetup) { - //memcpy(_MQ, _MQ2, sizeof(_MQ2)); - _ratioInCleanAir = RatioMQ2CleanAir; - _R0 = R0_MQ2; - //_MQ = MQ2; + Serial.println("************************************************************************************************************************************************"); + Serial.println("MQ sensor reading library for arduino"); + + Serial.println("Note: remember that all the parameters below can be modified during the program execution with the methods:"); + Serial.println("setR0, setRL, setA, setB where you will have to send as parameter the new value, example: mySensor.setR0(20); //R0 = 20K"); + + Serial.println("Authors: Miguel A. Califa U - Yersson R. Carrillo A - Ghiordy F. Contreras C"); + Serial.println("Contributors: Andres A. Martinez - Juan A. Rodríguez - Mario A. Rodríguez O "); + + Serial.println("Sensor:" + _type); + Serial.println("Supply voltage:" + _VOLT_RESOLUTION); + Serial.println("R0: " + _R0); + Serial.println("RL: " + _RL); + + Serial.println("Model: Logarithmic regression with parameters."); + Serial.println(_type + ":" + "a:" + _a + " | b:" + _b); + + Serial.println("Development board: " + _placa); } - else if(_type == 3) + else { - //memcpy(_MQ, _MQ3, sizeof(_MQ3)); - _ratioInCleanAir = RatioMQ3CleanAir; - _R0 = R0_MQ3; - //_MQ = MQ3; - } - else if(_type == 4) - { - //memcpy(_MQ, _MQ4, sizeof(_MQ4)); - _ratioInCleanAir = RatioMQ4CleanAir; - _R0 = R0_MQ4; - //_MQ = MQ4; - } - else if(_type == 5) - { - //memcpy(_MQ, _MQ5, sizeof(_MQ5)); - _ratioInCleanAir = RatioMQ5CleanAir; - _R0 = R0_MQ5; - //_MQ = MQ5; - } - else if(_type == 6) - { - //memcpy(_MQ, _MQ6, sizeof(_MQ6)); - _ratioInCleanAir = RatioMQ6CleanAir; - _R0 = R0_MQ6; - //_MQ = MQ6; - } - else if(_type == 7) - { - //memcpy(_MQ, _MQ7, sizeof(_MQ7)); - _ratioInCleanAir = RatioMQ7CleanAir; - _R0 = R0_MQ7; - //_MQ = MQ7; - } - else if(_type == 8) - { - //memcpy(_MQ, _MQ8, sizeof(_MQ8)); - _ratioInCleanAir = RatioMQ8CleanAir; - _R0 = R0_MQ8; - //_MQ = MQ8; - } - else if(_type == 9) - { - //memcpy(_MQ, _MQ9, sizeof(_MQ9)); - _ratioInCleanAir = RatioMQ9CleanAir; - _R0 = R0_MQ9; - //_MQ = MQ9; - } - else if(_type == 131) - { - //memcpy(_MQ, _MQ131, sizeof(_MQ131)); - _ratioInCleanAir = RatioMQ131CleanAir; - _R0 = R0_MQ131; - //_MQ = MQ131; - } - else if(_type == 135) - { - //memcpy(_MQ, _MQ135, sizeof(_MQ135)); - _ratioInCleanAir = RatioMQ135CleanAir; - _R0 = R0_MQ135; - //_MQ = MQ135; - } - else if(_type == 303) - { - //memcpy(_MQ, _MQ303A, sizeof(_MQ303A)); - _ratioInCleanAir = RatioMQ303CleanAir; - _R0 = R0_MQ303; - //_MQ = MQ303A; - } - else if(_type == 309) - { - //memcpy(_MQ, _MQ309A, sizeof(_MQ309A)); - _ratioInCleanAir = RatioMQ309CleanAir; - _R0 = R0_MQ309; - //_MQ = MQ309; + if(!_firstFlag) + { + Serial.println("| ****************************************************************" + _type + "****************************************************************|"); + Serial.println("|ADC_In | Equation_V_ADC | Voltage_ADC | Equation_R | Resistance_RS | EQ_Ratio | Ratio (RS/R0) | Equation_PPM | PPM |"); + _firstFlag = true; //Headers are printed + } + else + { + String eq = ""; + if(regression == "Exponential") eq = "a*ratio^b" + Serial.println("|" + _adc + "|" + "v = ADC*" + _VOLT_RESOLUTION + "/1024" + "|" + _sensor_volt + "|" + "RS = ((" + _VOLT_RESOLUTION + "*RL)/Voltage) - RL" + "|" + _RS_Calc + "|" + "Ratio = RS/R0" + "|" + _ratio + "|" + eq + "|" + _PPM); + } } } void MQUnifiedsensor::update() @@ -131,385 +86,6 @@ String MQUnifiedsensor::getnameLecture() { return _nameLectureRequeired; } -void MQUnifiedsensor::setSensorCharacteristics(String nameLectureRequeired, bool print) -{ - //Defaults index - if(nameLectureRequeired == "") - { - //Set default - setDefaultGas(); - //Put the default into variable internally used - nameLectureRequeired = _nameLectureRequeired; - } - - if(_type == 2) - { - if(nameLectureRequeired == "H2") - { - _nameLectureRequeired = "H2"; - _a = MQ2_H2_a; - _b = MQ2_H2_b; - } - else if(nameLectureRequeired == "LPG") - { - _nameLectureRequeired = "LPG"; - _a = MQ2_LPG_a; - _b = MQ2_LPG_b; - } - else if(nameLectureRequeired == "CO") - { - _nameLectureRequeired = "CO"; - _a = MQ2_CO_a; - _b = MQ2_CO_b; - } - else if(nameLectureRequeired == "Alcohol") - { - _nameLectureRequeired = "Alcohol"; - _a = MQ2_Alcohol_a; - _b = MQ2_Alcohol_b; - } - else if(nameLectureRequeired == "Propane") - { - _nameLectureRequeired = "Propane"; - _a = MQ2_Propane_a; - _b = MQ2_Propane_b; - } - } - else if(_type == 3) - { - if(nameLectureRequeired == "LPG") - { - _nameLectureRequeired = "LPG"; - _a = MQ3_LPG_a; - _b = MQ3_LPG_b; - } - else if(nameLectureRequeired == "CH4") - { - _nameLectureRequeired = "CH4"; - _a = MQ3_CH4_a; - _b = MQ3_CH4_b; - } - else if(nameLectureRequeired == "CO") - { - _nameLectureRequeired = "CO"; - _a = MQ3_CO_a; - _b = MQ3_CO_b; - } - else if(nameLectureRequeired == "Alcohol") - { - _nameLectureRequeired = "Alcohol"; - _a = MQ3_Alcohol_a; - _b = MQ3_Alcohol_b; - } - else if(nameLectureRequeired == "Hexane") - { - _nameLectureRequeired = "Hexane"; - _a = MQ3_Hexane_a; - _b = MQ3_Hexane_b; - } - else if(nameLectureRequeired == "Benzene") - { - _nameLectureRequeired = "Benzene"; - _a = MQ3_Benzene_a; - _b = MQ3_Benzene_b; - } - } - else if(_type == 4) - { - if(nameLectureRequeired == "LPG") - { - _nameLectureRequeired = "LPG"; - _a = MQ4_LPG_a; - _b = MQ4_LPG_b; - } - else if(nameLectureRequeired == "CH4") - { - _nameLectureRequeired = "CH4"; - _a = MQ4_CH4_a; - _b = MQ4_CH4_b; - } - else if(nameLectureRequeired == "CO") - { - _nameLectureRequeired = "CO"; - _a = MQ4_CO_a; - _b = MQ4_CO_b; - } - else if(nameLectureRequeired == "Alcohol") - { - _nameLectureRequeired = "Alcohol"; - _a = MQ4_Alcohol_a; - _b = MQ4_Alcohol_b; - } - else if(nameLectureRequeired == "smoke") - { - _nameLectureRequeired = "smoke"; - _a = MQ4_smoke_a; - _b = MQ4_smoke_b; - } - } - else if(_type == 5) - { - if(nameLectureRequeired == "H2") - { - _nameLectureRequeired = "H2"; - _a = MQ5_H2_a; - _b = MQ5_H2_b; - } - else if(nameLectureRequeired == "LPG") - { - _nameLectureRequeired = "LPG"; - _a = MQ5_LPG_a; - _b = MQ5_LPG_b; - } - else if(nameLectureRequeired == "CH4") - { - _nameLectureRequeired = "CH4"; - _a = MQ5_CH4_a; - _b = MQ5_CH4_b; - } - else if(nameLectureRequeired == "CO") - { - _nameLectureRequeired = "CO"; - _a = MQ5_CO_a; - _b = MQ5_CO_b; - } - else if(nameLectureRequeired == "Alcohol") - { - _nameLectureRequeired = "Alcohol"; - _a = MQ5_Alcohol_a; - _b = MQ5_Alcohol_b; - } - } - else if(_type == 6) - { - if(nameLectureRequeired == "H2") - { - _nameLectureRequeired = "H2"; - _a = MQ6_H2_a; - _b = MQ6_H2_b; - } - else if(nameLectureRequeired == "LPG") - { - _nameLectureRequeired = "LPG"; - _a = MQ6_LPG_a; - _b = MQ6_LPG_b; - } - else if(nameLectureRequeired == "CH4") - { - _nameLectureRequeired = "CH4"; - _a = MQ6_CH4_a; - _b = MQ6_CH4_b; - } - else if(nameLectureRequeired == "CO") - { - _nameLectureRequeired = "CO"; - _a = MQ6_CO_a; - _b = MQ6_CO_b; - } - else if(nameLectureRequeired == "Alcohol") - { - _nameLectureRequeired = "Alcohol"; - _a = MQ6_Alcohol_a; - _b = MQ6_Alcohol_b; - } - } - else if(_type == 7) - { - if(nameLectureRequeired == "H2") - { - _nameLectureRequeired = "H2"; - _a = MQ7_H2_a; - _b = MQ7_H2_b; - } - else if(nameLectureRequeired == "LPG") - { - _nameLectureRequeired = "LPG"; - _a = MQ7_LPG_a; - _b = MQ7_LPG_b; - } - else if(nameLectureRequeired == "CH4") - { - _nameLectureRequeired = "CH4"; - _a = MQ7_CH4_a; - _b = MQ7_CH4_b; - } - else if(nameLectureRequeired == "CO") - { - _nameLectureRequeired = "CO"; - _a = MQ7_CO_a; - _b = MQ7_CO_b; - } - else if(nameLectureRequeired == "Alcohol") - { - _nameLectureRequeired = "Alcohol"; - _a = MQ7_Alcohol_a; - _b = MQ7_Alcohol_b; - } - } - else if(_type == 8) - { - if(nameLectureRequeired == "H2") - { - _nameLectureRequeired = "H2"; - _a = MQ8_H2_a; - _b = MQ8_H2_b; - } - else if(nameLectureRequeired == "LPG") - { - _nameLectureRequeired = "LPG"; - _a = MQ8_LPG_a; - _b = MQ8_LPG_b; - } - else if(nameLectureRequeired == "CH4") - { - _nameLectureRequeired = "CH4"; - _a = MQ8_CH4_a; - _b = MQ8_CH4_b; - } - else if(nameLectureRequeired == "CO") - { - _nameLectureRequeired = "CO"; - _a = MQ8_CO_a; - _b = MQ8_CO_b; - } - else if(nameLectureRequeired == "Alcohol") - { - _nameLectureRequeired = "Alcohol"; - _a = MQ8_Alcohol_a; - _b = MQ8_Alcohol_b; - } - } - else if(_type == 9) - { - if(nameLectureRequeired == "LPG") - { - _nameLectureRequeired = "LPG"; - _a = MQ9_LPG_a; - _b = MQ9_LPG_b; - } - else if(nameLectureRequeired == "CH4") - { - _nameLectureRequeired = "CH4"; - _a = MQ9_CH4_a; - _b = MQ9_CH4_b; - } - else if(nameLectureRequeired == "CO") - { - _nameLectureRequeired = "CO"; - _a = MQ9_CO_a; - _b = MQ9_CO_b; - } - } - else if(_type == 131) - { - if(nameLectureRequeired == "NOx") - { - _nameLectureRequeired = "NOx"; - _a = MQ131_NOx_a; - _b = MQ131_NOx_b; - } - else if(nameLectureRequeired == "CL2") - { - _nameLectureRequeired = "CL2"; - _a = MQ131_CL2_a; - _b = MQ131_CL2_b; - } - else if(nameLectureRequeired == "O3") - { - _nameLectureRequeired = "O3"; - _a = MQ131_O3_a; - _b = MQ131_O3_b; - } - } - else if(_type == 135) - { - if(nameLectureRequeired == "CO") - { - _nameLectureRequeired = "CO"; - _a = MQ135_CO_a; - _b = MQ135_CO_b; - } - else if(nameLectureRequeired == "Alcohol") - { - _nameLectureRequeired = "Alcohol"; - _a = MQ135_Alcohol_a; - _b = MQ135_Alcohol_b; - } - else if(nameLectureRequeired == "CO2") - { - _nameLectureRequeired = "CO2"; - _a = MQ135_CO2_a; - _b = MQ135_CO2_b; - } - else if(nameLectureRequeired == "Tolueno") - { - _nameLectureRequeired = "Tolueno"; - _a = MQ135_Tolueno_a; - _b = MQ135_Tolueno_b; - } - else if(nameLectureRequeired == "NH4") - { - _nameLectureRequeired = "NH4"; - _a = MQ135_NH4_a; - _b = MQ135_NH4_b; - } - else if(nameLectureRequeired == "Acetona") - { - _nameLectureRequeired = "Acetona"; - _a = MQ135_Acetona_a; - _b = MQ135_Acetona_b; - } - } - else if(_type == 303) - { - if(nameLectureRequeired == "Iso_butano") - { - _nameLectureRequeired = "Iso_butano"; - _a = MQ303_Iso_butano_a; - _b = MQ303_Iso_butano_b; - } - else if(nameLectureRequeired == "Hydrogeno") - { - _nameLectureRequeired = "Hydrogeno"; - _a = MQ303_Hydrogeno_a; - _b = MQ303_Hydrogeno_b; - } - else if(nameLectureRequeired == "Ethanol") - { - _nameLectureRequeired = "Ethanol"; - _a = MQ303_Ethanol_a; - _b = MQ303_Ethanol_b; - } - } - else if(_type == 309) - { - if(nameLectureRequeired == "H2") - { - _nameLectureRequeired = "H2"; - _a = MQ309_H2_a; - _b = MQ309_H2_b; - } - else if(nameLectureRequeired == "CH4") - { - _nameLectureRequeired = "CH4"; - _a = MQ309_CH4_a; - _b = MQ309_CH4_b; - } - else if(nameLectureRequeired == "CO") - { - _nameLectureRequeired = "CO"; - _a = MQ309_CO_a; - _b = MQ309_CO_b; - } - else if(nameLectureRequeired == "Alcohol") - { - _nameLectureRequeired = "Alcohol"; - _a = MQ309_Alcohol_a; - _b = MQ309_Alcohol_b; - } - } - //Serial debugging -} float MQUnifiedsensor::calibrate(boolean print) { //More explained in: https://jayconsystems.com/blog/understanding-a-gas-sensor /* @@ -548,7 +124,8 @@ double MQUnifiedsensor::getVoltage(int read) { { double avg = 0.0; for (int i = 0; i < retries; i ++) { - avg += analogRead(this->_pin); + _adc = analogRead(this->_pin); + avg += _adc; delay(retry_interval); } voltage = (avg/ retries) * _VOLT_RESOLUTION / (pow(2, ADC_RESOLUTION) - 1); @@ -576,57 +153,6 @@ double MQUnifiedsensor::getRL() { return _RLValue; } -void MQUnifiedsensor::setDefaultGas() -{ - if(_type == 2) - { - _nameLectureRequeired = defaultMQ2; - } - else if(_type == 3) - { - _nameLectureRequeired = defaultMQ3; - } - else if(_type == 4) - { - _nameLectureRequeired = defaultMQ4; - } - else if(_type == 5) - { - _nameLectureRequeired = defaultMQ5; - } - else if(_type == 6) - { - _nameLectureRequeired = defaultMQ6; - } - else if(_type == 7) - { - _nameLectureRequeired = defaultMQ7; - } - else if(_type == 8) - { - _nameLectureRequeired = defaultMQ8; - } - else if(_type == 9) - { - _nameLectureRequeired = defaultMQ9; - } - else if(_type == 131) - { - _nameLectureRequeired = defaultMQ131; - } - else if(_type == 135) - { - _nameLectureRequeired = defaultMQ135; - } - else if(_type == 303) - { - _nameLectureRequeired = defaultMQ303; - } - else if(_type == 309) - { - _nameLectureRequeired = defaultMQ309; - } -} double MQUnifiedsensor::stringToDouble(String & str) { return atof( str.c_str() ); diff --git a/src/MQUnifiedsensor.h b/src/MQUnifiedsensor.h index 919af49..b74b478 100644 --- a/src/MQUnifiedsensor.h +++ b/src/MQUnifiedsensor.h @@ -13,40 +13,36 @@ class MQUnifiedsensor { public: - MQUnifiedsensor(int pin, int type); + MQUnifiedsensor(String Placa = "Arduino", int Voltage_Resolution = 5, int pin, String type); //Functions to set values void inicializar(); void update(); void setR0(double R0 = 10); void setRL(double RL = 10); - void setVoltResolution(float voltaje = 5); - void setSensorCharacteristics(String nameLectureReqeuired = "", bool print = false); - void setDefaultGas(); + void setVoltResolution(double voltage_resolution = 5); + void serialDebug(boolean onSetup = false); //Show on serial port information about sensor //user functions float calibrate(boolean print = false); - float readSensor(String nameLectureRequeired = "", bool print = false); + float readSensor(