суббота, 18 января 2014 г.

Работа со сканером отпечатков пальцев из Буратины

При реализации автоматизированных комплексов охраны периметра или багажа, основная задача - идентификация пользователя или владельца. Эта задача решается как механически (на уровне ключей с механическими замками), так и электро-механически - электрозамками и картами идентификации, RFID метками и даже сканерами отпечатков пальцев. Под катом пример работы с таким сканером на базе библиотеки Adafruit Fingerprint sensor...

Код:
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

uint8_t getFingerprintEnroll(int id);
// Программный UART на 7 (in)/9 (out)
SoftwareSerial mySerial(7, 8);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup() {
Serial.begin(9600);
finger.begin(57600);

if (finger.verifyPassword()) {
   Serial.println("Нашли сенсор.");
   }
   else {
   Serial.println("Ищем сенсор...");
   while (1);
   }
}


void loop() {
  int id = 0;
  while (true) {
    while (! Serial.available());
    char c = Serial.read();
    if (! isdigit(c)) break;
    id *= 10;    id += c - '0';
  }
  Serial.print("Принят ID:");
  Serial.println(id);
  while (!getFingerprintEnroll(id));
  }

 uint8_t getFingerprintEnroll(int id) {
 int p = -1;  Serial.println("Ждем палец реципиента...");
 while (p != FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK: Serial.println("Отпечаток принят.");
    break;
    case FINGERPRINT_NOFINGER: Serial.println("Не распознан.");
    break;
    case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Ошибка коммуникации.");
    break;
    case FINGERPRINT_IMAGEFAIL: Serial.println("Ошибка принятия изображения.");
    break;
    }
  }

  // Обработка
  p = finger.image2Tz(1);
  switch (p) {
    case FINGERPRINT_OK: Serial.println("Отпечаток распознан.");
      break;
    case FINGERPRINT_IMAGEMESS: Serial.println("Отпечаток загрязнен.");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Ошибка коммуникации.");
      return p;
    case FINGERPRINT_FEATUREFAIL: Serial.println("Отпечаток не распознан.");
      return p;
    case FINGERPRINT_INVALIDIMAGE: Serial.println("Изображение отпечатка повреждено.");
      return p;
  }
  Serial.println("Уберите палец со сканера...");
  delay(1000);
  p = 0;
  while (p!= FINGERPRINT_NOFINGER) {
    p = finger.getImage();
  }
 
  p = -1;
  Serial.println("Поместите палец на сканер...");
  while (p!= FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK: Serial.println("Отпечаток принят.");
      break;
    case FINGERPRINT_NOFINGER: Serial.print("Отпечаток не распознан...");
      break;  
    case FINGERPRINT_PACKETRECIEVEERR:      Serial.println("Ошибка пакета.");
      break;
    case FINGERPRINT_IMAGEFAIL: Serial.println("Отпечаток поврежден.");
      break;
    }
  }

  p = finger.createModel();
  if (p == FINGERPRINT_OK) {
    Serial.println("Отпечаток соответствует.");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Ошибка коммуникации.");    return p;
  } else if (p == FINGERPRINT_ENROLLMISMATCH) {
    Serial.println("Отпечатки пальцев не совпадают.");    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("Ошибка коммуникации.");
    return p;
  }
 else if (p == FINGERPRINT_BADLOCATION) {
    Serial.println("Не удалось сохранить модель отпечатка.");
    return p;
  }
 else if (p == FINGERPRINT_FLASHERR) {
    Serial.println("Ошибка записи в память.");
    return p;
  }
 }
}

Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.