Proyecto 04: Estacionamiento Inteligente
1. Visión General
Los estacionamientos inteligentes están en todas partes. ¿Podemos también crear un estacionamiento inteligente? Por supuesto. Podemos usar un sensor ultrasónico para detectar si hay vehículos adelante. Cuando se detecta que un vehículo (o cosa) se acerca, controlamos el servo para levantar la barra de elevación; si se detecta que se aleja, el servo bajará la barra de elevación.
2. Componentes
|
|
|
|---|---|---|
placa micro:bit *1 |
placa de expansión tipo T para micro:bit *1 |
cable micro USB *1 |
|
|
|
sensor ultrasónico *1 |
servo *1 |
cables DuPont |
|
|
|
protoboard *1 |
cables puente |
soporte para baterías *1 |
|
|
|
tarjeta bat *1 |
tarjeta barra de elevación *1 |
3. Conocimiento de los Componentes
Servo
El servo es un actuador de posición. Podemos usar el servo para controlar la posición exacta o para entregar alto torque. Usualmente se usa en robots, autos de control remoto e incluso modelos de aeronaves. Hay muchas especificaciones, pero todos los servos tienen tres cables: señal (naranja), positivo (rojo) y negativo (marrón). El color puede variar según la marca del servo.

Diagrama de estructura interna:

① Señal: recibe señales de control del microcontrolador;
② potenciómetro: se puede medir la posición del eje de salida, que pertenece a la parte de retroalimentación de todo el servo;
③ Controlador interno: la placa embebida procesa señales de control externas, acciona el motor y señales de retroalimentación de posición, que es el núcleo de todo el servo;
④ Motor DC: actúa como un actuador para entregar velocidad, torque y posición;
⑤ Transmisión / mecanismo del servo: el mecanismo amplifica el recorrido de salida del motor al ángulo final de salida según una cierta relación de transmisión.
Conducción del servo
Se envían señales PWM a la línea de señal del servo para controlar su salida. El ciclo de trabajo del PWM determina directamente la posición del eje de salida. El período suele ser de 20 milisegundos y típicamente se configura para generar pulsos a una frecuencia de 50Hz.
Por ejemplo (servo de 180°):
Cuando enviamos un ancho de pulso de 1.5 milisegundos (ms) al servo de 180°, el eje de salida del servo se moverá a la posición media (90 grados);
Si el ancho de pulso es de 0.5ms, el eje de salida se moverá a 0 grados;
Si el ancho de pulso es de 2.5ms, el eje de salida se moverá a 180 grados;

Parámetros:
Voltaje de operación: DC 3.3V~5V
Temperatura de operación: -10°C ~ +50°C
Dimensiones: 32.25mm x 12.25mm x 30.42mm
Interfaz: interfaz de 3 pines con un espaciado de 2.54mm
4. Diagrama de Conexiones

Al usar el sensor ultrasónico y el servo, debemos conectar una fuente de alimentación externa y poner el interruptor DIP en ON.


5. Flujo del Código

6. Código de Prueba
El archivo de código se proporciona en la carpeta Proyecto 04:Smart-Parking, archivo Project-04-Smart-Parking.py.

Código completo: El umbral en la condición 10 puede modificarse según las condiciones reales.
'''
Function: smart parking
Compiling IDE: MU 1.2.0
Author: https://docs.keyestudio.com
'''
# import related libraries
from microbit import *
import ustruct
import machine
from time import sleep_us
distance = 0 # set variable distance initial value to 0
lastEchoDuration = 0 # set variable lastEchoDuration initial value to 0
val = Image("09990:""09090:""09990:""09000:""09000") # set iamge
display.show(val) # LED matrix shows image
pin0.write_analog(25.6) # set P0 pin analog to 25.6, servo angle to 0°
sleep(200)
while True:
pin0.set_analog_period(20) # set servo frequency
# Ultrasonic sensor sends and receives signals
pin1.write_digital(0)
sleep_us(2)
pin1.write_digital(1)
sleep_us(15)
pin1.write_digital(0)
# measure the time interval between "when rising edge detected from the pin2" and "until the pin becomes low again"
# unit is μs. Assign the interval to variable t.
t = machine.time_pulse_us(pin2, 1, 35000)
# a conditional statement, used to check whether the values of two variables t and lastechoduration satisfy specific conditions.
# If both conditions are met, the block of code under the condition statement is executed.
if (t <= 0 and lastEchoDuration >= 0):
t = lastEchoDuration # variable t = variable lastechoduration
else:
lastEchoDuration = t
distance = int(t * 0.017) # calculate distance
if distance < 10: # if distance < 10cm
pin0.write_analog(77) # servo rotate to 90°
sleep(2000)
else: # or
sleep(2000)
pin0.write_analog(25.6)
sleep(2000)
7. Resultado de la Prueba
Haga clic en “Flash” para cargar el código en la placa micro:bit.

Después de descargar el código a la placa, encienda mediante el cable micro USB o fuente de alimentación externa (ponga el interruptor DIP en ON), y presione el botón de reinicio en la placa.

Cuando el sensor ultrasónico detecta un vehículo (o cosa) acercándose, el servo controla la barra de elevación para subirla; si el sensor detecta que se aleja, el servo bajará la barra de elevación.
ATENCIÓN: Si el cableado es correcto pero no ve resultados, presione el botón de reinicio en la parte trasera de la placa.











