Fingerprint scanner with arduino & GT-511C1R | ফিঙ্গারপ্রিন্ট স্ক্যানার

ফিঙ্গারপ্রিন্ট স্ক্যানারের প্রচলন অফিস-আদালতে অহরহই দেখা যায়। কর্মচারীদের আঙ্গুলের ছাপ দিয়ে উপস্থিতির রেকর্ড রাখা, অফিসের দরজা খোলা ইত্যাদি উদ্দেশ্যে ফিঙ্গারপ্রিন্ট স্ক্যানার ব্যবহার করা হয়। আমাদের জাতীয় পরিচয়পত্র তৈরীতে এবং মোবাইল সিম রেজিস্ট্রেশনের সময়ও আঙ্গুলের ছাপ নেওয়ার জন্য ব্যবহার করা হয় ফিঙ্গারপ্রিন্ট স্ক্যানার। আঙ্গুলের ছাপ দেখে মানুষকে সনাক্ত করার পদ্ধতিটি অন্যন্য পদ্ধতির চেয়ে অনেকক্ষেত্রে  নির্ভরযোগ্য। কারন, প্রতিটি মানুষের আঙ্গুলের ছাপ ইউনিক। একজনের আঙ্গুলের ছাপ দিয়ে আরেকজনের অ্যাটেন্ডেন্স দেওয়া বা অন্যকোনো কাজ করা সম্ভব নয়। এই টিউটোরিয়ালে আমরা একটি আরডুইনোভিত্তিক ফিঙ্গারপ্রিন্ট স্ক্যানার তৈরী করব।

প্রয়োজনীয় যন্ত্রপাতিঃ

প্রয়োজনীয় যন্ত্রপাতি পরিমাণ প্রডাক্ট লিংক
Arduino UNO-R3 1 এখানে ক্লিক করুন
Fingerprint Scanner – 5V TTL (GT-511C1R) 1 এখানে ক্লিক করুন
JST SH Jumper 4 Wire Assembly – 8″ 1 এখানে ক্লিক করুন
LCD Display (20X4) 1 এখানে ক্লিক করুন
Male Connector Single Row 16 pins এখানে ক্লিক করুন
Breadboard 1 এখানে ক্লিক করুন
Male to male jumpers 15 এখানে ক্লিক করুন
Female to female jumpers 4 এখানে ক্লিক করুন
Variable resistor 103 1 এখানে ক্লিক করুন
Resistor 10K 1 এখানে ক্লিক করুন
Push switch 1 এখানে ক্লিক করুন
Soldering iron 1 এখানে ক্লিক করুন
Solder lead 1 এখানে ক্লিক করুন
Logic level converter 1 এখানে ক্লিক করুন

পাওয়ার দেওয়ার জন্য ল্যাপটপ অথবা ১২ ভোল্ট অ্যাডাপটার ব্যবহার করা যাবে।

সার্কিটটি যেভাবে কাজ করবেঃ

একটি পুশ বাটন থাকবে যেটি প্রেস করলে ফিঙ্গারপ্রিন্ট সেন্সরটি Enroll মোডে প্রবেশ করবে। এনরোল মোডে একই আঙ্গুলের ছাপ মোট তিনবার চাওয়া হবে। তিনবার দেওয়ার পর একটি আঙ্গুলের ছাপ ফিঙ্গারপ্রিন্ট সেন্সরে সংরক্ষিত হবে। এনরোল মোডের বাইরে সাধারন অবস্থায় এলসিডিতে “Please press finger for your identity” মেসেজটি সবসময় উঠে থাকবে।ফিঙ্গারপ্রিন্ট সেন্সরে আঙ্গুল দিলে যদি ফিঙ্গারপ্রিন্ট সংরক্ষিত ফিঙ্গারপ্রিন্টের সাথে ম্যাচ না করে তাহলে Fingerprint not matched.Try again মেসেজটি এলসিডিতে দেখা যাবে। ম্যাচ করলে হৃদয়চিহ্ন এবং একটি শুভেচ্ছা বার্তাসহ  “Verifed Id: x(আইডি নং)”  লেখাটি দেখাবে।

সার্কিট ডায়াগ্রামঃ

ফিংগারপ্রিন্ট স্ক্যানারের পিনআউট নিম্নরূপ। ছবিটি স্পার্কফানের সৌজন্যে পাওয়া।

প্রথমে JST SH Jumper 4 Wire Assembly – 8″ কে ফিঙ্গারপ্রিন্ট সেন্সরের সাথে যুক্ত করি। কানেকটরের তারগুলোর সাথে চারটি মেল-মেল জাম্পার সল্ডার করি। এটা না করলেও বেশি সমস্যা নেই। আরডুইনোর সাথে মেল-মেল জাম্পারগুলো কানেক্ট করা সহজ।

