"¿De qué serviría hablar de aquello? Nadie me creería". Napoleón Bonaparte.

viernes, 22 de febrero de 2013

Control de LEDs del MSP430 Launchpad mediante bluetooth y Android

Aún recuerdo los dolores de cabeza, que me causó el aprender a usar la comunicación serial en los microcontroladores PIC, pero ahora, no digo que soy un experto en ello, pero algo me defiendo :-D. 

En la entrada anterior se dió una breve introducción a la tarjeta de desarrollo MSP430 Launchpad de Texas Instruments. En esta ocasión, se explicará el cómo controlar los LEDs (pines P1.0 y P1.6) que trae dicha tarjeta, usando el módulo serial bluetooth HC-05 montado en una base y un teléfono con Android (Para este caso se usará el Motorola MB511 o FlipOut).

Primero identificamos las terminales RX y TX del microcontrolador a utilizar, para este caso es el MSP430G2553, que de acuerdo con las hojas de datos son los pines 3 y 4:

Y en la tarjeta MSP430 son los pines P1.1(RX) y P1.2(TX), Nota: en Fritzing los pines vienen etiquetados con las terminales del dispositivo a conectar.


Después hacemos las siguientes conexiones (no es necesario mover los jumpers del MSP430):


Clic en la imagen para expandir.

Aquí se muestra una imagen del circuito físico:

Clic en la imagen para expandir.

A continuación dejo el código fuente, que deberán cargar a la tarjeta MSP430 Launchpad usando el software Energia (como se muestra en la publicación anterior):

//////////////////////////////////////
//  Creado por: ALFA                //
//  País: México                    //
//  Página WEB: galfama.blogspot.mx //
//  Fecha: 19/02/2013               //
//////////////////////////////////////

/*  Descripción

Programa que controla el encendido/apagado de los LEDs 
(verde, rojo) usando el módulo serial bluetooth modelo HC-05, 
implementado en el MSP430 Launchpad de Texas Instruments, con el
microcontrolador MSP430G2553 a una frecuencia de reloj de de 16MHz.

Los comandos a recibir son: El 1 -enciende LED rojo, 2 -apaga LED rojo,
3 -enciende LED verde, 4 apaga -LED verde, otro caracter apaga ambos LEDs.

Nota: Para el envío de datos por bluetooth entre el dispositivo
y la tarjeta se utiliza el programa para Android BlueTerm.

*/

// Se inicializa el puerto serie a 9600 bauds
// Y la variable "valor" de tipo caracter.
// Así como los pines de los LEDs (verde, rojo), se definen como salidas.

char valor=0;

void setup()
{
  Serial.begin(9600);
  pinMode (RED_LED, OUTPUT);
  pinMode (GREEN_LED, OUTPUT);
  digitalWrite(RED_LED, LOW);//Inicialmente se apagan los LEDs.
  digitalWrite(GREEN_LED, LOW);
}

void loop()  //Bucle infinito
{
  if (Serial.available())//Si hay una caracter en el buffer serial
                         //el programa entra aquí.
 { 
  valor = Serial.read();// Se lee el valor numérico en el puerto serie.
  
  if (valor == '1')//Si el valor es 1.
  {
    digitalWrite(RED_LED, HIGH);  //Se enciende el led rojo.
    Serial.print("Led rojo encendido\r\n");//Se envía el mensaje por el puerto serie,
  }                                        //un retorno y salto de línea.
  
  else if (valor == '2')
  {
    digitalWrite(RED_LED, LOW);  //Se apaga el led rojo.
    Serial.print("Led rojo apagado\r\n");
  }
 
  else if (valor == '3')
  {
    digitalWrite(GREEN_LED, HIGH);  //Se enciende el led verde.
    Serial.print("Led verde encendido\r\n");
  }
  
  else if (valor == '4')
  {
    digitalWrite(GREEN_LED, LOW);  //Se apaga el led verde.
    Serial.print("Led verde apagado\r\n");
  }
  
  else// Si se envía un caracter distinto de 1 - 4, los leds se apagan.
  {
    digitalWrite(RED_LED, LOW);  //Se apaga el led rojo.
    digitalWrite(GREEN_LED, LOW);//Se apaga el led verde.
    Serial.print("Ambos leds apagados\r\n");
  }  
 }
}

