كيف تفتح باب الجراج باستخدام RFID
Arabic (العربية/عربي) translation by Ali Atwa (you can also view the original English article)
رقاقات الراديو اللاسلكية أوRFID هي تكنولوجيا مثيرة اكتسبت شعبيتها في السنوات الأخيرة. تسمح بقراءة البيانات من شريحه صغيره من بعد بطاقات RFID تستخدم عادة لتامين فتح الابواب وكتريف للحيوانات المفقوده ومؤخرا في الهواتف الذكية.
في هذا الدرس ساشرح اساسيات عمل القارئ وبعض انواعها المختلفه وكيفية ربط الباب بالقارئ.
اساسيات القارئ RFID
RFID هي تكونولوجيا رائعه تستغل الطاقه المتولده من القارئ لقراءة بيانات الكارد. لاحقا يتم ارسال اشاره من الكارد محتويه على البيانات.

يوجد العديد من قارئ البطاقات بعض البطاقات لديها قابليه لتخزين سعه قليله من البيانات وهناك انواع اخرى متطورة جداً حيث يحتاج القارئ إلى إشارة مفتاح تشفير قبل فك تشفير البطاقه وإرجاع محتوياتها. معظم البطاقات تحتوي على رقم تعريفي مميز ثابت لمزيد من المعلومات حول القارئ على ويكيبيديا
اشكال رقاقة RFID وتردداتها تختلف اختلافاً كبيرا. يوجد العديد من الانواع المعقده العديد من الهواتف الذكيه تقرا صيغ NFC و MIFARE
لهذا المشروع ساستخدم قارئ من نوع EM4100 125K Wiegand هذا النوع من القارئ يستخدم بطاقات رخيصة وهوالسبب الاساسي حيث انها متوافقه مع بعضها مع ذلك نوع القارئ غير مهم لهذا المشروع
مشروع RFID
في هذا المشروع ساستخدم قارئ واردوينو لفتح باب الجراج باستخدام بطاقه موثقه استخدام مكونات القارئ مهمة معقدة إلى حد ما، حيث أننا نستخدم لوحة قبله للفك لقدرتها على قراءة الرقم التعريفي وينقلها عبر منافذ البيانات. هذه هي طريق عمل معظم قارئ البطاقات هذا الدرس يستخدم لوحه سهلة الفك
لهذا الدرس ساستخدم لوحه قابله للفك لتجربة نموذج فتح الباب
مكونات المشروع
- اردوينو (استخدم اردوينو ذو فرق جهد 5 فولت من نوع اونو)
- قارئ بهوائي
- بطاقه للقارئ (استخدم بطاقه من نوع EM4100 125K Wiegand رخيصه و متوفره على ايباي)
- لوحه تجميع
- ليد عاديه
- مقاومه 220 اوم (احمر احمر بني)
- ريلاي (Aleph SD1A05AWJ)
- مكثف ()
- اسلاك ربط
كيف يعمل؟
العمليه الى حد ما سهله
اولا يقوم القارئ بقراءة البطاقه وارسال البيانات الى الاردوينو يقوم الاردوينو بقراءة الكود من البيانات ثم يقوم بمقارنتها مع الاكواد المخذنه سابقا اذا كانت البطاقه موثقه يقوم الاردوينو بارسال نبضه 5 فولت ليعمل الريلاي عندما يعمل الريلاي يقوم بفتح باب الجراج ثم يفتح باب الجراج
التنصيب
الخطوه الاولى تنصيب القارئ
باستخدام ورقة البيانات أو التعليمات على القارئ ،صل منفذ الموجب و السالب، والبيانات، وهوائي. بالاسفل مخارج منفذ القارئ سنستخدم المنفذ 2و3 لنقل البيانات مع لوحة القارئ و استخدام المنفذين 0و1 للوحه التحكم



