Parmak İzi Okuma Uygulaması

Görseldeki parmak izi okuma uygulaması görülmektedir. UART haberleşme protokolü kullanılan sensör Arduino’da SoftwareSerial kütüphanesi kullanılarak 2 ve 3 numaralı pinlere bağlanmıştır. Görselde parmak izi sensörünün pin yapısı verilmiştir. Parmak izi kaydetme programıyla kaydedilen parmak izleri, parmak izi okuma programıyla test edilir. İşlemler seri ekran kullanılarak yapılır.

VCC: 3,3 V-5 V besleme.

GND: Topraklama pini.

TX: Veri çıkışı (3,3 V).

RX: Veri girişi (3,3 V).

#include <Adafruit_Fingerprint.h> // v2.1.0

SoftwareSerial seriIletisim(2, 3); // Arduino'da 2. pini Rx, 3. pini TX olarak kullan.

Adafruit_Fingerprint parmakIzi = Adafruit_Fingerprint(&seriIletisim);

byte id;

void setup() {
  Serial.begin(9600);
  Serial.println("\n\nParmak izi kaydetme.");

  parmakIzi.begin(57600); // Sensör seri portu.

  if ( parmakIzi.verifyPassword()) {
    Serial.println("Parmak izi sensörü bulundu.");
  } else {
    Serial.println("Parmak izi sensörü bulunamadı.(");
    while (1) {
      delay(1);
    }
  }

  Serial.println(F("Parmak izi sensörü parametreleri: "));
  parmakIzi.getParameters();
  Serial.print(F("Durum: 0x")); Serial.println( parmakIzi.status_reg, HEX);
  Serial.print(F("Sistem ID: 0x")); Serial.println( parmakIzi.system_id, HEX);
  Serial.print(F("Kapasite: ")); Serial.println( parmakIzi.capacity);
  Serial.print(F("Güvenlik seviyesi: ")); Serial.println( parmakIzi.security_level);
  Serial.print(F("Cihaz adresi: ")); Serial.println( parmakIzi.device_addr, HEX);
  Serial.print(F("Packet len: ")); Serial.println( parmakIzi.packet_len);
  Serial.print(F("Baud rate: ")); Serial.println( parmakIzi.baud_rate);
}

byte numaraOku(void) {
  byte num = 0;

  while (num == 0) {
    while (! Serial.available());
    num = Serial.parseInt();
  }
  return num;
}

void loop() {
  Serial.println("1-127 arası ID kayıt numarası giriniz: ");
  id = numaraOku();
  if (id == 0) { // 0 olmaz.
    return;
  }
  Serial.print("Kaydedilen ID: ");
  Serial.println(id);

  while (!  parmakIziKaydet() );
}

byte parmakIziKaydet() {

  int p = -1;
  Serial.print("Kayıt ID'si: "); Serial.println(id);
  while (p != FINGERPRINT_OK) {
    p = parmakIzi.getImage();
    switch (p) {
      case FINGERPRINT_OK:
        Serial.println("\nGörüntü alındı");
        break;
      case FINGERPRINT_NOFINGER:
        Serial.print(".");
        delay(200);
        break;
      case FINGERPRINT_PACKETRECIEVEERR:
        Serial.println("İletişim hatası.");
        break;
      case FINGERPRINT_IMAGEFAIL:
        Serial.println("Görüntüleme hatası.");
        break;
      default:
        Serial.println("Bilinmeyen hata.");
        break;
    }
  }

  p = parmakIzi.image2Tz(1);
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Görüntü işlendi.");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Görüntü karışık.");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("İletişim hatası.");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Parmak izi özellikleri bulunamadı.");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Parmak izi özellikleri bulunamadı.");
      return p;
    default:
      Serial.println("Bilinmeyen hata.");
      return p;
  }

  Serial.println("Parmağınızı kaldırınız.");
  delay(2000);
  p = 0;
  while (p != FINGERPRINT_NOFINGER) {
    p = parmakIzi.getImage();
  }
  Serial.print("ID "); Serial.println(id);
  p = -1;
  Serial.println("Aynı parmağı tekrar yerleştiriniz.");
  while (p != FINGERPRINT_OK) {
    p = parmakIzi.getImage();
    switch (p) {
      case FINGERPRINT_OK:
        Serial.println("\nGörüntü alındı.");
        break;
      case FINGERPRINT_NOFINGER:
        Serial.print(".");
        delay(200);
        break;
      case FINGERPRINT_PACKETRECIEVEERR:
        Serial.println("İletişim hatası.");
        break;
      case FINGERPRINT_IMAGEFAIL:
        Serial.println("Görüntü hatası.");
        break;
      default:
        Serial.println("Bilinmeyen hata.");
        break;
    }
  }

  p = parmakIzi.image2Tz(2);
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Görüntü oluşturuldu.");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Görüntü karışık.");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("İletişim hatası.");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Parmak izi özellikleri bulunamadı.");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Parmak izi özellikleri bulunamadı.");
      return p;
    default:
      Serial.println("Bilinmeyen hata.");
      return p;
  }

  Serial.print("Kayıt numarası: ");  Serial.println(id);

  p = parmakIzi.createModel();
  if (p == FINGERPRINT_OK) {
    Serial.println("Parmak izi eşleşti.");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("İletişim hatası.");
    return p;
  } else if (p == FINGERPRINT_ENROLLMISMATCH) {
    Serial.println("Parmak izi eşleşmedi.");
    return p;
  } else {
    Serial.println("Bilinmeyen hata.");
    return p;
  }

  Serial.print("ID "); Serial.println(id);
  p = parmakIzi.storeModel(id);
  if (p == FINGERPRINT_OK) {
    Serial.println("Kaydedildi!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("İletişim hatası.");
    return p;
  } else if (p == FINGERPRINT_BADLOCATION) {
    Serial.println("Bu alana kaydedilemedi.");
    return p;
  } else if (p == FINGERPRINT_FLASHERR) {
    Serial.println("Yazma hatası.");
    return p;
  } else {
    Serial.println("Bilinmeyen hata.");
    return p;
  }
  return true;
}

