from machine import Pin, PWM, ADC
from time import sleep_ms
from hcsr04 import HCSR04
from servo import Servo
import dht
import uselect
import sys
# COMPONENTES
led = Pin(2, Pin.OUT)
sensor_dht = dht.DHT22(Pin(13))
sensor_distancia = HCSR04(trigger_pin=12, echo_pin=14, echo_timeout_us=100000)
ldr_digital = Pin(32, Pin.IN)
servo = Servo(pin=26)
buzzer = PWM(Pin(4))
buzzer.duty(0)
# ESTADOS
vaga_ocupada = False
emergencia = False
cancela_aberta = False
# FUNÇÕES
def abrir_cancela():
global cancela_aberta
servo.move(90)
cancela_aberta = True
print("Cancela aberta")
def fechar_cancela():
global cancela_aberta
servo.move(0)
cancela_aberta = False
print("Cancela fechada")
def tocar_sirene():
for freq in range(700, 1800, 100):
buzzer.freq(freq)
buzzer.duty(50)
sleep_ms(20)
for freq in range(1800, 700, -100):
buzzer.freq(freq)
buzzer.duty(50)
sleep_ms(20)
def parar_sirene():
buzzer.duty(0)
def mostrar_status():
sensor_dht.measure()
temperatura = sensor_dht.temperature()
umidade = sensor_dht.humidity()
distancia = round(sensor_distancia.distance_cm(), 1)
print("\n===== STATUS =====")
if vaga_ocupada:
print("Vaga: OCUPADA")
else:
print("Vaga: LIVRE")
if cancela_aberta:
print("Cancela: ABERTA")
else:
print("Cancela: FECHADA")
if emergencia:
print("Emergencia: SIM")
else:
print("Emergencia: NAO")
poll = uselect.poll()
poll.register(sys.stdin, uselect.POLLIN)
# INICIALIZAÇÃO
fechar_cancela()
print("Sistema iniciado")
print("Digite 'ajuda' para ver os comandos")
# LOOP PRINCIPAL
while True:
# ILUMINAÇÃO AUTOMÁTICA
if ldr_digital.value():
led.on()
else:
led.off()
# SENSOR DA VAGA
distancia = sensor_distancia.distance_cm()
if distancia < 20:
vaga_ocupada = True
else:
vaga_ocupada = False
# DETECÇÃO DE INCÊNDIO
sensor_dht.measure()
temperatura = sensor_dht.temperature()
if temperatura >= 60 and not emergencia:
emergencia = True
print("\n*** INCENDIO DETECTADO ***")
print("EVACUACAO INICIADA")
abrir_cancela()
# SIRENE
if emergencia:
tocar_sirene()
else:
parar_sirene()
# COMANDOS DO CONSOLE
if poll.poll(1):
comando = input().strip().lower()
if comando == "abrir":
if emergencia:
print("Sistema em emergencia")
elif vaga_ocupada:
print("Estacionamento lotado")
else:
abrir_cancela()
elif comando == "fechar":
if emergencia:
print("Nao e permitido fechar a cancela durante emergencia")
else:
fechar_cancela()
elif comando == "status":
mostrar_status()
elif comando == "reset":
emergencia = False
parar_sirene()
print("Emergencia encerrada")
elif comando == "ajuda":
print("\nComandos disponiveis:")
print("abrir")
print("fechar")
print("status")
print("reset")
print("ajuda")
else:
print("Comando invalido")
sleep_ms(100)