RyukDuino Grupo 18 Móstoles

RyukDuino
Grupo 18
Noelia Molero Puerto
Miguel Ángel Rivas Pozo
Claudia Soriano Parra
Índice
1.        
Introducción
2.        
Materiales
utilizados
3.        
Circuitos
4.        
Aplicación
utilizada
5.        
Código
desarrollado
6.        
Problemas
encontrados y mejoras posibles
7.        
Demostración
de su funcionamiento
1.        
Introducción:
Nuestro proyecto consiste en un coche teledirigido a través de una
aplicación móvil por medio de Bluetooth. Nuestro vehículo es capaz de detectar
la oscuridad y objetos. Cuenta con faros delanteros y con luces de freno. Para
poder controlar nuestro coche utilizaremos para ello la aplicación
Arduino Bluetooth RC Car, disponible en la
Play Store.
2.        
Materiales utilizados:
Materiales
Precio

Placa de Arduino


Protoboard



Plataforma del coche

15,99€
Módulo Bluetooth HC-06
6,25€

Sensor de color RGB TC-3200
4,14€


Sensor de obstáculos infrarrojo

1€


Controlador de motores L298N

6€


Leds
2€



Cables

7,55€


Pilas
8,95€
Total: 51,87€
3.        
Circuitos:
Circuito para conectar los cuatro motores
Circuito para conectar nuestro módulo Bluetooth
Circuito para el sensor de obstáculos infrarrojo

