Coche RC con Arduino




El proyecto se desarrolla dentro de la asignatura de Tecnología Industrial I, en el IES Ramón Giraldo de Villanueva de los Infantes (Ciudad Real), durante el curso 2014-2015.

El objetivo del proyecto es el diseño y construcción de un coche controlado a distancia mediante la transmisión de datos vía Bluetooth. Para ello se utilizará la placa controladora Arduino UNO.


PRESENTACIÓN


DISEÑO

El coche consta de una placa de madera DM con dos motores que dotan de tracción a dos ruedas y una rueda loca delantera. Los giros se realizarán cambiando el sentido de giro de los motores.



MATERIALES
  • Plancha de madera DM (7 mm).
  • Placa Arduino UNO.
  • Placa protoboard.
  • 2 motores de giro continuo.
  • 2 ruedas de goma.
  • Rueda loca.  
  • Cableado.
  • Resistencias.
  • 2 LED blancos de alta luminosidad.
  • LED rojo.
  • Baterias.
  • Módulo Bluetooth HC-06.
  • Circuito integrado L293D (motor driver).
  • Dispositivo móvil Android (teléfono o tablet).
  • Software: Programa Arduino IDE para programar y programa Bluetooth RC Controller para el dispositivo móvil (Android).

PRESUPUESTO

A continuación se muestra un presupuesto estimativo del coste del proyecto. Evidentemente, este presupuesto se puede ajustar bastante recurriendo al reciclaje o recuperación de algunos de los materiales.



CONEXIÓN BLUETOOTH

Para realizar el control del coche recurrimos a la comunicación via bluetooth a través del puerto serie de la placa. Para ello, contamos con un módulo HC-06 alimentado a 5 V. Las conexiones con la placa se pueden ver en la imagen. La salida TX del módulo (transmisión de datos) se conecta con la entrada RX de la placa (recepción de datos). A su vez, la entrad RX del módulo se conecta con con la TX.


CÓDIGO DE PROGRAMACIÓN

//declaracion de variables
int motorA1 = 2;
int motorA2 = 3;
int motorR1 = 4;
int motorR2 = 5;
int claxon = 10;
int luz = 11;
int luztras =12;
int led=13;
char c;

void adelante();
void reversa();
void parado();
void derecha();
void izquierda();
void encenderLuz();
void apagarLuz();
void encenderLuztras();
void apagarLuztras();
void emergenciaOn();
void emergenciaOff();
void claxonOn();
void claxonOff();

void setup(){
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  pinMode(motorA1, OUTPUT);
  pinMode(motorA2, OUTPUT);
  pinMode(motorR1, OUTPUT);
  pinMode(motorR2, OUTPUT);
  pinMode(luz, OUTPUT);
  pinMode(luztras, OUTPUT);
  pinMode(claxon, OUTPUT);
}
void loop(){
while (Serial.available()) {
    if (Serial.available() >0) { //Si el dispositivo bluetooth está preparado para recibir datos…
      c = Serial.read(); //Los recibe y almacena
              }
 }
   switch(c){
      case 'F':
        adelante();
        break;
      case 'B':
        reversa();
        break;
      case 'S':
        parado();
        break;
      case 'L':
        izquierda();
        break;
      case 'R':
        derecha();
        break;
      case 'W':
        encenderLuz();
        break;    
      case 'w':
        apagarLuz();
        break; 
      case 'U':
        encenderLuztras();
        break;    
      case 'u':
        apagarLuztras();
        break; 
      case 'X':
        emergenciaOn();
        break;    
      case 'x':
        emergenciaOff();
        break; 
      case 'V':
        claxonOn();
        break;    
      case 'v':
        claxonOff();
        break;  
    }
  }
void adelante(){
  digitalWrite(motorA2,HIGH);
  digitalWrite(motorR2,HIGH);
  digitalWrite(led,HIGH);
}
void reversa(){
  digitalWrite(motorA1,HIGH);
  digitalWrite(motorR1,HIGH);
  digitalWrite(led,HIGH);
}
void parado(){
  digitalWrite(motorR2,LOW);
  digitalWrite(motorR1,LOW);
  digitalWrite(motorA2,LOW);
  digitalWrite(motorA1,LOW);
  digitalWrite(led,LOW);
}
void izquierda(){
  digitalWrite(motorA1,HIGH);
  digitalWrite(motorR2,HIGH);
  digitalWrite(led,HIGH);
}
void derecha(){
  digitalWrite(motorA2,HIGH);
  digitalWrite(motorR1,HIGH);
  digitalWrite(led,HIGH);
}
void encenderLuz(){
  digitalWrite(luz,HIGH);
}
void apagarLuz(){
  digitalWrite(luz,LOW);
}
void encenderLuztras(){
  digitalWrite(luztras,HIGH);
}
void apagarLuztras(){
  digitalWrite(luztras,LOW);
}
 void emergenciaOn(){
  digitalWrite(luztras,HIGH);
  digitalWrite(luz,HIGH);
  delay(500);
  digitalWrite(luztras,LOW);
  digitalWrite(luz,LOW);
  delay(500);
  }
void emergenciaOff(){
  digitalWrite(luztras,LOW);
  digitalWrite(luz,LOW);
  }
void claxonOn(){
  digitalWrite(claxon,HIGH);
}
void claxonOff(){
  digitalWrite(claxon,LOW);
}

APLICACIÓN BLUETOOTH RC CONTROLLER

Esta aplicación esta diseñada para ser utilizada con un coche RC modificado. La aplicación nos permite controlar un coche RC basado en Arduino a través de Bluetooth. Esto se hace usando un dispositivo habilitado con Bluetooth Android. La aplicación permite controlar el coche, ya sea con los botones o el acelerómetro del dispositivo móvil.


Los comandos que se envían al coche a través de la aplicación son:

  • Forward: F
  • Back: B
  • Left: L
  • Right: R
  • Front light on: W
  • Front light off: w
  • Back lights on: U
  • Back lights off: u
  • Horn on (claxon): V 
  • Horn off : v
  • Extra on (emergencia): X
  • Extra off: x
CONEXIONES



Para que el coche avance, los dos motores deberán ir hacia adelante (se activan los pines 3 y 5 de la placa Arduino. Para retroceder, los motores giran hacia atrás (se activan el 2 y el 4). Para girar el coche, un motor gira en un sentido y el otro en el contrario (derecha: pines 3 y 4; izquierda: pines 2 y 5). 


En este esquema, para evitar sobrecargar la imagen, se a prescindido de las luces traseras y el claxon. En nuestro caso, se ha escrito el código considerando el control de las luces traseras mediante el pin digital 12 y el claxon mediante el 10.

No hay comentarios:

Publicar un comentario