اتبع هذه الحطوات لمعرفة كيفية ربط قارئ RFID
- صل منفذ الجهد السالب بالجهد السالب التابع للقارئ
- صل منفذ الجهد الموجب بالجهد الموجب التابع للقارئ
- صل منفذ رقم 2 التابع للاردوينو بمنفذ TX التابع لـ RFID
- صل منفذ رقم 3 التابع للاردوينو بمنفذ RX التابع لـ RFID
- صل الهوائي بالقارئ
- صل القطب الموجب للمبة بمنقذ الجهد الموجب للوحه
- صل المنفذ السالب التابع للليد بالمنفذ السالب من خلال مقاومه
شكل اللوحه منصب عليها القارئ



الخطوة الثانية: تنصيب الريلاي
اضافه الريلاي للوحة المدخلين الداخلين يقومان بتشغيل مغناطيس كهربائي لغلق الريلاي. يظهر الرسم التوضيحي كيف يسري التيار من النقطه 3 الى النقطه 7 لتشغيل الريلاي

- صل المنفذ 4 التابع للاردوينو للمنفذ 3 التابع للريلاي عندما يعمل الريلاي سيوفر له هذا المنغذ التيار اللازم لغلقه
- صل المنفذ 7 للريلاي بمنفذ الجهد السالب
- اضف صمام ثنائي بين كلا من المنفذين 3 و 7 ياستخدام شريط للمنفذ رقم 3 التابع للريلاي.
الريلاي متصل مع اللوحه.



الخطوه الثالثه برمجه الاردوينو
- انسخ الكود من نهايه هذا الدرس الكود موضح بتعليق في كل خطوه لكي يساعدك على فهمه في اعلى الكود يمكنك رؤية الاسطر التي يمكنك تعديلها لتغير رقم الكارد لقراءة الرقم التعريفي الخاص بالكارد قم تنفيذ الكود وحرك الكارد على القارئ لكي تستطيع نسخ الرقم التعريفي ووضعه بالكود
- اضغط upload من خلال واجهة الاردوينو
- قم بفتح Serial Monitor من خلال الضغط على CTRL SHIFT M او من خلال الواجهه من خلال قائمة Tools > Serial Monitor
setup()
في هذا المثال: 38400
يجب ان ترى شئ شبيه بهذا.
RFID GDO V0.1
Tag read: 3D00CFBB80
Checksum: C9 — passed.
3D00CFBB80
Bad tag. Go away.
انسخ والصق الرقم التعريفي الخاص بك (3D00CFBB80
في هذا المثال) في الكود. لاحظ، يمكن اضافه ارقام تعريفيه اخرى بشرط ان تكون بين اقواس ويتبعها فاصلة الرقم التعريفي الواحد شبيه بهذا
char* goodTags[] = {
"3D00CFBB80",
};
اضغط على upload ثم قم بفتح Serial Monitor من خلال الضغط على CTRL SHIFT M او من خلال الواجهه من خلال قائمة Tools > Serial Monitor
بعد تنفيذ الكود سترى شئ شبيه بهذا:
RFID GDO V0.1
Tag read: 3D00CFBB80
Checksum: C9 -- passed.
3D00CFBB80
Opening Door!
بالاسفل صورة لاختبار القارئ مع الريلاي الملتيميتر موصل مع المنفذ 1و9 للريلاي ليتحقق من اغلاق الريلاي



بتوصيل الاميتر يمكنك سماع صوت الصفارة مدللتا على الاستمراريه ثم يتراجع الصوت ويفتح الريلاي الدائرة
الخطوه الرابعه: فتح باب المراب
معظم ابواب المراب تعمل بمجرد الاتصال القريب. عندما تضغط الزر على الحائط تغلق الدائرة في باب المراب الخاص بي لدي لوحه تحكم حيث يوجد بها اسلاك تابعه لزر التوصيل. نرى هنا لوحه التحكم موضحه:



