Top/Devel/電子工作/RaspberryPi/赤外線学習リモコン

赤外線学習リモコンはてなブックマーク

lirc01.jpg

Raspberry Piに簡単な回路を接続し、LIRC (Linux Infrared Remote Control)をインストールして、赤外線リモコン信号の受信/送信をしてみます。

なお、回路の組み立てには半田ごては不要です。

OSのインストールやWiFiドングルのセットアップなどの初期設定はこちらをご覧ください。


この後、Raspberry Pi + irMagicianで作り直しました!

参考

必要なもの

部品用途備考
赤外線LED送信用。なるべく半減角が広いものが良いです。今回は後述のLED拡散キャップを併用したため、秋月電子通商で購入した OSI5FU5111C-40 (半減角15度)を使用しました。
赤外線リモコン受信モジュール受信用。何でも良いと思います。ただし、リモコン用途以外の赤外線センサを買わないように注意。今回は秋月電子通商で購入した OSRB38C9AA を使用しました。
トランジスタLEDへの電流を増幅するために使います。NPN型なら何でも良いと思います。今回は千石電商で購入した 2SC1815-GR を使用しました。千石電商の2Fならバラ売りしてます。
抵抗 100ΩくらいLEDへの電流を制限するために使います。カラーコードは茶黒茶金。何でも良いです。千石電商のB1Fならバラ売りしてます。本来は抵抗値はLEDに合わせて調整するはずです。
抵抗 2.2kΩくらいトランジスタのベース端子への電流を制限するために使います。カラーコードは赤赤赤金。何でも良いです。千石電商のB1Fならバラ売りしてます。本来は抵抗値はトランジスタに合わせて調整するはずです。
ブレッドボードこの上で部品を組み立てます。何でも良いです。これ とか。
ジャンプワイヤ(オス-メス)Raspberry Piとブレッドボードを接続するために使います。何でも良いです。 これ とか。
ジャンプワイヤ(オス-オス)ブレッドボード上で部品を接続するために使います。何でも良いです。 これ とか。

あった方がいいもの

部品用途説明
LED拡散キャップ信号が機器に届きやすくなります。今回は千石電商で購入した 5mm用LED拡散キャップ(透明) を使用しました。今回使ったプラスチック製の他にシリコンラバー製のものもありますが、あまり効果がなかったです。

手順

回路の組み立て

lirc02.jpg
lirc01.jpg

上記部品をブレッドボードとジャンプワイヤを使って組み立てます。


lirc03.jpg
  1. 受信側の組み立て
    1. Raspberry PiのGND端子と赤外線リモコン受信モジュールのGND端子を接続する。
    2. Raspberry Piの5V端子(または3.3V端子。赤外線リモコン受信モジュールの動作電圧によって変えてください)と赤外線リモコン受信モジュールのVcc端子を接続する。
    3. Raspberry PiのGPIO14端子と赤外線リモコン受信モジュールのOUTPUT端子を接続する。
      lirc04.jpg
  2. 送信側の組み立て
    1. 赤外線LEDにLED拡散キャップを装着する。
    2. Raspberry PiのGPIO15端子と2.2kΩ抵抗を接続し、さらにトランジスタのベース(2SC1815なら平たい面に向かって右の端子)に接続する。
    3. Raspberry Piの5V端子(または3.3V端子。赤外線LEDの特性と電流制限抵抗値によって変えてください)と100Ω抵抗を接続し、さらに赤外線LEDのアノード(端子の長い方)に接続し、さらにトランジスタのコレクタ(2SC1815なら平たい面に向かって真ん中の端子)に接続する。
    4. Raspberry PiのGND端子とトランジスタのエミッタ(2SC1815なら平たい面に向かって真ん中の端子)に接続する。


回路はど素人ですが送信側を簡単に説明すると、GPIO17が供給する電流では赤外線LEDを動作させるのには不十分であるため、トランジスタを使ってコレクタ側から電流を引き込んでいる(つまり電流を増幅している)という回路です。


受信側のノイズが気になる方はコンデンサを入れましょう。

LIRCのインストール

  1. LIRCをインストールする。
    sudo aptitude install lirc
  2. LIRC関連モジュールを登録する。
    sudo nano /etc/modules
    lirc_dev
    lirc_rpi gpio_in_pin=14 gpio_out_pin=15
  3. 再起動する。
    sudo reboot
  4. LIRC関連モジュールを認識していることを確認する。
    lsmod | grep lirc
    lirc_rpi                7274  0
    lirc_dev               10224  1 lirc_rpi
  5. LIRC用のデバイスが出来ていることを確認する。
    ls -l /dev/lirc*
    crw-rw---T 1 root video 248, 0 10月  1 21:00 /dev/lirc0
  6. 今回使用している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の動作確認

  1. リモコンの信号を認識することを確認する。下記コマンドを実行してから、リモコンのボタンを押し、赤外線リモコン受信モジュールに当てる。
    (lircdをstartした後で実施する場合はまずlircdをstopしてください)
    mode2 -d /dev/lirc0
    space 12838908
    pulse 3499
    space 1739
    pulse 435
    space 429
    pulse 410
    (略)


なお、Xが上がっている環境では、xmode2を使うことで、波形を見ることができます。

読み取り結果がいまいちな場合に、目視でフォーマットを判定して、整形するのに有効です。

