irMagician は大宮技研(http://www.omiya-giken.com/)の開発による学習型赤外線リモコン・ボードです。ペタピコフォーラム(仮称)というイベントを通じて持ち込んでいただいたことをきっかけに CuBox-i/HummingBoard での接続実験を行ったところ、結果良好でした。電子工作についてもコラムを充実させていきたいという意向もあり、ペタピコダイレクトショップでの委託販売もはじめるはこびとなりました。
1.型破りな発想の irMagician
赤外線(IR)学習リモコンは数多くありますが、 irMagicianが一味違っているのは「いさぎ良さ」です。ハードウェアスペックを極限まで切り落として極小ボードに仕上げているので、USBフレキシブルケーブルに挿せば「空中」に設置できてしまうことです。
それでは切り落としたスペックで使いものになるのか、ということが気になる点となります。
他の学習型リモコンでは、メモリをたくさん積んで学習した赤外コードを覚えておきます。このIrMagicianで型破りなのは、メモリが1つしかないことです。ここが一番のいさぎよさです。ちゃんとユースケースを考えてみたら、同時に必要なのは1つなので、これで十分だというわけです。その分、バッファが自由になるのでコードが長いエアコンのコードにも対応できるようにしていていて、その利口なやり方が目からうろこでした。
irMagicianの第2のすばらしい点は、ボード製品なのにセンサのインタフェースではなく、ほとんどのCPU/OSで標準サポートされているcdc-acm(Class Definition for Communication)のlinuxカーネルモジュール(USB接続のモデム)にしていることにあります。 ホストPCのUSBに挿してみて、LEDの状態をみればボード上の黄色いLEDが点くのですぐに使えるかどうかを判断できます。コマンドから見るならば、
# ls /dev/tty* |
ttyACM0があればOK。非常にシンプルです。(逆にシステムですでにttyACM0がすでに割り当て済みの場合にはそれを一旦はずさなくてはいけないので面倒があります)
なお、リモコンといえば、本ペタピココラム
「GeeXboxをTVのリモコンで操作してみる」http://goo.gl/VDgkeA
で取り上げました。この時はCuBox-iの前面にある赤外受光を使い、Linuxの定番のlircライブラリを使って学習させるというものでした。対比の意味でも一度ご覧になると参考になります。
CuBox-i4Proでは、赤外の出力にも対応はしているので、読取り学習をさせるだけでなく、赤外信号を発信することも可能です。ただし、例えばエアコンをターゲットにするとなると、CuBox-iの前面窓からの小さな出力では置き場所を相当に選ばなくては届きません。置き場所が原因で実用にならなくなります。その意味でもirMagicianは「男前」なコンセプトと言えます。それではCuBox-i/HummingBoadでの検証を行ってみましょう。
2.操作方法と代表的な動作
動作の検証には、debian* を用いました。今回の場合、CuBox-i側では何の設定も必要ありません。ハードウェア的には、フレキシブルマイクロUSBケーブルの先にirMagicianを取り付けただけ、となります。あとは、リモコンと、操作するターゲット(例えばTVやエアコン)があれば実験ができます。
(*) Debian Wheezy 7.5はペタピココラム でとりあげています
(18) Debianでmicro-home-serverを作る(1) http://goo.gl/X4OkBT
実際にコマンドを使って赤外線リモコンのデータを取得して再生してみます。ここでは参考例としてTOSHIBAのTV操作用のリモコンで検証しながら説明をします。
すべての操作はSSHかシリアルで接続したターミナル(もしくはCuBox-i本体からのコンソール)で行うものとします。
# screen /dev/ttyACM0 9600 |
… Ready |
が表示されたら利用可能です。(ターミナルソフトの起動タイミングによっては表示されない場合があるようです。また、ホストやシステムの状態によって、エラーメッセージやゴミが表示されますが、通常使用では問題ありません、とのこと)
データの取得
「C」コマンドを使って実際にデータを取得します
irMagicianの赤外線受光部にキャプチャしたいリモコンを向けcを入力後、[return]を押下
… と表示されるのを確認してこのタイミングでキャプチャしたいリモコンのボタンを押します。正常に信号がキャプチャされると、80などの数値が表示されます。ボタンを押すタイミングが遅れた場合は Time Outが表示されます
データの再生
取得したデータがきちんとつかえるかどうかを「P」コマンドにて確認します
irMagicianの赤外線LEDを対象となる機器に向けpを入力後、[return]を押下
対象となる機器のリモコン信号に応じた動作と緑LEDの点滅確認をします
うまく、学習出来てなかった場合はPostScaler値を変更すると、うまく学習できることがあります。全てうまくいくわけではありません。現在値は100になっていますが、これを200に変更します。k,200[return]。この値を変更しても、うまくいかない場合は本システムでは学習できないタイプのリモコンだと思われます。
通常はさほど異例な長さのコードはないのですが、日立のエアコンなどではあり得ます。長さが問題でとりこぼしていないかを確認することができます。取得したい赤外線リモコンの信号の変化点の数を調べるには「S」コマンドを使います。 120を超えていると取り込めません。
基本的なやることは以上だけです。
ここまでの確認ができたら上級コマンドです。取り込んだコードをセーブしておく、セーブしたコードをロードして発信してみます。取得したデータを表示する「D」コマンドやデータバンクにデータを書き込むための「W」を適宜利用して、リモートコントロールする対象物に合わせてデータをセーブ/ロードします。その為には一般的なシリアルターミナルソフトではなく、本システムに特化した専用アプリを組む必要があります。 通常使うコマンドは以下の通り。
R |
リセット(Reset)コマンド システムのリセットを行う。 |
L |
LED の点灯(LED)/消灯 コマンドに続いて、0か1を設定する L,0 or L,1 |
B |
ダンプ時のバンク(Bank)設定 コマンドに続いてバンク番号を設定する。全部で10バンク B,n (n=バンク番号0-9) |
C |
赤外線信号を取得する(Capture)時に使う 表示される数字はバイト数 |
D |
取得したデータのダンプ(Dump) D,n(メモリ番号) 16進数表示 |
M |
赤外線 LED の変調(Modulation)周波数の設定 コマンドに続いて番号を指定する M,n (n = 0-2) 0 = 36KHz, 1 = 38KHz (default), 2 = 40KHz |
K |
Set Post scaler 初期値は100 k,n (n=1-255) |
P |
取得した赤外線データの再生(Play) |
S |
赤外線リモコンの変化点の取得(Statics mode) 実際のキャプチャは行わずに、データの測定のみ行う |
W |
データバンクにデータを書き込む(Write) W,position(0-63),data |
3. ユーティリティ irm.py を使ってみる
ここでは、Twitter: @netbuffaloさんが、netbaffalo (http://netbuffalo.doorblog.jp/archives/4872290.html)
で公開されている実験的なPythonのスクリプトを紹介します。
netbaffaloに掲載の記事では、RaspberryPiでこのIrMagicianを使えるようにするため、大宮技研で公開しているサンプル・コードをPythonスクリプトでまとめ直したユーティリティとなっています。その irm.py を試してみたところ、無修正でCuBox-i/HBで動作しました。公開いただいている先人の業績に敬意をはらって利用させていただきましょう。
まず、pyserial ライブラリをインストールしておきます。
# sudo apt-get install python-pip
# sudo pip install pyserial |
次にirm.pyをダウンロードしてきます。
irm.py ユーティリティ
https://dl.dropboxusercontent.com/u/5966412/IR/irMagician/irm.py
使い方はhelp から見ることができます。
# python irm.py --help usage: irm.py [-h] [-c] [-p] [-s] [-f FILE]
irMagician CLI utility.
optional arguments: -h, --help show this help message and exit -c, --capture capture IR data -p, --play play IR data -s, --save save IR data -f FILE, --file FILE IR data file (json) |
キャプチャーしてその信号をセーブしたり、セーブ済みの信号をプレイしてターゲットデバイスを動作させてみます。
まずリモコンを準備しておき、信号をキャプチャします。数字が返ってきたら取り込み正常。
# python irm.py -c Capturing IR... ... 80 |
それを名前をつけてセーブしてみます。
# python irm.py -s -f ToshibaTV_Ponoff.json Saving IR data to ToshibaTV_Ponoff.json ... Done ! |
どんなファイルになったかを見てみます。
# more ToshibaTV_Ponoff.json {"postscale": 100, "freq": 38, "data": [35, 136, 66, 9, 24, 9, 7, 9, 24, 9, 7, 9 , 7, 9, 7, 9, 24, 9, 7, 9, 7, 9, 7, 9, 24, 9, 24, 9, 24, 9, 24, 9, 7, 9, 24, 9, 7, 9, 24, 9, 7, 9, 7, 9, 24, 9, 7, 9, 7, 9, 7, 9, 24, 9, 7, 9, 24, 9, 24, 9, 7, 9, 24, 9, 24, 9, 24, 9, 91, 136, 33, 9, 134, 136, 33, 9, 134, 136, 33, 9], "form at": "raw"}
|
このような各種の機器のJSONファイルは大宮技研のページで公開されています。ユーザーが持ち寄ったデータも再使用が可能なように置かれています。
セーブ(大宮技研のサイトからダウンロード)したファイルを使えばマイコン上の赤外線データ・バッファがリセットされてしまった後でもプレイが出来るということです。
# python irm.py -p -f ToshibaTV_Ponoff.json Playing IR with ToshibaTV_Ponoff.json ... ... Done ! |
このirm.pyのソースを参考にアプリを作りこめば、いろいろなシーンでの利用が可能になりそうな予感がしてきます。
今回、このようなアクセサリーでは稀なほど容易に使うことができた。もとのスジがいいこと、良質なユーザーがツールを積み重ねてくれていることだと思います。
実際にシステムに組み込んだレポートがブログなどで発表されるといいなあと思っています。発表記事のリンクOKならばpetapicoshop@petapico.bizまで連絡を是非お願いします。
次回は、このリモコンをWeb経由で操作できるようにして、外から制御することに挑戦してみます。
コメントをお書きください