দরজার লক সাধারণত আমরা চাবি দিয়ে খুলি। লক যেকোনো কিছু হতে পারে। যেমন ধরুন তালা বা দরজায় বিল্ট-ইন লক বা অন্য কিছু, এক কথায় চাবি (Key) দিয়ে খোলা যায় এমন। কিন্তু বর্তমানে টেকনোলজির জগতে আমরা আরোও কয়েকগুণ বেশি এডভান্স টেকনোলজি ব্যবহার করে দরজার লক বানাতে পারি।
Micro-controller এরমধ্যে একটি জনপ্রিয় ডিভাইস হলো Arduino । এর সাহায্যে Fingerprint Door Lock বানানো যায়। যেখানে Fingerprint Sensor ব্যবহার করা হয়েছে। তো কথা না বাড়িয়ে প্রজেক্ট টি কিভাবে করতে হয় চলুন তার বিস্তারিত দেখে নেই।
প্রথমেই জেনে নেই আমাদের হার্ডওয়্যার টুলস কি কি লাগবে-
Serial |
Products Name |
Quantity |
01 |
Arduino UNO R3 (China) |
1p |
02 |
Arduino UNO R3 Transparent 3D Case |
1p |
03 |
Fingerprint Recognition Module (AS608) |
1p |
04 |
16 x 2 RGB I2C LCD Display |
1p |
05 |
DC 12V Solenoid Door Lock |
1p |
06 |
5V 1 channel Relay Module |
1p |
07 |
12V DC Power Source Adapter for Door Lock |
1p |
08 |
9V Rechargeable Battery (Sony 450 mAh) |
1p |
09 |
9V Battery Connector with Power Jack |
1p |
10 |
Battery Charger |
1p |
11 |
Male to Male jumper cables |
1 set |
12 |
Wooden Box for Fingerprint Door Lock Project |
1p |
13 |
ON/OFF Switch |
1p |
এবার উপরের হার্ডওয়্যার টুলস গুলাকে Assemble করতে নিচের সাহায্যকারী টুলস লাগবে-
Serial |
Products Name |
Quantity |
01 |
Soldering Iron (40W) |
1p |
02 |
Glue Gun |
1p |
03 |
Glue Gun Stick |
3p |
04 |
Solder Lead Mini |
1p |
05 |
Solder Resin |
1p |
06 |
Soldering Iron Stand |
1p |
07 |
White Scotch Tape |
1p |
এবার আসি আমাদের যেসব সফটওয়্যার এবং লাইব্রেরী লাগবে-
- Arduino IDE
Library:
- Adafruit Fingerprint Sensor Library
- Liquid Crystal LCD
এবার চলে আসি আসল কাজে। একে একে দেখে নিবো হার্ড ওয়্যার টুলস এর কানেকশন।
এথমেই দেখব Arduino UNO এর সাথে Optical Finger Reader এর কানেকশন-

এবার Arduino UNO এর সাথে LCD এর কানেকশন-
এবার সর্বশেষ কানেকশন Arduino UNO, Relay Module এবং Solenoid lock এর-

উপরের কানেশনগুলা দেখে দেখে করতে পারলে Congratulations আপনি Hardware Assemble-এ সফল হয়েছেন। এবার চলে আসি Software পার্টে।
প্রথমেই আপনি Arduino IDE ওপেন করে New File নিবেন। সেখানে নিচের কোডটি কপি পেষ্ট করে ছেড়ে দিবেন। তবে লাইব্রেরীগুলো অবশ্যই IDE তে Import করে নিবেন। তারপর কোড Compile করবেন।
#include <Adafruit_Fingerprint.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
#define mySerial Serial1
// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino (WHITE wire)
// comment these two lines if using hardware serial
SoftwareSerial mySerial(2, 3);
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
bool lastState = -1;
int relay1 = 8;
void setup() {
pinMode( relay1, OUTPUT);
digitalWrite(relay1, HIGH);
lcd.init();
Serial.begin(9600);
while (!Serial); // For Yun/Leo/Micro/Zero/...
delay(100);
Serial.println("\n\nAdafruit finger detect test");
// 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);
}
}
finger.getTemplateCount();
Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
Serial.println("Waiting for valid finger...");
displayWaitFinger();
}
void loop() { // run over and over again
int id;
id = getFingerprintIDez();
if ( id == -1 ) {
if ( lastState == 0) {
lastState = -1;
displayInvalidFinger();
delay(2000);
displayWaitFinger();
}
} else if ( id != -1) {
digitalWrite(relay1, LOW);
displayFingerOK();
delay(2000);
displayWaitFinger();
digitalWrite(relay1, HIGH);
}
delay(50); //don't ned to run this at full speed.
}
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK success!
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK converted!
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Did not find a match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
uint8_t p = finger.getImage();
Serial.println(p);
if ( p == 0 ) {
lastState = 0;
}
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1;
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;
lastState = 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 displayWaitFinger() {
lcd.clear();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("PUT YOUR FINGER");
lcd.setCursor(0, 1);
lcd.print("ON THE SCANNER");
}
void displayInvalidFinger() {
lcd.clear();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("FINGER");
lcd.setCursor(0, 1);
lcd.print("NOT FOUND!!!");
}
void displayFingerOK() {
lcd.clear();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("WELCOME ");
lcd.setCursor(0, 1);
lcd.print("DOOR UNLOCK");
}
এবার কোডটি আপলোড করে দিন। আর Enjoy করতে থাকুন আপনার প্রোজেক্ট টি।