"Aquí nadie está loco, solo vive un realidad distinta"
Jim Morrison.

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

viernes, 25 de julio de 2014

Comunicación serie vía Bluetooth entre la tarjeta MSP430 Launchpad y Processing.

Pensando en hacer una mejora en el circuito de la entrada anterior denominada Comunicación serie entre la tarjeta MSP430 Launchpad y Processing, se me ocurrió ahora hacer la comunicación de manera inalámbrica utilizando un módulo Bluetooth.


Para construir este circuito necesitamos el siguiente material:

------- Hardware: -------

- Tarjeta MSP430 Launchpad de Texas Instruments Rev. 1.5, con el microcontrolador MSP430G2553 incluido en el kit (la tarjeta que se muestra en la imagen ha sido modificada para cumplir con algunos requerimientos).


Clic en la imagen para expandir.

- Módulo Bluetooth (El módulo mostrado en la imagen fue adquirido en la página de Deal Extreme http://www.dx.com/p/jy-mcu-arduino-bluetooth-wireless-serial-port-module-104299#.U9A9t9zNggs), éste módulo viene configurado por default para trabajar mediante comunicación serie con una velocidad de 9600 baudios y 8 bits para comunicación.

Clic en la imagen para expandir.

- Potenciómetro de 10 KΩ.


Clic en la imagen para expandir.

- Batería de 3.6V (Las baterías de la imagen fueron extraídas de teléfonos fijos inalámbricos que ya no se utilizaban).


Clic en la imagen para expandir.

- Cables con terminales hembra y macho (Se pueden adquirir en la página de Deal Extreme http://www.dx.com/p/arduino-compatible-breadboard-jumper-wires-8-20cm-68-cable-pack-142221#.U9A_39zNggs).


Clic en la imagen para expandir.

- Computadora Portátil con módulo Bluetooth incluido.

------- Software: -------




Clic en la imagen para expandir.

- Processing v2.1 de 32 bits para Windows.


Clic en la imagen para expandir.

- Windows 7 Home Basic SP1 de 64 bits (es donde ha sido probado el funcionamiento de este circuito).

Antes de conectar todos los componentes externos a la tarjeta MSP430 Launchpad, se recomienda leer todo lo que se explica a continuación y ver el video del funcionamiento del circuito.

Primero se debe asegurar que los jumpers de la tarjeta Launchpad marcados con las etiquetas RXD y TXD, se encuentren como se muestra en la siguiente imagen:


Clic en la imagen para expandir.

Posteriormente se carga el siguiente código a la tarjeta MSP430 Launchpad usando el software Energia:


////////////////////////////////////////////
//  Blog: microsysoftware.blogspot.mx     //
//  País: México                          //
//  Fecha: 22/07/2014                     //
////////////////////////////////////////////

//  Programa que lee la entrada analógica pin A3 (P1.3),
//  y envía al valor a una computadora usando 
//  comunicación serial.

//  Hardware Requerido:
//  * MSP-EXP430G2 LaunchPad
//  * Potenciómetro de 10 kilo-Ohms
//  * Cables de conexión

void setup() 
{
//Se declara que se utilizará comunicación serial
//a 9600 baudios, por default la transmisión es de 8 bits. 
Serial.begin(9600);
}

//Este bloque de código hace un bucle infinito. 
void loop() 
{
// Se lee la entrada analógica (pin A3),
// y el valor se guarda en una variable de tipo entero
// llamada adc.
int adc = analogRead(A3);

// Con la siguiente instrucción, se hace un ajuste, 
// ya que la instrucción analogRead entrega valores 
// comprendidos entre 0 y 1023, debido a que el ADC 
// del microcontrolador
// tiene una resolución de 10 bits, y con esta instrucción
// la variable adc solo tomará valores entre 0 y 255.
adc = map(adc, 0, 1023, 0, 255);

// Se envía por el puerto serie el valor del adc.
Serial.write(adc);
delay(100); // Ocurre un retardo de 100 ms.
}

Después de cargar el código al Launchpad, ya se puede empezar a conectar los componentes externos a la tarjeta, empezando por el módulo Bluetooth (las conexiones entre el módulo Bluetooth y el Launchpad van a ir "cruzadas"), de acuerdo a las hojas de especificaciones del microcontrolador M430G2553, el pin RXD es el número 3(P1.1) y el pin TXD es el número 4(P1.2), como se muestra en la figura:


Clic en la imagen para expandir.

El diagrama final de conexión de los componentes se muestra a continuación:
Clic en la imagen para expandir.

El circuito construido de manera física, se muestra en la siguiente imagen:

Clic en la imagen para expandir.

El código que se ejecutará en Processing para recibir los datos por el puerto serie inalámbrico, permitirá controlar el color de fondo de una figura geométrica (que en este caso será un cuadrado) pasando del color blanco al negro y viceversa, en base al valor de ADC del microcontrolador de la tarjeta Launchpad (que originalmente está comprendido entre 0 y 1024, pero se hace un ajuste por código para que los valores sean de 0 a 255, para que puedan ser interpretados por Processing de manera adecuada; 0 para el color negro y 255 para el color blanco).


////////////////////////////////////////////
//  Blog: microsysoftware.blogspot.mx     //
//  País: México                          //
//  Fecha: 22/07/2014                     //
////////////////////////////////////////////

import processing.serial.*;  //Se incluye la librería para usar el puerto serie.

Serial puerto; // Se crea un objeto llamado puerto.
int dato;      // Variable que recibirá el dato del puerto serie.

void setup() 
{
  // La siguiente instrucción define las medidas en pixeles de la pantalla
  // que se genera con el bloque void draw().
  size(400, 400);
  // Posteriormente la siguiente instrucción imprime los puertos
  // disponibles en nuestra computadora.
println(Serial.list());

// Dependiendo de los puertos disponibles de nuestra computadora
// se enumeran partiendo del 0, y se modifica el valor encerrado entre "[]". Ejemplo:
//  Puerto PC      Valor
//   COM1       --> [0]
//   COM3       --> [1]
//   COM5       --> [2]
//   COM6       --> [3]
String portName = Serial.list()[0];

// Se inicializa el puerto seleccionado
// con una velocidad de 9600 bauds y 8 bits en la comunicación.
  puerto = new Serial(this, portName, 9600);
}

// Bloque de código que muestra una pantalla con fondo azul y un cuadrado
// en el centro cuyo color de relleno depende del valor de la variable dato.
void draw()
{
  if (puerto.available() > 0) // Si hay un dato disponible en el puerto serie. 
   {  
    dato = puerto.read();         // Se almacena en la variable dato.
   }
  background(500);             // Hace azul el fondo de la pantalla que se muestra.
  textSize(14);                // Define el tamaño del texto que se va a mostrar.
  text("Valor del ADC="+dato, 50, 25); //Imprime el valor de la variable dato.
                        
  fill(dato); // Cambia el color de fondo de la figura central (cuadrado).
  rect(50, 50, 300, 300); // Dibuja un cuadradado cuyo color de 
                          // fondo depende del valor de la variable dato.
}


Por último se muestra un video con el funcionamiento del circuito y con algunas recomendaciones:





¡Muchas gracias por leer esta nueva entrada!
ALF





2 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Primero que nada quiero felicitarlo por este gran proyecto, es exactamente lo que estoy buscando para implementar en mi propio proyecto, solo que mis requerimientos son distintos en vez de utilizar energia todo el software que tengo que usar es CCS (Code Composer Studio), le agradeceria de corazon si usted sabe o me podria proporcionar alguna informacion relevante para hacer la conexion. si necesita algun detalle extra este es mi correo que reviso de forma mas regular. aramirez74@miners.utep.edu , muchas gracias.

    ResponderEliminar