Недорогой сканер отпечатка пальца для самоделок AS608

  • Цена: $7.85 + $0.95 за доставку

Всем доброго дня. Взял я себе на поиграться вот такую штукенцию. Что из этого получилось — под катом.
UPD 30/07/21: пара фото внутреннего мира

Устройство приехало в Украину за две недели, в обычном желтом пакете.


К сожалению, удобных ушек для крепления — не предусмотрено.
Комплектация — собственно устройство и косичка проводов.


Чтобы получить от устройства пользу, нужно уметь программировать Arduino.
Компания Adafruit предлагает такие же устройства, но здесь, похоже, китайский клон, так как цветовая маркировка проводов не совпадает с ее описанием.

С этой странички качаем библиотеку Adafruit-Fingerprint-Sensor-Library-master. Софтинку под Windows, SFGdemo, скачать не удалось, я нашел ее здесь.

Я нашел очень хорошую статью на русском языке, все делал по ней, с некоторыми ньюансами.

Сперва качаем программу SFGdemo, устанавливаем библиотеку под ардуино.
Как сказано в статье выше, загружаем в ардуино пример blank из библиотеки. При заливке скетча, сканер должен быть отключен.
У моего модуля цвета проводов не соответствуюм примерам из статьи, но есть надписи на плате.
Подключаем таким образом: Питание +3,3В на красный провод. Черный — GND. Желтый (TX) — 1 пин ардуино, белый (RX) — на 0 пин. Питание — именно 3,3В. От 5-ти — устройство не сгорает, но не общается с внешним миром.
TX и RX не перепутаны, мы просто используем плату ардуино, как USB — UART переходник. Атмега крутит себе пустой скетч, и не мешает общению сканера и софта.
Запускаем SFGdemo.
У меня програма не хотела соединятся с устройством. После переназначения в диспетчере устройств номера СОМ порта с 15 на 7 — все заработало.

Все изображения отпечатков — хранятся непосредственно в сканере. Прибор может запомнить 162 отпечатка. Для записи их — служит кнопка Enroll. Сперва нужно присвоить отпечатку номер и по запросу софта — дважды приложить палец. Программа выдаст сообщение об успехе или ошибке. Программировать отпечатки можно только на приборе, извне передать — нельзя.
Я записал указательный, большой и безымянный пальцы, соответственно под номера 1, 2, 3.
Для проверки — нужно нажать кнопку Search и приложыть палец. Программа выдаст соответствующий ему номер.
Все работает, определение занимает менее половины секунды.
Палец можно прикладывать в любой ориентации. Главное — что бы по центру окошка. Определение — стабильное и без ошибочное.

Теперь — давайте извлечем из девайса пользу.
Из примеров библиотеки, открываем fingerprint. Смотрим, и сразу закоментируем строку 89. Программа работает через монитор порта, и постоянные сообщения о том, что палец не найден, нам ни к чему, мы и так это знаем :)
Перекидываем желтый (TX) — на 2 пин ардуино, белый (RX) — на 3 пин. Загружаем скетч и запускаем монитор порта.
Теперь, при прикладывании зарегистрированого пальца, выдается его номер. Или же сообщение об ошибке или не зарегистрированом пальце.

Теперь — более живой пример. Сделаем так, что бы при прикладывании незарегистрированого пальца загорался красный светодиод, а зарегистрированого — зеленый. Кроме того, пусть на первый палец загорается еще синий, на второй — желтый, на третий — белый, а на четвертый — синий, желтый и белый — гаснут.
Нужно зарегистрировать еще 4-й (мизинец) и 5-й (большой) пальцы.
Для этого — загружаем из примеров Enroll и включаем монитор порта, через него и будет общение. Теперь вводим по порядку номера и, по запросу, регистрируем пальчики. Тут же в монитор выпадут сообщения о успехе, или ошибке.

Теперь собираем схемку и вливаем скетч.

Красный светодиод — на 5, зеленый — 4, синий — 8, желтый — 7, белый — 6.
Скетч

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

int getFingerprintIDez();

int GreenLed = 4;
int RedLed = 5;
int WhiteLed = 6;
int YellowLed = 7;
int BlueLed = 8;


