Robótica inalámbrica 5.1 (proyecto)
En el blog (http://roboticared.blogspot.mx/2017/03/robotica-en-desarrollos-comunicaciones.html) se habló respecto a lo que es una comunicación inalámbrica y como funciona resumidamente el bluetooth, ahora veamos un poco de la programación, para hacer funcionar un robot móvil inalámbrico.
Antes de empezar debemos destacar que:
Para que funcione nuestro desarrollo es necesario contar con un módulo bluetooth modelo HC-06 para la comunicación con el dispositivo móvil (teléfono Android).
CONEXIONES
Entre el modulo bluetooth hc06 y tarjeta de control Arduino.
(ES IMPORTANTE EL NO TENER CONECTADO LOS PUERTO RX Y TX A LA HORA DE DESCARGAR EL PROGRAMA, YA QUE GENERARA UN ERROR).
Tarjeta de control Arduino y el driver de los motores L298N.
También en lo referente a la conexión de los motores deben de ser de la siguiente manera en nuestro robot móvil. Este robot móvil utiliza una tarjeta de control (Arduino) y una tarjeta driver L298N para los moto-reductores de DC (modulo puente H), para que este a su vez pueda darle velocidad y potencia a los motores, e influye mucho la manera de conexión ya que sin esta configuración, nuestros motores no nos responderán correctamente a la hora de la exposición.
A continuación se muestra la programación hecha por los alumnos así como las conexiones de este robot móvil en la tarjeta L298N a los puertos digitales del arduino.
Entre el driver de los motores L298N y los moto-reductores
Los moto-reductores son motores de corriente directa que tienen acoplado en la flecha de salida un engranaje que le permite reducir su velocidad y aumentar su torque, son muy utilizados para controlar la precisión y para trabajar con pesos que sin ese acoplamiento sería imposible mover
PROGRAMACIÓN
Antes de presentar la programación debemos de conocer los comandos que se utilizaron en la elaboración de este proyecto y para que se utilizan:
Int: nos sirve para declarar datos numéricos enteros de 16 bits, estas variables las configuramos al principio de la programación y las vamos llamando según sea el caso necesitado.
Serial.begin: abre su puerto serie y fija una velocidad predeterminada en baudios para la transición de datos en serie. El valor típico de velocidades para comunicarse con un ordenador, o dispositivo móvil es de 9600 aunque se le pueden agregar otras velocidades.
analogWrite: Esta instrucción es utilizada para escribir un valor analógico utilizando la modulaciones por ancho de pulso (PWM), si enviamos un valor de 0 nos mandara una salida de 0 voltios en el pin especificado, el valor HIGH de una salida de este tipo equivale a 5 voltios.
if: es una condición que se utiliza para probar si una determinada condición se ha alcanzado, como por ejemplo averiguar si un valor analógico está por encima de un cierto numero, si es verdad se ejecuta una serie de acciones, que se describen dentro de las llaves. Si es falso la condición no se cumple y salta a otra linea programa.
La declaración de estado llama a las subrutinas de la aplicación Android y ejecuta el programa seleccionado por los comandos en los botones de la pantalla del celular. Es importante que para que este funcione, descargues nuestra app.
int izqA = 5;
int izqB = 6;
int derA = 9;
int derB = 10;
int vel = 255; // Velocidad de los motores (0-255)
int estado = 'g'; // inicia detenido
void setup() {
Serial.begin(9600); // inicia el puerto serial para comunicacion con el Bluetooth
pinMode(derA, OUTPUT);
pinMode(derB, OUTPUT);
pinMode(izqA, OUTPUT);
pinMode(izqB, OUTPUT);
}
void loop() {
if(Serial.available()>0){ // lee el bluetooth y almacena en estado
estado = Serial.read();
}
if(estado=='a'){ // Boton desplazar al Frente
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, vel);
analogWrite(izqA, vel);
}
if(estado=='b'){ // Boton IZQ
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, vel);
}
if(estado=='c'){ // Boton Parar
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
}
if(estado=='d'){ // Boton DER
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(izqA, 0);
analogWrite(derA, vel);
}
if(estado=='e'){ // Boton Reversa
analogWrite(derA, 0);
analogWrite(izqA, 0);
analogWrite(derB, vel);
analogWrite(izqB, vel);
}
if (estado =='f'){ // Boton ON se mueve sensando distancia
}
if (estado=='g'){ // Boton OFF, detiene los motores no hace nada
}
}