-
Notifications
You must be signed in to change notification settings - Fork 64
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
952a456
commit e07c4b7
Showing
1 changed file
with
93 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
// This is an example of implementation using ESP8266 | ||
// Never connect the sensor direct to the ESP8266, sensor high level is 5V | ||
// ADC of ESP8266 high level is 3.3 | ||
// To connect use a voltage divisor, where 5V will 3v3 on the middle point like | ||
// this {{URL}} | ||
|
||
/* | ||
MQUnifiedsensor Library - reading an MQSensor using ESP8266 board | ||
For this example wi will demonstrates the use a MQ3 sensor. | ||
Library originally added 01 may 2019 | ||
by Miguel A Califa, Yersson Carrillo, Ghiordy Contreras, Mario Rodriguez | ||
Added ESP8266 example | ||
29.03.2020 | ||
Wiring: | ||
https://github.com/miguel5612/MQSensorsLib_Docs/blob/master/static/img/MQ_ESP8266.PNG | ||
This example code is in the public domain. | ||
*/ | ||
|
||
//Include the library | ||
#include <MQUnifiedsensor.h> | ||
/************************Hardware Related Macros************************************/ | ||
#define Board ("ESP-32") | ||
#define Pin (A0) //Analog input 3 of your arduino | ||
/***********************Software Related Macros************************************/ | ||
#define Type ("MQ-3") //MQ3 | ||
#define Voltage_Resolution (3.3) // 3V3 <- IMPORTANT | ||
#define ADC_Bit_Resolution (12) // ESP-32 | ||
#define RatioMQ3CleanAir (60) | ||
/*****************************Globals***********************************************/ | ||
MQUnifiedsensor MQ3(Board, Voltage_Resolution, ADC_Bit_Resolution, Pin, Type); | ||
/*****************************Globals***********************************************/ | ||
|
||
void setup() { | ||
//Init the serial port communication - to debug the library | ||
Serial.begin(9600); //Init serial port | ||
|
||
//Set math model to calculate the PPM concentration and the value of constants | ||
MQ3.setRegressionMethod(1); //_PPM = a*ratio^b | ||
MQ3.setA(4.8387); MQ3.setB(-2.68); // Configurate the ecuation values to get Benzene concentration | ||
/* | ||
Exponential regression: | ||
Gas | a | b | ||
LPG | 44771 | -3.245 | ||
CH4 | 2*10^31| 19.01 | ||
CO | 521853 | -3.821 | ||
Alcohol| 0.3934 | -1.504 | ||
Benzene| 4.8387 | -2.68 | ||
Hexane | 7585.3 | -2.849 | ||
*/ | ||
|
||
/***************************** MQ Init ********************************************/ | ||
//Remarks: Configure the pin of arduino as input. | ||
/************************************************************************************/ | ||
MQ3.init(); | ||
|
||
/* | ||
//If the RL value is different from 10K please assign your RL value with the following method: | ||
MQ3.setRL(10); | ||
*/ | ||
/***************************** 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 = 1; i<=10; i ++) | ||
{ | ||
MQ3.update(); // Update data, the arduino will be read the voltage on the analog pin | ||
calcR0 += MQ3.calibrate(RatioMQ3CleanAir); | ||
Serial.print("."); | ||
} | ||
MQ3.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 ********************************************/ | ||
MQ3.serialDebug(true); | ||
} | ||
|
||
void loop() { | ||
MQ3.update(); // Update data, the arduino will be read the voltage on the analog pin | ||
MQ3.readSensor(); // Sensor will read PPM concentration using the model and a and b values setted before or in the setup | ||
MQ3.serialDebug(); // Will print the table on the serial port | ||
delay(500); //Sampling frequency | ||
} |