Full text
Preview |
PDF
- Requires a PDF viewer, such as GSview, Xpdf or Adobe Acrobat Reader
Download (1MB) | Preview |
Prieto Pereira, Jorge (2018). Evaluación del sistema operativo RIOT sobre plataforma Arduino para redes de sensores inalámbricas. Proyecto Fin de Carrera / Trabajo Fin de Grado, E.T.S.I. Industriales (UPM), Madrid.
Title: | Evaluación del sistema operativo RIOT sobre plataforma Arduino para redes de sensores inalámbricas |
---|---|
Author/s: |
|
Contributor/s: |
|
Item Type: | Final Project |
Degree: | Grado en Ingeniería en Tecnologías Industriales |
Date: | February 2018 |
Subjects: | |
Faculty: | E.T.S.I. Industriales (UPM) |
Department: | Automática, Ingeniería Eléctrica y Electrónica e Informática Industrial |
Creative Commons Licenses: | Recognition - No derivative works - Non commercial |
Preview |
PDF
- Requires a PDF viewer, such as GSview, Xpdf or Adobe Acrobat Reader
Download (1MB) | Preview |
Actualmente vivimos en un mundo dominado por la tecnología, donde es posible estar conectado a internet prácticamente en cualquier momento y lugar. Simplemente encendiendo el ordenador o un dispositivo móvil somos capaces de realizar diversas tareas, desde mandar mensajería instantánea o buscar información en una página web, hasta reservar un vuelo o pagar la cuenta de un restaurante. Dentro de este mundo va cobrando cada vez más fuerza la “Internet de las cosas” o Internet of Things (IoT). Éste no es un concepto novedoso, sino que ya fue introducido por Kevin Ashton en 1999 (Wikipedia, https://es.wikipedia.org/wiki/Internet_de_las_cosas, s.f.). La idea principal consiste en la utilización de dispositivos embebidos con capacidades limitadas de CPU, memoria y energía para recolectar información de casi cualquier área y actuar en consecuencia. Entre estas posibles áreas están la seguridad y automatización del hogar, aplicaciones que se encargan de la calefacción, del suministro de agua o electricidad e incluso sistemas inteligentes de transporte que asistan al conductor. El número de dispositivos conectados a internet actualmente supera los 8000 millones, y va a seguir creciendo de manera exponencial según Gartner Inc., una empresa consultora y de investigación de las tecnologías de la información, hasta llegar en 2020 a 26000 o incluso 30000 millones de dispositivos conectados en todo el mundo. Este crecimiento va unido a otros avances tecnológicos como la implantación del protocolo IPv6 (Internet Protocol versión 6), diseñado para reemplazar al IPv4 y que en 2017 ya se está implementando en la mayoría de dispositivos que se conectan a internet. El IPv6 posibilita 2128 direcciones de host diferentes frente a las 232 que admitía el IPv4, un número demasiado pequeño que restringía el crecimiento y el uso de internet especialmente en países densamente poblados como China o India (Wikipedia, https://es.wikipedia.org/wiki/IPv6, s.f.). El IoT va a permitir la comunicación entre miles de millones de “cosas” desde neveras o automóviles hasta productos más pequeños, como paquetería, libros o botiquines, evitando así que existan artículos fuera de stock o medicinas caducadas entre otros. En la actualidad no existe un estándar de la arquitectura del IoT. Algunos investigadores definen el Internet of Things como un modelo que abarca las tecnologías de comunicación inalámbrica como las redes de sensores inalámbricos, redes móviles y actuadores teniendo cada uno de los elementos de la red una dirección única. En el caso de las redes de sensores inalámbricos o WSNs (Wireless Sensor Networks), han recibido una gran atención en los últimos años gracias a los avances de la tecnología en campos como los micro-sensores, las redes inalámbricas o el procesamiento de dispositivos embebidos. Las WSN están constituidas por sensores autónomos distribuidos espacialmente con el propósito de ser capaces de intercambiar información con un consumo de energía reducido. El presente trabajo trata sobre crear una red de sensores formada por distintos dispositivos embebidos. Para su programación se va a emplear como herramienta RIOT, un sistema operativo embebido de código abierto para dispositivos inalámbricos con poca memoria y bajo consumo. En concreto, se van a programar una serie de dispositivos (en nuestro caso de la familia de Arduino, aunque la aplicación final será portable para cualquier dispositivo soportado por RIOT) para formar una red de sensores que sea capaz de mandar paquetes de datos vía ZigBee1 a un nodo coordinador, el cual será capaz de procesarlos y mandar nuevas instrucciones al resto de nodos (conocidos como end points). Los dispositivos deben ser capaces de atender las instrucciones del coordinador instantáneamente, sin dejar por ello de mandar información de sus sensores, es decir, no pueden detener una actividad para dedicarse exclusivamente a otra. Para ello RIOT proporciona la opción de programación con varios hilos o multithreading y la comunicación entre procesos. RIOT se basa en una arquitectura microkernel2 y, a diferencia de otros sistemas operativos con uso de memoria igualmente baja, permite la programación de aplicaciones en C y C++. (RIOT, s.f.) Para comenzar el proyecto lo primero que se hace es descargar RIOT (disponible en GitHub3) que, además del código para poder generar aplicaciones, posee una serie de ejemplo, tests y tutoriales para ir tomando contacto con el sistema operativo. El usuario tiene que instalar los programas de desarrollo para Linux o Mac OS, las cadenas de herramientas o toolchains4 y las herramientas para cargar los firmwares a las diversas tarjetas con las que se desea trabajar. Antes de usar el sistema operativo en un dispositivo, RIOT recomienda ejecutar los ejemplos y probar nuestras primeras aplicaciones en la terminal de Linux o Mac OS, ya que como característica especial permite la compilación y ejecución de aplicaciones en nuestro ordenador (plataforma native), sin las posibles limitaciones del dispositivo que usemos posteriormente.
Tras descargarlo, comienza la toma de contacto con la arquitectura de RIOT (como está distribuido el código, como se generan los ejecutables), poniendo especial atención al funcionamiento de los threads, a la comunicación entre procesos, a los timers y al lector de comandos o shell, que van a ser la base de nuestra aplicación final. Una vez realizadas suficientes tareas en la plataforma native comienza la programación en dispositivos soportados por RIOT, en particular con el Arduino-uno. El primer objetivo consiste en que dos Arduinos-uno, con sus respectivos módulos XBee5 conectados a una Shield de arduino, sean capaces de comunicarse entre ellos, es decir, recibir y mandar datos. Para ello, lo primero que se debe hacer es preparar los módulos XBee. La única herramienta posible para configurar su firmware como el de un coordinador, router o un end point es X-CTU (XBee Configuration and Test Utility), una herramienta multiplataforma que permite interactuar con los módulos mediante un interfaz gráfico. La poca memoria de las dos placas de Arduino-uno, el hecho de no soportar el uso de threads y el tener una única UART (Universal Asynchronous Receiver-Transmitter) compartida por el módulo XBee y la comunicación a través del puerto USB, hacen necesario la elección de otro dispositivo para poder lograr el objetivo final de formar una red de sensores. Por ello, elegimos como coordinador un Arduino-due, que posee 5 UART, 512 Kb de memoria flash y 96Kb de RAM (Random Access Memory) frente a los insuficientes 32 Kb de flash y 2Kb de RAM que presentaba el Arduino-uno. La segunda aplicación generada, ya con el Arduino-due como coordinador, permite un mayor intercambio de datos entre los dos nodos de la red. El end point continúa siendo un Arduino-uno y sus dos tareas son: inicializarse con una determinada PAN ID y una dirección de destino para comunicarse con el coordinador y procesar los comandos recibidos desde el otro nodo de la red para la lectura de sensores con el periodo indicado en el comando. Por su parte, el Arduino-due imprime por pantalla los datos transmitidos por los end points relativos al valor de los sensores. Estos datos llegan al coordinador vía radio y son almacenados para su posterior impresión. La existencia de más de una UART permite al Arduino-due utilizar distintas funciones para imprimir datos por pantalla o transmitirlos a través de la radio con el módulo XBee, mientras que el Arduino-uno solo va a ser capaz de utilizar la función printf para ambas tareas. Por último, la aplicación final creada con RIOT va a estar formada un coordinador y varios end points y es capaz de realizar lo siguiente: Los end points mandan datos de manera continua al coordinador de distintos sensores simultáneamente y son capaces mientras de escuchar y atender nuevas órdenes procedentes del coordinador para mandar datos de otro periférico o para cambiar la frecuencia de envío. El coordinador envía comandos a los end points y recibe de éstos paquetes de datos, que almacena en su memoria según la dirección del nodo y el tipo de sensor. Además, los puede imprimir por pantalla si el usuario lo pide desde el ordenador. Desde el coordinador también se pueden mandar comandos AT a los end points para incrementar o disminuir su potencia de transmisión y recepción de datos. El coordinador tiene conectado un sensor que puede leer con una frecuencia determinada y almacenar sus datos de la misma manera que los recibidos del resto de nodos de la red. Todos los sensores se inicializan directamente con una dirección de destino y una PAN común para iniciar la comunicación entre ellos. En los siguientes capítulos se explica este trabajo y sus objetivos con más detalle, así como algunas herramientas y los dispositivos más importantes de los que se hace uso como son el sistema operativo RIOT y las capacidades y funcionalidades del Arduino-uno, Arduino-due y el módulo XBee Serie 2.
Item ID: | 50396 |
---|---|
DC Identifier: | https://oa.upm.es/50396/ |
OAI Identifier: | oai:oa.upm.es:50396 |
Deposited by: | Biblioteca ETSI Industriales |
Deposited on: | 23 Apr 2018 14:04 |
Last Modified: | 01 Jun 2022 13:53 |