// pin #2 is IN from sensor (YELLOW wire)
// pin #3 is OUT from arduino  (WHITE wire)

SoftwareSerial mySerial(2, 3);  //activates serial communication on pin 2 & 3

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()
{
  pinMode(GreenLed, OUTPUT); 
  pinMode(RedLed, OUTPUT);  
  pinMode(WhiteLed, OUTPUT); 
  pinMode(YellowLed, OUTPUT);  
  pinMode(BlueLed, OUTPUT);  

  digitalWrite(RedLed, HIGH);

  Serial.begin(9600);

  finger.begin(57600);
  delay(5);
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) { delay(1); }
  }
}

void loop() 
{
  getFingerprintID();
  delay(100);
}

uint8_t getFingerprintID()
{
  uint8_t p = finger.getImage();

  switch (p)
  {
    case FINGERPRINT_OK:
      break;
    case FINGERPRINT_NOFINGER:
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      return p;
    case FINGERPRINT_IMAGEFAIL:
      return p;
    default:
      return p;
  }

  p = finger.image2Tz();
  switch (p)
  {
    case FINGERPRINT_OK:
      break;
    case FINGERPRINT_IMAGEMESS:
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      return p;
    case FINGERPRINT_FEATUREFAIL:
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      return p;
    default:
      return p;
  }

  // match finger with stored ID#
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK)
  {
    digitalWrite(GreenLed, HIGH);  //turn on green LED if finger ID is match
    digitalWrite(RedLed, LOW);  //red LED is OFF
    Serial.print("Found ID # "); Serial.println(finger.fingerID);
    ShowID(finger.fingerID);
  }
  else if (p == FINGERPRINT_NOTFOUND)
  {
    digitalWrite(GreenLed, LOW); //turn off green LED if finger do not match
    digitalWrite(RedLed, HIGH);  //red LED is ON
    Serial.println("Finger not registered");
  }
  else
  {
    return p;
  }
}

// returns ID#
int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;

  //return finger.fingerID);
}

void ShowID(char data)
  {
    switch (data)
      {
        case 1: digitalWrite(BlueLed, HIGH); break;
        case 2: digitalWrite(YellowLed, HIGH); break;
        case 3: digitalWrite(WhiteLed, HIGH); break;
        case 4: digitalWrite(BlueLed, LOW); digitalWrite(YellowLed, LOW); digitalWrite(WhiteLed, LOW); break;
      }
  }



Скетч взят из примера, я еще не вникал в большинство его функций.

Теперь — играемся.
Если палец не записан в сканере — работают эти строки:

    digitalWrite(GreenLed, LOW); //turn off green LED and Relay if finger do not match
    digitalWrite(RedLed, HIGH);  //red LED is ON
    Serial.println("Finger not registered");


Если записан — эти:

    digitalWrite(GreenLed, HIGH);  //turn on green LED and Relay if finger ID is match
    digitalWrite(RedLed, LOW);  //red LED is OFF
    Serial.print("Found ID # "); Serial.println(finger.fingerID);
    ShowID(finger.fingerID);

Вместо них — можете прописать свои команды.
Тут же получаем номер пальца и вызываем, в даном примере, процедурку:

void ShowID(char data)
  {
    switch (data)
      {
        case 1: digitalWrite(BlueLed, HIGH); break;
        case 2: digitalWrite(YellowLed, HIGH); break;
        case 3: digitalWrite(WhiteLed, HIGH); break;
        case 4: digitalWrite(BlueLed, LOW); digitalWrite(YellowLed, LOW); digitalWrite(WhiteLed, LOW); break;
      }
  }

Здесь и оперируем светодиодами, как я и хотел :)

Полезные материалы: инструкция на английском, мануал по подключению, даташит на AS608.

Плата крепится на 4-х мелких саморезах. Вот она, с «рабочей» стороны.

В корпусе видно разъем для диодов подсветки и оптика.

Оптика довольно интересная. На просвет — темная. Но если приложить палец — рисунок отпечатка проявляется очень отчетливо.

