مقدمة

يُعبِّر مصطلح RFID عن تقتية التعرّف عبر التردُّد اللاسلكي (Radio Frequency IDentification) وهي تقنيةُ اتصالٍ لاسلكي تُستخدم لأدَّاء مهام مختلفةٍ في مجالاتٍ متعدِّدةٍ، مثل تتبُع الأفراد وإدارة صلاحيات الوصول (للأماكن أو الخدمات وما شابه) وإدارة دورة الإنتاج والتَّوزيع (Supply Chain Management) وتتبُع الكتب في المكتبات وأنظِّمة بوابات عبور الطريق (تُستخدم حواجزٌ معينةٌ في أطراف بعض طرق السيارات في البلدان الأوروبية ويُشترط دفع رسومٍ محدَّدةٍ مسبقاً لتجاوز البوابة وقطع الطريق) وما إلى ذلك.

 مجالات استخدام RFID، مصدر الصورة:  (howtomechatronics)
مجالات استخدام RFID، مصدر الصورة:  (howtomechatronics)

آلية عمل RFID

يتَّكون نظام RFID من مكونين رئيسيين:

  • جهاز مرسل مستجيب أو رقاقة موجودة على الكائن الذي نريد التعرف عليه.
  • جهاز إرسال واستقبال أو قارئ بطاقات RFID.
 مكونات RFID، مصدر الصورة: (howtomechatronics)
مكونات RFID، مصدر الصورة: (howtomechatronics)

يتَّكون قارئ RFID من:

  • مولِّد تردُّدات راديويَّة
  • وحدة تحكُّم
  • ملَّف (هوائيٌّ) يولِّد مجالاً كهرومغناطيسي عالي التردُّد

تكون الرُّقاقة عادةً مكوِّناً خاملاً وتتكون من هوائي وشريحة إلكترونية فقط، ويتولَّد جهد تغذية الرُّقاقة تحريضيَّاً في الهوائي عند اقترابها من المجال الكهرومغناطيسي لجهاز الإرسال والاستقبال، ثم تَستخرج الرُّقاقة الرسالة المرسلة من قارئ بطاقات RFID، وتستخدم تقنية التعديل بوساطة الحمل (Load Manipulation) لإعادة إرسال الرسالة إلى القارئ، إذْ يوصل حمل معين مع هوائي الرُّقاقة وبتكرار فصله ووصله بوساطة مفتاح (switch) يتأثَّر مقدار الطَّاقة التي يستهلكها الهوائي فنلحظُ انخفاضاً في الجهد الكلي، وتمثل هذه التغيرات في الجهد بواحدات وأصفار ثم ترسل البيانات الناتجة إلى القارئ.

 آلية نقل البيانات من الرقاقة إلى القارئ، مصدر الصورة: (howtomechatronics)
آلية نقل البيانات من الرقاقة إلى القارئ، مصدر الصورة: (howtomechatronics)

توجد طريقة أخرى لتبادل البيانات بين القارئ والرُّقاقة تسمى الاقتران عبر الموجات المرتدة  (backscattered coupling) إذْ تستخدم الرُّقاقة جزءاً من الطاقة المستقبلة لتوليد مجال كهرومغناطيسي آخر يلتقطه هوائيُّ القارئ.

استخدام RFID مع Arduino وبناء قفل باب

سنحتاج رقاقات معتمِدة على بروتوكول MIFARE وقارئ (MFRC522) RFID في هذا المشروع.

المكونات المطلوبة، مصدر الصورة:( howtomechatronics)
المكونات المطلوبة، مصدر الصورة:( howtomechatronics)

تتميزُ هذه الرُّقاقات بما يلي:

  • ذاكرة تبلغ 1 كيلوبايت وشريحة لإجراء العمليات الحسابية.
  • تردُّد التشغيل 13.56 ميغاهرتز.
  • تعمل ضمن مسافة تصل إلى 10 سم حسب الشكل الهندسي للهوائي.

ويمكن رؤيَّة الهوائي والشريحة المذكورين سابقاً عند وضع إحدى الرُّقاقات أمام مصدر للضُّوء.

الهوائي والشريحة في الرُّقاقة، مصدر الصورة: (howtomechatronics)
الهوائي والشريحة في الرُّقاقة، مصدر الصورة: (howtomechatronics)

تستخدم وحدة قارئ بطاقات RFID بروتوكول SPI للتواصُّل مع لوحة الأردوينو، ويجب الانتباه إلى وصل طرف تغذيتها VCC إلى 3.3 فولت، بينما تتحمل الأطراف البقيَّة جهد 5 فولت.

 توصيل وحدة قارئ RFID مع الأردوينو، مصدر الصورة:( howtomechatronics)
توصيل وحدة قارئ RFID مع الأردوينو، مصدر الصورة:( howtomechatronics)

أيضاً، يجب تنزيل مكتبة MFRC522 من موقع GitHub بمجرد توصيل القارئ، فهي تتضمن العديد من الأمثلة الجيدة لتعلُّم كيفيَّة استخدام هذه الوحدة، ثمَّ يمكن تحميل مثال “DumpInfo” واختبار عمل النظام.

نفتح بعدها شاشة العرض التسلسلي (Serial Monitor) لعرض معلومات الرُّقاقة عليها بعد استخراجها بوساطة القارئ عبر تقريب أحدهما من الآخر.

 المعلومات على شاشة الاتصال التسلسلي، مصدر الصورة:( howtomechatronics)
المعلومات على شاشة الاتصال التسلسلي، مصدر الصورة:( howtomechatronics)

