#Nombre: Kevin Bermeo
#Fecha: 18/07/2025
from machine import Pin, PWM
import utime
servo = PWM(Pin(28))
servo.freq(50)
# Configuración HC-SR04 Entrada
trigE=Pin(7, Pin.OUT)
echoE=Pin(6, Pin.IN)
# Configuración HC-SR04 Salida
trigS=Pin(27, Pin.OUT)
echoS=Pin(26, Pin.IN)
Clave="19725"
def mover_servo(angulo):
min_duty=1638
max_duty=8192
duty=int(min_duty+(angulo/180)*(max_duty-min_duty))
servo.duty_u16(duty)
# Función para medir distancia
def md(trig, echo):
trig.low()
utime.sleep_us(2)
trig.high()
utime.sleep_us(10)
trig.low()
timeout=10000
start=utime.ticks_us()
while echo.value()==0:
if utime.ticks_diff(utime.ticks_us(), start)>timeout:
return 999
pulseS=utime.ticks_us()
while echo.value() == 1:
if utime.ticks_diff(utime.ticks_us(), pulseS)>timeout:
return 999
pulseE=utime.ticks_us()
pulseD=pulseE-pulseS
dist=(pulseD*0.0343)/2
return dist
# Estado inicial: compuerta cerrada
print("Compuerta Cerrada")
mover_servo(0)
while True:
distE=md(trigE, echoE)
distS=md(trigS, echoS)
print("Entrada: {:.1f} cm | Salida: {:.1f} cm".format(distE, distS))
# Vehículo en la entrada
if distE<20:
print("Vehículo registrado")
codigo=input("Ingrese la clave: ")
if codigo==Clave:
print("Acceso Concedido")
mover_servo(90)
utime.sleep(3)
else:
print("Acceso denegado")
mover_servo(0)
print("Compuerta cerrada.")
# Vehículo en la salida
elif distS<20:
print("Vehículo registrado en la salida")
mover_servo(90)
utime.sleep(2)
mover_servo(0)
print("Compuerta cerrada exitósamente")
utime.sleep(5)