RFID Door Lock using NodeMCU

মাসুদ এবার চতুর্থ বর্ষে উঠেছে। ইলেকট্রনিক্স নিয়ে কাজ করার আগ্রহ বিশ্ববিদ্যালয়ের শুরু থেকেই। সে ইতিমধ্যে মাইক্রোকন্ট্রোলার ভিত্তিক বেশ কিছু প্রোজেক্ট করেছে এবং বন্ধুমহলেও বেশ সাড়া ফেলেছে। মাসুদের এবারের প্রোজেক্ট RFID নিয়ে। সে মূলত MFRC-522 RFID Module নিয়ে কাজ শুরু করেছে, যা কিনা SPI কানেকশনের মাধ্যমে কাজ করে এবং ১৩.৫৬ মেগার হার্জের ফ্রিকুয়েন্সির কার্ড সাপোর্ট করবে। এবং এর সাথে থাকছে ESP8266 NodeMCU V2 Development Board with CP2102. এবারের প্রোজেক্টের উদ্দেশ্য হলো RFID Card দিয়ে একটি ঘরের ডোরকে লক-আনলক করা। যেহেতু RFID ডিভাইসটি ১৩.৫৬ মেগা হার্জ সাপোর্ট করে, সুতরাং একই ফ্রিকুয়েন্সির কার্ড ডিভাইসের উপর স্থাপন করলে কার্ডটি ডিটেক্ট করতে সক্ষম হবেন। যে সকল কার্ডগুলোকে এক্সেস দেওয়া থাকবে, শুধুমাত্র সেই কার্ডগুলোর দ্বারাই ডোর আনলক হবে।

 

এক্সেসবিহীন কার্ড দিয়ে আনলক করার চেষ্টা করলে একটি লাল LED জ্বলে উঠবে এবং ডোরটি লক থাকবে। অন্যদিকে এক্সেসেবল কার্ড ব্যবহারকারীর ক্ষেত্রে সবুজ LED জ্বলে উঠবে এবং ডোর আনলক হবে। এই দুটি অবস্থাতেই সাউন্ড শোনা যাবে। এই জন্য ব্যবহার করা হয়েছে Digital Buzzer Module. প্রোজেক্টির মধ্যে আরও ব্যবহার করা হয়েছে RGB Diffused LED Module 10mm. যার মধ্যে ৩টা কালার রয়েছে, লাল, নীল ও সবুজ। পাওয়ার সাপ্লাইয়ের ক্ষেত্রে ভালোমানের এডাপ্টার ব্যবহার করেছে মাসুদ, এর ফলে DC 12V Solenoid Electric Door Lock সঠিক কারেন্টের মাধ্যমে Unlock হতে পারে।

RFID MFRC522 Pinout সাপ্লাই ভোল্টেজ ৩.৩ ভোল্ট।

 12V Door Lock Driver ডোর লক ড্রাইভারটি খুবই গুরুত্বপূর্ণ অংশ। ১২ ভোল্টের পিনে অবশ্যই ১২ ভোল্ট সাপ্লাই দিতে হবে, অন্যথা DC 12V Solenoid Electric Door Lock টি কাজ করবে না। ১২ ভোল্টের সাপ্লাই কারেন্ট সর্বনিম্ন ১ এম্পিয়ার হতে হবে।  

প্রয়োজনীয় কম্পোনেন্টঃ

কম্পোনেন্টের তালিকা নিচে প্রদান করা হলো।
ক্রমিক নং  কম্পোনেন্টের নাম মডেল পরিমাণ লিংক
ESP8266 NodeMCU V2 Development Board with CP2102 WIR-00074 ১টি কম্পোনেন্ট লিংক
Micro USB Data Cable C&C-00259 ১টি কম্পোনেন্ট লিংক
MFRC-522 RFID Module MOD-00102 ১টি কম্পোনেন্ট লিংক
DC 12V Solenoid Electric Door Lock MIS-00318 ১টি কম্পোনেন্ট লিংক
12V Door Lock Driver MOD-00115 ১টি কম্পোনেন্ট লিংক
Digital Buzzer Module MOD-00208 ১টি কম্পোনেন্ট লিংক
RGB Diffused LED Module 10mm MOD-00202 ১টি কম্পোনেন্ট লিংক
Wall Power Adapter: 12VDC, 3A, 5.5×2.1mm Barrel Jack, Center-Positive MIS-00487 ১টি কম্পোনেন্ট লিংক
DC Power Jack Adapter Plug C&C-00256 ১টি কম্পোনেন্ট লিংক
১০ Male To Male Jumper Wire – Single C&C-00061  প্রয়োজনমত কম্পোনেন্ট লিংক
১১ Male To Female Jumper Wire – Single C&C-00071 প্রয়োজনমত কম্পোনেন্ট লিংক
১২ Breadboard (830 Point) MIS-00002 ১টি কম্পোনেন্ট লিংক
১৩ Star Screwdriver 3″ TOL-00350 ১টি কম্পোনেন্ট লিংক
যদি মনে করি সিলিকনের জাম্পার ওয়্যার ব্যবহার করবো, তাহলে নিচের লিংকগুলো অনুসরণ করতে হবে।
১০ Silicone Jumper Wire (Male to Male) C&C-00245 প্রয়োজনমত কম্পোনেন্ট লিংক
১১ Silicone Jumper Wire (Male to Female) C&C-00246 প্রয়োজনমত কম্পোনেন্ট লিংক

