IgorPlug-USB(USB接続・lirc(赤外線)レシーバー)の製作、その他

Last-modified: 2016-11-07 (月) 05:49:46

「Linuxで赤外線リモコンを学習・送信したい」と、このページにたどりついた方へ
ビット・トレード・ワンUSB接続赤外線リモコンアドバンス
とか
ビット・トレード・ワンUSB接続赤外線リモコン
も、
Linuxで学習・送信できます。上記はともにx86 Linux、x64 Linux、ラズベリーパイのLinux(ARM)に対応しています。

これこれこれこれ等を使って。
HIDクラスなので専用ドライバーが要らない利点があります。


IgorPlugUSBはUSB接続ってことは評価できるんですが、肝心の赤外線レシーバーとしての能力が低いことに気づいたので、最近はこちらのレシーバーを使用しております。


活用例:こことかこことかここあたり

初出 2009-7-7
最終更新 2013-11-12
製作時期 2009-6
LIRC - Linux Infrared Remote Control -
用ののUSB接続の赤外線レシーバー(IgorPlug-USB)を作成してみました。といってもただリファレンスどうりに作るだけでは芸がないので赤外線受光モジュールの代わりにフォトダイオードTPS703を使うという遊びをおこなっています。なのでそのまま真似をされない方が賢明です。(2010年3月)当初実験的に用いた赤外線受光素子・TPS703のままでは実用に適さないので赤外線受光モジュール・PL-IRM0101に交換しました。当然ですが今度は近くでも離れていても感度良好です。改造というよりはIgorPlugUSBの本来の仕様に合わせただけというのが正しい表現です。
作例の紹介だけではなく、今まで全く書いてこなかったLinux上でLircの使い方も少し紹介しましょう。
※このIgorPlug-USBはWindows用のドライバはありますがWinLircが対応していないと思うので多分Windows上では使えないと思います。この件に関して詳しくは調べていません。
 

[変更(改造)後の(つまりIgorPlugUSB本来仕様の)部品面]
igorplug-usb_3_s.jpg
ダイソーの1mの長さのUSBケーブルのB端子にそのまま基板を半田付けしました。この後接合部を固めれば非常に頑丈なものが出来上がります。しかし皆さんは適宜、見栄えにもこだわった、フロントパネル内蔵式などのすっきりしたものを作ってみて下さい。
リファレンスおよび作例は90S2313を使っています。しかし90S2313が使えるということは"ほぼ"「AVRでありさえすれば何でも使える」ということです。

 

igorplug-usb_6_s.jpg
(2010-7-29追加)テキトーなカバーを付けてみました。ダイソーの0.2mmプラ板を丸めてスチロール樹脂(プラ)用接着剤でくっ付けたものです。このプラ板は透明なので可塑剤が入っていなくて強度がないです。既に少し裂けています(撮影後テープを巻いて補強しました)。本来は模型店で売っている不透明なプラ板を使った方がいいと思います。少し先端中央部の凹ませ方が足りなくて角度によっては受光部が隠れ気味に見えますが、カバーを取り付ける前と比べて反応範囲の減少を全く感じません。まあその主な原因はPL-IRM0101が高感度な為、室内では壁の反射でも問題なく動作するからだろうと思います。

 

[(参考)当初の半田面]
igorplug-usb_2_s.jpg
配線が少なく見えるのは、ソケットと基板のすきまに3本配線を通してるからです。
当初の部品面

 

[変更(改造)後の(つまりIgorPlugUSB本来仕様の)半田面]
igorplug-usb_4_s.jpg
当初作成後に保護の為に盛ってあったホットボンドを一部剥がして変更作業をおこないました。

 

igorplug-usb_5_s.jpg
変更部にホットボンドを再び盛った後です。うっすらと回路の全体が見えると思います。左上のあたりのホットボンドの繋ぎ目に白い筋が見えていますが、これは配線ではなくホットボンドの隙間に光が反射したものです。

 

