Post on 07-Jun-2020
ANEXO A. ENTORNO DE DESARROLLO
81
ANEXO A
ENTORNO DE TRABAJO.
A lo largo de este Anexo, realizaremos una breve descripción de las
herramientas propuestas para la implementación futura del proyecto. Se analizará
por un lado, el equipo adquirido y, por otro, las distintas aplicaciones y
herramientas software necesarias para el procesamiento de la información.
1 Hardware.
Como se ha comentado en el capítulo 3, hemos escogido un equipo de la
empresa Crossbow Technology Inc. para implementar la aplicación, concretamente
el Professional Kit. Este kit incluye los siguientes dispositivos:
� 5 Motes: compuestos de una placa principal, que incluye un transceptor
radio y una unidad de procesamiento, y una placa con sensores.
� 1 Placa programadora: se emplea para programar la unidad de
procesamiento de la placa principal de cada mote.
� 1 Gateway: compuesto de una placa principal conectada a una placa
programadora cuya función es actuar de puente entre la red de sensores y
un PC o servidor.
LOCALIZACIÓN EN INTERIORES USANDO REDES INALÁMBRICAS DE SENSORES
82
JOSÉ CARLOS REYES GUERRERO
� 1 Tarjeta de adquisición de datos: permite integrar otros sensores
comerciales en la red.
� 1 Placa principal adicional: tarjeta radio con un diseño distinto a la que
incorporan los motes pero con las mismas características.
1.1 Placa principal.
Los motes se comunican entre sí usando el canal radio, enviando y
recibiendo mensajes a una determinada frecuencia. Los componentes necesarios
para la comunicación entre motes, se encuentran integrados en un chip OEM4
modelo MPR2600. Este módulo pertenece a la familia MICAz, dispositivos que
trabajan a una frecuencia de 2.4 GHz, compatibles con el estándar IEEE 802.15.4 y
utilizados en redes inalámbricas de sensores. La Figura 16 muestra la placa
principal de los nodos conectada a la alimentación.
El módulo MPR2600, emplea como transceptor radio el Chipcon CC2420 de
Texas Instrument e integra el microcontrolador de 8 bits ATmega128L de Atmel, el
cual dispone de una memoria flash programable interna de 128 KB. Además, los
nodos disponen de una memoria flash externa de 512 KB para la programación vía
OTAP5 o para almacenar datos muestreados del entorno. En la Figura 17 se
representa el diagrama de bloques de la placa principal.
Por otra parte, la placa dispone de tres leds accesibles por el usuario que
pueden usarse a modo de bandera a la hora de depurar código o simplemente para
informar de algún evento.
Figura 16. MPR2600-MICAz
4 Original Equipment Manufacturer (OEM): compañía que ensambla y vende componentes fabricados
por otras empresas como si hubiesen sido fabricados por ella. 5 Over-The-Air-Programing (OTAP): técnica inalámbrica de programación de nodos.
ANEXO A. ENTORNO DE DESARROLLO
83
Para garantizar un correcto funcionamiento del transceptor, es necesario
que la tensión de alimentación se encuentre dentro del rango 2.7 - 3.6 V. Esta
tensión puede proporcionarse bien mediante dos baterías tipo AA usando el
conector Molex de dos pines, o bien mediante el conector de 51 pines usando la
placa de programación conectada al puerto USB del PC.
Figura 17. Diagrama de bloques del MPR2600
El transceptor utilizado es compatible con el estándar IEEE 802.15.4 y ha
sido diseñado expresamente para aplicaciones de baja potencia y reducidos niveles
de tensión de alimentación. Utiliza una modulación O-QPSK (Offset Quadrature
Phase Shift Keying) con pulsos semisinusoidales y una tasa efectiva de transmisión
de 250 Kbps. Además, se realiza un ensanchamiento de espectro por secuencia
directa con un factor de ensanchado de 9 dB.
De acuerdo con el estándar 802.15.4, se dispone de 16 canales para la
comunicación con un ancho de banda de 5MHz cada uno. Estos canales se
encuentran numerados del 11 al 26, siendo el canal 11 el correspondiente a la
frecuencia 2.405 GHz y el 26 el correspondiente a 2.480 GHz.
Asimismo, la potencia de transmisión de los motes es programable,
oscilando en un rango entre 0 dBm y -25 dBm. La Tabla 2 muestra las distintas
potencias de transmisión disponibles junto a su código de selección y al
correspondiente consumo de corriente:
LOCALIZACIÓN EN INTERIORES USANDO REDES INALÁMBRICAS DE SENSORES
84
JOSÉ CARLOS REYES GUERRERO
Tabla 2. Potencias de transmisión del CC2420
Para una información más detallada sobre las características de la placa
principal puede consultarse [41].
1.2 Placa de sensores.
El Professional Kit contiene en cada mote una placa de sensores, conectada
a la placa principal a través del conector Molex de 51 pines, que permite medir
variables del entorno. En la Figura 18 se aprecia la placa de sensores incluida en el
kit. El modelo en cuestión es el MTS400CA y dispone de los siguientes sensores
[42]:
� Sensor de humedad y temperatura.
� Sensor de presión barométrica y temperatura.
� Sensor de luz.
� Acelerómetro de dos ejes.
Figura 18. Placa de sensores MTS400CA
1.3 Placa programadora.
Conectada al PC mediante un puerto USB, la función de la placa es
programar cada uno de los motes a través del conector de 51 pines usando un
ANEXO A. ENTORNO DE DESARROLLO
85
procesador integrado en la placa (ISP, In System Programmer). Para ello, se
descarga el código de la aplicación en el ISP a través del puerto USB y, a
continuación, se programa el nodo. Para el desarrollo de la aplicación se ha
empleado el modelo MIB520CB, el cual se muestra en la Figura 19. El diagrama de
operación de la placa programadora se representa en la Figura 20.
Figura 19. Tarjeta de programación MIB520CB.
Cuando conectamos una placa de programación al PC, éste establece dos
puertos serie virtuales, N y N+1, a través de los cuales se comunicará con la placa.
El puerto N se utiliza en la etapa de programación de los nodos y el N+1 para la
comunicación con el PC.
Figura 20. Diagrama de operación.
1.4 Estación base (Gateway).
La estación base está compuesta por una placa principal conectada a una
placa de programación. Su función es actuar como nexo de unión entre la red
inalámbrica de sensores y el PC. La estación base se muestra en la Figura 21.
Tanto la placa principal como la placa de programación son iguales a las
empleadas en la comunicación y en la programación de los motes,
respectivamente. Por lo tanto, al conectar la estación base al PC se crearán otros
dos puertos serie virtuales, X y X+1, donde X se emplea para programarla y X+1
para la comunicación con el PC.
LOCALIZACIÓN EN INTERIORES USANDO REDES INALÁMBRICAS DE SENSORES
86
JOSÉ CARLOS REYES GUERRERO
Figura 21. Estación base
1.5 Tarjeta de adquisición de datos.
La tarjeta de adquisición de datos se emplea como una plataforma general
de medida para conectar a la red distintos tipos de sensores. Además, incluye un
sensor de humedad y otro de temperatura. Su diseño se observa en la Figura 22.
Figura 22. Tarjeta de adquisición de datos MDA300CA
Dispone de 11 canales de entrada para señales analógicas y diferenciales y
otros 6 para señales digitales. Estos últimos pueden usarse como pines digitales de
entrada/salida. Asimismo, dispone de tres pines que proporcionan 5V, 3.3V y 2.5V
respectivamente para, por ejemplo, poder excitar sensores externos [42].
2 Software.
Las principales herramientas software necesarias para el desarrollo de la
aplicación de localización son, por un lado, los sistemas operativos Ubuntu 8.04 y
TinyOS 2.1 y, por otro, los lenguajes de programación nesC y Java.
ANEXO A. ENTORNO DE DESARROLLO
87
2.1 TinyOS.
TinyOS es un sistema operativo de código abierto diseñado específicamente
para redes inalámbricas de sensores. Se caracteriza por tener una arquitectura
orientada a componente, lo que facilita una rápida implementación a la vez que se
minimiza código, siendo este último un factor a destacar debido a las limitaciones
de memoria de este tipo de redes.
La librería de componentes de TinyOS incluye protocolos de red, servicios
distribuidos, drivers de sensores y herramientas de adquisición de datos ya
configurados para ser usados, aunque también es posible modificarlos para
desarrollar aplicaciones específicas.
TinyOS no es un sistema operativo en el sentido tradicional, es un entorno
de programación para sistemas integrados que permite diseñar sistemas
operativos con funciones específicas dentro de cada aplicación. La finalidad de este
sistema de programación es asegurar que el código correspondiente a cada
aplicación sea lo menor posible. Además, TinyOS no posee un sistema de archivos,
soporta únicamente asignación de memoria estática, implementa un modelo de
tareas simple y minimiza el nivel de abstracción.
TinyOS presenta un modelo de programación codificado en lenguaje nesC.
Al igual que otros sistemas operativos, TinyOS se organiza en capas, de modo que
la capa más baja es la más cercana al nivel hardware, mientras que cuanto más alto
es el componente más próximo se encuentra a la aplicación [43].
La estructura de directorios de TinyOS es la siguiente [44]:
� /apps: incluye distintas aplicaciones de ejemplo de programación en
TinyOS.
� /support : contiene el código fuente del Toolchain.
� /tos : se subdivide en los directorios:
• /chips
• /interfaces: almacena las interfaces provistas por los componentes
primitivos y las aplicaciones de ejemplo.
• /lib: contiene componentes e interfaces del sistema y de las distintas
plataformas soportadas por TinyOS.
• /platforms: almacena los ficheros necesarios para la ejecución en
distintas plataformas.
LOCALIZACIÓN EN INTERIORES USANDO REDES INALÁMBRICAS DE SENSORES
88
JOSÉ CARLOS REYES GUERRERO
• /sensorboard: incluye ficheros específicos de cada placa sensora.
• /system: contiene los componentes primitivos que proporciona TinyOS.
• /types: incluye los tipos que se usan en las primitivas de TinyOS.
Una aplicación en TinyOS es un conjunto de componentes que interactúan
entre sí, siendo cada uno de ellos una entidad funcional. Existen tres conceptos
fundamentales relacionados con la comunicación entre componentes: los
comandos, los eventos y las tareas. Los comandos y los eventos son mecanismos
empleados en la comunicación entre componentes, mientras que una tarea se
utiliza en operaciones concurrentes dentro de un mismo nodo.
Un comando es, por lo general, una solicitud de un servicio a otro
componente, por ejemplo, la lectura de un sensor. Un evento sería, siguiendo con
el ejemplo anterior, una señal de respuesta indicando que se ha completado el
servicio solicitado. Los eventos pueden también producirse de manera asíncrona
por interrupciones hardware o por la llegada de mensajes.
Los comandos y los eventos, en lugar de realizar su función en el preciso
instante de la llamada, pueden aplazar su ejecución usando las tareas. Las tareas, a
diferencia de los comandos y los eventos, son funciones que no se ejecutan en el
instante de la llamada sino que son ejecutadas por el planificador de TinyOS
posteriormente.
2.2 NesC.
NesC [43] es un lenguaje estructurado orientado a componente y diseñado
específicamente para sistemas integrados, como por ejemplo, las redes de
sensores. La sintaxis de nesC es similar a la de C y define un modelo de
concurrencia basado en tareas y en manejadores de eventos hardware. Asimismo,
es capaz de detectar condiciones de carrera durante el proceso de compilación.
El modelo de concurrencia emplea dos hilos durante la ejecución de una
aplicación: las tareas y los manejadores de eventos hardware. Las tareas son
funciones cuya ejecución es postergada, pero que una vez iniciada su ejecución no
se detienen hasta completarse. Los manejadores de eventos hardware también se
ejecutan hasta el final pero, a diferencia de las tareas, sí pueden generar
interrupciones en la ejecución de otra tarea o manejador.
Debido a que las tareas y los manejadores pueden ser interrumpidos
durante su ejecución por otro código asíncrono, los programas en nesC son
susceptibles de sufrir condiciones de carrera. Para evitar estas situaciones, nesC
utiliza declaraciones atómicas.
ANEXO A. ENTORNO DE DESARROLLO
89
El lenguaje nesC es una extensión de C diseñada para abarcar el modelo de
ejecución de TinyOS. Se muestran a continuación los conceptos fundamentales
relacionados con nesC/TinyOS:
� Aplicación: consiste en uno o más componentes ensamblados (wired) que
forman un programa ejecutable.
� Componente: constituyen el bloque básico para las aplicaciones escritas en
nesC. Existen dos tipos de componentes: módulos y configuraciones. Por
otra parte, un componente puede a su vez, proporcionar y usar interfaces.
� Módulo: componente que implementa una o más interfaces.
� Configuración: componente que ensambla a otros componentes,
conectando las interfaces usadas por algún componente a las interfaces
provistas por otros. Es lo que se conoce como wiring. La idea es que pueda
desarrollarse una aplicación como un conjunto de módulos, uniendo éstos
mediante una configuración dada. Toda aplicación en nesC está descrita
por una configuración, conocida como configuración de alto nivel, que
especifica los componentes de la aplicación y las interfaces que provee y
usa cada uno.
� Interfaz: se emplea para proporcionar una definición de la interacción de
dos componentes. En nesC las interfaces son bidireccionales. Para que un
componente pueda llamar a los comandos de una interfaz, debe
implementar los eventos de dicha interfaz. Un único componente puede
solicitar o proveer múltiples interfaces y múltiples instancias de la misma
interfaz. Las interfaces son el único punto de acceso de un componente.
2.3 Java.
Java es un lenguaje de programación orientado a objetos desarrollado por
Sun Microsystems a principios de los años 90. El lenguaje en sí mismo toma mucha
de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina
herramientas de bajo nivel, como la manipulación directa de punteros o memoria.
Las aplicaciones Java están típicamente compiladas en un bytecode6, a
diferencia de lenguajes como C o C++ que generan un fichero ejecutable durante la
compilación. Java es, por tanto, un lenguaje interpretado.
6 Fichero binario que contiene el código máquina generado por el compilador e interpretado por una
máquina virtual.
LOCALIZACIÓN EN INTERIORES USANDO REDES INALÁMBRICAS DE SENSORES
90
JOSÉ CARLOS REYES GUERRERO
Además de las anteriores, podemos mencionar como características
fundamentales de Java su robustez, simplicidad y la capacidad de programación
multihilo [45].
2.4 Ubuntu.
Ubuntu es un sistema operativo de código abierto basado en la
distribución7 Debian GNU/Linux. Es una distribución relativamente reciente ya que
fue creada en 2004 por el sudafricano Mark Shuttleworth. Está patrocinada por la
empresa Canonical Ltd. y tiene como objetivo la facilidad y la libertad de uso, los
lanzamientos regulares (cada 6 meses) y la sencillez en la instalación [46].
En este proyecto se ha empleado la versión con soporte técnico de larga
duración (LTS) Ubuntu 8.04: Hardy Heron.
Ubuntu, al igual que la mayoría de distribuciones GNU/Linux, tiene como
sistema de archivos predeterminado el sistema ext3, a diferencia del sistema NTFS
empleado por los sistemas operativos Windows de los últimos años.
Asimismo, el gestor de ventanas predeterminado es GNOME y el formato
de los paquetes software es, por ser una distribución basada en Debian, de
extensión deb.
7 Variante del sistema operativo GNU/Linux que incorpora determinados paquetes software para
satisfacer las necesidades de un grupo específico de usuarios.