SyntaxHigh

Saturday, August 23, 2014

ものの位置が分かるRFID棚

ストーリー

P1020583_thumb_thumb

ある電子工作とプログラミングが好きなGeek日本人がいました。

彼は、ものを作ることは「道具を所定の位置に直すことだ」と知ってはいましたが、実現できる実行力がありません。

そのためにしょっちゅう彼は10秒前に使っていた+ドライバーを机の上で見失うことがよくありました。

そこで彼は考えました。「ドライバーを適当においたら、その場所を教えてくれるロボティックシステムを実現できないだろうか?」

彼はインターネットを漁り始めました。

Localizationという大問題

ロボティクスでも介護でも、オートメーションでもエンターテイメントでも、「何処に何があるか」を知ることを、局所化、Localizationと呼ぶ。これが、現代の技術を持ってしてもなかなか難しい。

最近、と言っても個々20年ぐらいは赤外線式のモーションキャプチャが使われてきて、最近はKinectがはやりだ。しかし、Kinectを持ってしても「写っているものがなにか」というのはまた別の問題だ。Localizationとは「どこに」「なにが」あるのかわからないといけない。

これに対し、古くから本屋で行われてきた方法は、カテゴライズし、検索データベースに入れる、という方法だ。殆どの場合これでもいいと思われたが、近年 RFID を使った技術が低価格化し、RFIDをLocalizationに使おうというのが最初に挙げた本屋の例だ。

また、ATMel 社が、近頃出したチップや、Bluetooth LE を使ったアップルのiBeaconはそれを一部可能にするが、価格が高くデバイスがまだ大きいという問題がある。

どこかの本屋の実現済みアイデア

どこかの本屋が、シート型のRFIDを使って、どの棚にどの本があるか、というのをやっているらしい。「シート型RFIDリーダ」というのは予想するに、とても大きなコイルをフレキシブルケーブルと同じ技術で配線したものだろう。

つまり、「どの row にあるか」までは分かる技術だと想像する。

RFIDとコイルを分離して考える

もっと細かい位置を知るためには、ぱっと思いつく限りはリーダーを沢山配置するのが簡単。$3 程度でリーダーのモジュールは売っている。だがこいつを100個並べるとさすがにコストが高い。商品化まで考えるとあまり良くない考えだ。

RFIDは何のことはなく、(HFとLF周波数帯は)コイルの電磁誘導を利用してデータを読み出す仕組みで、「リーダーICとフィルター群」と「コイル部分」で成り立っていると考えることができる。
例えばRDM6300という製品は、前者をPCBに実装し、コイル部分は外部から入力するようになっている。

リーダーはこのセットで売っていることが多いのだけど、コイル部分をインテリジェントに切り替えてやれば、ひとつのリーダーで沢山のコイルを読み取ることができる、と考えた。コレならばリーダーの数が大幅に減るので、コストを抑えられる。

コイル部分のマルチ化

コイルのスイッチングは、「アナログマルチプレクサ/デマルチプレクサ」というICを使えば簡単にできる。HC4051という部品が多分それだ。入力はTTLで行うので、HC595で切り替えてやればいけるだろう。

何のことは無いアイデアなので、次のフォーラムにも同じようなアイデアは見つかるし、実際に作ったよという報告もある。
http://www.edaboard.com/thread180220.html
http://forum.arduino.cc/index.php/topic,244408.0.html
ICも似たようなものが上がっているので、後は見せ方、デザインの問題だろう。

周波数帯の選定

HFのコイルは少ない巻き数で大丈夫なので、PCB上にコイルアレイを構成してやるとコイルを巻く手間がなく、大量生産が可能だと考えられる。CNCでもパターンは作れるし、コイルの部分だけなら実装の手間がかからないので、外注してしまってもいいだろう。

この「大量生産可能」という性質はかなり魅力的で、HFを使う重要な決定打になる。LFを使う場合、沢山のニクロム線をまきつけたコイルを綺麗に配置する作業が必要になる。また、コイルからマルチプレクサまでの配線も大変そうだ。

また、LF, 125kHz帯のタグは、コイルの巻数が多いため、シート式のシールタイプではなく、樹脂に閉じ込めたタイプのものが多い。これは、例えばドライバーなど細かいものに貼り付けたい場合に障害になる。

以上を考えると、金属への対応はしないといけないが、HFの周波数を使うのが現実的だと考えられる。

部品

では早速部品を集めよう。
使うのは
  1. RFID リーダー(必要に応じて複数) $5*n1
  2. HC595( SPI のSS選択用と、下記にノベルコイル選択用 $0.1 *n2
  3. とても沢山の、格子状に並べられたコイル $0.3*n3
  4. HC4052:コイルを選択するためのデマルチプレクサ $0.1*n4
コイルを 100 個用意するとしても、1万円以下で収まる。また、コイルパターンを自作するならば、150x100mm の基板は100円で、例えば 20x30 のコイルを沢山作るとすると、25個のコイルを作れることになる。この場合、基板を外注で作ってもかなり価格が低く抑えられる。
13.56M RFID Module Card :USB-Serialも付いているので便利。コイルをパターン上に構成してある。

回路構成

他にやりたいことにもよるが、根本のマイコンは 328p でいい。328p から HC595 のラインを伸ばし、HC595 にはリーダーの SPI の SS と、4051のセレクタをつなげる。一つのリーダーで最低40個ぐらいは読みたいので、HC595は6つで1セットになる。
これくらいになるとDIPだとうるさそうなので、SOPのものを用意しよう
SN74HC595D 74 hc595 SOP
コイルの一方はグラウンド側にすべて接続し、もう一方を4051のMultiplexer 側につける。HC595のラインで読み取るリーダーとコイルを変化させながら、走査していける。

ソフトウェア構成

読み取り時間が数十ミリであることを考えると、例えば100ミリ秒で読んでいったとして、1秒で10個のコイルを読むことが可能である。

ここで、SPIを使わずに、HC595のラインでデータの出入力を行えば部分的に並列動作が可能になる。この場合、HC595への入力を切り替える(デジタル)マルチプレクサがもう一つ必要になるが。
また、複数回読み取ることで、エラー率や時間を測定し、簡易的に距離等も判別できるかもしれない。

ある程度隣り合ったコイルのカバー率を上げるには、コイルからIDまでの高さが必要かもしれない。複数のコイルを重ねればエリア的にはカバーできることになるが、電気的に問題は生じないのだろうか?マルチプレクサによって、あるコイルに導通している場合は他のコイルは絶縁されているので、問題はない気もする。どちらにしろやってみないとわからないだろう。