【Arduino】 非接触通信用の高集積リーダ/ライタ

LESSON 039

      非接触通信用の高集積リーダ/ライタを使う

 
○ 今回は高集積リーダ/ライタについてを説明します。
   
○ NFC(Near Field Communication「近距離無線通信」)通信方法は、デバイス同士を近づかざすかざす)ことで通信できる技術になります。日本では、電波法の微弱無線局の規定があり、この法律を守る必要があります。
 
○ 交通系ICカードやクレジットカード、スマートフォン端末などに多く搭載されており、私たちの生活で広く活用されているのです。
 
〇 アクセス制御の開発、電子錠、タイムレコーディング用の端末などでも用いられます。
  
○ 通信可能距離が短い
    通信可能距離は   NFC      10cm
              Wi-Fi    約100m
              Bluetooth  約10m
              赤外線通信     約30cm~1m
 
○ 通信速度が比較的遅い

    通信速度は     NFC    最大847kビット/秒
                                                                     (106k、212k、424k、847kビット/秒の4種類)
              Wi-Fi     最大6.9Gビット/秒
                                                Bluetooth      最大24Mビット/秒
 
○ NFCにはさまざまなメリットがあります。
            処理速度が速い
            双方向通信が可能
            セキュリティ面に優れている
 
○ RC522 RFID リーダーモジュールを適用する方法を学習します。
   


○ RC522 RFIDセット
        ・コンタクトレスリーダーチップMFRC522を使ったRFIDリーダーライタモジュール
     双方向で最高 848kbit / s のMIFARE®高速転送速度を使用した非接触通信をサポート
     動作電源  : 3.3V
     動作電流  : 13-26mA
     動作周波数 : 13.56MHz    
     電界強度  :   μV/m (未定)   
            ここが判らないため電波法の適応が判りません。
   ・カード型RFIDタグ
     対応可能なカードタイプ
       mifare1 S50、mifare1 S70、Mifare UltraLight、Mifare Pro、mifare DESFire
            ・キーホルダー型RFIDタグ
    ・ SPI( serial peripheral interface シリアル・ペリフェラル・インタフェース) を使用します。
           ・  電波法で処罰されるのは、違法な設備(機器)を販売した人ではなく使用した人であることに注意が必要です。

目 次

    • 構成部品
    • 配線図
    • スケッチ
    • 結果
    • まとめ
       
構成部品

Arduino​
USBケーブル​
RFID‐RC522 モジュール
RFID キーリングICタグ
RFID NFCカード
ジャンパー線 

      
配線図  
    GPIO 9  ⇒ RST
    GPIO 10 ⇒ SDA
    GPIO 11 ⇒ MOS
    GPIO 12 ⇒ MOSI
    GPIO 13 ⇒ SCK

     3.3V      ⇒  3.3V
  GND         ⇒  GND
   

                      
 
        

スケッチ《 test031》  

   
#include <SPI.h>
#include <MFRC522.h> 
int RST_PIN = 9; 
int SS_PIN = 10; 
MFRC522 mfrc522(SS_PIN, RST_PIN);  
void setup() 
{
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
}
void loop() 
{
   if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  String content= "";
 Serial.print("UID tag :");
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
  if (content.substring(1) == "F9 9B F3 97") //change here the UID of the card/cards that you want to give access
  {
    Serial.println(" - OK - ");
    Serial.println();
    delay(2000);
  }
 else   {
    Serial.println(" - × - ");
    Serial.println();
    delay(2000);
 }
} 

      

 
解説
 
 #include <SPI.h>
  SPIは、短距離用の簡便な同期通信のライブラリです。
       

  • #include <MFRC522.h>
    MFRC522用のライブラリです。
           
    MFRC522 変換(SSピン, RSTピン);
    MFRC522 の変数を設定
      
  • void setup() 内
    SPI.begin();

    SPI始動
      
    変数.PCD_Init();
    PCDの初期化
     
  • void loop() 内
    変数.PICC_IsNewCardPresent()

    カードを確認する
            
    変数.PICC_ReadCardSerial() 
    読取り可能かを確認する
      
    for (byte i = 0; i < mfrc522.uid.size; i++)
     {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? ” 0″ : ” “); —- ① 
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? ” 0″ : ” “));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));

     }

    カードのシリアル番号を取得する。
      
    if (content.substring(1) == “シリアル番号“)   —- ②
     {
     Serial.println(” – OK – “);
    else
     { Serial.println(” – × – “);
     }

    カードのシリアル番号の照合する。
    上の①で調べたシリアル番号を②に代入すれば - OK - が表示します。
           
    結果

     NFCカード のシリアル番号を登録しているため
     
      登録したNFCカードの時は - OK - が表示
      それ以外の場合は         × - を表示

         

         

         

    まとめ

    〇 NFC通信方法は双方向ではありますが、今回はカードの認証方法に留めました。
     
    ○ 電波法は販売者には責任は無く、使用者側に責任があります。ですので微弱無線適合マークの無い製品の使用は総務省の許可が必要になります。
       
    ○ Arduino を 学ぶ上で書籍やWebpageを参考に作っていますが、私なりに噛み砕いて書いているつもりですが、判らない点がありましたら連絡下さい。

    目次