Bluetooth con módulo RN41 y 18F25K20  

Cuando pensamos en el estándar Bluetooth para comunicar dispositivos entre sí, pensamos en objetos como nuestro ordenador, nuestro teléfono móvil o algún dispositivo costoso. Sin embargo, gracias a las facilidades que nos brinda el módulo RN41, podemos, por ejemplo, trasformar una simple conexión RS232 en inalámbrica ¡con un alcance de hasta 100 metros! En este artículo veremos la primera parte de todas las cosas que podremos realizar con el módulo Bluetooth de Microingenia S.L. La magia de la radio y la conexión inalámbrica te permiten explorar este útil sistema. En una aplicación simple y con un software gratuito, realizaremos una sencilla medición de temperatura que servirá de ejemplo para iniciarnos en la comprensión y en el aprovechamiento integral de este módulo RN41. ¡Bienvenido al mundo Bluetooth!



 

El módulo de desarrollo Bluetooth de Microingenia S.L. que utilizaremos en este artículo, basado en el RN41 de Roving Networks, es un perfecto aliado para eliminar los cables en tus proyectos o para conectarse a ordenadores y/o teléfonos móviles. Con un alcance de hasta 100 metros (Clase I), posee antena integrada, es compatible con el estándar Bluetooth 2.1, permite velocidades de transferencia de hasta 921Kbps, y lo puedes conectar de forma sencilla mediante la UART (RX/TX) de cualquier microcontrolador, desde donde puedes controlarlo haciendo uso de sencillos comandos AT. El módulo, además, puede ser alimentado tanto a 5Volts como a 3,3Volts, y para ello dispone de un puente (jumper) de selección de la tensión de alimentación.

 

Tener siempre a mano un sistema de iluminación de emergencia.
 

El RN41 funciona a 3,3Volts y sus líneas NO son 5Volts compatibles, por lo que las líneas de uso normal (Rx/Tx) están provistas de adaptación de niveles para su utilización con las placas de desarrollo que operan a 5Volts. De todos modos, posee entradas auxiliares que te permitirán trabajar en forma directa con el RN41 y un bus Rx/Tx de 3,3Volts, tal como utilizaremos nosotros. Aquí lo tienes: nuestro módulo Bluetooth.

 
     


   

La posibilidad que nos brinda utilizar un módulo completo (ya ensamblado) tiene la ventaja de disponer en forma rápida de una conectividad eficiente para ensayos. Es decir, es muy sencillo insertar el módulo en un protoboard, alimentarlo con 3,3Volts, conectarle los canales de transmisión y recepción provenientes de la USART de un PIC y agregarle un diodo LED indicador de estado de conexión. ¡Más sencillo, imposible! El diagrama en bloques del RN41 nos muestra las posibilidades de trabajo que este módulo ofrece y, como podemos apreciar, posee conexión Serie, USB, PCM (audio). Además, dispone de terminales de salida para activar dispositivos diversos como relés, motores, luces y otros circuitos de salida acoplados a este maravilloso enlace inalámbrico que es el módulo RN41. Por supuesto, al final del artículo encontrarás el enlace para descargar la hoja de datos de este módulo (entre otras cosas) y descubrir allí todas las posibilidades. Demás está decir que, si te atreves, con él podrás utilizar comandos AT desde tu teléfono móvil para indicarle instrucciones. Fascinante, ¿verdad?

 
     

Diagrama en bloques del módulo Bluetooth RN41
 
 

El circuito utilizado para iniciarnos en el mundo Bluetooth es sencillo por donde se lo mire. Es el clásico circuito que emplea los componentes más usuales dentro de nuestro grupo selecto de dispositivos. Un PIC 18F25K20 con un cristal de 16Mhz. para que puedas utilizar el software libre AMICUS y lograr de este modo un sistema que corra a 64Mhz de velocidad de reloj. Esta velocidad será vital para lograr una conectividad a 115.200bps. Si utilizas otros microcontroladores con menor velocidad de reloj, debes observar la conexión de PIO7 en el módulo para “forzar” la velocidad a 9600bps. Es decir, deberás colocar una resistencia pull-up (1K) en el mencionado pin respecto a la tensión de alimentación para lograr este objetivo. ¿Qué más necesitas para iniciar el trabajo? ¡Muy poco! Observa este video y te darás cuenta que ya posees todos los elementos necesarios.

 

 

 

