from machine import Pin, ADC, PWM
from utime import sleep_ms
import math
sensor_gas = ADC(26)
motor = PWM(Pin(16))
motor.freq(50)
RL = 5000 # Valor do resistor de carga (RL) no módulo, normalmente 5kΩ
R0 = 10000 # Valor de Rs em ar limpo (ajuste após calibrar, aqui está como 10kΩ)
# Parâmetros da curva do sensor MQ-2 para detectar fumaça (do datasheet)
m = -0.42 # Inclinação da curva no gráfico log(ppm) x log(Rs/R0)
b = 1.92 # Intercepto da curva (valor fixo com base na substância)
def calcular_ppm(leitura_gas):
global RL, R0, m, b
tensao = (leitura_gas / 65535) * 3.3 # Converte leitura para tensão (0V a 3.3V)
rs = (3.3 - tensao) * RL / tensao # Calcula a resistência Rs do sensor
razao = rs / R0 # Razão entre Rs atual e Rs em ar limpo (R0)
ppm = 10 ** ((math.log10(razao) - b) / m) # Aplica fórmula logarítmica para estimar ppm
return ppm
while True:
leitura_gas = sensor_gas.read_u16()
ppm = calcular_ppm(leitura_gas)
print(f"Fumaça estimada: {ppm:.0f} ppm")
if ppm > 100000000 and motor.duty_ns() <= 2000000:
motor.duty_ns(2488145)
elif ppm < 100000000 and motor.duty_ns() >= 2000000:
motor.duty_ns(1450000)
sleep_ms(50)