Código programación en lenguaje Phyton para el prototipo:
from microbit import *
import time # Importamos el módulo time para usar ticks_us()
parlante = pin2
motor_vibrador = pin16 # Cambiar el pin del motor vibrador a uno libre
def medir_distancia():
# Definir los pines para el sensor
trigger = pin1
echo = pin0
# Enviar un pulso al pin trigger para activar el sensor ultrasónico
trigger.write_digital(0)
time.sleep_us(2) # Esperar 2 microsegundos
trigger.write_digital(1)
time.sleep_us(10) # Pulso de 10 microsegundos
trigger.write_digital(0)
end_time = 0
start_time = 0
# Esperar a que el pin echo comience (cuando recibe el eco)
while echo.read_digital() == 0:
start_time = time.ticks_us() # Tomar el tiempo cuando se envía el pulso
# Esperar hasta que el pin echo termine (eco recibido)
while echo.read_digital() == 1:
end_time = time.ticks_us() # Tomar el tiempo cuando se recibe el eco
# Calcular la duración en microsegundos
duration = end_time - start_time
# Calcular la distancia en centímetros (velocidad del sonido = 34300 cm/s)
distancia_cm = (duration / 2) / 29.1
return distancia_cm
def sonar_parlante(distancia):
# Control de errores: si la distancia es -1, no hacemos sonar el parlante
if distancia == -1:
parlante.write_digital(0) # No emitir sonido si hay un error en la medición
return
# Establecer un intervalo en función de la distancia
if distancia < 40:
parlante.write_digital(1) # Sonido constante
elif distancia >= 40 and distancia < 80:
intervalo = 50
for _ in range(5): # Emitir sonido varias veces para mayor efecto
parlante.write_digital(1) # Activar el parlante
sleep(20) # Emitir el tono durante 20 ms
parlante.write_digital(0) # Apagar el parlante
sleep(intervalo - 20) # Esperar el tiempo restante
else:
parlante.write_digital(0) # Sin sonido
def vibrar_motor(distancia):
# Control de errores: si la distancia es -1, no activamos el motor
if distancia == -1:
motor_vibrador.write_digital(0) # No vibrar si hay un error en la medición
return
# Establecer un intervalo de vibración en función de la distancia
if distancia < 40:
motor_vibrador.write_digital(1) # Vibración constante
elif distancia >= 40 and distancia < 80:
intervalo = 50
for _ in range(5): # Vibrar varias veces para mayor efecto
motor_vibrador.write_digital(1) # Activar vibración
sleep(20) # Vibrar durante 20 ms
motor_vibrador.write_digital(0) # Apagar vibración
sleep(intervalo - 20) # Esperar el tiempo restante
else:
motor_vibrador.write_digital(0) # No vibrar si el objeto está lejos
# Bucle principal para medir continuamente
while True:
distancia = medir_distancia()
# Si la distancia es -1 (error), mostrar "ERR" en la pantalla
if distancia == -1:
display.scroll("ERR")
else:
# Mostrar la distancia solo si es un número válido y no es negativo
if distancia >= 0:
display.scroll(str(int(distancia))) # Convertir a entero y luego a string para scroll
sonar_parlante(distancia) # Activar el parlante según la distancia
vibrar_motor(distancia) # Activar el motor vibrador según la distancia
sleep(100)