Coche Teledigirido “FRALANCAR”

COCHE TELEDIRIGIDO ARDUINO

“FRALANCAR”

Álvaro Botia Ortiz, Blanca Aledo Ayllón y Francisco José Franco Benito

Sistemas Empotrados y de Tiempo Real

Curso 2016/2017

Introducción

El objetivo de este proyecto es la construcción de un coche
teledirigido que controlaremos utilizando un Smartphone. Nuestro objetivo es la
construcción del coche a través de distintas piezas, como son un Arduino UNO,
un controlador de motores, o un Bluetooth, entre otras. Además, crearemos la
propia aplicación Software necesaria para el control del dispositivo y le
añadiremos un Sensor en la parte trasera, para que, cuando vaya a chocarse
contra cualquier obstáculo, este lo evite parando el coche.
De entrada, a partir de nuestro chasis, hemos ido montando
los motores e incorporando ruedas. Una vez puestos los motores, nos centraremos
en hacer un coche que haga funcionar los motores, y posteriormente
incorporaremos nuestro módulo Bluetooth, finalmente añadiremos un sensor de
distancia, e iremos monotorizando para poder ir haciendo pruebas.

Figura 1. Materiales iniciales.

Esquema Hardware – Software

En el siguiente esquema Hw-Sw, podemos observar que en el
montaje de nuestro coche, hemos utilizado:
         
Conexiones eléctricas
         
Placa Arduino UNO
         
ProtoBoard
         
Módulo controlador de Motores L298N
         
Placa Bluetooth
         
Sensor de distancia
         
Motores
         
Bateria externa / pilas


Figura 2.  Circuito final.

Hemos evitado soldar algunas patillas con el soldador,
puesto que al estar muy juntas, se podría producir un cortocircuito. Además
para el sensor de distancia, hemos empleado un Protoboard para evitar que las
conexiones se salgan de la patilla.

Componentes y Precios

La mayoría de
los componentes han sido pedidos en Amazon,
junto con los materiales proporcionados por la universidad.
Material
Precios
Pack
con Ruedas, 2 Motores y Chasis
15
Placa
Bluetooth
8
Sensor
de Ultrasonido (pack x3)
9
Módulo
controlador de Motores L298N
7
Kit
Cables
Proporcionado
por la URJC
Arduino
UNO
Proporcionado
por la URJC
Bateria
Externa
12,49
Pilas
6,51
Total
58,00

 




Problemas y Soluciones:

  •        En un principio no éramos capaces de controlar
    el coche a través del
    Bluetooth, y
    pensamos que sería un problema con las conexiones de este. Sin embargo, nos
    dimos cuenta de que el coche no funcionaba si no estaba conectado al ordenador,
    es decir, el problema real era una
    escasez
    de potencia
    , lo que conseguimos solucionar añadiendo una Batería Externa a
    nuestro sistema, que junto a las pilas proporcionarían la potencia necesaria.
  •        Serios problemas con las conexiones entre el
    Bluetooth y el Arduino, lo que provocaba muchos cortocircuitos. En un
    principio, tratamos como solución la de soldar los cables a estos Sistemas,
    pero nos dimos cuenta de que era una tarea muy compleja, y decidimos unirlo
    todo con paciencia, con el fin de evitar cortocircuitos.
  •          A la hora de programar los sensores de
    Ultrasonido, y juntar estas líneas de programación en Arduino al resto, hemos
    tenido serios problemas hasta que el coche ha funcionado correctamente, ya que
    o se chocaba sin que el sensor sirviese para nada, o el Botón de “Atrás”
    quedaba inutilizado una vez se paraba antes de chocarse. Al final, hemos
    conseguido ponerle solución monotorizando en pantalla la distancia calculada
    con el sensor, viendo que a veces, era problema del código el que no funcionase
    correctamente el sensor.
  •         Los cables de los motores estaban conectados de
    manera incorrecta, lo que provocaba que la señal de llegada diera una reacción
    incorrecta, por lo que tuvimos que volver a colocarlos.
  •         Nos ha costado distribuir el Hardware para que
    el coche quede compacto.
  •         A la hora de la creación de nuestra aplicación,
    como podemos ver en las siguientes imágenes, hemos tenido que crear dos
    aplicaciones totalmente diferentes, ya que la primera de ellas no conseguimos
    que funcionase.


   Aplicación Fallida, aquí podemos encontrar el Código utilizado y la Pantalla
de Inicio:

Figura 3. Aplicación fallida.
 Aplicación Correcta, aquí podemos observar el
Logo de nuestra aplicación, la Pantalla de Inicio que se observaría al abrir la
misma, y dos imágenes resultantes de la Programación de nuestra aplicación:

Figura 4. Aplicación.

Trabajo de cada integrante:

