Chapter 21. 赤外線リモートコントローラと IrDA

これまでに述べてきた内の2つのプロジェクトでは、手製のドングルを赤外線リモコン用に作っていました。 ドイツの ELEKTOR 誌 97/5 月号 p. 28 にも、シリアル IrDA ドングルを自作するための説明があります。 誰か、この2つの種類のドングルを一つにまとめられないものでしょうかね。

赤外線リモートコントロールと IrDA との関連性について、Linux/IrDA メーリングリストでの議論から少し引いておきます。 以下の引用は、多少編集して短くしてあります。

Ryan Shillington さんによると「家電機器のIR - CIR とリモートコントロールの赤外線機能および ASK-IR は、FIR、MIR や SIR とはずいぶん異なっています」

「リモートコントロールの赤外線機能と ASK-IR は赤外線光源を使っていますが、とても低速で、周波数も低いです。 一方、到達可能距離はずっと長くなっています。動作速度は 2400 baud 程度です。

SIR はずっと高速で、リモートコントロールとは違って数文字以上のデータの受け渡しが必要で、かつ長い距離での通信を行うことを意図しています。

MIR はもう少し高速で (距離はより短くなります)、スピードは 1.15Mbps になり、 FIR は (デバイスを殆どくっつけるようにして置く必要がありますが) 4Mbps です。 通信可能距離は、データを送るスピードに反比例します。

私はリモートコントロールの赤外線制御用のドライバを書いていますが、 ここで注意しておきたいのは、あなたの赤外線で操作したい対象がサポートされている必要がある、ということです。 NEC、RC-5 や RC-0 プロトコル (最も普通のものです) などがサポートされているか見てください。

SIR はリモートコントロール信号の受信にも使えます。 ボーレートを適切な低い値にすれば、データが入ってきます。 但し、経験上、このデータは正しくありません。 これは正しいやり方で解析されておらず、その結果としてチェックサムの計算や補数によるチェックを行うことができません。

リモートコントロールからのデータが (SIR で) 正しく取れるよう取り組んでいます。 また、SIR は温度によってリモートコントロールからのデータを違う値として取り込むという報告も受けています。 但し、私にはこのような経験はありません」

Lichen Wang さんがこれに答えています 「殆どのラップトップに搭載されている、いわゆる ASKIR は、リモートコントロールのためのものではありません。 ASKIR は Sharp Wizard と Zaurus PDA、及びシャープの一部のノート PC 向けのものです。シャープはこの仕様を IrDA 規格が策定されるよりずっと前に作成しており、現在でも従来機との互換性のために搭載しています。また Apple の Newton も一度はこの機能を持っていました。

簡単にいって、ASKIR は 9.6 kbps (19.2 と 38.4 Kbps も可能です) の非同期データフォーマット、8 ビットデータ、1 ストップビット、奇数パリティを用いています。 スタートビットと、データ/パリティ中の '0' ビットは 500KHz の赤外線方形波 (DASK 副搬送波) として送信されます。ストップビットとデータ/パリティ中の '1' ビットは、赤外線送信が行われないことで伝達されます。

ここまでの説明で分かるとおり、これは全く現在の赤外線リモートコントロールとは非互換です。... (中略) ...

その通りです。SIR ハードウェアを使って受信だけでなく送信も行えます。 もちろん、いくらかの制限はあります。

殆どの IR リモートコントロールは 38KHz 副搬送波を使っています。38 の三倍は 114 で、これは 115.2 にかなり近い値です。というわけで、UART を 115.2 Kbps で動作するよう設定し、また 7 データビット、パリティなし、1 ストップビットに設定します。38 KHz の副搬送波の三サイクル分は、データ 0x5B を送受することになります。

副搬送波が 38KHz でなければならないことに加えて、さらにいくつかの物理的制約があります。 SIR レシーバは、こういう目的向けに設計されているわけではないため、38KHz ではあまり感度が良くありません。SIR トランスミッタはもっと低いデューティサイクルを想定しており、副搬送波として強い信号を送信することはできません。

IR リモコンは、特定のパターンで副搬送波をオンオフすることで制御信号を符号化しています。 副搬送波が送受できるようになったわけですから、残る問題はタイミングだけです。

送信としては、0x5B の連続送信を何回副搬送波のトーンバーストとして送ればいいのか、 そしてバーストの間の無送信時間をどれだけとる必要があるのかを知る必要があります。