ফিঙ্গারপ্রিন্ট সেন্সর ও আরডুইনোর মধ্যে নিচের কানেকশনটি সম্পন্ন করি।

Arduino UNO -R3 Fingerprint Scanner – 5V TTL (GT-511C1R)
3.3V VCC
GND GND
লজিক লেভেল কনভার্টারের সাথে আরডুইনোর নিচের কানেকশনটি সম্পন্ন করুন।
Arduino UNO Logic level converter
4 B0
5 B1
GND GND
লজিক লেভেল কনভার্টারের সাথে ফিঙ্গারপ্রিন্ট সেন্সরের কানেকশনটি সম্পন্ন করি।
Fingerprint sensor Logic level converter
Tx A0
Rx A1
উপরের দুটি চার্টের মোট কানেকশন বাস্তবে দেখাবে এরকমঃ লজিক লেভেল কনভার্টার ব্যবহার করব কেন?

আরডুইনোর আউপুট পিনগুলো ৫ভোল্ট আউটপুট দেয়। কিন্তু ফিঙ্গারপ্রিন্ট সেন্সরটি চলে ৩.৩ ভোল্টে। আরডুইনোর সাথে সরাসরি এর পিনগুলো কানেক্ট করলে যন্ত্রটি পুড়ে যাবার সম্ভাবনা আছে। তাই, প্রথমে লজিক লেভেল কনভার্টার দিয়ে আরডুইনোর ৪ ও ৫ নং পিনের আউটপুটকে ৩.৩ ভোল্টে নামিয়ে নিতে হবে। তারপর ৩.৩ ভোল্ট আউটপুট পিনদুটির সাথে ফিঙ্গারপ্রিন্ট সেন্সরের Tx ও Rx কে কানেক্ট করতে হবে।

এলসিডির সাথে ষোল পিনের মেল হেডার সল্ডার করতে হবে। তারপর আরডুইনোর সাথে নিচের কানেকশনটি সম্পন্ন করতে হবে।

Arduino UNO- R3 LCD
GND VSS,K, 2nd pin of the POT
5V VDD,A, 1st pin of the POT
3rd pin of the POT V0
GND RW
12 RS
11 E
6,7,3,2 D4,D5,D6,D7

পুশ বাটন ও আরডুইনোর মধ্যে নিচের কানেকশনটি সম্পন্ন করি।

Arduino UNO-R3 Push button
8 (grounded through 10K) Pin 1
5V Pin 2
আমাদের পুরো সেটআপটি দেখতে ছিল এরকমঃ

কোডঃ

প্রথমে এই লিংক থেকে লাইব্রেরি ডাউনলোড করুন এবং আরডুইনোতে ইন্সটল করুন।  নিচের কোডটি কম্পাইল করুন এবং আরডুইনোতে আপলোড করুন।

/* 
	Fingerprint scanner
*/


#include "FPS_GT511C1R.h"
#include "SoftwareSerial.h"
#include <LiquidCrystal.h>


// Hardware setup - FPS connected to:
//	  digital pin 4(arduino rx, connected  to B0 of logic level converter. A0 of logic level converter is connected to fps tx)
//	  digital pin 5(arduino tx, connected  to B1 of logic level converter. A1 of logic level converter is connected to fps rx)
//		this brings the 5v tx line down to about 3.3v so we dont damage our fps

const int buttonPin = 8;     // the number of the pushbutton pin
int buttonState = 0;  
const int rs = 12, en = 11, d4 = 6, d5 = 7, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

FPS_GT511C1R fps(4, 5);
char names[100];
byte heart[8] = { 0b00000, 0b01010,
                  0b11111, 0b11111,
                  0b11111, 0b01110,
                  0b00100, 0b00000
                 };



void setup()
{
  
  pinMode(buttonPin, INPUT);
  lcd.begin(20, 4);
  lcd.print("Hello ALia");
  lcd.createChar(1, heart);
	Serial.begin(9600);
	delay(100);
	fps.Open();
	fps.SetLED(true);


}