El trabajo ha sido llevado a cabo en conjunto.
  •  Compra e investigación de posibles materiales y
    componentes para el proyecto.
  •  Montaje de los componentes, con la previa
    búsqueda de información para hacerlo         de manera correcta.
  •  Pruebas con el código.
  •  Realización de la aplicación.
  •  Pruebas sobre la utilización de nuestra
    aplicación.
  •  Preparar elementos para la presentación,
    memoria, blog, etc.

Código Fuente

 #include
<SoftwareSerial.h>
SoftwareSerial
BT(2, 3);
int
duracion;
int distancia;
//
Motor A
int
ENA = 6;
int
IN1 = 13;
int
IN2 = 12;
//
Motor B
int
ENB = 5;
int
IN3 = 11;
int
IN4 = 10;

int
trigPin = 7;
int
echoPin =4;
void
setup()
{
  BT.begin(9600) ;
  // Declaramos todos los pines como salidas
  pinMode (ENA, OUTPUT);
  pinMode (ENB, OUTPUT);
  pinMode (IN1, OUTPUT);
  pinMode (IN2, OUTPUT);
  pinMode (IN3, OUTPUT);
  pinMode (IN4, OUTPUT);
 Serial.begin (9600);
   pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
}
void
loop()
{
int
vel = BT.parseInt() ;
if
(BT.read() == ‘n’){
  digitalWrite(trigPin, LOW);   // Nos aseguramos de que el trigger está
desactivado
        delayMicroseconds(2);     // Para estar seguros de que el trigger
esta LOW
        digitalWrite(trigPin, HIGH);  // Activamos el pulso de salida
        delayMicroseconds(10);    // Esperamos 10µs. El pulso sigue active
este tiempo
        digitalWrite(trigPin, LOW); // Cortamos
el pulso y a esperar el echo
        duracion = pulseIn(echoPin, HIGH) ;
  distancia = duracion / 2 / 29.1  ;
      Serial.println(String(distancia) + ”
cm.”);
  if (BT.available() && distancia >
20 ){
    switch (BT.read())
    {
      case ‘F’:
        Adelante(vel);
        break;
      case ‘B’:
        Atras(vel);
        break;
      case ‘R’:
        Derecha(vel);
        break;
      case ‘L’:
        Izquierda(vel);
        break;
      case ‘S’:
        Parar();
        break;
      case ‘E’:
        On();
        break;
      case ‘A’:
        Off(vel);
        break;
      default :
        Off(vel);
        break;
}}else
if (distancia < 20 && distancia > 2){
Parar();
delay(1500);
Adelante(vel);
delay(1500);}
}
}
void
Adelante (int vel)
{
  //Direccion motor A
  digitalWrite (IN1, LOW);
  digitalWrite (IN2, HIGH);
  analogWrite (ENA, vel); //Velocidad motor A
  //Direccion motor B
  digitalWrite (IN3, LOW);
  digitalWrite (IN4, HIGH);
  analogWrite (ENB, vel); //Velocidad motor B
}
void
Atras (int vel)
{
  //Direccion motor A
  digitalWrite (IN1, HIGH);
  digitalWrite (IN2, LOW);
  analogWrite (ENA, vel);  //Velocidad motor A
  //Direccion motor B
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW);
  analogWrite (ENB, vel); //Velocidad motor B
}
void
Derecha (int vel)
{
  //Direccion motor A
  digitalWrite (IN1, LOW);
  digitalWrite (IN2, HIGH);
  analogWrite (ENA, vel); //Velocidad motor A
  //Direccion motor B
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW);
  analogWrite (ENB, vel); //Velocidad motor A
}
void
Izquierda (int vel)
{
  //Direccion motor A
  digitalWrite (IN1, HIGH);
  digitalWrite (IN2, LOW);
  analogWrite (ENA, vel); //Velocidad motor A
  //Direccion motor B
  digitalWrite (IN3, LOW);
  digitalWrite (IN4, HIGH);
  analogWrite (ENB, vel); //Velocidad motor A
}
void
Parar ()
{
  //Direccion motor A
  digitalWrite (IN1, LOW);
  digitalWrite (IN2, LOW);
  analogWrite (ENA, 0); //Velocidad motor A
  //Direccion motor B
  digitalWrite (IN3, LOW);
  digitalWrite (IN4, LOW);
  analogWrite (ENB, 0); //Velocidad motor A
}
void
On ()
{
  }
void
Off (int vel){
   //Direccion motor A
  digitalWrite (IN1, LOW);
  digitalWrite (IN2, LOW);
  analogWrite (ENA, 0); //Velocidad motor A
  //Direccion motor B
  digitalWrite (IN3, LOW);
  digitalWrite (IN4, LOW);
  analogWrite (ENB, 0); //Velocidad motor A
}

Presentación

Memoria

Imágenes y Vídeo



También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *