Arduinoその他工作

Arduino+RFIDリーダー/ライターで身近なスマートフォンやSuicaを認証デバイスに使ってみよう!

RFタグRFIDといった単語を耳にしたことはありますか?
RFタグはキーホルダーやICカード、シールなどの形状をした記憶媒体です。内蔵された小型のチップにID番号や名前、住所、商品情報などを書き込めます。
このRFタグと、内部のデータを読み書きするリーダー/ライターを総称してRFIDシステムと呼びます。

RFIDで使用するリーダー/ライターは低価格のものもあり電子工作に組み込むことができます。
そこで本記事ではRFIDシステムの概要やリーダー/ライターを選ぶ際の注意事項、ArduinoからRFタグを読み書きする方法を解説します。

how-to-program-rfid-card-for-projects-01

キーホルダー型RFタグ

 

目次

  1. RFIDシステムの仕組み
  2. RFIDは電波法に則って運用する必要がある
  3. RFIDで使われる規格
    1. 3.1. Mifare(マイフェア)
    2. 3.2. FeliCa(フェリカ)
    3. 3.3. NFC(エヌエフシー)
  4. Arduinoに接続するリーダーは? RFID-RC522(MFRC522)? RC-S620S(FeliCa)?
    1. 4.1. RFID-RC522(MFRC522)
    2. 4.2. RC-S620S(FeliCa)
  5. 準備
  6. スケッチ
  7. 配線
  8. まとめ

 

1. RFIDシステムの仕組み

RFタグは小型のチップを内蔵した、キーホルダーやICカード、シールなどの形状をした記憶媒体です。チップには少量のデータを記憶する上書き可能な領域があり、ID番号や名前、住所、商品情報などの情報を記憶しています。RFタグ内のデータは微弱電波を使った「リーダー/ライター」で読み書きします。
RFタグと内部のデータを読み書きするリーダー/ライターを総称した呼び方がRFIDです。また、RFタグは「ICタグ」と呼ばれる場合もあります。

ArduinoでもArduinoボードRFIDに対応したリーダー/ライターを接続することで、スケッチからRFタグ内のデータを読み書きできるようになります。

 

2. RFIDは電波法に則って運用する必要がある

RFIDは微弱電波を使用したシステムなので、日本では電波法の規定に則って運用する必要があります。
もちろん電子工作でも例外ではありません。
RFIDで使用されるリーダー/ライターは、電波法で「高周波利用設備」に該当し「誘導式読み書き通信設備」と呼ばれます。

詳細は総務省のWebページ、高周波利用設備の中の高周波利用設備とはに記載されています。
このWebページには
「高周波利用設備から漏洩する電波が他の無線通信に妨害を与えるおそれがあるため、一定の周波数又は電力を使用する高周波利用設備を設置しようとする者は、設置する前に許可を受ける必要があります。」(上記Webページより抜粋)
とあるため、RFIDのリーダー/ライターを使用するには総務省の許可が必要です。

ただし、同Webページの[許可を受ける必要がない設備] ≫ [一定の要件を満たしている次の通信設備]には
「誘導式読み書き通信設備であって、その設備から3mの距離における電界強度が500μV/m(≒54dBμV/m以下)のもの。」(上記Webページより抜粋)
とあるので、RFIDのリーダー/ライターでも出力する電波が弱い場合は許可なく利用できます。

しかし電子工作の初心者にとって、正確な電界強度を測定して電波法に違反しないことを証明するのは難しそうです。
そこで、手軽に利用するには同Webページの次の項目にある
「誘導式読み書き通信設備であって、総務大臣の型式指定を受けたもの」(上記Webページより抜粋)
を選定すれば良いということになります。

この型式指定を受けた製品には
「総務省指定 第※号」」(※は指定番号)
と書かれたマークが添付されています。またマークの代わりに「MIC/KS 総務省指定 第※号」と表記される場合もあるようです。
ちなみに型式指定を受けることができるのは日本人、または日本国内のメーカーや輸入業者のみです。

 

