Proyecto 03: Murciélago Medidor de Distancia

1. Resumen

Basado en un sensor ultrasónico, el murciélago medidor detecta la distancia de los obstáculos y la muestra en tiempo real en un OLED. Cuando es menor a 10cm, el altavoz emite una alarma.

2. Componentes

Img

Img

Img

placa micro:bit *1

placa de expansión tipo T para micro:bit *1

cable micro USB *1

Img

Img

Img

sensor ultrasónico *1

módulo OLED *1

cables DuPont

Img

Img

Img

protoboard *1

cables de salto

portapilas *1
(pilas AA auto-proporcionadas *2)

Img

Img

tarjeta bat *1

tarjeta OLED *1

3. Conocimiento de Componentes

sensor ultrasónico

Las ondas ultrasónicas rebotan cuando golpean un obstáculo. Medimos la distancia calculando el intervalo de tiempo entre el envío y la recepción de las ondas. Dado que la velocidad de propagación del sonido en el aire es constante v=340m/s, calculamos la distancia entre el sensor y el obstáculo: s=vt/2.

Img

El módulo ultrasónico HC-SR04 integra un transmisor y un receptor. El primero convierte señales eléctricas (energía eléctrica) en ondas sonoras de alta frecuencia (más allá del oído humano) (energía mecánica), mientras que el segundo hace lo contrario.

El diagrama esquemático del HC SR04:

Img

Definición de pines:

Img

Parámetros:

  • Voltaje de operación: 5V

  • Corriente de operación: 12mA

  • Distancia mínima de medición: 2cm

  • Distancia máxima de medición: 200cm

Principio de funcionamiento:

Se emite un pulso de nivel alto de al menos 10us en el pin Trig, y el módulo comienza a transmitir ondas ultrasónicas. Al mismo tiempo, el pin Echo se pone en alto. Cuando el módulo recibe una onda ultrasónica de vuelta al encontrar un obstáculo, el pin Echo se pone en bajo. La duración del nivel alto del pin Echo es el tiempo total de la onda desde el envío hasta la recepción: s=vt/2.

Img

Módulo OLED

La tecnología OLED ofrece un rendimiento de color rico, alto contraste y amplio ángulo de visión, proporcionando imágenes claras y vívidas, especialmente destacadas en el color negro.

Cada píxel de la pantalla OLED emite luz por sí mismo sin retroiluminación, por lo que consume relativamente poca energía. Con tamaño pequeño, alta resolución y bajo consumo, la pantalla OLED de 0.9 pulgadas es muy adecuada para dispositivos portátiles.

Img

En este proyecto, el módulo de pantalla OLED conecta la interfaz SDA al pin P20 y SCL al pin P19.

Parámetros:

  • Voltaje de operación: DC 3.3V-5V

  • Corriente de operación: 30mA

  • Interfaz: Puertos de pines con un espaciado de 2.54mm

  • Modo de comunicación: I2C

  • Chip controlador interno: SSD1306

  • Resolución: 128*64

  • Ángulo de visión: mayor a 150°

4. Diagrama de Conexiones

Img

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

Img

Img

5. Importar Biblioteca

Si aún no has agregado los archivos de biblioteca requeridos (oled_ssd1306), por favor impórtala refiriéndote a Cómo Mu importa biblioteca a Micro:bit.

6. Flujo del Código

Img

7. Código de Prueba

El archivo de código se proporciona en la carpeta Proyecto 03:Murciélago Medidor de Distancia, archivo Project-03-Ranging-Bat.py.

Img

Código completo: El umbral en la condición 10 puede modificarse según las condiciones reales.

'''
Function: bat ranging
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
import oled_ssd1306 as oled
import music

display.show(Image.HAPPY) # LED matrix displays a smile face
distance = 0              # set variable distance initial value to 0
lastEchoDuration = 0      # set variable lastEchoDuration initial value to 0

# initialize and clear oled
oled.initialize()
oled.clear_oled()

while True:
    # 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
    oled.clear_oled()          # clear OLED
    oled.add_text(1, 0, str(distance) + 'cm')  # Display distance in the corresponding position of OLED
    sleep(200)
    if distance < 10:       # if distance < 10cm
        music.play("C4:4")  # speaker plays C4 tone
        sleep(200)          # delay 
        music.reset()       # no tone
        sleep(200)

8. Resultado de la Prueba

Haz clic en “Flash” para cargar el código en la placa micro:bit.

Img

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

Img

El OLED muestra la distancia entre el sensor ultrasónico y el obstáculo en tiempo real. Cuando el valor de la distancia es menor a 10cm, el altavoz en la placa micro:bit emite una alarma.

ATENCIÓN: Si el cableado es correcto pero no ves resultados, presiona el botón de reinicio en la parte trasera de la placa.

Img