はじめに
赤外線リモコンで家電制御しようとすると、リモコンの信号が確実に届いたかどうかの確認方法がなくて困ります。
リモコンの送信に失敗したらリトライしたい。機器連携とはかくあるべきだ!
そこで、電源インジケータのLEDに配線を半田付けして拾ってくるという方法を考えてみます。
前提となるLED駆動回路
LEDの点灯方法はいろいろあると思うのですが、ここでは下図の①か②を前提とします。なぜこれかというと、たまたま私がいじったエアコンがそうだったから、です。
回路
LEDのアノード側を直接GPIOに入れても動くとは思うのですが、5V I/OのGPIOだと(たとえばArduinoだと)、点灯しててもLOW側に張り付いたままになりそうです。
そこでトランジスタを用いた反転増幅回路を組みます。
簡単に動作を説明しておきます。
LEDが光ってないときは、ベース・エミッタ電流が流れないので、コレクタ電流も流れず、プルアップによりGPIOがHIGHになります。
LEDが光っているときは、ベース・エミッタ電流が流れて、それにともないコレクタ電流が流れて、プルアップからの電流がそっちに引っ張られて、GPIOはLOWになります。
「反転」増幅回路なので、光っているときにLOW,光ってないときにHIGHになるところがポイントです。
家電側・自作回路側で 3.3V I/O と 5V I/Oが混在してても問題なく動きます。
PULLUPの所に抵抗値を書いてませんが、最近のマイコンにはソフトウェアプルアップがついていると思うのでそれを使うとよいでしょう。もしついてない場合は10kΩ程度の抵抗を使えばいいと思います。
トランジスタのベース側の抵抗値は4.7kと書いてますが、1k~10kぐらいなら大丈夫だと思います。ちなみに、抵抗値が高くなるほど家電側に負担を掛けなくなり、しかし自作回路が不安定になります。
たくさんのLEDに配線したい
せっかく配線するなら、家電にあるLEDの数だけ配線したい気持ちになります。そうするとLEDの数だけ抵抗とトランジスタを用意して、それぞれ配線しなければならないのですが、結構面倒です。
そんなときは、トランジスタアレイを使いましょう!
秋月電子などで売られている TD62083APG が利用できます。8回路分のトランジスタとベース制限抵抗が入っていると考えて大丈夫です。
Ix にLEDのアノード側を、 Ox にGPIO をつなげればOKです。もちろんGNDはGNDにつないでください。COMMONは自作回路側のVCCをつなげるんですが、保護回路用なのでつながなくても動きます。なお、プルアップ抵抗はついてないので、マイコン側のソフトウェアプルアップを有効にしましょう。
(実はこれ、データシート上の入力電圧(出力オン)が「2.5V」と書かれているので、LEDの電圧より高くてダメなんですが、手元の実験では1.6Vぐらいから出力オンになります。)
PWM制御されている場合がある件
ここまで読み進めることができた方は、LEDの明るさを変えるためにPWM制御を試してみたことがあると思います。
家電もPWM制御している場合があります。
私が試してみたエアコンも、PWM制御していました。
最初それに気づかず、点灯時にHIGHになったりLOWになったり不安定になってしまう原因が分からず四苦八苦してしまいました。
PWM制御されているLEDの点灯状態を取得する場合は、LOWになったら(点灯したら)即時点灯と判断し、消灯した場合はPWM周期分消灯し続けていたら消灯と判断するようプログラムを組む必要があります。
実例
おわりに
全体の話がなく、「LEDの点灯状態を引っこ抜く」ことにフォーカスしすぎてよくわからない記事になってしまったかもしれません。
しかし、電子工作初心者から一歩抜け出して使えるモノを作りたい方には参考になったのではないでしょうか。
なお、この記事を見て家電などを壊しても一切責任を負いません m(_ _)m