Construimos un coche cuyos movimientos controlamos por Bluetooth.
Funcionamiento
El circuito del coche contiene un dispositivo bluetooth que permite su comunicación con cualquier móvil. Instalando la app «coche bluetooth microlog» podrás dirigir el coche con un móvil Android. La app envía una serie de códigos al Arduino que éste interpreta generando el movimiento deseado en los motores. Los giros se realizan a través de un servomotor que se encarga del movimiento del eje delantero. En este caso no hace falta que las ruedas giren a diferente velocidad para generar el cambio de dirección.
Lista de materiales
1 Plataforma móvil LOG 8080
1 Servo motor LOG 06
4 Tornillos M3 x 10 mm LOG 464
6 Tornillos M3 x 16 mm LOG 464M
6 Tornillos M4 x 16 mm LOG 467
3 Tornillos M2 x 20 mm LOG 474
10 Tuercas M3 LOG 480
6 Tuercas autoblocantes M4 LOG 484
1 Tuerca autoblocante M2 LOG 482P
1 Controlador de motores L298N LOG 8444
1 Shield Bluetooth HC-06 LOG 8458
1 Conector 9V para Arduino LOG 7734
2 Ruedas eje 2,5 mm LOG S46
8 Latiguillos hembra-macho LOG S7518
8 Latiguillos macho-macho LOG S7519
6 Bulones de plástico LOG S220P
1 Hoja Técnica H1402
Construcción
Montar la plataforma móvil según sus instrucciones.
Soldar un latiguillo macho-macho a cada uno de los terminales de las reductoras.
Atornillar la placa Arduino UNO en la plataforma superior, utilizando 2 tornillos M3 LOG 464M, 2 bulones de plástico y 2 tuercas M3 LOG 480.
Atornillar el controlador de motores con 4 tornillos M3 LOG 464M, 4 bulones de plástico y 4 tuercas M3 LOG 480.
Impresión en 3D
Descargar los archivos STL desde «Thingiverse»entrando en el perfil de «Micrologt» y buscando los diseños de «Mecanismos dirección coche por bluetooth LOG 1402» o bien copiando el siguiente enlace http://www.thingiverse.com/thing:1999249
Cargar los archivos STL en un programa para control de Impresoras 3D:
– Repetier (software libre)
– Cura (software BQ)
– XYZware (software XYZ printing)
Todas los programas anteriormente nombrados son gratuitos y fáciles de instalar. Una vez que interactuemos con el programa, debemos configurar las características de la impresora.
Con estos programas podremos configurar los siguientes parámetros recomendados:
– Tipo de plástico: PLA
– Temperatura: 210º
– Relleno de las piezas: 15%
– Espesor de las capas: 0,28
– Soportes de las estructuras: si
Es importante tener la impresora calibrada.
Para mejorar el acabado podemos utilizar una lima.
Conexión del controlador de motores
El esquema incluye un controlador de motores L298N puente H. Un puente H consiste en 4 interruptores que nos permiten controlar la polaridad de la corriente que llega a los dos motores conectados al controlador de motores. Así en función de la polaridad podemos controlar el sentido de giro de los motores. Además funcionan como regulador de corriente, pudiendo determinar una velocidad de giro de 0 a 255.
Para poder controlar la velocidad de giro de los motores, se han conectado a las salidas 5, 6, 9 y 10 de Arduino que permiten la modularidad (PWM).
Conexión del módulo bluetooth
El shield bluetooth es el encargado de la comunicación bidireccional entre la tarjeta Arduino y el dispositivo móvil con el que controlaremos el coche.
El shield bluetooth tiene 4 pines:
– GND: Se conecta a un pin GND de Arduino
– V: Se conecta al pin 5V del controlador de motores
– TXD: Se conecta al pin RX de Arduino
– RXD: Se conecta al pin TX de Arduino
Los pines TX y RX son los que se van a encargar de la transmisión y recepción de datos.
CONEXIÓN DEL SERVOMOTOR
Conectamos el servomotor a la placa Arduino UNO con latiguillos teniendo en cuenta la siguiente asignación de pines:
- Cable naranja oo amarillo: pin 7
- Cable marrón o negro: GND
- Cable rojo: 5V
PROGRAMACIÓN
Arduino IDE es una herramienta de programación por códigos basado en C++. Para instalar el software de Arduino, entramos en www.arduino.cc/en/Main/Software y descargamos el software Arduino IDE.
Una vez instalado, abrir «Arduino IDE»:
– Pinchar en la pestaña «Herramientas», seleccionar donde pone «Placa» y pinchar en «Arduino/Genuino UNO».
– Pinchar en la pestaña «Herramientas», seleccionar donde pone «Puerto» y pinchar en «COM*Numero* Arduino/Genuino UNO».
Una vez realizado la conexión con la tarjeta ya podemos programar
#include <Servo.h>
Servo myservo;
int motor1Avance = 6; //Definimos los pines para los motores
int motor1Atras = 5;
int motor2Avance = 11;
int motor2Atras = 9;
int estado = 0; //almacena el dato con la orden de movimiento que envía el móvil
int i = 0;
void setup() {
myservo.attach(7);
pinMode(motor1Avance, OUTPUT); //pines de los motores LOG 39 en modo salida
pinMode(motor1Atras, OUTPUT);
pinMode(motor2Avance, OUTPUT);
pinMode(motor2Atras, OUTPUT);
analogWrite(motor1Avance, 0); //el coche empieza en estado de parado
analogWrite(motor1Atras, 0);
analogWrite(motor2Avance, 0);
analogWrite(motor2Atras, 0);
Serial.begin(9600, SERIAL_8N1);
}
void loop() {
if(Serial.available() > 0) //activamos el puerto serie para la lectura de datos
{
estado = Serial.read();
}
// leemos un dato recibido a través del dispositivo HC-06 LOG 8458
Serial.println(char(estado));
if (estado == ‘c’) // si recibimos un c, paramos el vehículo
{
analogWrite(motor1Avance, 0);
analogWrite(motor1Atras, 0);
analogWrite(motor2Avance, 0);
analogWrite(motor2Atras, 0);
Serial.println(«parado»);
myservo.write(90);
}
else if (estado == ‘a’) //si recibimos una «a» el coche circula recto de frente
{
analogWrite(motor1Avance, 255);
analogWrite(motor1Atras, 0);
analogWrite(motor2Avance, 255);
analogWrite(motor2Atras, 0);
Serial.println(«adelante»);
myservo.write(90);
}
else if (estado == ‘d’) //si recibimos una «d» el coche gira hacia la derecha
{
analogWrite(motor1Avance, 255);
analogWrite(motor1Atras, 0);
analogWrite(motor2Avance, 255);
analogWrite(motor2Atras, 0);
Serial.println(«derecha»);
myservo.write(0);
}
else if (estado == ‘b’) //si recibimos una «b» el coche gira hacia la izquierda
{
analogWrite(motor1Avance, 255);
analogWrite(motor1Atras, 0);
analogWrite(motor2Avance, 255);
analogWrite(motor2Atras, 0);
Serial.println(«izquierda»);
myservo.write(180);
}
else if (estado == ‘e’) //si recibimos una «e» el coche retrocede
{
analogWrite(motor1Avance, 0);
analogWrite(motor1Atras, 255);
analogWrite(motor2Avance, 0);
analogWrite(motor2Atras, 255);
Serial.println(«atras»);
myservo.write(90);
}
else if (estado == ‘i’) //si recibimos una «i» el coche retrocede a la derecha
{
analogWrite(motor1Avance, 0);
analogWrite(motor1Atras, 255);
analogWrite(motor2Avance, 0);
analogWrite(motor2Atras, 255);
Serial.println(«atras_derecha»);
myservo.write(45);
}
else if (estado == ‘o’) //si recibimos una «o» el coche retrocede a la izquierda
{
analogWrite(motor1Avance, 0);
analogWrite(motor1Atras, 255);
analogWrite(motor2Avance, 0);
analogWrite(motor2Atras, 255);
Serial.println(«atras_izquierda»);
myservo.write(135);
}
else if (estado == ‘j’) // si recibimos una «j» el coche avanza a la derecha
{
analogWrite(motor1Avance, 255);
analogWrite(motor1Atras, 0);
analogWrite(motor2Avance, 255);
analogWrite(motor2Atras, 0);
Serial.println(«delante_derecha»);
myservo.write(45);
}
else if (estado == ‘p’) // si recibimos una «p» el coche avanza a la izquierda
{
analogWrite(motor1Avance, 255);
analogWrite(motor1Atras, 0);
analogWrite(motor2Avance, 255);
analogWrite(motor2Atras, 0);
Serial.println(«delante_izquierda»);
myservo.write(135);
}
}
Calibración
En los programas, el control de los motores se realiza a través del envío de señales analógicas a los pares de salidas 5-6 y 9-10. Cada motor está controlado por dos pines de la tarjeta controladora, y cada pin determinará el sentido de giro del motor, permitiendo que el robot circule de frente o marcha atrás. Estos pines serán tratados como señales analógicas, enviándoles datos de 0 a 255 para poder controlar la velocidad del motor.
Si en ambas salidas enviamos un 0, el coche se parará.
La lógica nos dice que para que el coche circule en línea recta habrá que enviar a ambas salidas el mismo dato (mayor que 0). Si hacemos la prueba observamos que el coche tiende a girar en un determinado sentido. Esto es debido a la imprecisión de este tipo de motores.
La mejor solución es regular la velocidad por programación enviando a un motor una señal ligeramente inferior con respecto al otro motor.
Si lo que queremos es que el coche gire en un sentido, disminuiremos notablemente la velocidad de uno de los motores (enviando un dato de valor inferior a su salida de Arduino) provocando el giro gracias a la diferencia de velocidad entre ambos motores.
En cuanto al sentido de giro de los motores, éste viene controlado por las conexiones al puente H. Si observamos que cada rueda gira en un sentido, tendremos que modificar el cableado. Por ejemplo si tenemos los motores conectados a las salidas 1 y 3 del puente H y cada motor gira en un sentido, tendremos que cambiar uno de los motores y o bien pasarle de la salida 1 a la 2 o sino de la salida 3 a la 4.
Detalles de tipo práctico
Desconectar la alimentación del controlador de motores L298N cuando no se esté utilizando para no gastar las pilas.
Necesita 4 pilas R6 de 1,5 V y 1 pila 6F22 de 9 V.
Tiempo de construcción: 6 H.
Nivel: Difícil
Aplicacción para control por bluetooth: En play store tenemos una gran diversidad de aplicaciones que nos pueden servir.
App recomendadas: Arduino bluetooth controller y Arduino Car