scieee AI-readable full text Open interactive document viewer

Sistema de control de acceso con huella dactilar y Arduino

Fernández Villacañas, Julia Miguélez; Navazo Escudero, Adrián

Abstract

Este proyecto consiste en el diseño e implementación de un dispositivo de control de acceso para un comedor escolar. Se compone de dos Arduinos, un lector de huellas, una pantalla TFT LCD y una base de datos dónde se almacena la información. El objetivo del proyecto es facilitar el registro del alumnado y proporcionar datos relevantes del mismo al personal encargado de la supervisión de ese espacio. Se busca sustituir otros sistemas más arcaicos como el uso de ficheros físicos o el uso de códigos para cada alumno. Prestamos una atención especial a las alergias alimentarias y creemos, que este sistema puede ayudar a prevenir errores con consecuencias no deseadas.

Full text

Sistema de control de acceso con huella dactilar y Arduino Universidad Complutense de Madrid Facultad de Informática Curso 2018/19 Autores Julia Miguélez Fernández Villacañas Adrián Navazo Escudero Directores José Ignacio Hidalgo Pérez Juan Lanchares Dávila Trabajo Fin de Grado en Ingeniería Informática 20 de septiembre de 2019 “Nuestra mayor gloria no está en no caer nunca, sino en levantarnos cada vez que caemos." - Confucio, Resumen Este proyecto consiste en el diseño e implementación de un dispositivo de control de acceso para un comedor escolar. Se compone de dos Arduinos, un lector de huellas, una pantalla TFT LCD y una base de datos dónde se almacena la información. El objetivo del proyecto es facilitar el registro del alumnado y proporcionar datos relevantes del mismo al personal encargado de la supervisión de ese espacio. Se busca sustituir otros sistemas más arcaicos como el uso de ficheros físicos o el uso de códigos para cada alumno. Prestamos una atención especial a las alergias alimentarias y creemos, que este sistema puede ayudar a prevenir errores con consecuencias no deseadas. Palabras clave Arduino, reconocimiento de huella, control de acceso, base de datos, pantalla TFT, comedor escolar, alergias alimentarias, biometría Abstract This project consists of the design and implementation of an access control device for a school canteen. It consists of two Arduinos, a fingerprint reader, a TFT LCD screen and a database where the information is stored. The aim of the project is to facilitate the registration of the students and provide relevant data of the same to the staff responsible for supervising that space. It seeks to replace other more archaic systems such as the use of physical files or the use of codes for each student. We pay special attention to food allergies and believe that this system can help prevent errors with undesirable consequences. Keywords Arduino, fingerprint recognition, access control, data base, TFT screen, school canteen, food allergies, biometrics 5 Dedicatoria Este proyecto se lo quiero dedicar principalmente a mis padres, Carmen y Juanma, y a mi hermano Diego, que siempre han estado ahí apoyándome durante toda la carrera, tanto en los buenos momentos como en los malos, y me han ayudado a seguir adelante. A mi abuela Luisa, que reza por mí en cada examen y que tantas veces me ha preguntado de qué iba Ingeniería Informática, y yo intentaba explicárselo de la manera más fácil posible, aunque nunca le quedaba del todo claro. A mi abuela María, que cada vez que me ve me pregunta qué tal me ha salido el examen aunque no lo haya hecho todavía. A mi familia en general, por su preocupación, su apoyo y sus consejos. A esos amigos que he conocido en la Facultad, Lidia, Bolaños y Carlos, con los que he pasado muy buenos momentos y a los que si no los hubiera conocido, mi vida tanto universitaria como fuera de la universidad habría sido muy distinta. Y por supuesto, a mi compañera de TFG y amiga Julia, a la que conocí el primer año de carrera y que nunca me ha defraudado. Con la que tantas horas he pasado haciendo todas esas prácticas que al principio no salían, pero siempre acababan saliendo con nuestro esfuerzo. Gracias a todos. Adrián Navazo 6 Dedicatoria Para empezar quiero agradecer a mi madre, Mercedes, porque ha estado siempre ahí y me ha animado cuando ya no me quedaba fuerza. A Luci por todo su apoyo y cariño durante muchos años. No tengo suficientes palabras de agradecimiento para ellas. A mis hermanos Luisa y Andrés que, cada uno en su estilo, me han ayudado cuando lo he necesitado. A mis tíos y primos por proporcionarme momentos inolvidables. A mi abuelo Pepe porque me dijo que no me rindiera nunca y espero que esté orgulloso de mí. Te recordaré siempre. A mis amigos Patricia, Lidia, Carlos y Bolaños que han llenado de experiencias y momentos felices esta década que llevamos conociéndonos y, además han sabido estar en los momentos difíciles. A Sara por alejar los nubarrones y hacer que confiara más en mí. Y por último, pero no menos importante, a mi compañero y gran amigo Adrián. Ha estado ahí, constante siempre y con una paciencia increíble. No sé como habría podido acabar las prácticas sin tu ayuda. Os quiero mucho Julia Miguélez 7 Agradecimientos Queremos agradecer a nuestro tutor Iñaki por todas sus ideas entusiastas y todo el apoyo y medios que nos ha proporcionado a lo largo del proyecto. También a Carlos Roa por todo el mantenimiento que le ha hecho a nuestros dispositivos y por recibirnos siempre de buen humor. A Lanchares por darnos las bases del proyecto del que hemos partido. Por último queremos agradecer a todos los profesores que hemos tenido durante todos estos años y que gracias a sus enseñanzas hemos aprendido lo necesario para llegar a este punto y ser capaces de hacer este proyecto. 8 2 Introduction Since the creation of the first Arduino model in 2005 at the Ivrea Design Integration Institute (IDII) [1] located in northern Italy, an approach to electronics has been achieved for hundreds of thousands of users. This has been possible because the products of this brand are Free Hardware, which means that the plans are public and even when you buy a board from a distributor you can modify it and adapt it to your needs. At the same time, the Arduino software environment, the Arduino IDE, is created under the GPL (General Public License) which is free software and allows you to freely execute the code without any expense, modify it and transmit it. Due to the above, the Arduino platform has brought microprocessors closer and made them affordable to non-professional users. Thanks to these devices with user-friendly environments, such as the Raspberry Pi board, an infinite number of projects have been carried out using their sensors and their modifiability, since it is one of the most important free hardware projects. It is mainly used in teaching, but thanks to the Internet, forums have been created, such as the official Arduino forum where many people show the projects they have done to the world and even share the code and make video tutorials of the whole process. These projects range from digital clocks to self-playing pianos to automatic cat food dispensers. 2.1 Motivation With the increase in the number of people affected by the various allergies and food intolerances, we need a tool to facilitate the work of providing a proper diet for the health of each individual. We focus especially on places where, due to the large amount of people eating the same menu, (such as school canteens) must take an exceptional care with vulnerable collectives (like children and the elderly). Therefore, our target audience are school canteens. Our aim is that each student will be identified only with respect to their classmates for monitors and kitchen staff to fulfill their needs. This work is of vital importance, since giving food mistakenly with an allergen to an allergic person, either intrinsically or due to cross-contamination 3, can,lead to an anaphylactic shock 4in the worst cases. 2.2 Objectives To propose a visual way to inform users about the food they can consume within the canteen menus in order to avoid an allergic response of their body. The student’s identification 3process by which a food that does not contain an allergen comes into contact with a surface or food that contains the allergen and is contaminated with it 4closure of the airways due to the reaction of the immune system to the allergen 15 is carried out by means of checking their fingerprints and in this way it is a personalized experience avoiding the memorizing of keys. Moreover, administrators will be able to register their students efficiently as well as to erase and make a backup of their fingerprints. They may also enter their students in a database by filling in a web form quickly and easily. Our objective also consists of using an affordable and versatile device, such as the Arduino that could be modified and be scaled if necessary at a reduced cost. At the beginning, our goal was to recognize all users we had registered in our database by their fingerprints and display their information on a screen.Our aim was also to be able to register sets of people as th administrator wished. As the project progressed, we found a practical use for our system: school canteens. At that moment, we added the objective of combining it with their daily menus and highlighting the allergens the user was sensitive to in the different menus. 2.3 Organization In the following sections we will expose the different hardware and software components that we have used in the completion of this degree final project, as well as the implementation, and an example of usage and its technical outcomes. •3. Background. In the first part after this introduction, we will tell the background of Arduino projects that served as a guide or inspiration for the realization of this project. •4. Devices. In the fourth part we will describe the devices used in the development of the project, their features, models and relevant information. •5. Database. In this part we will explain the database used, together with the database manager and its structure: the different tables, the relationship between them and their attributes. •6. Implementation. In part six we will discuss the implementation, with the libraries, an user’s manual and the different difficulties and drawbacks encountered. •7. Use case. In section seven we will show how the application runs, fingerprint register and student identification, from the initial screen with screenshots for each step. •8. Outcomes. The last but one section will be the most technical, where we will obtain measurements in our application and show the outcomes. This part can include access times, memory used in execution, etc. •9. Conclusion. Finally we will come to our conclusions about the objectives reached, the difficulties found and the end of the project. 16 3 Antecedentes En esta sección describiremos los trabajos previos que se han hecho tanto de control de acceso como de reconocimiento de huellas y proyectos de Arduino. Por la relevancia de Arduino en el campo de la educación, solamente en la Facultad de Informática de la Universidad Complutense encontramos dos proyectos en los que se emplea este dispositivo. •Una red de sensores para las Smart Cities. [3] En este trabajo de fin de Máster se utiliza Arduino y sus sensores para medir los niveles de ruido en diferentes puntos de una ciudad. •Conducción asistida por dron con soporte hardware para la visión. [4] En este caso, este trabajo de fin de grado utiliza un Arduino dentro del automóvil como controlador. Estos dos trabajos son sólo la punta del iceberg de la cantidad de proyectos en los que se emplea esta placa. Basta una búsqueda básica con la palabra Arduino en un buscador de Internet para encontrar un conjunto enorme de proyectos con una variedad extraordinaria. 4 Dispositivos Hemos utilizado tres placas de Arduino y dos lectores de huellas diferentes. A continuación les presentaremos sus características, sus ventajas e inconvenientes de cada uno de ellos con respecto al otro. Debido a una avería en la placa Arduino Uno WiFi que utilizábamos como principal, se aprovechó para comprar una placa con mayor capacidad de procesado. 4.1 Arduino Uno WiFi El original, con el que empezó el proyecto y sobre el que estaba montado el lector de huellas 1. Se puede ver en la Figura 1 17 Figura 1: Arduino Uno WiFi Sus características técnicas son: •Pins de E/S (Entrada/ Salida) digitales: 20 •Salidas PWM [5] (Modulación de Ancho de Pulsos): 5 •Consumo de energía: 93 mA •Microcontrolador: ATmega328 •Voltaje al que funciona: 5 V •Memoria flash: 32 KB •SRAM: 2 KB •Velocidad del reloj: 16 MHz •Pins de entrada analógicos: 6 •EEPROM: 1 KB •Corriente continua por cada pin E/S : 40 mA •Procesador WiFi : ESP8266 18 •Voltaje al que funciona el microprocesador WiFi: 3,3 V •Memoria flash del microprocesador WiFi: 4 MB •RAM del microprocesador WiFi: 8 MB instrucción, 12 MB de datos •WiFi: 802.11 b/g/n 2.4 GHz •Tiempo de respuesta: menor a 2 ms 4.2 Arduino Uno Al principio del proyecto se utilizó como placa auxiliar que utilizamos para probar la pantalla y con el lector de huellas Adafruit pero, al no tener WiFi, no lo podíamos emplear para la transferencia de datos con la base de datos. Cuando avanzó el proyecto y debido a una dificultad que se explicará en el apartado de Impedimentos dentro de implementación , se estableció como dispositivo maestro (Master). Las características técnicas son las mismas que las de la placa Arduino Uno WiFi a excepción del módulo ESP8266, que es el que le otorga conectividad WiFi al modelo explicado en el punto anterior. Se expone una fotografía del mismo a continuación. Figura 2: Arduino Uno Sus características técnicas son: •Pins de E/S (Entrada/ Salida) digitales: 14 19 •Salidas PWM (Modulación de Ancho de Pulsos): 6 •Consumo de energía: – •Microcontrolador: ATmega328P •Voltaje al que funciona: 5 V •Memoria flash: 32 KB •SRAM: 2 KB •Velocidad del reloj: 16 MHz •Pins de entrada analógicos: 6 •EEPROM: 1 KB •Corriente continua por cada pin E/S : – 4.3 Arduino Uno Wifi Rev2 Durante el transcurso del proyecto se pensó en comprar este Arduino para disminuir los tiempos de acceso a la base de datos, pero su compra se vió precipitada por una avería del dispositivo del primer punto, como ya se ha mencionado. En el proyecto tiene el rol de Slave y se monta la pantalla encima sobre los pines. Figura 3 Figura 3: Arduino Uno Wifi Rev2 20 Sus características técnicas son: •Pins de E/S (Entrada/ Salida) digitales: 14 •Salidas PWM (Modulación de Ancho de Pulsos): 5 •Consumo de energía: – •Microcontrolador: ATmega4809 •Voltaje al que funciona: 5 V •Memoria flash: 48 KB •SRAM: 6,144 B •Velocidad del reloj: 16 MHz •Pins de entrada analógicos: 6 •EEPROM: 256 B •Corriente continua por cada pin E/S : 20 mA •WiFi: 802.11 b/g/n 2.4 GHz 4.3.1 Comparación de Arduino Uno WiFi y Arduino Uno WiFi Rev2 A continuación explicaremos el por qué de la elección de este modelo en concreto: •Memoria flash. La diferencia entre la placa de Arduino Uno WiFi y esta es que la primera tiene 32 KB de memoria flash y esta tiene 48 KB. La memoria flash es dónde se almacena el código del programa o sketch [6] Al ser mayor, esta nos permitía escribir más funcionalidades, con sus consecuentes líneas de código, además de poner nombres de variables más significativos. •SRAM. En este apartado, la diferencia entre el modelo de la placa del Arduino estropeado y el modelo que lo reemplazó en nuestro proyecto es de 2 KB frente a 8KB.La SRAM es la memoria RAM estática, este tipo de memoria es volátil (es decir, que cuando se apaga el Arduino, los datos que hubiera almacenados en esta memoria, se pierden).[6] •EEPROM. En este punto sí hay una pérdida a favor del dispositivo anterior. Estamos hablando de 1 KB que tiene el Arduino Uno WiFi y 256 B que tiene el Arduino Uno WiFi Rev 2. En este proyecto, la pérdida en este tipo de memoria no es significativa, ya que 21 no almacenamos ningún dato en el "disco duro"del Arduino.[6] Los modelos de huellas están almacenados en el propio lector de huellas y los demás datos se encuentran alojados en la base de datos. •Retirado. En último lugar, la decisión de cambiar de modelo fue debido a que en la página de Arduino [7] el modelo del Arduino Uno WiFi aparecía como retirado. Por ello consideramos que podía estar obsoleto. 4.4 Arduinos auxiliares En esta sección hablaremos sobre los dos modelos que empleamos auxiliarmente para la realización del proyecto en momentos puntuales. 4.4.1 Arduino Mega ADK Figura 4: Arduino Mega ADK Sus características técnicas son: •Pins de E/S (Entrada/ Salida) digitales: 54 22 •Salidas PWM (Modulación de Ancho de Pulsos): 15 •Consumo de energía: – •Microcontrolador: ATmega2560 •Voltaje al que funciona: 5 V •Memoria flash: 256 KB, de los cuales 8 KB dedicados al bootloader. [8] •SRAM: 8 KB •Velocidad del reloj: 16 MHz •Pins de entrada analógicos: 16 •EEPROM: 4 KB •Corriente continua por cada pin E/S : 40 mA 4.4.2 Arduino Duemilanove Figura 5: Arduino Duemilanove Debido a su escasa SRAM, al cargar ejemplos del lector de huellas en el Arduino IDE nos salía el aviso de : "Poca memoria disponible, pueden aparecer problemas de estabilidad". 23 Este tipo de memoria es el que tiene que almacenar las variables globales. La memoria flash es la que se encarga de almacenar el sketch (programa) y con los mismos ejemplos rondaba una ocupación de entre el 60% y el 80 % de la memoria del Arduino. Por ese motivo, en cuanto nuestro skech empezó a tener una longitud mayor para contener todo el código específico de la pantalla, el lector y la comunicación I2C, la memoria de este Arduino se quedó insuficiente y no podía cargar el programa. Sus características técnicas son: •Pins de E/S (Entrada/ Salida) digitales: 14 •Salidas PWM (Modulación de Ancho de Pulsos): 6 •Consumo de energía: – •Microcontrolador: ATmega168 •Voltaje al que funciona: 5 V •Memoria flash: 16 KB, de los cuales 2 KB dedicados al bootloader. [8] •SRAM: 1 KB •Velocidad del reloj: 16 MHz •Pins de entrada analógicos: 6 •EEPROM: 512 B •Corriente continua por cada pin E/S : 40 mA 4.5 Lector de huellas 1 El primer lector de huellas, es uno que iba en una estructura preparada por los directores junto con el Arduino Uno Wifi. Consiste en un lector de huellas con capacidad mayor que el Lector de huellas Adafruit y que tiene un sistema de lector de tarjetas RFID incorporado. Tuvimos problemas con las librerías de los drivers y la transferencia de datos al Arduino, por tanto, aunque la capacidad de huellas era mayor en este dispositivo, nos acabamos decantando por el segundo lector de huellas. 4.6 Lector de huellas Adafruit El segundo lector de huellas que usamos, es de la marca Adafruit (hardware libre). Este dispositivo tiene una disponibilidad de guardar hasta 127 huellas diferentes, por tanto, una capacidad menor que el anterior. Es un periférico que ofrece librerías para su uso con Arduino y por tanto la transferencia de datos entre el Arduino y el reconocedor de huellas estaba contenida en funciones. 24 6 Implementación En este apartado se exponen los diferentes programas, librerías y tecnologías usados para llevar a cabo el proyecto. Además se expone una guía para el montaje y el cableado y un manual de uso para el software. 6.1 Programas y lenguajes 6.1.1 Arduino IDE El entorno open-source de Arduino, permite escribir código y subirlo a cualquier placa Arduino. No solo permite programarlo, sino que con el bootloader inteligente, se puede dejar corriendo el programa que le has cargado sin conectarlo al ordenador. Con una batería externa es suficiente. La versión usada es la 1.8.8. 6.1.2 Processing Processing es un entorno que hemos utilizado para crear un script que corre en el ordenador para recoger la salida del puerto serie del Arduino. Era necesario para crear nuestra copia de seguridad, ya que el IDE de Arduino solo permite guardar datos de su puerto serie si tiene un módulo de tarjeta SD. El programa se puede descargar en la página https://processing.org/download/. 6.1.3 PHP PHP (acrónimo recursivo de PHP: Hypertext Preprocessor) es un lenguaje de código abierto muy popular especialmente adecuado para el desarrollo web y que puede ser incrustado en HTML [12]. Lo usamos como intermediario entre el Arduino y la base de datos para hacer las consultas SQL que permiten identificar a los alumnos. También se usará en el formulario web para dar de alta a los alumnos en la base de datos. Versión de PHP: 7.3.2 6.1.4 HTML HTML, siglas en inglés de HyperText Markup Language(Lenguaje de Marcas de Hipertexto).es un lenguaje de marcado que se utiliza para el desarrollo de páginas web. Nosotros usamos la última versión, HTML5, para realizar un formulario donde rellenar los datos del alumno, y que mediante PHP se conecte con la base de datos. 6.2 Librerías Estas librerías han sido utilizadas en este proyecto. A continuación se procederá al desglose de las mismas, su función dentro de este trabajo y su origen. 31 6.2.1 Wire Esta librería sirve para usar la conectividad I2C entre los dos Arduinos. Se establecen dos roles: Master y Slave, o Maestro y Esclavo en español. Estos roles sirven para tomar el control del bus por el cual se mandan los datos. En la sección Cableado ya se hablará de cómo se conectan el cable de datos y el cable que lleva la señal de reloj. El cable que conecta los pines SDA transporta los datos y el cable que conectar los pines SCL de cada uno manda la señal de reloj para sincronizar la señal. En nuestro proyecto utilizamos la librería Wire para poder mandar el identificador de la huella del Arduino Uno (Master) al Arduino UNO WiFi Rev2 (Slave). Al principio del sketch, empezamos con la función Wire.begin() que une el bus entre el Master y el Slave. Luego funciona por eventos con las funciones Wire.onReceive() y para escribir en el bus, se realiza con Wire.write() y para leer del mismo lo hacemos con Wire.read(). En el bus tiene preferencia el Master y el Slave pregunta por la disponibilidad del mismo. Este modelo se puede replicar teniendo más Arduinos conectados al bus pero, siempre tiene que haber un Master, los demás tienen que ser Slaves. En caso de que haya más de dos Arduinos conectados, se tiene que nombrarlos al iniciar con el Wire.begin(). 6.2.2 Adafruit Fingerprint Sensor Library Esta librería es la oficial de Adafruit y se encarga de todo lo relacionado con el sensor de huellas. Es el driver del lector de huellas. En nuestro proyecto la usamos para registrar las huellas, para reconocer huellas, para hacer una copia de seguridad de todas las huellas, y para eliminar huellas. Indagando en el código de la librería vemos que guarda los modelos de las huellas como tipo uint-8. El lector de huellas realiza una cuadricula (se puede ver exactamente en el pdf que colgamos en el GitHub como parte de la documentación) para mapear las huellas y con ello crea un modelo que es un conjunto de caracteres alfanumérico con que identifica únicamente a cada huella. Cuando introduces un dedo en el sensor, realiza la misma operación pero esta vez compara con los modelos que tiene almacenados en ese momento. Si hay un código que corresponde al código que acaba de calcular te reconocerá la huella y te dará la posición en su memoria interna en la que está almacenado (dispone de un array de modelos del 1 al 128). En caso contrario, te dirá que no está registrado. Estas funciones nosotros las procesamos en el Arduino UNO y las mandamos a través del bus mencionado en el punto anterior hasta el otro Arduino (UNO Wifi Rev2). 6.2.3 TFT TouchShield V2, Touch Screen Driver Estas librerías se usan para la pantalla TFT que va montada sobre el Arduino UNO WiFi Rev2. Nosotros la utilizamos para mostrar texto en la pantalla. Se inicializa con TFT.TFTinit() en el código y a partir de ahí se puede empezar a usar. La función drawString() que utilizamos abundantemente tiene 5 argumentos: el primero es para meter la cadena de caracteres que quieres mostrar por pantalla, el segundo es la coordenada X dentro de la pantalla en la que quieres escribir, el tercero la coordenada Y, el cuarto es el 32 tamaño y por último le introduces en inglés el color en que va a escribir. Esta librería tiene un problema con los caracteres que no tengan una codificación ASCII como se explica en el punto 6.6.4 Tildes y caracteres especiales de esta memoria. 6.2.4 WiFiNINA Librería para conectar con el WiFi, ésta es nueva para el Arduino UNO WiFi Rev2. Soporta conexiones con seguridad WEP y WPA2. Anteriormente, cuando aún usábamos el Arduino UNO WiFi, la librería usada era WiFiLink. Esta librería permite trabajar con errores derivados de una mala conexión a la red WiFi y en su función de inicialización se introduce el SSID de la conexión WiFi (el nombre de la misma) y la contraseña de acceso. 6.2.5 WifiClient La librería para el cliente de WiFi. Con esta librería nos comunicamos con la base de datos mediante un script PHP. Usamos la función httpRequest() para comunicarnos con la base de datos y le mandamos un identificador de la huella que hemos reconocido. Esto procederá a hacer una consulta en la base de datos y nos devolverá los datos de la persona registrada con esa huella. 6.3 Montaje Con el fin de que los dos Arduinos y el lector de huellas estuviesen sujetos y los cables no se quitasen de los pines, ya que tuvimos que volver a soldarlos en numerosas ocasiones, decidimos anclar los Arduinos y el lector de huellas a una tabla de madera de 31x20.5 cm. Los Arduinos van sujetos con cuatro tornillos cada uno en cada esquina, junto a cuatro elevadores que los separan medio centímetro de la tabla para que no se sobrecalienten. El lector de huellas se sujeta con una brida. El montaje una vez finalizado puede verse en la Figura 11. 6.4 Cableado Para que el sistema realice correctamente todas las funciones es fundamental que los cables que conectan el lector de huellas con el Arduino y los dos Arduinos entre sí se encuentren bien conectados. El cable verde del lector de huellas se conecta al pin 2 del Arduino UNO, y el cable blanco al pin 3. Para que le llegue energía al lector de huellas hay que conectar el cable rojo al pin 5V y el cable negro a GND. La pantalla TFT se inserta directamente sobre el Arduino UNO WiFi Rev 2. Para poder transmitir el numero de identificación del alumno desde el Arduino UNO al Arduino UNO WiFi Rev 2 es necesario conectar los pines SCL y SDA del Arduino UNO con los pines SCL y SDA del Arduino UNO WiFi Rev 2 respectivamente. La Figura 11 presenta el sistema con todo el cableado. 33 Figura 11: Montaje y cableado 6.5 Manual de uso Lo primero que hay que hacer para poder hacer uso del sistema desarrollado es descargar los programas necesarios. El principal es el Arduino IDE, que se puede descargar de su página web [13]. Está disponible para Windows, Linux y Mac OS X Este programa sirve para cargar y editar el código en formato “ino”. También habrá que descargar e instalar la distribución XAMPP [14]. XAMPP es una distribución de Apache completamente gratuita y fácil de instalar que contiene MariaDB, PHP y Perl. De este paquete de software libre utilizamos el gestor de bases de datos MySQL, el servidor web Apache y el intérprete para PHP. Otro programa requerido es el Processing. En este caso solo se utilizará para llevar a cabo la copia de seguridad de las huellas. También será necesario el uso de un navegador de Internet para usar el formulario web para dar de alta a los alumnos en la base de datos. El siguiente paso será descargar el repositorio de Github “TFG2019_HUELLAS” [15], el cual contiene todos los archivos requeridos para que el sistema funcione, a parte de toda la documentación necesaria. Una vez descargada la carpeta “TFG2019_HUELLAS” e instalados todos los programas, se debe añadir al Arduino IDE todas las librerías que necesitamos. Se tienen que descargar las siguientes librerías: WiFiNINA [16], TFT Touch Shield V2 [17], Touch Screen Driver [18] y Adafruit Fingerprint Sensor Library [19]. Cada una de ellas se explican en el apartado 6.2 Librerías. 34 Para incluirlas en el entorno, abrimos el Arduino IDE y en la barra de menú hacemos click en Programa - Incluir librería - Añadir librería .ZIP (Figura 12). Figura 12: Incluir librerías Se abrirá una ventana donde hay que seleccionar las librerías y pulsar en Abrir. A continuación vamos a importar la base de datos con la información de los alumnos. Para ello, abrimos el programa XAMPP Control Panel e iniciamos los módulos Apache y MySQL (Figura 13). Figura 13: Iniciar Apache y MySQL 35 Una vez iniciados estos dos módulos, ya se puede abrir el navegador e introducir la dirección http://localhost/phpmyadmin. En la barra superior, hacemos click en Importar. En la pantalla que se abre hay que pulsar en Seleccionar archivo y abrir el archivo “alergias.sql”, que se encuentra en TFG2019_HUELLAS/Proyecto_Julia_Adrian/src/. Para terminar de importar la base de datos solo queda darle a Continuar en la parte inferior de la página (Figura 14). Figura 14: Importar alergias.sql Una vez importada la base de datos, únicamente queda copiar la carpeta “comedor” disponible en TFG2019_HUELLAS/Proyecto_Julia_Adrian/src/ a la carpeta “htdocs” de XAMPP, que se encontrará en la ruta del PC donde se haya instalado el XAMPP. Esta carpeta contiene los archivos html y php necesarios para poder llevar a cabo el registro de los alumnos en la base de datos mediante un formulario HTML y para consultar la base de datos con el fin de identificar a los alumnos. En los archivos select.php y registro.php se deben actualizar las variables server, dbusername y dbpassword, con el nombre del servidor, el nombre de usuario y la contraseña respectivamente. Tras realizar estos primeros pasos ya se puede hacer uso de las distintas funcionalidades que ofrece el sistema, cuyo funcionamiento se detalla a continuación. 36 6.5.1 Registro de huellas Los archivos que llevan a cabo el registro de huellas son Enroll_UNO.ino y Enroll_UNO_Wifi.ino, que se localizan en la carpeta /src. Tras abrir estos dos archivos, conectamos los dos Arduinos a los puetos USB del ordenador. Ahora hay que decirle al Arduino IDE en qué placa y en que puerto funcionan cada uno. El Enroll_UNO.ino funciona en el Arduino UNO. Es el encargado de registrar las huellas y mandar la información al Arduino UNO WiFi Rev2. Con el Enroll_UNO abierto hacemos click en Herramientas - Placa: y selecionamos Arduino/Genuino UNO. Para seleccionar el puerto, pulsamos en Herramientas - Puerto y elegimos el puerto que tenga escrito al lado Arduino UNO, como se muestra en la Figura 15. Se debe hacer lo mismo en el Enroll_UNO_Wifi, pero en este caso seleccionamos placa Arduino UNO WiFi Rev2 y el puerto en el que ponga al lado Arduino UNO WiFi Rev2. Este Arduino se encarga de mostrar la información por la pantalla. Es importante tener en cuenta estas dos configuraciones cada vez que se use el programa ya que sino el código no se sube correctamente a los Arduinos y obviamente no funciona. Figura 15: Configuración de puertos Una vez configurado todo correctamente, solo queda pulsar en el segundo icono empezando por la izquierda (Subir). Hacemos esto para ambos códigos. Tras unos segundos, primero se compila el código y luego se sube a los Arduinos, el lector de huellas empezará a parpadear y el usuario debe seguir las instrucciones de la pantalla. Al final del proceso se le asigna un ID al alumno, que es el que se le debe poner al darle de alta en la base de datos. Este ID será el siguiente disponible que no esté siendo utilizado por el lector. 37 El procedimiento para registrar una huella dactilar se detalla más profundamente en la sección 7. Ejemplo de uso. 6.5.2 Identificación de alumnos Para identificar a los estudiantes y mostrar la información por la pantalla se deben cargar los archivos “ID_UNO.ino” e “ID_UNO_WiFi.ino”. Ambos se encuentran en la carpeta /src. Lo primero, tras conectar los Arduinos al PC si no se ha hecho ya, es seleccionar la placa y el puerto para cada archivo. “ID_UNO” se conecta al Arduino UNO y “ID_UNO_WiFi” al Arduino UNO WiFi Rev2. El código de “ID_UNO” se encarga de leer la huella del usuario, mientras que el código de “ID_UNO_WiFi” realiza la conexión con la base de datos y presenta los datos en la pantalla. Precisamente, con el fin de conectarse a la base de datos mediante WiFi, se debe modificar la variable SSID, referida al SSID de la conexión WiFi (el nombre de la misma); la variable pass, referida a la contraseña del router; y la variable server, siendo ésta la dirección IP del ordenador. Podemos encontrar nuestra dirección IP escribiendo el comando ipconfig en la consola de comandos y buscando el valor de la dirección IPv4, como se muestra en Figura 16. Figura 16: Buscar dirección ipv4 Después de escribir el nombre del punto de acceso, la contraseña y la dirección IP, es preciso asegurarse de que los módulos Apache y MySQL del Panel de Control de XAMPP están iniciados, ya que sino lo están no se realizará la conexión con la base de datos. Una vez hecho esto, ya se pueden subir los códigos a los Arduinos. Después de unos segundos en los cuales se compila y se sube el código ya se podrá llevar a cabo la identificación de los alumnos. Esta funcionalidad se explica más detalladamente en la sección 7. Ejemplo de uso. 6.5.3 Borrado de huellas Las huellas de los alumnos se pueden eliminar de dos maneras, o bien borrando de una en una o bien eliminando todas a la vez. En ambos casos solo se necesitará conectar al puerto USB del ordenador el Arduino UNO. Si se quiere borrar únicamente una huella, se debe abrir el archivo ”deleteFingerprint.ino“, dentro de la carpeta /src. Después de seleccionar la placa y el puerto correcto (aquel dónde ponga Arduino UNO) y de subir el código al Arduino hay que abrir el Monitor 38 Serie haciendo click en Herramientas - Monitor Serie. A continuación se han de seguir las instrucciones que aparecen el Monitor Serie, las cuales consisten en introducir el ID del alumno cuya huella se quiere eliminar y pulsar ENTER. Nos pedirá que si estamos seguros pulsemos la tecla ’Y’. Tras ello, la huella se habrá eliminado. Figura 17: Borrar una huella En caso de que se requiera la eliminación de todas las huellas reconocidas hay que cargar el archivo “emptyDatabase.ino”, que como todo el código se puede encontrar en la carpeta /src del proyecto. También se tiene que seleccionar la placa Arduino UNO y el puerto que corresponda a esta placa. Tras subir el código al Arduino se debe abrir el Monitor Serie y seguir las instrucciones, que en este caso son tan simples como escribir la letra ’Y’ y pulsar ENTER. Una vez hecho esto se habrán borrado todas las huellas de los alumnos. 39 Figura 18: Borrar todas las huellas 6.5.4 Copia de seguridad Para hacer un backup de las huellas guardadas en el lector hacen falta los archivos “backup.ino” y “backupProcessing.pde”, disponibles la carpeta /src del proyecto. Además hará falta el programa Processing (Figura 19), el cual podemos descargar la versión para nuestro sistema operativo de su página web [20]. Cuando tengamos la carpeta descargada, la descomprimimos y ejecutamos la aplicación. En el Arduino IDE con backup.ino abierto seleccionamos la placa Arduino UNO y el puerto que corresponda al Arduino UNO. Después subimos el código. En el entorno de Processing ejecutamos el script backup.pde. Y en unos segundos se creará un archivo de texto con los códigos alfanuméricos que corresponden a cada huella. El código de Processing utilizado para hacer una copia de seguridad pertenece a Mohan Chandra Pradhan y se ha extraído de la página web [21]. Nosotros simplemente hemos cambiado el nombre del archivo de texto. 40 Figura 22: Retira el dedo Figura 23: Vuelve a colocar el dedo 47 Figura 24: Huella guardada Figura 25: Las huellas no coinciden 7.2 Identificación del alumno Un alumno llega al comedor escolar. En la pantalla del Arduino se le indica que introduzca su huella dactilar (Figura 26). El estudiante coloca su dedo en el lector de huellas. Si se 48 reconoce su huella y está dado de alta en la base de datos, se muestra en la pantalla su nombre, apellidos y si ha realizado el pago o no (Figura 27). Después se muestran en la pantalla las alergias que tiene (Figura 28). En caso de que el alumno no tenga ninguna alergia se muestra en la pantalla la palabra “NINGUNA”. A continuación, si el menú del día contiene algún alérgeno que el alumno no pueda consumir, se muestra en la pantalla el mensaje “Menú especial sin:” y debajo estos alérgenos (Figura 29). Si el alumno no tiene ninguna alergia o en el menú del día no hay ningún alérgeno al que el estudiante sea alérgico se verá en la pantalla el mensaje “MENU NORMAL” en verde (Figura 30). En caso de que la huella del alumno no haya sido registrada, se muestra en la pantalla “Alumno no registrado” (Figura 31) y se vuelve al mensaje “Introduce huella” para que otro alumno se identifique. Si el alumno sí que se ha registrado con anterioridad, pero aún no se le ha dado de alta en la base de datos, se le indica en la pantalla con el mensaje “Alumno no dado de alta en la BD” (Figura 32). Y en caso de que el alumno no haya realizado el pago del comedor no se muestran sus alergias ni se le dice si puede comer el menú normal o si tiene que comer el menú especial. El sistema queda en espera de reconocer la huella de otro alumno. Figura 26: Introduzca huella 49 Figura 27: Datos del alumno Figura 28: Alergias del alumno 50 Figura 29: Menú especial sin pescado y lácteos Figura 30: Menú normal 51 Figura 31: Alumno no registrado Figura 32: Alumno no dado de alta en la BD 52 8 Resultados 8.1 Tiempos de acceso a la red y a la base de datos El Arduino UNO WiFi Rev2 se conecta a la red WiFi en unos 2 segundos. El Arduino UNO WiFi que se usó al principio tardaba algo más, pero se averió antes de poder hacer mediciones. El intervalo de tiempo desde que se hace la petición a la base de datos hasta que se muestran los datos en el Monitor Serie y en la pantalla ha mejorado enormemente cuando se ha usado el Arduino UNO WiFi Rev2 con respecto a las pruebas con el Arduino UNO WiFi, ya que en el primero se produce casi de forma inmediata y en el segundo caso la espera era notable. 8.2 Memoria de los Arduinos En este apartado se especifica el espacio de almacenamiento que usa cada código y cuanto ocupan las variables globales. Enroll_UNO El Sketch usa 7390 bytes (22 %) del espacio de almacenamiento de programa. El máximo es 32256 bytes. Las variables Globales usan 962 bytes (46 %) de la memoria dinámica, dejando 1086 bytes para las variables locales. El máximo es 2048 bytes. Enroll_UNO_WIFI El Sketch usa 8796 bytes (17 %) del espacio de almacenamiento de programa. El máximo es 49152 bytes. Las variables Globales usan 544 bytes (8 %) de la memoria dinámica, dejando 5600 bytes para las variables locales. El máximo es 6144 bytes. ID_UNO El Sketch usa 6610 bytes (20 %) del espacio de almacenamiento de programa. El máximo es 32256 bytes. Las variables Globales usan 711 bytes (34 %) de la memoria dinámica, dejando 1337 bytes para las variables locales. El máximo es 2048 bytes. ID_UNO_WiFi El Sketch usa 19906 bytes (40 %) del espacio de almacenamiento de programa. El máximo es 49152 bytes. Las variables Globales usan 860 bytes (13 %) de la memoria dinámica, dejando 5284 bytes para las variables locales. El máximo es 6144 bytes. DeleteFingerprint El Sketch usa 5344 bytes (16 %) del espacio de almacenamiento de programa. El máximo es 32256 bytes. Las variables Globales usan 601 bytes (29 %) de la memoria dinámica, dejando 1447 bytes para las variables locales. El máximo es 2048 bytes. 53 EmptyDatabase El Sketch usa 4526 bytes (14 %) del espacio de almacenamiento de programa. El máximo es 32256 bytes. Las variables Globales usan 495 bytes (24 %) de la memoria dinámica, dejando 1553 bytes para las variables locales. El máximo es 2048 bytes. Backup El Sketch usa 6370 bytes (19 %) del espacio de almacenamiento de programa. El máximo es 32256 bytes. Las variables Globales usan 351 bytes (17 %) de la memoria dinámica, dejando 1697 bytes para las variables locales. El máximo es 2048 bytes. 9 Conclusión A raíz de los resultados obtenidos en el apartado anterior, creemos que el cambio del Arduino UNO WiFi al Arduino UNO WiFi Rev2 nos ha beneficiado, ya que éste último se conecta mucho más rápido a la red y a la base de datos aunque tuviéramos que solventar lo del driver del lector de huellas. Por otra parte, la elección de separar el código en dos Arduinos, debido a la imposibilidad de usar el lector de huellas con el Arduino UNO WiFi Rev2, ha sido una buena idea. Se reparte la carga de trabajo y el sistema es más robusto, aparte de que es más fácil detectar errores. Ningún código llega a ocupar el 50 % del almacenamiento disponible. El único que se acerca es ID_UNO_WiFi.ino con un 40 %. En cuanto al proyecto en general, se han cumplido los objetivos declarados al principio. Los responsables del comedor pueden saber de una manera rápida y sin errores que alimentos pueden comer los alumnos, y los alumnos no se tienen que preocupar de nada. Además los administradores pueden dar de alta a los alumnos sin apenas esfuerzo. Ya que les brindamos las herramientas y el tutorial para que no tengan ni que saber programar. En lo personal, gracias a este Trabajo de Fin de Grado hemos aprendido mucho. Hemos aprendido a programar para Arduino y qué tipos de Arduinos existen. También hemos ampliado nuestros conocimientos en HTML y PHP. y además hemos visto aplicados los conocimientos de bastantes asignaturas de la carrera, por citar algunas: Bases de Datos, Robótica, Fundamentos de Programación, Aplicaciones Web, ... También hemos visto un interés de las empresas en las entrevistas de trabajo sobre nuestro proyecto. Pero sobre todo nos sentimos muy orgullosos de haber hecho una aplicación que puede usarse para mejorar la vida de las personas con lo de las alergias alimentarias. Es un tema que nos pilla muy de cerca, ya que tenemos familiares y amigos con alergias alimentarias severas. 54 10 Conclusion As a result of the outcomes obtained in the previous section, we believe that the change from the Arduino UNO WiFi to the Arduino UNO WiFi Rev2 has been to our advantage, since the latter connects much faster to the network and database even if we had to fix the driver of the fingerprint reader. On the other hand, the choice of separating the code into two Arduinos, due to the impossibility of using the fingerprint reader with the Arduino UNO WiFi Rev2, has been a good idea. The workload is distributed and the system is more robust, and it is easier to detect errors. No code takes up to 50 % of the available storage. The only one that comes close is ID_UNO_WiFi.ino with 40 %. Regarding the project generally, the objectives stated at the outset have been met. The people in charge of the canteen can know quickly and unmistakenly what food the pupils can eat, and the pupils do not have to worry about anything. In addition, the administrators can register the students with hardly any effort. We provide them with the tools and the tutorial so that they don’t even have to know how to program. On a personal note, thanks to this Degree Final Project we have learned a lot. We have learned how to program for Arduino and what types of Arduinos exist. We have also expanded our knowledge in HTML and PHP. We have also applied the knowledge acquired in quite a few subjects of our degree, to name a few: Databases, Robotics, Programming Fundamentals, Web Applications, ... We have also perceived an interest from companies in job interviews about our project. But above all we are very proud to have made an application that can be used to improve the lives of people with food allergies. It’s a topic that affects us personally, as some of our family and friends suffer from severe food allergies. 55 Referencias [1] https://spectrum.ieee.org/geek-life/hands-on/the-making-of-arduino [2] https://forum.arduino.cc/ [3] https://eprints.ucm.es/34796/ [4] https://eprints.ucm.es/45230/ [5] https://www.arduino.cc/en/Tutorial/PWM [6] https://www.arduino.cc/en/tutorial/memory [7] https://store.arduino.cc/arduino-uno-wifi [8] https://www.arduino.cc/en/Hacking/Bootloader?from=Tutorial.Bootloader [9] https://www.sparkfun.com/products/512 [10] https://searchoracle.techtarget.com/definition/MySQL [11] https://www.phpmyadmin.net/ [12] http://php.net/manual/es/intro-whatis.php [13] https://www.arduino.cc/en/Main/Software [14] https://www.apachefriends.org/es/index.html [15] https://github.com/ABSysGroup/TFG2019_HUELLAS [16] https://github.com/arduino-libraries/WiFiNINA [17] https://github.com/Seeed-Studio/TFT_Touch_Shield_V2 [18] https://github.com/Seeed-Studio/Touch_Screen_Driver [19] https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library [20] https://processing.org/download/ [21] https://www.researchgate.net/post/How_can_I_save_data_directly_in_the_ pc_using_an_Arduino_UNO 56