赤外線リモコンキャンセラーとは、何かリモコンの赤外線信号(以降 リモコン信号)を受信したときに、同様の赤外線で妨害波(キャンセル信号)を送信する装置です。
このキャンセル信号により、リモコン信号のフォーマットは崩れるので、操作対象の機器は正常に受信できなくなります。


2.キャンセルの仕組み
赤外線リモコンについての詳細は省きますが、その信号フォーマットについて簡単に説明します。
よく使われている信号フォーマットには、NEC方式、家電製品協会(AEHA)方式、SONY方式の3種類があり、メーカーによって使用している方式は異なります。それらは、フォーマットつまりデータの書式・構成が異なるだけで、波長950nmの赤外線に、周波数38kHz前後でON/OFFする変調を加えたパルス波を使っている点は同じです。したがって、送信・受信回路は共通で可能です。
次の図は、この3種類の信号フォーマットを示すものです。ただし、それぞれリーダーコード部分(信号の先頭部分)のみで、データ部分は省略しています。また、この図は赤外線リモコン受信モジュールの出力波形のため、波形のLOW部分に赤外線パルス波があることを示しています。

下記の波形(上)は、今回使用した赤外線受信モジュールの出力端子で見た、ある NEC方式リモコンの実際の信号波形です。受信する機器は、このリーダーコードのLOW部分とHIGH部分の幅を測定して、求めるフォーマットのリモコン信号かどうか判断するはずです。そして、対応すると判断されれば、以降に続くデータ部分を受信するでしょう。ちなみに、メーカーや対象機器の判別は、データ部にあるコードで行われ、対象外のリモコン信号は無視されるようになっています。

ところで、製作した赤外線リモコンキャンセラーは、受信したLOW部分の幅をチェックしていて、先にあげた3種類のフォーマット以外では反応しないようになっています。
3.回路
次の図は、この赤外線リモコンキャンセラーの回路図です。

リモコン信号の受信には、赤外線リモコン受信モジュール OSRB38C9AAを使っています。そして、リモコン信号の解析とキャンセル信号の作成は、Atmel(現Microchip)の8ビットAVRマイコン ATtiny44A-PUを使って行っています。

ATtiny44A-PU
キャンセル信号の送信には、赤外線LED OSI5LA5113Aを2つ使用しています。2つ使った理由は、2つを異なる方向に向けることで、キャンセル信号が届く範囲を広げるためです。
赤外線LEDには、瞬間的ですが1本に標準で約155mA流しています。そのため、駆動するトランジスタにはコレクタ電流Icが max500mAの 2SC1213を使いました。
マイコンの端子PA5に接続されている赤LEDは、キャンセル信号を送信中であることを示す表示灯です。ただ、約10mSしか点灯しないので、少しわかりにくいかもしれません。
回路図に描かれていませんが、電源には単三型のアルカリ乾電池2本(DC3V)を使っています。
4.リモコン信号の受信方法
リモコン信号のフォーマット判別は、マイコンの「16ビットタイマ/カウンタ1」をインプットキャプチャ(Input Capture)モードで使って、信号のパルス幅を測ることによって行っています。
インプットキャプチャモードは、端子ICP1の H/Lが変化したときのタイマカウンタ1の値を保持するもので、前回の変化からの時間、つまりパルス幅を測ることができます。
ただし、ここではリーダーコードの先頭のLOW部分だけを受信し、以降は無視しています。
5.キャンセル信号の作成方法
キャンセル信号にする38kHzで変調したパルス波は、マイコンの「8ビットタイマ/カウンタ0」(以降タイマ0)を、CTC(Clear Timer on Compare Match)モードで使い作っています。
CTCモードは、設定したクロックでタイマカウンタ0(TCNT0)をアップカウントし、コンペアレジスタA(OCR0A)の値と一致したときにTCNT0を0クリアして、またカウントを続けるというものです。
次の図で、CTCモードでの波形出力の仕組みを説明します。まず前提として、タイマ0のクロック入力を、システムクロックと同じ 8HMzとします。そして、TCNT0がOCR0Bと一致したときとOCR0Aと一致したとき、それぞれ割り込みを発生するように設定しておきます。

次の波形は、実際に端子PA6から出力したキャンセル信号の波形です(ch2の波形)。ほぼ26μS(38kHz)が出力されているのがわかります。

波形出力が容易な高速PWMモードを使わない理由は、波形出力の端子であるOC0BがICP1と同一ピンだったためです。
キャンセル信号を10mSだけ出力するために、OCR0Aと一致した割り込みの回数を数えています。具体的には、割り込みは26.25μSごとなので、380回数えて停止させています。