[(参考)当初の回路図]
igorplug-usb+tps703_circt_s.png
ISP用の配線がありませんが、書き込みにはこんな物も利用することができます。
この回路についてはこちらの注意をお読み下さい。

 

(参考)当初のBSch3V形式・回路図(zip圧縮)
ダウンロード fileigorplug-usb+tps703_circt.zip

 
 

[変更(改造)後の(つまりIgorPlugUSB本来仕様の)回路図]
igorplug-usb(use_pl-irm0101)_circt_s.png
ISP用の配線がありませんが、書き込みにはこんな物も利用することができます。
9.4μは手持ちの4.7μを並列に使用した為に決まった値なので、適宜変更して下さい。

 

変更(改造)後の(つまりIgorPlugUSB本来仕様の)BSch3V形式・回路図(zip圧縮)
ダウンロード fileigorplug-usb(use_pl-irm0101)_circt.zip

 

Linux上でのLirc環境構築についてのTips

 (2010-3-27追記)最近のUbuntuでは標準でlirc用のカーネルモジュールが含まれているので、難しい点はほぼなくなっているのですが、Ubuntu 9.10では「lircパッケージをインストールする前にlircデバイスをPCに接続してはいけない(もしくは、できる限りしない方が好ましい)」という注意点があります(代表例としてここではUbuntu 9.10を挙げていますが、他の多くのディストリでもありがちなことなので適宜読み替えて下さい)。
 Ubuntu 9.10ではまだlircパッケージをインストールしていない段階でもlircデバイスを接続した時点でドライバーモジュールがロードされてしまいます。もう勘のいい人は気づいたと思います。従来からそうですが、lircパッケージをインストールする際には自動的にコンフィグ処理がおこなわれ、それに応じて裏でドライバーモジュールがロード(modprobe)されます。しかしもしこの処理の前に既にドライバーモジュールがロードされていると、同じモジュールを二重にロードすることはできないのでロード処理が止まってしまい、一緒にコンフィグ処理も止まってしまいます。これが上述の注意点の理由です。
 ついうっかりしていて処理が止まってしまった場合の対応策は、止まってしまったロード処理(modprobe)のプロセスをkillして終了させてインストールを終わらせてから再起動することです。これだけです。副作用は全くありません。

 

 カーネルモージュールが標準で含まれていない場合は多少敷居が高いです。
 Linuxの常識的な話ですが、まず頭に入れなくてはならないのは、(1)最新のLircに含まれるカーネルモジュールソースは"わりと最近のカーネルでしかコンパイルできない"ということです。それと、(2)最新ではなくなったLinuxディストリはオンラインでアップデートしてもLircパッケージは新しくならないのに、カーネルだけはどんどん新しくなるというケースが非常に多いということです。
 (1),(2)の為、最新ではないディストリ・リリースをアップデート(アップグレードではないことに注意)した環境ではLircカーネルモジュールのコンパイルが出来ないケースが非常に多いです。それが普通です。そのような場合はその環境に、同じディストリの最新リリースからLircカーネルモジュール関係のパッケージを持ってくるか、もしくはディストリ全体をアップグレード(アップデートではないことに注意)してOS環境全体を最新リリースにする等の対処をおこなって下さい。
 カーネルの更新に伴うカーネルモジュールのリコンパイルに関しては最近はDKMS機構があるのであまり気にする必要がなくなりました。

 

※IgorPlug-USBを使用する場合はlircパッケージのコンフィグ時に「Remote control configuration」として「Igor Cesko's USB IR Receiver」を選択します。

 

(2013-11-12追記)このIgorPlug-USBは、USBハブ経由で接続してはいけなくて、PCに必ず直接接続する必要があることに、つい最近気づきました。ハブ経由だと時々無理に抜いたような状態に陥るからでしょう。USBハブの銘柄に関係なく駄目なようです。ドライバソースは全く見てませんが、多分ドライバソースがサンプルレベルで順守すべきルールを守ってないからでしょう。しかしPCに直接接続し、抜き差しを一切せず、完全な固定デバイスとして使用する限りは全く安定しています。現にここ数年、そのような使い方で全く問題なく運用してきました。

