ভাবো তো কেমন হতো যদি তোমার আঙ্গুলের স্পর্শেই খুলে যেতো তোমার রুমের দরজা? আর তোমার এই Touch-এ লুকিয়ে আছে তোমার পরিচয়, তোমার uniqueness। পৃথিবীতে আর কারো আঙুলের ছাপ তোমার মতো নয়, এমনকি তোমার এক আঙুলের সাথে অন্য আঙুলের ও নয়। তোমার ঠিক এই Unique Identity টাই আমরা ধরতে পারি একটি ছোট্ট Arduino board আর Simple Fingerprint Sensor দিয়ে।
আজকের এই ব্লগে আমরা প্রবেশ করবো Biometric Technology-র দুনিয়ায়, যেখানে তোমার আঙুলের ছাপই হবে Security System এর একমাত্র চাবি। আর তুমি যদি বানাতে চাও নিজের Smart Lock, Personal Attendance System, কিংবা এমন কোনো Technology যা শুধু তোমাকেই চিনবে—তাহলে Arduino আর Fingerprint Sensor Interfacing নিয়ে এই Journey তোমাকে দেবে এক ভিন্ন রকমের অভিজ্ঞতা।
ইন্টারফেইসিং
R307S মডেলের Fingerprint Sensor টি Arduino Uno মাইক্রোকন্ট্রোলারের সাথে ইন্টারফেইসিং এর জন্য প্রথমেই কিছু Requirements ফুলফিল করতে হবে।
Requirements
- Supporting Component Collection.
- Arduino IDE Install.
- Related Library Install.
Supporting Component Collection:
Arduino UNO ব্যবহার করে Fingerprint Sensor R307S ইন্টারফেইসিং করতে প্রয়োজনীয় কম্পোনেন্টের তালিকা নিচের Component List নামক টেবিলে Purchase Link সহ সংযোজন করা হলো। (যদি আগে থেকেই তোমার সংগ্রহে কম্পোনেন্টগুলো থেকে থাকে, তাহলে তুমি এই অংশটি Skip করতে পারো।)
Component List:
কম্পোনেন্টের নাম | পরিমান |
---|---|
Breadboard |
1 |
বিঃদ্রঃ TechShopBD’র স্টকে থাকা Fingerprint Sensor R307S এর প্যাকেজিং কন্টেন্ট হিসাবে, সেন্সরটির সাথে একটি 6 Pin JST Connector রয়েছে। তাই এ ক্ষেত্রে অতিরিক্ত কোন Jumper Wire প্রয়োজন নেই।
Arduino IDE Install:
যদি তোমার কম্পিউটারে আগে থেকেই Arduino IDE ইনস্টল করা থাকে, তাহলে এই ধাপটি সহজেই Skip করতে পারো। আর যদি না থাকে, তাহলে Arduino IDE ডাউনলোড করার জন্য সরাসরি এই লিংকে ভিজিট করো।
অফিসিয়াল ওয়েবসাইটের Software সেকশনে থাকা Download বাটনটি ক্লিক করার মাধ্যমে Arduino IDE এর সর্বশেষ সংস্করণটি ডাউনলোড এবং ইনষ্টল করে নাও।
Related Library Install:
এই স্টেপটি Fingerprint Sensor R307S এর জন্য সব থেকে Important Step তাই খুব খেয়াল করে প্রতিটি কাজ করতে হবে।
প্রথমে তোমার Arduino IDE টি Open করে নাও। তারপর Sketch>Include Library>Manage Library গিয়ে নিচের লাইব্রেরীটি সার্চ করে Install করে নাও!
- Adafruit Fingerprint Sensor Library
Connections
নিচের কানেকশন টেবিল অনুযায়ী Fingerprint Sensor R307S এবং Arduino Uno এর মধ্যে সংযোগ দাও।
Fingerprint Sensor to Arduino Uno Connections:
Code
নিচের কোডটি কপি করে Arduino IDE তে কপি করে, পেস্ট করো এবং সঠিক বোর্ড ও COM Port সিলেক্ট করে কোডটি মাইক্রোকন্ট্রোলারে আপলোড করে নাও।
/* ===================================================================== Arduino Uno + R307S Fingerprint System ------------------------------------------------------------ Features: - Enroll fingerprint with ID - Verify fingerprint (1:N search) - Delete fingerprint by ID - Show stored count - List all stored IDs - Serial menu-based interaction Hardware: - Arduino Uno - R307S Fingerprint Sensor (UART interface) - SoftwareSerial used on pins 2 and 3 Library: - Adafruit Fingerprint Sensor Library Developed by TechShop R&D Dept ===================================================================== */ #include <Adafruit_Fingerprint.h> #include <SoftwareSerial.h> // Arduino Uno pins for fingerprint sensor (you can change these) #define RX_PIN 2 // Arduino receives from sensor TX #define TX_PIN 3 // Arduino transmits to sensor RX // Create SoftwareSerial and Fingerprint objects SoftwareSerial mySerial(RX_PIN, TX_PIN); Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); // ---------- Helper Functions ---------- // Print a separator line void line() { Serial.println(F("--------------------------------------------------")); } // Display main menu void showMenu() { line(); Serial.println(F(" Fingerprint Menu ")); line(); Serial.println(F(" [1] Enroll Fingerprint")); Serial.println(F(" [2] Verify Fingerprint (1:N Search)")); Serial.println(F(" [3] Delete Fingerprint by ID")); Serial.println(F(" [4] Show Stored Count")); Serial.println(F(" [5] List All Stored IDs")); Serial.println(F(" [m] Show Menu Again")); line(); Serial.print(F("-->> Enter choice: ")); } // Wait until finger is removed from sensor void waitForFingerLift() { while (true) { if (finger.getImage() == FINGERPRINT_NOFINGER) break; delay(50); } } // Read a line from Serial with optional timeout String readLine(uint32_t timeout_ms = 10000) { uint32_t start = millis(); String s; while (millis() - start < timeout_ms) { if (Serial.available()) { s = Serial.readStringUntil('\n'); s.trim(); return s; } delay(5); } return ""; } // ---------- Core Operations ---------- // Enroll fingerprint with given ID uint8_t enrollFingerprint(uint8_t id) { int p = -1; // Check if ID already exists if (finger.loadModel(id) == FINGERPRINT_OK) { Serial.print(F("ID #")); Serial.print(id); Serial.println(F(" already contains a fingerprint.")); return -1; } line(); Serial.print(F("Enrolling Fingerprint at ID #")); Serial.println(id); Serial.println(F("Step 1/2: Place finger on sensor...")); // First scan while (true) { p = finger.getImage(); if (p == FINGERPRINT_NOFINGER) { delay(50); continue; } if (p == FINGERPRINT_OK) { Serial.println(F("Image #1 captured")); break; } else { Serial.print(F("Error ")); Serial.println(p); return p; } } if (finger.image2Tz(1) != FINGERPRINT_OK) { Serial.println(F("Image conversion failed")); return -1; } Serial.println(F("Remove finger...")); delay(800); waitForFingerLift(); // Second scan Serial.println(F("Step 2/2: Place same finger again...")); while (true) { p = finger.getImage(); if (p == FINGERPRINT_NOFINGER) { delay(50); continue; } if (p == FINGERPRINT_OK) { Serial.println(F("Image #2 captured")); break; } else { Serial.print(F("Error ")); Serial.println(p); return p; } } if (finger.image2Tz(2) != FINGERPRINT_OK) { Serial.println(F("Image conversion failed")); return -1; } // Create model p = finger.createModel(); if (p == FINGERPRINT_OK) { Serial.println(F("Fingerprints matched successfully!")); } else { Serial.println(F("Fingerprints did not match. Try again.")); return p; } // Store fingerprint p = finger.storeModel(id); if (p == FINGERPRINT_OK) { Serial.println(F("Fingerprint stored successfully!")); } else { Serial.print(F("Store failed, code: ")); Serial.println(p); return p; } return true; } // Verify fingerprint (1:N search) int verifyFingerprint() { int p; line(); Serial.println(F("Verification: Place finger on sensor...")); while (true) { p = finger.getImage(); if (p == FINGERPRINT_NOFINGER) { delay(50); continue; } if (p == FINGERPRINT_OK) break; else { Serial.print(F("Error ")); Serial.println(p); return -2; } } p = finger.image2Tz(1); if (p != FINGERPRINT_OK) { Serial.println(F("Failed to process fingerprint")); return -3; } p = finger.fingerFastSearch(); if (p == FINGERPRINT_OK) { Serial.print(F("Match found! ID #")); Serial.print(finger.fingerID); Serial.print(F(" Confidence: ")); Serial.println(finger.confidence); waitForFingerLift(); return finger.fingerID; } else { Serial.println(F("No match found.")); waitForFingerLift(); return -1; } } // Delete fingerprint with given ID uint8_t deleteFingerprint(uint8_t id) { line(); Serial.print(F("Deleting ID #")); Serial.println(id); uint8_t p = finger.deleteModel(id); if (p == FINGERPRINT_OK) { Serial.println(F("Deleted successfully!")); } else { Serial.print(F("Delete failed, code: ")); Serial.println(p); } return p; } // List all stored IDs void listAllIDs() { finger.getTemplateCount(); if (finger.templateCount == 0) { Serial.println(F("No fingerprints stored.")); return; } line(); Serial.print(F("Stored fingerprints: ")); Serial.println(finger.templateCount); Serial.println(F("Occupied IDs: ")); for (int i = 1; i < 128; i++) { if (finger.loadModel(i) == FINGERPRINT_OK) { Serial.print(" ["); Serial.print(i); Serial.print("] "); } } Serial.println(); } // ---------- Arduino Setup & Loop ---------- void setup() { Serial.begin(9600); mySerial.begin(57600); Serial.println(F("\n=== Arduino Uno + R307S Fingerprint System ===")); finger.begin(57600); if (finger.verifyPassword()) { Serial.println(F("Fingerprint sensor detected!")); } else { Serial.println(F("Could not find fingerprint sensor!")); while (1) delay(1); } finger.getTemplateCount(); Serial.print(F("Stored fingerprints: ")); Serial.println(finger.templateCount); showMenu(); } void loop() { if (!Serial.available()) return; String cmd = readLine(); if (cmd.length() == 0) return; if (cmd == "1") { // Enroll mode while (true) { Serial.print(F("Enter ID # to enroll (1-127) or 'q' to quit: ")); String s = readLine(); if (s == "q" || s == "Q") break; uint8_t n = s.toInt(); if (n > 0 && n < 128) enrollFingerprint(n); else Serial.println(F("Invalid ID!")); } } else if (cmd == "2") { // Verify mode while (true) { Serial.println(F("Press finger on sensor (or type 'q' to quit): ")); String s = readLine(2000); // check serial input for quit if (s == "q" || s == "Q") break; verifyFingerprint(); } } else if (cmd == "3") { // Delete mode while (true) { listAllIDs(); Serial.print(F("Enter ID # to delete or 'q' to quit: ")); String s = readLine(); if (s == "q" || s == "Q") break; uint8_t n = s.toInt(); if (n > 0 && n < 128) deleteFingerprint(n); else Serial.println(F("Invalid ID!")); } } else if (cmd == "4") { finger.getTemplateCount(); Serial.print(F("Stored fingerprints: ")); Serial.println(finger.templateCount); } else if (cmd == "5") { listAllIDs(); } else if (cmd == "m" || cmd == "M") { // just show menu again } else { Serial.println(F("Unknown option")); } showMenu(); // always return to menu when user exits a mode }
ফিচার ডেস্ক্রিপসন
আমি কোডিং এর মাধ্যমে ফিঙ্গারপ্রিন্ট সেন্সরের বিভিন্ন ফিচার যেমন Enrollment, Verification, Delete অপশন গুলো প্রেজেন্ট করেছি। তুমি সবগুলো ফিচার ট্রাই করে পারবে এবং কোডগুলোকে রেফারেন্স হিসেবে নিয়ে তোমার বিভিন্ন প্রোজেক্টে ব্যবহার করতে পারো।
-
Enrollment
Enrollment ফিচার ব্যবহার করে তুমি খুব সহজেই তোমার Fingerprint ID সেন্সরে ইনপুট দিতে পারবে। প্রোগ্রাম Run হওয়ার পর Serial Monitor অন করলে সেখানে [1] Enroll Fingerprint অপশন দেখতে পাবে। অর্থাৎ শুধুমাত্র 1 সেন্ড করলেই এটি Enable হয়ে যাবে।
এরপর তোমাকে একটি Index Number দিতে হবে। (তুমি 1 থেকে 127 যেকোনো Index এ স্টোর করতে পারো। আর সর্বোমোট তুমি 127 টি ID সেভ করতে পারবে)
সাথে সাথেই স্ক্রিনে ম্যাসেজ আসবে:
Step 1/2: Place finger on sensor…
এখন তুমি তোমার আঙুল সেন্সরের উপর রাখবে। কিছুক্ষণ পরে যখন Remove finger… ম্যাসেজ দেখাবে, তখন আঙুল সরিয়ে নিতে হবে।
এরপর আবার ম্যাসেজ আসবে:
Step 2/2: Place same finger again…
এখন একই আঙুল আবার সেন্সরের উপর রাখবে।
যদি দুইবারের Image সঠিকভাবে Match হয়, তাহলে দেখাবে:
Fingerprints matched successfully!
আর সাথেসাথেই তোমার Fingerprint Fingerprint stored successfully! ম্যাসেজের মাধ্যমে সেন্সরে তোমার ফিঙ্গারপ্রিন্ট Save হয়ে যাবে।
তুমি চাইলে একের পরে এক Index ইনপুট দিয়ে একাধিক Fingerprint Store করতে পারো। এই মেন্যু থেকে বের হতে চাইলে q লিখে Send করলেই Root Menu তে ফিরে যেতে পারবে
-
Verification:
Verification ফিচার ব্যবহার করে তুমি সহজেই তোমার Fingerprint সেন্সরে Save করা তথ্য (ফিঙ্গারপ্রিন্ট) যাচাই করতে পারো।
Serial Monitor থেকে [2] Verify Fingerprint (1:N Search) অপশন সিলেক্ট করার জন্য শুধু 2 সেন্ড করলেই এটি Enable হবে।
এরপর স্ক্রিনে ম্যাসেজ আসবে:
Verification: Place finger on sensor…
তখন তুমি আঙুল সেন্সরের উপর রাখবে।
যদি তোমার আঙুলের ছাপ আগে থেকে Save করা কোনো Fingerprint এর সাথে Match করে, তাহলে সাথে সাথেই স্ক্রিনে দেখাবে—
Match found! ID # Confidence:
তুমি চাইলে একের পরে এক Fingerprint ভেরিফাই করতে পারো। এই মেন্যু থেকে বের হতে চাইলে q লিখে Send করলেই Root Menu তে ফিরে যেতে পারবে।
-
Delete:
Delete ফিচার ব্যবহার করে তুমি খুব সহজেই সেন্সরে Save করা যেকোনো Fingerprint Remove করতে পারো।
Serial Monitor অন করলে তুমি দেখতে পাবে:
[3] Delete Fingerprint by ID
এবার শুধু 3 সেন্ড করলেই অপশনটি Enable হবে।
এরপর স্ক্রিনে দেখবে:
Stored fingerprints: 3
Occupied IDs:
[1] [2] [3]
Enter ID # to delete or ‘q’ to quit:
এখন তুমি যেই Fingerprint টি মুছতে চাও, সেই Index Number ইনপুট হিসেবে পাঠাও। উদাহরণস্বরূপ, যদি তুমি 2 পাঠাও, তাহলে সাথে সাথেই নিচের ম্যাসেজ পাবে—
Deleting ID #2
Deleted successfully!
অর্থাৎ, তোমার নির্বাচিত Fingerprint একদম Safe এবং Clean ভাবে ডিলিট হয়ে যাবে।
উপরে আমরা Arduino UNO এবং R307S Fingerprint Sensor ব্যবহার করে কীভাবে Enrollment, Verification, এবং Delete সহ বিভিন্ন ফিচার এক্সপ্লোর করা যায়, তা দেখলাম। তুমি এখন নিজেই Serial Monitor এর মাধ্যমে Fingerprint Add, Verify বা Delete করতে পারবে। এভাবে তোমার প্রোজেক্টে Fingerprint ভিত্তিক Smart Lock, Attendance System কিংবা অন্য কোনো Security System খুব সহজে ইমপ্লিমেন্ট করা সম্ভব।
সংক্ষেপে বলতে গেলে, Fingerprint Sensor আর Arduino’র এই কম্বিনেশন তোমার প্রোজেক্টকে শুধু স্মার্ট করবে না, বরং দেবে আরও বেশি Security এবং Reliability। এখন শুধু তোমার সৃজনশীলতা আর আইডিয়ার উপর নির্ভর করছে তুমি এটিকে কতদূর নিয়ে যেতে পারো।