警告:本記事を参考にした結果、故障や火災など重大な事故につながったり、メーカー保証がなくなっても責任を負えませんのでご注意ください。
東芝 の業務用エアコンと同類の家庭用エアコンを利用しています。下の写真のようなリモコンが壁に設置されていて、2本線のケーブルで本体に接続されています。設定温度を変えたり送風に切り替えたりといった操作はリモコンまで行かないとできないのが不便で、温度制御も外気温の影響なのか同じ設定温度でも暑すぎたり寒すぎたりといったことがあり、なんとかしたいと思っていたのですが、ついに2本線のケーブルでどうやって制御しているのか解析したい気持ちが抑えられなくなりました。
リモコン
有線リモコンの解析
リモコンの裏側はこんな感じになっています。写真は使用中の業務用エアコン類似の家庭用のものではなく、中古で入手した業務用エアコンのリモコンRBC -AMT31(SX-A1E)ですが、IC1の型番と中央下のシルク印刷の数字を除いて基板は全く同じのようです。
リモコン基板
左上の端子の下に通信関連と電源回路が実装されていて、右上には温度センサ、その下にマイコン らしきもの(IC1: H8S/2264?)と、シリアルEEPROM(IC5: BR24L01A?)があります。IC1は業務用と家庭用で刻印されている型番が違っていて、搭載しているプログラムが異なるのではないかと思います。
通信部分がどうなっているのか知りたいので左側、端子下の部分を回路図におこしました。
通信線インターフェースと電源部の回路
エアコン本体につながるAB端子の2本線の接続先の回路は次のようになっていました。(ICやトランジスタ の型番はラベル表示から推定したものです)
有線リモコンの内部回路(必要部分のみ)
動作解析
AB端子は極性がなく、2本線を入れ替えても問題ないよう入力部にダイオード ブリッジが入っていて、TP3は通信がないときにDC15V程度、通信時のマーク符号で14Vくらいまで電圧が下がるような波形になっていました。
TP3の電源重畳信号は分岐して、一方はR13を経由してリニアレギュレータで+5Vの電源(TP4)を生成、もう一方はC1でAC結合してD5でクランプしたあとQ3を経てコンパレータIC3出力の1ピンに5Vロジックのシリアル通信パルスが出力されるようになっているようです。D5のクランプは、電源断のときにQ3のVBEが-15Vになって破壊されないための保護回路だと思います。リモコンからエアコン本体に送信する際にはマーク符号に対応してQ2のベースをD6経由でプルダウンし、Q1をON状態にしてAB線に電流を流すことで電圧降下させるような仕掛けになっているようです。
Analog Discovery 2 で測定したリモコン基板上の波形です。
H_TAP電圧(Channel2), RX_TAP電圧(Channel1)と復号したデータ
青い波形がAB線からダイオード ブリッジを通った直後の波形で、振幅の異なるパルス列が2つありますが、最初のほうがリモコンからの送信波形で、後ろのほうの振幅が大きい波形はエアコン本体からの返答のようです。リモコン側の波形で測定すると、マーク時には14.2V / 330Ω = 43mAくらい流れることと、その際の電圧降下が0.842Vなので、AB線のソースインピーダンス は20Ωくらいということになります。
リモコンの消費電流(R13端子間の電位差で測定)
AB線から供給される有線リモコンの電源電流は常時20mA程度のようです。
リモコンと本体間の通信
シリアル通信のパラメータについては、IC3の1ピンをAnalog Discovery 2のデジタル入力につないで、UARTの分析機能を使って調べました。Analog Discovery 2のDIO は5Vトレラントですが、内部で3.3Vにクランプされているようなので手元にあった14kΩ経由で接続しました。ちゃんと復号できる組み合わせを探したところ、2400bps, 8bit, even parity, stop bit 1で正常に復号できました。
その後、通信データ解析のため、BlueSMiRF というBluetooth 経由でシリアル通信できるモジュールをフォトカプラを介してIC3の1ピンに接続し、モバイルバッテリーで動作させてPCでデータをとって調べた結果、
送信元アドレス/送信先 アドレス/不明1Byte/ペイロード 長/ペイロード /チェックサム
という構造のパケット単位で通信していることがわかりました。チェックサム は1バイト目から最後までXORしたものです。
ここから先、パケットの中身を解析するのはかなり大変なので、似たようなことをしてる人がいないか探してみたところ、まさに同じようなことをしている人がいました。こちらを参考にすれば、スマホ からエアコンを操作することも実現しそうです。
github.com
ワイヤレスコントローラの製作
Bluetooth は接続が突然切れたりして不安定で、常時使用するのには向かない気がするので、WiFi が使えるESP32マイコン でMQTTブローカーに接続してWEBアプリからブローカー経由で制御するような構成を考えました。
ハードウエアの検討
そのためのハードウエアにはM5Stamp Pico という小型省電力のESP32マイコン を使い、電源はAB線から頂くことを検討しました。M5Stamp Picoを80MHzで動かし、MQTTブローカーにWiFi で接続すると、3.3V端子から電源給電する場合、平均電流40mA~45mA程度でした。(この値は接続先アクセスポイントの設定で変わる可能性があります。テスト環境ではビーコン間隔100msec, DTIM=1の設定で運用中のAPに接続しています。)スイッチングレギュレータを使って15VのAB線から降圧すれば、AB線からもらう電流は10mAくらいで済みそうです。リモコンの据え付け説明書や空調機器 ハンドブックの応用制御編によると有線リモコンは親機と子機各1台ずつの2台まで接続できるとありますので、親機1台のみ設置時にはAB線の定常的な電源供給能力は最低でも20mA余裕があるので、10mA程度なら問題なさそうです。ただ、Stamp Picoには瞬間的に200mA超の電流がながれるので、単純にスイッチングレギュレータを使うだけだとAB線に電源電流の変動波形がのってしまいます。
下図は起動してクロックを80MHzに設定、WiFi とMQTTの接続というプログラムを走らせた時の3.3V電源の電流波形です。1Ωのシャント抵抗を電源とPicoの間に挿入して電流を計測しています。
M5Stamp Pico起動時の電流波形(3.3V給電)
無線LAN 起動後、アクセスポイントに接続するまで定常的に100mA流れています。接続後はmodem-sleepでアクセスポイントのビーコン間隔に合わせて間欠的に無線回路を起動し、平均電流が小さくなるような動作をしています。
ワイヤレスコントローラーの回路
電源電流変動の影響を抑えるため、大容量の電気二重層キャパシタ を使うことにして、最終的には次のような回路にしました。
自作ワイヤレスコントローラーの回路
リモコンと自作コントローラの結線
電気二重層キャパシタ C2充電時に過大電流が流れないよう、電流制限回路を挿入しています。そのためC2に直結のStamp Pico (M1)の電源電圧は、かなりゆっくり上昇します。それでもM1が正しく起動するよう2.7Vの電源監視IC (U1)を使ってM1にリセットをかけています。世界的な半導体 不足で電源監視ICは主要なものが軒並み在庫なしの状態で、ちょうどいいものを探すのに苦労しました。
電流制限用トランジスタ はコレクタ損失最大定格が十分なものを探せなかったので、Q1, Q2の2系統並列接続にしました。
M2はスイッチングレギュレータAP63203搭載のSparkFunの3.3V降圧レギュレータモジュール です。M2の入力に入っているC1は、これがないとM2が不安定になって電流がステップ状に変動してしまうために入れてあります。それだけだとAB線の通信パルスをAC的にショートしてしまうためR5を入れましたが、R5の電圧降下が大きいと、それに従ってM2の入力電流が大きくなってしまうため、C2充電時の最大電流で動作が破綻しないように値を決めました。AB線のソースインピーダンス 推定値が20Ω程度なので、R5が47Ωだと通信パルスの振幅がもとの70%くらいになってしまう計算ですが。
電気二重層キャパシタ C2は秋月電子通商から購入 した1.5F 5.4Vのもので、等価直列抵抗がDCで195mΩという大電流充放電対応のものを使いました。寿命は65℃, 5.4Vで1000時間なので、10℃低下で寿命2倍の法則と、電圧のディレーティングがよくわかりませんがパナソニックの技術資料 にある5.5V品を3.3Vで使用した場合に2.8倍という記述を参考にすると、ちょっと心もとないですが3年半くらいの寿命になりそうです。
シリアル信号の接続には、Stamp Pico側の電源立ち上がりが遅いのと、電圧レベルも異なるのでフォトカプラを使っています。TX側はフォトカプラだけだとパルスの立ち上がりがなまって通信できなかったので、R10とD2Aを入れました。
ワイヤレスコントローラー基板の製作
作製した基板がこちらです。
自作コントローラ基板
壁のリモコンのバックプレート裏側のスペースに入れるため、小さく作りたかったのと、部品の入手性を考えて、回路図青の点線部分はチップ部品と汎用シール基板(サンハヤト ICB -078)を使って組みました。
半田付けにそこそこ時間がかかったので、深セン の基板屋などで基板を起こしたほうがはやかったかもしれません。
動作状態の確認
エアコン本体からAB線経由で電源供給をうけるので、過大電流がながれたり通信を妨害したりしていないかAnalog Discovery 2を使って各部の波形を測定しました。
電源投入時
電源投入時のVDD_MCU 電圧(Channel 1)と/RESET電圧(Channel 2)
電源投入時のStamp Picoの電源電圧とリセット信号の波形です。起動後クロックを80MHzに設定しWiFi に接続、さらにMQTT接続後RC_RXのシリアル信号をパケット毎にMQTTでそのまま送信するプログラムを実行しています。ESP32-PICO-D4のデータシート では電源電圧の最低値が3.0Vとなっているのですが、定常状態ではこの条件をみたしています。
電源投入時のM2-3V3電圧(Channel 2), Q1エミッタ電圧(Channel 1)とC2充電電流(Math 1)
C2充電電流最大値は150mA程度です。
電源投入時のRC_H電圧(Channel 2), M2-VIN電圧(Channel 1)とM2-VIN入力電流(Math 2)
C2充電時にAB線から流れ込む最大電流は50mA程度です。ところどころのスパイクは通信パルスですが、C2充電時もリモコンと本体は正常に通信できているようです。
通常動作時
定常状態のRC_H電圧(Channel 2), M2-VIN電圧(Channel 1)とM2-VIN入力電流(Math 2)
C2充電完了後の定常状態にAB線から流れ込む電流は13mA程度です。有線リモコン子機を接続していなければ問題ない電流値です。RC_H電圧にのっている通信パルスの振幅は見積もり通り自作ボード接続前の70%くらいになっています。
RC_H電圧(Channel 1)とリモコン基板のQ3コレクタ電圧(Channel 2)
自作ボードを接続したことで、AB線の通信パルス振幅が減少しましたが、リモコン基板上ではQ3で十分増幅されているので問題なさそうです。本体側も同様の回路だとすれば、とくに問題はなさそうです。
異常時
AP停止時のRC_H電圧(Channel 2), M2-VIN電圧(Channel 1)とM2-VIN入力電流(Math 2)
なんらかの理由で無線LAN に接続できない場合、modem-sleepが効かなくなってStamp Picoの消費電流が大きくなり、AB線からの電源電流は30mA程度になります。有線リモコン1台の消費電流が20mAあることと、リモコンは親機1台子機1台の合計2台まで接続できることから、AB線の電源供給余力は、接続するリモコンが親機だけなら最低20mAあります。余力が本当に20mAぎりぎりとすると無線LAN アクセスポイントが長時間停止した場合、常時10mAほど足りない計算になります。また、自作ワイヤレスコントローラでは電流制限回路の電圧降下でStamp Picoの電源電圧が2.8V程度まで低下し、最低電圧の規格を満たさなくなります。ESP32の他のバージョンでは以前は最低電圧2.2Vと指定されていたものが無線接続時の安定性を考慮して3.0Vに修正されたという経緯らしいので、アクセスポイント復帰時に安定して再接続できない可能性があります。
そこで接続が切れた場合、deep-sleepを入れるようにしました。
RC_H電圧(Channel 2), M2-VIN電圧(Channel 1)とM2-VIN入力電流(Math 2)
グラフの0分から2分あたりまでアクセスポイントが停止しています。無線LAN 切断直後40mAまで消費電流が増えている点に懸念がありますが、20秒deep-sleepして約5秒以内に再接続できない場合は再度deep-sleepする設定で、アクセスポイントが長時間停止しても20mA以上流れないようにできました。ずっと電流が増減し続けるのもよくなさそうなので、分単位のdeep-sleepを入れるかリトライ回数に従ってsleep時間を増やすのがいいかもしれません。
MQTTサーバーが停止した場合については、目立った消費電流の増加はありませんでした。
M5Stamp Picoのファームウェア はこちらです。
github.com
まとめ
東芝 製業務用エアコン類似機種を操作するためのワイヤレスコントローラを作成しました。
電源は有線リモコンからとっているので別系統の電源を用意する必要がなく、リモコンの裏に埋め込むことができて外観を損ないません。
スマホ やPCから操作するためのソフトウエアはまだ完成していませんが、MQTTサーバー経由でパケットを送って簡単な制御ができることを確認しています。
電源投入時に約30秒、無線LAN アクセスポイント停止直後に10秒程度、エアコン本体から最大50mA程度の電流が流れる点に懸念がありますが、その他の状態ではリモコン1台分の電流(20mA)以下で動作します。
2023.08.16 追記スマホ やPCから操作するためのパケット処理プロセッサー とウエブアプリを作成してGitHub で公開しています。エアコン付属のリモコンには表示されない運転レベルやフィルターの使用時間をモニターできるようにしました。また、付属リモコンではメンテナンスモードにしないと表示できない各部の温度センサー測定値とコンプレッサーの運転電流を1分間隔で更新しながら常時表示するようにしています。ブラウザとサーバー間はWebSocketでリアルタイム通信できるようにして、温度設定などの操作結果をすぐ画面に反映するようにしてあります。オリジナルのリモコンにはついていないスケジュール運転機能も実装しました。 運転レベルと室内ユニット熱交換器の温度をモニターできるようになったので、むやみに温度設定を変更するようなことがなくなり、スケジュール運転とあわせて非常に快適になりました。
github.com
github.com