リモコンコードを総当たりする
page 2

さて、では実際にリモコン送信機を作るにはどうしたらよいか。
まず簡単なところで、記録した波形をそのまま再送信するだけを考えます。
なんとなく、記録したwaveファイルをそのまま再生して、スピーカー出力に赤外線LEDを付ければ、
それできちゃいそうな気がしますが、それはNGです。

先ほどのNECEL仕様をよく見ると、「キャリアでの変調理由」という記載があるので、その前後を良く見てください。
onの期間はその全ての期間連続して赤外線を出しているわけではありません。
一定の周波数 (キャリア周波数) で赤外線を出している期間と出していない期間を繰り返しています。
との記載があります。つまりどういう事かというと、

たとえば「データ1」の場合、



というデータが観測される(下がon)のですが、これを再送信する場合は、



という発光をさせます(下が発光)。

さて、前ページで保留した、時間軸の話がやっとここで出てきます。
パイオニアリモコンは、キャリア周波数はいくつか?また、各ビットの時間はどれだけか?という話です。
どうやらwave録音の結果を見る限りではNECELの既定通りでは無いようですので、これについては実測するしかありません。
まあ、汎用受光モジュールで受光出来ることを考えると、キャリア周波数は38KHz前後で、各ビットの時間はwaveで観測した通りなんですが、
やはり気分的にはなるべく正確な物を作りたいです。
というわけで、本来はリモコンを分解してクロックとLEDのピンを測定するのが正解なのですが、
どうもリモコンを綺麗に分解する方法が解らない(傷つけたくない&壊すと結構高い)ので、フォトトランジスタで観測しました。
この辺からはオシロが必要なレベルです。何せ相手は38KHzなので、サウンドカードでは無理です。192KHzで録音できる奴ならできる・・・・のか?

測定が必要な項目は下記の通りです。
・キャリア周波数
・発光duty
・リーダー部:点灯・消灯時間
・データ0部:点灯・消灯時間
・データ1部:点灯・消灯時間
・ストップビット:点灯・消灯時間
ちなみにストップビットの消灯時間というのは、次のリーダー部が始まるまでの時間の事です。

では測定してみましょう。まず簡単なのはdutyから。
適当にedgeにトリガをかけて観測すると、NECEL記載の通り、1/3であることは確認出来ます。
波形保存するの忘れましたが目視です。おおよそ1/3です。1/2ではなく1/3っぽいです。
それでOKとします(いきなり適当)。キャリア周波数も大体38KHz前後です。
さて次に点灯時間です。
キャリアが38KHzと仮定すると、dutyは1/3なので、最小の消灯時間は17us程度です。
なので、17us以上消灯時間が続いた場合は、NECELでいう「off」状態となります。
従って、17us以上消灯状態が続いた後の発光は、NECELでいう「on」状態の開始点です。


この箇所にトリガをかけて測定すると、on状態が、「長い」「短い」の2パターンしか無いことがわかりました。
つまり、「長い」ほうはリーダーコード、「短い」方はデータとストップビットという事です。
ではまず短い方を見てみます。



みたまんま22波(=22クロック)ですね。
では次に長い方を見てみます。これは概算でも300波以上あるはずなので、どうあがいてもこのオシロの画面解像度じゃ数えれません。
仕方がないのでテキストで落としてきて表示させてみます。



どうみてもexcelですがこんなイメージで頑張って数えます。
結果、342波です。
これで点灯時間は測定できました。また、リーダーのon時間を調べると、341波で8.508msです。
342波目はoff時間にかかって、どこが終わりなのかが解らないので341波で計算しています。
従って、キャリアは約40.08KHzと思われます。
めんどうなので40KHzとしてしまいましょう。

では次にoff時間を測定してみます。
off時間に関しては、全項目違いますので、それぞれ個別に測定します。
まずはデータ0のoff時間から。
off時間の計測は、なにせoffなので何も出てこないので、正確に数えるのは難しいです。
キャリア周波数も概算なので、時間から求めると誤差が出そうです。
ですので、(一番長いon時間を持つ)リーダーのon波形を重ねて測定してみました。

こんな感じで測定すると、リーダーとデーターの消灯時間もクロック基準で測定できました。

あとはストップビットの消灯時間ですが、残念ながらうちのオシロでは、38KHzのキャリアを観測できるサンプル間隔のまま、
約25msを一度にサンプルすることは出来ません。
ですので、ここだけは時間計測になります。
結果としてはrise→riseで25.4087msと思われます。


つまり、「ストップビットのonの最後の1波の消灯期間(2/3クロック)」と「リーダーの1波目のon期間(1/3クロック)」を含む時間です。
余分に1波含まれている計算になります。
25.4087msをリーダーonの時に求めた値で割り算すると、約1018.4波となります。
どうも誤差がでていますが、おそらく消灯時間は上記1波を引いて、
1017波ではないかと思われます。

というわけでとりあえず全て計測が完了しました。

まとめるとこんな感じです。
 点灯消灯
リーダー342170
データ02221
データ12263
ストップ221017
※単位はクロック数
キャリア周波数は40KHz、発光dutyは1/3

さてここまで来たら、あとは組み合わせて送信用信号を作るだけです。

手段としては1chipマイコン(PIC等)やFPGAなどが簡単ですね。
ちなみに、自分では、たまたまそこに開発環境一式が揃っていたためにFPGAで行いました。
特に難しい物でもないので、慣れた環境を使うのがいいでしょう。

送信部は、とりあえず実験程度なら、いらない赤外線リモコンを壊して作るのが手っ取り早いです。
リモコンのマイコン→赤外LED駆動用FETのパターンを切って、そこに作った信号を流し込むのが簡単です。

あとは、上記解析結果に基づくデータを送ればいいだけです。
ここに、参考までに送信すべき波形データ(vcd)を置いておきます。→●ダウンロード
logic 1がLED発光状態です。ちなみに、試行はS3E staterキット(50MHzクロック)を使ったので、
duty 1/3が正確には再現出来ていません。が、50MHz換算で1クロックなのでたいした問題では無いでしょう。
あとは、これをどう実機に実装するかです。そこは試行錯誤してください。
(あまりにも適当なソースと適当なハード(というか赤外リモコン改+S3Eキット)なので見せたくないとも言う)


感想、要望、バグ報告、その他何かありましたら、メールもしくは掲示板にてご連絡ください。
裕之  
ホームに戻る