সার্কিট কানেকশনঃ

ডেমো কোডঃ

RFID Card UID Scan কার্ডের নাম্বার বের করতে নিচের কোডটি ব্যবহার করতে হবে।
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN  2  // D4
#define RST_PIN 0  // D3

MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
MFRC522::MIFARE_Key key;

// Init array that will store new NUID
byte nuidPICC[4];

void setup() {
  Serial.begin(9600);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522

  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }
}

void loop() {
  // Look for new cards
  if ( ! rfid.PICC_IsNewCardPresent())
    return;

  // Verify if the NUID has been readed
  if ( ! rfid.PICC_ReadCardSerial())
    return;

 for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
    Serial.println(F("The NUID tag is:"));
    Serial.print(F("In hex: "));
    printHex(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
    rfid.PICC_HaltA();
    rfid.PCD_StopCrypto1();
    Serial.println();
}

void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}

RFID Door Lock

#define SS_PIN 2       //D4
#define RST_PIN 0      //D3
#define blueLed 10     //SD3
#define audiobuzzer 15 //D8
#define greenLed 5     //D1
#define redLed 4       //D2

#include <SPI.h>
#include <MFRC522.h>
MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup(){
  Serial.begin(9600);
  SPI.begin();
  pinMode(greenLed, OUTPUT);
  pinMode(redLed, OUTPUT);
  pinMode(blueLed, OUTPUT);
  pinMode(audiobuzzer, OUTPUT);
  mfrc522.PCD_Init();
  digitalWrite(blueLed, HIGH);
  digitalWrite(greenLed, LOW);
  digitalWrite(greenLed, LOW);
  noTone(audiobuzzer);
}

void loop()
{
  // New cards scan
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
  }
  // if the card was read
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }
  //Read the UID of the card and write to the serial port
  Serial.println();
  Serial.print("UID Tag :");
  String content = "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
    content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  content.toUpperCase();
  Serial.println();
    if (content.substring(1) == "30 5B 94 0E")
    {
      access_granted();
    }
    else if (content.substring(1) == "26 69 12 F0")
    {
      access_granted();
    }
    else
    {
      access_denied();
    }
}

void access_granted(){
  Serial.println("Access Granted! ");
  digitalWrite(blueLed, LOW);
  digitalWrite(redLed, LOW);
  digitalWrite(greenLed,HIGH);
  tone(audiobuzzer, 3000);
  delay(100);
  noTone(audiobuzzer);
  delay(100);
  tone(audiobuzzer, 3000);
  delay(100);
  noTone(audiobuzzer);
  delay(5000);
  digitalWrite(greenLed,LOW);
  digitalWrite(blueLed, HIGH);
  delay(100);
  tone(audiobuzzer, 3000);
  delay(100);
  noTone(audiobuzzer);
  delay(50);


}

void access_denied(){
  Serial.println("Access Denied! ");
  digitalWrite(blueLed, LOW);
  digitalWrite(redLed, HIGH);
  tone(audiobuzzer, 3000);
  delay(300);
  digitalWrite(redLed, LOW);
  noTone(audiobuzzer);
  delay(100);
  digitalWrite(redLed, HIGH);
  tone(audiobuzzer, 3000);
  delay(300);
  noTone(audiobuzzer);
  delay(100);
  digitalWrite(redLed, LOW);
  digitalWrite(blueLed, HIGH);
}

 

আউটপুটঃ 

Authorized RFID Card ব্যবহার করার পর   যখন Unauthorized RFID Card ব্যবহার করা হয়।

সতর্কতাঃ

১। RFID মডিউলে ৩.৩ ভোল্টের অতিরিক্ত সাপ্লাই দেওয়া যাবেনা। ২। Door Lock ব্যাতিত অন্য কোন পিনে ১২ ভোল্ট সাপ্লাই দেওয়া যাবেনা। ৩। প্রতিটি কানেকশন মিটার দ্বারা পরিক্ষা করে, পাওয়ার সাপ্লাই করতে হবে। ৪। Door Lock কে ৫ ভোল্ট কিংবা ৩.৩ ভোল্ট দ্বারা পাওয়ার দেওয়া থেকে বিরত থাকা।    ]]>

Nur Mohammad
Nur Mohammad

Senior Research Engineer |
Techshop Bangladesh |
E-mail: nur@techshopbd.com

6 Comments

  1. Programming C language ছাড়া কি অন্য ল্যাঙ্গুয়েজ এ এই কন্ট্রোলার কাজ করবে?

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.