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)


Комментарии
Отправить комментарий