Fixed issue reading voltaje and update MQ3 Example

This commit is contained in:
miguel5612 2019-08-14 21:33:24 -05:00
parent 8a929cff7f
commit 067ffa76eb
3 changed files with 155 additions and 135 deletions

View File

@ -17,14 +17,17 @@
#include <MQUnifiedsensor.h>
//Definitions
#define pin A0 //Analog input 0 of your arduino
#define pin A3 //Analog input 0 of your arduino
#define type 3 //MQ3
//Declare Sensor
MQUnifiedsensor MQ3(pin, type);
//Variables
float CH4, LPG, CO, Alcohol, Hexane, Benzine;
void setup() {
Serial.begin(9600);
//init the sensor
/***************************** MQInicializar****************************************
Input: pin, type
@ -35,6 +38,7 @@ void setup() {
}
void loop() {
MQ3.update(); // Update data, the arduino will be read the voltaje in the analog pin
/***************************** MQReadSensor ****************************************
Input: Gas - Serial print flag
Output: Value in PPM
@ -42,12 +46,25 @@ void loop() {
************************************************************************************/
//Read the sensor and print in serial port
//Lecture will be saved in lecture variable
int lecture = MQ3.readSensor("", true); // Return Alcohol concentration
//float lecture = MQ3.readSensor("", true); // Return Alcohol concentration
// Options, uncomment where you need
//int lecture = MQ3.readSensor("CH4", true); // Return CH4 concentration
//int lecture = MQ3.readSensor("LPG", true); // Return LPG concentration
//int lecture = MQ3.readSensor("CO", true); // Return CO concentration
//int lecture = MQ3.readSensor("Alcohol", true); // Return Alcohol concentration
//int lecture = MQ3.readSensor("Hexane", true); // Return Hexane concentration
//int lecture = MQ3.readSensor("Benzene", true); // Return Benzene concentration
CH4 = MQ3.readSensor("CH4"); // Return CH4 concentration
LPG = MQ3.readSensor("LPG"); // Return LPG concentration
CO = MQ3.readSensor("CO"); // Return CO concentration
Alcohol = MQ3.readSensor("Alcohol"); // Return Alcohol concentration
Hexane = MQ3.readSensor("Hexane"); // Return Hexane concentration
Benzine = MQ3.readSensor("Benzene"); // Return Benzene concentration
Serial.println("***************************");
Serial.println("Lectures for MQ-3");
Serial.print("Volt: ");Serial.print(MQ3.getVoltage(false));Serial.println(" V");
Serial.print("R0: ");Serial.print(MQ3.getR0());Serial.println(" Ohm");
Serial.print("CH4: ");Serial.print(CH4,2);Serial.println(" mg/L");
Serial.print("LPG: ");Serial.print(LPG,2);Serial.println(" mg/L");
Serial.print("CO: ");Serial.print(CO,2);Serial.println(" mg/L");
Serial.print("Alcohol: ");Serial.print(Alcohol,2);Serial.println(" mg/L");
Serial.print("Hexane: ");Serial.print(Hexane,2);Serial.println(" mg/L");
Serial.print("Benzine: ");Serial.print(Benzine,2);Serial.println(" mg/L");
Serial.println("***************************");
}

View File

