Proyecto de Grado - Ingeniería de Sistemas y Computación
Universidad de los Andes
Facultad de Ingeniería
David Santiago Chicaiza Mendivelzo
Nicolás Rozo Bedoya
Sebastián David Salas Movilla
Smart Library
Asesor:
Yezid Enrique Donoso Meisel
REPORTE
DE
PROYECTO
DE
GRADO
Este documento define unas reglas que deben seguirse para elaborar un reporte de proyecto de grado para Ingeniería de Sistemas y Computación.
C
ONTENIDO0
R
ESUMENEl proyecto simula una biblioteca inteligente en el que se automatizan los procesos de alquilar y devolver los libros. Se busca mejorar estos procesos de tal manera que sean eficientes sin la necesidad que alguien tenga que supervisarlos en cada momento. Para lograr este objetivo se desarrolló un sistema con tres componentes principales: un componente físico que simula la entrada y salida de libros a través una Raspberry Pi y un lector RFID, una aplicación web donde se pueden gestionar los libros y usuarios de la biblioteca, y una plataforma M2M que funciona como intermediario entre los primeros dos componentes. Siendo así un sistema donde el usuario no percibe ni interactúa con él directamente. Todo pasa a su alrededor sin que se de cuenta.
1
I
NTRODUCCIÓNMotivación
Una biblioteca es una zona altamente frecuentada y de mucho tráfico para
personas como estudiantes, investigadores, profesionales, entre otros. En ella pueden existir muchas personas realizando diferentes actividades a la vez. Esto puede ocasionar cuellos de botellas cuando el personal de la biblioteca no sea capaz de atender cada solicitud de cada persona.
Problema
El problema radica en que se pierde mucho tiempo haciendo filas y esperando para que se cumpla los requisitos de cada una de las personas que están dentro de la biblioteca. Queremos disminuir este tiempo para que las personas puedan aprovechar otras actividades y todo quede guardado de manera automática en la base de datos de la biblioteca.
Diseño e implementación
El diseño de la solución tiene 3 componentes. El primer componente es la Raspberry Pi que hace la función de microcontrolador para manejar los sensores y actuadores. El segundo componente es la aplicación web que hace la función de interfaz gráfica y base de datos. El tercer componente es la Machine Type
Communication (MTC) que hace la función de intermediario entre los demás componentes.
Resultados
Para los resultados se obtuvo una comunicación exitosa entre los diferentes componentes y se logró automatizar el proceso de alquilar y devolver los libros de la biblioteca al momento de entrar o salir de esta misma. Esto se hace de manera eficiente en desempeño para los casos reales contemplados en una biblioteca donde el usuario salga con varios libros.
Estructura del documento
En el documento se explica un breve resumen de qué consiste el proyecto, una introducción explicando de manera general cómo se construyó. Sigue un estado del arte hablando sobre proyectos anteriores. Después abarca el tema de los requerimientos funcionales y no funcionales. Siguiendo con decisiones de diseño y la manera en la que se implementó el proyecto. Por último se muestran resultados y se comentan las conclusiones.
Agradecimientos
Queremos agradecer a Yezid Donoso quien nos apoyó y motivó para seguir adelante durante este proyecto y nos enseñó la importancia de seguir aprendiendo en la vida. A la Universidad de los Andes que nos formó como profesionales y nos brindó las herramientas necesarias para realizar este proyecto. A nuestras familias que siempre estuvieron con nosotros en todo momento. A nuestros compañeros de la universidad con los que recorrimos este proceso de formación que siguen y seguirán en nuestro apoyo.
2 D
ESCRIPCIÓN GENERAL2.1 Objetivos
Nuestros objetivos es emplear una nueva aplicación usando la MTC. En este caso es una biblioteca inteligente para que se puedan alquilar y devolver libros a través de un sistema con el que el usuario no interactúa directamente. Para cumplir este requisito es necesario decir que debemos hacer lo siguiente:
● Desarrollar una aplicación web que sea fácil y rápida de usar donde se puedan ver todos los cambios hechos en la MTC.
● Implementar un hardware que utilice los sensores para la detección de usuarios y libros. Además, implementar de la misma manera unos actuadores para notificar a los usuarios de su estado.
● Integrar los diferentes componentes anteriormente mencionados con la MTC para establecer una comunicación entre ellos.
● Desarrollar un prototipo para mostrar las diferentes funcionalidades e implementaciones logradas.
2.2 Antecedentes
Se tomó como antecedente el trabajo realizado en “Smart Home”[4] realizado hace un semestre en la Universidad de los Andes. Esta es una aplicación de la OpenMTC basada en una casa inteligente donde se usaban diferentes tipos de sensores como temperatura, luz ambiental, entre otros. En este caso usaban la OpenMTC para controlar todos los dispositivos de la casa de manera remota e inclusive de manera automática si era el caso.
2.3 Identificación del problema y de su importancia
Nuestro problema sucede en las bibliotecas a la hora de hacer filas o de querer alquilar un libro, es un tiempo que se puede estar aprovechando para otras actividades. Las filas se consideran un punto de cuellos de botella donde se necesita implementar soluciones. Esto no solo sucede en este contexto. En este momento decidimos hacerlo para bibliotecas por nuestra cercanía al caso como estudiantes pero es aplicable para muchas otras cosas como lo son supermercados, locales, parques de diversiones, peajes, museos y otros.
Por esta razón se decidió realizar este proyecto. Como solución a las filas y de aprovechar el tiempo usando la tecnología de una manera autónoma que sea capaz de tomar decisiones y comunicarse entre sí.
3
D
ISEÑO Y ESPECIFICACIONES3.1 Definición del problema
Muchas personas pierden mucho tiempo haciendo filas o esperando para que los atiendan. Esto es debido a que la capacidad de personal no es suficiente para suplir todas las necesidades. Esto también es visto en otros lugares, ya sean tiendas de ropa, supermercados, entre otros.
3.2 Especificaciones
Teniendo en cuenta que el sistema manejara una gran cantidad de datos en muy poco tiempo y que se necesita que todo procese de manera eficiente se tienen en cuenta los siguientes requerimientos:
Atributos de calidad:
Atributo de Calidad Disponibilidad
Justificación La aplicación debe responder adecuadamente a este requerimiento siendo que está montada en un servidor web.
Fuente Aplicación Web, OpenMTC
Estímulo El sistema debe estar disponible en todo momento.
Artefacto Sistema
Ambiente Ejecución normal.
Respuesta El usuario o el personal accede al sistema en cualquier momento. El usuario percibe al actuador dependiendo de la respuesta que se dé.
Medida de la Respuesta
El 99% de las veces la aplicación estará disponible.
Tabla 1.
Escenario de Calidad 2 AC2 Prioridad: Alta
Atributo de Calidad Eficiencia
Justificación La aplicación debe responder adecuadamente siendo que el proceso de mandar la información se tiene que hacer inmediatamente.
Fuente Raspberry Pi, Aplicación Web, OpenMTC
Estímulo El sistema debe responder rápido para saber la decisión que se va a tomar.
Artefacto Sistema
Ambiente Ejecución normal.
Respuesta El usuario puede ver una respuesta de manera inmediata a través de los actuadores.
Medida de la Respuesta
La respuesta no debe tardar más de 1 segundo.
Tabla 2.
Escenario de Calidad 3 AC3 Prioridad: Alta
Atributo de Calidad Escalabilidad
Justificación La aplicación es capaz de resolver consultas y procesos simultáneos.
Fuente Aplicación Web, OpenMTC
Estímulo Puede haber más de dos usuarios usando el sistema a la vez.
Artefacto Sistema
Ambiente Ejecución normal.
Respuesta El sistema manda solicitudes y actualiza de manera simultánea la información.
Medida de la Respuesta
El 99% de las veces la aplicación estará disponible.
Tabla 3.
Escenario de Calidad 4 AC4 Prioridad: Alta
Atributo de Calidad Facilidad de uso
Justificación La aplicación debe ser entendible e intuitiva para el usuario desde la primera vez que la utiliza.
Fuente Aplicación Web
Estímulo El usuario quiere manejar la aplicación y usar sus funcionalidades de una manera fácil y sencilla.
Artefacto Computador
Ambiente Ejecución normal.
Respuesta El usuario sabe manejar la aplicación.
Medida de la Respuesta
El 95% de las veces, el usuario maneja la aplicación sin necesidad de guías o material extra.
Tabla 4.
Título del Escenario Operacional
Alquilar libro
Stakeholder Asociado Usuario ID EO-01
Consideración Operacional Respuesta del Stakeholder
Descripción general de la
funcionalidad Se registra el libro alquilado de forma automáticamente.
Describa lo que el Stakeholder hace
ahora o le gustaría poder hacer El usuario podrá salir de la biblioteca con los libros deseados y el sistema lo reconocerá.
Describa cualquier entrada provista
o disponible al momento del inicio El carné del usuario y los libros.
Describa el contexto de la operación El usuario quiere sacar unos libros y necesita alquilarlos.
Describa cómo el sistema debe
responder El sistema puede responder de manera positiva (abre las puertas) o de manera negativa (notifica que no puede alquilar el libro) al usuario.
Describa las salidas que el sistema
produce como resultado de la acción Se abren las puertas y se prende una luz verde si el proceso es exitoso o las puertas no se abren y se prende una luz roja.
Describa quién o qué usa la salida y
para que es utilizada El usuario sabe si es capaz de alquilar el libro o no.
Título del Escenario Operacional
Devolver libro
Stakeholder Asociado Usuario ID EO-02
Consideración Operacional Respuesta del Stakeholder
Descripción general de la
funcionalidad Se devuelve el libro alquilado de forma automáticamente.
Describa lo que el Stakeholder hace
ahora o le gustaría poder hacer El usuario puede entrar a la biblioteca con los libros deseados y el sistema lo reconocerá.
Describa cualquier entrada provista
o disponible al momento del inicio El carné del usuario y los libros.
Describa el contexto de la operación El usuario entra a la biblioteca para devolver los libros.
Describa cómo el sistema debe
responder El sistema actualiza el estado de los libros.
Describa las salidas que el sistema
produce como resultado de la acción Se puede ver la información actualizada.
Describa quién o qué usa la salida y
para que es utilizada El personal de la biblioteca lo puede usar para saber el estado de los libros.
Tabla 6.
Se tiene que tener en cuenta que se hizo una versión local para probar las funcionalidades pero la aplicación web de todas formas existe un servidor web.
3.3 Restricciones
Para este proyecto se tiene que tener en cuenta que a través del periodo académico de un semestre se le asignó tiempo parcial. Siendo que el equipo de trabajo también tenía otras responsabilidades académicas.
También, la OpenMTC crea un costo para cualquier implementación en este tema. Este costo se ahorro siendo que fue brindada por la Universidad de los Andes. Los lectores RFID RC522 y la Raspberry Pi crean otro costo adicional.
La aplicación web se desarrolló utilizando Django con el lenguaje de programación Python, siendo esta OpenSource no generó ningún costo. Las restricciones para la aplicación web es que sea fácil de usar.
4
D
ESARROLLO DEL DISEÑOEl diseño de la solución se dividió en 3 componentes, como habíamos dicho anteriormente. En la imagen 1 se puede ver la arquitectura implementada. El usuario elige los libros deseados para alquilar y cuando intenta salir de la biblioteca pasará por los sensores RFID RC522. Esta se comunica a través de la Raspberry Pi y le envía los datos que leyó. La Raspberry Pi procesa la información y se la envía al Gateway (GSCL) de la MTC. La MTC se encarga de enviar esta información a la aplicación web y esta le devuelve el estado del usuario y si tiene multa. La MTC se encarga de enviarle esta información a la Raspberry Pi y esta con la información recibida decide si puede alquilar o no el libro. La respuesta de esta se ve reflejada por los actuadores, que en este caso son dos LEDs. Siendo el verde si todo salió bien y puede alquilar el libro o rojo si tiene multa y no puede.
Imagen 1. Arquitectura del proyecto
Uno de los componentes es la MTC, que esta tiene dos componentes. El GSCL que viene siendo el Gateway, es decir, el puerto de entrada de todos los
dispositivos que se quieran conectar, y el NSCL que viene siendo el Network, que este es para brindar servicios en la red. Esta está encarga de hacer la comunicación M2M entre las distintas máquinas. En su mayoría se comunica a través de servicios REST, sea para la aplicación web o con la Raspberry Pi.
Otro de los componentes es la aplicación web. Esta fue hecha en Django. Para el proyecto se implementó de manera local para poder enviar solicitudes a la MTC estando en la misma red.
El último componente es la Raspberry Pi junto con el sensor RFID RC522 y los actuadores. El sensor se encarga de leer tags que tienen los usuarios y los libros de manera constante y enviar la información a la MTC. Al mismo tiempo, la Raspberry Pi se encarga de leer lo que recibe de la MTC para saber qué actuador activar.
4.1 Recolección de Información
En un principio nos basamos en la documentación sobre la OpenMTC que se nos
brindó de “OpenMTC Python SDK Documentation Release R4”[1] para entender
los componentes y la arquitectura que tenía la MTC. Además, este documento fue una guía para entender el desarrollo de los scripts y las diferentes comunicaciones que se tienen. Así que usando esta se fue entendiendo parte de los programas que eran necesario hacer y cómo se conectaban a las máquinas. Después, con “OpenMTC User and Administration Guide”[2] se obtuvo un mejor entendimiento de las máquinas de la MTC en sí. Tanto como los servicios que provee la MTC, los servicios REST que utilizaba y que tipo de información manda y recibe.
4.2 Alternativas de diseño
En un principio se estuvo considerandos otras opciones para los lectores y tags de RFID como los NFC.
Imagen 2. Alternativa del sensor RFID.
El inconveniente de estas es que deben ser traídas del exterior y la duración del envío era muy alta para el tiempo que se tenía disponible. Así que se optó por una opción que se pudiera conseguir local y estas fueron las RFID RC522.
Aplicación Web en Heroku
En las primeras iteraciones del proyecto se usó la aplicación web en heroku pero esta se tuvo que pasar a local para lograr el uso de los actuadores.
Python SDK para la MTC
En un principio se hicieron las pruebas con el SDK de python pero por unos inconvenientes con la Raspberry Pi se utilizaron los servicios REST.
5
I
MPLEMENTACIÓNPara el cumpliminiento de los requerimientos y del diseño se requirió conocer y manejar las conexiones de comunicación entre los diferentes componentes para el envío, recepción y control de la información para la implementación del proyecto. En esta etapa se aplicó el conocimiento adquirido en la recolección de la información.
Primero se decidió conocer la arquitectura de la MTC haciendo pruebas con scripts locales con valores generados aleatoriamente. Esto con el fin de conocer y probar la conexión de una aplicación con la MTC. En paralelo, se fue implementando la aplicación web y base de datos que maneja los datos de la biblioteca como los libros y sus usuarios. Una vez que el script estuviera hecho se revisaba la generación de datos dentro de la MTC.
Una vez ya estuvieron esos dos componentes se hizo la comunicación entre la MTC y la aplicación web para recibir y guardar los datos enviados desde la MTC. Mientras se hacía esto, también se comenzó a trabajar en la parte de los sensores
RFID y la Raspberry Pi, específicamente en la lectura de las etiquetas. Luego, se inició el envío de información de los datos recogidos por la Raspberry Pi hacia la MTC y escribir sobre las etiquetas para que conservaran un identificador. Al lograr esto, ya se realizaba la conexión unidireccional desde la Raspberry Pi, la entrada de la información de datos, hasta la aplicación web donde se desplegaba el contenido.
Por último, se integró una funcionalidad de generación de alertas para demostrar que el flujo de información por la MTC es bidireccional, donde la transferencia de información comienza desde la aplicación del web hasta la activación de un sensor.
5.1 Descripción de la implementación
Se decidió en la primera parte, donde se realizaba la conexión de la MTC con un programa local, generar el script en lenguaje de programación Python puesto que era el lenguaje usado en la mayoría de ejemplos y documentación que se encontraron. Además, fue conveniente el desarrollo de los programas, en general de todo el proyecto, en lenguaje Python porque es el lenguaje principal para el uso de librerías de sensores en la Raspberry Pi.
En los scripts locales se comenzó a crear primero la aplicación, los contenedores en la aplicación y la generación de contenido en los contenedores a partir de los servicios de transferencia de representación de estado (REST). Los principales parámetros para el uso de este servicio en la MTC es conocer el nombre de la aplicación con la cual se registra. El nombre del contenedor donde se quiere almacenar o extraer la información. La dirección url donde se está ofreciendo el servicio. Por último, la información de la cabecera. La MTC usa principalmente el formato JSON para el manejo de la información.
Al haber contenido de información en la MTC, lo siguiente era hacer una conexión entre esta y el servidor de aplicación. Lo que se pretende en esta conexión es que toda información que le llegue a la MTC y que la aplicación web esté interesado es que la MTC le envié la información sin que la aplicación lo pida. Este servicio se llama realizar una subscripción. Con la documentación de guia de usuario en una pagina web se encontro el siguiente metodo post
Recuperado de: http://www.open-mtc.org/Downloads/API-Documentation/getting-started/interface.html
Mientras la aplicación web esté en ejecución, se puede hacer POSTMAN del post en la imagen y esto genera la suscripción. Más adelante se encontró la forma de generar la suscripción ejecutando código en lenguaje Python que mejora la integración del proyecto. El contenido que se recibe de la MTC está en BASE64 por lo que es necesario decodificarla.
Respecto a los sensores, la comunicación entre los sensores RFID y las Raspberry Pi. Existe una conexión física del sensor de lectura RFID hacia la Raspberry PI como se muestra en la siguiente imagen.
Imagen 3. Conexión física lector RFID con Raspberry PI.
La conexión es por medio de Jumpers hembra-hembra entre los GPIO’s de la Raspberry y las entradas del lector.
En el manejo de la recolección de datos en la Raspberry PI del Lector RFID se maneja la librería MRFC522 que contiene los métodos para hacer lectura de una etiqueta y poder escribir. Se modificó el código de lectura de la librería para que pudiera retornar en una variable la identificación de la etiqueta y poderse enviar a la MTC.
Con lo anterior descrito, se ejecuta los scripts para resolver el requerimiento de alquilar y devolver libros.
Por último, para generar el flujo de información desde la aplicación web a la Raspberry quien ejecuta los comando para, según la información que reciba, generar una respuesta del actuador. Ya teniendo el código necesario solo se cambiaba las entidades de quien enviaba la información a la MTC, la aplicación web, y quien es suscriptor del contenedor, la Raspberry PI.
5.2 Resultados esperados
Describir y justificar las formas de implementar modelos y soluciones, así como las herramientas empleadas. Evaluar la precisión del desempeño esperado considerando el efecto de soluciones aproximadas y errores de medición esperados.
6
V
ALIDACIÓN6.1 Validación de resultados
Los resultados obtenidos se obtuvieron una vez que los 3 componentes fueron conectados y se pudieran comunicar entre sí. El tiempo de respuesta entre que un usuario pasa con sus libros por los sensores y se prende una luz LED fue entre 1 y 2 segundos. Esto se debe a que tiene que pasar por la arquitectura dos veces para que así el actuador pueda hacer su función.
Se validó la información de tal manera que se pudiera diferenciar entre un usuario y los libros. Esto a través de unos bits representativo como identificador. Para los usuarios el identificador es 1 y para los libros fue 2. Además, el lector se encarga de leer todos los libros que lleva algún usuario, de esta manera se pueden alquilar más de un libro por usuario. Otra validación que se hizo es que el lector solo lee lo que está enfrente, así que no hay probabilidad de que pueda leer alguna otra cosa que no sea el usuario y su libro.
Imagen 4. Página Web, Logs.
Imagen 6. Maqueta – Vista desde arriba
7.
C
ONCLUSIONES7.1 Discusión
Al haber finalizado este proyecto se cumplieron la mayoría de los objetivos. Se logró implementar los distintos componentes y hacer una comunicación exitosa entre ellos. Además del funcionamiento y buenas prácticas de las aplicaciones y los scripts hechos y con esto se pudo aportar para el tema de Internet de las cosas, aspecto que sigue siendo un innovador para la solución y optimización de problemas. A medida que se iba trabajando en el proyecto se logró investigar y aprender sobre el tema relacionado.
En el comienzo, la principal dificultad para realizar el proyecto fue la curva de aprendizaje y la falta de documentación existente sobre la MTC. Esto se solucionó buscando proyectos parecidos hechos anteriormente y usando toda la documentación posible. El conocimiento se reforzó con pruebas hechas por nosotros para conocer las funcionalidad de la MTC y superar dudas que generaban problemas. También se recibió ayuda del asistente graduado, del asesor de proyecto de grado ,quien fue de gran utilidad.
Algunas implementaciones no se lograron hacer por falta de tiempo. Entre estas uno de estantes inteligentes para detectar si los libros estaban colocados o estaban en uso. Otras como implementación de sensores de humedad para el cuidado de los libros no se implementó por la misma razón. Sin embargo, estas ideas quedan para una extensión de lo que es el proyecto y para ideas futuras de aplicaciones de la MTC.
7.2 Trabajo futuro
Para los trabajos futuros sobre este tema se encuentran las diferentes aplicaciones que se pueden lograr con la MTC y con Internet de las cosas. De esta manera ir automatizando todos los procesos posibles hasta formar una verdadera Smart City. Además, un tema del cual ampliar sobre este mismo proyecto y muchos otros parecidos es el tema de seguridad de la MTC. Es decir, toda la información enviada es segura, haya confidencialidad e integridad de los datos.
8
R
EFERENCIASLista de referencias bibliográficas.
[1] Campowsky, K., “OpenMTC Python SDK Documentation Release R4”,
[2] Fraunhofer FOKUS, “OpenMTC User and Administration Guide”, 2015. Recuperado de:
http://www.open-mtc.org/Downloads/API-Documentation/user_guide.html.
[3] Universidad de los Andes, “Laboratorio - OpenMTC”.
[4] Camargo G., Gómez J. & Molano J., “Desarrollo de una aplicación basada en la plataforma OpenMTC para la interconexión y administración de dispositivos