Suponiendo que hayais superado la prueba de las matemáticas en este momento tenemos en un microprocesador los valores que buscamos. En la parte de diseño electrónico nos hemos dejado algunas «cositas»:
Alimentación del Arduino-> tenemos un bobinado del transformador sin utilizar, ponemos un puente rectificador y un par de condensadores y lo utilizamos directamente como entrada de tensión del Arduino, en el Arduino ya tenemos el circuito para filtrar y estabilizar la tensión (no perdais la esperanza de que un día lo amplie)
Alimentación del módulo Zigbee -> Utilizamos el módulo de Digi Xbee, funciona a 3,3V, tenemos dos opciones, o añadimos un circuito que nos reduzca la tensión y un divisor de tensión para reducirla en la UART o nos compramos un XBee Shield (unos 15€), que incorpora la alimentación a 3,3V y la reducción de las señales de la UART
Con la Shield conectada al Arduino, el módulo de Digi en la Shield (configurado para nuestra red) empieza el reto. ¿Cómo le pasamos los valores al coordinador a través de la red Zigbee?
Los módulos de Digi tienen dos formas de comunicarse, una es mediante comandoa «AT», en topologías punto a punto o punto multipunto, utilizando este modo tenemos la ventaja de la simplicidad, pero el gran inconveniente de alejarnos del estándar. Yo creo que hay que apuntarse a los estándares, en este momento solo tenemos nuestro sensor, pero en un futuro ¿quién sabe?, mejor utilizar otro método porque eso nos permitirá poner en nuestra red «motes» de otros fabricantes.
La alternativa al modo AT es el modo API. En el modo API tenemos que decirle al módulo XBee exactamente los bytes que van incluidos en el paquete de datos que se lanza a la red Zigbee. Dicho así suena complicado, lo que tenemos que hacer es incluir en el código de nuestro arduino el Stack de Zigbee.
El stack es una capa de abstracción de la red, en lugar de «montar» el paquete de datos byte a byte podemos hacerlo con unas funciones que están mucho más cerca de la forma humana de comunicarse (y están todavía bastante lejos), la librería que contiene el stack ya se preocupará de convertor lo que le digamos en paquetes de datos hexadecimales. La verdad es que con el tema del stack no hay muchas opciones, todos los fabricantes suministran una con sus kits de desarrollo, pero nosotros ya hemos comprado un módulo, Digi no tiene ningún stack de libre distribución.
En Google code tenemos publicado un estupendo stack de Zigbee para Arduino que nos simplificará enormemente la vida. Este stack soporta las siguientes características:
Series 1 and 2
- AT_COMMAND_REQUEST 0x8
- AT_COMMAND_RESPONSE 0x88
- REMOTE_AT_REQUEST 0x17
- REMOTE_AT_COMMAND_RESPONSE 0x97
- MODEM_STATUS_RESPONSE 0x8a
- TX_64_REQUEST 0x0
- TX_16_REQUEST 0x1
- TX_STATUS_RESPONSE 0x89
- RX_64_RESPONSE 0x80
- RX_16_RESPONSE 0x81
- RX_64_IO_RESPONSE 0x82
- RX_16_IO_RESPONSE 0x83
- ZB_TX_REQUEST 0x10
- ZB_RX_RESPONSE 0x90
En este momento tenemos un buen punto de partida para pasar la info a través de nuestra red Zigbee……