LED回路工作部屋 > 赤外線リモコンの作り方 【最終更新日 : 2016/10/12】
赤外線リモコンの作り方

■■■■■■ 赤外線リモコンの仕様  ■■■■■■

 下記は主に赤外線リモコンで使用している仕様です。他の仕様もありますが、ここでは割愛します。

 ・赤外線リモコンは自然界のノイズを避けるため 38KHz変調 をかけている。 ※赤外線LEDの発光を38KHzでオン・オフすることです
 ・ 38KHz変調 をかけないと赤外線リモコン受信モジュールの出力は反応しない。
 ・赤外線リモコンで使う信号は NECフォーマット を使用している。

■■■■■■ 38KHz変調 と 赤外線受信モジュール  ■■■■■■

 赤外線を使ったリモコンの受信部 (赤外線リモコン 受信モジュール) は、自然界の赤外線とリモコンの赤外線を区別するため 38KHz で変調(点滅) した赤外線しか受信しないような構造になっています。
 上記説明だけでは いまいち分かりにくいので下図 【図A1】 をもとに説明します。

 リモコンの受信部となる 赤外線リモコン 受信モジュール に DC5V の電源を接続すると OUTの出力は Highレベル ("1") になっています。
 この 赤外線リモコン 受信モジュール 38KHz で変調(点滅) した 赤外線LED を当てると、当ててる時間だけ 赤外線リモコン 受信モジュール の出力が Lowレベル ("0") になります。
 デジタル的に解説すると、 赤外線LED 【38KHz で変調(点滅)している時を "1" 】【消灯している時を "0(ゼロ)"】 とすと、 赤外線リモコン 受信モジュール との出力の関係は下記になります。
 赤外線LED = "1" → 受信モジュール = "0"
 赤外線LED = "0" → 受信モジュール = "1"
 このように 赤外線リモコン 受信モジュール 側では結果が反転します。




■■■■■■ 信号コードの説明  ■■■■■■

 赤外線リモコンは送信機から赤外線で 信号 を送り、受信機で受信した 信号 と一致する動作を行います。この 信号 とは何でしょうか?
 赤外線リモコンで使用している 信号 は主に NECフォーマット を使用しています。 【図B1】 が NECフォーマット の基本構造です。
この 信号 の 内容を変えることで、赤外線リモコンでいろいろな操作が行えます。
 その信号の構造が【図B1】です。信号(データ)の構造は リーダー部 と 4バイト(8ビットで1バイト) のデータでできています。
 4バイトのデータはそれぞれ [カスタムコード@] [カスタムコードA] [データコード] [データコード(反転)] といった内容です。
 リーダーコード や ビットの "1" "0" は、0.56ms を 1T として、 Highレベル ("1") Lowレベル ("0") の長さを変化させて識別しています。※下図参照



■■■■■■ PICで送信機を作る  ■■■■■■

 PIC16F688 を使った赤外線リモコンの送信機の例です。SW1しかないので1ch(チャンネル)送信になります。
 RC2 に赤外線LED、RA0 にSW1(タクトスイッチ)を接続しています。RA0 は PULL-UP にしています。
 SW1を押すと赤外線コードを送信します。

 では、送信機の回路は下の回路図になるので、PIC側のプログラムを作っていきます。



 【1μsのサイクル数を求める】
 PICの処理サイクルは使用クロックの1/4になるので、20MHzのクロックでは毎秒500万サイクルになる。1μsでは5サイクルになります。

 【38KHzの1周期のパルスを作る】
 38KHzの1周期は26.5μsです。ONになる時間を短くすると消費電流が少なくなるので、ONとOFFの長さはそれぞれ ON=8.5μs OFF=18μs にします。
 これをPICのサイクル数で表すと ON=42サイクル OFF=90サイクル にります。
 下図は 38KHz のパルス幅を示した図と PIC で38KHz1周期分の赤外線LEDを発光させるプログラムと、38KHz1周期分の赤外線LEDを発光させないプログラムです。  この2通りのプログラムで信号コードの尺の基準となる "T" を作ります。





 【"T" を作る】
 信号コードの基準となる "T" の ON("1")側とOFF("0")側 を作ります。1Tの幅は0.56ms(560μs)です。  なので、1Tの幅は38KHzでは約21パルス(周期)に相当します。


 


 【各コードを作る(リーダーコード、ビット0、ビット1)】
 上記で作った1Tを基に各コードを作ります。



 【1byte(バイト)のデータを送信するときに呼び出すプログラムを作る】
 1byte(バイト)のデータをWレジスタに読み込み、callでこのプログラムを呼び出すと規定のコードでデータを送信します。
 ここがキモで1byteのデータをbit単でbit0から順にbit7までそれぞれのbitが1 or 0 か btfss で確認しコード変換して送ります。



 【信号コードを送信する】
 SW1のボタンを押すと、この Main2 を実行します。リーダーコードと4byteのデータを送信します。  ここで送信プログラムが終了です。




■■■■■■ PICで受信機を作る  ■■■■■■

 ※工事中♪