void Enroll()
{
	// Enroll test

	// find open enroll id
	int enrollid = 0;
	bool usedid = true;
	while (usedid == true)
	{
		usedid = fps.CheckEnrolled(enrollid);
		if (usedid==true) enrollid++;
	}
	fps.EnrollStart(enrollid);

	// enroll
	Serial.print("Press finger to Enroll #");
	Serial.println(enrollid);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("***Enroll Mode***");
  lcd.setCursor(0, 1);
  lcd.print("Press finger to");
  lcd.setCursor(0, 2);
  lcd.print("Enroll# ");
  lcd.setCursor(8, 2);
  lcd.print(enrollid);
  

	while(fps.IsPressFinger() == false) delay(100);
	bool bret = fps.CaptureFinger(true);
	int iret = 0;
	if (bret != false)
	{
		Serial.println("Remove finger");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Remove finger");
		fps.Enroll1();
		while(fps.IsPressFinger() == true) delay(100);
		Serial.println("Press same finger again");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Press same finger");
    lcd.setCursor(0, 1);
    lcd.print("again");
    
		while(fps.IsPressFinger() == false) delay(100);
		bret = fps.CaptureFinger(true);
		if (bret != false)
		{
			Serial.println("Remove finger");
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Remove finger");
      
			fps.Enroll2();
			while(fps.IsPressFinger() == true) delay(100);
			Serial.println("Press same finger  again");
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Press same finger");
      lcd.setCursor(0, 1);
      lcd.print("again");
			while(fps.IsPressFinger() == false) delay(100);
			bret = fps.CaptureFinger(true);
			if (bret != false)
			{
				Serial.println("Remove finger");
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Remove finger");
				iret = fps.Enroll3();
				if (iret == 0)
				{
                   
					Serial.println("Enrolling Successful");
                
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("Enrolling Successful");
          delay(3000);
				}
				else
				{
					Serial.print("Enrolling Failed with error code:");
					Serial.println(iret);
				}
			}
			else
			{
			Serial.println("Failed to capture third finger");
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Failed to capture");
			}
		}
		else
		{
		Serial.println("Failed to capture second finger");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Failed to capture");
		}
	}
	else
  {
	Serial.println("Failed to capture first finger");

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Failed to capture");
  }
}


void loop()
{
	  buttonState = digitalRead(buttonPin);
   if (buttonState == HIGH) {
    Enroll();
  }

 else {

  // Identify fingerprint test
  if (fps.IsPressFinger())
  {
    fps.CaptureFinger(false);
    int id = fps.Identify1_N();
    if (id <200)
    {
      Serial.print("Verified ID:");
      Serial.println(id);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Verified ID:");
      lcd.setCursor(13, 0);
      lcd.print(id);
      lcd.setCursor(0, 1);
      lcd.print("Welcome ");
      lcd.write(1);
      delay(3000);
    }
    else
    {
                                                 
      Serial.println("Finger not found");
      lcd.clear();
      lcd.setCursor(4, 1);
      lcd.print("Fingerprint");
      lcd.setCursor(4, 2);
      lcd.print("Not matched!");
      lcd.setCursor(5, 3);
      lcd.print("Try again");
      delay(1000);
    
    }
  }
  else
  {
    Serial.println("Please press finger");
    
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("Please press finger");
    lcd.setCursor(1, 2);
    lcd.print("For your identity");
    
  }
  
}

}

ফিঙ্গারপ্রিন্ট ডিলিট করবেন কিভাবে?

নিচের কোডটি আপলোড করলে ফিঙ্গারপ্রিন্ট স্ক্যানারের মেমোরি থেকে সকল ফিঙ্গারপ্রিন্ট ডিলিট হয়ে যাবে।
/* 
	How to delete all fingerprints from fingerprint sensor?
*/

#include "FPS_GT511C1R.h"
#include "SoftwareSerial.h"

// Hardware setup - FPS connected to:
//	  digital pin 4(arduino rx, fps tx)
//	  digital pin 5(arduino tx - 560ohm resistor fps tx - 1000ohm resistor - ground)
//		this brings the 5v tx line down to about 3.2v so we dont fry our fps

FPS_GT511C1R fps(4, 5);

void setup()
{
	Serial.begin(9600);
	delay(100);
	fps.Open();
	fps.SetLED(true);
  fps.DeleteAll();
}

void loop()
{


}

]]>

A. R
A. R

3 Comments

  1. ফিঙ্গারপ্রিন্ট ডিভাইস থেকে ইউএসবি পোর্ট দিয়ে কোনোভাবে আউটপুট হিসেবে সংখ্যা পাওয়া যাবে কি। অর্থ্যাৎ একটি এটেন্ডেন্স সফটওয়্যারে আরএফআইডি কার্ড ব্যবহার করা হয় এটিকে আরএফআইডি কার্ডের পরিবর্তে ফিঙ্গারপ্রিন্ট ডিভাইস ব্যবহার করতে চাই। আমার ৮-১০ টি ডিভাইস লাগবে। যদি রেডমেট বা কেউ তৈরী করে দিতে পারেন তবে এর দাম কত পরবে জানালে উপকৃত হবো। ভালো থাকুন প্রযুক্তির সাথে।

  2. Enroll mode asteii ase….. 14 ta enroll mode asche but “Please press finger for your identity” eta asche na

    • এনরোল মোডে এটা শুধু তখনই যাবে যখন বাটন প্রেস করার ফলে আরডুইনোর ৮ নং পিন হাই হবে। এটা এনরোল মোডে সারাক্ষন ঢুকে থাকার মানে হল ঐ পিনটা সারাক্ষনই হাই হয়ে আছে। কাইণ্ডলি আপনার সার্কিটের বাটনের পার্ট ভালোভাবে চেক করুন।

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.