Circuito para conectar el sensor de color
4.        
Aplicación utilizada:
La aplicación utilizada para el control del coche ha sido Arduino Bluetooth RC Car, descargada en la
Play Store. Su aspecto es el siguiente:
De todos los controles disponibles hemos decidido centrarnos en los
controles básicos de delante atrás y girar a ambos lados, así como en la
posibilidad de activar y desactivar las luces delanteras, los cuales pueden
utilizarse una vez la aplicación se haya conectado al Bluetooth.
5.        
Código desarrollado:
En nuestro proyecto de Arduino tuvimos que utilizar dos códigos distintos,
los cuales exponemos posteriormente. El primero es necesario para poder
configurar nuestro módulo Bluetooth. Una vez lo tengamos configurado entonces
podemos cargar en nuestra placa de Arduino el código necesario para poder
utilizar nuestro coche.
Por tanto, para configurar en un primer momento el
Bluetooth utilizamos el siguiente código:
#include <SoftwareSerial.h>
SoftwareSerial BT(2,3); // RX, TX
String nombre = “PROMETEC”; //Nombre de nuestro
Bluetooth
String password =”5678″;  //Contraseña de nuestro Bluetooth
void setup(){
  BT.begin(9600);
  pinMode
(13,OUTPUT);
 
digitalWrite(13,LOW) ;
 
BT.print(“AT”);
  delay(1000);
 
BT.print(“AT+NAMEPROMETEC”);
 
Serial.print(nombre);
  delay(1000);
 
BT.print(“AT+PIN”);
 
BT.print(password);
  delay(1000);
  digitalWrite(13,HIGH)
;
}
void loop(){
}
Una vez hemos configurado el Bluetooth podemos
comenzar con el código para controlar nuestro coche
#include <SoftwareSerial.h>
SoftwareSerial BT(2, 3); //Para el Bluetooth
//Control motores
// Motor A
int ENA = 6;
int IN1 = 13;
int IN2 = 12;
// Motor B
int ENB = 5;
int IN3 = 11;
int IN4 = 10;
int vel = 150;
//Reconocimiento de Obstáculos
int sensorObstaculos = 9;
//Reconocimiento de Color
int S0 = A2;
int S1 = A1;
int S2 = A4;
int S3 = A5;
int sensorOut = A3;
//Frenos delanteros
int i=1;
int leds_adelante = 8;
//Luces freno
int leds_stop = 4;
void setup(){
  BT.begin(9600) ;
  // Declaración
para los motores
  pinMode (ENA,
OUTPUT);
  pinMode (ENB,
OUTPUT);
  pinMode (IN1,
OUTPUT);
  pinMode (IN2,
OUTPUT);
  pinMode (IN3,
OUTPUT);
  pinMode (IN4,
OUTPUT);
  // Declaración
para el sensor de obstáculos
 
pinMode(sensorObstaculos, INPUT);
  // Declaraciones
para el sensor de color
  pinMode(S0,
OUTPUT);
  pinMode(S1,
OUTPUT);
  pinMode(S2,
OUTPUT);
  pinMode(S3,
OUTPUT);
 
pinMode(sensorOut, INPUT);
 
  // Setting
frequency-scaling to 20%
 
digitalWrite(S0,HIGH);
 
digitalWrite(S1,LOW);
  //Declaración
para los leds
 
pinMode(leds_adelante, OUTPUT);
 
pinMode(leds_stop, OUTPUT); 
}
void loop(){
 
  int
valueObstaculos = 0;
  int frequency_red
= 0;
  int
frequency_green = 0;
  int
frequency_blue = 0;
  if
(BT.available()){
   
    switch
(BT.read()){
      case ‘F’:
      //comprobamos
si hay obstáculo
     
valueObstaculos = digitalRead(sensorObstaculos); 
      //recogemos
el color rojo
     
digitalWrite(S2,HIGH);
     
digitalWrite(S3,HIGH);
      frequency_red
= pulseIn(sensorOut, LOW);
      //recogemos
el color verde
     
digitalWrite(S2,LOW);
     
digitalWrite(S3,LOW);
      frequency_green
= pulseIn(sensorOut, LOW);
      //recogemos
el color azul
     
digitalWrite(S2,LOW);
     
digitalWrite(S3,HIGH);
     
frequency_blue = pulseIn(sensorOut, LOW);
      //si
encuentra oscuridad o un obstáculo se para
       
if((frequency_red>249)&&(frequency_green>249)&&(frequency_blue>249)||((valueObstaculos
!= HIGH))){
           
Parar();
            break;
        }else{     
         
Adelante();
          break;
        }
      case ‘B’:
        Atras();
        break;
      case ‘R’:
        Derecha();
        break;
      case ‘L’:
       
Izquierda(); 
        break;
      case ‘S’:
        Parar();
        break;
      case ‘W’:
     
encender_luces();
      break;   
    }
  }
}
void Atras (){
 
digitalWrite(leds_stop, LOW);
  //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 Adelante (){
 
digitalWrite(leds_stop, LOW);
  //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 Izquierda (){
 
digitalWrite(leds_stop, LOW);
  //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 Derecha (){
 
digitalWrite(leds_stop, LOW);
  //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 (){
 
digitalWrite(leds_stop, HIGH);
  //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 encender_luces(){
  if(i==1){
   
digitalWrite(leds_adelante, HIGH);
    i=0;
  }else{
   
digitalWrite(leds_adelante, LOW);
    i=1;
  }
}
6.        
Problemas encontrados y mejoras posibles:
Aunque hemos encontrado muchos problemas para
conseguir unificar el control de todos los elementos en un único código, los
mayores problemas encontrados han sido en el sensor de obstáculos y en el
sensor del color.
De cara al sensor de obstáculos infrarrojo el
mayor problema que encontramos es que, debido a la velocidad inicial de los
motores, no era capaz de detectar el obstáculo a tiempo. Debido a esto nos
vimos obligados a reducir la velocidad lo máximo posible. Una posible mejora a
esto sería utilizar utilizar unos mejores sensores.
Con respecto al sensor de color los problemas
encontrados son que, los colores predefinidos en el sensor no coincidían con
los valores reales que obteníamos en el entorno, ya que la luz ambiente influía
más de lo que esperábamos. Una posible mejora a esto sería añadir un mayor
número de sensores de color para obtener así un dato más fiable.
7.        
Demostración de su funcionamiento:


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 *