nyabot’s diary

電気猫の夢を見るお話

Raspberry Piで赤外線の送受信をする

以前の方法(以下記事)では、赤外線の送受信が完全ではなかったので、作り直しました。

nyabot.hatenablog.com

今回作りたい赤外線送信モジュールの条件は以下。

  1. テレビ以外の電子機器も操作できること
  2. 数メートル離れた位置から操作できること
  3. 多少角度が違っても赤外線が届くこと
  4. LEDを複数使わないこと

赤外線LEDはロボットの尻尾に搭載する予定なので、角度を変えて複数個LEDを設置する、という方法はとりたくありません。 そのため、基本方針として電流とソフト側の調整でなんとかしたいと思っていました。

ソフトに関しては、以下の記事をもとにpigpioを導入し使用します。

qiita.com

赤外線送信部の回路についてだけ、いくつか変更をしています。
上記記事でFETを使用しているところを、メジャーなトランジスタ2SC1815GRで代用。抵抗も少し大きくしています。

前回のLIRCを用いたテストでは、50mA程度の電流でも十分に機器の操作ができたことから、今回もLIRCのときと同じ電流値50mAで試したところうまくいかず。
機器が全く反応しないため、てっきり設定等にミスがあったかと思い色々試すもうまくいかず。。
そのまま数ヶ月放置していたのですが、結局、電流を大きくしたら無事動作が確認できました。

赤外線LEDに流す電流量について

赤外線LEDに流す電流の大きさですが、お高いLEDだと絶対最大定格が300mAのものがあります。電流が大きければ大きいほど赤外線は遠くまで飛ぶはずですが、私の場合は電流は300mAに収まる程度で十分と予想。そもそも前回は50mAで届いたので、200mAもあれば十分かなぁと(部屋も広くないし)。
上記記事の引用先を読んでみたところ、より大きな電流を流そうとする場合、2SC1815ではhFEの降下があるためFETを使用した、ということみたいです。なるほど。

抵抗計算

抵抗器は47Ωと4.7kΩの2種類を使用します。
抵抗器にも定格電力があるので、それをオーバーしないように計算。

抵抗器の定格電力は、次の三種類があるみたいです。

  • 1/4W
  • 1/2W
  • 1W

今回は低い抵抗で大きな電流を流したいため、1Wの抵抗器を追加で購入しました。 抵抗器に流れる電流と電圧は、以下のようになります。

47Ω抵抗器に流れる電流

I = V / R
I = 5[V] / 47[Ω]
I ≒ 0.106[A] = 106[mA]

電力は電流と電圧の積だから、0.106*5でおよそ0.53Wになるはず。

定格電力は値の半分以下で使用するものらしいので、1Wの半分と考えると若干オーバーしていますが、赤外線LEDに電気を流す時間はごく短時間なので問題ないだろうという考え。

LEDに47Ωの抵抗器を並列に二つ繋いで、合計最大約212mAの電流が流れるようにします。
実際に流れる電流は、トランジスタ2SC1815のベースに流す電流によって決まります。

4.7kΩ抵抗器に流れる電流

I = V / R
I = 5[V] / 4700[Ω]
I ≒ 0.00106[A] = 1.06[mA]

およそ1mA。ラズパイのGPIOに流す電流は8mAまでにすべきですが、この電流量なら問題ありません。
今回用意したトランジスタ2SC1815GRの増幅率(hFE)はデータシートによると200~400なので、コレクタからの電流はおおよそ212~424mA程度までエミッタに流れることになります。つまりエミッタおよびLEDには、先ほど計算したコレクタに流れる電流の最大(約212mA)+ベース電流(約1mA)=約213mAが流れる。はず。

赤外線送信回路

赤外線送信部の回路は以下のような形に(実際は向きや配置を少し変えているけど、わかりにくかったので調整)。

f:id:sizohu:20200421112800p:plain

トランジスタの各足は、画像の左から順にエミッタ、コレクタ、ベースになっています。
ラズパイからは5Vを赤外線LEDの陽極に、GPIO17をトランジスタのベースに繋いでいます。

実際はこれに赤外線受信モジュールが加わりますが、回路図作成ソフトに該当する部品が見つからなかったので省略。

結果

pigpioのインストール、上記記事にある設定およびIR Record and Playbackのダウンロード後、以下のコマンドで学習&送信。

学習

例)GPIO18を用いて照明ONの赤外線コードを学習、codesファイルに記録

$ python3 irrp.py -r -g18 -f codes light:on --no-confirm --post 130

送信

例)GPIO17を用いて、学習した照明ONの赤外線コードを送信

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

動作は完璧!
大体の角度だけあわせてあげれば、3mほどの距離から問題なく機器の操作ができるようになりました。

失敗もしつつ、数ヶ月越しに完成したからとても嬉しい。

つづく。