El proyecto consiste en modificar un coche teledirigido para que funcione de manera autónoma y esquive obstáculos.
Para ello, aparte del coche, vamos a utilizar Arduino UNO, un emisor/receptor de ultrasonidos (HC SR04) y un pulsador con rebote.
EL COCHE
Básicamente, cualquier circuito de vehículo RC consta de tres partes:
1. Receptor. Escucha la señal de radio y la transforma para ser procesada.
2. Controlador. Microchip que, en función del circuito receptor, ordena el movimiento de los motores.
3. Puente en H. Necesario para gobernar los motores, en función de la señal del controlador.
Para que Arduino gobierne el coche, tendremos que anular el receptor y sustituir el controlador por nuestra placa.
Para lo primero, no tenemos más que cortar la antena, o aislarla de cualquier otra manera.
Para lo segundo, tendremos que identificar dónde están las entradas del puente en H.

En nuestro caso, el chip que controla los motores es el RX-2 20926028.
Si no conseguimos la hoja de datos del microcontrolador, una forma sencilla de averiguar qué patilla controla cada movimiento es ir tocando con un cable a 5V cada patilla del chip. Así veremos qué movimientos hace el coche y podremos identificarlo.
En nuestro ejemplo, la correspondencia sería así.

Tensiones aproximadas medidas en las pletinas de las pilas del coche.

EL CEREBRO
Digamos que hay tres maneras de alimentar a Arduino UNO.
1.Una es a través del USB, sin más, conectado al ordenador por ejemplo.
2.Otra es mediante el conector Jack.
3.La última utilizando los pines Vin y GND.
1.El USB lo utilizaremos para cargar el código en el microcontrolador. El cable
para programar es un USB A/B, como el de las impresoras.
Pero ... ¿cómo lo alimentamos cuando lo desconectemos de nuestro ordenador?
2.La manera más sencilla es a través del Jack de Arduino.
3.O a través de los pines Vin y GND, tensiones entre 7 y 12V.
De manera que utilizaremos la salida a 9V del coche para alimentar Arduino a través del PIN Vin.

LOS OJOS
HC SR04

VCC --> 5V.
Trig --> Emite ultrasonido.
Echo --> Recibe ultrasonido.
GND --> Tierra.
EL TACTO
Un pulsador con rebote permitirá al coche modificar su trayectoria si choca contra cualquier objeto macizo. Recordemos que los ultrasonidos no rebotan contra todos los materiales.

LA MENTE
Correspondencia con pines de Arduino.
PIN FUNCIÓN
3 TRIG
2 ECHO
13 DERECHA
10 IZQUIERDA
12 ADELANTE
11 ATRÁS
7 CHOQUE
##########Código en Processing ############
##########Fin del código ############
ESQUEMA ELÉCTRICO

Desarrollado por:
Claudio Becerra
Javier Hernández
Sergio Polo
Javier Sopeña
Para ello, aparte del coche, vamos a utilizar Arduino UNO, un emisor/receptor de ultrasonidos (HC SR04) y un pulsador con rebote.
EL COCHE
Básicamente, cualquier circuito de vehículo RC consta de tres partes:
1. Receptor. Escucha la señal de radio y la transforma para ser procesada.
2. Controlador. Microchip que, en función del circuito receptor, ordena el movimiento de los motores.
3. Puente en H. Necesario para gobernar los motores, en función de la señal del controlador.
Para que Arduino gobierne el coche, tendremos que anular el receptor y sustituir el controlador por nuestra placa.
Para lo primero, no tenemos más que cortar la antena, o aislarla de cualquier otra manera.
Para lo segundo, tendremos que identificar dónde están las entradas del puente en H.

En nuestro caso, el chip que controla los motores es el RX-2 20926028.
Si no conseguimos la hoja de datos del microcontrolador, una forma sencilla de averiguar qué patilla controla cada movimiento es ir tocando con un cable a 5V cada patilla del chip. Así veremos qué movimientos hace el coche y podremos identificarlo.
En nuestro ejemplo, la correspondencia sería así.

