lunes, 28 de noviembre de 2011

Controlando dispositivos ZigBee con Pic y LabVIEW


Quiero hacer mi primera aportación al blog con lo que fue mi proyecto final de carrera, el cual sólo pudo ser posible gracias a la gente que comparte en foros y blogs como este, sus experiencias y conocimientos en el mundo de la electrónica.

Se recomienda tener unas nociones básicas sobre el protocolo ZigBee para una mayor comprensión. (Un mini tutorial aquí)
El proyecto incluye los siguientes aspectos:

1. Comunicar un microcontrolador PIC, concrétamente el 18F4550, con un PC mediante LabVIEW y haciendo uso de la api de microchip “MPUSBAPI.DLL” que podemos descargar gratuitamente de la web del fabricante.

2. Comunicar y visualizar dispositivos ZigBee que formen parte de una misma red. Para ello se ha hecho uso de los módulos XBee (Pro) del fabricante Digi. En el proyecto se emplearón 3 dispositivos, un coordinador que se comunica con el microcontrolador y dos endpoints que serían los que se controlan.


En el software desarrollado se visualizan los distintos dispositivos que conforman la red, así como el estado de las distintas señales. Pudiendo configurar los pines de los módulos, entrada/salida digital o entarda analógica, leer sus valores o activarlos y desactivarlos.

Cuando se adquieren los modulos XBee requieren una configuración inicial para poder funcionar. Para ello se empleó la placa XBee Explorer USB de SparkFun, que no es más que un puente USB-RS232 perparado para conectar directamente los módulos XBee.



De los dos posibles modos de funcionamiento de los módulos, mediante comandos AT o API, se escogió este último por dos motivos, el primero didáctico, para un mayor contacto con el protocolo ZigBee y el segundo y principal, poder enviar comandos remotos. Es decir, ser capaz de activar o desactivar salidas digitales, realziar lectura de los canales, etc.

Por ello tenemos que configurar los dispositivos para que trabajen en este modo de funcionamiento. Así como indicar cual será el coordinador y cuales los endpoints o routers. Todo ello se puede hacer de forma sencilla con el software X-CTU que proporciona Digi.

A continuación se comentará el firmware implementado. 

Para la programación en C se ha utilizado el programa CCS C Compiler en su versión 4.23 el cual facilita mucho la tarea de comunicación USB.

Las funciones redXBee(), configuracionXbee() y datosXBee() son las encargadas de comunicarse con los dispositivos de la red ZigBee.

La función redXBee() se encarga de buscar los dispositivos que forman la red y guarda las direcciones de los dispositivos que encuentra. Para ello el microcontrolador envía la trama API del comando AT ND al coordinador, el dispositivo coordinador manda a toda la red una petición de descubrimiento, todos los dispositivos de la red, devuelven al coordinador una trama API del tipo, Respuesta de comando AT.

La trama de un comando ND es la siguiente: 0x7E 0x00 0x04 0x08 0x01 0x4E 0x44 0x64, donde:

• 0x7E: delimitador de inicio

• 0x0004: tamaño

• 0x08:Comando AT

• 0x01:Identificador

• 0x4E44: 'ND' en ASCII

• 0x64: Suma de control

El valor de la suma de control se calcula: [0xFF - (0x08 + 0x01 + 0x4E + 0x44)].

La función configuracionXbee() se encarga de comprobar para el número de dispositivos configuración de los pines de D0 a D5. Para ello el microcontrolador envía en tramas API los comandos remotos AT Dn, n es un valor comprendido entre 0 y 5, al coordinador. Se utiliza la dirección almacenada tras la ejecución de la función redXBee().

Como puede apreciarse tan sólo se controlan 6 pines de los módulos, dejando la posibilidad de ampliar de manera sencilla el resto de los pines y funcionalidades de los modulos.

La función datosXbee() se encarga de comprobar el estado de las señales analógicas y digitales. Para ello el microcontrolador envía en tramas API los comandos remotos AT IS, al coordinador, que solicita a un dispositivo remoto una muestra de los datos de sus señales.

Para facilitar el desarrollo de la aplicación XbeePic se ha utilizado la aplicación INF_Enumeration_uC_PIC-USB versión V3.1, que genera el archivo .inf y la librería usb_desc_scope necesarias.

