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+ |
También puedes comprarlos por separado en los siguientes enlaces.
INTRODUCCIÓN DEL COMPONENTE |
ENLACE DE COMPRA |
---|---|
- |
|
- |
|
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 |
Código
Nota
Abre el archivo
8.self_driving_car.ino
en la ruta3in1-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);
}
}
}