COCHE BLUETOOTH CON DIRECCIÓN

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

COCHE BLUETOOTH

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. Utilizando una app de control bluetooth para Arduino, podrás dirigir el coche con un móvil Android. La app envía una serie de códigos a la placa Arduino y ésta interpreta los códigos generando el
movimiento deseado en los motores.

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.

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.

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

int motor1Avance = 6;
int motor1Atras = 5;
int motor2Avance = 10;
int motor2Atras = 9;int estado = 0;
int i = 0;

void setup() {

pinMode(motor1Avance, OUTPUT);
pinMode(motor1Atras, OUTPUT);
pinMode(motor2Avance, OUTPUT);
pinMode(motor2Atras, OUTPUT);
analogWrite(motor1Avance, 0);
analogWrite(motor1Atras, 0);
analogWrite(motor2Avance, 0);
analogWrite(motor2Atras, 0);
Serial.begin(9600);
}

void loop() {

if(Serial.available() > 0)
{
estado = Serial.read();
}
Serial.println(estado);
if (estado == ‘c’)
{
analogWrite(motor1Avance, 0);
analogWrite(motor1Atras, 0);
analogWrite(motor2Avance, 0);
analogWrite(motor2Atras, 0);
Serial.println(«parado»);
}
else if (estado == ‘a’)
{
analogWrite(motor1Avance, 255);
analogWrite(motor1Atras, 0);
analogWrite(motor2Avance, 248);
analogWrite(motor2Atras, 0);
Serial.println(«adelante»);
}
else if (estado == ‘d’)
{
analogWrite(motor1Avance, 100);
analogWrite(motor1Atras, 0);
analogWrite(motor2Avance, 200);
analogWrite(motor2Atras, 0);
Serial.println(«derecha»);
}

else if (estado == ‘b’)
{
analogWrite(motor1Avance, 200);
analogWrite(motor1Atras, 0);
analogWrite(motor2Avance, 100);
analogWrite(motor2Atras, 0);
Serial.println(«izquierda»);
}
else if (estado == ‘e’)
{
analogWrite(motor1Avance, 0);
analogWrite(motor1Atras, 255);
analogWrite(motor2Avance, 0);
analogWrite(motor2Atras, 255);
Serial.println(«atras»);
}
Serial.println(i++);
}

ROBOTIZAR LA PLATAFORMA

Tras montar la plataforma soldar un cable a cada uno de los terminales de los motores.

Atornillar la placa Arduino y el controlador de motores en la plataforma superior, utilizando 2 tornillos M3 Log 464, 2 bulones de plástico y 2 tuercas M3 Log 480.

Conexión de los 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).

 

PRIMEROS PASOS CON MBLOCK:

mBlock es una herramienta de programación por bloques basado en scratch.

Para instalar el software, accede a https://mblock.makeblock.com/en/ y desde el apartado Download descarga e instala el software adecuado según tu sistema operativo.

Una vez instalado, ejecuta el software mBlock:

  • Pulsa en añadir (dentro de dispositivos), seleccionamos la placa «arduino uno» y pulsa en aceptar.
  • Si hay más dispositivos añadidos, pulsa en cada uno de ellos y elimínalos haciendo clic en la X de la esquina.
  • Conecta la placa al PC y pulsa en «conectar».
  • Pulsa en «Mostrar todos los dispositivos conectables», selecciona el puerto COM con el número mayor y pulsa en «conectar».

PRIMEROS PASOS CON ARDUINO IDE:

Arduino IDE es una herramienta de programación por código basada en C++

Para instalar el software de Arduino, entra en https://www.arduino.cc/en/software

Descarga el software Arduino IDE que mejor se ajuste a tu sistema operativo.

Una vez instalado, abre «Arduino IDE»:

  • Pulsa en la pestaña herramientas, selecciona placa y pulsa en Arduino UNO
  • Pulsa en la pestaña herramientas, selecciona puerto y pulsa en «COM*Número*» Si aparecen varios puertos COM, selecciona el que esté identificado como Arduino UNO o el que tenga asociado el número mayor.

Una vez realizada la conexión, ya podemos empezar a programar.

RECEPTOR INFRARROJO

En esta práctica vamos a ver cómo leer la señal de un mando a distancia con un receptor IR. El objetivo será encender y apagar el LED 13 (integrado en la placa) utilizando 2 botones del mando.    

  1. ¿Qué es un receptor IR? 
  2. Circuito: Cómo conectar un receptor IR a Arduino
  3. Programación con Mblock
  4. Programación con Arduino IDE

1.  ¿Qué es un receptor IR TSOP?

Un TSOP es un módulo receptor de señal infrarroja capaz de realizar la lectura de señales emitidas por emisores como los que se encuentran en mandos a distancia.

Conectado a Arduino, podemos realizar la lectura de estas señales e interpretarlas, dando lugar a una acción determinada.

Existen kits que incluyen el módulo TSOP y un mando a distancia que podemos conectar y programar con Arduino.

Cada botón del mando envía una señal diferente al receptor, quedando cada botón identificado inequívocamente.

2. Circuito: Cómo conectar un puente en H a Arduino

Para realizar esta práctica necesitaremos el siguiente material

El módulo TSOP tiene 3 pines que conectaremos del siguiente modo

  • + Conectamos con el pin 5V de la placa Arduino
  • – Conectamos con el pin GND de la placa Arduino
  • S Conectamos con un pin PWM de la placa Arduino (ej pin 11)

