الثلاثاء، 4 يونيو، 2013

تقنية تحديد الهوية باستخدام موجات الراديو RFID

"RFID"Radio Frequency Identification 

تقنية تحديد الهوية باستخدام موجات الراديو


سأتناول اليوم في هذه المقالة عن تقنية  تحديد الهوية باستخدام موجات الراديو ,حيث سنعطي تعريفاً شاملاً لهذه التقنية و للمعدات التي  سنستخدمها بالأضافة لتوصيلها و برمجتها ضمن بيئة الأردوينو البرمجية .

في البداية , ما هي تقنية الRFID ؟


هي عبارة عن تقنية تستخدم لتحديد الهوية باستخدام اشارات راديوية عبر كائن صغير مصنوع من السيلكون , و يوجد بداخلها دوائر ونين Resonance Circuit و هوائي Antenna  لارسال و استقبال الاشارات الراديوية " و في بعض الأنواع للتغذية أيضاً "

يختلف حول الوقت الحقيقي لظهور هذه التقنية , لكن أياً يكن ما يهمنا هو مما تتركب هذه الرقاقات ؟
1) جهاز الأرسال الذي يرسل البيانات .
2)القارىء الذي يحتوي المستقبل .
3)ذواكر داخلية "EEPROM " .
4)برامج حاسوب للوصول لقواعد البيانات .

يرسل جهاز الأرسال اشارات راديوية ذات تردد معين  يقوم المستقبل باستخدام دارة رنينمغناطيسي "تتكون من مكثف و ملف L&C " بضبط تردد الرنين بحيث تعمل عندما تتوافق تردد الاشارة المستقبلة و تردد الدارة .
 
للمزيد من المعلومات و الأستزادة عن هذه التقنية من موقع ويكبيديا  من هنا 

سأنتقل الآن للحديث عن تجربتنا اليوم و التي سأسستخدم فيها القارئ Innovation Reader ID12 

المواصفات القياسية لهذا القارئ موجودة بالجدول ادناه

وتوزيع أرجل  القارئ هو كالتالي :


ما سنحتاجه لتنفيذ هذه التجربة :

1) بطاقة أردوينو 
2) قارئRFID Innovation ID-12 
3) USB RFID Reader
4)RFID BreakOut SparkFun
5) محرك سيرفو Servo Motor
5) اسلاك توصيل
6)BreadBoard


في حال توافر ال RFID BreakOut SparkFun فيمكن توصيل الدارة كما في المخطط التالي 


و في حال توافر ال USB RFID Reader فقط فتكون التوصيلة كما في الشكل ادناه 




البرمجة :

يمكنك استخدام الكود ادناه :
//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//You should have received a copy of the GNU General Public License
// along with this program. If not, see http://www.gnu.org/licenses/

//****************************************************
//Name :Mohannad Rawashdeh .
//Date "25/5/2013 1:00pm
// Description: this code for RFID ID-12 
//Orginal Code taken from http://bildr.org/2011/02/rfid-arduino/
// reProgrammed, And schematic  for  http://www.genotronex.com                 
//****************************************************************

#include <Servo.h>
Servo Geno;

int RFIDResetPin = 12;

//Register your RFID tags here
char tag1[13] = "35021446583D";
char tag2[13] = "350214655610";
void setup(){
   Geno.attach(10);
  Serial.begin(9600);
  
//IF you are using SparkFun breakout , delete double slash in the 2 lines below
 // pinMode(RFIDResetPin, OUTPUT);
  //digitalWrite(RFIDResetPin, HIGH);
  pinMode(3, OUTPUT);//Green LED
  pinMode(4, OUTPUT);//Red led 
}

void loop(){

  char tagString[13];
  int index = 0;
  boolean reading = false;

  while(Serial.available()){

    int readByte = Serial.read(); //read next available byte

    if(readByte == 2) reading = true; //begining of tag
    if(readByte == 3) reading = false; //end of tag

    if(reading && readByte != 2 && readByte != 10 && readByte != 13){
      //store the tag
      tagString[index] = readByte;
      index ++;
    }
  }

  checkTag(tagString); //Check if it is a match
  clearTag(tagString); //Clear the char of all value
 // resetReader(); //reset the RFID reader
}

void checkTag(char tag[]){
///////////////////////////////////
//Check the read tag against known tags
///////////////////////////////////

  if(strlen(tag) == 0) return; //empty, no need to contunue

  if(compareTag(tag, tag1)){ // if matched tag1, do this
  digitalWrite(3,HIGH);
  digitalWrite(4,LOW);
    for(int pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    Geno.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  }
  for(int pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    Geno.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);  
  }
else{
  digitalWrite(3,LOW);
  digitalWrite(4,HIGH);  
  delay(300);
  digitalWrite(4,LOW);  

}
}

void lightLED(int pin){
///////////////////////////////////
//Turn on LED on pin "pin" for 250ms
///////////////////////////////////
  Serial.println(pin);

  digitalWrite(pin, HIGH);
  delay(500);
  digitalWrite(pin, LOW);
}

void resetReader(){
///////////////////////////////////
//Reset the RFID reader to read again.
///////////////////////////////////
  digitalWrite(RFIDResetPin, LOW);
  digitalWrite(RFIDResetPin, HIGH);
  delay(150);
}

void clearTag(char one[]){
///////////////////////////////////
//clear the char array by filling with null - ASCII 0
//Will think same tag has been read otherwise
///////////////////////////////////
  for(int i = 0; i < strlen(one); i++){
    one[i] = 0;
  }
}

boolean compareTag(char one[], char two[]){
///////////////////////////////////
//compare two value to see if same,
//strcmp not working 100% so we do this
///////////////////////////////////

  if(strlen(one) == 0) return false; //empty

  for(int i = 0; i < 12; i++){
    if(one[i] != two[i]) return false;
  }

  return true; //no mismatches
}



في حال استخدام التوصيلة الثانية , يمكنك استخدام هذا الكود في البرمجة .

ما سيختلف عنه اذا استخدمت التوصيلة الأولى هو أنك بحاجة فقط لتفعيل نمط التهيئة الذاتي Reset  في البرنامج .

و يمكن رؤية هذا الفيديو كتطبيق لهذا البرنامج .

0 التعليقات :

إرسال تعليق

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.