The virgin sensor require to run for 24 hours (the 1st time initialization).
The heater require 5V 800mW (160mA) which is a bit hot while working.
Updated: The MQ-2 sensor resistance (RS) will vary between 3 - 30 kohm while measuring gas. I don't known what it mean. Normally when measuring the clean air, the MQ-2 sensor resistance (RS) just only 10 kohm and reduce when found the gases. Look at the graph (post #5), if RO is fixed, the RS should be lowest to 0.3 kohm. The prefered range should be 0.3 to 10 kohm.
The MQ-2 sensor resistance will working as the Voltage Dividers.
Arduino: Gas Sensors MQ Series Principle
Re: Gas Sensors MQ Series Principle
RS while measuring gas can find from VOUT and the fixed RL.
The best RL value for the entire sensitivity range can find from the equation below:
The best RL value for the entire sensitivity range can find from the equation below:
Re: Gas Sensors MQ Series Principle
Updated: If we choose RS (min) = 0.5 kohm and RS (max) = 10 kohm, the best RL will be 2.2 kohm.
These are the RL calculation from the RS max & min range:
RS (min) = 0.5 kohm
RS (max) = 10 kohm
The best RL value should be 2.2 kohm which give the analog VOUT 649 scales/spreads. It is the highest resolution.
These are the RL calculation from the RS max & min range:
RS (min) = 0.5 kohm
RS (max) = 10 kohm
The best RL value should be 2.2 kohm which give the analog VOUT 649 scales/spreads. It is the highest resolution.
Re: Gas Sensors MQ Series Principle
(Reserved)
Re: Gas Sensors MQ Series Principle
To calibration, we need to find the RO value while measuring the clean air.
Since we known the ratio of the clean air from the graph is 9.83, then we can calculate RO from the equation below:
Now we can find the concentrations (ppm) of any gas from the graph from RS/RO ratio.
1. Take two points from gas graphs.
CO (x1, y1) = (log10200, log105.14)
CO (x2, y2) = (log101000, log103.14)
SMOKE (x1, y1) = (log10200, log103.43)
SMOKE (x2, y2) = (log101000, log101.89)
LPG (x1, y1) = (log10200, log101.67)
LPG (x2, y2) = (log101000, log100.78)
2. Convert to base10
CO (x1, y1) = (2.3, 0.71)
CO (x2, y2) = (3.0, 0.50)
SMOKE (x1, y1) = (2.3, 0.54)
SMOKE (x2, y2) = (3.0, 0.28)
LPG (x1, y1) = (2.3, 0.22)
LPG (x2, y2) = (3.0, -0.11)
3. Calculate the slope using formula:
slope = (y2-y1) / (x2-x1)
CO = (0.50-0.71) / (3.0-2.3) = -0.21/0.7 = -0.31
SMOKE = (0.28-0.54) / (3.0-2.3) = -0.26/0.7 = -0.37
LPG = (-0.11-0.22) / (3.0-2.3) = -0.33/0.7 = -0.47
4. Create array graph in format {x, y, slope} for a program code.
CO = {2.3, 0.71, -0.31}
SMOKE = {2.3, 0.54, -0.37}
LPG = {2.3, 0.22, -0.47}
5. Gas concentration (x2) can calculate using formula:
x2 = ( (y2-y1) / slope ) + x1
Gas concentration = 10^( ( (log10(Rs/Ro)-y1) / slope ) + x1 )
6. Arduino codes
http://exploreembedded.com/wiki/Interfacing_Gas_Sensor
https://github.com/zesteros/ArduinoAirQualityMonitor
Since we known the ratio of the clean air from the graph is 9.83, then we can calculate RO from the equation below:
Now we can find the concentrations (ppm) of any gas from the graph from RS/RO ratio.
1. Take two points from gas graphs.
CO (x1, y1) = (log10200, log105.14)
CO (x2, y2) = (log101000, log103.14)
SMOKE (x1, y1) = (log10200, log103.43)
SMOKE (x2, y2) = (log101000, log101.89)
LPG (x1, y1) = (log10200, log101.67)
LPG (x2, y2) = (log101000, log100.78)
2. Convert to base10
CO (x1, y1) = (2.3, 0.71)
CO (x2, y2) = (3.0, 0.50)
SMOKE (x1, y1) = (2.3, 0.54)
SMOKE (x2, y2) = (3.0, 0.28)
LPG (x1, y1) = (2.3, 0.22)
LPG (x2, y2) = (3.0, -0.11)
3. Calculate the slope using formula:
slope = (y2-y1) / (x2-x1)
CO = (0.50-0.71) / (3.0-2.3) = -0.21/0.7 = -0.31
SMOKE = (0.28-0.54) / (3.0-2.3) = -0.26/0.7 = -0.37
LPG = (-0.11-0.22) / (3.0-2.3) = -0.33/0.7 = -0.47
4. Create array graph in format {x, y, slope} for a program code.
CO = {2.3, 0.71, -0.31}
SMOKE = {2.3, 0.54, -0.37}
LPG = {2.3, 0.22, -0.47}
5. Gas concentration (x2) can calculate using formula:
x2 = ( (y2-y1) / slope ) + x1
Gas concentration = 10^( ( (log10(Rs/Ro)-y1) / slope ) + x1 )
6. Arduino codes
Code: Select all
float Graph_CO[3] = {2.3, 0.71, -0.31};
float Graph_Smoke[3] = {2.3, 0.54, -0.37};
float Graph_LPG[3] = {2.3, 0.22, -0.47};
int GetPPM(float RS_RO_Ratio, float *Graph)
{
return (pow(10,(((log10(RS_RO_Ratio)-Graph[1])/Graph[2])+Graph[0])));
}
https://github.com/zesteros/ArduinoAirQualityMonitor
Re: Gas Sensors MQ Series Principle
The FC-22 Gas Sensor Module use RL = 1 kohm.
These module will give 589 spreads.
The module also power down the heater by connected the resistor 5.1 ohm.
PS: Some modules use RL = 5 kohm which give 589 spreads too.
These module will give 589 spreads.
The module also power down the heater by connected the resistor 5.1 ohm.
PS: Some modules use RL = 5 kohm which give 589 spreads too.
Re: Gas Sensors MQ Series Principle
Code: Select all
const int MQ_PIN = A1; // Beware pin A4 and A5, they are SDA and SCL.
const float RL = 1.0; // kohm (FC-22 module = 1.0 kohm)
const float CLEAN_AIR_RATIO = 9.83; // Taken from datasheet graph
float RS; // kohm
float RO; // kohm
int ADC; // Give value only 0 to 1023. But in fact 5V is 1024. See datasheet.
ADC = analogRead(MQ_PIN);
RS = RL * (1024.0 - ADC) / ADC;
RO = RS / CLEAN_AIR_RATIO; // Do only once while measuring clean air.
Re: Arduino: Gas Sensors MQ Series Principle
New updated
CLEAN AIR RATIO (Taken from datasheet log graph) MQ-2 = 9.7688 MQ-135 = 3.7941