Наверное, можно приделать к камере другой объектив, выставить фокус (благо, софт под Windows позволяет получать картинки), и получим простое машинное зрение, способное, например, различать логотипы, картинки и формы предметов.

А я пока наигрался и добыл из устройства главный функционал.
Сканер может отправится на полочку и ждать своего проекта.
Планирую купить +27 Добавить в избранное +65 +85
+
avatar
+22
Теперь — давайте извлечем из девайса пользу.

Сканер может отправится на полочку и ждать своего проекта.
???
+
avatar
+27
… наигрался…
+
avatar
+7
Это уже про удовлетворение больше. Я про пользу подумал — вот сейчас будем замком управлять, ограничив доступ к курятнику, туалету...)
Что я хочу сказать — как то быстро все оборвалось. Да и описание хромает — сколько пальцев может хранить, как считывает у прочих членов семьи, можно ли удаленно хранить отпечатки…
+
avatar
+6
ограничив доступ к курятнику, туалету
К курятнику ладно фиг с ним, а вот на туалет доступ по отпечатку не рекомендую ограничивать таким способом, можно штаны стирать будет при грязных/порезанных подушечках пальцев )))
+
avatar
+15
«Грязные пальцы» — это следствие закрытого туалета, а не причина.
+
avatar
+1
Заставить девайс физически выдавать сигнал — это и есть польза на даный момент.
Запоминает максимум 162 отпечатка. Картинку можно получить через софтину под windows.
+
avatar
+2
и написано быстро, наверное по тому, что больших пальцев аж два! )))
Я записал указательный, большой и безымянный пальцы
Нужно зарегистрировать еще 4-й (мизинец) и 5-й (большой) пальцы
главное — заставить корректно работать китайскую фиговину, а применение то уже проще простого))
+
avatar
+3
Можно в офисе в туалет ограниченный доступ сделать, что бы посторонние не пачкали там.
+
avatar
+3
А чтобы слить воду надо будет отсканировать сетчатку глаза в другом сканере, что будет в каждой кабинке стоять?)
+
avatar
+9
Зачем?:) Наоборот, надо не выпускать пока не будет слита вода)))
+
avatar
-1
Фант_азия так себе…
+
avatar
+1
что бы посторонние не пачкали там
лучше чтобы пачкали тут?
+
avatar
+12
Не в обиду автору, но:
«я тут купил одну штуку интересную, скачал к ней программу, она все сделала за меня, только пальцы надо было приложить, ну да, все работает, убрал на полку...» — это щас описание очень многих «диайуайщиков».

Ни в вопросе разобраться, ни в софте, ни в железе. Купил модуль, скачал готовые программные библиотеки к нему — и вот ужо поделка без смысла и упрека на полке.

Главное, чтобы так скайнет не получился и не захавал потом всех прямо с той полки.
+
avatar
+3
описание очень многих «диайуайщиков»
скачал готовые
В разделе уже были формы PDF, фонарь со снятым кожухом и куча другой «жести». Для многих и это — уровень.
+
avatar
+7
«Радует» такой подход что со сканерами отпечатков пальцев, что например со считывателями mifare меток. Пальцы- круто, почти некопируемо и т.д. А смотришь как реализовано- тупо по юарту номер от 1 до 162 передается и все. Или карты mifare- шифрование, все дела, но почему-то все ардуинщики тупо передают uid номер карты, крича что все круто, карта с шифрованием, только блин uid копируется заготовкой за 70 р и телефоном с nfc за 2 секунды. А дальше передачи id не ковыряют ардуинщики, крича при этом о безопасности))))
+
avatar
+4
Увы но часто это не только у ардинщиков.
Иногда смотришь на казалось бы нормальный софт, продаваемый за офигенные деньги, но там с безопасностью просто мрак.
+
avatar
+1
Это да(
+
avatar
  • Savrik
  • 23 июля 2021, 00:15
+1
Uid не скопировать, если установлены ключи не по умолчанию
В смысле скопировать можно, но если не привязывать всю логику к UID, там еще есть куча блоков — то все до одного места
+
avatar
0
Да ладно???


Другое дело что можно действительно нормальным считывателем считать нужные сектора и блоки при помощи ключей, включая самый первый блок, где хранятся uid и atqa с sak. Но с другой стороны возникает вопрос- а зачем в качестве id использовать именно uid, а не что-то пользовательское, зашифрованное в определенном секторе?

Вот для чего uid вполне удобен, это для так называемой диверсификации ключей- когда для каждой метки по определенному алгоритму, ключу и uid метки формируются индивидуальные ключи от секторов метки.
+
avatar
0
Ну tamper alert нужно безусловно делать…
А то так дойти можно до критики пос-терминалов, которые на борту имеют ключи, но как только их тамперишь — они их стирают :)
+
avatar
0
Делать нужно, но многие тупо не делают. И если в оборудовании это еще более менее (ну или я просто меньше сталкиваюсь), то с софтом часто вообще мрак.
Казалось бы SQL класная система, есть куча настроек доступа и так далее, но все равно до сей поры есть системы которые стоят дохрена денег, но требуют sa для установки и работы, я был в шоке.
+
avatar
0
Что ж поделаешь… :) Безответственность везде
mySKU.me/blog/aliexpress/87084.html#comment3889174
+
avatar
0
Безответственность я еще понимаю, не принимаю но понимаю.
Но иногда бывает просто пофигизм и полное нежелание даже пытаться думать о том что есть такая штука как безопастность.
+
avatar
0
Скажу больше
Есть системы мониторинга безопасности сети предприятия, устанавливающиеся на клиентов и на свой сервер с правами sa и админа хоста.
Объяснить что-либо сотрудникам безопасности нереально

— Парни, у нас дыра в безопасности
— Ну, хоть что-то у нас в безопасности
+
avatar
0
Вот как примерно микроконтроллеры с криптографией должны быть устроены в плане защит)))
habr.com/ru/company/milandr/blog/518138/

А по считывателю из статьи надо читать даташит на мк в данном считывателе, что у него с защитами- я увидел что мк умеет в шифрование, но дальше лень читать даташит. Если ключи для того же AES шифрования можно загрузить в мк, а обратно уже никак не считать, то можно сделать обмен данными с нормальной защитой.
+
avatar
+1
Наша песня хороша — начинай сначала.
Вон HID кардридеры, у них wiegand старый на выходе, но есть оптопара, и если ты этот ридер открутишь от монтажной пластины в желании подслушать или послать wiegand — он подымет тампер и никто даже не успеет добраться до wiegand-а незамеченным. При этом сам интерфейс идет с времен ридеров магнитной полосы, и никто не спешит ничего менять или криптовать, ибо не нужно.
Хотя понятно, что подделать/скопировать HID карту ни у кого пока не получилось.
А даже если бы и получилось подделать(например украсть) карту, то такое решается ридером со вводом пин-кода.
Обозреваемый сканер является полуфабрикатом, который можно оформить в безопасную систему при желании.
Я же при желании биометрии просто беру ридеры от suprema которые и палец и карту умеют и моноблок с PoE.
+
avatar
+1
Ну вон OSDP на замену виганда лет 10 назад разработали. Но воз и ныне там, ибо особо никому не нужно))
Я вот изучал как производители борются с уязвимостями mifare classic различными методами (хотя уже все-равно пора переходить на тот же mifare plus)), и скажу что довольно много чего интересного придумали.

Hid, а какой hid?:) Который prox, который ничем не лучше em-marin или hid iclass?:)) Iclass я так понял поставляется по принципу прошитый считыватель и прошитые ключи, в отличии от семейства mifare, где сам без производителя/ авторизованного интегратора можешь записать любые ключи в карты и в считыватели.

Хотя я больше офигевал от решений с ble ключами- половина производителей предлагают генерацию ключей на их сервере, а другая половина- генерировать либо по IMSI либо по IMEI. Имхо, и то, и другое дичь.

А вообще, любая система связанная с безопасностью должна быть сделана по принципу разумной необходимости и достаточности, иначе это будет калитка в чистом поле)))
+
avatar
0
Да, iClass. Пачку в принтер и вперед печатать лица. Айди уникальны…
+
avatar
  • yg-25
  • 22 июля 2021, 17:40
