エアコンのリモコン信号を解析してみた [現(ウツツ)日記]
富士通ゼネラルのエアコン、AS220PEMKの赤外線リモコン信号を解析してみました。
2000年製造の古いものですが、よく働いてくれています。
でもそろそろ買い替えかもしれない…。(解析したのに)
近年スマートスピーカーなどで、エアコン等を自動操作しようという需要が高まっていると思います。
僕はスマートスピーカー的な物を自作しようと考えて、解析に挑戦しました。
そもそも赤外線リモコンというものは、モールス信号のように、あるタイミングで目に見えない赤外線を点けたり消したりを繰り返して命令を本体に送ります。
リモコン信号の規格はいくつかに統一されており、大きく分けて、NECフォーマット、家製協フォーマット、SONYフォーマットがあるようです。
このエアコンはどの規格でしょうか。
以下の装置(Arduino,赤外線リモコン受光モジュールTFK4,(今は手に入らないかもしれません同等品可))でリモコンの赤外線信号を受信し、点灯/消灯時間を測定した後、PCに送信し、意味を解読します。
リモコンのボタンを押すとまず長めの点灯信号が飛びます。この長さと次の消灯の長さで見分けることができます。この信号のことをリーダーと言います。
(実は点灯部分は高速で点滅しています)
このリモコンは家製協フォーマットでした。(sonyフォーマットは割愛)
次に'0'と'1'の2種類の信号の組み合わせで、様々なデータを送ります。
具体的には点灯時間と消灯時間が同じものを'0'、
点灯時間の3倍消灯時間があるものを'1'とします。
リーダーの後は、リモコンによりますが、このエアコンの場合はこの2種類の信号が100以上にわたって続きます。
受信側はこれを8個ずつ分割して順番に並べていきます。
8個単位のことをバイトと言います。
この信号が何バイト目かによって、意味合いが異なってきます。
以下の表に、このエアコンのリモコン解析結果を載せます。
1,2バイト目はカスタマーコードで、他のリモコンに反応しないようにするためのものです。
3バイト目の上位4bitはカスタマーコードを4bitごとに区切って比較し、桁の1の数が奇数かを示したもので、信号に誤りがあるかどうか判別するためのものです。
偶然にも全桁0(偶数)です。
灰色の部分はどのボタンを押しても変わらなかった部分で、カスタマーコードの続きか、開発者用の領域かもしれません。
6バイト目は電源OFFした時と、風向きボタン(押すたびにルーバーの角度が変わる)で変化し、
電源OFFボタンの場合は信号はここで終了です。
9バイト目は電源ON時、自動モード(室温に合わせて運転)、設定温度を表しており、設定温度は最低温度16℃を何度上回った数かを4bit16進数で表現したものです(例 26℃は10=0xA=0b1010)
10バイト目は各種タイマーと4種の手動運転モードにそれぞれ4bitずつ割り当てられています。
11バイト目は省パワー(パワーを落として省エネ運転する)ランドリー(部屋干しのために高温除湿?)スイング(風向きを常に動かす)と風速設定で、上位4bitの各種運転はそれぞれ特定の桁に対応しONOFFできます。
12~14バイト目はタイマーを設定するとその時刻に応じて現れるもので、自分にとってはタイマー等は自作スマートスピーカー(仮)でコントロールするため不要で特に調べていません。
最後の15バイト目は重要で、データ部の信号にに間違いがないかどうかチェックするためのものです。単純に各バイトを加算したものかと思いましたが、違っており、数が増えると逆に数字が減っていたことから、ビット反転が入っていると推測しました。
各バイトを加算してビットを反転しても数が合わず、さらに0x25を足したものの下位8bitを取り出したものが答えでしたが、この0x25の数字の根拠はよくわかりませんでした。
どのボタンを押しても計算がそれで合うから、としか言いようがありません。
今回取得した信号表を元に、赤外線送信を試してみましたが、無事エアコンを操作できました。
使用した赤外線LEDは秋月で購入したOSI5FU5111C-40です。ただ角度がシビアなので、
赤外線LEDには十分に電流を流すこと、3つほど並べてトランジスタでドライブすることにより安定して操作できるようになりました。
参考にさせていただいたサイト様
http://elm-chan.org/docs/ir_format.html
https://ak1211.com/7141/
https://hawksnowlog.blogspot.com/2017/01/control-infrared-with-arduino.html
2000年製造の古いものですが、よく働いてくれています。
でもそろそろ買い替えかもしれない…。(解析したのに)
近年スマートスピーカーなどで、エアコン等を自動操作しようという需要が高まっていると思います。
僕はスマートスピーカー的な物を自作しようと考えて、解析に挑戦しました。
そもそも赤外線リモコンというものは、モールス信号のように、あるタイミングで目に見えない赤外線を点けたり消したりを繰り返して命令を本体に送ります。
リモコン信号の規格はいくつかに統一されており、大きく分けて、NECフォーマット、家製協フォーマット、SONYフォーマットがあるようです。
このエアコンはどの規格でしょうか。
以下の装置(Arduino,赤外線リモコン受光モジュールTFK4,(今は手に入らないかもしれません同等品可))でリモコンの赤外線信号を受信し、点灯/消灯時間を測定した後、PCに送信し、意味を解読します。
リモコンのボタンを押すとまず長めの点灯信号が飛びます。この長さと次の消灯の長さで見分けることができます。この信号のことをリーダーと言います。
(実は点灯部分は高速で点滅しています)
このリモコンは家製協フォーマットでした。(sonyフォーマットは割愛)
次に'0'と'1'の2種類の信号の組み合わせで、様々なデータを送ります。
具体的には点灯時間と消灯時間が同じものを'0'、
点灯時間の3倍消灯時間があるものを'1'とします。
リーダーの後は、リモコンによりますが、このエアコンの場合はこの2種類の信号が100以上にわたって続きます。
受信側はこれを8個ずつ分割して順番に並べていきます。
8個単位のことをバイトと言います。
この信号が何バイト目かによって、意味合いが異なってきます。
以下の表に、このエアコンのリモコン解析結果を載せます。
1,2バイト目はカスタマーコードで、他のリモコンに反応しないようにするためのものです。
3バイト目の上位4bitはカスタマーコードを4bitごとに区切って比較し、桁の1の数が奇数かを示したもので、信号に誤りがあるかどうか判別するためのものです。
偶然にも全桁0(偶数)です。
灰色の部分はどのボタンを押しても変わらなかった部分で、カスタマーコードの続きか、開発者用の領域かもしれません。
6バイト目は電源OFFした時と、風向きボタン(押すたびにルーバーの角度が変わる)で変化し、
電源OFFボタンの場合は信号はここで終了です。
9バイト目は電源ON時、自動モード(室温に合わせて運転)、設定温度を表しており、設定温度は最低温度16℃を何度上回った数かを4bit16進数で表現したものです(例 26℃は10=0xA=0b1010)
10バイト目は各種タイマーと4種の手動運転モードにそれぞれ4bitずつ割り当てられています。
11バイト目は省パワー(パワーを落として省エネ運転する)ランドリー(部屋干しのために高温除湿?)スイング(風向きを常に動かす)と風速設定で、上位4bitの各種運転はそれぞれ特定の桁に対応しONOFFできます。
12~14バイト目はタイマーを設定するとその時刻に応じて現れるもので、自分にとってはタイマー等は自作スマートスピーカー(仮)でコントロールするため不要で特に調べていません。
最後の15バイト目は重要で、データ部の信号にに間違いがないかどうかチェックするためのものです。単純に各バイトを加算したものかと思いましたが、違っており、数が増えると逆に数字が減っていたことから、ビット反転が入っていると推測しました。
各バイトを加算してビットを反転しても数が合わず、さらに0x25を足したものの下位8bitを取り出したものが答えでしたが、この0x25の数字の根拠はよくわかりませんでした。
どのボタンを押しても計算がそれで合うから、としか言いようがありません。
今回取得した信号表を元に、赤外線送信を試してみましたが、無事エアコンを操作できました。
使用した赤外線LEDは秋月で購入したOSI5FU5111C-40です。ただ角度がシビアなので、
赤外線LEDには十分に電流を流すこと、3つほど並べてトランジスタでドライブすることにより安定して操作できるようになりました。
参考にさせていただいたサイト様
http://elm-chan.org/docs/ir_format.html
https://ak1211.com/7141/
https://hawksnowlog.blogspot.com/2017/01/control-infrared-with-arduino.html
タグ:電子工作