Finalmente el interface es desarrollada mediante LabVIEW 8.6 está debidamente comentado para que sea sencilla su comprensión. Se basa en el envío de comandos al microcontrolador haciendo que el coordinador de la red configure los dispositivos, vea el estado de los pines o compruebe si se ha incorporado o eliminado algún módulo.

Espero que con este proyecto sirva de base para las personas que quieran iniciarse en con la tecnología ZigBee o la comunicación USB con microcontroladores.

Con el paso del tiempo he visto numerosas posibilidades de mejora sobre este proyecto, tanto a nivel de firmware como de software por lo que estoy seguro que las capacidades de ampliación son ilimitadas.

A continuación teneis subido todos los archivos necesarios para que podais probar este proyecto.

12 comentarios:

  1. Gracias, muy buen aporte se agradece tu dedicación y tiempo ; estoy próximo a adquirir estos elementos y tu publicación me es muy útil..!!

    ResponderEliminar
  2. @Daniel Gracias por el apoyo, seguimos echando algunos ratos en proyectos con esta tecnología, en cuanto tengamos alguno con la suficiente consistencia lo subiremos para que podamos seguir disfruntando ^_^.

    ResponderEliminar
  3. :O!... Muchas gracias por compartir esta información... la verdad, he llegado a esta pagina a través de este enlace... y bueno, luego de leer el articulo, me di cuenta que los archivos que subieron estaban alojados en Megaupload xD!...
    Si fuera posible, podrían resubir esta información a algún otro servidor? >_<!... me encuentro realizando un proyecto y me seria de gran ayuda...

    Muchas gracias... Los felicito por su sitio =)!

    ResponderEliminar
  4. :D!!!... Gracias por re-subir estos archivos, les echare un vistazo a ver que tal xD!...

    Saludos!

    ResponderEliminar
  5. Gracias muy bueno..
    Amigo si yo quisiera solamente configurar el Xbee mediante el envio de una trama API desde el 18f2550,sin necesidad del usb, sino que enviando la trama mediante el puerto serie, me podrias ayudar, que necesito?, ya he hecho la configuracion de xbee mediante X-ctu y hasta he establecido la comunicacion, solo me falta poder configurar el xbee mediante el envio de una trama API desde el PIC..un saludo y gracias de antemano..
    sound_ubb@hotmail.com
    Mi correo para que nos contactemos..

    ResponderEliminar
  6. Hola Anónimo.
    El pic envía los comando API al xbee por el puerto serie, la comunicación con el usb tan sólo es para mostrar información por el PC, mira el codigo del microcontrolador y verás las rutinas que se usan. No son complejas y viene muy claro en el programa.
    Suerte

    ResponderEliminar
    Respuestas
    1. hola berny! muchas gracias por la información, tengo una duda, para enviar los comandos API del xbee al micro por el puerto serie, es necesario realizar alguna configuración al xbee, o con conectar directamente los pines de TX con TR y viceversa entre el xbee y el micro?

      Eliminar
  7. hola
    Quiero hacer un trabajo de tesis y me gustaria si me podrias ayudar para enviar datos desde un xbee al coordinador mediante un pic que estara sensando 2 entradas analogicas, podrias darme una minima idea estaria muy agradecido,

    mi mail es JuanJ_reinoso@hotmail.com

    ResponderEliminar
  8. Berny,
    Estoy desarrollando un proyecto de Tesis el cual sera control de temp usando zigbee...
    Así que cualquier info q me pudas suministar o decirme donde compraste los modulos, te lo voy agradecer mucho!

    Gracias por compartir!
    mi mail es: nicotellechea@gmail.com

    ResponderEliminar
  9. Los módulos los compré a través de mouser (www.mouser.com/‎) te dejo una lista con los distribuidores más conocidos:

    Farnell es.farnell.com
    RS http://www.rselectronics.com/
    Future electronics www.futureelectronics.es/es/
    Digikey http://www.digikey.com/
    Mucha suerte con tu tesis

    ResponderEliminar
  10. hola berny! muchas gracias por la información, tengo una duda, para enviar los comandos API del xbee al micro por el puerto serie, es necesario realizar alguna configuración al xbee, o con conectar directamente los pines de TX con TR y viceversa entre el xbee y el micro?

    ResponderEliminar
  11. Hola Berny. Muy buen aporte.
    Podrias habilitar el link de descarga, esta caido.

    Gracias..

    ResponderEliminar