赤外線学習リモコン
Raspberry Piに簡単な回路を接続し、LIRC (Linux Infrared Remote Control)をインストールして、赤外線リモコン信号の受信/送信をしてみます。
なお、回路の組み立てには半田ごては不要です。
OSのインストールやWiFiドングルのセットアップなどの初期設定はこちらをご覧ください。
この後、Raspberry Pi + irMagicianで作り直しました!
参考
- Raspberry Piで赤外線リモコン - Homebrew.JP : 本ページのネタ元です。ほぼそのまま実施しています。
- LAN赤外線学習リモコンKTIの紹介 サンプル・資料・応用 : リモコン信号の仕組みが分かります。
- 赤外線リモコンの通信フォーマット : 家電協*1フォーマット、NECフォーマット、SONYフォーマットとはどういうものなのかが分かります。
必要なもの
部品 | 用途 | 備考 |
赤外線LED | 送信用。 | なるべく半減角が広いものが良いです。今回は後述のLED拡散キャップを併用したため、秋月電子通商で購入した OSI5FU5111C-40 (半減角15度)を使用しました。 |
赤外線リモコン受信モジュール | 受信用。 | 何でも良いと思います。ただし、リモコン用途以外の赤外線センサを買わないように注意。今回は秋月電子通商で購入した OSRB38C9AA を使用しました。 |
トランジスタ | LEDへの電流を増幅するために使います。 | NPN型なら何でも良いと思います。今回は千石電商で購入した 2SC1815-GR を使用しました。千石電商の2Fならバラ売りしてます。 |
抵抗 100Ωくらい | LEDへの電流を制限するために使います。 | カラーコードは茶黒茶金。何でも良いです。千石電商のB1Fならバラ売りしてます。本来は抵抗値はLEDに合わせて調整するはずです。 |
抵抗 2.2kΩくらい | トランジスタのベース端子への電流を制限するために使います。 | カラーコードは赤赤赤金。何でも良いです。千石電商のB1Fならバラ売りしてます。本来は抵抗値はトランジスタに合わせて調整するはずです。 |
ブレッドボード | この上で部品を組み立てます。 | 何でも良いです。これ とか。 |
ジャンプワイヤ(オス-メス) | Raspberry Piとブレッドボードを接続するために使います。 | 何でも良いです。 これ とか。 |
ジャンプワイヤ(オス-オス) | ブレッドボード上で部品を接続するために使います。 | 何でも良いです。 これ とか。 |
あった方がいいもの
部品 | 用途 | 説明 |
LED拡散キャップ | 信号が機器に届きやすくなります。 | 今回は千石電商で購入した 5mm用LED拡散キャップ(透明) を使用しました。今回使ったプラスチック製の他にシリコンラバー製のものもありますが、あまり効果がなかったです。 |
手順
回路の組み立て
上記部品をブレッドボードとジャンプワイヤを使って組み立てます。
- Raspberry PiのGPIOピンのアサインはRPi Low-level peripherals - eLinux.orgなどをご覧ください。
- ブレッドボードの使い方はサンハヤトのブログ記事をご覧ください。
- 回路図はネタ元のサイト(Homebrew.JP様)をご覧ください。以下では手順の形でご説明します。
- 受信側の組み立て
- Raspberry PiのGND端子と赤外線リモコン受信モジュールのGND端子を接続する。
- Raspberry Piの5V端子(または3.3V端子。赤外線リモコン受信モジュールの動作電圧によって変えてください)と赤外線リモコン受信モジュールのVcc端子を接続する。
- Raspberry PiのGPIO14端子と赤外線リモコン受信モジュールのOUTPUT端子を接続する。
- 送信側の組み立て
- 赤外線LEDにLED拡散キャップを装着する。
- Raspberry PiのGPIO15端子と2.2kΩ抵抗を接続し、さらにトランジスタのベース(2SC1815なら平たい面に向かって右の端子)に接続する。
- Raspberry Piの5V端子(または3.3V端子。赤外線LEDの特性と電流制限抵抗値によって変えてください)と100Ω抵抗を接続し、さらに赤外線LEDのアノード(端子の長い方)に接続し、さらにトランジスタのコレクタ(2SC1815なら平たい面に向かって真ん中の端子)に接続する。
- Raspberry PiのGND端子とトランジスタのエミッタ(2SC1815なら平たい面に向かって真ん中の端子)に接続する。
回路はど素人ですが送信側を簡単に説明すると、GPIO17が供給する電流では赤外線LEDを動作させるのには不十分であるため、トランジスタを使ってコレクタ側から電流を引き込んでいる(つまり電流を増幅している)という回路です。
受信側のノイズが気になる方はコンデンサを入れましょう。
LIRCのインストール
- LIRCをインストールする。
sudo aptitude install lirc
- LIRC関連モジュールを登録する。
sudo nano /etc/modules
lirc_dev lirc_rpi gpio_in_pin=14 gpio_out_pin=15
- 再起動する。
sudo reboot
- LIRC関連モジュールを認識していることを確認する。
lsmod | grep lirc
lirc_rpi 7274 0 lirc_dev 10224 1 lirc_rpi
- LIRC用のデバイスが出来ていることを確認する。
ls -l /dev/lirc*
crw-rw---T 1 root video 248, 0 10月 1 21:00 /dev/lirc0
- 今回使用しているGPIO14番ピン、GPIO15番ピンへの割り当てがされていることを確認する。
sudo mount -t debugfs debugfs /sys/kernel/debug grep lirc /sys/kernel/debug/gpio
gpio-14 (lirc_rpi ir/in ) in hi gpio-15 (lirc_rpi ir/out ) in lo
LIRCの動作確認
- リモコンの信号を認識することを確認する。下記コマンドを実行してから、リモコンのボタンを押し、赤外線リモコン受信モジュールに当てる。
(lircdをstartした後で実施する場合はまずlircdをstopしてください)mode2 -d /dev/lirc0
space 12838908 pulse 3499 space 1739 pulse 435 space 429 pulse 410 (略)
なお、Xが上がっている環境では、xmode2を使うことで、波形を見ることができます。
読み取り結果がいまいちな場合に、目視でフォーマットを判定して、整形するのに有効です。
リモコン信号の学習
- リモコン信号を学習し、リモコン設定ファイルに記録します。
(lircdをstartした後で実施する場合はまずlircdをstopしてください)irrecord -n -d /dev/lirc0 ~/lircd_tv.conf
- 画面の指示に従い、Enterキーを2回押した後、リモコンの全てのボタンを満遍なく押す。
- ボタンを1個押すたびにターミナルに.が1個表示されるので、ターミナルの2行分表示されるまで繰り返す。
- "Please enter the name for the next button"と表示されたら、登録したいボタン名を入力してEnterを押す。
- リモコンのボタンを押す。
- リモコンのボタンの分だけ繰り返す。終わるときはEnterを押す。
- Enterを押す。
- リモコンの適当なボタン1個を連打する。1個押すたびにターミナルに.が1個表示されるので、終了するまで繰り返す。
- リモコン名がデフォルトではファイルパスになるので、区別のつく名前に変更する。
nano ~/lircd_tv.conf
(略) begin remote # name /home/pi/lircd_tv.conf name TV (略)
- リモコンが複数ある場合は、設定ファイル名を変えつつ上記を繰り返す。
lircd用設定ファイルの作成
- ハードウェア設定ファイルを作成する。
sudo nano /etc/lirc/hardware.conf
# /etc/lirc/hardware.conf # # Arguments which will be used when launching lircd LIRCD_ARGS="--uinput" #Don't start lircmd even if there seems to be a good config file #START_LIRCMD=false #Don't start irexec, even if a good config file seems to exist. #START_IREXEC=false #Try to load appropriate kernel modules LOAD_MODULES=true # Run "lircd --driver=help" for a list of supported drivers. DRIVER="default" # usually /dev/lirc0 is the correct setting for systems using udev DEVICE="/dev/lirc0" MODULES="lirc_rpi" # Default configuration files for your hardware if any LIRCD_CONF="" LIRCMD_CONF=""
- catコマンドで上記で作った個々のリモコン設定ファイルを結合して、設定ファイルの格納場所にコピーする。
sudo sh -c "cat $HOME/lircd_tv.conf $HOME/lircd_compo.conf > /etc/lirc/lircd.conf"
lircdの起動とテスト
- 起動スクリプトを登録し、Raspberry Piの起動時にlircdが起動されるようにする。
sudo update-rc.d lirc defaults
- lircdを起動する。
sudo /etc/init.d/lirc start
- リモコン設定ファイルに定義されているリモコン名(設定ファイルのnameで指定したもの)の一覧を確認する。
irsend LIST "" ""
irsend: TV irsend: COMPO
- リモコン名を指定してコード一覧を確認する。
irsend LIST TV "" (略)
irsend: 000000000100bcbd power (略)
- 下記コマンドを実行後、実リモコンのボタンを押し、リモコンの信号が正しく認識されていることを確認する。Ctrl+Cで終了。
irw
000000000100bcbd 00 power TV (略)
- リモコン信号を送信してみる。
irsend SEND_ONCE TV power
以上です。お疲れ様でした
実は学習しなくてもリモコンの設定ファイルがすでにあるかもしれない
LIRCのサイトに各種機器のリモコン設定ファイルがすでにありますので、参考にしてください。
国内電機メーカーで言うと、 ソニー、パナソニック、東芝、シャープ、三菱、日立などのリモコンがあるようです。
トラブルシューティング
mode2でエラーメッセージが出力された
下記のようなエラーメッセージが出力されることがあります。
|
その場合は、恐らくlircdが起動しています。
一旦lircdを停止させてからmode2を実行しましょう。
|
mode2でリモコン信号が表示されない
Raspberry Piと赤外線リモコン受信モジュールが正しく接続されているか確認してください。
mode2でリモコン信号は表示され、irrecordで学習はできたが、irsendで出力したリモコン信号で機器を操作できない
まず、赤外線LEDから赤外線が出力されているかを確認しましょう。
その際、赤外線は肉眼では見えないので、以下のようにして確認します。
- 下記のコマンドを実行して、赤外線を送信し続け、お手持ちの携帯電話のカメラプレビューで赤外線LEDを送信側から見てみる。
irsend SEND_START TV power
- 確認が終わったら停止する。
irsend SEND_STOP TV power
赤外線が出ている場合は白く見えます。
赤外線が出ていない場合は、Raspberry Piと赤外線LEDが正しく接続されているか確認してください。
赤外線は出ているものの機器まで届いていない場合は、学習した信号が誤っている可能性もありますが、多くの場合は赤外線LEDの角度が悪いか、赤外線の強度に対して距離が長いかです。
調整で何とかならない場合は、赤外線リピーター/赤外線ベンダーを買うとよいかもしれません。
普通の電気プラグがある機器のコンセントも操作したい
オーム電気 リモコンコンセントOCR-05 07-0155を買うとよいかもしれません。
電灯も操作したい
オーム電気 天井照明器具専用 リモコンスイッチOCR-04 07-0154を買うとよいかもしれません。
そもそも回路作るのとか面倒くさいんだけど…
Bit Trade OneのUSB接続 赤外線リモコンキットはLinuxでの動作実績があり、Raspberry Piでも動作しているようです。
- Assembly Desk - Linuxサポートについて。
- ただのメモ: BitTradeOne の赤外線リモコンKitを Linux から使ってみた
- Raspberry Piに学習リモコンを接続してみた - ロードバイクときどきiPad/Airなblog - Yahoo!ブログ
このページで説明している方法とはまったく異なりますが、候補にはなるかと思います。
そもそもRaspberry Piとか持ってないんだけど…
そんなあなたのために既製品が色々あります。
自分用リモコン設定ファイル
メーカー | 製品種類 | 製品型番 | リモコン型番 | ファイル |
Panasonic | ブラウン管テレビ | TH-36FG15 | EUR511451 | lircd_Panasonic_EUR511451_for_TH-36FG15.conf |
Panasonic | MDコンポ | SA-PM35MD | RAK-SC972WK | lircd_Panasonic_RAK-SC972WK_for_SA-PM35MD.conf |
Sony | ブルーレイレコーダー | BDZ-AT950W | RMT-B007J | lircd_Sony_RMT-B007J_for_BDZ-AT950W.conf |