في السنوات الأخيرة، أصبحت إجراءات التعرف الآلي (Auto-ID)منتشرة فى العدید من القطاعات مثل الصناعات، الخدمات، ومجال الشراء والتوزيع وأنظمة الحماية. حيث تستخدم هذه التقنية لتأمين معلومات كافية ومستمرة عن المنتجات الصناعية أو هوية الأشخاص.
في هذا المشروع، سيتم التعرف على هذه التكنولوجيا والتي تعتمد على تقنية بدأت بالإنتشار تسمى RFID. فما هذه التقنية، وماهو مبدأ عملها، وكيف يتم استخدامها ؟
القطع المطلوبة
الأدوات التي سيتم استخدامها لهذا المشروع :
لوح تجارب حجم متوسط (Half size breadboard )
اسلاك توصيل ذكر/ذكر (Jumper Wires Male Male)
تقنية RFID :
هي إختصار لمصطلح radio frequency identification وهو تعبيرعام للتقنيات التي تستخدام ترددات الراديو لأغراض تحديد وتتبع الهوية . حيث أنها تستخدم المجالات الكهرومغناطيسية لتحديد وتتبع العلامات (tags) المرفقة بالأشياء تلقائيا. حيث تحتوي هذه العلامات على معلومات مخزنة إلكترونيا.
وتستخدم RFID tags في العديد من الصناعات، على سبيل المثال، يتم تعليق RFID tag على السيارات أثناء الإنتاج ليتم استخدامها في تتبع خط الانتاج والتجميع، أو في مجال متابعة الامتعة بالمطار، كما تستخدم في أجهزة الحماية والانذار.
في هذا المشروع سيتم استخدام نظام RFID لفتح الباب. على سبيل المثال، السماح لأشخاص معينين بالدخول.
يستخدم نظام RFID :
العلامات (Tags) التي يتم تعليقها بالكائنات أو الأشياء . في هذا المثال، لدينا سلسلة المفاتيح والبطاقة الكهرومغناطيسية. كل علامة tag له هوية خاصه به (UID).
القارئ، جهاز ارسال وإستقبال، فهو يقوم بإرسال إشارات إلى الـ tag ثم يقوم بقراءة ردها.
المواصفات الأساسية للقارئ و بطاقات الـ tag :
مدخل الجهد :3.3v
التردد : 13.56MHz
تصميم لوح التجارب :
قم بتوصيل الدائرة كما هو موضح بالصورة التالية :
تم توصيل القارئ بالأردوينو كما يلي :
قارئ 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).
ثم قم بفتح الشاشة التسلسلية، يجب أن ترى شيئا مثل الشكل أدناه :
قم بتقريب بطاقة أو سلسلة المفاتيح RFID إلى القارئ. قم بجعلها أقرب حتى يتم عرض كافة المعلومات.
كما هو موضح بالصورة السابقة، هذه المعلومات التي يمكنك قراءتها من البطاقة، بما في ذلك 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 .