Arduino İle Parmak İzi Okuma ve Oled Ekrana Yazdırma

Merhaba arkadaşlar bir önceki yazımızda parmak izi sensörünün nasıl kullanıldığını öğrenmiştik. Bu yazımızda ise arduino ile parmak izi okuma ve oled ekrana yazdırma işlemini öğreneceğiz. Biz isim yazdıracağız ama isterseniz projeyi daha da geliştirerek resim de göstertebilirsiniz. Parmak izi sensörünün nasıl kullanıldığını bilmiyorsanız aşağıdaki linkten yazımızı okuyabilirsiniz.

Projede kullanılan malzemeler:

Arduino İle Parmak İzi Okuma ve Oled Ekrana Yazdırmak İçin Gerekli Malzemeler
Arduino İle Parmak İzi Okuma ve Oled Ekrana Yazdırmak İçin Gerekli Malzemeler

Arduino İle Parmak İzi Sensörü ve Oled Ekran Bağlantı Şeması

Aşağıdaki gibi bağlantılarımızı bağlayalım

Arduino İle Parmak İzi Sensörü ve Oled Ekran Bağlantı Şeması
Arduino İle Parmak İzi Sensörü ve Oled Ekran Bağlantı Şeması

0,96 inç Oled Ekran Kütüphanesini Yükleme

OLED ekranı kontrol etmek için adafruit_SSD1306.h ve adafruit_GFX.h kütüphanelerine ihtiyacınız var. Bu kütüphaneleri yüklemek için aşağıdaki talimatları izleyin.

  • Arduinı IDE’yi açın ve şu yolu takip edin. Taslak library Ekle > Kütüphaneleri Yönet. Kütüphane Yöneticisi açılmalıdır.
  • Arama kutusuna “SSD1306” yazın ve Adafruit’ten SSD1306 kütüphanesini kurun.
SSD1306 Kütüphanesi Kurulumu
  • Adafruit’ten SSD1306 kütüphanesini kurduktan sonra, arama kutusuna “GFX” yazıp kütüphaneyi kurun.
GFX Kütüphanesi Yükleme
  • Kütüphaneleri kurduktan sonra Arduino IDE’nizi yeniden başlatın.

Arduino İle Parmak İzi Okuma ve Oled Ekrana Yazdırma Kodu

Kodu yüklemeden önce, farklı kişilerden farklı parmak izleri kaydetmeniz gerekir. Yukarıdaki “Arduino IDE’de Dosya > Örnekler > Adafruit Fingerprint Sensor Library> Enroll” ‘u seçin, Birinci yazımızdaki talimatları izleyerek parmak izlerimizi kaydedin.

Ardından, parmak izi kimlikleri kayıtlı kişilerin adıyla eşleşecek şekilde kodu değiştirin – kodun açıklaması için sayfayı aşağı kaydırın.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int fingerprintID = 0;
String IDname;

void setup(){
  //Fingerprint sensor module setup
  Serial.begin(9600);
  // 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); }
  }

  //OLED display setup
  Wire.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  //displays main screen
  displayMainScreen();
}

void loop(){
  displayMainScreen();
  fingerprintID = getFingerprintIDez();
  delay(50);
  if(fingerprintID == 1 || fingerprintID == 3 || fingerprintID == 4 || fingerprintID == 5){
    IDname = "Sara";
    displayUserGreeting(IDname);            
  }  
  else if(fingerprintID == 2){
    IDname = "Rui";  
    displayUserGreeting(IDname);            
  }
}

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

void displayMainScreen(){
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(7,5);
  display.println("Waiting fingerprint");
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(52,20);
  display.println("...");  
  display.display();
  delay(2000);
}

void displayUserGreeting(String Name){
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0,0);
  display.print("Hello");
  display.setCursor(0,15);
  display.print(Name); 
  display.display();
  delay(5000);
  fingerprintID = 0; 
}

Kodun Açıklaması

Kod, OLED ekranına yazmak için gerekli kitaplıkları içe aktararak başlar ve display adlı bir Adafruit_SSD1306 nesnesi oluşturur.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

Ayrıca parmak izi sensörü için gereken kitaplıkları da içe aktarmamız gerekiyor: Adafruit_Fingerprint.h ve SoftwareSerial.h.

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

Aşağıdaki satır, yazılım serisini pin 2 ve 3’te ayarlar. Pin 2 RX olarak ve Pin 3 TX olarak.

SoftwareSerial mySerial(2, 3);

Ardından daha önce belirlediğimiz seri pinler üzerinde parmak adında bir Adafruit_Fingerprint nesnesi oluşturuyoruz.

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

Sonraki iki satır, parmak izi kimliğini ve kimlik adını tutacak değişkenler oluşturur.

int fingerprintID = 0;
String IDname;

Setup()

setup(), hem parmak izi sensörü hem de OLED ekranı başlatılır. Ayrıca parmak izi sensörünün başarılı bir şekilde bulunup bulunmadığını bilmemiz için seri monitöre bir mesaj yazdırıyoruz.

void setup(){
 //Fingerprint sensor module setup
 Serial.begin(9600);
 // 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); }
 }

//OLED display setup
 Wire.begin();
 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
 //displays main screen
 displayMainScreen();
}

Loop()

loop(), kod OLED ekranında ana ekranı görüntüler – bu, displayMainScreen() işlevinde yapılır. Ardından, kod sürekli olarak gelen parmak izlerini kontrol eder. Sensör kaydedilmiş bir parmak izi bulursa, Arduino ilgili kimliği parmak izi kimliği değişkenine kaydeder.

Ardından, parmak izinin karşılık geldiği kimliği kontrol etmek için kodun bir if/else ifadesi vardır. Aşağıdaki kod satırlarını ilgili kimlikler ve adlarla düzenlemelisiniz.

if(fingerprintID == 1 || fingerprintID == 3 || fingerprintID == 4 || fingerprintID == 5){
  IDname = "Sara";
  displayUserGreeting(IDname); 
} 
else if(fingerprintID == 2){
  IDname = "Rui";
}

Bazen sensör, farklı kimliklerde birkaç kez kaydedilirse bir parmak izini daha iyi tanır. Kimlik adını belirledikten sonra, OLED bir selamlama görüntüler. Bu, displayUserGreeting() işlevinde yapılır,

Evet arkadaşlar kodumuzu da tamamladığımıza göre test ettiğimizde aşağıdaki gibi gözükmesi gerekmektedir.

Arduino İle Parmak İzi Okuma ve Oled Ekranda Gösterme
Arduino İle Parmak İzi Okuma ve Oled Ekranda Gösterme