8. Coche Autónomo

Este proyecto es una combinación de los dos proyectos 6. Jugar con el Módulo Ultrasónico y 5. Jugar con el Módulo de Evitación de Obstáculos. 2 módulos de evitación de obstáculos infrarrojos realizan detección de corta distancia o de bordes, y los módulos ultrasónicos hacen detección de larga distancia para confirmar que el coche no golpee un obstáculo durante el proceso de conducción libre.

Componentes Necesarios

Para este proyecto, necesitamos los siguientes componentes.

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

Nombre

ELEMENTOS DE ESTE KIT

ENLACE

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

También puedes comprarlos por separado en los siguientes enlaces.

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Placa SunFounder R3

BUY

Módulo Controlador de Motor L9110

-

Motor TT

-

Módulo Ultrasónico

BUY

Módulo de Evitación de Obstáculos

BUY

Cableado

Conecta el módulo ultrasónico y los 2 módulos de evitación de obstáculos IR al mismo tiempo.

Conecta el ultrasónico a la placa R3 de la siguiente manera.

Módulo Ultrasónico

Placa R3

Vcc

5V

Trig

3

Echo

4

Gnd

GND

El cableado de los 2 módulos de evitación de obstáculos IR a la placa R3 es como sigue.

Módulo IR Izquierdo

Placa R3

OUT

8

GND

GND

VCC

5V

Módulo IR Derecho

Placa R3

OUT

7

GND

GND

VCC

5V

../_images/car_7_8.png

Código

Nota

  • Abre el archivo 8.self_driving_car.ino en la ruta 3in1-kit\car_project\8.self_driving_car.

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

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

El coche se moverá libremente una vez que el código haya sido cargado con éxito. Cuando el módulo de obstrucción IR en ambos lados detecte un obstáculo, se moverá en la dirección opuesta para una evasión de emergencia; si hay un obstáculo a 2~10cm directamente frente al coche, retrocederá hacia la izquierda, ajustará su dirección y luego avanzará.

¿Cómo funciona?

El flujo de trabajo de este proyecto es el siguiente.

  • Prioridad para leer el valor del módulo de evitación de obstáculos IR izquierdo y derecho.

  • Si el módulo IR izquierdo es 0 (obstáculo detectado), y el módulo IR derecho es 1, deja que el coche retroceda hacia la izquierda.

  • Si el módulo IR derecho es 0 (obstáculo detectado), deja que el coche retroceda hacia la derecha.

  • Si los 2 módulos IR detectan el obstáculo al mismo tiempo, el coche retrocederá.

  • De lo contrario, lee la distancia detectada por el módulo ultrasónico.

  • Si la distancia es mayor a 50cm, deja que el coche avance.

  • Si la distancia está entre 2-10cm, deja que el coche retroceda antes de girar.

  • Si la distancia está entre 10-50cm, deja que el coche avance a baja velocidad.

void loop() {

    int left = digitalRead(leftIR);   // 0: Obstructed  1: Empty
    int right = digitalRead(rightIR);

    if (!left && right) {
        backLeft(150);
    } else if (left && !right) {
        backRight(150);
    } else if (!left && !right) {
        moveBackward(150);
    } else {
        float distance = readSensorData();
        Serial.println(distance);
        if (distance > 50) { // Safe
            moveForward(200);
        } else if (distance < 10 && distance > 2) { // Attention
            moveBackward(200);
            delay(1000);
            backLeft(150);
            delay(500);
        } else {
            moveForward(150);
        }
    }
}