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 কে ৫ ভোল্ট কিংবা ৩.৩ ভোল্ট দ্বারা পাওয়ার দেওয়া থেকে বিরত থাকা।
10 ta card uid add korbo kivabe
else if ব্যবহার করে একাধিক কার্ড সংযুক্ত করা যাবে।
12V Door Lock Driver কি আপনাদের কাছে আছে?
জ্বি আছে, 12V Door Lock Driver -টি টেকশপবিডির ওয়েবসাইটে দেখতে এই লিঙ্ক ভিজিট করুন।
Programming C language ছাড়া কি অন্য ল্যাঙ্গুয়েজ এ এই কন্ট্রোলার কাজ করবে?
MicroPython ব্যাবহার করতে পারবেন, NodeMCU, ESP32 এই কল কন্ট্রোলারে।