Tensiones aproximadas medidas en las pletinas de las pilas del coche.

EL CEREBRO
Digamos que hay tres maneras de alimentar a Arduino UNO.
1.Una es a través del USB, sin más, conectado al ordenador por ejemplo.
2.Otra es mediante el conector Jack.
3.La última utilizando los pines Vin y GND.
1.El USB lo utilizaremos para cargar el código en el microcontrolador. El cable
para programar es un USB A/B, como el de las impresoras.
Pero ... ¿cómo lo alimentamos cuando lo desconectemos de nuestro ordenador?
2.La manera más sencilla es a través del Jack de Arduino.
3.O a través de los pines Vin y GND, tensiones entre 7 y 12V.
De manera que utilizaremos la salida a 9V del coche para alimentar Arduino a través del PIN Vin.

LOS OJOS
HC SR04

VCC --> 5V.
Trig --> Emite ultrasonido.
Echo --> Recibe ultrasonido.
GND --> Tierra.
EL TACTO
Un pulsador con rebote permitirá al coche modificar su trayectoria si choca contra cualquier objeto macizo. Recordemos que los ultrasonidos no rebotan contra todos los materiales.

LA MENTE
Correspondencia con pines de Arduino.
PIN FUNCIÓN
3 TRIG
2 ECHO
13 DERECHA
10 IZQUIERDA
12 ADELANTE
11 ATRÁS
7 CHOQUE
##########Código en Processing ############
PHP:
#include <Ultrasonic.h>
int SONIDO_OUT = 3; //Emite sonido
int SONIDO_IN = 2; //Recibe sonido
int PULSADOR = 7; //Pulsador de choque
int RIGHT = 13; //Derecha
int LEFT = 10; //Izquierda
int FORWARD = 12; //Adelante
int BACKWARD = 11; //Atras
int val = 0; // variable para almacenar el estado del pulsador de choque
int DISTANCIA_OBSTACULO = 50; //Distancia en centimetros a la que se para el coche al ver un obstaculo.
int TIEMPO_MUESTREO_ULTRASONIDOS = 10; //Tiempo en milisegundos entre cada muestreo del sensor de ultrasonidos.
int TIEMPO_CAMBIAR_DIRECCION = 500; //Tiempo en milisegundos de la duracion del movimiento de cambio de direccion.
Ultrasonic ultrasonic(SONIDO_OUT, SONIDO_IN); // (Trig PIN,Echo PIN)
// the setup routine runs once when you press reset:
void setup() {
pinMode(RIGHT, OUTPUT);
pinMode(LEFT, OUTPUT);
pinMode(FORWARD, OUTPUT);
pinMode(BACKWARD, OUTPUT);
pinMode(PULSADOR, INPUT);
adelante();
delay(500);
atras();
delay(500);
parar();
//randomSeed(analogRead(0));
}
// the loop routine runs over and over again forever:
void loop() {
adelante();
continuar();
parar();
cambiarDireccion();
}
void parar(){
digitalWrite(FORWARD, LOW);
digitalWrite(BACKWARD, LOW);
digitalWrite(LEFT, LOW);
digitalWrite(RIGHT, LOW);
}
void adelante(){
digitalWrite(FORWARD, HIGH);
}
void atras(){
digitalWrite(BACKWARD, HIGH);
}
void izquierda(){
digitalWrite(LEFT, HIGH);
}
void derecha(){
digitalWrite(RIGHT, HIGH);
}
void continuar(){
while((DISTANCIA_OBSTACULO < ultrasonic.Ranging(CM)) && (val == LOW)){
val = digitalRead(PULSADOR); // leer el estado del pulsador de choque
delay(TIEMPO_MUESTREO_ULTRASONIDOS);
}
}
void cambiarDireccion(){
if(random(0, 2) < 1){
izquierda();
atras();
} else {
derecha();
atras();
}
delay(TIEMPO_CAMBIAR_DIRECCION);
parar();
delay(2000);
}
ESQUEMA ELÉCTRICO

Desarrollado por:
Claudio Becerra
Javier Hernández
Sergio Polo
Javier Sopeña
Última edición: