Модуль сканування відбитків

Версія від 13:15, 7 червня 2017, створена Анатолій Шайкін (обговореннявнесок) (Створена сторінка: == Опис == Цей оптичний датчик відбитків пальців здійснює додавання, виявлення і перевір...)
(різн.) ← Попередня версія • Поточна версія (різн.) • Новіша версія → (різн.)

Опис

Цей оптичний датчик відбитків пальців здійснює додавання, виявлення і перевірку відбитків пальців максимально просто. Цей модуль, як правило, використовується в сейфах - є високо потужний чіп DSP AS601, що робить рендеринг зображення, обчислення, функції по встановленню фактів і пошук. Підключається до будь-якого микроконтроллеру або системи з TTL послідовно, і передає пакети даних, щоб зробити фотографії, виявити відбитки, хеш і пошук. Ви можете також зареєструвати нові відбитки пальців. До 120 відбитків пальців можуть бути збережені у вбудованій флеш-пам'яті. Сканування відбитків дуже просте у використанні з послідовним UART. Існує вже кілька бібліотек, щоб допомогти вашій роботі з цим датчиком з Arduino, такі як бібліотека Adafruit відбитків пальців.


Fingerprint Sensor.jpg

Особливості

  • Зв'язок: UART(TTL)
  • Кількість відбитків пальців: 120 за замовчуванням
  • Можна встановити рівень безпеки і швидкість передачі даних
  • Робочий струм @ напруга: <120mA@DC3.6~6V
  • Температура: -20 - +50 градусів
  • Вологість: <85%
  • Розмір: 56x20x21.5мм

Використання

Реєстрація нових користувачів з ОС Windows

1.З'єднання апаратних засобів

Fingerprint Sensor hardware.jpg

2.Зкопіюйте код нижче у ваш новий запис, а потім завантажити його.

// Red connects to +5V
// Black connects to Ground
// White goes to Digital 0
// Green goes to Digital 1
 
void setup() {}
void loop() {}


3.Завантажте SFGDemoV2.0: SFGDemoV2.0
Запустіть програмне забезпечення SFGDemo і натисніть кнопку Open Device з нижнього лівого кута. Виберіть COM-порт, який використовує Arduino.

SFGDemoV2.01.jpg

4.Та натисніть OK, коли закінчите. Ви повинні побачити повідомлення успішної операції синього кольору і деякі статистичні дані пристроїв в правому нижньому куті. Ви можете змінити швидкість передачі даних в лівому нижньому куті, а також «рівень безпеки» (наскільки чутливим він є), але рекомендовано залишити їх без змін, щоб усе працювало правильно, крім змін з метю експерименту. За замовчуванням вони встановлені в 57600 бод і рівень безпеки 3, таким чином їх можна змінити, якщо вони помилкові.

SFGDemoV2.02.jpg

5.Зареєструємо новий палець. Натисніть прапорець Preview і натисніть кнопку Enroll поруч з ним (Con Enroll означає «Continuous» Enroll, яку можна використати, якщо реєструється багато пальців). Коли з'являється вікно, введіть в ID # яке буде використовуватись. Можна використовувати до 162 ідентифікаційних номерів.

SFGDemoV2.03.jpg

6.Програма попросить покласти палець на датчик.

SFGDemoV2.04.jpg

7.Можливо здійснити попередній перегляд (якщо включити прапорець preview checkbox) відбитків пальців.

SFGDemoV2.05.jpg

Потім необхідно повторити процедуру, щоб отримати чисте зображення відбитків. Сканується один і той же палець.
У разі успіху надійде повідомлення.

SFGDemoV2.06.jpg

Якщо виникла проблема поганого сканування зображення, необхідно повторити процедуру.

Пошук за допомогою програмного забезпечення

1.Натиснути на кнопку Search на правій стороні.

SFGDemoV2.07.jpg

2.Якщо прийде запит, натисніть тим чи іншим пальцем на датчик.
Якщо це той же палець, прийде повідомлення з ID #

SFGDemoV2.08.jpg

Якщо це не палець з бази даних, прийде повідомлення відмови.

SFGDemoV2.09.jpg

Проводка для використання з Arduino

1.З'єднання апаратних засобів

Fingerprint Sensor hardware2.jpg

2.Завантажте бібліотеку Fingerprint Sensor library: http://www.elecrow.com/wiki/index.php?title=File:Adafruit_Fingerprint.zip Fingerprint Sensor library] Розпакуйте її в бібліотеки файлів Arduino IDE шляхом: ..\arduino-1.0.1\libraries.

3.Відкрити код безпосередньо з: File -> Example ->Adafruit_Fingerprint→fingerprint

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

int getFingerprintIDez();

// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
SoftwareSerial mySerial(2, 3);


Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  
{
  Serial.begin(9600);
  Serial.println("fingertest");

  // 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);
  }
  Serial.println("Waiting for valid finger...");
}

void loop()                     // run over and over again
{
  getFingerprintIDez();
  delay(50);            //don't ned to run this at full speed.
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  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;
  }
  
  // OK converted!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence); 
}

// returns -1 if failed, otherwise 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;
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID; 
}

4.Завантажити код. Відкрийте монітор послідовного порту зі швидкістю 9600 бод і, коли буде запропоновано, розмістити свій палець на датчику, який вже був зарахований.
Відбудеться наступне:

SFGDemoV2.010.jpg

Реєстрація з Arduino

1.З'єднання апаратних засобів

Fingerprint Sensor hardware2.jpg

2. Завантажте бібліотеку Fingerprint Sensor library: Fingerprint Sensor library Розпакуйте її в бібліотеки файлів Arduino IDE шляхом: ..\arduino-1.0.1\libraries.

3.Відкрити код безпосередньо з: File -> Example ->Adafruit_Fingerprint→enroll

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

uint8_t getFingerprintEnroll(int id);


// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  
{
  Serial.begin(9600);
  Serial.println("fingertest");

  // 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);
  }
}

void loop()                     // run over and over again
{
  Serial.println("Type in the ID # you want to save this finger as...");
  int id = 0;
  while (true) {
    while (! Serial.available());
    char c = Serial.read();
    if (! isdigit(c)) break;
    id *= 10;
    id += c - '0';
  }
  Serial.print("Enrolling ID #");
  Serial.println(id);
  
  while (!  getFingerprintEnroll(id) );
}

uint8_t getFingerprintEnroll(int id) {
  int p = -1;
  Serial.println("Waiting for valid finger to enroll");
  while (p != FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println(".");
      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();
  }

  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:
      Serial.print(".");
      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(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;
  }
  
  
  // OK converted!
  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;
  }   
}

4.Завантажити код. Відкрийте монітор послідовного порту, він попросить вас ввести ID для реєстрації - використати верхнє поле, ввести номер і натиснути кнопку Send

SFGDemoV2.011.jpg

5.Потім пройти процес реєстрації, як зазначено. Коли він успішно зареєструє палець, він висвітить Stored!, тобто збережено.

SFGDemoV2.012.jpg

Посилання