يمكن ملاحظة رقم تعريف الرُّقاقة المميز(UID) إضافةً إلى محتويات الذاكرة ذات الحجم 1 كيلوبايت والمقسمة إلى 16 قطاعاً، وقد قُسِم كل قطاع إلى 4 كتل يمكن لكلٍّ منها تخزين 2 بايت من البيانات.

ملاحظة:

سنستخدمُ في هذا التطبيق رقم التعريف فقط UID دون استهلاكٍ للذاكرة.

التحكم في الوصول لقفل الباب بوساطة الأردوينو

 مكونات ومخطط الدارة للمشروع، مصدر الصورة: (howtomechatronics)
مكونات ومخطط الدارة للمشروع، مصدر الصورة: (howtomechatronics)

سنتعرف على مكونات هذا المشروع قبل البدء بكتابة البرنامج، إذ يبين الشكل السابق المكونات ومخطط الدَّارة.

سنستخدم:

  • حساس اكتشاف التقارب proximity sensor للتحقُّق مما إذا كان الباب مغلقاً أو مفتوحاً.
  • محرِّك سيرفو لآلية القفل.
  • شاشة عرض LCD.

خطوات تنفيذ المشروع:

 أولاً، يجب تعيين الرُّقاقة الرَّئيسية لينتقل النظام إلى وضع العمل، فإذا التقطنا إشارة رقاقة جديدة غير معرَّفة لن يسمح لنا النظام بالدخول، أما إذا التقطنا إشارة الرُّقاقة الرَّئيسية، فسندخل في وضع “البرمجة” مما يمنحنا صلاحية إضافة معرِّف الرُّقاقة الجديدة للنظام وهكذا نستطيع فتح الباب باستخدامها، مع العلم أنَّ الباب يقفل تلقائياً عند إغلاقه.

 الشكل النهائي للمشروع، مصدر الصورة:( howtomechatronics)
الشكل النهائي للمشروع، مصدر الصورة:( howtomechatronics)

نتبع نفس الطريقة لمنع أحدهم من الدخول بإلغاء تصريح رقاقته.

الكود البرمجي:

أولاً: تضمين مكتبات RFID والشاشة ومحرِّك السيرفو وتعريف بعض المتغيرات اللَّازمة للبرنامج أدناه وإنشاء حالات للمكتبات.

لتحميل الكود البرمجي اضغط هنا

في قسم Setup:

نهيئ الوحدات ونعين القيمة البدائية لمحرِّك السيرفو في وضع القفل، ثم نطبع رسالة استهلالية على الشاشة ونبقي النظام في حالة تأهب باستخدام حلقةWhile  حتى التقاط إشارة الرُّقاقة الرَّئيسية، إذ يحصل التابع المخصص getID() على معرف الرُّقاقة UID ويخزنه في الموقع الأول لمصفوفة myTags[0].

لتحميل الكود البرمجي اضغط هنا

عمل التابع getID:

يتحقق من وجود رقاقة جديدة بالقرب من القارئ، فإنْ وجدت ينفذ تعليمات حلقة for للحصول على معرِّف الرُّقاقة UID، ويساوي عدد تكرارات هذه الحلقة 4 تكرارات، إذ تملك الرقاقات المستخدمة رقم UID بحجم 4 بايت نخزنه ضمن متغيِّر نصيِّ string بوساطة التابع concat() وبأحرف إنجليزية كبيرة لتتوقف بعدها عملية قراءة البيانات.

لتحميل الكود البرمجي اضغط هنا

نستدعي التابع المخصص printNormalModeMessage ()  في نهاية قسم التهيئة Setup أي قبل الانتقال إلى تابع البرنامج الرئيسي main لطبع رسالة “Access Control” على الشاشة.

لتحميل الكود البرمجي اضغط هنا

أما في التابع الرئيسي فنفحص قيم حساس التقارب لتمييز حالة إغلاق الباب عن فتحه، وذلك عبر التعليمة التالية:

;int proximitySensor = analogRead(A0)

فإذا كان الباب مغلقاً، نقرب الرُّقاقة الجديدة ونفحصها لنحصل على معرِّفها باستخدام نفس الأسطر البرمجية الموجودة في تابع getID()، مع ملاحظة أنَّ البرنامج لن يتابع تنفيذ بقية التعليمات في حال عدم وجود رقاقة قريبة بسبب تعليمة “return” الموجودة ضمن if.

وعند فحص الرُّقاقة، نتحقق مما إذا كانت هي الرُّقاقة الرَّئيسية المسجلَّة ضمن النظام لتفعيل وضع “البرمجة” في هذه الحالة، وإلا إذا قُرِّبت رقاقة مرخصة سابقاً فتُلغى صلاحية دخول مستخدمها، أو إذا كانت الرقاقة غير معروفة فتُضاف إلى النظام ويخوَّلُ صاحبها بالدخول.

لتحميل الكود البرمجي اضغط هنا

عموماً، نتحقق من صلاحية الرقاقة القريبة بعد إلغاء تفعيل وضع البرمجة، لنصدر أمراً بفتح الباب أو إبقائه مغلقاً ثم ننتظر مقدار زمن إغلاق الباب ويعبِّر عن هذا التعليمات في نهاية تعليمة “else”، ثم نقفل الباب ونظهر رسالة وضع العمل مرة أخرى.

لتحميل الكود البرمجي اضغط هنا

الكود الكامل للمشروع:

لتحميل الكود البرمجي اضغط هنا


المصدر: هنا

ترجمة: إيليا سليمان، مراجعة: آلاء محمد آغا، تدقيق لغوي: بولا ابراهيم، تصميم: علي العلي، تحرير: محمد حنّان.