# El objetivo del programa es controlar una puerta automática con un
servomotor
# la cual se activa con un sensor ultrasónico de distancias o un botón de
emergencia
#
#
#
#-----------------------MICROPYTHON----------------------------
#
#
#
#
# Hecho por Inna Vasquez
from machine import Pin, PWM, time_pulse_us, I2C
import utime
from i2c_lcd import I2cLcd # Asegúrate de subir i2c_lcd.py y lcd_api.py
# Botón
boton_emergencia = Pin(32, Pin.IN, Pin.PULL_UP)
# Sirena
sirena = PWM(Pin(14))
sirena.freq(1000)
sirena.duty(0)
# Servo
servo = PWM(Pin(21), freq=50)
# Ultrasonido
trigger = Pin(5, Pin.OUT) # ✅ GPIO5 sí puede ser salida
echo = Pin(35, Pin.IN)
# LCD I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(23), freq=400000)
lcd = I2cLcd(i2c, i2c.scan()[0], 2, 16)
#Función del trigger que manda los ultrasonidos cada x tiempo que le
indiquemos
def Medicion_distancia(tiempo_medicion):
trigger.value(1) # Activar TRIG
utime.sleep(tiempo_medicion)
trigger.value(0) # Desactivar TRIG
while True:
Medicion_distancia(0.0001)
duracion = time_pulse_us(echo, 1)
distancia = (duracion * 0.0343) / 2
print('Distancia', distancia, 'cm')
lcd.clear()
lcd.putstr('Puerta cerrada!')
servo.duty_ns(1500000)
if distancia < 100:
lcd.clear()
lcd.putstr('Puerta abierta!')
servo.duty_ns(500000)
sirena.duty(512) # Activa buzzer mientras puerta esté abierta
utime.sleep(10)
sirena.duty(0) # Apaga buzzer después
lcd.clear()
if boton_emergencia.value() == 0:
servo.duty_ns(500000)
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr('EMERGENCIA!!')
lcd.move_to(0, 1)
lcd.putstr('Puerta abierta!')
for _ in range(10):
sirena.duty(512)
utime.sleep_ms(500)
sirena.duty(0)
utime.sleep_ms(500)
lcd.clear()