読者です 読者をやめる 読者になる 読者になる

Rapsberry Pi 2で高出力リモコン操作を行う

Qiitaの以下の記事

qiita.com

に触発されて自分でもエアコンをコントロールしたいと思い、Rapsberry Pi 2 B (1)を購入しました。上記記事はちょっと古いため書いてある通りにしてもうまく行きません。特に赤外線送信が短距離でしか行えないという問題点があります。調べてみると多くのブログでこの現象に悩まされているようです。試行錯誤の末、通常のリモコン程度の出力は出せるようになったので紹介したいと思います。

結論から言うと、LEDにもっと大きい電流を流せばよいだけでした。リモコンの赤外線出力は38kHzのパルス波を信号として使っているため、条件によっては定格の10倍くらいの電流が流れても壊れてしまうことはないということです。

「パルス波は300マイクロ秒以上が1単位では?」と思った人は以下のサイトが参考になるかと思います。

http://elm-chan.org/docs/ir_format.html
f:id:canadie:20150906100431p:plain

38kHz(26マイクロ秒)のパルス波を数百マイクロ秒単位で明滅させてます。つまりリモコンのパルス信号のHIGH部分(信号が出てる部分)を細かく見るとそこもパルスになってるんですね。赤外線は日常にも溢れていますから、受光器(テレビとか)は赤外線のうち38kHzの部分を取り出し(検波し)てからパルス信号の解析を行っているようです。

データシートを見てみましょう。

OSI5FU5111C-40.pdf

f:id:canadie:20150906094347p:plain

ぱっと見、「DC Forward Current」が定格に見えるので100mAしか出せないことになります。リモコンが届かないという人はこの数字を参考にしてるかと思います。しかしその下に、「Pulse Forward Current」というのがあって、パルス順方向の定格が1,000mAとなっています。ただしこれには条件があり、PDFによれば

*Pulse Width≦100us, Duty≦1/100

つまり、100マイクロ秒(0.1ミリ秒)のパルス波で、Duty比が1/100の時に限ると書いてあります。Duty比というのはパルスのうち信号が流れている期間と流れていない期間の比率です。ちなみに赤外線リモコンは38kHzなので1/38,000=26マイクロ秒なので問題はないですね。ただしDuty比が赤外リモコンの場合1/2です。しかし、38kHzのパルスを数百マイクロ秒明滅させているわけなので、微妙ですがそこそこ流してもLEDは大丈夫そうです。

検索していると以下のサイトを見つけました。600mAを流そうとしているようです。5V電源の容量を気にしているようですが、

Raspberry PiのGPIOの配置図と基本的な説明 | ものづくりエクスペリメント

によると電源に2A以上流れて入れば大丈夫そうです。私は750mA流してみました。12.5mA流れば良いようなので

(3.3-0.9)V÷0.0125mA=192Ω

192Ωの抵抗を入れれば良いようです。ちょっと余裕を見て200Ωの抵抗を入れることにしました。

f:id:canadie:20150905143754p:plain

これで普通のリモコンと同じぐらいの出力が出るようになりました。ちなみにLEDは電圧が高すぎると電流がいくらでも流れるようになってしまうらしく、これを防ぐためにお守りで10Ωの抵抗を挟んでいます。ベース・エミッタ間の抵抗をもう少し流れるようにして出力を上げてみたいとも思いますが、今のところこの回路でも充分なパフォーマンスが出ているので良しとします。

なお、普通のリモコンと同じように壁に一度反射させてもエアコンの電源がつきました。

他でも振れられていますが赤外線LEDは指向性が強いので、部屋中のものの電源を操作したいのであればLEDを複数つけるとか、ゴムキャップを付けるなどの対策が必要だと思います。LEDを複数つける場合には、同時点灯だとRaspberry Pi側の出力が足りなくなると思いますので外部電力が必要かも知れません(別々の回路に順番に流すという方法も考えられなくはない)