Linux上でのLircの使い方

どこかのページで触れられていると思うので簡単に書きます。
私が使うコマンドはirrecord, irw, (lirc-xに含まれている)xmode2くらいです。

  • xmode2は波形の概要を見るのに使いますが、実運用時にはあまり役に立たないコマンドです。私はこのページの回路のコンデンサ容量の増減を判断する際にこのコマンドを使いました。
  • irrecordは学習コマンドです。このコマンドで作成したファイルを/etc/lirc/lirc.conf(ディストリによっては違う場所かも)に書き込めばいいでしょう。
  • irwは赤外線受信・認識分野に絞って動作確認するのに使います。

最初にxmode2でハードウェアとドライバーに問題がないことを確認した後にirrecordを使うといいでしょう。irrecordはEnterを2回押したあとの最初の学習が肝です。愚直にリモコンのボタンを片っ端から1.5秒押しては次のボタン、1.5秒押しては次のボタンという作業をおこないましょう。学習結果をたとえば/etc/lirc/lircd.confに書き込み、次に、たとえば/etc/lirc/lircrcなどのirexec用のファイルを編集するのがよくある使い方です。。
※/etc/lirc/lircmd.confや/etc/lirc/lircrc等に具体的な既述があるとlircmd等のデーモンが起動してデバイスを占有するのでxmode2コマンドを起動できなくなります。

 

(2011-1-29追記)

  • (中国製等の機器についている)リモコンなんかでも「raw mode」を使えば認識させることができます。
  • lircd.confには複数のリモコンのフォーマット情報を記述できます。たとえばソニーのリモコンと東芝のリモコンの命令を1つのレシーバーで受け取ることができます。「操作するアプリケーション毎に専用のリモコンを使う」なんてことも可能です。

構築に関する追加情報

最近LircはUbuntu上でしか動作確認していないんですが、そのUbuntu上で私はLirc関係では以下のような修正を加えています。/etc/udev/rules.dもしくは/lib/udev/rules.dにある85-lirc.rulesを以下のように修正して使用しています。ただし別に必須ではありません。
[オリジナルの85-lirc.rules]

ACTION=="add", KERNEL=="lirc[0-9]", RUN="/etc/init.d/lirc restart udev"
ACTION=="remove", KERNEL=="lirc[0-9]", RUN="/etc/init.d/lirc stop udev"
 

[修正した85-lirc.rules]

ACTION=="add", KERNEL=="lirc[0-9]", MODE="0666", RUN="/etc/init.d/lirc restart udev"
ACTION=="remove", KERNEL=="lirc[0-9]", RUN="/etc/init.d/lirc stop udev"
KERNEL=="lirc0", SYMLINK+="lirc"
 


[(参考)当初の部品面]
igorplug-usb_1_s.jpg
赤外線受光モジュールを使っていないのでそのまま真似しないで下さい。こちらの注意を参照して下さい。


[当初の作例に関する説明]
TPS703の採用に伴う47kの抵抗値と2200pの容量はブレッドボード上に実際に回路を組み、実際に赤外線学習をおこなって決定しました。特にコンデンサ容量は許容範囲が狭いので計算だけで求めるのは困難だと思います。「赤外線受光モジュール」を使うとこういう面倒な作業をやらなくて済みます。さらに上図の回路は増幅段が足りないのでしょう。受光距離が非常に短いです。くれぐれもこの作例そのままの真似はせずに赤外線受光モジュールを使用することをお薦めします。
赤外線受光モジュールの使い方についてはこちら

 

ご要望、ご意見、質問を下のフォームにどうぞ
(でもここより、掲示板書き込みフォームのページに書いて頂いた方が気づき易いと思います。)