Algunos LEDs, un par de pulsadores, un LCD, el módulo de temperatura con el STCN75, o cualquiera que tengas disponible, pueden ser útiles como para construir este termómetro “remoto e inalámbrico”. Es decir, si dispones de un LM35 (o estás acostumbrado a su uso) puedes utilizar cualquiera de las entradas analógicas que te brinda el PIC 18F25K20. Y si en lugar de utilizar un termómetro deseas instalar otro tipo de dispositivo capaz de enviarte información hacia el ordenador, bienvenido sea. Aquí, el propósito es lograr el enlace Bluetooth e intercambiar datos entre el ordenador y el PIC, del mismo modo que si estuvieras conectado mediante el puerto serie. Aquí tienes el circuito que utilizamos en el protoboard:

 





Circuito propuesto para el módulo Bluetooth con 18F25K20
 

Midiendo diodos y transistores

El Software del PIC
Todos saben que, para aplicaciones de ensayo y en los casos en que no son críticos los tiempos de acción del programa, prefiero el lenguaje BASIC de programación. A partir de la aparición de AMICUS, la facilidad de uso de este programa se ha potenciado debido a que es un software gratuito y totalmente funcional, sin restricciones de ninguna especie. Por lo tanto, la simplicidad del BASIC, sumada a la potencia de un lenguaje de alto nivel como Proton, facilita mucho la tarea de prácticas y experimentos poco exigentes. De todos modos, como sé que hay muchos entusiastas de otros programas, explicar el código puede servir para facilitar la comprensión del funcionamiento de este proyecto. Por lo tanto, lo primero que haremos es definir (como en todos los lenguajes de programación) los parámetros que determinarán el funcionamiento del PIC: velocidad de datos por puerto serie, utilización del mismo, utilización de display y todas aquellas librerías que sean necesarias.

 
   

Te brindaremos una idea para poder incrementar tu seguridad y la de tus pertenencias más valiosas.
 

Luego vienen las variables que utilizaremos en el programa, algunos valores constantes que debemos cargar, un mensaje de bienvenida y, por fin, iniciar el lazo principal de programa. En BASIC es común el uso de lazos de cuenta conocidos como FOR-NEXT. Dentro de ellos podemos incrustar muchas acciones o muchas interrogaciones (adquisición de datos) entre el PIC y su entorno físico. En nuestro caso, siempre estaremos atentos a que se pulse un botón conectado al pin 0 del puerto B o a que nos llegue algún dato proveniente desde el módulo Bluetooth. En BASIC utilizamos la instrucción HSERIN para leer en forma directa la USART del PIC. Con esta sencilla instrucción, sabremos si el módulo Bluetooth está recibiendo datos desde el ordenador. De ser así, estos datos se vuelcan en una variable y el programa actúa en consecuencia. Si es un tipo “esperado” de dato, realizará una determinada acción, u otra, hasta agotar las posibilidades de opción. Si ningún dato coincide con los esperados, es probable que el ordenador le esté “hablando” a otro módulo Bluetooth en las cercanías. Si los datos no corresponden a lo que estamos esperando, el ciclo se reinicia en forma indefinida y mantiene el sistema siempre “en espera y a la escucha”.

 
   


Entre las acciones que pueden esperarse está la de encender el LED verde, detectar que se ha pulsado el botón predeterminado para el envío de datos (el mensaje de saludo que vemos en el video), hasta recibir comandos AT desde el ordenador para cambiar la configuración de algunos parámetros de funcionamiento del módulo. Es decir, no vamos a enumerar aquí todas las cosas que pueden realizarse en un enlace serie entre un ordenador y un PIC, pero al menos queríamos explicarte con palabras la estructura del programa (que en definitiva termina siendo igual a una comunicación serie tradicional). Por último, puedes observar en el listado del programa (lo puedes abrir con un editor de texto) que ante cualquier evento que suceda dentro de estos lazos FOR-NEXT, el programa saltará a subrutinas para realizar tal o cual acción. Estas son: leer el termómetro y enviar los datos al ordenador o transmitir (HSEROUT) el mensaje de saludo almacenado.

