Hi, a made YAML code for MQ2, witch output CO, Smoke and LPG level of percent.
- platform: adc # MQ2
pin: GPIO03
id: mq2_sensor
name: "mq2_sensor_raw"
update_interval: 0.5s
accuracy_decimals: 6
icon: mdi:smoke
internal: False
filters:
- sliding_window_moving_average:
window_size: 50
send_every: 2
- platform: template
id: smoke_value
name: "Smoke Level"
update_interval: 1s
accuracy_decimals: 2
unit_of_measurement: "%"
icon: mdi:smoke
lambda: |-
float Ro = 10;
float RO_CLEAN_AIR_FACTOR = 9.83;
float RL_VALUE = 5;
float adc_bit= 4095;
float raw_value = id(mq2_sensor).state;
float SmokeCurve[3] = { 2.3, 0.53, -0.44 } ;
Ro = ((((float)RL_VALUE*(adc_bit-raw_value)/raw_value)))/ RO_CLEAN_AIR_FACTOR;
float rs_ro_ratio = ((((float)RL_VALUE*(adc_bit-raw_value)/raw_value)))/Ro ;
return (pow(10,( ((log(rs_ro_ratio)-SmokeCurve[1])/SmokeCurve[2]) + SmokeCurve[0])))*100;
- platform: template
id: lpg_value
name: "LPG Level"
update_interval: 1s
accuracy_decimals: 2
unit_of_measurement: "%"
icon: mdi:gas-burner
lambda: |-
float Ro = 10;
float RO_CLEAN_AIR_FACTOR = 9.83;
float RL_VALUE = 5;
float adc_bit= 4095;
float raw_value = id(mq2_sensor).state;
float LPGCurve[3] = { 2.3, 0.21, -0.47 } ;
Ro = ((((float)RL_VALUE*(adc_bit-raw_value)/raw_value)))/ RO_CLEAN_AIR_FACTOR;
float rs_ro_ratio = ((((float)RL_VALUE*(adc_bit-raw_value)/raw_value)))/Ro ;
return (pow(10,( ((log(rs_ro_ratio)-LPGCurve[1])/LPGCurve[2]) + LPGCurve[0])))*100;
- platform: template
id: co_value
name: "CO Level"
update_interval: 1s
accuracy_decimals: 2
unit_of_measurement: "%"
icon: mdi:molecule-co
lambda: |-
float Ro = 10;
float RO_CLEAN_AIR_FACTOR = 9.83;
float RL_VALUE = 5;
float adc_bit= 4095;
float raw_value = id(mq2_sensor).state;
float LPGCurve[3] = { 2.3, 0.72, -0.34} ;
Ro = ((((float)RL_VALUE*(adc_bit-raw_value)/raw_value)))/ RO_CLEAN_AIR_FACTOR;
float rs_ro_ratio = ((((float)RL_VALUE*(adc_bit-raw_value)/raw_value)))/Ro ;
return (pow(10,( ((log(rs_ro_ratio)-LPGCurve[1])/LPGCurve[2]) + LPGCurve[0])))*100;
MQ-2 sensor work with 5 V
in code you can change
pin: GPIO03 # Sensor AO pin for your esp GPIO pin
adc_bit= 4095 # your esp GPIO bit value, change value with for 10-bit value 1023, 12-bit value 4095
All calculation from Manufactor Web Site