前回から、少々、間が空いてしまいましたが、検討を進めています。
赤外線リモコンの信号を読み込んで、そのまま送信するだけならPICのPWM機能を使えば可能ですが、将来、wi-fi経由で操作したいとなるとラズパイで構築するのがよさそうです。
そこで、ラズパイにpigpioを常駐させて、赤外線関連プログラムirrp.pyをダウンロード、前回、ブレッドボード上に組んだリモコン受信モジュールをラズパイに接続します(VDDをラズパイの物理ピン番号1に、GNDを9に、OUTを12(GPIO18)に)。

エアコンはハードルが高いので、まずはテレビのリモコンを読み込ませてみます。

CH01の信号は、
3513 1568
478 368 478 1191 478 368 478 1191
478 368 478 1191 478 368 478 1191
478 368 478 1191 478 368 478 1191
478 1191 478 368 478 1191 478 368
478 1191 478 1191 478 1191 478 1191
478 368 478 368 478 368 478 1191
478 368 478 1191 478 368 478 368
478 1191 478 368 478 368 478 368
478 368 478 1191 478 1191 478 1191
478 368 478 368 478 1191 478 368
478 368 478 1191 478 368 478 368
478 1191 478 1191 478 368 478 368
478
70739
3513 1568
478 368 478 1191 478 368 478 1191
478 368 478 1191 478 368 478 1191
478 368 478 1191 478 368 478 1191
478 1191 478 368 478 1191 478 368
478 1191 478 1191 478 1191 478 1191
478 368 478 368 478 368 478 1191
478 368 478 1191 478 368 478 368
478 1191 478 368 478 368 478 368
478 368 478 1191 478 1191 478 1191
478 368 478 368 478 1191 478 368
478 368 478 1191 478 368 478 368
478 1191 478 1191 478 368 478 368
478
です。これらの数字は、on/offの時間(μs)です。
単位時間T=478μsとすると、冒頭の3513, 1568が8T, 4Tであることから、家製協(AEHA)フォーマットであることがわかります(この信号はAGCと呼ばれる部分です)。
その後に続く、478, 368, 478, 1191は、T, T, T, 3Tと解釈すると、それぞれ、0, 1と読めます。
このように読むと、冒頭のAGCの後は、
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0
という48bitの信号になっています。
この後は、478 μs(=T)で締めくくり、70739μsというトレーラーの後、上述の48bitが繰り返され、478 μs(=T)で終端となります。
この48bitの中で、メーカーIDやコマンドが表されています。
この部分を4bitずつ16進数で表すと(左側がLSB)、
a, a, a, 5, f, 8, 2, 1, e, 4, 2, 3
と12桁になります。
CH01〜CH12について読み込んだ信号を、12桁の16進数で表すと、
CH01 : a, a, a, 5, f, 8, 2, 1, e, 4, 2, 3
CH02 : a, a, a, 5, f, 8, 2, 1, f, 4, 2, 2
CH03 : a, a, a, 5, f, 8, 2, 1, 0, 5, 2, c
CH04: a, a, a, 5, f, 8, 2, 1, 1, 5, 2, d
CH05 : a, a, a, 5, f, 8, 2, 1, 2, 5, 2, e
CH06 : a, a, a, 5, f, 8, 2, 1, 3, 5, 2, f
CH07 : a, a, a, 5, f, 8, 2, 1, 4, 5, 2, 8
CH08 : a, a, a, 5, f, 8, 2, 1, 5, 5, 2, 9
CH09 : a, a, a, 5, f, 8, 2, 1, 6, 5, 2, a
CH10 : a, a, a, 5, f, 8, 2, 1, 7, 5, 2, b
CH11 : a, a, a, 5, f, 8, 2, 1, 8, 5, 2, 4
CH12 : a, a, a, 5, f, 8, 2, 1, 9, 5, 2, 5
となります。これを見ると、チャンネル番号を変えると、9、10、12桁目が変化していることがわかります。
12桁目はパリティチェックで、(1000) xor (0100) xor (0001) xor (9桁目) xor (10桁目) xor (11桁目)となっています(ビットごとの排他的論理和)。
ちなみに、このような複数の排他的論理和は、ビットごとに1の数が奇数なら1、偶数なら0になります。
irrp.pyで取得した信号のon/off時間には、若干の誤差があります。これは、送信機の誤差か、irrp.pyのサンプリング間隔に起因する誤差と考えられますが、受信機の方に冗長性(リダンダンシー)があるので、問題なく動作するようになっています。
ただし、涼麻父は、できるだけデータ格納量を少なくしたいと考えているので、今回取得した12回分のデータの平均値を求めて、これを代表値としようと思います。
そうすると、
冒頭のAGCは、on 3514μs、off 1566μs
0を表すときは、on 478μs、off 363μs
1を表すときは、on 478μs、off 1191μs
ターミネーターは、off 70771μs
となります。
さて、次回は、この値を用いて実際に送信してみて、うまく動作するか確認してみようと思います。
【2020/10/17追記】
今回、用いたリモコン受信用の回路です。