#include <Adafruit_Fingerprint.h> // v2.1.0

SoftwareSerial seriIletisim(2, 3); // Arduino'da 2. pini Rx, 3. pini TX olarak kullan.

Adafruit_Fingerprint parmakIzi = Adafruit_Fingerprint(&seriIletisim);

void setup() {
  Serial.begin(9600);
  Serial.println("\n\nParmak izi okuma.");
  parmakIzi.begin(57600); // Sensör seri portu.

  if (parmakIzi.verifyPassword()) {
    Serial.println("Parmak izi sensörü tespit edildi.");
  } else {
    Serial.println("Parmak izi sensörü tespit edilemedi :(");
    while (1) {
      delay(1);
    }
  }

  parmakIzi.getTemplateCount();
  Serial.print("Hafizada "); Serial.print(parmakIzi.templateCount); Serial.println(" parmak izi mevcut.");
  Serial.println("Lütfen parmağınızı okuyucuya yerleştiriniz.");
  Serial.println("Parmak izi tespit ediliyor...");
}

void loop() {
  getFingerprintIDez();
  delay(50);
}

byte getFingerprintID() {
  byte p = parmakIzi.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Görüntü kaydedildi.");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("Parmak izi yok");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("İletişim hatası.");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Görüntüleme hatası.");
      return p;
    default:
      Serial.println("Bilinmeyen hata.");
      return p;
  }

  p = parmakIzi.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Görüntü işlendi.");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Görüntü karışık.");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("İletişim hatası.");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Parmak izi özellikleri bulunamadı.");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Parmak izi özellikleri bulunamadı.");
      return p;
    default:
      Serial.println("Bilinmeyen hata.");
      return p;
  }

  p = parmakIzi.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Bir parmak izi ile eşleşti!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("İletişim hatası.");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Eşleşme bulunamadı.");
    return p;
  } else {
    Serial.println("Bilinmeyen hata.");
    return p;
  }

  Serial.print("Bulunan ID: "); Serial.print(parmakIzi.fingerID);
  Serial.print(" doğruluk seviyesi: "); Serial.println(parmakIzi.confidence);

  return parmakIzi.fingerID;
}

int getFingerprintIDez() {
  byte p = parmakIzi.getImage();
  if (p != FINGERPRINT_OK) return -1;

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

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

  Serial.print("Bulunan ID: "); Serial.print(parmakIzi.fingerID);
  Serial.print(" doğruluk seviyesi: "); Serial.println(parmakIzi.confidence);
  return parmakIzi.fingerID;
}

#include <Adafruit_Fingerprint.h> // v2.1.0

SoftwareSerial seriIletisim(2, 3); // Arduino'da 2. pini Rx, 3. pini TX olarak kullan.

Adafruit_Fingerprint parmakIzi = Adafruit_Fingerprint(&seriIletisim);

void setup() {
  Serial.begin(9600);
  Serial.println("\n\nParmak izi silme.");

  parmakIzi.begin(57600); // Sensör seri portu.

  if ( parmakIzi.verifyPassword()) {
    Serial.println("Parmak izi sensörü tespit edildi.");
  } else {
    Serial.println("Parmak izi sensörü tespit edilemedi :(");
    while (1) {
      delay(1);
    }
  }
}

byte numaraOku(void) {
  byte num = 0;

  while (num == 0) {
    while (! Serial.available());
    num = Serial.parseInt();
  }
  return num;
}