受信としては、0x5B のデータを何回連続して受け取ったか、それら連続したバイト間の間隔がどれだけあったかを知る必要があります。... (中略) ...

IrDA リンク間距離と、SIR/MIR/FIR との関係の私の経験は、Ryan さんの言っている内容とは多少異なります。... (中略) ...

SIR、MIR 及び FIR とも 0 から 100cm の距離で実用的に動くはずです。但し

(a) 一部のデバイスは長距離通信時に問題が出ます。

できる限り、2つの通信対象のデバイスは 50cm 以上離さないでください。 低消費電力のデバイス、例えばポケットベルや携帯電話などはもっと短い距離としてください。 これは、このようなデバイスが MIR や FIR ではなく SIR を使っているという事実に関わらず、です。

(b) 一部のデバイスは短距離通信時に問題が出ます。

2つのデバイスは、少なくとも数センチは離してください。 二つのデバイスをあまりに近づけすぎると、問題が出ることがあります。

リンクが不安定なときに2つのデバイスを近づければいいと言うのは、感覚的に納得がいくものです。 一方、近づけすぎるのはやはりダメ、というのは直感に反します。 近づけたときに問題が起こる理由は、100cm の時に比べ 1cm では、光の強さが 10,000 倍になるためです。0.5cm では 40,000 倍等々です。 問題を起こす赤外線レシーバメーカは、この広いダイナミックレンジへの対応に問題を起こしているのです。 10W の電球の下で文字を追うのは誰でも苦労しますが、それが 100,000W だとどんな気分になるか想像してみてください。

IrDA の物理レイヤは IR リモートコントロールで使われている DASK 変調とは全く互換性がありません。従って、FIR とリモートコントロールで同じ制御回路を使うことはできません。但し、殆どの FIR コントローラチップはリモートコントロールをサポートするための多少の追加回路を持っています。 ここでは一部のみ名を上げますが、National Semiconductor、SMC 及び Winbond はすべてこのような作りの I/O チップを出しています。

FIR 用の IR トランスミッタとリモートコントロールはとてもよく似ています。 私は標準の FIR トランスミッタを使ってみましたが、リモートコントロールとしては 10m まで使えました。 従って、リモートコントロール用に設計されたトランスミッタと同じように良好に動作します。

FIR 用の IR レシーバについては多少異なります。FIR レシーバはリモートコントロールの信号を受信できますが、その距離は 1m までです。一方リモートコントロール用に設計されたレシーバは通常 10m は届きます。

私は National Semiconductor 社製の I/O チップを搭載していて、FIR とリモートコントロールの両方をサポートしている ISA バスカードを持っています。また、FIR とリモートコントロールの両方のレシーバ (加えて両モード用のトランスミッタ) を持った IR ドングルも持っています。 私自身の経験は DOS 環境のみで、まだ Linux では走らせてはいませんが、誰か興味のある方はいますか?」

Benny Amorsen さんによると「私は ASKIR をサポートしているらしいラップトップ機を持っています。 赤外線ポートのモードは BIOS で ASKIR に切り変えられます。BIOS でモードを切り変えるためにリブートしているのでは殆ど役に立ちませんので、誰かが動作時に切り変える方法を見つける必要があるでしょう」

Dag Brattli さんによると「多分 IrDA 互換のリモートコントロールは IrControl (以前は IrBus と呼ばれていた) を使うことができるはずです。私は今のところ IrControl 標準準拠のリモートコントロールは知らないんですが、多分どこかにあるはずです (この件について誰か知りませんか?)。まず、 Linux/IrDA site から物理層標準の仕様 (これには IrControl が含まれていると思います) を取ってくる必要があるでしょう。

通常の IrDA (IrLAP を使うもの) は、リモートコントロールにはうまく適合しません。これは、通常の IrDA はコネクション指向の特性を持ち、コネクションレス目的では 9600bps までしかサポートしていないためです。 このように速度が制約されているのは、目の安全への考慮のためとされています (でも、CIR が同じ出力でより良く動作する理由がこれではわかりませんが)。 それに、私はラップトップ機間で 4-5m 離して通信ができているのを見たこともあります (この状態で高速な通信ができるとは思いませんが)。

ほとんどの IrDA チップセットは CIR 動作が可能ですし、ドライバで CIR を話せるようにするのも実に簡単です。樋口 隆英さんが IrSocket を調べ始めており、その改造で CIR パケットを送受できる Ir(DA) の "raw" ソケットを開けるようになると素晴らしいです。全 CIR アプリケーションをユーザ空間で実行できるようになりますので。