¡Ya sólo nos queda programar! Para programar la placa Arduino puedes utilizar diferentes lenguajes. Nosotros nos vamos a centrar en dos opciones

  • MBlock – programación basada en bloques
  • Arduino IDE – programación basada en líneas de código

3.  Programación con Mblock

Este ejercicio cuenta con 2 fases. En la primera, tenemos que leer e identificar el código que envían los botones que vamos a utilizar. En la segunda, conocidos estos códigos, crearemos los condicionales necesarios para apagar y encender el led.

El primer paso es configurar la tarjeta, sigue los pasos que te indicamos en «Mblock: primeros pasos«  Una vez configurada la tarjeta comenzamos con la programación.

Para poder programar el mando a distancia, necesitamos instalar una extensión en Mblock. Descarga la extensión desde el siguiente enlace: Extensión IR Remote

A continuación arrastra el archivo de la extensión dentro del programa Mblock. Una vez instalada aparecerá una nueva sección de bloques llamada «Control IR». Cada vez que cierres el software la extensión desaparecerá y tendrás que volver a instalarla.

Para identificar los códigos de los botones que vamos a utilizar, hacemos un primer programa donde realizamos la lectura de un datos y lo enviamos al puerto serie para identificarlo.

Cuando trabajamos con esta extensión, no podemos utilizar el evento «Al hacer clic en la bandera». Debemos trabajar de forma autónoma.

En lugar de activar el botón «en vivo», debes pulsar el botón «cargar».

Una vez hecho esto, cuando accedas a los eventos verás un nuevo bloque disponible «Cuando Arduino Uno se inicia». Ese es el evento que utilizaremos cuando queramos trabajar con la placa en modo autónomo, como es en este caso.

Arrastra el bloque «Cuando Arduino Uno se inicia» al área de programación. Después, configura el receptor IR en el pin 11 e inicia la comunicación del puerto serie a 9600 baudios. Estos bloques los encontrarás en la nueva sección «Control IR».

Una vez configurado el receptor, introducimos un bucle infinito donde realizaremos la lectura de los códigos del mando. Si se ha recibido un dato, lo enviamos por el puerto serie para poder ver de qué código se trata.

Cargamos el programa en la placa pulsando el botón «conectar» y luego «subir».

Mblock, actualmente, no dispone de un monitor serie para ver los datos que se envían y se reciben, asique utilizaremos Arduino IDE para esta acción. Pulsa en el botón «desconectar» de Mblock y abre el software Arduino IDE. En el menú herramientas, selecciona la placa Arduino Uno y el puerto COM donde esté conectada.

Con la placa conectada al pc, pulsa de nuevo en el menú herramientas y selecciona «Monitor serie». Recuerda que es importante haber pulsado «desconectar» en mblock. Si no lo has hecho, Arduino IDE te indicará que el puerto COM esta ocupado y no podrá activar el monitor serie. Una vez abierto el monitor serie, aparecerá una pantalla como esta:

Fíjate bien que al pie de esta ventana a la izquierda tengas configurado el puerto a 9600 baudios.

Con la placa Arduino conectada al PC, coge el mando a distancia y, orientado al receptor,  pulsa el botón 1. Verás que en la ventana del puerto serie aparece un código. Pulsa el botón 2, y verás que aparece un código diferente. Estos códigos identifican a cada uno de los botones.

Ahora que conocemos el código que representa a cada botón, vamos a programar su comportamiento. Cierra el monitor serie y vuelve al programa Mblock.

Modificamos el código incluyendo dos condicionales que analicen el código recibido. Si el código se corresponde con el botón 1, encendemos el led 13, si se corresponde con el botón 2 apagamos el led.

Pulsa en el botón «subir» y el programa se cargará en la placa Arduino. Para comprobar su funcionamiento, coge el mando a distancia y orientado al TSOP, pulsa los botones 1 y 2. Verás como el led amarillo de la placa Arduino se enciende y apaga según el botón pulsado.

4.  Programación con Arduino IDE

Vamos a realizar el mismo programa, utilizando líneas de código con Arduino IDE El primer paso es configurar la tarjeta, sigue los pasos que te indicamos en «Arduino IDE: primeros pasos«. Una vez configurada la tarjeta comenzamos con la programación. Recuerda que al trabajar con código debemos respetar la sintaxis: Cuidado con las letras mayúsculas y minúsculas y con los signos de puntuación. ¡Son importantes!.

Utilizaremos la instrucción analogWrite para enviar la señal a los motores.

void setup(){
   pinMode(5, OUTPUT);
   pinMode(6, OUTPUT);
   pinMode(9, OUTPUT);
   pinMode(10, OUTPUT);
}

void loop(){

   analogWrite(5, 255);   // avanza
   analogWrite(9, 255);
   analogWrite(6, 0);
   analogWrite(10, 0);
   delay(1000);

   analogWrite(5, 0);   // retrocede
   analogWrite(9, 0);
   analogWrite(6, 255);
   analogWrite(10, 255);
   delay(1000);

   analogWrite(5, 255);   // gira
   analogWrite(9, 100);
   analogWrite(6, 0);
   analogWrite(10, 0);
   delay(1000);

   analogWrite(5, 100);   // gira
   analogWrite(9, 255);
   analogWrite(6, 0);
   analogWrite(10, 0);
   delay(1000);

   analogWrite(5, 0);   // para
   analogWrite(9, 0);
   analogWrite(6, 0);
   analogWrite(10, 0);
   delay(1000);
}


Pulsa en el icono subir, y comprueba el resultado.