リモコンコードを総当たりする
さて、事の発端はweb上で噂されている、pioneerのプラズマのファクトリーメニュー。
実は今まで使ってたビクターのブラウン管テレビのサービスモードも知ってて、
色々便利に使えたので、せっかくある機能は使いたいじゃないですか。
旧世代プラズマは隠しコマンドを普通のリモコンから入力することで、そのメニューに入れるらしいのだが、
残念ながらウチにあるファイナルKURO(KRP-500A)からはそのコマンドは使えなくなったらしい、とのこと。
「GGF1589」というサービスマン専用のリモコンを使うことでしか、そのメニューに入れないらしい。
ならば、
たかだか(たぶん)8bitのコードくらい、総当たりで試してやろうじゃないか。
というのがこの計画です。
というわけで、まずざっくりと赤外線リモコンの構造を。
国内メーカーの赤外線リモコンというのは、過去色々な経緯があって、現在では、おおよそ統一フォーマットになっています。
基本的に、メーカーコード(カスタムコード)8bit+機能コード8bitと言う構成です。
ざっくりですがこのように(暗黙の了解で)統一されているので、
テレビのチャンネルを切り換えたらストーブの電源が入っちゃったよ、という事が起こりにくくなっています。
おおよそ、NECELが公開している情報に国内各社は似せています。
NECエレクトロニクス FAQ(http://www.necel.com/faq/ja/mi_com/f_com_remo.html)
『NECフォーマットの赤外線リモコン・フォーマット [共通]』のA-1を熟読しましょう。
というわけで、とりあえずまずリモコンがどんな信号を出しているのか見てみましょう。
これは純正リモコン(AXD1566)の電源ボタンを押したときの波形です。
取得方法はオシロなどの特別な機械が無くても、汎用の赤外線リモコン受光モジュールの出力をサウンドカードに入れるだけで、十分なクオリティで観測できます。
もちろん無圧縮waveで録音してくださいね。さすがに圧縮されると無理だと思います。
ただ、ここの波形は綺麗に表示するために、2値化していますが。
サウンドカードで録音(取得)した波形を、編集ソフトで目一杯音量を増幅してやると、これにかなり近い波形にすることができます。
ちなみに、これは受光モジュールからの出力なので、on期間が下(L)になります。NECELのフォーマット説明の図とは上下反転してるわけですので混乱しないように。
※時間軸単位については後述します。
これにわかりやすいようにコメントを入れました。
ちなみに、NECELの説明にあるリピート機能は無いようで、延々とこのパターンが送信し続けられます。
さて、これに実際に数字(コード)を当てはめてみましょう。
NECELフォーマットの説明を見ると、データ1の場合もデータ0の場合も、on期間は変わらず、off期間のみ変わります。これはカスタムコード、データコードの両方に適用されます。
実際に取得した波形を見ても、onパルス幅 (  ̄|_| ̄ )は(リーダーコードを除いて)どこも変わらず、offパルス幅( _| ̄|_)のみ変化していることが解ります。
つまり、offパルス幅が短い場合は0、offパルス幅が長い場合は1と言うことです。
したがって、offパルス幅に着目して数字を割り当てていけばいいのです。それを記入してみました。
さて、カスタムコードは「0101010110101010」、データコードは「00111000」、反転データコードは「11000111」となっているようです。
NECELフォーマットの説明通り、データコードと反転の関係も正しいですね。
ついでに、カスタムコードも、後半8bitは前半8bitの反転となっているようです。
というわけで、この電源ボタンは、カスタムコードは「01010101」、データコードは「00111000」となります。
また、NECELフォーマットによると、LSBファースト送信のため、実際には、
カスタムコード:10101010=0xAA
データーコード:00011100=0x1c
と表記します。
さて、ここまで解ったので、色々なボタンを押してみましょう。
すると、面白い動作をすることが解ります。
確かに「電源」ボタンを押すと、「AA-1C」を連続して送信するのですが、
たとえば、「入力1」ボタンを押すと「AA-5A」「AF-7A」と、2つのコードを交互に送信します。
また、「元の画面」ボタンを押すと「AA-5B」「AF-21」と、交互に送信たり、
「サイズ」ボタンを押すと「AA-5E」「AF-3A」と送信したりします。
以前ちらっと、日記に書いたのはこういう事ですねー。
カスタムコードは原則1社1コードらしいので、パイオニアであればテレビ以外、たとえばプレーヤー?にも同じコードを使っているはずです。
ですので、256個では足りなくなってしまったんでしょうか・・・・。
というわけで、ちまちまと全部のボタンを取得した結果をまとめてみました。
AXD1566リモコンコード一覧
この結果を見ると、リモコンコードは大きく分けて、
・「AA-xx」を繰り返し送信。
・「AA-5A」「AF-xx」を繰り返し送信。
・「AA-5B」「AF-xx」を繰り返し送信。
・「AA-5E」「AF-xx」を繰り返し送信。
の、4種類あることが解りました。
ところで、コード一覧を見ると、最近のテレビに付いている機能(デジタル放送用など)が2バイトコードになっていたり、
入力1から順に7Aから割当たって、7Fまで行った後に(コードが足りなくて?)入力7が77に割り当てられているなど、
その昔赤外線リモコンが合った頃には想定していなかった機能なんでしょうね。
しかし、見事に、最初のたかが8bitじゃねーか総当たりできろうだろう的な発想は崩れ去ったのです。
とは言う物の、それでもたかが1024通り、1コード3秒で試行していっても1時間もかかりません。十分現実的な時間です。
ついでに言うと、何故かは解りませんがデータコードは0〜7fまでに収まっているようです。
(ここで「AA-5C」、「AA-5D」なども2バイトコードがありそうだという事は気付かなかったことにしておく)
そして、総当たりをした結果を先に書いてしまうと、ファクトリーメニュー用のサービスコードは、日記にも書いたとおり、
「AA-5F」が正解の様です。
さて、じゃあ、どうやってその総当たりをするか、
というか、どうやって赤外線リモコンを作るか、という話です。
まあ、取得した波形を切り貼りして再送信する、というのが基本的な形ですが、
せっかく作るのですからきちっと測定して作りましょう。
というわけで、さらに詳しい話に続く。
感想、要望、バグ報告、その他何かありましたら、メールもしくは掲示板にてご連絡ください。
裕之
ホームに戻る