void loop() {
  Serial.println("1-127 arası silinecek ID kayıt numarası giriniz: ");
  byte id = numaraOku();
  if (id == 0) { // 0 olmaz.
    return;
  }

  Serial.print("Silinen ID: ");
  Serial.println(id);

  parmakIziSil(id);
}

byte parmakIziSil(byte id) {
  byte p = -1;

  p = parmakIzi.deleteModel(id);

  if (p == FINGERPRINT_OK) {
    Serial.println("Silindi.");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("İletişim hatası.");
  } else if (p == FINGERPRINT_BADLOCATION) {
    Serial.println("Bu alandan silinemedi.");
  } else if (p == FINGERPRINT_FLASHERR) {
    Serial.println("Hafızaya yazarken hata.");
  } else {
    Serial.print("Bilinmeyen hata: 0x"); Serial.println(p, HEX);
  }

  return p;
}

Benzer Temrinler & Yazılar

  • Alev Dedektörü Devresi

    Alev sensörleri ortamda alev algıladığında uyarı sinyali verir. Alev sensörü 760 nm – 1100 nm arasındaki dalga boyuna sahip ışığı (kızılötesi ışınım) tespit etmek için kullanılır. Görselde alev sensörü pin yapısı, Görseldeki ise alev dedektörü devresi görülmektedir. A0: Analog veri çıkışı. GND: Toprak pini. +: 3,3 V-5 V besleme. D0: Dijital veri çıkışı. const byte buzzer…

  • Uzaktan Kontrollü Araba Uygulaması

    Görseldeki joystick modülünün 10 bitlik ADC’de aldığı değerler verilmiştir. Görselde joystick modülünün pin yapısı görülmektedir. Görsel 3.84’teki verici ve Görsel 3.85’teki alıcı devrelerinde birer adet nRF24L01+ modül kullanılarak kablosuz iletişim uygulaması yapılmıştır. nRF24L01+ modülü Arduino ile haberleşirken SPI protokolünü kullanır. Joystickle x ve y ekseninde 0-1023 arasında okunan değerler map() foksiyonuyla -255 ile 255 arası…

  • Elle Uzaktan Kontrollü Araba Uygulaması

    Görseldeki eldiven üzerine yerleştirilmiş verici devresi görülmektedir. Görseldeki vericide kullanılan MPU6050 sensörü küçük deney borduna SDA pini A4, SCL pini A5’e gelecek şekilde takılmıştır. Görseldeki alıcı devresinde nRF24L01+ modül kullanılarak kablosuz iletişim uygulaması yapılmıştır. nRF24L01+ modülü Arduino ile haberleşirken SPI protokolünü, MPU6050 ivme sensörü I2C protokolünü kullanmaktadır. İvme sensörünün x ve y ekseninde -16384 ile…

  • Analog Giriş-Çıkış Uygulaması

    Görseldeki devrede potansiyometre 10 bitlik analog girişe bağlıyken LED 8 bitlik PWM çıkışına bağlıdır. Potansiyometreden alınan 0 -1023 arası değer doğrudan PWM çkışına verilirse(analogWrite(3, pot)) 8 bitlik PWM çıkışı potansiyometrenin bir tam dönüşünde dört tur dönecektir. map(pot, 0, 1023, 0, 255) fonksiyonu pot değişkeninden gelen 0 -1023 aralığını 0-255 aralığına eşler. void setup() {  Serial.begin(9600);…

  • NTC’yle Analog Giriş Uygulaması

    Görseldeki devrede NTC ve NTC’ye seri bağlı direnç gerilim bölücü olarak çalışmaktadır.Oda sıcaklığında (yaklaşık 25 °C) NTC’nin direnci yaklaşık 8 kΩ-10 kΩ’dur. NTC’nin sıcaklığı arttırıldığında direnci ve üzerine düşen gerilim azalır. Böylelikle 10 kΩ’luk sabit direnç üzerindekigerilim artar. Direnç üzerindeki bu gerilim analog giriş tarafından algılanarak değeri 1023’e doğruyaklaşır. Bu değer belirlenen referans değerini aştığında…

  • LCD Uygulaması

    Görseldeki LCD uygulamasında V0 ucuna bağlı dirençle ekran parlaklığı ayarlanmıştır. Bupine potansiyometre bağlanarak da LCD ekranın parlaklığı ayarlanabilir. LCD kütüphanesi dâhilîkütüphanelerde mevcuttur. Menülerden “Taslak  Library Ekle  LiquidCrystal” seçilerek kütüphane taslakta kullanılır. Aşağıdaki program LCD ekrana “Merhaba dünya.” yazdırmaktadır. Buprogramın bir örneğine menülerden “Dosya  Örnekler  LiquidCrystal  HelloWorld” adımlarını izleyerek de ulaşılır….

Bir Yorum Yazın

E-posta adresiniz yayınlanmayacaktır. Gerekli alanlar * ile işaretlenmiştir.