モノづくりエンジニアのための情報ポータルサイト|エンジニアピット

CAREER LAB自宅のTVリモコンで、Raspberry Piを「リモートコントロール」してみよう!データ取得編

自宅のTVリモコンで、Raspberry Piを
「リモートコントロール」してみよう!
データ取得編
DATE2015/06/30
みなさんは、Raspberry Piが赤外線を受信できることをご存知でしょうか?

1個数百円ほどの「赤外線受信モジュール」を接続するだけで、一般的な家電でよく使われている「リモコン」から発せられる赤外線を受け取れるようになるのです。

そこで今回は、普段よく使う「TVリモコン」をRaspberry Piのリモコンとして動作するように回路を組み、リモートコントロールできるような環境づくりを実践してみましょう!
自宅のTVリモコンで、Raspberry Piを「リモートコントロール」してみよう!

準備するもの!

  • Raspberry Pi B+
  • ジャンパーワイヤ(オス・メス)3本
  • 赤外線受信モジュール(PL-IRM2161-XD1)1個
  • ブレッドボード1個
  • TVリモコン(自宅にあるもの)
準備するもの!
今回はTVリモコンを利用していますが、他にも自宅で使っている家電のリモコンがあれば同じ方法で流用できます。
(エアコン、ビデオ、オーディオなど…)

「赤外線受信モジュール」を使うための準備!

まずは、以下の回路図を参考にしながら、ブレッドボードへ部品を配置してみてください。
ブレッドボードへ部品を配置してみてください
※赤外線受信モジュールは、向きがあるので注意しましょう。

回路を組んだら、赤外線受信モジュールを扱うためのソフト「LIRC」を、Raspberry Piのコンソール画面からインストールしましょう!

$ sudo apt-get install lirc


そして、bootフォルダ配下にある「config.txt」へ、設定値を書き込みます。
(※Raspberry PiのOSは2015年1月以降のものを推奨)

$ sudo vim /boot/config.txt


※ファイルが開いたら、以下の内容を最下行へ追記して保存します。
dtoverlay=lirc-rpi,gpio_in_pin=24

今回は、Raspberry Piの「GPIO24番ピン」から、赤外線受信モジュールのデータを受け取るように設定しています。

あとは、Raspberry Piを再起動しておきましょう。

$ sudo reboot


これで、赤外線受信モジュールを使うための準備は完了です!

「TVリモコン」をラズパイに学習させる!

それでは、TVリモコンから発せられる赤外線を、Raspberry Piで受信できるかを確認してみましょう。

まずは、起動中の「LIRC」を中断します。

$ sudo /etc/init.d/lirc stop


そして、赤外線テスト用に以下のコマンドを実行します。

$ mode2 -d /dev/lirc0


この状態のまま、TVリモコンをRaspberry Piの受信モジュールに向けて、どのボタンでも構わないので押してみてください。
TVリモコンをRaspberry Piの受信モジュールに向けて押してみてください
すると、「space」と「pulse」が交互にズラッと表示されたと思います。

pulse 539
space 562
pulse 1659
space 559
pulse 560
space 563
pulse 1661
space 568
  ・
  ・
  ・


実は、この数値が「赤外線」の正体なのです。
リモコンのボタンが押される度に、このような数値情報が大量に飛び交っているわけですね。
この数値データをRaspberry Piに覚えさせれば、リモコンのボタンを認識できるようになります。
しかし、これだけ大量の数値データを扱うのは大変です。

そこで、今回インストールした「LIRC」には、リモコンの数値データを扱いやすい形式に変換できる機能があるので、こちらを利用してみたいと思います!

まず、数値データを「lircd.conf」というファイルに変換してみましょう。

$ irrecord -n -d /dev/lirc0 lircd.conf


コマンドを実行すると、確認メッセージが表示されるので、「エンターキー」を押して続行します。
すると、再び確認メッセージが表示され、以下のメッセージ部分でストップします。

Press RETURN now to start recording.

この状態で「エンターキー」を押すと、リモコンの数値データを学習する機能がスタートします。

次に、TVリモコンを「赤外線受信モジュール」に向けながら、どれでも構わないのでランダムにボタンを次々と押していきます。
ランダムにボタンを次々と押していきます
すると、画面上に「.(ドット)」が増えながら表示されていくのが分かると思います。

Press RETURN now to start recording.
………………………..


このまま、しばらくランダムにリモコンのボタンを押し続けていきます。

途中で、メッセージが表示されますが、気にせずにボタンを押し続けます。

Press RETURN now to start recording.
……………………………………………………………………………………
………….
Found const length: 10706 Please keep on pressing buttons like described above.
………………………………………………………...


しばらくして、「ボタン名」を入力するメッセージが表示されたら、リモコンのボタンを押すのをやめましょう。

Please enter the name for the next button (press <ENTER> to finish recording)

「ボタン名」というのは、TVリモコンのどのボタンが押されたのかを識別しやすくするための名称で、自分で好きな名前を入力できます。
例えば、電源ボタンだったら「power」と入力後にエンターキーを押し、TVリモコンの「電源ボタン」を押します。

power


Now hold down button “power”.
TVリモコンの「電源ボタン」を押します
「power」という名称で、TVリモコンの「電源ボタン」が認識されると、次の「ボタン名」を入力するメッセージが表示されます。
以下、同じように好きなボタン名を任意のリモコンボタンに割り当てていけばOKです!

何も入力せずに「エンターキー」を押すと、「lircd.conf」ファイルが生成されて終了します。

最後に、「lircd.conf」ファイルの中身を見てみましょう!

$ cat lircd.conf


ファイルの中に記載されている「begin codes」〜「end codes」の間に、先ほど割り当てた「ボタン名」が記載されていることを確認します。

begin codes
power 0xD02F
ch1 0x827D
ch2 0x807F
ch3 0x40BF
ch4 0x52AD
ch5 0x20DF
end codes


上記が確認できたら、TVリモコンの数値データを取得することに成功しています。

あとは、TVリモコンの「任意のボタン」を押した時に、割り当てた「ボタン名」と連動すればRaspberry Piに命令を伝えることができるようになります!

まとめ

今回は、赤外線受信モジュールを使い、TVリモコンから発せられる赤外線の数値データを取得するところまで実践してみました。

赤外線の数値データは、エクセルなどでグラフにしてみると、一定の周波数が描画されるので試してみると面白いですよ。

次回は、いよいよRaspberry Piのリモートコントロールに挑戦するので、お楽しみに!

エンジニアピット キャリアラボ一覧へ戻る