¿Para qué utilizamos los lazos FOR-NEXT? Para encender el LED rojo en forma intermitente. Sí, ya sabemos que es una aplicación trivial, sin sentido y que podríamos haber utilizado el desborde del TMR0 para ello, pero no olvides que estamos practicando, experimentado, aprendiendo y que este tipo de rutinas puede ser útil en cualquier momento para resolver eventos que no puedan dejar de atenderse u observarse en la forma cíclica en que activamos el LED rojo. También puede ser útil cuando ya has agotado el uso de todos los timers del PIC.

 

El módulo RN41 de Roving Networks
 

sencilla matriz de LEDs de al menos 8 LEDs por otros 8 LEDs (ancho por alto).

Entre los enlaces que te ofrecemos al final del artículo, encontrarás el listado completo de comandos AT que te permitirán configurar muchas características del módulo RN41. Por supuesto, una de las más importantes es darle al módulo nuestro nombre. Que al aparecer en escena, no lo haga como una sucesión de letras y números codificados, sino que tenga un nombre representativo a nuestra aplicación. Para lograrlo, bastará con abrir el software de comunicación serie de nuestra preferencia (por ejemplo, el Hyperterminal) y escribir: $$$, es decir, el símbolo de pesos, tres veces seguidas. Si el módulo lo recibe en forma correcta, devolverá las letras CMD seguido por un signo de pregunta, de igual modo que si estuviera esperando nuevas instrucciones. Luego de esto, escribimos SN, . Nosotros escribimos: SN,NeoTeo y resultó lo que ves en el video. El módulo te devolverá un AOK, indicándote que recibió la instrucción, y luego otro signo de interrogación. Este proceso se repite hasta que termines de enviar comandos AT al módulo. Al finalizar, quitas la alimentación, la reestableces y ¡listo! El módulo actuará según los comandos enviados.

 
   

¡Atención aquí! Existen dos tipos diferentes de comandos: unos determinan el funcionamiento del módulo (como los que te indicamos recién) y otros le indican acciones en tiempo real. Es decir, para los primeros debes reiniciar la alimentación, mientras que para los segundos la acción se realizará en tiempo real, o sea, cuando tú envíes el comando AT. En el caso de utilizar un ordenador como enlace a un dispositivo remoto que posea el módulo Bluetooth RN41, será muy sencillo enviarle los comandos AT de acción. Desde un teléfono móvil deberás encontrar o elaborar algún tipo de aplicación capaz de realizar este trabajo. Aquí tienes una muestra para ver cómo un teléfono móvil detecta el flamante Módulo Bluetooth NeoTeo.

 


   

Nuestro trabajo ahora estará centrado en seguir investigando acerca de las prestaciones que este módulo puede ofrecernos. ¿Qué es lo primero que intentarías hacer funcionar en tu ordenador móvil? El punto es: aplicación remota que envía datos al ordenador de manera inalámbrica. Por supuesto, te invitamos a charlar sobre el tema, posibles mejoras, aplicaciones útiles y todo lo que quieras decirnos en el foro de NeoTeo. Allí tenemos mucho para charlar y comentar acerca de esta maravilla del mundo de las telecomunicaciones: el Bluetooth. ¡Te esperamos!
 

Importante: Si lo que encuentras aquí te resulta útil,  ayúdanos a mantener este sitio. Cualquier donación es bienvenida. Tu apoyo nos permitirá acceder a nuevos materiales y a montajes más interesantes y útiles. Gracias por ayudarnos a hacer Servisystem cada día mejor. Tu ayuda será muy importante para nosotros. Gracias.

 

 

 
     
  Indice de montajes   
         Free counter and web stats