RFID এক্সেস কন্ট্রোল with ESP32

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

আবার অফিসে উপস্থিতির জন্য প্রতিদিনের হাজিরা এন্ট্রি করার জন্য এখন আর খাতায় লিখতে হয় না। দাগ টেনে In Time –  Out Time লিখতে হয়না। সব এখন ডিজিটাল মেশিনে এন্ট্রি হয়ে যায়। মাস শেষে অটোমেটিক রিপোর্ট পাওয়া যায় কয়েক ক্লিকে। এর কারণ হলো টাইম এটেন্ডেন্স মেশিন। 

প্রবেশের সময় এবং বাহিরের সময় এই মেশিনে পাঞ্চ করতে হয়। এর জন্য ব্যবহার করা হয়, পাঞ্চ কার্ড। যাকে আমরা RFID কার্ডও বলে থাকি। এই কার্ড দুই ধরণের ফ্রিকুয়েন্সির হয়ে থাকে, 13.56MHz  এবং 125KHz। চাইনিজ বেশ কয়েক ধরণের RFID কম্বোসেট রয়েছে যার সাথে এক বা একাধিক RFID কার্ড দেওয়া থাকে। তেমনি একটি RFID Reader MFRC522 যার ফ্রিকুয়েন্সি 13.56MHz।

এটি ডিজাইন করেছেন NXP Semiconductor। প্যাকেজের সাথে একটি Key Ring এবং একটি ট্যাগ দেওয়া থাকে। রিডারটি SPI  এবং I2C কমিউনিকেশন প্রটোকলে কাজ করে। SPI এর জন্য জন্য মোট ৫টি ডিজিটাল পিন ব্যবহার করতে হয়। SDA, SCL, MOSI, MISO এবং RST।

অপারেটিং ভোল্টেজ ৩.৩ ভোল্ট। স্ট্যান্ডবাই কারেন্ট ১০-১৩ মিলি অ্যাম্পিয়ার। MFRC522 রিডারটি প্রায় সব ধরণের মাইক্রোকন্ট্রলারের সাথে ব্যবহার করা যায়। বর্তমানে IoT ডিভাইসের মধ্যে ESP8266, ESP32 এইগুলোর সাথেও এই রিডারটি ব্যবহার হয়ে থাকে। এর জন্য সঠিক সার্কিট কানেকশন জানতে হবে। 

অ্যাপ্লিকেশন

rfid access

যে সকল কাজে RFID রিডার ব্যবহার করা হয়। 
  • টাইম এটেন্ডেন্স মেশিন। 
  • ইনভেন্টরি ম্যানেজমেন্ট সিস্টেম
  • অ্যাক্সেস কন্ট্রোল সিস্টেম

পিনের পরিচয়

কানেকশনের পূর্বে রিডারের পিনগুলোর নাম জেনে নিতে হবে। এরপর সার্কিট অনুযায়ী দেখে দেখে কানেকশন দিতে হবে। রিডারের IRQ পিনটি ব্যবহার করতে হবে না। সার্কিটের সাথে ডাটা কমিউনিকেশনের জন্য ৫ টি পিন এবং রিডারকে পাওয়ার জন্য ২টি পিন ব্যবহার করতে হবে। 

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

এক্সপেরিমেন্ট করতে যে সকল কম্পোনেন্ট প্রয়োজন হবে, তার নাম, পরিমাণ ও লিংকসহ তালিকা।
ক্রমিক নং  কম্পোনেন্টের নাম পরিমাণ লিংক
ESP32 Development Board 30 Pin ১টি কম্পোনেন্ট লিংক
Micro USB Data Cable ১টি কম্পোনেন্ট লিংক
Breadboard (830 Point) ১টি কম্পোনেন্ট লিংক
MFRC-522 RFID Module ১টি কম্পোনেন্ট লিংক
Jumper Wire প্রয়োজন মত কম্পোনেন্ট লিংক

এক্সপেরিমেন্টটি আরও সল্প সময়ে করতে ESP32 IOT Board অথবা ESP32 IOT Starter Kit ব্যবহার করতে পারেন। বোর্ড সম্পর্কে বিস্তারিত জানতে এখানে ক্লিক করুন

RFID-ESP32 IOT Board

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

ESP32 এর সাথে RFID রিডারের SPI কানেকশন। 

RFID with ESP32 CKT
ESP32 Development Board MFRC522 RFID
D18 SCL
D19 MISO
D23 MOSI
D25 SDA
D27 RST
3.3V 3.3V
GND GND

কোড

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

UID Scan

RFID কার্ড কিংবা ট্যাগের আইডি বের করে নিতে হবে শুরুতেই। যাদের এক্সেস প্রয়োজন শুধুমাত্র তাদের RFID কার্ডের আইডিগুলো ফাইনাল কোডের মধ্যে থাকবে।

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN  25  // ESP32 pin GIOP25
#define RST_PIN 27 // ESP32 pin GIOP27

MFRC522 rfid(SS_PIN, RST_PIN);

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

  Serial.println("Tap an RFID/NFC tag on the RFID-RC522 reader");
}

void loop() {
  if (rfid.PICC_IsNewCardPresent()) { // new tag is available
    if (rfid.PICC_ReadCardSerial()) { // NUID has been readed
      MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
      Serial.print("RFID/NFC Tag Type: ");
      Serial.println(rfid.PICC_GetTypeName(piccType));

      // print UID in Serial Monitor in the hex format
      Serial.print("UID:");
      for (int i = 0; i < rfid.uid.size; i++) {
        Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
        Serial.print(rfid.uid.uidByte[i], HEX);
      }
      Serial.println();

      rfid.PICC_HaltA(); // halt PICC
      rfid.PCD_StopCrypto1(); // stop encryption on PCD
    }
  }
}

আউটপুট-১

RFID-Serial Monitor

এক্সেস কন্ট্রোল কোড

#include <SPI.h>
#include <Wire.h>
#include <MFRC522.h>

#define SS_PIN 25
#define RST_PIN 27
#define Relay 2

MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup() {
  pinMode(Relay, OUTPUT);
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  digitalWrite(Relay, LOW);
}

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) == "89 82 D6 A2")
    {
      access_granted();
    }
    else if (content.substring(1) == "26 69 12 F0")
    {
      access_granted();
    }
    else
    {
      access_denied();
    }
}

void access_granted(){
   digitalWrite(Relay, HIGH);
   Serial.println("Access Granted!");
   Serial.println("Welcome Home");
   Serial.println("Door Open");
   delay(3000);
   digitalWrite(Relay, LOW);
   delay(1000);

}
void access_denied(){
   Serial.println("Access Denied! ");
   Serial.println("Invalid Card");
   digitalWrite(Relay, LOW);
   Serial.println("Door Closed");
   delay(1000);
 }

আউটপুট-২

]]>

Nur Mohammad
Nur Mohammad

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

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.