6. Jugar con el Módulo Ultrasónico

En el proyecto 5. Jugar con el Módulo de Evitación de Obstáculos, se utilizan 2 módulos infrarrojos de evitación de obstáculos, pero la distancia de detección del módulo IR es corta, lo que puede hacer que el coche reaccione tarde para evitar los obstáculos.

En este proyecto, usamos un módulo ultrasónico para hacer detecciones a larga distancia, permitiendo que el coche sienta obstáculos desde una distancia mayor y así tomar una decisión.

Componentes Necesarios

En este proyecto, necesitaremos los siguientes componentes.

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ELEMENTOS EN ESTE KIT

ENLACE

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

También puedes comprarlos por separado en los enlaces a continuación.

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Placa SunFounder R3

BUY

Módulo Controlador de Motor L9110

-

Motor TT

-

Módulo Ultrasónico

BUY

Cableado

Un módulo sensor ultrasónico es un instrumento que mide la distancia a un objeto usando ondas sonoras ultrasónicas. Tiene dos sondas. Una para enviar las ondas ultrasónicas y la otra para recibir las ondas y transformar el tiempo de envío y recepción en una distancia, detectando así la distancia entre el dispositivo y un obstáculo.

Ahora construye el circuito según el siguiente diagrama.

Módulo Ultrasónico

Placa R3

Vcc

5V

Trig

3

Echo

4

Gnd

GND

../_images/car_6.png

Código

Nota

  • Abre el archivo 6.ultrasonic_module.ino en la ruta 3in1-kit\car_project\6.ultrasonic_module.

  • O copia este código en el Arduino IDE.

  • O sube el código a través del Editor Web de Arduino.

Después de que el código se haya cargado con éxito, dirige el coche hacia la pared. Si la distancia es demasiado grande, avanzará; si es demasiado corta, retrocederá; si está a una distancia segura, se detendrá.

¿Cómo funciona?

Este proyecto se basa en la distancia leída por el módulo ultrasónico para mover el coche en consecuencia.

  1. Añade la definición de pin para el módulo ultrasónico, trigPin se utiliza para transmitir la onda ultrasónica, por lo tanto, se configura como OUTPUT; echoPin se configura como INPUT para recibir la onda ultrasónica.

    ...
    const int trigPin = 3;
    const int echoPin = 4;
    
    void setup() {
    ...
    
    //ultrasonic
        pinMode(echoPin, INPUT);
        pinMode(trigPin, OUTPUT);
    }
    
  2. Primero lee el valor de distancia obtenido del módulo ultrasónico, si la distancia es mayor a 25cm, haz que el coche avance; si la distancia está entre 2-10cm, haz que retroceda, de lo contrario (entre 10~25cm) detente.

    void loop() {
        float distance = readSensorData();
        if (distance > 25) {
            moveForward(200);
        }
        else if (distance < 10 && distance > 2) {
            moveBackward(200);
        } else {
            stopMove();
        }
    }
    
  3. Acerca de la función readSensorData().

    El transmisor del módulo ultrasónico transmite una señal de onda cuadrada de 10us cada 2us, y el receptor recibe una señal de nivel alto si hay un obstáculo dentro del alcance. Usa la función pulseIn() para registrar el tiempo desde el envío hasta la recepción, divídelo por la velocidad del sonido 340m/s, y luego divídelo por 2, el resultado es la distancia entre este módulo y el obstáculo en unidades: cm.

    float readSensorData() {
        digitalWrite(trigPin, LOW);
        delayMicroseconds(2);
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(trigPin, LOW);
        float distance = pulseIn(echoPin, HIGH) / 58.00; //Equivalent to (340m/s*1us)/2
        return distance;
    }
    
  • pulseIn(pin, value)

    • pin: el número del pin de Arduino en el que quieres leer el pulso. Tipos de datos permitidos: int.

    • value: tipo de pulso a leer: ya sea ALTO o BAJO. Tipos de datos permitidos: int.

    Lee un pulso (ya sea ALTO o BAJO) en un pin. Por ejemplo, si el valor es ALTO, pulseIn() espera a que el pin pase de BAJO a ALTO, comienza a medir el tiempo, luego espera a que el pin pase a BAJO y detiene el tiempo.