- صل المنفذ 1 و 9 من لوحه المثبت عليها الريلاي الى فاتح باب الجراج
- ضع الكارد بالقرب من القارئ
- شاهد الباب وهو يفتح
الان تاكدنا ان الباب يفتح باستخدام الكارد
الخطوه الخامسه التثبيت
- ثبت هوائي القارئ في الباب او الحائط بحيث يستطيع قاءة الكارد يستطيع القارئ قراءة الكارد من خلف المواد الصلبه حسب نوعها لذلك يمكن اخفاء القارئ خلف الجدار ربما تفشل بعض المحاولات لكي تجد المكان الملائم للقارئ
- قم بلحام الدائرة على لوحه دائمه
- ضع صندوق المشروع في صندوق ثم ثبته في الجراج
الكود المستخدم لهذا المشروع:
1 |
/*
|
2 |
RFID Garage door opener sample code by Ben Miller @VMfoo |
3 |
ReadKey function inspired and borrowed in part from the arduino playground |
4 |
example: http://playground.arduino.cc/Code/ID12 |
5 |
|
6 |
*/
|
7 |
|
8 |
// include the SoftwareSerial library so you can use its functions: |
9 |
#include //leaving the hardware serial ports for debugging
|
10 |
|
11 |
#define rxPin 2 //pin to receive data from RFID reader
|
12 |
#define txPin 3 //transmit pin for softserial initialization
|
13 |
#define doorPin 4 //pin to trigger relay
|
14 |
|
15 |
// set up a new serial port
|
16 |
NewSoftSerial RFIDPort = NewSoftSerial(rxPin, txPin); |
17 |
byte pinState = 0; |
18 |
|
19 |
// for incoming serial data
|
20 |
int incomingByte = 0; |
21 |
// character array for the value of the RFID tag
|
22 |
char tagValue[10];
|
23 |
|
24 |
//What tag values are authorized |
25 |
char* goodTags[] = { |
26 |
"3D00CFBB80",
|
27 |
//"######", //add another tag by replacing the #'s with your code and uncommenting this line |
28 |
}; |
29 |
// Calculate the number of tags in the array above
|
30 |
int tagCount = sizeof(goodTags)/sizeof(goodTags[0]); |
31 |
|
32 |
void setup() { |
33 |
// define pin modes for the opener relay
|
34 |
pinMode(doorPin, OUTPUT); |
35 |
|
36 |
// set the data rate for the SoftwareSerial port |
37 |
RFIDPort.begin(9600); |
38 |
Serial.begin(38400); //serial monitor rate |
39 |
Serial.println("RFID GDO V0.1"); //hello world |
40 |
}
|
41 |
|
42 |
void loop() { |
43 |
//loop and read
|
44 |
if ( RFIDPort.available() ) { |
45 |
if ( readKey() ) { |
46 |
//check tag value |
47 |
if(goodTag()){ //if this is allowed |
48 |
openDoor(); |
49 |
} else { |
50 |
Serial.println("Bad tag. Go away."); |
51 |
}
|
52 |
}
|
53 |
}
|
54 |
}
|
55 |
|
56 |
int goodTag() { |
57 |
for(int i=0; i < tagCount; i++) { //walk through the tag list |
58 |
if(strcmp(tagValue, goodTags[i]) == 0) { |
59 |
return 1; |
60 |
}
|
61 |
}
|
62 |
return 0; |
63 |
}
|
64 |
|
65 |
void openDoor(){
|
66 |
Serial.println("Opening Door!"); |
67 |
digitalWrite(doorPin, HIGH); |
68 |
delay(500); // half a second is plenty of time to let trigger the contact |
69 |
digitalWrite(doorPin, LOW); |
70 |
//to prevent "bounce" or secondary reads if the tag is still close to the reader |
71 |
//we delay 3 seconds |
72 |
delay(3000); |
73 |
}
|
74 |
|
75 |
int readKey(){
|
76 |
byte i = 0; |
77 |
byte val = 0; |
78 |
byte checksum = 0; |
79 |
byte bytesRead = 0; |
80 |
byte tempByte = 0; |
81 |
byte tagBytes[6]; // "Unique" tags are only 5 bytes but we need an extra byte for the checksum |
82 |
// char tagValue[10]; this is defined globaly to simplify code
|
83 |
|
84 |
if((val = RFIDPort.read()) == 2) { // Check for header |
85 |
bytesRead = 0; |
86 |
while (bytesRead < 12) { // Read 10 digit code + 2 digit checksum |
87 |
if (RFIDPort.available()) { |
88 |
val = RFIDPort.read(); |
89 |
|
90 |
// Append the first 10 bytes (0 to 9) to the raw tag value |
91 |
// Check if this is a header or stop byte before the 10 digit reading is complete |
92 |
if (bytesRead < 10) { tagValue[bytesRead] = val; } if((val == 0x0D)||(val == 0x0A)||(val == 0x03)||(val == 0x02)) { break; // Stop reading } // Ascii/Hex conversion: if ((val >= '0') && (val <= '9')) { val = val - '0'; } else if ((val >= 'A') && (val <= 'F')) { val = 10 + val - 'A'; } // Every two hex-digits, add a byte to the code: if (bytesRead & 1 == 1) { // Make space for this hex-digit by shifting the previous digit 4 bits to the left tagBytes[bytesRead >> 1] = (val | (tempByte << 4)); if (bytesRead >> 1 != 5) { // If we're at the checksum byte, |
93 |
checksum ^= tagBytes[bytesRead >> 1]; // Calculate the checksum... (XOR)
|
94 |
};
|
95 |
} else {
|
96 |
tempByte = val; // Store the first hex digit first
|
97 |
};
|
98 |
|
99 |
bytesRead++; // Ready to read next digit
|
100 |
}
|
101 |
}
|
102 |
// Send the result to the host connected via USB
|
103 |
if (bytesRead == 12) { // 12 digit read is complete
|
104 |
tagValue[10] = '\0'; // Null-terminate the string |
105 |
|
106 |
Serial.print("Tag read: ");
|
107 |
for (i=0; i<5; i++) {
|
108 |
// Add a leading 0 to pad out values below 16
|
109 |
if (tagBytes[i] < 16) {
|
110 |
Serial.print("0");
|
111 |
}
|
112 |
Serial.print(tagBytes[i], HEX);
|
113 |
}
|
114 |
Serial.println();
|
115 |
|
116 |
Serial.print("Checksum: ");
|
117 |
Serial.print(tagBytes[5], HEX);
|
118 |
Serial.println(tagBytes[5] == checksum ? " -- passed." : " -- error.");
|
119 |
Serial.println(tagValue);
|
120 |
Serial.println();
|
121 |
return 1; //return value to indicate that we read something
|
122 |
}
|
123 |
}
|
124 |
bytesRead=0;
|
125 |
return 0;
|
126 |
}
|
الخلاصه
في هذا الدرس وضحت مبادئ تكنولوجيا RFID وكيفية استخدامها في مشاريعك الخاصه. توجد شرائح لقراءة بيانات RFID ربما تكون صعبه على المبتدئين، لكن توجد شرائح منفصلة تسهل عملية استخدام RFID في الاردينو او الراسباري من خلال منفذ خارجي. بمجرد قراءة الرقم التعريفي من الكارد يتم نقل البيانات في هذا المثال نحن استخدمنا الريلاي لفتح باب المرآب.
بالاضافه:
- لقد درست الفروق المختلفه لتكنولوجيا RFID
- شرحت مبدئ عمل RFID
- تعلمت كيفية الربط بين الاردينو و قارئ RFID
- قراءة و كتابة البيانات على كارد RFID
- اضافة ريلاي لغلق الدائرة عند قراءة الكارد الصحيح
- ربط اسلاك الريلاي لباب المراب لتحكم به من خلال كارد RRID