Proyecto Arducoche

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.


image002.jpg


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í.


image004.jpg

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



image006.jpg

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.


image008.gif

LOS OJOS

HC SR04


image009.jpg

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.


image012.jpg

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);
}
##########Fin del código ############



ESQUEMA ELÉCTRICO



image014.jpg

Desarrollado por:
Claudio Becerra
Javier Hernández
Sergio Polo
Javier Sopeña
 
Última edición:
Creo que ese chip es un receptor de radio así que no tendría control exactamente con él, sería removerlo y controlar los transistores directamente. Nosotros hicimos algo parecido hace 2 años creo, de hecho acabo de traerlo de la universidad.

Removimos el circuito receptor y creamos uno nuevo empleando el típico puente H L293, para controlarlo empleamos la LaunchPad Stellaris y al inicio lo programamos con Energía IDE (basado en Arduino), luego reescribimos parte del código de control para optimizarlo empleando la Driver Library del chip y el acceso directo a registros en algunos casos.

En nuestro caso era más complejo el movimiento que debía realizar, así que pusimos 8 sensores infrarrojos y nos basábamos en la variación de reflectividad con el desplazamiento para medir la proximidad basándonos en la curva de la respuesta.

Planeamos mejorarlo este semestre corrigiendo los errores que tuvimos en el control y creando un PCB nuevo con el chip soldado en lugar de la placa de desarrollo.
 
Solo remueve el IC, los pines que necesitas son
2: Tierra
6: Derecha
7: Izquierda
10: Reversa
11: Adelante
12: Turbo*
13: Vdd (5V)**
Esas son las salidas

*No necesariamente está implementada
**Es el voltaje máximo del IC, puede incluir un zener o regulador de menor nivel, quizás no sea necesario conectarlo.
 
Atrás
Arriba