BOTSUMO
A continuación se dara a conocer el robot móvil controlado por Bluetooth desde nuestro celular o smartphone a través de una aplicacion Android.
1. Materiales:
Arduino
Podemos usar cualquiera de las placas Arduino, nosotros usaremos el Arduino Uno R3 por ser uno de los más usados.
Módulo Bluetooth HC-06 o HC-05
Este módulo nos sirve para que nuestro Arduino y el celular puedan comunicarse a través de Bluetooth. Para esta aplicación podemos usar cualquiera de los dos módulos pues los trabajaremos en modo esclavo.
Driver Puente H
El puente H es el que nos permite invertir el giro de un motor, necesitamos un puente H que tenga dos canales para poder controlar dos motores.
Motores con Llanta
Básicamente 2 motores DC con caja reductora y su respectiva llanta, una velocidad promedio puede ser 100RPM, pero dependerá de la velocidad que uno desee.
2. Ensamblando la parte mecánica de nuestro Robot Móvil:
Usaremos el giro diferencial, que utiliza dos ruedas principales que dan la tracción y por diferencia de velocidad en estas podremos realizar giros. Usaremos esta configuración por ser fácil de implantar, a diferencia de la configuración Ackerman (la que usan los vehículo motorizados) que es más complicado de implementar la parte mecánica.
3. Conexiones eléctricas:
Usaremos dos baterías de 9V, una para alimentar a nuestro Arduino y otra para alimentar nuestros motores controlados por el Puente L298N, de lo contrario se sobrecalentaría el regulador interno que tiene.
El voltaje recomendado para alimentar a la placa Arduino es de 6V, pero no debe de ser superior a los 12V, adicionalmente la batería debe tener suficiente corriente para que pueda alimentar los dos motores, de lo contrario nuestro Arduino se va a estar reiniciando cuando empiecen a funcionar los motores.
4. Programación de nuestro Robot Móvil:
Para que tengan una mayor comprensión trabajaremos el programa en dos etapas:
4.1. Test de movimientos
En este primer ejemplo probaremos los diferentes movimientos del robot, lo realizaremos aun sin conexión Bluetooth para poder entender mejor el programa.
Para poder programar necesitamos desconectar el módulo Bluetooth, podemos desconectar todo el módulo o simplemente dejar libre el RX (pin 0) del Arduino
El código es el siguiente:
//Pines de conexión del driver int Pin_Motor_Der_A = 8; int Pin_Motor_Der_B = 9; int Pin_Motor_Izq_A = 10; int Pin_Motor_Izq_B = 11; void setup() { // inicializar la comunicación serial a 9600 bits por segundo: Serial.begin(9600); // configuramos los pines como salida pinMode(Pin_Motor_Der_A, OUTPUT); pinMode(Pin_Motor_Der_B, OUTPUT); pinMode(Pin_Motor_Izq_A, OUTPUT); pinMode(Pin_Motor_Izq_B, OUTPUT); } void loop() { //movemos el robot hacia delante por 2 segundos Mover_Adelante(); delay(2000); //movemos el motor a la derecha por 2 segundos Mover_Derecha(); delay(2000); } void Mover_Adelante() { digitalWrite (Pin_Motor_Der_A, HIGH); digitalWrite (Pin_Motor_Der_B, LOW); digitalWrite (Pin_Motor_Izq_A, HIGH); digitalWrite (Pin_Motor_Izq_B, LOW); } void Mover_Retroceso() { digitalWrite (Pin_Motor_Der_A,LOW ); digitalWrite (Pin_Motor_Der_B,HIGH ); digitalWrite (Pin_Motor_Izq_A,LOW ); digitalWrite (Pin_Motor_Izq_B,HIGH ); } void Mover_Derecha() { digitalWrite (Pin_Motor_Der_A,LOW ); digitalWrite (Pin_Motor_Der_B,HIGH ); digitalWrite (Pin_Motor_Izq_A,HIGH); digitalWrite (Pin_Motor_Izq_B,LOW); } void Mover_Izquierda() { digitalWrite (Pin_Motor_Der_A,HIGH); digitalWrite (Pin_Motor_Der_B,LOW); digitalWrite (Pin_Motor_Izq_A,LOW ); digitalWrite (Pin_Motor_Izq_B,HIGH ); } void Mover_Stop() { digitalWrite (Pin_Motor_Der_A, LOW); digitalWrite (Pin_Motor_Der_B, LOW); digitalWrite (Pin_Motor_Izq_A, LOW); digitalWrite (Pin_Motor_Izq_B, LOW); }
Como se observa la programación es fácil, se ha programado cada movimiento del robot en funciones separadas, las cuales llamamos desde el void loop(),
Para probar los movimientos hay que ir probando cada función y ver si nuestro robot se mueva de la misma manera como se lo ha programado, por ejemplo así como está el código, después de encender o resetear el Arduino debe moverse hacia delante por 2 segundos, seguidamente debe girar a la derecha por dos segundos más y lego repetir la secuencia, si el robot gira en dirección equivocada, entonces debemos de cambiar la polaridad de motor que gira en sentido erróneo.
Podemos ir probando los movimientos de forma individual reprogramando cada vez para cambiar el movimiento o programar todos a la vez con pausas entre movimientos, eso dependerá de cada uno, después de estar seguros que nuestro robot funciona correctamente pasamos a implementar la comunicación Bluetooth.
4.2. Robot Móvil controlado por Bluetooth
Para controlar el Robot se usara la siguiente aplicacion movil, para esto debemos de instalar en nuestro celular desde la PlaySotre:
La aplicación consta de 4 botones una para cada dirección, al presionar el botón para mover a cualquier dirección, la aplicacion envia los datos al Modulo Bluetooth.
Nuestro Arduino debe de leer estos 4 caracteres y realizar el movimiento, además al no tener un botón stop, nuestro Arduino deberá detener de forma automática los movimientos cuando no se tenga presionado ningún botón.
Antes de cargar el programa a nuestro Arduino debemos de desconectar los cables de nuestro Bluetooth y después de terminado la carga podemos volverlo a conectarlo.
El código que debemos de cargar a nuestro Arduino es el siguiente:
//Pines de conexión del driver
int Pin_Motor_Der_A = 8; int Pin_Motor_Der_B = 9; int Pin_Motor_Izq_A = 10; int Pin_Motor_Izq_B = 11; int tiempo=0; void setup() { // inicializar la comunicación serial a 9600 bits por segundo: Serial.begin(9600); // configuramos los pines como salida pinMode(Pin_Motor_Der_A, OUTPUT); pinMode(Pin_Motor_Der_B, OUTPUT); pinMode(Pin_Motor_Izq_A, OUTPUT); pinMode(Pin_Motor_Izq_B, OUTPUT); } void loop() { if (Serial.available()) { char dato= Serial.read(); if(dato=='a') { Mover_Adelante(); tiempo=0; } else if(dato=='r') { Mover_Retroceso(); tiempo=0; } else if(dato=='d') { Mover_Derecha(); tiempo=0; } else if(dato=='i') { Mover_Izquierda(); tiempo=0; } } if(tiempo<200) // 100 cilcos de 1ms { tiempo=tiempo+1; } else //ya transcurrió 100ms (100ciclos) { Mover_Stop(); } delay(1); //pasusa de 1ms por ciclo } void Mover_Adelante() { digitalWrite (Pin_Motor_Der_A, HIGH); digitalWrite (Pin_Motor_Der_B, LOW); digitalWrite (Pin_Motor_Izq_A, HIGH); digitalWrite (Pin_Motor_Izq_B, LOW); } void Mover_Retroceso() { digitalWrite (Pin_Motor_Der_A,LOW ); digitalWrite (Pin_Motor_Der_B,HIGH ); digitalWrite (Pin_Motor_Izq_A,LOW ); digitalWrite (Pin_Motor_Izq_B,HIGH ); } void Mover_Derecha() { digitalWrite (Pin_Motor_Der_A,LOW ); digitalWrite (Pin_Motor_Der_B,HIGH ); digitalWrite (Pin_Motor_Izq_A,HIGH); digitalWrite (Pin_Motor_Izq_B,LOW); } void Mover_Izquierda() { digitalWrite (Pin_Motor_Der_A,HIGH); digitalWrite (Pin_Motor_Der_B,LOW); digitalWrite (Pin_Motor_Izq_A,LOW ); digitalWrite (Pin_Motor_Izq_B,HIGH ); } void Mover_Stop() { digitalWrite (Pin_Motor_Der_A, LOW); digitalWrite (Pin_Motor_Der_B, LOW); digitalWrite (Pin_Motor_Izq_A, LOW); digitalWrite (Pin_Motor_Izq_B, LOW); }
Como se observa al código del primer ejemplo solo le hemos agregado la parte de la comunicación serial, en donde leemos el dato y comparamos para ver si es el carácter correspondiente para realizar su respectivo movimiento, adicionalmente si durante 100 milisegundos no llega ningún dato detenemos el robot, y tan pronto le llega uno de los datos reiniciamos la cuenta de los 100ms.
Una vez que tengan todo listo, tan solo hay que abrir la App, conectarnos a nuestro modulo Bluetooth y empezar a mover nuestro robot con los botones.