Tags:

ArduinoでRFID NFCリーダーを使う簡単コード

By 文系なArduino 2014年6月14日土曜日

ArduinoでRFIDリーダーを使う

初心者でもわかる。ArduinoのRFIDリーダーの設定の仕方を超早わかり


ハードウェアを使ったある種の認証形態をプロジェクトに利用したいと思っているなら、この基盤を使ってみて下さい。パララックスRFID(電波による個体識別)リーダーの設定は、配線が4ヶ所だけで、ものすごく簡単です。ArduinoにRFIDカードからの情報を転送するためにシリアル・プロトコルを使います。今回は、Arudinoのシステムでの、このRFIDリーダーの使用を簡単に解説します。




ステップ1

まずは必要なコンポーネントを集める簡単なステップから始めましょう。必要なものは;

  • ジャンパーワイヤー4本
  • パララックスRFIDリーダー
  • Arduino開発ボード
  • ブレッドボード(オプション)
  • それだけです。では、次のステップへ…



















ステップ2

  • RFIDリーダーとArduinoを下記のピンマッピングの要領で配線します。
  • Arduino Rx = RFID SOUT
  • Arduino D2 = RFID Enable
  • Arduino GND = RFID GND
  • Arduino 5v = RFID VCC
  • D2はデジタルピン番号2番です。


ステップ3 

  • Arduinoにコードを書き込みます。
  • RFIDへの多種多彩なAnduinoコードがありますが、現在、確認した中ではベンジャミン・エッケルによるコードが一番です。コメントを日本語かして保管資料として彼のコードを載せておきます。


/**
 * author Benjamin Eckel
 * date 10-17-2009
 *
 * Minor edits by Riley Porter
 * 2-27-2011
 */
#define RFID_ENABLE 2   //RFID を利用可能にする
#define CODE_LEN 10      //RFID タグの文字列の最大値を設定
#define VALIDATE_TAG 1  //tagをゆうこうかすべき
#define VALIDATE_LENGTH  200 //maximum reads b/w tag read and validate
#define ITERATION_LENGTH 2000 //時間, in ミリ秒, ユーザが自分で調整する
#define START_BYTE 0x0A 
#define STOP_BYTE 0x0D
 
char tag[CODE_LEN];  
 
void setup() { 
  Serial.begin(2400);  
  pinMode(RFID_ENABLE,OUTPUT);   
}
 
void loop() {   //main Arduino Loopの開始
  enableRFID();   //RFIDカードの利用を可能にする
  getRFIDTag();   //タグを読むn
  if(isCodeValid()) {  //タグが有効か確認する
    disableRFID();  //RFIDをlow power modeにする。
    sendCode();     //コードをシリアルポートに送信
    delay(ITERATION_LENGTH);  //デバウンス?
  } else {
    disableRFID();  //不完全なコードの場合.. 
    Serial.println("ノイズを検知しました");  
  }
  Serial.flush();
  clearCode();
} 
 
/**
 * メモリースペースを空にする。 */
void clearCode() {
  for(int i=0; i<CODE_LEN; i++) {
    tag[i] = 0; 
  }
}
 
/**
 * タグをパソコンに送信する
 */ 
void sendCode() {
  //変数(コード)が有効か確認するためにここにreturnを加えた。    

Serial.print("TAG:");  

    char full_tag[10];
    for(int i=0; i<CODE_LEN; i++) {

      if (i == 9)  //Edits by riley porter
        Serial.println(tag[i]);  //最後のバイト数かどうかここで確認する
      else                       //これがもし新しい行を出力するならコードがごちゃごちゃになる
        Serial.print(tag[i]);  
      
    } 
}
 
/**************************************************************/
/********************   RFID Functions  ***********************/
/**************************************************************/
 
void enableRFID() {
   digitalWrite(RFID_ENABLE, LOW);    
}
 
void disableRFID() {
   digitalWrite(RFID_ENABLE, HIGH);  
}
 
/**
 * ブロックする function, RFID tag停止してからRFIDを読む.
 */
void getRFIDTag() {
  byte next_byte; 
  while(Serial.available() <= 0) {}
  if((next_byte = Serial.read()) == START_BYTE) {      
    byte bytesread = 0; 
    while(bytesread < CODE_LEN) {
      if(Serial.available() > 0) { //wait for the next byte
          if((next_byte = Serial.read()) == STOP_BYTE) break;       
          tag[bytesread++] = next_byte;                   
      }
    }                
  }    
}
 
/**
 * 次のタグが現在のタグと合致するか見るために一時停止する
 */
boolean isCodeValid() {
  byte next_byte; 
  int count = 0;
  while (Serial.available() < 2) {  //there is already a STOP_BYTE in buffer
    delay(1); //probably not a very pure millisecond
    if(count++ > VALIDATE_LENGTH) return false;
  }
  Serial.read(); //throw away extra STOP_BYTE
  if ((next_byte = Serial.read()) == START_BYTE) {  
    byte bytes_read = 0; 
    while (bytes_read < CODE_LEN) {
      if (Serial.available() > 0) { //wait for the next byte      
          if ((next_byte = Serial.read()) == STOP_BYTE) break;
          if (tag[bytes_read++] != next_byte) return false;                     
      }
    }                
  }
  return true;   
}



  • この時点で、RFIDリーダーはArduinoと通信でき、コードをいつでもハックすることができます。ご自分で素敵なプロジェクトを作ってみましょう。
  • ターミナルにタグをプリントする以外にRFIDリーダーを使用するためにハックするのがsendCode機能です。完全にコードを理解するには、データシートをすべて読んで下さい。こちらからダウンロードして下さい.

ステップ4 

  • やることはこれで全部です。これが基本的なスタブで、ArduinoでのRFIDリーダーを使って、独自の経験を追加する事をお進めします。


RFIDタグに接続して読み取る事が出来たら、もっと大きなプロジェクトにこれを組み入れる事も出来ます。RFID対応キャンディ保管庫やRFIDのガレージドア開閉などに利用してみては?他にも様々な事に利用可能なので、挑戦してみて下さい!



<この記事はMakeのこちらの記事超訳です。http://makezine.com/projects/using-the-parallax-rfid-reader-with-an-arduino/>

Post Tags:

文系なArduino

Aduinoとraspberry PiとWebサービスで食べている「文系」です。マレーシアとシンガポールを拠点としてITコンサルタントとしても活躍し、中国語教師としても活躍中の身でもあります。IT農業をシンガポールで始めようと計画中です。

No Comment to " ArduinoでRFID NFCリーダーを使う簡単コード "