リモコン信号の学習

  1. リモコン信号を学習し、リモコン設定ファイルに記録します。
    (lircdをstartした後で実施する場合はまずlircdをstopしてください)
    irrecord -n -d /dev/lirc0 ~/lircd_tv.conf
  2. 画面の指示に従い、Enterキーを2回押した後、リモコンの全てのボタンを満遍なく押す。
  3. ボタンを1個押すたびにターミナルに.が1個表示されるので、ターミナルの2行分表示されるまで繰り返す。
  4. "Please enter the name for the next button"と表示されたら、登録したいボタン名を入力してEnterを押す。
  5. リモコンのボタンを押す。
  6. リモコンのボタンの分だけ繰り返す。終わるときはEnterを押す。
  7. Enterを押す。
  8. リモコンの適当なボタン1個を連打する。1個押すたびにターミナルに.が1個表示されるので、終了するまで繰り返す。
  9. リモコン名がデフォルトではファイルパスになるので、区別のつく名前に変更する。
    nano ~/lircd_tv.conf
    (略)
    begin remote
     
    #  name  /home/pi/lircd_tv.conf
      name  TV
    (略)
  10. リモコンが複数ある場合は、設定ファイル名を変えつつ上記を繰り返す。

lircd用設定ファイルの作成

  1. ハードウェア設定ファイルを作成する。
    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=""
  2. catコマンドで上記で作った個々のリモコン設定ファイルを結合して、設定ファイルの格納場所にコピーする。
    sudo sh -c "cat $HOME/lircd_tv.conf $HOME/lircd_compo.conf > /etc/lirc/lircd.conf"

lircdの起動とテスト

  1. 起動スクリプトを登録し、Raspberry Piの起動時にlircdが起動されるようにする。
    sudo update-rc.d lirc defaults
  2. lircdを起動する。
    sudo /etc/init.d/lirc start
  3. リモコン設定ファイルに定義されているリモコン名(設定ファイルのnameで指定したもの)の一覧を確認する。
    irsend LIST "" ""
    irsend: TV
    irsend: COMPO
  4. リモコン名を指定してコード一覧を確認する。
    irsend LIST TV ""
    (略)
    irsend: 000000000100bcbd power
    (略)
  5. 下記コマンドを実行後、実リモコンのボタンを押し、リモコンの信号が正しく認識されていることを確認する。Ctrl+Cで終了。
    irw
    000000000100bcbd 00 power TV
    (略)
  6. リモコン信号を送信してみる。
    irsend SEND_ONCE TV power


以上です。お疲れ様でした :)

実は学習しなくてもリモコンの設定ファイルがすでにあるかもしれない

LIRCのサイトに各種機器のリモコン設定ファイルがすでにありますので、参考にしてください。

国内電機メーカーで言うと、 ソニー、パナソニック、東芝、シャープ、三菱、日立などのリモコンがあるようです。

トラブルシューティング

mode2でエラーメッセージが出力された

下記のようなエラーメッセージが出力されることがあります。

mode2: could not open /dev/lirc0
mode2: default_init(): Device or resource busy

その場合は、恐らくlircdが起動しています。

一旦lircdを停止させてからmode2を実行しましょう。

sudo /etc/init.d/lirc stop

mode2でリモコン信号が表示されない

Raspberry Piと赤外線リモコン受信モジュールが正しく接続されているか確認してください。

mode2でリモコン信号は表示され、irrecordで学習はできたが、irsendで出力したリモコン信号で機器を操作できない

まず、赤外線LEDから赤外線が出力されているかを確認しましょう。

その際、赤外線は肉眼では見えないので、以下のようにして確認します。

  1. 下記のコマンドを実行して、赤外線を送信し続け、お手持ちの携帯電話のカメラプレビューで赤外線LEDを送信側から見てみる。
    irsend SEND_START TV power
  2. 確認が終わったら停止する。
    irsend SEND_STOP TV power

赤外線が出ている場合は白く見えます。

赤外線が出ていない場合は、Raspberry Piと赤外線LEDが正しく接続されているか確認してください。


赤外線は出ているものの機器まで届いていない場合は、学習した信号が誤っている可能性もありますが、多くの場合は赤外線LEDの角度が悪いか、赤外線の強度に対して距離が長いかです。

調整で何とかならない場合は、赤外線リピーター/赤外線ベンダーを買うとよいかもしれません。

普通の電気プラグがある機器のコンセントも操作したい

オーム電気 リモコンコンセントOCR-05 07-0155を買うとよいかもしれません。

電灯も操作したい

オーム電気 天井照明器具専用 リモコンスイッチOCR-04 07-0154を買うとよいかもしれません。

そもそも回路作るのとか面倒くさいんだけど…

Bit Trade OneのUSB接続 赤外線リモコンキットはLinuxでの動作実績があり、Raspberry Piでも動作しているようです。

このページで説明している方法とはまったく異なりますが、候補にはなるかと思います。

そもそもRaspberry Piとか持ってないんだけど…

そんなあなたのために既製品が色々あります。

自分用リモコン設定ファイル

メーカー製品種類製品型番リモコン型番ファイル
Panasonicブラウン管テレビTH-36FG15EUR511451filelircd_Panasonic_EUR511451_for_TH-36FG15.conf
PanasonicMDコンポSA-PM35MDRAK-SC972WKfilelircd_Panasonic_RAK-SC972WK_for_SA-PM35MD.conf
SonyブルーレイレコーダーBDZ-AT950WRMT-B007Jfilelircd_Sony_RMT-B007J_for_BDZ-AT950W.conf

関連

Amazon

*1 家製協/AEHAとも。家電製品協会の略。
差分 一覧