عناوين الدرس

نظام الدخول الآمن بإستخدام RFID

مبتدئ

في السنوات الأخيرة، أصبحت إجراءات التعرف الآلي  (Auto-ID)منتشرة فى العدید من القطاعات مثل الصناعات، الخدمات، ومجال الشراء والتوزيع وأنظمة الحماية. حيث تستخدم هذه التقنية لتأمين معلومات كافية ومستمرة عن المنتجات الصناعية أو هوية الأشخاص.

في هذا المشروع، سيتم التعرف على هذه التكنولوجيا والتي تعتمد على تقنية بدأت بالإنتشار تسمى RFID. فما هذه التقنية، وماهو مبدأ عملها، وكيف يتم استخدامها ؟

security-access-using-rfid-reader

القطع المطلوبة

الأدوات التي سيتم استخدامها لهذا المشروع :

security-access-using-rfid-reader

MFID-RC522 module

Half-size Breadboard

لوح تجارب حجم متوسط (Half size breadboard )

arduino uno r3

Arduino Uno R3

Jumper Wires Male/Male

 اسلاك توصيل ذكر/ذكر (Jumper Wires Male Male)

تقنية RFID :

هي إختصار لمصطلح radio frequency identification وهو تعبيرعام للتقنيات التي تستخدام ترددات الراديو لأغراض تحديد وتتبع الهوية . حيث أنها تستخدم المجالات الكهرومغناطيسية لتحديد وتتبع العلامات (tags) المرفقة بالأشياء تلقائيا. حيث تحتوي هذه العلامات على معلومات مخزنة إلكترونيا.

وتستخدم RFID tags  في العديد من الصناعات، على سبيل المثال، يتم تعليق RFID tag على السيارات أثناء الإنتاج ليتم استخدامها في تتبع خط الانتاج والتجميع، أو في مجال متابعة الامتعة بالمطار، كما تستخدم في أجهزة الحماية والانذار.

في هذا المشروع سيتم استخدام نظام RFID   لفتح الباب. على سبيل المثال، السماح لأشخاص معينين بالدخول.

يستخدم نظام RFID :

العلامات (Tags) التي يتم تعليقها بالكائنات أو الأشياء . في هذا المثال، لدينا سلسلة المفاتيح والبطاقة الكهرومغناطيسية. كل علامة tag له هوية خاصه به (UID).

security-access-using-rfid-reader

القارئ، جهاز ارسال وإستقبال، فهو يقوم بإرسال إشارات إلى الـ tag  ثم يقوم بقراءة ردها.

security-access-using-rfid-reader

 

المواصفات الأساسية للقارئ و بطاقات الـ tag :

مدخل الجهد :3.3v
التردد : 13.56MHz

تصميم لوح التجارب :

قم بتوصيل الدائرة كما هو موضح بالصورة التالية :

security-access-using-rfid-reader

تم توصيل القارئ بالأردوينو كما يلي :

قارئ RFID الأردوينو
SDA منفذ 10
SCK منفذ 13
MOSI منفذ 11
MISO منفذ 12
IRQ لا يتم توصيله
GND GND
 RST منفذ 9
 3.3v 3.3v (لاتقم بتوصيله إلى 5v)

قراءة البيانات من RFID tag :

قبل كتابة التعليمات البرمجية اللازمة، تحتاج إلى تحميل المكتبة الازمة لهذا المستشعر من هنـا.

ثم قم بفك الضغط عن المجلد المضغوط “rfid-master” وإضافة هذه المكتبة إلى المكتبات الموجودة ببرنامج الاردوينو. بعد القيام بذلك، قم بإعادة تشغيل برنامج الاردوينو الخاص بك.

بعد أن تم توصيل الدائرة، انتقل إلى ملف (File) >  أمثلة (DumpInfo < MFRC522 < (Examples ثم قم بتحميل التعليمات البرمجية.  هذا الكود سوف يكون متاح في واجهة الاردوينو (بعد تثبيت مكتبة RFID).

ثم قم بفتح الشاشة التسلسلية، يجب أن ترى شيئا مثل الشكل أدناه :

security-access-using-rfid-reader

قم بتقريب بطاقة أو سلسلة المفاتيح RFID إلى القارئ. قم بجعلها أقرب حتى يتم عرض كافة المعلومات.

security-access-using-rfid-reader

كما هو موضح بالصورة السابقة، هذه المعلومات التي يمكنك قراءتها من البطاقة، بما في ذلك UID الخاص بالبطاقة والذي تم تمييزه باللون الأصفر. حيث يتم تخزين المعلومات في الذاكرة التي يتم تقسيمها إلى segments  و blocks . لديك 1024 بايت من تخزين البيانات مقسمة إلى 16sectors.

قم بكتابة UID الخاص ببطاقتك لأنك ستحتاج إليه لاحقا.

البرمجة

في هذا المشروع سنقوم بقراءة  بطاقتين مختلفتين، فإذا كانت البطاقة تحمل UID  المسموح له بالدخول سيتم قبولها، وإلا سيتم رفضها.

قم بتحميل الكود التالي إلى الأردوينو :

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

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
 
void setup() 
{
  Serial.begin(9600);   // Initiate a serial communication
  SPI.begin();      // Initiate  SPI bus
  mfrc522.PCD_Init();   // Initiate MFRC522
  Serial.println("Approximate your card to the reader...");
  Serial.println();

}
void loop() 
{
  
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
 
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  
  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));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
  if (content.substring(1) == "1A 3A 3F D5") 
  {
    Serial.println("Authorized access");
    Serial.println();
    delay(3000);
  }
 
 else   {
    Serial.println("Access denied");
    delay(3000);
  }
} 

لمحة عن الكود :

اولا يتم تعريف منافذ الأردوينو اعتمادا على ما تم توصيله بالقارئ، ثم يتم إنشاء كائن MFRC522 :

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

في دالة ()setup ، يتم تهيئة شاشة الإتصال التسلسلي، والبروتوكول SPI المستخدم لنقل البيانات وتبادلها مع المتحكمات.

void setup() 
{
  Serial.begin(9600);   
  SPI.begin();      
  mfrc522.PCD_Init();   
  Serial.println("Approximate your card to the reader...");
  Serial.println();

}

في دالة ()loop، نقوم بقراءة قيمة الـ UID تدريجيا بإستخدام For loop، وطباعة القيمة بنظام الست عشر (Hex)، ويتم في كل مرة تحويل هذه القيمة إلى string وتخزينها في متغير concat لإستخدامه لاحقا في عملية المقارنة.

 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));
  }

ثم نقوم بعملية التحقق ما إذا كانت قيمة الـ UDI  التي تم قراءتها تساوي قيمة الـ UID المسموح لها بالدخول أو لا .
يجب تغيير الـ UID في الشرط (if (content.substring(1) == “Your UID” حسب ما تم كتابته سابقا في مرحلة قراءة البيانات.

if (content.substring(1) == "1A 3A 3F D5")
  {
    Serial.println("Authorized access");
    Serial.println();
    delay(3000);
  }
 
 else   {
    Serial.println("Access denied");
    delay(3000);
  }

وأخيرا، تم إنشاء نظام يتحكم بنظام الدخول من البوابة الإلكترونية حسب صلاحيات البطاقة الممنوحة للمستخدم بإستخدام تقنية الـ RFID .

X
تم إضافة المنتج إلى السلة بنجاح