About this page このページについて
MacOS XとEZ-USBによる作例として、赤外線リモコン受信機を紹介します。 ハードウェアは、EZ-USBを搭載したプリンストン・テクノロジのスマートメディア・カードリーダ(PRD-SM2)を改造したものです。 また、MacOS X側のソフトウェアとして、IRmonitorというアプリケーションを作成しました。
テレビやビデオの赤外線リモコンからの信号を受信し、EZ-USBのファームウェアによって解析します。 その結果は、EZ-USBからUSB経由で、MacOS X側のIRmonitorアプリケーションへと送信されます。 IRmonitorアプリケーションは、受信したコードに対応するApple Scriptスクリプトを実行します。
この赤外線受信機を制作した当初の目的は、スカイパーフェクトTVの連動予約でした。 私が使っているソニー製のCSチューナには、“AVマウス”という赤外線送信機が付属しています。 このAVマウスからビデオやDVDレコーダの赤外線リモコン受光部へ信号を送り、チューナの録画予約にあわせて自動的に録画をすることができます。 しかし残念なことに、うちはビデオではなく、録画はぜんぶMacとCaptyTVで行っていました。 これだとAVマウスは使えず、Macとチューナの両方に予約を入れないといけないので、面倒です。 そこで、Mac側でAVマウスからの赤外線信号を受信できれば、予約の手間を省くことができると考えました。
その後、CSチューナとの連動機能を備えた東芝のDVDレコーダ(RD-X5)を購入したので、本機の出番はなくなってしまいました。 現在は、本機はiTunesのリモコン用として使っています。 Apple Scriptで制御できるアプリケーションならば、なんでもリモコンで操作できるので、 そのほか工夫次第でいろいろ活用できると思います。
How to build a hardware ハードウェアの制作
ハードウェアは、EZ-USBを搭載したプリンストン・テクノロジのスマートメディア・カードリーダ(PRD-SM2)を改造したものです。 PRD-SM2はすでに旧製品となっているので、今となっては入手は困難かもしれません。 もっとも、カードリーダとしての機能は使用していないので、PRD-SM2に限らず、他のEZ-USBチップ搭載のボードでも同様に制作できます。 これから新たに制作するのであれば、 MINI EZ-USB(オプチマイズ)や AN2131SC基板(IPI)などのキットの利用がおすすめです。
1S1U60は、シャープ製の赤外線受光モジュールです。 秋月電子などで、類似品が比較的容易に入手できると思います。 私は、タケイムセンの店頭で購入しました。 このモジュールは、5V動作/5V TTLレベル出力です。 通常ならば、5V TTLレベルをEZ-USBチップにそのまま入力することができるのですが、 PRD-SM2の場合には、EZ-USBのすべての入力ピンが3.3Vにプルアップされてしまっています。 このため、5Vレベルの信号を直接入力することができません。 そこで、5Vレベルから3.3Vレベルへのレベル変換回路を外付けで組みました。 (将来、他へ流用する場合のために、PRD-SM2のパターン・カットは避けたかったので、このような方法を採用しました。)
レベル変換回路は、トランジスタ(2SC1815)のコレクタを3.3Vへプルアップしただけの単純な回路です。 3.3Vへのプルアップ抵抗(100KΩ)は、PRD-SM2の基板上のものをそのまま利用しました。 また、1S1U60に付属していたデータ・シートによると、1S1U60はオープン・コレクタ出力で、内蔵の22KΩの抵抗で5Vへプルアップされています。 この場合、ベース電流は約0.2mAとなるので、2SC1815のベース側の電流制限抵抗は不要です。
1S1U60の電源は、USBの+5V電源ラインから供給します。 念のために、電源ラインには50mAの自己復帰型ヒューズ(ポリスイッチ)を挿入しました。
The firmware of EZ-USB EZ-USBのファームウェア
EZ-USBのファームウェアにより、赤外線受光モジュールからのパルス列の解析を行い、ディジタルなビット列に変換します。 USBホストとの通信はインタラプト転送で行い、ホストは定期的なポーリングで受信の有無を確認します。 ファームウェアは、送信データの先頭に、データ全体のビット数を付加(1バイト)し、USBホストへと送信します。送信データの例を次に示します。
ファームウェアは、C言語で記述しました。 また、コンパイラは、SDCC(Small Device C Compiler)を使用しました。 MacOS X上でのSDCCによる開発手順は、当サイトのこちらのページをご参照ください。
リモコンの赤外線は、通常、38〜40KHzでAM変調がかけられています。 この信号を復調すると、次のようなパルス列となります。これはビクターのVTRに付属していたリモコンからのものです。 (1S1U60からの出力は負論理ですが、この作例ではレベル変換回路で論理が反転するので、EZ-USBには正論理で入力されます。以後の説明も正論理で行います。)
信号の復調は赤外線受光モジュールが行い、復調後のパルス列がEZ-USBに入力されます。 このパルスのL部分の時間の長さによって、1ビットのディジタル値を表現します。 H部分の時間をTとしたとき、L部分の時間がTならば“0”、3Tの場合は“1”となります。 データは、下位ビット(LSB)から順に送信されます。
また、信号の先頭には、Hが8T、Lが4Tの長さのパルスが付加されます。 これがリーダーです。ファームウェアは、リーダーによって信号の先頭を検出します。
リモコンは、最後のパルスを送信したあと、次の信号との間に最低8ms程度の間隔を空けます。 ファームウェアは、パルスの間隔を500nsごとのタイマー割り込みで計測しています。 タイマーは16ビットなので、パルスの入力が途絶えると、32.768msでオーバーフローします。 ファームウェアは、タイマーがオーバーフローしたら、信号の末尾と判定します。
このファームウェアは、家電協フォーマットのリモコン(パナソニックやビクターのテレビ/ビデオなどが採用)のみに対応しています。 ソニーなどのメーカーでは、これとは異なる伝送方法を採用しているそうです。 このファームウェアは、そうしたリモコンには対応していません。
IRmonitor IRmonitor
IRmonitorは、MacOS X上で動くアプリケーションです。
IRmonitorは、次のような動作を行います。
ハードウェアがUSBバス上に検出されると、IRmonitorは、まずファームウェアを自動的にダウンロードします。 ファームウェアのダウンロードが完了したら、ハードウェアを定期的にポーリングして、赤外線データの受信有無をチェックします。 赤外線データが受信されていたら、インタラプト転送で受信データを読み、そのデータを16進数で画面に表示します。 また、ユーザのホーム・ディレクトリの“ライブラリ”の“Application Support”の“IRmonitor”フォルダに、 受信したデータに対応するApple Scriptファイルが存在するかチェックし、存在すればそれを実行します。 たとえば、受信したデータが“43 0C”だった場合、“430C.app”という名前のApple Scriptファイルを実行します。
Download ダウンロード
Redistoribution notice 再配布について
IRmonitorアプリケーションは、 BSDライセンスに基づき公開するフリーウェアです。 ソフトウェアの再配布や改変は、BSDライセンスの元であれば自由に行っていただいて結構です。 ただし、IRmonitorアプリケーションは、一部にAppleのサンブル・ソースコードを流用しています。 その部分については、流用部分のオリジナルのソースコードのライセンスであるApple Public Source License Version 2.0 (APSL 2.0)に 基づきます。詳細は、各ソースコードに含まれるライセンスの記述をお読みください。
IRmonitorファームウェアは、GPLに基づき公開するフリーウェアです。 IRmonitorファームウェアは、The EzHID Firmware ProjectがGPLに基づいて公開したソースコードを元に作成しました。
References 参考資料
- AVマネージャ−(学習リモコン制御ソフトウェア)
- 私が赤外線リモコン受信機を作ってみるきっかけとなったサイト。 こちらのページに、リモコンから送信される赤外線信号の解析結果が公開されています。 貴重な情報をご公開いただき、ありがとうございました。
- 熊谷研究室
- こちらのページに、H8/3048Fによる赤外線制御の作例が公開されています。 リモコンから送信される赤外線信号のわかりやすい解説は、参考になりました。ありがとうございました。
- MacOS XでCypress EZ-USB
- 当サイト内のページ。 MacOS XによるEZ-USBファームウェア開発プロセスを紹介しています。 MacOS Xでの開発環境については、こちらのページをご参照ください。