山田覚書

Raspberry Piで作るはじめての赤外線リモコン

Posted on Wed 29 July 2020 ( 2020-09-25 update ) in development

家庭のIT対策

自宅と実家の間を毎日行き来をしています。

実家が勤務先なので、いわゆる通勤というやつです。

自宅や実家に端末を持っていますが、拠点間でファイルのやりとりを行うにはVPNが便利ですね。自宅のサーバに勤務先からアクセス。便利です。もちろんクラウドで似たようなことが実現できますが、ファイルが大きくなってくれば保存容量を増やすために課金する必要が出てくることでしょう。運用コストや保守コストとのバランス次第ですが、自宅にサーバが既設である以上VPN一択でした。

VPNといってもいろいろ手段がありますが、やっているのは拠点間のVPNです。東京と大阪の本社支店間でネットワークを組んでいるぞ!ってやつの家庭版です。

機材は中古で調達したNECのルータ、IX2105です。もともとオークションで1台500円で入手したIX2015でVPNを張っていましたが、このほどIX2105に変更。やっとギガビット回線に追いつきました。家庭用ルータでも実現できなくはありませんが、やはり業務用ルータが手堅い。信頼できます。

ルータにはコンフィグが必要です。このコンフィグはファームウェアのバージョンによって左右されてしまうので割愛しますが、双方の拠点にDDNSでFQDNを割り当てて接続しています。ルータのマニュアルやNECが提供する設定事例を参考にすれば大丈夫でしょう。ほぼそのままです。

ちなみにNTT東日本のフレッツ網とAUひかりの間で構築しています。AUひかり側は二重ルータになっています。

特徴としては、NECのルータなのでEthernet over IP機能を利用しています。自宅と店舗は同一LANとして接続しており、ネットワーク上のサーバにどの端末からでもアクセス、実家店舗内に設置したカメラの様子を自宅からも見られます。

実家台所で食事をしながら店舗の様子を伺うためにカメラを用意しています。

古いiPodに「からくりカメラ」というIPカメラのアプリを入れて運用していましたが、iPodのOSがさすがに古いのでいずれ使えなくなると思い見守りカメラを導入することにしました。

市販のIPカメラでもよかったのですが、どうも外部サーバに動画をストリーミングして見るという方式が信用できなかったのでネットワーク内で完結したものを目指しました。

その方面の知見もないので、あまり悩まずにRaspberry Pi Wを購入してカメラを接続とド定番の方法をひとまず実行しました。

OSはRaspidianのBuster。普段からDebianを使っていますので迷わず選びました。定石通りにイメージファイルをダウンロードしてから、SDカードをフォーマットし、Balena Etcherで書き込み。wpa_supplicant.confとsshフォルダをルートに配置して起動。あとは適宜raspi-configとsshまわりの設定を行います。これにMJPG-Streamerでインストールしておしまい。簡単です。そのほかのアプリケーションは試しましたが、これが一番いいかな。

赤外線コントロール

各種リモコンの解析と再送信を実施してみることにしました。

リモコンにはRaspberry Pi ZeroのGPIOを利用します。Raspberry PiのGPIOに各種センサーやトランジスタ、LEDを接続して動作させます。

電子部品

集めたパーツは次の通りです。

品名 価格
赤外線リモコン受信モジュール OSRB38C9AA(2個入) 100円
5mm赤外線LED 940mm OSI5LA5113A グレー(10個入) 100円
MOSFET 2N7000 20円
PchパワーMOSFET(55V11A)IRFU9024NPBF 70円
カーボン抵抗(炭素皮膜抵抗)1/2W4.7kΩ(100本入) 100円
カーボン抵抗(炭素皮膜抵抗)1W27Ω(100本入) 200円
ピンソケット(メス)2x20(40P) 80円
Raspberry Pi ZERO用ユニバーサル基板 100円
ミニブレッドボード BB-601(スケルトン) 170円
手持ちのジャンパワイヤー若干 0円

今回は秋月電子でパーツを購入しました。いつもなら秋葉原まで行って購入していましたが、通販で済ませました。

作成手順は、初心者らしくブレッドボードで仮組みして動作を確認。確認できたらユニバーサル基板上に配置して半田付けします。

赤外線受信回路

必要な部品は赤外線リモコン受信モジュールOSRB38C9AAのみ。モジュールの3本の足とラズパイのGPIOをつなぐのみです。

受光器に向かって左側からOUTPUT、GROUND、OUTPUTとなっていますので、OUTPUTをGPIO18、GROUNDをGND、VCCを3.3Vに接続です。

OUTPUT >> GPIO18(物理番号12) GROUND >> GND(物理番号6) VCC >> 3.3V(物理番号1)

赤外線送信回路

ラズパイのGPIO17から信号を2N7000に、IRFU9024NPBFで赤外線LEDを操作します。

先達の情報を見るのがはやいので詳しいところは割愛。

参考になりました。大変ありがとうございました。

リモコン信号の取得と送信

pigpioというありがたいライブラリがあるそうです。

$ sudo apt-get install pigpio python3-pigpio
$ sudo systemctl enable pigpiod.service
$ sudo systemctl start pigpiod

続いてGPIOを設定。起動時に設定されるようにcrontabに記述。

@reboot until echo 'm 17 w   w 17 0   m 18 r   pud 18 u' > /dev/pigpio; do sleep 1s; done

送受信プログラムも用意されているとのことなので導入。

$ curl http://abyz.me.uk/rpi/pigpio/code/irrp_py.zip | zcat > irrp.py

信号の取得は次のようなコマンドです。手近なテレビリモコンの電源ボタンでテスト。

$ python3 irrp.py -r -g18 -f codes tv:on --no-confirm --post 130
Recording
Press key for 'tv:on'
Okay

送信も簡単。

$ python3 irrp.py -p -g17 -f codes tv:on

テレビのチャンネルの信号をさらに追加して、シェルスクリプトで電源オンからチャンネルをザッピングして電源オフなんて信号を送ってみたりしテストしてみましたが動作に問題はなし。とっても簡単でした。先達の知見あってのらくちんさ。

確認が取れたらユニバーサル基板に半田付けです。レイアウトは結構考えてしまいます。なるべくスマートにしたいんですが、どうしたものか。Excelで図を作成したりして検討しました。

ソケットを溶かした

半田付けの作業に入るとやらかしてしまいました。ピンソケットを半田ごてで溶かしてしまう失態。もう老眼でよく見えていないという事実を突き付けられました。

ラズパイ赤外線リモコン

途方に暮れてみたものの、模型加工のつもりで、なんとか穴をピンバイスであけなおしてリカバリ。赤外線リモコンボードの完成までこぎつけました。

あとはGoogle HomeやSiri、Alexaとの連携をすれば完成のはず。目指しているのは高齢者の見守りカメラとエアコンの適温管理。温度センサーも実装しようかな。もう少し続くと思います。