from machine import ADC,Pin
from utime import sleep, sleep_ms
from dht import DHT22
from picozero import Speaker
sensor_dht = DHT22(Pin(15)) # Usa o pino 15 para conectar o sensor DHT22
speaker = Speaker(6) # Cria um objeto Speaker no pino 6
LED = Pin(10, Pin.OUT) # Liga LED ao pino 10
# Conecta os pinos de direção e rotação do Stepper Motor aos pinos 16 e 17
dir_ = Pin(16, Pin.OUT)
step_ = Pin(17, Pin.OUT)
sensor_gas = ADC(26) # Usa o pino GP26 como entrada analógica (ADC0)
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)
while True:
#SENSOR DE GÁS
gas = sensor_gas.read_u16()
print(f"Nível de gás de fumaça: {gas}")
sleep(1)
#SENSOR DE TEMPERATURA E UMIDADE
sensor_dht.measure()
temp = sensor_dht.temperature()
umid = sensor_dht.humidity()
if temp != None and umid != None:
print(f"Temperatura: {temp}°C")
print(f"Umidade: {umid} %")
else:
print("Falha nos dados recebidos, tentando novamente...")
sleep(1)
dir_.value(1) # Define a direção que o sprinkler (Stepper Motor) girará
# Verifica presença de fogo com base em níveis críticos de temperatura, umidade e gás (valores baseados em pesquisa -Exceto temperatura)
if umid <= 30 and temp >= 40 and gas >= 55949:
# Faz o buzzer/alarme ligarem com intervalo de 1 segundo
speaker.on() # Liga o buzzer/alarme audível
LED.value(1) # Liga o LED/alarme visível
sleep(1) # Espera um segundo para ligar o dispersor
# Gira o sprinkler na tentativa de apagar o fogo
for i in range(1000):
step_.value(1)
sleep_ms(1) # Pulso alto por 1 ms
step_.value(0)
sleep_ms(1) # Pulso baixo por 1 ms
# Desliga os alarmes para verificar se o fogo se apagou
speaker.off()
LED.value(0)
# Validação para ver se a umidade está em nível perigoso caso não haja fogo
elif umid <= 20:
# Liga o sprinkler para umidificar/regar a plantação
for i in range(1000):
step_.value(1)
sleep_ms(1) # Pulso alto por 1 ms
step_.value(0)
sleep_ms(1) # Pulso baixo por 1 ms