# 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 Rodrigo González Quidiello
from machine import Pin, PWM, time_pulse_us
import utime
from lcd1602 import LCD
from picozero import Speaker
boton_emergencia = Pin(15,Pin.IN,Pin.PULL_UP)
sirena = Speaker(9)
servo = PWM(Pin(28))
servo.freq(50)
trigger = Pin(3,Pin.OUT)
echo = Pin(5,Pin.IN)
lcd = LCD()
#Función del trigger que manda los ultrasonidos cada x tiempo que le indiquemos
def Medicion_distancia(tiempo_medicion):
trigger.high()
utime.sleep(tiempo_medicion) #Cada cuanto tiempo que mide el sensor ultrasonico (s)
trigger.low()
while True:
Medicion_distancia(0.0001)
duracion = time_pulse_us(echo, Pin.high)
distancia = (duracion*0.0343)/2
print('Distancia',distancia,'cm')
lcd.message('Puerta cerrada!\n ')
servo.duty_ns(1500000) #Tiempo en ns para 90º ---> 1.5ms (Puerta cerrada)
if distancia < 100:
lcd.clear()
lcd.message('Puerta abierta!')
servo.duty_ns(500000) #Tiempo en ns para 0º es 0.5ms --> 500000 ns (Puerta abierta)
utime.sleep(10)
lcd.clear()
#Instrucción al pulsar el botón de emergencia
if boton_emergencia.value() == 0:
servo.duty_ns(500000)
lcd.clear()
lcd.message('EMERGENCIA!!\nPuerta abierta!')
#Activación de la sirena de alarma por 10 segundos
for i in range(10):
sirena.on()
utime.sleep_ms(500)
sirena.off()
utime.sleep_ms(500)
lcd.clear()