Подключение модуля распознавания отпечатков пальцев AS608 к Arduino UNO
Сегодня расскажу об универсальном сканере отпечатков пальца AS608, с помощью которого можно легко организовать доступ в помещении по отпечатку. Модуль включает в себя чип, который обрабатывает полученные изображение и сравнивает его записанными ранее. А с использованием программного обеспечения можно отобразить фотографию отпечатка пальца на компьютере и самое замечательное, что есть библиотека для подключения сканера к arduino.
Технические параметры:
► Напряжение питания: 3.0 — 3.6 В;
► Рабочий ток: 30-60 мА;
► Время обработки изображения отпечатка: < 1.0 секунды;
► Количество одновременно записываемых файлов: 127 файла;
► Интерфейс: UART, USB;
► Скорость передачи данных (Baud rate): 9600, 19200, 28800, 38400, 57600 (по умолчанию 57600);
► Габариты: 56 x 20 x 21 мм;
► Вес: 20 грамм.
Общие сведения
Модуль AS608, является высокопроизводительный оптический модуль распознавания отпечатков пальце. В качестве микроконтроллера используется чип распознавания отпечатков пальцев AS608 компании Hangzhou Shengyuan Chip Technology Co., Ltd. (Synochip). Чип оснащен встроенным арифметическим блоком DSP и встроенным алгоритмом распознавания отпечатков пальцев, который позволяет эффективно и быстро собирать изображения и идентифицировать признаки отпечатков пальцев. Модуль оснащен последовательным портом (UART) и интерфейсом связи (USB). Для использования не нужно изучать сложные алгоритмы обработки изображений и распознавания отпечатков пальцев, а необходимо только управлять модулем через UART и USB.
Для подключения, на модуле установлен 8 контактный разъем с шагом 1,25 мм, назначение контактов показана на рисунке ниже. Модуль имеет встроенную схему обнаружения пальцев (емкостной датчик), считать показания которого можно с вывода WAK (по умолчанию всегда положительный).
Внимание: В моем случаи модуль ZA620_M5 и контакты перевернуты по сравнению с модулем ATK-AS608.
Назначение контактов:
► U- — Вывод USB D-;
► U+ — Вывод USB D+;
► Vt — Вывод питания сенсорного датчика;
► WAK — Вывод обнаружения касания;
► GND — Выход питания;
► Rx — Логический вывод TTL;
► Tx — Логический вывод TTL;
► Vi — Вывод питания 3.3 В;
Подключение модуля распознавания отпечатков пальцев AS608 к Arduino UNO
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Модуль распознавания отпечатков пальцев AS608 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт
Описание:
В примере покажу несколько программ, в первой отсканируем отпечаток пальца и сохраним его в AS608, а во второй будем сравнивать отпечаток пальца с сохраненным. В качестве контроллера воспользуемся Arduino UNO R3, все показания выведем на последовательной порт.
Подключение:
По принципиальной схеме ниже подключаем сканер отпечатков пальцев AS608 к Arduino UNO, в которой всего 4 провода (не забываем что модуль питается от 3.3В)
Установка библиотек:
Для работы программы, необходимо дополнительно установить библиотеку «Adafruit_Fingerprint«, для этого перейдите в Скетч —> Подключить библиотеку —> Управление библиотеками.
В строке поиска введите «Fingerprint», найдите библиотеку «Adafruit_Fingerprint» и установите данную библиотеку.
Программа №1 — Регистрация отпечатка пальца.
Открываем среду разработки Arduino IDE и загружаем первую программу в Arduino UNO. С помощью данной программы можно записать в память AS608 до 127 различных отпечатков.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
#include <Adafruit_Fingerprint.h> SoftwareSerial mySerial(2, 3); Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); uint8_t id; void setup() { Serial.begin(9600); while (!Serial); delay(100); Serial.println("\n\nAdafruit Fingerprint sensor enrollment"); // set the data rate for the sensor serial port finger.begin(57600); if (finger.verifyPassword()) { Serial.println("Found fingerprint sensor!"); } else { Serial.println("Did not find fingerprint sensor :("); while (1) { delay(1); } } } uint8_t readnumber(void) { uint8_t num = 0; while (num == 0) { while (! Serial.available()); num = Serial.parseInt(); } return num; } void loop() { Serial.println("Ready to enroll a fingerprint!"); Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as..."); id = readnumber(); if (id == 0) {// ID #0 not allowed, try again! return; } Serial.print("Enrolling ID #"); Serial.println(id); while (! getFingerprintEnroll() ); } uint8_t getFingerprintEnroll() { int p = -1; Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id); while (p != FINGERPRINT_OK) { p = finger.getImage(); switch (p) { case FINGERPRINT_OK: Serial.println("Image taken"); break; case FINGERPRINT_NOFINGER: break; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); break; case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); break; default: Serial.println("Unknown error"); break; } } // OK success! p = finger.image2Tz(1); switch (p) { case FINGERPRINT_OK: Serial.println("Image converted"); break; case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p; case FINGERPRINT_FEATUREFAIL: Serial.println("Could not find fingerprint features"); return p; case FINGERPRINT_INVALIDIMAGE: Serial.println("Could not find fingerprint features"); return p; default: Serial.println("Unknown error"); return p; } Serial.println("Remove finger"); delay(2000); p = 0; while (p != FINGERPRINT_NOFINGER) { p = finger.getImage(); } Serial.print("ID "); Serial.println(id); p = -1; Serial.println("Place same finger again"); while (p != FINGERPRINT_OK) { p = finger.getImage(); switch (p) { case FINGERPRINT_OK: Serial.println("Image taken"); break; case FINGERPRINT_NOFINGER: break; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); break; case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); break; default: Serial.println("Unknown error"); break; } } p = finger.image2Tz(2); switch (p) { case FINGERPRINT_OK: Serial.println("Image converted"); break; case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p; case FINGERPRINT_FEATUREFAIL: Serial.println("Could not find fingerprint features"); return p; case FINGERPRINT_INVALIDIMAGE: Serial.println("Could not find fingerprint features"); return p; default: Serial.println("Unknown error"); return p; } Serial.print("Creating model for #"); Serial.println(id); p = finger.createModel(); if (p == FINGERPRINT_OK) { Serial.println("Prints matched!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return p; } else if (p == FINGERPRINT_ENROLLMISMATCH) { Serial.println("Fingerprints did not match"); return p; } else { Serial.println("Unknown error"); return p; } Serial.print("ID "); Serial.println(id); p = finger.storeModel(id); if (p == FINGERPRINT_OK) { Serial.println("Stored!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return p; } else if (p == FINGERPRINT_BADLOCATION) { Serial.println("Could not store in that location"); return p; } else if (p == FINGERPRINT_FLASHERR) { Serial.println("Error writing to flash"); return p; } else { Serial.println("Unknown error"); return p; } } |
Далее открываем «Последовательный монитор«, первое что необходимо сделать, это указать индивидуальный идентификатор, доступно от 1 до 127, в моем случаи выбран 10.
Далее необходимо приложить палец к сенсору, чтоб получить первое изображение отпечатка пальца.
Затем еще раз прикладываем палец к сенсору, чтобы получить второе изображение отпечатка палька, в окне «Мониторинга порта» появится сообщение «Stored!«
Программа №2 — Алгоритм принятия и отклонения отпечатков пальцев.
Во второй программе, предполагается, что один или несколько отпечатков пальцев были зарегистрированы в AS608. Теперь проверим, сможет Arduino UNO и сканер отпечатков пальцев повторно идентифицировать зарегистрированные отпечатки пальцев и отклонять незнакомые отпечатки пальцев.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
#include <Adafruit_Fingerprint.h> // Подключение библиотеки Adafruit Fingerprint volatile int finger_status = -1; SoftwareSerial mySerial(2, 3); Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); void setup() { Serial.begin(9600); while (!Serial); delay(100); Serial.println("\n\nAdafruit finger detect test"); finger.begin(57600); // Установите скорость передачи данных для последовательного порта датчика if (finger.verifyPassword()) { Serial.println("Found fingerprint sensor!"); } else { Serial.println("Did not find fingerprint sensor :("); while (1) { delay(1); } } finger.getTemplateCount(); Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates"); Serial.println("Waiting for valid finger..."); } void loop() { finger_status = getFingerprintIDez(); if (finger_status!=-1 and finger_status!=-2){ Serial.print("Match"); } else{ if (finger_status==-2){ for (int ii=0;ii<5;ii++){ Serial.print("Not Match"); } } } delay(50); } int getFingerprintIDez() { uint8_t p = finger.getImage(); if (p!=2){ Serial.println(p); } if (p != FINGERPRINT_OK) return -1; p = finger.image2Tz(); if (p!=2){ Serial.println(p); } if (p != FINGERPRINT_OK) return -1; p = finger.fingerFastSearch(); if (p != FINGERPRINT_OK) return -2; // found a match! Serial.print("Found ID #"); Serial.print(finger.fingerID); Serial.print(" with confidence of "); Serial.println(finger.confidence); return finger.fingerID; } |
Открываем «Последовательный порт», где можно увидеть, что программа ожидает, когда приложим палец. Когда приложите палец к датчику отобразится фраза “Found ID”, если отпечаток пальца определен, и отображается фраза “Not MatchNot”, если отпечаток пальца не обнаружен.
Вот и все, если модуль интересен, можно реализовать и другие проекта на нем.
Ссылки
Библиотека Adafruit Fingerprint Sensor
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Модуль распознавания отпечатков пальцев AS608
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Модуль распознавания отпечатков пальцев AS608