MQ-2 ESP32 micropython

MQ-2 Датчик газа.
 

ESP32 > MQ-2

GND > GND

3.3 > VCC

D4 > A0

D15 >  D0


В начале датчик откалибруется, желательно на чистом воздухе.

     RS=48.00 kΩ RS/R0=8.99 LPG=5.5 ppm
     RS=47.76 kΩ RS/R0=8.94 LPG=5.5 ppm

Если направить зажигалку на датчик и открыть подачу газа ppm становится больше 10 значит настроили правильно. 



main.py    


from machine import Pin, ADC
import time
import math

# --- Настройка пинов ---
# Аналоговый выход MQ-2 (AO) через делитель напряжения
adc = ADC(Pin(4)) # Любой ADC pin ESP32 (34, 35, 36, 39)
adc.atten(ADC.ATTN_11DB) # до 3.6 В
adc.width(ADC.WIDTH_12BIT) # 0–4095

# --- Константы ---
VCC = 3.3 # Напряжение после делителя (В)
RLOAD = 10.0 # кОм, резистор нагрузки на MQ-2
CLEAN_AIR_FACTOR = 9.83 # R0 (чистый воздух) для MQ-2 из даташита

# --- Функции ---
def read_rs():
"""Возвращает сопротивление сенсора RS в кОм."""
raw = adc.read()
voltage = raw * VCC / 4095.0
if voltage == 0:
voltage = 0.0001 # защита от деления на 0
rs = (VCC - voltage) * RLOAD / voltage
return rs

def calibrate():
"""Калибровка в чистом воздухе."""
print("Калибровка... (подождите 20 сек)")
total = 0.0
samples = 50
for i in range(samples):
rs = read_rs()
total += rs
time.sleep(0.4)
avg_rs = total / samples
r0 = avg_rs / CLEAN_AIR_FACTOR
return r0

def get_lpg_ppm(rs_ro_ratio):
"""
Перевод отношения RS/R0 в ppm.
Для MQ-2: уравнение кривой LPG ~ 10^( (log10(ratio)-b)/m )
m и b – коэффициенты, снятые с графика.
"""
# Коэффициенты для LPG (примерно с даташита MQ-2)
m = -0.47 # наклон
b = 1.30 # смещение
ppm_log = (math.log10(rs_ro_ratio) - b) / m
ppm = math.pow(10, ppm_log)
return ppm

# --- Основная программа ---
r0 = calibrate()
print("R0 =", r0, "кОм")

while True:
rs = read_rs()
ratio = rs / r0
lpg_ppm = get_lpg_ppm(ratio)

print("RS={:.2f} kΩ RS/R0={:.2f} LPG={:.1f} ppm".format(rs, ratio, lpg_ppm))
time.sleep(1)





Комментарии

Популярные сообщения из этого блога

Meshtastic ESP32 E22

LORA Upgrade E32 400M30S

Установка micropython на ESP32