3. RFIDで使われる規格

RFIDは日本語で「近距離無線通信を用いた自動認識技術」と訳されるように、微弱電波を使ってRFタグの読み書きを行うシステムの総称です。
そのため「RFIDに対応している」と謳っていても、全てのRFタグとリーダー/ライター間でデータの読み書きができるわけではありません。
RFIDのシステムを構築する際は、RFタグとリーダー/ライターが対応する規格を一致させる必要があります。
現在、世界中で使用されているRFIDの規格には「Mifare」「FeliCa」「NFC」の3種類があります。

3.1. Mifare(マイフェア)

Mifare(マイフェア)は、フィリップスの半導体部門(現在は「NXPセミコンダクターズ」)が開発した規格です。
日本以外の諸外国ではRFIDの代名詞のようなシェアを誇り、オフィスの入退出管理や交通系ICカード、電子マネーなどで幅広く利用されています。
暗号化機能を最小限にとどめることで、低価格で大量生産できる特徴があります。
Mifareの開発元 フィリップス(NXPセミコンダクター)からはMFRC522と呼ばれるICが発売され、このICを使うことでリーダー/ライターが手軽に製作できることから、「MFRC522」ははMifareの別名のように使われます。

3.2. FeliCa(フェリカ)

FeliCa(フェリカ)はソニーが開発し、日本で最も普及しているRFID規格です。高機能な暗号化機能や速い通信速度などの特徴から、Suicaなどの交通系カードやEdyなどの電子マネーに採用されています。
Mifareと比較して高性能な規格ですが、その分、コストが高くなるデメリットがあります。

3.3. NFC(エヌエフシー)

NFC(エヌエフシー、Near Field Communication)はソニーとフィリップス(現NXPセミコンダクターズ)が合同で開発した規格です。NFCにはいくつかの意味がありますが、ここでは狭義のNFCについて解説します。
NFCは、フィリップスのMifare(ISO/IEC 14443 A)やソニーのFeliCa(ISO/IEC 18092)を包括する規格として策定されました。
更に2005年には、ISO/IEC 14443 Type Bおよび非接触ICタグ規格のISO/IEC 15693も取り込んだISO/IEC 21481(NFC-IP2)が制定され、次世代の標準通信規格として注目度が高まっています。
日本国内でもMifareFeliCaの両方に対応するNFC対応のリーダー/ライターが発売されていて、電子工作に組み込むこともできるようになりました。

 

4. Arduinoに接続するリーダーは? RFID-RC522(MFRC522)? RC-S620S(FeliCa)?

Arduinoを使った電子工作で利用可能な、国内で手軽に手に入るRFIDのリーダー/ライターにはRFID-RC522RC-S620Sの2機種があります。
それぞれの特徴を解説します。

4.1. RFID-RC522(MFRC522)

RFID-RC522はNXPセミコンダクターズ(元フィリップスの半導体部門)製のIC、MFRC522を搭載したRFIDのリーダー/ライターです。

how-to-program-rfid-card-for-projects-02

RFID-RC522の外観

 

MFRC522を搭載しており、規格はMifareに対応しています。国内でも多くの販売店が取り扱っており、価格もRFタグとセットで1000円前後のため手軽に入手できます。

ArduinoとRFID-RC522の接続にはSPI(通信規格)を使用します。スケッチから容易に操作できるようにライブラリも用意されています。
このライブラリはMFRC522を制御するものなので、RFID-RC522以外でもMFRC522を実装するリーダー/ライターであれば同じように制御できるでしょう。

