- Componentes requeridos
- Diagrama de circuito y explicación
- Operación del sensor de huellas dactilares con microcontrolador PIC
- Explicación de programación
El sensor de huellas dactilares, que solíamos ver en las películas de ciencia ficción hace unos años, ahora se ha vuelto muy común para verificar la identidad de una persona para diversos fines. En la actualidad, podemos ver sistemas basados en huellas dactilares en todas partes de nuestra vida diaria, como asistencia en oficinas, verificación de empleados en bancos, retiro de efectivo o depósitos en cajeros automáticos, verificación de identidad en oficinas gubernamentales, etc. Ya lo hemos interconectado con Arduino y con Raspberry Pi, hoy vamos a conectar el sensor de huellas dactilares con el microcontrolador PIC. Usando este microcontrolador PIC PIC16f877A Finger Print System, podemos registrar nuevas huellas digitales en el sistema y podemos eliminar las huellas digitales ya alimentadas. El funcionamiento completo del sistema se ha mostrado en el video. dado al final del artículo.
Componentes requeridos
- Microcontrolador PIC16f877A
- Módulo de huellas dactilares
- Pulsadores o teclado
- LCD de 16x2
- Bote de 10k
- Oscilador de cristal de 18.432000 MHz
- Placa de pan o PCB (pedido a JLCPCB)
- Cables de puente
- LED (opcional)
- Resistencia 150 ohmios -1 k ohmios (opcional)
- Fuente de alimentación 5v
Diagrama de circuito y explicación
En este proyecto de interfaz del sensor de huellas dactilares del microcontrolador PIC, hemos utilizado 4 botones pulsadores: estos botones se utilizan para multifunción. La clave 1 se utiliza para hacer coincidir la huella digital e incrementar la identificación de la huella digital mientras se almacena o elimina la huella digital en el sistema. La clave 2 se usa para registrar la nueva huella digital y para disminuir la identificación de la huella digital mientras se almacena o elimina la huella digital en el sistema. La tecla 3 se usa para eliminar el dedo almacenado del sistema y la tecla 4 se usa para OK. Un LED se utiliza para indicar que la huella dactilar se detecta o coincide. Aquí hemos utilizado un módulo de huellas dactilares que funciona en UART. Así que aquí hemos interconectado este módulo de huellas dactilares con el microcontrolador PIC a su velocidad en baudios predeterminada, que es 57600.
Entonces, en primer lugar, debemos realizar todas las conexiones necesarias como se muestra en el diagrama de circuito a continuación. Las conexiones son simples, acabamos de conectar el módulo de huellas dactilares al UART del microcontrolador PIC. Se utiliza una pantalla LCD de 16x2 para mostrar todos los mensajes. También se utiliza un potenciómetro de 10k con LCD para controlar el contraste del mismo. Los pines de datos LCD de 16x2 son pines PORTA conectados. Los pines d4, d5, d6 y d7 de la pantalla LCD están conectados con los pines RA0, RA1, RA2 y RA3 del microcontrolador PIC respectivamente. Cuatro botones pulsadores (o teclado) están conectados a los pines RD0, RD1, RD2 y RD de PORTD. El LED también está conectado en el pin RC3 del puerto PORTC. Aquí hemos utilizado un oscilador de cristal externo de 18.432000 MHz para sincronizar el microcontrolador.
Operación del sensor de huellas dactilares con microcontrolador PIC
El funcionamiento de este proyecto es simple, simplemente cargue el archivo hexadecimal, generado a partir del código fuente, en el microcontrolador PIC con la ayuda del programador o quemador PIC (PIckit2 o Pickit3 u otros) y luego verá algunos mensajes de introducción en la pantalla LCD y luego el usuario se le pedirá que ingrese una opción para las operaciones. Para hacer coincidir la huella digital, el usuario debe presionar la tecla 1 y luego la pantalla LCD le pedirá que coloque el dedo en el sensor de huellas digitales. Ahora, colocando un dedo sobre el módulo de huellas dactilares, podemos comprobar si nuestras huellas dactilares ya están almacenadas o no. Si su huella digital está almacenada, la pantalla LCD mostrará el mensaje con el ID de almacenamiento de ' ID: 2' similar a una huella digital ; de lo contrario, mostrará 'No encontrado' .
Ahora, para registrar una huella digital, el usuario debe presionar el botón de registro o la tecla 2 y seguir los mensajes de instrucciones en la pantalla LCD.
Si el usuario desea eliminar alguna de las huellas digitales, debe presionar el botón Eliminar o la tecla 3. Después de lo cual, la pantalla LCD le pedirá la identificación de la huella digital que se va a eliminar. Ahora, al usar el botón pulsador de incremento o la tecla 1 (hacer coincidir el botón pulsador o la tecla 1) y disminuir el botón pulsador o la tecla 2 (registrar el botón pulsador o la tecla 2) para incrementar y disminuir, el usuario puede seleccionar la ID de la huella digital guardada y presionar OK para eliminar esa huella digital. Para mayor comprensión, eche un vistazo al video que se encuentra al final del proyecto.
Interfaz FingerPrint Nota: El programa de este proyecto es un poco complejo para un principiante. Pero su código de interfaz simple hecho mediante la lectura de la hoja de datos del módulo de huellas dactilares r305. Todas las instrucciones de funcionamiento de este módulo de huellas dactilares se dan en la hoja de datos.
Aquí hemos utilizado un formato de marco para hablar con el módulo de huellas dactilares. Siempre que enviamos un comando o una trama de solicitud de datos al módulo de huellas digitales, nos responde con el mismo formato de trama que contiene datos o información relacionada con el comando aplicado. Todos los datos y el formato del marco de comando se han proporcionado en el manual del usuario o en la hoja de datos del módulo de huellas dactilares R305.
Explicación de programación
En programación, hemos utilizado el siguiente formato de cuadro.
Comenzamos el programa configurando los bits de configuración y definiendo macros y pines para LCD, Botones y LED, que puede verificar en el código completo que se proporciona al final de este proyecto. Si es nuevo en el microcontrolador PIC, comience con el proyecto Introducción al microcontrolador PIC.
Luego declaramos e inicializamos algunas variables y matrices, e hicimos un marco que necesitamos usar en este proyecto para conectar el módulo de huellas dactilares con el microcontrolador PIC.
uchar buf; uchar buf1; índice uint volátil = 0; bandera int volátil = 0; uint msCount = 0; uint g_timerflag = 1; recuento de uint volátiles = 0; datos uchar; uint id = 1; enumeración { CMD, DATA, SBIT_CREN = 4, SBIT_TXEN, SBIT_SPEN, }; const char passPack = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x7, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1B}; const char f_detect = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x3, 0x1, 0x0, 0x5}; const char f_imz2ch1 = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x1, 0x0, 0x8}; const char f_imz2ch2 = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x2, 0x0, 0x9}; const char f_createModel = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x3,0x5,0x0,0x9}; char f_storeModel = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x6,0x6,0x1,0x0,0x1,0x0,0xE}; const char f_search = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x8, 0x1B, 0x1, 0x0, 0x0, 0x0, 0xA3, 0x0, 0xC8}; char f_delete = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x7,0xC, 0x0,0x0,0x0,0x1,0x0,0x15};
Después de eso, hemos hecho la función LCD para conducir LCD.
anular lcdwrite (uchar ch, uchar rw) { LCDPORT = ch >> 4 & 0x0F; RS = rw; EN = 1; __delay_ms (5); EN = 0; LCDPORT = ch & 0x0F; EN = 1; __delay_ms (5); EN = 0; } Lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ delay_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; para (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
La función dada se usa para inicializar UART
void serialbegin (uint baudrate) { SPBRG = (18432000UL / (long) (64UL * baudrate)) - 1; // velocidad en baudios @ 18.432000Mhz Reloj TXSTAbits.SYNC = 0; // Configuración del modo asíncrono, es decir, UART RCSTAbits.SPEN = 1; // Habilita el puerto serie TRISC7 = 1; // Según lo prescrito en la hoja de datos TRISC6 = 0; // Según lo prescrito en la hoja de datos RCSTAbits.CREN = 1; // Habilita la recepción continua TXSTAbits.TXEN = 1; // Habilita la transmisión GIE = 1; // ENABLE interrumpe INTCONbits.PEIE = 1; // ENable interrupciones periféricas. PIE1bits.RCIE = 1; // HABILITAR USART recibir interrupción PIE1bits.TXIE = 0; // deshabilita la interrupción USART TX PIR1bits.RCIF = 0; }
Las funciones dadas se utilizan para transferir comandos al módulo de huellas dactilares y recibir datos del módulo de huellas dactilares.
void serialwrite (char ch) { while (TXIF == 0); // Espere hasta que el registro del transmisor se vacíe TXIF = 0; // Borrar la bandera del transmisor TXREG = ch; // carga el carácter que se va a transmitir en el registro de transmisión } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } vacío interrumpir SerialRxPinInterrupt (vacío) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; if (índice> 0) bandera = 1; RCIF = 0; // borra el indicador rx } } void serialFlush () { for (int i = 0; i
Después, necesitamos hacer una función que prepare los datos que se van a transmitir a la huella dactilar y decodificar los datos provenientes del módulo de huellas dactilares.
int sendcmd2fp (char * paquete, int len) { uint res = ERROR; serialFlush (); índice = 0; __delay_ms (100); para (int i = 0; i
Ahora, hay cuatro funciones disponibles en el código para cuatro tareas diferentes:
- Función para ingresar el ID de la huella digital - unit getId ()
- Función para hacer coincidir el dedo - void matchFinger ()
- Función para registrar un nuevo dedo - void enrolFinger ()
- Función para borrar un dedo - void deleteFinger ()
El código completo con las cuatro funciones se proporciona al final.
Ahora en la función principal, inicializamos GPIOs, LCD, UART y comprobamos si el módulo de huellas dactilares está conectado con un microcontrolador o no. Luego muestra algunos mensajes de introducción en la pantalla LCD. Finalmente, en tiempo de bucle leemos todas las teclas o pulsadores para operar el proyecto.
int main () { vacío (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; serialbegin (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint ("Huella digital"); lcdwrite (192, CMD); lcdprint ("Interfaz"); __delay_ms (2000); lcdwrite (1, CMD); lcdprint ("Utilizando PIC16F877A"); lcdwrite (192, CMD); lcdprint ("Resumen de circuitos"); __delay_ms (2000); índice = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("FP no encontrado"); __delay_ms (2000); índice = 0; } lcdwrite (1, CMD); lcdprint ("FP encontrado"); __delay_ms (1000); lcdinst (); while (1) { FP = coincidir
A continuación se muestra el código PIC completo y un video funcional. Consulte también nuestros otros proyectos utilizando el módulo de sensor de huellas dactilares:
- Máquina de votación biométrica basada en huellas dactilares que utiliza Arduino
- Sistema de seguridad biométrico usando Arduino y sensor de huellas dactilares
- Sistema de asistencia biométrico basado en huellas dactilares usando Arduino
- Interfaz del sensor de huellas dactilares con Raspberry Pi