+1
Вопрос к знатокам, модуль сканера из ноутбука и подобного можно как либо использовать?
+
avatar
0
Все будет зависить от его интерфейса и доступности библиотек, ну или доступности описания протокола и Ваших возможностей реализовать программную реализацию этого протокола.
Одним словом можно, но только если умеете программить и разбираетесь в электронике.
+
avatar
0
Они вроде с USB интерфейсом, а не просто TX/RX.
+
avatar
0
Есть разные. Бывает с отдельным usb бывает выходит на общий контроллер скажем клавиатуры или тача, или просто шлейфом на материнку.
Есть сканеры в обычные клавиатуры встроенным. Там тоже видел вариант когда он как бы видео на внутреннем хабе и когда прямо на контроллер клавиатуры.
Сильно подробно не интересовался, но когда разберёшь иногда понятно по какому интерфейсу скорее всего работает.
+
avatar
0
Конечно, бывают разные. В этом посте как раз один из таких разных вариантов. Но я просто чаще встречал именно USB вариант и потому в такого рода DIY поделках мало пригодны.
+
avatar
0
ну я бы небыл так кретичен.
Иногда там за usb отвечет отдельный конвертор, так что можно просто взять сигналы до него и вот голые данные.
+
avatar
0
Я таких вариантов не встречал, но это не говорит о том, что такого нет, конечно. Просто это намного дороже, чем использоваться сразу по USB без конвертеров.
+
avatar
+7
Я работал с таким датчиком, давно это было, поэтому могу кое-где приврать. Работает емнип по uart, описание команд есть в даташите-можно подключать не только к ардуино при наличии минимального опыта работы с микроконтроллерами.

У меня на бывшей работе стоит на двери в распечатанном на 3д принтере корпусе (датчик поставил вертикально).
Подключается к blue pill, к которому также подключены кнопки открывания, записи отпечатка и очистки базы. Контроллер управляет электромагнитным замком двери через транзистор, зажигает два светодиода возле датчика-зеленый и красный, для солидности конечно.

Работает 24/7 года 4, срабатывает четко, в памяти отпечатков 20, время открытия в районе секунды.

За все время только один раз приходилось экстренно сворачивать танки на компе-произошло срабатывание на отпечаток не в базе.

Мне в целом датчик понравился.
+
avatar
+1
выложил бы в DIY, мож повторил бы кто
+
avatar
0
Я б с радостью, но там вся куцая документация и исходники были при переустановке безжалостно уничтожены ввиду малоценности.

Сейчас бы я взялся делать самопальный замок на этом датчике только в 2 случаях:
1) В учебных целях
2) Если при попытке открыть дверь есть необходимость бить током шаловливые пальчики, отсутствующие в базе.

А так — на алиэкспресс готовая ручка со встроенным датчиком стоит меньше 40$, то на то и выйдет по материалам.
+
avatar
+6
+
avatar
0
«виндовс 11 реаду)»
+
avatar
  • Cregg
  • 22 июля 2021, 20:05
0
Глядя на маркировку «D+/D-»: а нет ли там USB?
+
avatar
  • X3Shim
  • 22 июля 2021, 20:16
0
на страничке товара:
Interfaz de comunicación: USB/UART
+
avatar
0
Судя по даташиту на мк в считывателе, есть там usb
+
avatar
+1
… как у все у меня — день своего времени.
но интересуют детали — можно ли отпечатки вытащить с устройства, если его украсть, интересно? наверняка можно, но насколько сложно это будет?
и второй — питание. какие потребление в режиме ожидания, считывания?
+
avatar
  • Cregg
  • 23 июля 2021, 11:20
