Objetivos
Material requerido.
Arduino UNO | |
lector de huellas dactilares |
Lector de huellas y caso practico
Estamos tan acostumbrado a que el teléfono se abra simplemente plantando el dedo en el lector de huellas que no nos damos cuenta de la maravilla tecnológica que esto supone.
Cuando lo comentas, a todo el mundo le sorprende que los lectores de huellas dactilares funcionen y encima de forma poco menos que instantánea con una fiabilidad muy, pero que muy alta.
Por eso no es raro que nos hagáis consultas del tipo… ¿Podría usar ese reconocedor de huellas que tenéis en la tienda con mi Arduino para abrir XXXX?
La respuesta es invariablemente sí y de hecho tenemos un par de tutos en la web describiendo cómo usarlos pero parece que seguimos recibiendo consultas de si se podrían usar para abrir una puerta o un cajón con llave o en algún caso… para abrir el coche sin llave.
Parece que el personal menos experto se pierde mucho al revisar los ejemplos oficiales de Adafruit y como andaba haciendo una cosita de estas por aquí para un amigo se me ha ocurrido documentarlo por si os sirve a alguno más y para que podáis usarlo como base para vuestros propios proyectos.
En principio voy a usar el lector de huellas y un led más un módulo de 2 relés de modo que se pueda abrir algo activado por los relés (Puede ser la puerta del coche o un cerrojo eléctrico) y usaremos el de dos porque puede servir para que se abra una caja u otra, dependiendo de quién pone la huella.
Diagrama de conexión.
Vamos a empezar con un único led que se ilumine durante un breve intervalo, cuando el lector reconoce una huella digital. La conexión va a ser bastante sencilla:
La conexión es muy sencilla y el único cuidado es conectar bien los cables TX y RX del sensor de huella dactilar.
Tenéis que aseguraros de que habéis instalado la librería y los ejemplos del lector de huellas y para eso, recordad que ya tenemos una sesión que os describe como descargar e instalar la librería de Adafruit para el sensor de huellas dactilares.
Ahí verás que tienes que instalar la librería y luego correr un par de programas de los ejemplos que vienen. El primero Enroll, simplemente graba las huellas que queremos que acepte, y un segundo programa fingerprint, que es quien reconoce las huellas archivadas.
Para conseguir que el LED se ilumine al validar na huella necesitamos modificar un poco el programa original de ejemplo de la librería, y parece que es aquí donde tenéis las dificultades
Modificando el programa original de la librería.
Cargad el programa de ejemplo fingerprint de la librería de ejemplo del lector y vamos a modificarlo un poco.
El programa original es básicamente un control de errores que son el 90% del código y unos mensajes que envía a la consola cuando reconoce una huella.
Si buscas hacia final del programa, tras los controles de errores, y cuando valida la huella encontrarás unas líneas como estas
// found a match! Serial.print("Found ID #"); Serial.print(finger.fingerID); Serial.print(" with confidence of "); Serial.println(finger.confidence); return finger.fingerID;
Es aquí donde vamos a hacer un par de cambios. Crearemos un par de variables globales que vamos a llamar ID1 y C1 para almacenar el ID de la huella y la confianza que le merece el reconocimiento, y cambiaremos esas líneas de arriba por estas otras:
// found a match! ID1 = finger.fingerID; C1 = finger.confidence ; Serial.print("Found ID #"); Serial.print(ID1); Serial.print(" with confidence of "); Serial.println(C1); return ID1;
El problema para más de uno que nos habéis preguntado por este tema, es que hay dos ocurrencias de esas líneas y tenéis que hacer el cambio por dos veces o no va a funcionar ¿Vale?
Y no os olvidéis de añadir la declaración de las variables globales al principio del programa
int ID1 ; int C1 ;
Añadimos en el setup la declaración del pin 6 para el led:
pinMode(6, OUTPUT);
Y ya solo nos queda tocar en el loop() lo que queremos que haga nuestro programa cuando se reconozca la huella, pero antes un comentario importante:
El lector de huellas nos devuelve la huella que ha reconocido y un valor que indica el grado de confianza que le merece el reconocimiento. Tened en cuenta que el lector comprueba la huella leída contra las huellas almacenadas y en muchas ocasiones no encuentra la huella completa sino solo partes de ella que es lo que ha reconocido.
Por eso devuelve un valor entre 0 y 255 indicando que porcentaje de la huella ha reconocido. En nuestro programa vamos a fijar un mínimo de confianza del 100 para asegurarnos pero podéis modificar este valor a voluntad si encuentras difícil el reconocimiento
Así pues, tenemos:
void loop() { getFingerprintIDez(); delay(50); //don't ned to run this at full speed. if ( ID1 >= 0 && C1 >100) { digitalWrite(6, HIGH); // Enciende delay(1000) ; digitalWrite(6, LOW); // Apaga ID1 = -1; } }
Fíjate que lo único que hace el delay es el tiempo que queremos para activar la señal del LED antes de se apague.
Puedes descargar el programa completo aquí:
Usando un relé de salida.
Encender una luz de salida siempre es simpático, pero suele ser más útil marcar la validación además de con el led, con una relé que pueda activar cualquier dispositivo de salida, como un motorcito, o encienda una luz ambiente, o active una cerradura electrónica, e incluso podríamos activar un cerrojo eléctrico para abrir un contenedor.
Si buscáis por ahí, encontrareis modelos de diferentes tipos y precios
Para activar uno de estos cerrojos eléctricos, nos sirve el mismo programa pero tenemos que conectar el módulo de relé. Vamos a usar uno de dos relés para el ejemplo:
Vamos a conectar el pin 6 de Arduino que antes iba al LED al pin de activación del primer relé y de momento con eso ya se cerraría el contacto del relé durante el tiempo establecido, con el mismo programa de antes.
Podemos almacenar hasta 124 huellas en el sensor, así que podríamos autorizar la apertura de una puerta con cerrojo electrónico hasta ese número de personas. Esto serviría para un Txoco o Peña, que no suelen tener tantos socios.
Pero imagínate, que queremos usar el sensor de huellas para abrir las taquillas de un gimnasio o colegio. El sensor puede almacenar 124 huellas y podríamos usar un solo sensor para todos, lo que puede parecer un follón, pero no es para tanto.
Para el caso de tendríamos que usar un Arduino con más pines disponibles como el Arduino Mega, y suponte que conectamos el primer activador del relé en el pin 22 del Mega, correspondiente al ID #0. Podemos conectar el 23 a la señal de control del rele 1, y el 24 al control del rele 2 y así sucesivamente.
Pin Número |
||||||||
MEGA | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
Rele | 0 | 1 | 2 | 3 | 4 | 5 | 6 | … |
Para relacionar el pin que debemos activar con la el ID de huella reconocido, basta con calcular el pin a activar como el pin inicial (22) + el ID reconocido (de 0 a 124).
Podríamos cambiar el loop por algo así:
void loop() { int Pin0 = 22; // El pin donde empezamos a conectar contactos del rele if ( ID1 >= 0 && C1 >100) { digitalWrite(ID + Pin0 , HIGH); // Enciende delay(1000) ; digitalWrite(ID + Pin0, LOW); // Apaga ID1 = -1; } }
Este programa podría abrir por huella dactilar las taquillas un buen número de personas en el gimnasio de una forma elegante y barata. Con una Mega podemos gestionar unas 60 taquillas. No está nada mal,¿ No os parece?