- Необхідні компоненти
- Принципова схема та пояснення
- Робота датчика відбитків пальців з мікроконтролером PIC
- Пояснення програмування
Датчик відбитків пальців, який ми звикли бачити у науково-фантастичних фільмах кілька років тому, сьогодні став дуже поширеним явищем для перевірки особистості людини для різних цілей. В даний час ми бачимо системи, що базуються на відбитках пальців, скрізь у нашому повсякденному житті, такі як відвідування офісів, перевірка співробітників у банках, зняття готівки або депозитів у банкоматах, перевірка особи в державних установах тощо. Ми вже взаємодіяли з Arduino та з Raspberry Pi сьогодні ми збираємось поєднати датчик відбитків пальців з мікроконтролером PIC. За допомогою цього мікроконтролера PIC16f877A Finger Print System ми можемо реєструвати нові відбитки пальців у системі та видаляти вже подані відбитки пальців. Повна робота системи показана у відео подано в кінці статті.
Необхідні компоненти
- Мікроконтролер PIC16f877A
- Модуль відбитків пальців
- Кнопки або клавіатура
- РК-дисплей 16x2
- 10к горщик
- Кристалічний генератор 18,432000 МГц
- Хлібна дошка або друкована плата (замовлено у JLCPCB)
- Провід перемички
- Світлодіод (додатково)
- Резистор 150 Ом -1 кОм (додатково)
- Джерело живлення 5v
Принципова схема та пояснення
У цьому проекті взаємодії датчика відбитків пальців мікроконтролера PIC ми використали 4 кнопки: ці кнопки використовуються для багатофункціональності. Клавіша 1 використовується для відповідності відбитка пальця та збільшення ідентифікатора відбитка пальця під час зберігання або видалення відбитка пальця в системі. Клавіша 2 використовується для реєстрації нового відбитка пальця та зменшення ідентифікатора відбитка пальця під час зберігання або видалення відбитка пальця в системі. Клавіша 3 використовується для видалення збереженого пальця з системи, а клавіша 4 - для OK. LED використовується для вказівки на те, що відбитки пальців виявлені або збігаються. Тут ми використовували модуль відбитків пальців, який працює на UART. Отже, ми зв’язали цей модуль відбитків пальців з мікроконтролером PIC зі швидкістю передачі даних за замовчуванням, яка становить 57600.
Отже, перш за все, нам потрібно встановити всі необхідні з’єднання, як показано на схемі нижче. Підключення просте, ми щойно підключили модуль відбитків пальців до UART мікроконтролера PIC. РК-дисплей 16x2 використовується для відображення всіх повідомлень. 10-казанний горщик також використовується з РК-дисплеєм для контролю контрастності цього ж. 16-контактні штифти для передачі даних РК-з'єднані контактами PORTA. Виводи d4, d5, d6 та d7 РК-дисплея підключені до контактів RA0, RA1, RA2 та RA3 мікроконтролера PIC відповідно. Чотири кнопки (або клавіатура) підключені до контактів PORTD RD0, RD1, RD2 та RD. Світлодіод також підключений до порту RC3 порту PORTC. Тут ми використовували зовнішній кристалогенератор 18,432000 МГц для тактовки мікроконтролера.
Робота датчика відбитків пальців з мікроконтролером PIC
Робота з цим проектом проста, просто завантажте шістнадцятковий файл, згенерований з вихідного коду, в мікроконтролер PIC за допомогою програміста PIC або конфорки (PIckit2 або Pickit3 або інші), після чого ви побачите деякі вступні повідомлення на РК-дисплеї, а потім користувач буде запропоновано ввести вибір операцій. Для відповідності відбитків пальців користувачеві потрібно натиснути клавішу 1, тоді РК-дисплей запитає Помістити палець на датчик відбитків пальців. Тепер, поклавши палець на модуль відбитків пальців, ми можемо перевірити, чи зберігаються наші відбитки пальців чи ні. Якщо ваш відбиток пальця зберігається, тоді на РК-дисплеї відображатиметься повідомлення із ідентифікатором збереження відбитка пальця, подібного до « ID: 2», інакше відображатиметься «Не знайдено» .
Тепер, щоб зареєструвати друк пальця , користувачеві потрібно натиснути кнопку реєстрації або клавішу 2 та слідувати інструкціям на РК екрані.
Якщо користувач хоче видалити будь-який з відбитків пальців, користувачеві потрібно натиснути кнопку або клавішу видалення 3. Після чого РК-дисплей запитає ідентифікатор відбитка, який потрібно видалити. Тепер, використовуючи кнопку збільшення або клавішу 1 (відповідність кнопці або клавіші 1) та кнопку зменшення або клавішу 2 (кнопка реєстрації або клавіша 2) для збільшення та зменшення, користувач може вибрати ідентифікатор збереженого відбитка пальця та натиснути OK, щоб видалити цей відбиток пальця. Для більшого розуміння погляньте на відео, подане в кінці проекту.
Примітка: Програма цього проекту трохи складна для початківців. Але його простий код взаємодії зроблений за допомогою читання таблиці даних модуля відбитків пальців r305. Всі інструкції щодо функціонування цього модуля відбитків пальців наведені в технічному паспорті.
Тут ми використовували формат кадру для розмови з модулем відбитків пальців. Кожного разу, коли ми надсилаємо команду або кадр запиту даних до модуля відбитків пальців, він відповідає нам тим самим форматом кадру, що містить дані або інформацію, пов’язану із застосованою командою. Усі формати даних та командного кадру наведені в керівництві користувача або в таблиці даних модуля відбитків пальців R305.
Пояснення програмування
У програмуванні ми використовували наведений нижче формат кадру.
Ми розпочинаємо програму з встановлення бітів конфігурації та визначення макросів та контактів для РК-дисплея, кнопок та світлодіодів, які ви можете перевірити у повному коді, наведеному в кінці цього проекту. Якщо ви новачок у мікроконтролері PIC, тоді починайте з Початок роботи з проектом мікроконтролера PIC.
Потім ми оголосили та ініціалізували деяку змінну та масив і створили фрейм, який нам потрібно використовувати в цьому проекті для взаємодії модуля відбитків пальців з мікроконтролером PIC.
uchar buf; uchar buf1; мінливий індекс uint = 0; нестабільний прапор int = 0; uint msCount = 0; uint g_timerflag = 1; мінлива кількість uint = 0; дані uchar; uint id = 1; перелічити { 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};
Після цього ми створили функцію РК для керування РК-дисплеєм.
void 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); // __ затримка_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; для (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Дана функція використовується для ініціалізації UART
void serialbegin (uint baudrate) { SPBRG = (18432000UL / (long) (64UL * baudrate)) - 1; // швидкість передачі даних @ 18.432000Mhz Clock TXSTAbits.SYNC = 0; // Встановлення асинхронного режиму, тобто UART RCSTAbits.SPEN = 1; // Вмикає послідовний порт TRISC7 = 1; // Як передбачено в таблиці даних TRISC6 = 0; // Як передбачено в таблиці даних RCSTAbits.CREN = 1; // Вмикає безперервний прийом TXSTAbits.TXEN = 1; // Вмикає передачу GIE = 1; // ENABLE перериває INTCONbits.PEIE = 1; // ENAB периферійні переривання. PIE1bits.RCIE = 1; // УВІМКНУТИ USART отримувати переривання PIE1bits.TXIE = 0; // вимкнути переривання USART TX PIR1bits.RCIF = 0; }
Дані функції використовуються для передачі команд до модуля відбитків пальців та отримання даних з модуля відбитків пальців.
void serialwrite (char ch) { while (TXIF == 0); // Зачекайте, поки регістр передавача не стане порожнім TXIF = 0; // Очистити прапор передавача TXREG = ch; // завантажуємо char, що передається, в передавальний регістр } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } порожнече переривання SerialRxPinInterrupt (void) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; if (index> 0) прапор = 1; RCIF = 0; // очистити прапор rx } } void serialFlush () { for (int i = 0; i
Після цього нам потрібно створити функцію, яка готує дані, які будуть передані на відбитки пальців, і декодує дані, що надходять з модуля відбитків пальців.
int sendcmd2fp (char * pack, int len) { uint res = ПОМИЛКА; serialFlush (); індекс = 0; __delay_ms (100); для (int i = 0; i
Тепер у коді доступні чотири функції для чотирьох різних завдань:
- Функція введення ідентифікатора відбитка пальця - одиниця getId ()
- Функція відповідності пальця - void matchFinger ()
- Функція реєстрації нового пальця - void enrolFinger ()
- Функція видалення пальця - void deleteFinger ()
Повний код із усіма чотирма функціями наведено в кінці.
Тепер в основній функції ми ініціалізуємо GPIO, LCD, UART і перевіряємо, підключений модуль відбитків пальців до мікроконтролера чи ні. Потім на РК-дисплеї відображаються деякі вступні повідомлення. Нарешті, в той час як цикл ми читаємо всі клавіші або кнопки для роботи з проектом.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; СПОРТ = 0x0F; serialbegin (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint ("відбиток пальця"); lcdwrite (192, CMD); lcdprint ("Взаємозв'язок"); __delay_ms (2000); lcdwrite (1, CMD); lcdprint ("Використання PIC16F877A"); lcdwrite (192, CMD); lcdprint ("Circuit Digest"); __delay_ms (2000); індекс = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("FP не знайдено"); __delay_ms (2000); індекс = 0; } lcdwrite (1, CMD); lcdprint ("FP знайдено"); __delay_ms (1000); lcdinst (); while (1) { FP = збіг
Повний код PIC та робоче відео наведено нижче. Також перевірте наші інші проекти за допомогою модуля датчика відбитків пальців:
- Біометрична голосувальна машина на основі відбитків пальців із використанням Arduino
- Біометрична система безпеки з використанням Arduino та датчика відбитків пальців
- Система біометричного відвідування на основі відбитків пальців із використанням Arduino
- Датчик відбитків пальців взаємодіє з Raspberry Pi