ラズパイで赤外線信号を解析する。(赤外線のフォーマット調査編)

2019/06/28

ラズパイ 雑記

最近テレビのリモコンの調子が悪くなったので、ラズパイでリモコンの動作を模擬してみたいと思っています。

今回はリモコンから出ている信号のフォーマットを調べてまとめました。

リモコン信号のフォーマット

パルス位置変調(PPM)方式

参考文献(赤外線リモコンのフォーマット)によるとリモコンから出ている赤外線はPPM方式(パルス位置変調方式)で送信されているみたいです。
PPM方式では点灯時間と消灯時間の組み合わせて0,1を表現しています。

上記図は後ほど紹介するNECフォーマット・家電製品協会フォーマットで用いられているPPM方式です。0を表す場合はON時間とOFF時間が同じで、1を表す場合はON時間に対してOFF時間が3倍長くなっています。

このようにしている理由としては出来るだけ消費電力を抑えるためらしいです。

38 kHz変調

赤外線リモコンでは自然光と区別をするために38 kHzで変調をしています。(赤外線リモコンの作り方)
変調というと少し難しく聞こえてしまうかもしれないですが、ON時間中はずっと光っているわけではなく、38 kHzでON、OFFを繰り返しているというだけです。

NECフォーマット、家電製品協会フォーマット

送られてくるデータのフォーマットには大きく分けて2つあります。
1つはNECフォーマットと呼ばれるもので、もう一つは家電製品フォーマットです。(他にもSONY・JVCなどといった方式があるみたいですが、これらは独自方式なので今回は省略します)

NECフォーマット

赤外線リモコンのフォーマットによるとNECフォーマットは日立・東芝・三洋・NECの製品で使われるみたいです。(三洋があるので、もしかしたら古い情報かもしれないです。)
NECフォーマットはリーダーコード、カスタマーコード(識別コード)、データコード、ストップビット、フレームスペースの順に送られてきます。1つのフレーム(リーダーからフレームスペースまで)は108 msとなっています。
【リーダーコード】
上記図のようにON時間がOFF時間の倍となっています。
リーダーコードはNECと家電製品協会のフォーマットで異なるので、どちらのフォーマットで通信しているか見分けるのに役立ちます。
図の1Tは約0.56 msとなっています。なので、リーダーコードは約 13.5 msです。

【カスタマーコード】
こちらはメーカーごとに割り当てられているコードです。他社製品と混信を避けるために使われています。
カスタムコードは16bitで構成されていますが、年式によって2パターンあるみたいです。
初期の仕様ではカスタムコード部8bitとカスタムコード8bitを反転させたものとなっています。反転させた8bitは送られてきた8bitが正しいかどうか判定するのに用いられます。

その後下記のように16bitすべてカスタムコードとなっている仕様に変更されています。

最初の方に紹介しましたが、1はON時間(1T)とOFF時間(1T)の2Tで表されます。0は1はON時間(1T)とOFF時間(3T)の4Tで表されるので、カスタマーコードは最大で4T*16=64T(1T=約0.56 msなので約35.8 ms)。最小で2T*8T=16T(約8.9 ms)となります。
【データーコード】
名前の通り、データ格納されているものです。
データコードは初期のカスタムコードと同様にデータ部8bitとそれを反転した8bitで構成されています。D1~D7とD'0~D'7をANDをとって00hとなればデータが正しいと判定できます。データコードも同様に8.9 ms~35.8 ms送信されます。
【ストップビット・フレームスペース】
Arduinoで赤外線受信(NECフォーマット)によるとストップビットは1Tの間オンとなり、その後フレームスペースと呼ばれるオフ時間が続きます(108 ms -(リーダコードからストップビット)までの時間)。

家電製品協会フォーマット

赤外線リモコンのフォーマットによると家電製品協会フォーマットはパ.logナソニック・シャープ・ヤマハなどで使用されているみたいです。(こちらも情報が古いかもしれないです。)

こちらは調べた時にあまり情報が無かったので、正確じゃないかもしれないです。(後日
調べて詳細を追加します。)
こちらはリーダーコード、カスタマーコード、パリティ、データコードで構成?されています。1フレームの時間は規定されていないのですが130 ms前後みたいです。
【リーダーコード】
家電製品協会のリーダーコードはON時間、OFF時間ともにNECフォーマットの半分となっています。
【カスタマーコード】
こちらはNECフォーマットと同様に16bitで構成されています。
【パリティ】
カスタマーコードを4 bit単位でXORをとったもの
【データ】
調べた感じ可変長みたいです。一応一般的なのは28bitみたいです。データ部の最後にBCC(ブロックチェックコード)と呼ばれるものが入っておりデータの妥当性を評価しているみたいです。

家電製品協会フォーマットについては説明が適当になってしまいましたが、シャープ製のリモコンがあるので、そのリモコンから出る信号を解析して詳しく説明したいと思います。

自己紹介

はじめまして 社会人になってからバイクやプログラミングなどを始めました。 プログラミングや整備の記事を書いていますが、独学なので間違った情報が多いかもしれません。 間違っている情報や改善点がありましたらコメントしていただけると幸いです。

X(旧Twitter)

フォローお願いします!

QooQ