RFID-RC522を使用する際は、日本の電波法に抵触する可能性がある点に注意してください。
前述した「RFIDは電波法に則って運用する必要がある」の通り、リーダー/ライターは微弱ながら電波を使用するので日本の電波法を遵守する必要があります。
残念ながらRFID-RC522には「発射する電波がどの程度の強度(電界強度)か?」が明記されておらず、また型式指定の記述もありません。
RFID-RC522を使用する際は、使用者が電波法で許可が不要とされる電波の強さであることを保証しなければなりません。
電波法で処罰されるのは、違法な設備(機器)を販売した人ではなく使用した人であることに注意が必要です。

4.2. RC-S620S(FeliCa)

RC-S620SFeliCaに対応するリーダー/ライターであり、製造元はFeliCaを開発したソニーです。

 

how-to-program-rfid-card-for-projects-03

RC-S620Sの外観

 

詳細な技術情報もソニーのWebページで公開されています。
RC-S620SFeliCaの上位規格であるNFCにも対応しています。

RC-S620Sは総務省の型式指定を取得した、電波法に適合する製品です。ただし改造すると型式指定は無効になるので注意が必要です。
本記事でもRC-S620Sの使用を前提に説明します。

ArduinoとRC-S620Sの接続にはUART(シリアル通信)を使用します。スケッチから容易に操作できるようにソニーからライブラリが提供されています。
ライブラリはインストールが必要です。以下の手順でArduino IDEにライブラリを追加してください。

最初に「Arduino向けRC-S620/S制御ライブラリ」ダウンロードページからzipファイルをダウンロードします。
解凍した後のディレクトリ、arduino-RCS620Sを以下に移動してください。

  • Windows: C:¥Users¥ユーザー名¥Documents¥Arduino¥libraries
  • Mac: /Users/ユーザー名/Documents/Arduino/libraries

1カ所、ソースコードを修正します。
対象のファイルはarduino-RCS620S/RCS620S.cppです。以下にソースコードの先頭部分を抜粋します。

/*
 * RC-S620/S sample library for Arduino
 *
 * Copyright 2010 Sony Corporation
 */

#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include "Wprogram.h"
#include "Print.h"
#include "HardwareSerial.h"

#include "RCS620S.h"

10行目にある
#include “Wprogram.h”

#include “Arduino.h”
に変更します。
Wprogram.hは以前のArduinoで使用されていたインクルードファイルです。現在(Arduino 1.0以降)はArduino.hに変更されています。

ライブラリのインストールはこれで完了です。

 

5. 準備

以下のものを用意してください。

Arduino Uno

図4

 

Arduino IDE

how-to-add-rgb-led-strip-to-home-lighting-03

 

ブレッドボード

how-to-add-digital-numerical-display-to-project-04

 

RC-S620S

how-to-program-rfid-card-for-projects-05

 

RC-S620S ピッチ変換基板

how-to-program-rfid-card-for-projects-04

 

