Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

Arduinо и RFID модул


Това е RFID четец за магнитни карти със сериен интерфейс на фирмата Parallax, който е в състояние да разпознае 1 099 511 627 77 различни идентификационни номера на карти. Благодарение на серийния интерфейс с характеристики 2400bps, 8 data bits, no parity, 1 stop bit, комуникацията с микроконтролер се осъществява лесно.

Модулът се захранва с 5V и ако напрежението е подадено успешно, идикаторен светодиод ще светне в зелено. Ако светодиода свети в червено, модулът е готов за разпознаване на карти. В такова състояние се преминава като на изхода /ENABLE се подаде ниско ниво (LOW).

Когато модулът е в такова състояние и в обхвата му е поставена магнитна карта, ID номерът и се предава серийно като поредица от 12 ASCII символа в следната последователност.

Поредицата от 10те символа, съставящи ID номера, започва с байт за начало (0x0A) и завършва с байт за край (0x0D). Чрез тези два допълнителни байта се проверява дали са предадени всички символи. Например при получаване на байтове 0x0A, 0x30, 0x46, 0x30, 0x31, 0x38, 0x34, 0x46, 0x30, 0x37, 0x41, 0x0D, ID номерът на магнитната карта е 0F0184F07A.

Пример

Даденият по-долу код, извежда в Serial Monitor ID номера на картата в обхвата на модула, ако той е получен успешно. Алгоритъмът брои получените байтове след байта за началo и преди байта за край, и ако броят им е 10 , приема номера за коректен. Serial Monitor трябва да е на 2400 baud.

Модулът се свързва към Arduino по следният начин:

 VCC -> 5V
 /ENABLE -> pin2 
 SOUT -> pin0 
 GND -> GND

Кода на програмата е следният:

/*

 Описание:
 * Комуникира с  RFID модула от parallax.com и извежда в   
   Serial Monitor ID номера на магнитната карта в обхвата му 


 Свързване:
 VCC -> 5V
 /ENABLE -> pin2 
 SOUT -> pin0 
 GND -> GND 

 Tihomir Trifonov (11-2011)
 email:tisho@inbox.com

 с подкрепата на Robotev.com

*/

//// променливи

int  val = 0; // получен символ
char ID[10];  // масив от символите
int i = 0;    // брояч

void setup() { // начални инициализации

    Serial.begin(2400);    // серийна комуникация с 2400bps 
    pinMode(2,OUTPUT);     // пин2 става изходен
    digitalWrite(2, LOW);  // активира RFID модула
}  

 void loop() { // програмен цикъл

  if(Serial.available() > 0) { // проверява за налични данни

    if((Serial.read()) == 0x0A) { // проверява получен ли е байт за начало

      i = 0; // нулира брояча

      while(i < 10) { // прочита 10 байта

        if( Serial.available() > 0) { // проверява за налични данни 

          val = Serial.read(); // прочита един байт

          if( val == 0x0A || val == 0x0D ){  // проверява получен ли е ..
                                             // байт за начало или край            
              break;                         // прекъсва четенето         
          } 

          ID[i] = val; // добавя символа към масива       
          i++;         // увеличава брояча                  
        } 
      } 

      if(i == 10) { // проверява получени ли са 10 символа

        Serial.print("ID: "); // извежда последователността  
        Serial.println(ID);   // от символи в Serial Monitor      
      } 

      digitalWrite(2, HIGH); // деактивира модула                  
      delay(1500);           // изчаква 1500ms                      
      digitalWrite(2, LOW);  // активира модула                 
    } 
  } 
}