#-----------------------------------------------------------------------#
# Otbjectives: #
# - Measure Flammable Gas Concentration #
# - Blink External LEDs - If Flammable Gas Conc. is at Toxic Level #
# - Measure Default Volts on PIN 05 #
# #
# Author: Drop Bos #
# Created Date: May-05-2025 #
# Updated Date: Aug-09-2025 #
# #
# License: Apache-2.0 #
# #
# Copyright © 2025. Drop Bos. All Rights Reserved. #
# ----------------------------------------------------------------------#
from utime import sleep
from machine import Pin, ADC
print("--------------------")
print("Detecting toxic gas level with MQ-2 gas sensor on ESP32-C3!")
print("MQ-2 gas sensor detects concentration of flammable gases in parts per million (ppm).")
print("Flammable gases are mainly propane, butane, and methane.")
# define gas detector, leds and potentiometer
mq2_gas_sensor_A0 = ADC(3)
led_one = Pin(2, Pin.OUT)
potentiometer = ADC(4)
def separator():
print("--------------------")
def get_gas_sensor_measurement(sensor=None):
reading = sensor.read_u16()
ppm = reading
print(f"Flammable Gases Conc. Value is: {ppm} ppm")
separator()
return ppm
def adc_potentiometer_measurement(sensor=None):
# 1. pico W
# reading = sensor.read_u16()
# print("sensor.read_u16() :", reading)
# conversion_factor = 3.3/65535
# 2. esp32
reading = sensor.read()
conversion_factor = 3.3/4095
voltage = reading * conversion_factor
print(f"Potentiometer Voltage is: {voltage:.4f} volts")
separator()
def set_led_display(led_one=None, toxic_limit=None, blink_number=None, blink_seconds=None, ):
for index in range(blink_number):
value = get_gas_sensor_measurement(sensor=mq2_gas_sensor_A0)
lel = toxic_limit # Lower Explosive Limit (LEL) of 5% by volume
if value >= lel:
print("Alert: High Conc. of Flammable Gas is Detected!")
separator()
led_one.on()
sleep(blink_seconds)
led_one.off()
sleep(blink_seconds)
separator()
while True:
blink_number = 3
blink_seconds = 0.5
measurement_interval_seconds = 5
toxic_limit = 50000 # Lower Explosive Limit (LEL) of 5% by volume
sleep(measurement_interval_seconds)
set_led_display(
led_one=led_one,
toxic_limit=toxic_limit,
blink_number=blink_number,
blink_seconds=blink_seconds
)
adc_potentiometer_measurement(sensor=potentiometer)
Loading
esp32-c3-devkitm-1
esp32-c3-devkitm-1