上記のほかに次のものが必要です。

  • USBケーブル(スケッチ書き込み時)
  • 電源(実行時
  • ブレッドボード用のジャンパーワイヤ
  • 半田ごて、半田

 

6. スケッチ

以下がRC-S620SArduino Unoから使用するサンプルスケッチです。
このサンプルスケッチ「Arduino向けRC-S620/S制御ライブラリ」ダウンロードページからダウンロードしたzipファイルに含まれます。
解凍した後のディレクトリarduino-RCS620S内のexamples/FeliCaPush/FeliCaPush.pdeです。

以下のサンプルスケッチは、リーダー/ライター上にかざされたFeliCaに対応する携帯電話にURLを送信し表示します。
詳細は公式マニュアルを参照してください。

#include <RCS620S.h>
#include <inttypes.h>
#include <string.h>

#define COMMAND_TIMEOUT  400
#define PUSH_TIMEOUT    2100
#define POLLING_INTERVAL 500

#define LED_PIN 13

RCS620S rcs620s;
int waitCardReleased = 0;

void setup()
{
  int ret;

  digitalWrite(LED_PIN, LOW);
  pinMode(LED_PIN, OUTPUT);

  Serial.begin(115200);

  ret = rcs620s.initDevice();
  while (!ret) {}
}

void loop()
{
  int ret;

  // Polling
  digitalWrite(LED_PIN, HIGH);
  rcs620s.timeout = COMMAND_TIMEOUT;
  ret = rcs620s.polling();
  if (!ret) {
    if (waitCardReleased) {
      waitCardReleased = 0;
    }
  } else if (!waitCardReleased) {
    // Push
    uint8_t data[] = {
      0x01, 0x02, 0x2a, 0x00, 0x1d, 0x00, 0x68, 0x74,
      0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x74, 0x77, 0x69,
      0x74, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d,
      0x2f, 0x53, 0x44, 0x4b, 0x34, 0x46, 0x65, 0x6c,
      0x69, 0x43, 0x61, 0x46, 0x6f, 0x6c, 0x6c, 0x6f,
      0x77, 0x20, 0x4d, 0x65, 0x21, 0x21, 0xf1, 0xee,
    };
    rcs620s.timeout = PUSH_TIMEOUT;
    ret = rcs620s.push(data, sizeof(data));
    if (ret) {
      waitCardReleased = 1;
    }
  }

  rcs620s.rfOff();
  digitalWrite(LED_PIN, LOW);
  delay(POLLING_INTERVAL);
}

このサンプルスケッチは、Arduino UnoなどのUART(Serial)が1系統しか搭載されていないArduinoボードに向けたものです。
ArduinoボードRC-S620Sの通信でUARTを占有してしまうので、通常の電子工作のようにシリアルモニターを使用したデバッグはできません。
またスケッチArduinoボードに転送するなど、USBケーブルを使用した通信を行う際にはRC-S620Sを取り外す必要があります。
シリアルモニターを使ったデバッグや、RC-S620S以外にも通信するデバイスを接続する場合には、Arduino Mega 2560などのUARTが複数搭載されているArduinoボードを選定してください。

how-to-program-rfid-card-for-projects-06

ICカード型RFタグとリーダーを使ったRFID入退室管理(イメージ)

 

7. 配線

RC-S620Sには「FFC/FPCコネクタ」が採用されているため、そのままではArduinoと接続できません。
RC-S620S ピッチ変換基板の使用をお勧めします。
RC-S620S ピッチ変換基板にはRC-S620SのFFC/FPCコネクタに接続するケーブルとブレッドボードに接続できるようにする変換基板が含まれます。
ただし、変換基板をブレッドボードに挿すためのピンヘッダは自分で半田付けする必要があります。
変換基板には6本の端子がありますが使用するのは「VDD(1番)」「RXD(2番)」「TXD(3番)」「GND(4番)」の計4本です。
ブレッドボードを使用して以下のようにArduinoボードに接続します。

  • ArduinoボードのRXと変換基板のTXDを接続
  • ArduinoボードのTXと変換基板のRXDを接続
  • Arduinoボードの+5Vと変換基板のVDDを接続
  • ArduinoボードのGNDと変換基板のGNDを接続

詳細は公式マニュアルを参照してください。

 

8. まとめ

本記事ではRFIDシステムの概要と、それに使われるRFタグやリーダー/ライターの選定方法・使い方について解説しました。
RFIDを使いこなせれば、電子工作を超えた立派な電子機器と呼ぶことができるでしょう。

RFIDは微弱ながら電波を使用した無線設備です。そのため電波法などの関連法を遵守しなければいけません。
違法な電波の使用はテレビやラジオ、携帯電話・スマートフォンなどの通信を妨害するだけでなく、医療機器やペースメーカーなど生命・身体を維持する機器に甚大な影響を及ぼす危険性があります。
適切な運用を心がけましょう。

電子工作マニュアル Vol.2
Device Plus 編集部

エレクトロニクスやメカトロニクスを愛するみなさんに、深く愛されるサイトを目指してDevice Plusを運営中。

https://deviceplus.jp