私の知る限り、Corel は Netwinder を制御するために CIR を使うことに興味を持っているようです。 この記事 か、Ryans page をご覧下さい。

Hewlett-Packard 社の IrDA Data Link Design Guide の p.21 より。「Hewlett-Packard 社の IrDA トランシーバを使って IrDA 以外の信号を送受することは可能です。 そのような実装の詳細については、アプリケーションノート "Transceiver Performance with ASK and TV Remote Signals" を参考にしてください」

IR-MAN ページ から

「幸いなことに、多くの IrDA デバイスは TV 用リモコンで使われている 38KHz の ASK 変調と互換性を持ちます。これは、IrDA デバイスはそのような赤外線信号で動作できると言うことです。 但し、どうやらポータブルコンピュータで TV リモコンからの赤外線を受信できないものが、まだ多数あるようです。

デスクトップコンピュータの場合、マザーボードの種類によって2つの選択枝があります。 普通の Pentium マザーボードは赤外線通信をサポートした I/O チップセットを搭載しています。 この場合、赤外線送受デバイスを接続するための専用コネクタがあります。 もう一方の選択枝は、コンピュータのシリアルポート (RS-232) に繋げるシリアルタイプのトランシーバを購入することです。PC リモートコントロールは、このどちらの IrDA デバイスを用いた場合でも正しく動くことをテスト済みです。

  1. IRmate IR-210 シリアルポート赤外線アダプタ ... このデバイスで認識可能なシリアルポートのデータ速度は 2400 bps です。 この種のアダプタでこの通信速度は共通なのか、このモデル固有の特性なのかは分かりません。

    受信したデータ値のサンプルがどの程度似ているかを見てみましょう。 一部の赤外線コマンドは毎回大きく変化し、認識が困難です。 この場合、比較時に許容値をとても大きくとることで対処しますが、違うコマンドと誤認する危険性が大きくなります。 殆どどの場合も、最適な許容値は 20 でした。

  2. Actisys IR2000L を Asus P2B マザーボードにつないで使っています。(中略) 幾つかのポートスピードで良好に動作しますが、4800 bps が最適なようです。 同様のタイプの他のアダプタもこのスピードが最良のようです。 例となるデータシーケンスをこのデバイスで見てみたところ、幾つかのリモコンのボタンで全く同じシーケンスが送られているように見え、区別は全くできませんでした。

  3. Asus IR IR-eye は上と同じマザーボードに接続できます。Actisys デバイスと同様に良好に動作します。

TV のリモコンはコマンドを一方向で、最大 30 フィートの距離を低速バースト信号として送ります。 このようなリモコンでは使い勝手を向上するため、ほどほどの指向性を持った赤外線 発光ダイオード (LED) を使用しています。IrDA によるコードレス接続では、一対一かつ双方向でファイル転送を行いますが、 その際 IrDA では短い距離用の高速バースト信号を使い、指向性の強い赤外線 LED を使用しています。 IrDA 通信では比較的注意深く光の向きを合わせる必要がありますし、障害物に弱くもあります。 このため、リモートコントロールを相手にしているときに長い距離での動作は期待しないでください」

Alessio Massaro さんによると「IrDA は テレビのリモコンとは会話できませんが、シリアルインターフェースをエミュレートする IrCOMM レイヤは持っています。私の想像では、LIRC が IrDA で動くようにするには、単に IrCOMM 仮想シリアルドライバから読み込むようにしておいて (/dev/cua などに対するように) マシンのドングル+IrDA ヘッダにリモコンを向けてやれば良いのではないかな」

Dag Brattli さんの返答はこうです 「多分普通のシリアルポートのことを話していると思うんですが、私は少なくとも IrDA がそういうものとして動くように作るという選択はしませんでした。 私は全デバイスドライバをネットワークデバイスドライバに向けて実装しており、多少の差異というか、よりフレーム指向になるよう作っています。 デバイスドライバは IrDA フレームを送受するもので、他に何も受け渡ししません。

それに、現在のところ IrDA デバイスで、より生の状態の読み書きをサポートするために tty インターフェースを実装しなければならないとも思っていません。ついでながら、 IrCOMM のことは忘れてください。この件には関係ありません。

実はデバイスドライバ自体には、生の読み書きのサポートは既に加えてあります。 これは一部のドングルで必要になるためです」