@ -102,12 +102,12 @@ void MQUnifiedsensor::inicializar()
{
pinMode(_pin, INPUT);
}
int MQUnifiedsensor::readSensor(String nameLectureRequeired, bool print)
float MQUnifiedsensor::readSensor(String nameLectureRequeired, bool print)
{
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);
_PPM= _a*pow(_ratio, _b);
if(print)
{
@ -116,7 +116,7 @@ int MQUnifiedsensor::readSensor(String nameLectureRequeired, bool print)
Serial.println("* Sensor: MQ-" + String(_type));
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("* PPM = " + String(_a) + "*pow(" + String(_ratio) + "," + String(_b) + ")");
Serial.println("* Lectura(" + nameLecture + ") = " + String(_PPM) + " PPM");
Serial.println("**********************");
}
@ -148,379 +148,379 @@ void MQUnifiedsensor::setSensorCharacteristics(String nameLectureRequeired, bool
*/
if(_type == 2)
{
if(_nameLectureRequeired == "H2")
if(nameLectureRequeired == "H2")
{
_nameLectureRequeired = "H2";
_a = MQ2_H2_m;
_a = MQ2_H2_a;
_b = MQ2_H2_b;
}
else if(_nameLectureRequeired == "LPG")
else if(nameLectureRequeired == "LPG")
{
_nameLectureRequeired = "LPG";
_a = MQ2_LPG_m;
_a = MQ2_LPG_a;
_b = MQ2_LPG_b;
}
else if(_nameLectureRequeired == "CO")
else if(nameLectureRequeired == "CO")
{
_nameLectureRequeired = "CO";
_a = MQ2_CO_m;
_a = MQ2_CO_a;
_b = MQ2_CO_b;
}
else if(_nameLectureRequeired == "Alcohol")
else if(nameLectureRequeired == "Alcohol")
{
_nameLectureRequeired = "Alcohol";
_a = MQ2_Alcohol_m;
_a = MQ2_Alcohol_a;
_b = MQ2_Alcohol_b;
}
else if(_nameLectureRequeired == "Propane")
else if(nameLectureRequeired == "Propane")
{
_nameLectureRequeired = "Propane";
_a = MQ2_Propane_m;
_a = MQ2_Propane_a;
_b = MQ2_Propane_b;
}
else if(_nameLectureRequeired == "Benzene")
else if(nameLectureRequeired == "Benzene")
{
_nameLectureRequeired = "Benzene";
_a = MQ2_Benzene_m;
_a = MQ2_Benzene_a;
_b = MQ2_Benzene_b;
}
}
else if(_type == 3)
{
if(_nameLectureRequeired == "LPG")
if(nameLectureRequeired == "LPG")
{
_nameLectureRequeired = "LPG";
_a = MQ3_LPG_m;
_a = MQ3_LPG_a;
_b = MQ3_LPG_b;
}
else if(_nameLectureRequeired == "CH4")
else if(nameLectureRequeired == "CH4")
{
_nameLectureRequeired = "CH4";
_a = MQ3_CH4_m;
_a = MQ3_CH4_a;
_b = MQ3_CH4_b;
}
else if(_nameLectureRequeired == "CO")
else if(nameLectureRequeired == "CO")
{
_nameLectureRequeired = "CO";
_a = MQ3_CO_m;
_a = MQ3_CO_a;
_b = MQ3_CO_b;
}
else if(_nameLectureRequeired == "Alcohol")
else if(nameLectureRequeired == "Alcohol")
{
_nameLectureRequeired = "Alcohol";
_a = MQ3_Alcohol_m;
_a = MQ3_Alcohol_a;
_b = MQ3_Alcohol_b;
}
else if(_nameLectureRequeired == "Hexane")
else if(nameLectureRequeired == "Hexane")
{
_nameLectureRequeired = "Hexane";
_a = MQ3_Hexane_m;
_a = MQ3_Hexane_a;
_b = MQ3_Hexane_b;
}
else if(_nameLectureRequeired == "Benzene")
else if(nameLectureRequeired == "Benzene")
{
_nameLectureRequeired = "Benzene";
_a = MQ3_Benzene_m;
_a = MQ3_Benzene_a;
_b = MQ3_Benzene_b;
}
}
else if(_type == 4)
{
if(_nameLectureRequeired == "LPG")
if(nameLectureRequeired == "LPG")
{
_nameLectureRequeired = "LPG";
_a = MQ4_LPG_m;
_a = MQ4_LPG_a;
_b = MQ4_LPG_b;
}
else if(_nameLectureRequeired == "CH4")
else if(nameLectureRequeired == "CH4")
{
_nameLectureRequeired = "CH4";
_a = MQ4_CH4_m;
_a = MQ4_CH4_a;
_b = MQ4_CH4_b;
}
else if(_nameLectureRequeired == "CO")
else if(nameLectureRequeired == "CO")
{
_nameLectureRequeired = "CO";
_a = MQ4_CO_m;
_a = MQ4_CO_a;
_b = MQ4_CO_b;
}
else if(_nameLectureRequeired == "Alcohol")
else if(nameLectureRequeired == "Alcohol")
{
_nameLectureRequeired = "Alcohol";
_a = MQ4_Alcohol_m;
_a = MQ4_Alcohol_a;
_b = MQ4_Alcohol_b;
}
else if(_nameLectureRequeired == "smoke")
else if(nameLectureRequeired == "smoke")
{
_nameLectureRequeired = "smoke";
_a = MQ4_smoke_m;
_a = MQ4_smoke_a;
_b = MQ4_smoke_b;
}
}
else if(_type == 5)
{
if(_nameLectureRequeired == "H2")
if(nameLectureRequeired == "H2")
{
_nameLectureRequeired = "H2";
_a = MQ5_H2_m;
_a = MQ5_H2_a;
_b = MQ5_H2_b;
}
else if(_nameLectureRequeired == "LPG")
else if(nameLectureRequeired == "LPG")
{
_nameLectureRequeired = "LPG";
_a = MQ5_LPG_m;
_a = MQ5_LPG_a;
_b = MQ5_LPG_b;
}
else if(_nameLectureRequeired == "CH4")
else if(nameLectureRequeired == "CH4")
{
_nameLectureRequeired = "CH4";
_a = MQ5_CH4_m;
_a = MQ5_CH4_a;
_b = MQ5_CH4_b;
}
else if(_nameLectureRequeired == "CO")
else if(nameLectureRequeired == "CO")
{
_nameLectureRequeired = "CO";
_a = MQ5_CO_m;
_a = MQ5_CO_a;
_b = MQ5_CO_b;
}
else if(_nameLectureRequeired == "Alcohol")
else if(nameLectureRequeired == "Alcohol")
{
_nameLectureRequeired = "Alcohol";
_a = MQ5_Alcohol_m;
_a = MQ5_Alcohol_a;
_b = MQ5_Alcohol_b;
}
}
else if(_type == 6)
{
if(_nameLectureRequeired == "H2")
if(nameLectureRequeired == "H2")
{
_nameLectureRequeired = "H2";
_a = MQ6_H2_m;
_a = MQ6_H2_a;
_b = MQ6_H2_b;
}
else if(_nameLectureRequeired == "LPG")
else if(nameLectureRequeired == "LPG")
{
_nameLectureRequeired = "LPG";
_a = MQ6_LPG_m;
_a = MQ6_LPG_a;
_b = MQ6_LPG_b;
}
else if(_nameLectureRequeired == "CH4")
else if(nameLectureRequeired == "CH4")
{
_nameLectureRequeired = "CH4";
_a = MQ6_CH4_m;
_a = MQ6_CH4_a;
_b = MQ6_CH4_b;
}
else if(_nameLectureRequeired == "CO")
else if(nameLectureRequeired == "CO")
{
_nameLectureRequeired = "CO";
_a = MQ6_CO_m;
_a = MQ6_CO_a;
_b = MQ6_CO_b;
}
else if(_nameLectureRequeired == "Alcohol")
else if(nameLectureRequeired == "Alcohol")
{
_nameLectureRequeired = "Alcohol";
_a = MQ6_Alcohol_m;
_a = MQ6_Alcohol_a;
_b = MQ6_Alcohol_b;
}
}
else if(_type == 7)
{
if(_nameLectureRequeired == "H2")
if(nameLectureRequeired == "H2")
{
_nameLectureRequeired = "H2";
_a = MQ7_H2_m;
_a = MQ7_H2_a;
_b = MQ7_H2_b;
}
else if(_nameLectureRequeired == "LPG")
else if(nameLectureRequeired == "LPG")
{
_nameLectureRequeired = "LPG";
_a = MQ7_LPG_m;
_a = MQ7_LPG_a;
_b = MQ7_LPG_b;
}
else if(_nameLectureRequeired == "CH4")
else if(nameLectureRequeired == "CH4")
{
_nameLectureRequeired = "CH4";
_a = MQ7_CH4_m;
_a = MQ7_CH4_a;
_b = MQ7_CH4_b;
}
else if(_nameLectureRequeired == "CO")
else if(nameLectureRequeired == "CO")
{
_nameLectureRequeired = "CO";
_a = MQ7_CO_m;
_a = MQ7_CO_a;
_b = MQ7_CO_b;
}
else if(_nameLectureRequeired == "Alcohol")
else if(nameLectureRequeired == "Alcohol")
{
_nameLectureRequeired = "Alcohol";
_a = MQ7_Alcohol_m;
_a = MQ7_Alcohol_a;
_b = MQ7_Alcohol_b;
}
}
else if(_type == 8)
{
if(_nameLectureRequeired == "H2")
if(nameLectureRequeired == "H2")
{
_nameLectureRequeired = "H2";
_a = MQ8_H2_m;
_a = MQ8_H2_a;
_b = MQ8_H2_b;
}
else if(_nameLectureRequeired == "LPG")
else if(nameLectureRequeired == "LPG")
{
_nameLectureRequeired = "LPG";
_a = MQ8_LPG_m;
_a = MQ8_LPG_a;
_b = MQ8_LPG_b;
}
else if(_nameLectureRequeired == "CH4")
else if(nameLectureRequeired == "CH4")
{
_nameLectureRequeired = "CH4";
_a = MQ8_CH4_m;
_a = MQ8_CH4_a;
_b = MQ8_CH4_b;
}
else if(_nameLectureRequeired == "CO")
else if(nameLectureRequeired == "CO")
{
_nameLectureRequeired = "CO";
_a = MQ8_CO_m;
_a = MQ8_CO_a;
_b = MQ8_CO_b;
}
else if(_nameLectureRequeired == "Alcohol")
else if(nameLectureRequeired == "Alcohol")
{
_nameLectureRequeired = "Alcohol";
_a = MQ8_Alcohol_m;
_a = MQ8_Alcohol_a;
_b = MQ8_Alcohol_b;
}
}
else if(_type == 9)
{
if(_nameLectureRequeired == "LPG")
if(nameLectureRequeired == "LPG")
{
_nameLectureRequeired = "LPG";
_a = MQ9_LPG_m;
_a = MQ9_LPG_a;
_b = MQ9_LPG_b;
}
else if(_nameLectureRequeired == "CH4")
else if(nameLectureRequeired == "CH4")
{
_nameLectureRequeired = "CH4";
_a = MQ9_CH4_m;
_a = MQ9_CH4_a;
_b = MQ9_CH4_b;
}
else if(_nameLectureRequeired == "CO")
else if(nameLectureRequeired == "CO")
{
_nameLectureRequeired = "CO";
_a = MQ9_CO_m;
_a = MQ9_CO_a;
_b = MQ9_CO_b;
}
}
else if(_type == 131)
{
if(_nameLectureRequeired == "NOx")
if(nameLectureRequeired == "NOx")
{
_nameLectureRequeired = "NOx";
_a = MQ131_NOx_m;
_a = MQ131_NOx_a;
_b = MQ131_NOx_b;
}
else if(_nameLectureRequeired == "CL2")
else if(nameLectureRequeired == "CL2")
{
_nameLectureRequeired = "CL2";
_a = MQ131_CL2_m;
_a = MQ131_CL2_a;
_b = MQ131_CL2_b;
}
else if(_nameLectureRequeired == "O3")
else if(nameLectureRequeired == "O3")
{
_nameLectureRequeired = "O3";
_a = MQ131_O3_m;
_a = MQ131_O3_a;
_b = MQ131_O3_b;
}
}
else if(_type == 135)
{
if(_nameLectureRequeired == "CO")
if(nameLectureRequeired == "CO")
{
_nameLectureRequeired = "CO";
_a = MQ135_CO_m;
_a = MQ135_CO_a;
_b = MQ135_CO_b;
}
else if(_nameLectureRequeired == "Alcohol")
else if(nameLectureRequeired == "Alcohol")
{
_nameLectureRequeired = "Alcohol";
_a = MQ135_Alcohol_m;
_a = MQ135_Alcohol_a;
_b = MQ135_Alcohol_b;
}
else if(_nameLectureRequeired == "CO2")
else if(nameLectureRequeired == "CO2")
{
_nameLectureRequeired = "CO2";
_a = MQ135_CO2_m;
_a = MQ135_CO2_a;
_b = MQ135_CO2_b;
}
else if(_nameLectureRequeired == "Tolueno")
else if(nameLectureRequeired == "Tolueno")
{
_nameLectureRequeired = "Tolueno";
_a = MQ135_Tolueno_m;
_a = MQ135_Tolueno_a;
_b = MQ135_Tolueno_b;
}
else if(_nameLectureRequeired == "NH4")
else if(nameLectureRequeired == "NH4")
{
_nameLectureRequeired = "NH4";
_a = MQ135_NH4_m;
_a = MQ135_NH4_a;
_b = MQ135_NH4_b;
}
else if(_nameLectureRequeired == "Acetona")
else if(nameLectureRequeired == "Acetona")
{
_nameLectureRequeired = "Acetona";
_a = MQ135_Acetona_m;
_a = MQ135_Acetona_a;
_b = MQ135_Acetona_b;
}
}
else if(_type == 303)
{
if(_nameLectureRequeired == "Iso_butano")
if(nameLectureRequeired == "Iso_butano")
{
_nameLectureRequeired = "Iso_butano";
_a = MQ303_Iso_butano_m;
_a = MQ303_Iso_butano_a;
_b = MQ303_Iso_butano_b;
}
else if(_nameLectureRequeired == "Hydrogeno")
else if(nameLectureRequeired == "Hydrogeno")
{
_nameLectureRequeired = "Hydrogeno";
_a = MQ303_Hydrogeno_m;
_a = MQ303_Hydrogeno_a;
_b = MQ303_Hydrogeno_b;
}
else if(_nameLectureRequeired == "Ethanol")
else if(nameLectureRequeired == "Ethanol")
{
_nameLectureRequeired = "Ethanol";
_a = MQ303_Ethanol_m;
_a = MQ303_Ethanol_a;
_b = MQ303_Ethanol_b;
}
}
else if(_type == 309)
{
if(_nameLectureRequeired == "H2")
if(nameLectureRequeired == "H2")
{
_nameLectureRequeired = "H2";
_a = MQ309_H2_m;
_a = MQ309_H2_a;
_b = MQ309_H2_b;
}
else if(_nameLectureRequeired == "CH4")
else if(nameLectureRequeired == "CH4")
{
_nameLectureRequeired = "CH4";
_a = MQ309_CH4_m;
_a = MQ309_CH4_a;
_b = MQ309_CH4_b;
}
else if(_nameLectureRequeired == "CO")
else if(nameLectureRequeired == "CO")
{
_nameLectureRequeired = "CO";
_a = MQ309_CO_m;
_a = MQ309_CO_a;
_b = MQ309_CO_b;
}
else if(_nameLectureRequeired == "Alcohol")
else if(nameLectureRequeired == "Alcohol")
{
_nameLectureRequeired = "Alcohol";
_a = MQ309_Alcohol_m;
_a = MQ309_Alcohol_a;
_b = MQ309_Alcohol_b;
}
}
//Serial debugging
}
long MQUnifiedsensor::calibrate(boolean print) {
float MQUnifiedsensor::calibrate(boolean print) {
//More explained in: https://jayconsystems.com/blog/understanding-a-gas-sensor
/*
V = I x R
@ -551,7 +551,7 @@ long MQUnifiedsensor::calibrate(boolean print) {
return R0;
}
double MQUnifiedsensor::getVoltage(int read) {
double voltage = 0;
double voltage;
if(read)
{
double avg = 0.0;
@ -561,6 +561,10 @@ double MQUnifiedsensor::getVoltage(int read) {
}
voltage = (avg/ retries) * _VOLT_RESOLUTION / (pow(2, ADC_RESOLUTION) - 1);
}
else
{
voltage = _sensor_volt;
}
return voltage;
}

View File

@ -271,18 +271,17 @@ class MQUnifiedsensor
//Functions to set values
void inicializar();
void update();
void setR0(double R0);
void setVoltResolution(float voltaje);
void setSensorCharacteristics(String nameLectureReqeuired, bool print);
void setR0(double R0 = 10);
void setVoltResolution(float voltaje = 5);
void setSensorCharacteristics(String nameLectureReqeuired = "", bool print = false);
void setDefaultGas();
//user functions
long calibrate(boolean print = false);
int readSensor(String nameLectureRequeired = "", bool print = false);
float calibrate(boolean print = false);
float readSensor(String nameLectureRequeired = "", bool print = false);
//get function for info
double getR0();
float readPPM(int m, int b);
double getVoltage(int read = true);
double stringToDouble(String & str);
String getnameLecture();