From 3d1bb90e38cf2d7a835617fc410e7a40dcd79ca4 Mon Sep 17 00:00:00 2001 From: miguel5612 Date: Fri, 27 Mar 2020 22:54:05 -0500 Subject: [PATCH] Changed variable types --- examples/Calibration/Calibration.ino | 16 +- examples/MQ-131/MQ-131.ino | 2 +- examples/MQ-135/MQ-135.ino | 2 +- examples/MQ-2/MQ-2.ino | 2 +- examples/MQ-3/MQ-3.ino | 2 +- examples/MQ-303A/MQ303.ino | 2 +- examples/MQ-309A/MQ-309.ino | 2 +- examples/MQ-4/MQ-4.ino | 2 +- examples/MQ-5/MQ-5.ino | 2 +- examples/MQ-6/MQ-6.ino | 2 +- examples/MQ-7/MQ-7.ino | 2 +- examples/MQ-8/MQ-8.ino | 2 +- examples/MQ-9/MQ-9.ino | 2 +- .../MQ-Board-Calibration.ino | 207 ------------------ examples/MQ-Board/MQ-Board.ino | 115 ++++++++-- examples/smokeDetector/smokeDetector.ino | 37 +++- src/MQUnifiedsensor.h | 2 +- 17 files changed, 145 insertions(+), 256 deletions(-) delete mode 100644 examples/MQ-Board-Calibration/MQ-Board-Calibration.ino diff --git a/examples/Calibration/Calibration.ino b/examples/Calibration/Calibration.ino index f94825c..ef52e71 100644 --- a/examples/Calibration/Calibration.ino +++ b/examples/Calibration/Calibration.ino @@ -19,7 +19,7 @@ //Definitions #define placa "Arduino UNO" #define Voltage_Resolution 5 -#define pin A0 //Analog input 0 of your arduino +#define pin A2 //Analog input 0 of your arduino #define type "MQ-2" //MQ2 #define ADC_Bit_Resolution 10 // For arduino UNO/MEGA/NANO @@ -40,7 +40,7 @@ //Declare Sensor -MQUnifiedsensor MQ2(placa, Voltage_Resolution, ADC_Bit_Resolution, pin2, type); +MQUnifiedsensor MQ2(placa, Voltage_Resolution, ADC_Bit_Resolution, pin, type); unsigned long contador = 0; void setup() { @@ -51,16 +51,18 @@ void setup() { //init the sensor MQ2.init(); //Print in serial monitor - Serial.print("MQ2 - Calibracion"); - Serial.print("Note - Make sure you are in a clean room and the sensor has pre-heated almost 4 hours"); - Serial.print("Autonumeric, lecture"); + Serial.println("MQ2 - Calibracion"); + Serial.println("Note - Make sure you are in a clean room and the sensor has pre-heated almost 4 hours"); + Serial.println("Autonumeric | lecture (R0)"); } void loop() { + MQ2.update(); //Read the sensor and print in serial port - int lecture = MQ2.calibrate(RatioMQ2CleanAir); + float lecture = MQ2.calibrate(RatioMQ2CleanAir); //Print in serial monitor - Serial.print(String(contador) + ","); + Serial.print(contador); + Serial.print(" | "); Serial.println(lecture); //Increment counter contador++; diff --git a/examples/MQ-131/MQ-131.ino b/examples/MQ-131/MQ-131.ino index f99378a..86cc02f 100644 --- a/examples/MQ-131/MQ-131.ino +++ b/examples/MQ-131/MQ-131.ino @@ -57,7 +57,7 @@ void setup() { // This routine not need to execute to every restart, you can load your R0 if you know the value // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor Serial.print("Calibrating please wait."); - int calcR0 = 0; + float calcR0 = 0; for(int i = 0; i<=10; i ++) { MQ131.update(); // Update data, the arduino will be read the voltage on the analog pin diff --git a/examples/MQ-135/MQ-135.ino b/examples/MQ-135/MQ-135.ino index 22721b6..9dd7017 100644 --- a/examples/MQ-135/MQ-135.ino +++ b/examples/MQ-135/MQ-135.ino @@ -60,7 +60,7 @@ void setup() { // This routine not need to execute to every restart, you can load your R0 if you know the value // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor Serial.print("Calibrating please wait."); - int calcR0 = 0; + float calcR0 = 0; for(int i = 0; i<=10; i ++) { MQ135.update(); // Update data, the arduino will be read the voltage on the analog pin diff --git a/examples/MQ-2/MQ-2.ino b/examples/MQ-2/MQ-2.ino index 7bd9276..692a3bd 100644 --- a/examples/MQ-2/MQ-2.ino +++ b/examples/MQ-2/MQ-2.ino @@ -56,7 +56,7 @@ void setup() { // This routine not need to execute to every restart, you can load your R0 if you know the value // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor Serial.print("Calibrating please wait."); - int calcR0 = 0; + float calcR0 = 0; for(int i = 0; i<=10; i ++) { MQ2.update(); // Update data, the arduino will be read the voltage on the analog pin diff --git a/examples/MQ-3/MQ-3.ino b/examples/MQ-3/MQ-3.ino index 58ddea2..3800a93 100644 --- a/examples/MQ-3/MQ-3.ino +++ b/examples/MQ-3/MQ-3.ino @@ -59,7 +59,7 @@ void setup() { // This routine not need to execute to every restart, you can load your R0 if you know the value // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor Serial.print("Calibrating please wait."); - int calcR0 = 0; + float calcR0 = 0; for(int i = 0; i<=10; i ++) { MQ3.update(); // Update data, the arduino will be read the voltage on the analog pin diff --git a/examples/MQ-303A/MQ303.ino b/examples/MQ-303A/MQ303.ino index fe96e03..e3f84d8 100644 --- a/examples/MQ-303A/MQ303.ino +++ b/examples/MQ-303A/MQ303.ino @@ -57,7 +57,7 @@ void setup() { // This routine not need to execute to every restart, you can load your R0 if you know the value // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor Serial.print("Calibrating please wait."); - int calcR0 = 0; + float calcR0 = 0; for(int i = 0; i<=10; i ++) { MQ303.update(); // Update data, the arduino will be read the voltage on the analog pin diff --git a/examples/MQ-309A/MQ-309.ino b/examples/MQ-309A/MQ-309.ino index 951b2af..04f25fd 100644 --- a/examples/MQ-309A/MQ-309.ino +++ b/examples/MQ-309A/MQ-309.ino @@ -58,7 +58,7 @@ void setup() { // This routine not need to execute to every restart, you can load your R0 if you know the value // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor Serial.print("Calibrating please wait."); - int calcR0 = 0; + float calcR0 = 0; for(int i = 0; i<=10; i ++) { MQ309.update(); // Update data, the arduino will be read the voltage on the analog pin diff --git a/examples/MQ-4/MQ-4.ino b/examples/MQ-4/MQ-4.ino index 51000ca..7481266 100644 --- a/examples/MQ-4/MQ-4.ino +++ b/examples/MQ-4/MQ-4.ino @@ -59,7 +59,7 @@ void setup() { // This routine not need to execute to every restart, you can load your R0 if you know the value // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor Serial.print("Calibrating please wait."); - int calcR0 = 0; + float calcR0 = 0; for(int i = 0; i<=10; i ++) { MQ4.update(); // Update data, the arduino will be read the voltage on the analog pin diff --git a/examples/MQ-5/MQ-5.ino b/examples/MQ-5/MQ-5.ino index d0b7c13..4118960 100644 --- a/examples/MQ-5/MQ-5.ino +++ b/examples/MQ-5/MQ-5.ino @@ -58,7 +58,7 @@ void setup() { // This routine not need to execute to every restart, you can load your R0 if you know the value // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor Serial.print("Calibrating please wait."); - int calcR0 = 0; + float calcR0 = 0; for(int i = 0; i<=10; i ++) { MQ5.update(); // Update data, the arduino will be read the voltage on the analog pin diff --git a/examples/MQ-6/MQ-6.ino b/examples/MQ-6/MQ-6.ino index 6302464..cbc2476 100644 --- a/examples/MQ-6/MQ-6.ino +++ b/examples/MQ-6/MQ-6.ino @@ -58,7 +58,7 @@ void setup() { // This routine not need to execute to every restart, you can load your R0 if you know the value // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor Serial.print("Calibrating please wait."); - int calcR0 = 0; + float calcR0 = 0; for(int i = 0; i<=10; i ++) { MQ6.update(); // Update data, the arduino will be read the voltage on the analog pin diff --git a/examples/MQ-7/MQ-7.ino b/examples/MQ-7/MQ-7.ino index 6bc96e1..f57899d 100644 --- a/examples/MQ-7/MQ-7.ino +++ b/examples/MQ-7/MQ-7.ino @@ -59,7 +59,7 @@ void setup() { // This routine not need to execute to every restart, you can load your R0 if you know the value // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor Serial.print("Calibrating please wait."); - int calcR0 = 0; + float calcR0 = 0; for(int i = 0; i<=10; i ++) { MQ7.update(); // Update data, the arduino will be read the voltage on the analog pin diff --git a/examples/MQ-8/MQ-8.ino b/examples/MQ-8/MQ-8.ino index 383a06d..1a3a21a 100644 --- a/examples/MQ-8/MQ-8.ino +++ b/examples/MQ-8/MQ-8.ino @@ -59,7 +59,7 @@ void setup() { // This routine not need to execute to every restart, you can load your R0 if you know the value // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor Serial.print("Calibrating please wait."); - int calcR0 = 0; + float calcR0 = 0; for(int i = 0; i<=10; i ++) { MQ8.update(); // Update data, the arduino will be read the voltage on the analog pin diff --git a/examples/MQ-9/MQ-9.ino b/examples/MQ-9/MQ-9.ino index 276d6bc..9c58120 100644 --- a/examples/MQ-9/MQ-9.ino +++ b/examples/MQ-9/MQ-9.ino @@ -57,7 +57,7 @@ void setup() { // This routine not need to execute to every restart, you can load your R0 if you know the value // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor Serial.print("Calibrating please wait."); - int calcR0 = 0; + float calcR0 = 0; for(int i = 0; i<=10; i ++) { MQ9.update(); // Update data, the arduino will be read the voltage on the analog pin diff --git a/examples/MQ-Board-Calibration/MQ-Board-Calibration.ino b/examples/MQ-Board-Calibration/MQ-Board-Calibration.ino deleted file mode 100644 index 2a5a298..0000000 --- a/examples/MQ-Board-Calibration/MQ-Board-Calibration.ino +++ /dev/null @@ -1,207 +0,0 @@ -/* - MQUnifiedsensor Library - calibrating an MQ2 to MQ9 - - Demonstrates the use a MQ2 sensor. - Library originally added 01 may 2019 - by Miguel A Califa, Yersson Carrillo, Ghiordy Contreras, Mario Rodriguez - - Added example - modified 27 May 2019 - by Miguel Califa - - Added LCD - modified 26 May 2019 - by Miguel Califa - - Changed sample frecuency - modified 28 May 2019 - by Ghiordy contreras, Miguel Califa - - Added voltaje to log - modified 29 May 2019 - by Miguel Califa - - This example code is in the public domain. - -*/ - -//Include the library -#include -//And lcd library -#include -#include - -// Set the LCD address to 0x27 for a 16 chars and 2 line display -LiquidCrystal_I2C lcd(0x27, 16, 2); - -//Definitions -#define placa "Arduino Mega 2560" -#define Voltage_Resolution 5 -#define type "MQ-Board" -#define ADC_Bit_Resolution 10 // For arduino UNO/MEGA/NANO -#define pin2 A2 //Analog input 2 of your arduino -#define pin3 A3 //Analog input 3 of your arduino -#define pin4 A4 //Analog input 4 of your arduino -#define pin5 A5 //Analog input 5 of your arduino -#define pin6 A6 //Analog input 6 of your arduino -#define pin7 A7 //Analog input 7 of your arduino -#define pin8 A8 //Analog input 8 of your arduino -#define pin9 A9 //Analog input 9 of your arduino - -#define RatioMQ2CleanAir 9.83 //RS / R0 = 9.83 ppm -#define RatioMQ3CleanAir 60 //RS / R0 = 60 ppm -#define RatioMQ4CleanAir 4.4 //RS / R0 = 4.4 ppm -#define RatioMQ5CleanAir 6.5 //RS / R0 = 6.5 ppm -#define RatioMQ6CleanAir 10 //RS / R0 = 10 ppm -#define RatioMQ7CleanAir 27.5 //RS / R0 = 27.5 ppm -#define RatioMQ8CleanAir 70 //RS / R0 = 70 ppm -#define RatioMQ9CleanAir 9.6 //RS / R0 = 9.6 ppm -#define RatioMQ131CleanAir 15 //RS / R0 = 15 ppm -#define RatioMQ135CleanAir 3.6//RS / R0 = 3.6 ppm -#define RatioMQ303CleanAir 1 //RS / R0 = 1 ppm -#define RatioMQ309CleanAir 11 //RS / R0 = 11 ppm - - -#define timeDelay 500 -//Declare Sensor - -MQUnifiedsensor MQ2(placa, Voltage_Resolution, ADC_Bit_Resolution, pin2, type); -MQUnifiedsensor MQ3(placa, Voltage_Resolution, ADC_Bit_Resolution, pin3, type); -MQUnifiedsensor MQ4(placa, Voltage_Resolution, ADC_Bit_Resolution, pin4, type); -MQUnifiedsensor MQ5(placa, Voltage_Resolution, ADC_Bit_Resolution, pin5, type); -MQUnifiedsensor MQ6(placa, Voltage_Resolution, ADC_Bit_Resolution, pin6, type); -MQUnifiedsensor MQ7(placa, Voltage_Resolution, ADC_Bit_Resolution, pin7, type); -MQUnifiedsensor MQ8(placa, Voltage_Resolution, ADC_Bit_Resolution, pin8, type); -MQUnifiedsensor MQ9(placa, Voltage_Resolution, ADC_Bit_Resolution, pin9, type); - -unsigned long contador = 0; -unsigned long time = millis(); - -void setup() { - //Init serial port - Serial.begin(9600); - // initialize the LCD - lcd.begin(); - // Turn on the blacklight and print a message. - lcd.backlight(); - //Welcome message - lcd.clear(); - lcd.setCursor(0,0); - lcd.print("MQ2 to MQ9"); - lcd.setCursor(0,1); - lcd.print(" Calibrating"); - //init the sensor - - MQ2.init(); - MQ2.setRegressionMethod(1); //_PPM = a*ratio^b - MQ2.setA(574.25); MQ2.setB(-2.222); // Configurate the ecuation values to get LPG concentration - MQ2.setR0(9.659574468); - - MQ3.init(); - MQ3.setRegressionMethod(1); //_PPM = a*ratio^b - MQ3.setA(4.8387); MQ3.setB(-2.68); // Configurate the ecuation values to get Benzene concentration - MQ3.setR0(3.86018237); - - MQ4.init(); - MQ4.setRegressionMethod(1); //_PPM = a*ratio^b - MQ4.setA(1012.7); MQ4.setB(-2.786); // Configurate the ecuation values to get CH4 concentration - MQ4.setR0(3.86018237); - - MQ5.init(); - MQ5.setRegressionMethod(1); //_PPM = a*ratio^b - MQ5.setA(1163.8); MQ5.setB(-3.874); // Configurate the ecuation values to get H2 concentration - MQ5.setR0(71.100304); - - MQ6.init(); - MQ6.setRegressionMethod(1); //_PPM = a*ratio^b - MQ6.setA(2127.2); MQ6.setB(-2.526); // Configurate the ecuation values to get CH4 concentration - MQ6.setR0(13.4285714); - - MQ7.init(); - MQ7.setRegressionMethod(1); //_PPM = a*ratio^b - MQ7.setA(99.042); MQ7.setB(-1.518); // Configurate the ecuation values to get CO concentration - MQ7.setR0(4); - - MQ8.init(); - MQ8.setRegressionMethod(1); //_PPM = a*ratio^b - MQ8.setA(976.97); MQ8.setB(-0.688); // Configurate the ecuation values to get H2 concentration - MQ8.setR0(1); - - MQ9.init(); - MQ9.setRegressionMethod(1); //_PPM = a*ratio^b - MQ9.setA(1000.5); MQ9.setB(-2.186); // Configurate the ecuation values to get LPG concentration - MQ9.setR0(9.42857143); - - //Print in serial monitor - Serial.println("MQ2 to MQ9 - Calibracion"); - Serial.println("Note - Make sure you are in a clean room and the sensor has pre-heated almost 4 hours"); - Serial.println("Note - All values are in KOhms"); - Serial.println("Autonumeric, MQ2(R0), MQ3(R0), MQ4(R0), MQ5(R0), MQ6(R0), MQ7(R0), MQ8(R0), MQ9(R0), v2(VDC), v3(VDC), v4(VDC), v5(VDC), v6(VDC), v7(VDC), v8(VDC), v9(VDC)"); - //Wait one second to continue - delay(timeDelay/10); -} - -void loop() { - //Update the voltage lectures - MQ2.update(); - MQ3.update(); - MQ4.update(); - MQ5.update(); - MQ6.update(); - MQ7.update(); - MQ8.update(); - MQ9.update(); - - //Read the sensor - float lecture2 = MQ2.calibrate(RatioMQ2CleanAir); - float lecture3 = MQ3.calibrate(RatioMQ3CleanAir); - float lecture4 = MQ4.calibrate(RatioMQ4CleanAir); - float lecture5 = MQ5.calibrate(RatioMQ5CleanAir); - float lecture6 = MQ6.calibrate(RatioMQ6CleanAir); - float lecture7 = MQ7.calibrate(RatioMQ7CleanAir); - float lecture8 = MQ8.calibrate(RatioMQ8CleanAir); - float lecture9 = MQ9.calibrate(RatioMQ9CleanAir); - - //Read voltage the sensor - float v2 = MQ2.getVoltage(false); - float v3 = MQ3.getVoltage(false); - float v4 = MQ4.getVoltage(false); - float v5 = MQ5.getVoltage(false); - float v6 = MQ6.getVoltage(false); - float v7 = MQ7.getVoltage(false); - float v8 = MQ8.getVoltage(false); - float v9 = MQ9.getVoltage(false); - - - //Print in serial monitor - Serial.print(contador);Serial.print(","); - Serial.print(lecture2);Serial.print(","); - Serial.print(lecture3);Serial.print(","); - Serial.print(lecture4);Serial.print(","); - Serial.print(lecture5);Serial.print(","); - Serial.print(lecture6);Serial.print(","); - Serial.print(lecture7);Serial.print(","); - Serial.print(lecture8);Serial.print(","); - Serial.print(lecture9);Serial.print(","); - //Print voltages - Serial.print(v2);Serial.print(","); - Serial.print(v3);Serial.print(","); - Serial.print(v4);Serial.print(","); - Serial.print(v5);Serial.print(","); - Serial.print(v6);Serial.print(","); - Serial.print(v7);Serial.print(","); - Serial.print(v8);Serial.print(","); - Serial.println(v9); - - - //Print in LCD - lcd.clear(); - lcd.setCursor(0,0); - lcd.print("**CALIBRATING***"); - lcd.setCursor(0,1); - lcd.print("Time: " + String((millis() - time)/60000) + "min"); - //Increment counter - contador++; - //Wait to measure next sample - delay(timeDelay/4); -} \ No newline at end of file diff --git a/examples/MQ-Board/MQ-Board.ino b/examples/MQ-Board/MQ-Board.ino index 2ce55eb..a918fe5 100644 --- a/examples/MQ-Board/MQ-Board.ino +++ b/examples/MQ-Board/MQ-Board.ino @@ -29,7 +29,15 @@ #define pin7 A7 //Analog input 7 of your arduino #define pin8 A8 //Analog input 8 of your arduino #define pin9 A9 //Analog input 9 of your arduino -//#define calibration_button 13 //Pin to calibrate your sensor + +#define RatioMQ2CleanAir 9.83 //RS / R0 = 9.83 ppm +#define RatioMQ3CleanAir 60 //RS / R0 = 60 ppm +#define RatioMQ4CleanAir 4.4 //RS / R0 = 4.4 ppm +#define RatioMQ5CleanAir 6.5 //RS / R0 = 6.5 ppm +#define RatioMQ6CleanAir 10 //RS / R0 = 10 ppm +#define RatioMQ7CleanAir 27.5 //RS / R0 = 27.5 ppm +#define RatioMQ8CleanAir 70 //RS / R0 = 70 ppm +#define RatioMQ9CleanAir 9.6 //RS / R0 = 9.6 ppm //Declare Sensor MQUnifiedsensor MQ2(placa, Voltage_Resolution, ADC_Bit_Resolution, pin2, type); @@ -87,8 +95,75 @@ void setup() { MQ9.setRegressionMethod(1); //_PPM = a*ratio^b MQ9.setA(1000.5); MQ9.setB(-2.186); // Configurate the ecuation values to get LPG concentration MQ9.setR0(9.42857143); + + /***************************** MQ CAlibration ********************************************/ + // Explanation: + // In this routine the sensor will measure the resistance of the sensor supposing before was pre-heated + // and now is on clean air (Calibration conditions), and it will setup R0 value. + // We recomend execute this routine only on setup or on the laboratory and save on the eeprom of your arduino + // This routine not need to execute to every restart, you can load your R0 if you know the value + // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor + Serial.print("Calibrating please wait."); + float MQ2calcR0 = 0, + MQ3calcR0 = 0, + MQ4calcR0 = 0, + MQ5calcR0 = 0, + MQ6calcR0 = 0, + MQ7calcR0 = 0, + MQ8calcR0 = 0, + MQ9calcR0 = 0; + for(int i = 0; i<=20; i ++) + { + //Update the voltage lectures + MQ2.update(); + MQ3.update(); + MQ4.update(); + MQ5.update(); + MQ6.update(); + MQ7.update(); + MQ8.update(); + MQ9.update(); + + MQ2calcR0 += MQ2.calibrate(RatioMQ2CleanAir); + MQ3calcR0 += MQ2.calibrate(RatioMQ3CleanAir); + MQ4calcR0 += MQ2.calibrate(RatioMQ4CleanAir); + MQ5calcR0 += MQ2.calibrate(RatioMQ5CleanAir); + MQ6calcR0 += MQ2.calibrate(RatioMQ6CleanAir); + MQ7calcR0 += MQ2.calibrate(RatioMQ7CleanAir); + MQ8calcR0 += MQ2.calibrate(RatioMQ8CleanAir); + MQ9calcR0 += MQ2.calibrate(RatioMQ9CleanAir); + + Serial.print("."); + } + MQ2.setR0(MQ2calcR0/20); + MQ3.setR0(MQ3calcR0/20); + MQ4.setR0(MQ4calcR0/20); + MQ5.setR0(MQ5calcR0/20); + MQ6.setR0(MQ6calcR0/20); + MQ7.setR0(MQ7calcR0/20); + MQ8.setR0(MQ8calcR0/20); + MQ9.setR0(MQ9calcR0/20); + Serial.println(" done!."); + + Serial.print("Valores de R0 para cada sensor (MQ2 - MQ9):"); + Serial.print(MQ2calcR0/10); Serial.print(" | "); + Serial.print(MQ3calcR0/10); Serial.print(" | "); + Serial.print(MQ4calcR0/10); Serial.print(" | "); + Serial.print(MQ5calcR0/10); Serial.print(" | "); + Serial.print(MQ6calcR0/10); Serial.print(" | "); + Serial.print(MQ7calcR0/10); Serial.print(" | "); + Serial.print(MQ8calcR0/10); Serial.print(" | "); + Serial.print(MQ9calcR0/10); Serial.println(" |"); + + if(isinf(MQ2calcR0) || isinf(MQ3calcR0) || isinf(MQ4calcR0) || isinf(MQ5calcR0) || isinf(MQ6calcR0) || isinf(MQ7calcR0) || isinf(MQ8calcR0) || isinf(MQ9calcR0)) {Serial.println("Warning: Conection issue founded, R0 is infite (Open circuit detected) please check your wiring and supply"); while(1);} + if(MQ2calcR0 == 0 || MQ3calcR0 == 0 || MQ4calcR0 == 0 || MQ5calcR0 == 0 || MQ6calcR0 == 0 || MQ7calcR0 == 0 || MQ8calcR0 == 0 || MQ9calcR0 == 0){Serial.println("Warning: Conection issue founded, R0 is zero (Analog pin with short circuit to ground) please check your wiring and supply"); while(1);} + /***************************** MQ CAlibration ********************************************/ + //Print in serial monitor - Serial.print("MQ2 to MQ9 - lecture"); + Serial.println("MQ2 to MQ9 - lecture"); + Serial.println("*************************** Lectures from MQ-board ***************************"); + Serial.println("| LPG | Benzene | CH4 | H2 | CH4 | CO | H2 | LPG |"); + Serial.println("| MQ-2 | MQ-3 | MQ-4 | MQ-5 | MQ-6 | MQ-7 | MQ-8 | MQ-9 |"); //pinMode(calibration_button, INPUT); } @@ -125,24 +200,22 @@ void loop() { } */ //Read the sensor and print in serial port - LPG = MQ2.readSensor(); - Alcohol = MQ3.readSensor(); - CH4 = MQ4.readSensor(); - H2 = MQ5.readSensor(); - CH42 = MQ6.readSensor(); - CO = MQ7.readSensor(); - H22 = MQ8.readSensor(); - LPG2 = MQ9.readSensor(); + float MQ2Lecture = MQ2.readSensor(); + float MQ3Lecture = MQ3.readSensor(); + float MQ4Lecture = MQ4.readSensor(); + float MQ5Lecture = MQ5.readSensor(); + float MQ6Lecture = MQ6.readSensor(); + float MQ7Lecture = MQ7.readSensor(); + float MQ8Lecture = MQ8.readSensor(); + float MQ9Lecture = MQ9.readSensor(); - Serial.println("***************************"); - Serial.println("Lectures for MQ-Board"); - Serial.print("LPG: ");Serial.print(LPG,2);Serial.println(" PPM"); - Serial.print("Alcohol: ");Serial.print(Alcohol,2);Serial.println(" PPM"); - Serial.print("CH4: ");Serial.print(CH4,2);Serial.println(" PPM"); - Serial.print("H2: ");Serial.print(H2,2);Serial.println(" PPM"); - Serial.print("CH4_2: ");Serial.print(CH42,2);Serial.println(" PPM"); - Serial.print("CO: ");Serial.print(CO,2);Serial.println(" PPM"); - Serial.print("H2_2: ");Serial.print(H22,2);Serial.println(" PPM"); - Serial.print("LPG_2: ");Serial.print(LPG2,2);Serial.println(" PPM"); - Serial.println("***************************"); + Serial.print("| "); Serial.print(MQ2Lecture); + Serial.print(" | "); Serial.print(MQ3Lecture); + Serial.print(" | "); Serial.print(MQ4Lecture); + Serial.print(" | "); Serial.print(MQ5Lecture); + Serial.print(" | "); Serial.print(MQ6Lecture); + Serial.print(" | "); Serial.print(MQ7Lecture); + Serial.print(" | "); Serial.print(MQ8Lecture); + Serial.print(" | "); Serial.print(MQ9Lecture); + Serial.println("|"); } diff --git a/examples/smokeDetector/smokeDetector.ino b/examples/smokeDetector/smokeDetector.ino index 9109a2c..b8a318d 100644 --- a/examples/smokeDetector/smokeDetector.ino +++ b/examples/smokeDetector/smokeDetector.ino @@ -19,9 +19,10 @@ //Definitions #define placa "Arduino UNO" #define Voltage_Resolution 5 -#define pin A0 //Analog input 0 of your arduino +#define pin A4 //Analog input 0 of your arduino #define type "MQ-4" //MQ4 #define ADC_Bit_Resolution 10 // For arduino UNO/MEGA/NANO +#define RatioMQ4CleanAir 4.4 //RS / R0 = 4.4 ppm //#define calibration_button 13 //Pin to calibrate your sensor //Declare Sensor @@ -47,13 +48,34 @@ void setup() { /************************************************************************************/ MQ4.init(); - // Calibration setup - MQ4.setR0(3.86018237); + /***************************** MQ CAlibration ********************************************/ + // Explanation: + // In this routine the sensor will measure the resistance of the sensor supposing before was pre-heated + // and now is on clean air (Calibration conditions), and it will setup R0 value. + // We recomend execute this routine only on setup or on the laboratory and save on the eeprom of your arduino + // This routine not need to execute to every restart, you can load your R0 if you know the value + // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor + Serial.print("Calibrating please wait."); + float calcR0 = 0; + for(int i = 0; i<=10; i ++) + { + MQ4.update(); // Update data, the arduino will be read the voltage on the analog pin + calcR0 += MQ4.calibrate(RatioMQ4CleanAir); + Serial.print("."); + } + MQ4.setR0(calcR0/10); + Serial.println(" done!."); + + if(isinf(calcR0)) {Serial.println("Warning: Conection issue founded, R0 is infite (Open circuit detected) please check your wiring and supply"); while(1);} + if(calcR0 == 0){Serial.println("Warning: Conection issue founded, R0 is zero (Analog pin with short circuit to ground) please check your wiring and supply"); while(1);} + /***************************** MQ CAlibration ********************************************/ + /* //If the RL value is different from 10K please assign your RL value with the following method: MQ4.setRL(10); */ + MQ4.serialDebug(true); } void loop() { @@ -64,9 +86,8 @@ void setup() { ************************************************************************************/ //Read the sensor and print in serial port //Lecture will be saved in lecture variable - int lecture = MQ4.readSensor(); // Return smoke concentration - Serial.print("MQ4 smoke ppm lecture: "); - Serial.print(lecture); - Serial.println(" ppm"); - delay(400); + MQ4.update(); + MQ4.readSensor(); // Sensor will read PPM concentration using the model and a and b values setted before or in the setup + MQ4.serialDebug(); // Will print the table on the serial port + delay(400); } diff --git a/src/MQUnifiedsensor.h b/src/MQUnifiedsensor.h index dc35e1d..0bad32e 100644 --- a/src/MQUnifiedsensor.h +++ b/src/MQUnifiedsensor.h @@ -7,7 +7,7 @@ /***********************Software Related Macros************************************/ #define ADC_RESOLUTION 10 // for 10bit analog to digital converter. -#define retries 5 +#define retries 2 #define retry_interval 20 class MQUnifiedsensor