Ahora lo que sigue es la instalación del software en el teléfono móvil con Android, para ello descargamos el BlueTerm de la tienda Google Play del siguiente enlace:

https://play.google.com/store/apps/details?id=es.pymasde.blueterm&feature=search_result#?t=W251bGwsMSwyLDEsImVzLnB5bWFzZGUuYmx1ZXRlcm0iXQ..

O usando el siguiente código QR (puedes usar el QRDroid para decodificarlo):

Después de haber instalado el BlueTerm (no lo abran aún), primero tenemos que vincular el módulo bluetooth HC-05 con el teléfono celular; para ello primero habilitamos el bluetooth y luego vamos a Configuración --> Redes inalámbricas y redes --> Configuración de Bluetooth.

Una vez allí seleccionamos la opción 1. Buscar dispositivos, una vez que aparezca el módulo HC-05 en la lista de dispositivos, 2. Lo seleccionamos y escogemos la opción "vincular", posteriormente cuando aparezca el recuadro que pide la contraseña, introducimos 1234 (que es la contraseña por defecto, que traen la mayoría de los módulos de este tipo).


¡Listo!, una vez que hemos vinculado el módulo con el teléfono ahora sí ejecutamos el BlueTerm. Y en las Preferencias podemos cambiar el color de fondo, el tamaño de la letra, etc. (Por defecto viene fondo azul, letras blancas, tamaño 8).

Texto blaco - fondo negro, tamaño de letra 20.

Ahora para enviar caracteres al módulo buetooth, seleccionamos la opción Conectarse a un dispositivo, una vez allí seleccionamos en HC-05 y listo, ya podremos enviar los caracteres 1,2,3,4 para encender/apagar los LEDs de la tarjeta MSP430 Launchpad.

A continuación dejo un video del funcionamiento del circuito:


Por último, dejo una aportación de código al blog, hecha por mi paisano Ángel Jacinto (muchas gracias). El siguiente código (el cuál está publicado, tal cual fue recibido) es un poco menos extenso que el original publicado en esta entrada, y permite encender/apagar de manera independiente los LED's  de la tarjeta MSP430 Launchpad, enviando 1 o 2 desde el teléfono celular:

//////////////////////////
// Autor: Ángel Jacinto //
// País: México         //
// Fecha: 24/05/2013    //
//////////////////////////

char valor=0;
boolean estado1, estado2; //Estado que ocuparemos, estan en boleano para poner falso o verdadero

void setup()
{
  Serial.begin(9600);
  pinMode (P1_0, OUTPUT); //LED ROJO de igual manera puede quedarse con LED_GREEN Y RED
  pinMode (P1_6, OUTPUT); //LED VERDE
  digitalWrite(P1_0, LOW);//Inicialmente se apagan los LEDs.
  digitalWrite(P1_6, LOW);
  estado1 = true; // Se inicializan como verdadero o encendido
  estado2 = true;
}

void loop()  //Bucle infinito
{
  if (Serial.available())//Si hay una caracter en el buffer serial
                         //el programa entra aquí.
 { 
  valor = Serial.read();// Se lee el valor numérico en el puerto serie.
  
  if (valor == '1')//Si el valor es 1.
  {
    digitalWrite(P1_0, estado1);  //Se enciende el led rojo.
    Serial.print("Led rojo encendido\r\n");//Se envía el mensaje por el puerto serie,
    estado1 = !estado1; //Aqui se cambia el valor del estado 1
  }                                        //un retorno de carro y salto de línea.
  
  else if (valor == '2')
  {
    digitalWrite(P1_6, estado2);  //Se enciende el led verde.
    Serial.print("Led verde encendido\r\n");
    estado2 = !estado2;
  }
  
  else// Si se envía un caracter distinto de 1 - 4, los leds se apagan.
  {
    digitalWrite(P1_0, LOW);  //Se apaga el led rojo.
    digitalWrite(P1_6, LOW);//Se apaga el led verde.
    Serial.print("Ambos leds apagados\r\n");
  }  
 }
}

¡Muchas gracias por leer esta nueva entrada!
ALF



Resistencias o resistores (Conceptos básicos)

  H an pasado casi 4 años desde que publiqué la última entrada en este blog (diciembre 2014); cuando comencé con este blog en el 2011, lo h...