+2
можно ли отпечатки вытащить с устройства, если его украсть, интересно?
одним словом — практически нет.
развернуто: отпечаток «как картинка» хранился только в первых, совсем древних, фингерпринтах (или в отдельном контроллере). Сейчас хранится некий «хэш» ключевых параметров (точек, линий, глубины и т.п.) причем алгоритм определения «что считать ключевым» не раскрывается и может быть очень разным. Также как и не существует общепринятого стандарта кодирования.
Т.е. «нужно»: считать сырое содержимое памяти (та еще задача), восстановить параметры из «хэша» (еще сложнее) и преобразовать их в «картинку». И даже после этого (через черт его знает сколько лет, а то и веков) результатом будут огрызки отпечатка, относительно пригодные только для подсовывания точно такому же датчику.
+
avatar
+2
Я правильно понял?
(Если не заморачиваться с другой арлуиной или ещё чем-то, что может передать номер отпечатка)

Отпечатки хранятся только в этой игрушке. Игрушка не привязана никакой авторизацией к ардуине и основное устройство понятия не имеет, какой именно датчик к нему подключен.

Т.е., достаточно выломать этот модуль, который даже креплений не имеет, подключить точно такой же с заранее вбитыми в него своими отпечатками и всё — доступ обеспечен?

Или я что-то пропустил?
+
avatar
+3
Можно даже обойтись без второго модуля, просто второе ардуино которое на проводах выдаст нужный сигнал первому контроллеру :)
+
avatar
+1
В варианте описанном в этом топике да, можно просто даже usb-uart переходником например с телефона послать например цифру 1 и войти. А так, судя по очень беглой прочитке даташита на процессор в этом считывателе, можно реализовать и нормальный двухсторонний обмен с криптографией. Но это уже надо изучать даташит, а не просто взять простейшую библиотеку для ардуинки которую написал условный индус.
+
avatar
0
Ну так это же читать и писать нужно :)
+
avatar
  • SEM
  • 23 июля 2021, 08:19
+4
и всё — доступ обеспечен?
Это устройство и не позиционируется как защита хранилища атомного оружия или золотовалютного запаса страны.
Это — для самоделок, для защиты «от честных людей». Скорее даже не защиты, а идентификации, типа фиксации кто во сколько пришёл.
+
avatar
  • Cregg
  • 23 июля 2021, 11:25
0
подключить точно такой же с заранее вбитыми в него своими отпечатками и всё — доступ обеспечен?
против лома нет приема.
использование только биометрии в критических точках входа — плохая идея. с обеих сторон — и с точки зрения защищенности от взлома (хотя здесь есть где разгуляться и, в принципе, можно добиться неплохих результатов), и с точки зрения надежности определения валидных входов (например: если шифрация «очень важных данных» завязана только на палец, то что случиться если этот палец получит серьезную травму?).
+
avatar
0
Этот оптический сканер подсвечивает при считывания. Я себе сенсор подороже с ардуинкой на мотоцикл поставил, но он много энергии жрёт и как-то высадили мне аккумулятор в 0. Потом я на него кнопку включения добавил. Иногда пользуюсь или просто знакомых удивить можно
+
avatar
+1
А сколько же аккумулятор у мотоцикла, что бы его ардуина со сканеро выжрала?
+
avatar
+1
cr3102 там стоит :-)

p. s. как может выжрать чтото датчик, который 99% времени спит?
+
avatar
+2
Долго ли умеючи. Не силен в программировании, но вот цитата из приведенного автором скетча.

void loop()
{
getFingerprintID();
delay(100);
}

Это же по 10 считываний в секунду до скончания веков?
+
avatar
0
*facepalm*
Не… ну если так тоды ой)
+
avatar
+1
Такому девайсу надо бы на выходе только 2 провода, которые замыкаются при правильном распознавании отпечатка.
Цены бы ему не было!
+
avatar
  • SEM
  • 23 июля 2021, 17:03
+1
Это если только замок открывать. А если нужна разная реакция на разные отпечатки? Например к кофеварке прикрутить, каждому «пользователю» свой любимый рецепт, а чьего отпечатка нет в памяти — «проходите мимо».
+
avatar
0
каждому «пользователю» свой любимый рецепт
Так для гостя кофе не сделаешь, к примеру. Зачем усложнять?
Выбор напитка — обычной кнопкой, а «пуск» — с авторизацией.
+
avatar
  • Cregg
  • 24 июля 2021, 09:06
+3
Цены бы ему не было!
Цена есть: https://aliexpress.ru/item/item/1005001693192244.html например