RyukDuino Grupo 18 Móstoles
RyukDuino
Grupo 18
Noelia Molero Puerto
Miguel Ángel Rivas Pozo
Claudia Soriano Parra
Índice
1.
Introducción
Introducción
2.
Materiales
utilizados
Materiales
utilizados
3.
Circuitos
Circuitos
4.
Aplicación
utilizada
Aplicación
utilizada
5.
Código
desarrollado
Código
desarrollado
6.
Problemas
encontrados y mejoras posibles
Problemas
encontrados y mejoras posibles
7.
Demostración
de su funcionamiento
Demostración
de su funcionamiento
1.
Introducción:
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.
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 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:
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:
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:
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.
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:
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.
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:
Bluetooth utilizamos el siguiente código:
#include <SoftwareSerial.h>
SoftwareSerial BT(2,3); // RX, TX
String nombre = «PROMETEC»; //Nombre de nuestro
Bluetooth
Bluetooth
String password =»5678″; //Contraseña de nuestro Bluetooth
void setup(){
BT.begin(9600);
pinMode
(13,OUTPUT);
(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
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
para los motores
pinMode (ENA,
OUTPUT);
OUTPUT);
pinMode (ENB,
OUTPUT);
OUTPUT);
pinMode (IN1,
OUTPUT);
OUTPUT);
pinMode (IN2,
OUTPUT);
OUTPUT);
pinMode (IN3,
OUTPUT);
OUTPUT);
pinMode (IN4,
OUTPUT);
OUTPUT);
// Declaración
para el sensor de obstáculos
para el sensor de obstáculos
pinMode(sensorObstaculos, INPUT);
// Declaraciones
para el sensor de color
para el sensor de color
pinMode(S0,
OUTPUT);
OUTPUT);
pinMode(S1,
OUTPUT);
OUTPUT);
pinMode(S2,
OUTPUT);
OUTPUT);
pinMode(S3,
OUTPUT);
OUTPUT);
pinMode(sensorOut, INPUT);
// Setting
frequency-scaling to 20%
frequency-scaling to 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
//Declaración
para los leds
para los leds
pinMode(leds_adelante, OUTPUT);
pinMode(leds_stop, OUTPUT);
}
void loop(){
int
valueObstaculos = 0;
valueObstaculos = 0;
int frequency_red
= 0;
= 0;
int
frequency_green = 0;
frequency_green = 0;
int
frequency_blue = 0;
frequency_blue = 0;
if
(BT.available()){
(BT.available()){
switch
(BT.read()){
(BT.read()){
case ‘F’:
//comprobamos
si hay obstáculo
si hay obstáculo
valueObstaculos = digitalRead(sensorObstaculos);
//recogemos
el color rojo
el color rojo
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
frequency_red
= pulseIn(sensorOut, LOW);
= pulseIn(sensorOut, LOW);
//recogemos
el color verde
el color verde
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
frequency_green
= pulseIn(sensorOut, LOW);
= pulseIn(sensorOut, LOW);
//recogemos
el color azul
el color azul
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
frequency_blue = pulseIn(sensorOut, LOW);
//si
encuentra oscuridad o un obstáculo se para
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
A
digitalWrite
(IN1, LOW);
(IN1, LOW);
digitalWrite
(IN2, HIGH);
(IN2, HIGH);
analogWrite (ENA,
vel); //Velocidad motor A
vel); //Velocidad motor A
//Direccion motor
B
B
digitalWrite
(IN3, LOW);
(IN3, LOW);
digitalWrite
(IN4, HIGH);
(IN4, HIGH);
analogWrite (ENB,
vel); //Velocidad motor B
vel); //Velocidad motor B
}
void Adelante (){
digitalWrite(leds_stop, LOW);
//Direccion motor
A
A
digitalWrite
(IN1, HIGH);
(IN1, HIGH);
digitalWrite
(IN2, LOW);
(IN2, LOW);
analogWrite (ENA,
vel); //Velocidad motor A
vel); //Velocidad motor A
//Direccion motor
B
B
digitalWrite
(IN3, HIGH);
(IN3, HIGH);
digitalWrite
(IN4, LOW);
(IN4, LOW);
analogWrite (ENB,
vel); //Velocidad motor B
vel); //Velocidad motor B
}
void Izquierda (){
digitalWrite(leds_stop, LOW);
//Direccion motor
A
A
digitalWrite
(IN1, LOW);
(IN1, LOW);
digitalWrite
(IN2, HIGH);
(IN2, HIGH);
analogWrite (ENA,
vel); //Velocidad motor A
vel); //Velocidad motor A
//Direccion motor
B
B
digitalWrite (IN3,
HIGH);
HIGH);
digitalWrite
(IN4, LOW);
(IN4, LOW);
analogWrite (ENB,
vel); //Velocidad motor A
vel); //Velocidad motor A
}
void Derecha (){
digitalWrite(leds_stop, LOW);
//Direccion motor
A
A
digitalWrite
(IN1, HIGH);
(IN1, HIGH);
digitalWrite
(IN2, LOW);
(IN2, LOW);
analogWrite (ENA,
vel); //Velocidad motor A
vel); //Velocidad motor A
//Direccion motor
B
B
digitalWrite
(IN3, LOW);
(IN3, LOW);
digitalWrite
(IN4, HIGH);
(IN4, HIGH);
analogWrite (ENB,
vel); //Velocidad motor A
vel); //Velocidad motor A
}
void Parar (){
digitalWrite(leds_stop, HIGH);
//Direccion motor
A
A
digitalWrite
(IN1, LOW);
(IN1, LOW);
digitalWrite
(IN2, LOW);
(IN2, LOW);
analogWrite (ENA,
0); //Velocidad motor A
0); //Velocidad motor A
//Direccion motor
B
B
digitalWrite
(IN3, LOW);
(IN3, LOW);
digitalWrite
(IN4, LOW);
(IN4, LOW);
analogWrite (ENB,
0); //Velocidad motor A
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:
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.
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.
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.
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:
Demostración de su funcionamiento: