関心が多いようですので、赤外線リモコンについて再度情報を整理することにしました。 最新の 16F628 を使用し、赤外線分析も行えるように改良しました。16F628 の特徴
- 16F628 はUSARTを搭載しており、RC-232C 通信を容易に行うことができます。
- 内蔵発振4MHzを搭載しているため、外部発振を省略できます。
- MCLR の内臓プルアップを搭載しており、外部プルアップ抵抗を省略できます。
- 96バイトの連続で使えるメモリがあり、赤外線解析に有利です。
再度、赤外線フォーマット(規格)を分類し直しました。 赤外線信号は電子機器の誤動作を防ぐために、規格化されています。 ただし、独自仕様もあります。
[赤外線信号の分類] 家電製品協会フォーマット 乱立した独自仕様を統一するために規格された業界標準です。 NECフォーマット 統一以前に広く使用され、今でも比較的多くの機器で使用されています。 独自仕様 さまざまです。海外フォーマットなど。 それぞれの赤外線フォーマットを以下にまとめました。
- モールス信号のようになっており、信号の長短によって論理 0, 1を区別します。
- 外部ノイズに強くするため、信号は通常38KHzの搬送波(キャリア)で変調されています。
太陽の赤外線や蛍光灯の影響で機器が誤動作するのを防ぐためです。
![]()
[基本情報] 搬送波[KHz] 33 - 40 時間単位T[ms] 0.35 - 0.50 論理0 on 1T + off 1T 論理1 on 1T + off 3T ![]()
- 搬送波(キャリア)は38KHzが一般的です。
[フォーマット構成] リーダ部 カスタム・コード部 パリティ部 データ・コード部 データ部 トレーラ部 [on=8T]+[off=4T] 2bytes(16bits) 4bits 4bits 任意bits [on=1T]+[off=8ms以上]
- リーダ部分は他の赤外線(太陽光など)を誤認しないためです。
- カスタム・コード部は会社コードなどユニークなものです。
- データ部は 1 から 最大48 bits(6Bytes) です。
- トレーラ部は信号の終端を示すものです。
![]()
家電製品フォーマットの例(Tは時間単位, 約0.47ms)
![]()
[基本情報] 搬送波[KHz] 38 時間単位T[ms] 0.56 論理0 on 1T + off 1T 論理1 on 1T + off 3T ![]()
- 消費電力を抑えるため、搬送波(キャリア)のデューティ比は1/3です。
[フォーマット構成] リーダ・コード カスタム・コード データ・コード (反転)データ・コード ストップ・ビット [on=16T]+[off=8T] 2bytes(16bits) 8bits 8bits [on=1T]
- ストップ・ビットのあとにフレーム・スペースという無信号があり、1フレームは108msです。
- 現在、反転データ・コード部分は通常のデータ・コードとして使用されています。つまりデータは16ビット長です。
![]()
[カスタム・コード] C0 C1 C2 C3 C4 C5 C6 C7 C0 C1 C2 C3 C4 C5 C6 C7Custom Code ビット反転Custom Code
[データ・コード] D0 D1 D2 D3 D4 D5 D6 D7 D0 D1 D2 D3 D4 D5 D6 D7Data Code ビット反転Data Code
NECフォーマットの例(Tは時間単位, 約0.57ms)
![]()
独自仕様はさまざまです。 以下の例は 12Bit Data(正論理)で間隔を置いて三回繰り返しています。
TV,AV系の例(Tは時間単位, 約0.49ms)
![]()
![]()
解説VCCの電圧不足問題
- 16F627, 16F628, 16F627A, 16F628A, 16F648A のいずれでも OK です。
- 赤外線LED駆動用に単4電池2本使用(パルス電流680mA)します。
- RS-232C より電源を供給(5V,5mA)します。ツェナーダイオードで定電圧化します。
- 赤外線受光部はCRVP1738を使用しました。 このモジュールは復調された信号を反転出力します。
- 赤外線送信部は一般的な赤外線LEDを使いました。
- RS-232C 専用ドライバを使用せず、簡易インターフェース回路にしています。
- このリモコンはRS-232Cから電源をとります。
- そのためUSB-シリアル変換ケーブルやノートPCなどによっては電圧不足になることがあります。
- 動作しない場合にはまずVCCが5Vであるか確認してください (プログラム Opt->Count Pulse を実行時に電圧を測定してください。プログラムを実行しないと電源は供給されません。 PICは4V以上あれば正常動作します)。
- 電圧不足の場合には、外部電源(5V)をVCCに接続することで回避できます。
- D1(1S1588)をショットキー・ダイオードに変更することで回避できることがあります。
- R7(300)を小さくすること(200など)で回避できることがあります。
RS-232C 接続方法
![]()
値 数 備考 16F628 1 16F627, 16F628, 16F627A, 16F628A, 16F648A でも OK 18P 1 18ピンソケット 10K 3 R3, R4, R6 カーボン皮膜抵抗1/6W 4.7K 1 R5 カーボン皮膜抵抗1/6W 560 1 R2 カーボン皮膜抵抗1/6W 300 1 R7 カーボン皮膜抵抗1/6W 2.2 1 R1 カーボン皮膜抵抗1/6W 22uF 1 C3 縦型電解コンデンサ(耐圧16V) 1S1588 2 D1, D2 代替品でも OK。D1はショットキー・ダイオードが望ましい。 Z5.1 1 D3 5.1V ツェナーダイオード 2SC1815 2 Q1, Q2 NPNトランジスタ 2SD592 1 Q3 NPNトランジスタ LED 1 D 赤外線LED CRVP1738 1 赤外線受光モジュール(38KHz) Battery 1 単4 x2電池ケース DSUB9 1 D-SUB 9ピン、メスコネクタ
- HOST側つまりPC側からみたピンの解説です。
- 接続機器側から見た場合には、IN/OUT が逆になります。
D-SUB 9ピンコネクタ RS-232C 9P DTE(HOST) ┌─────┐ │@ABCD| │ EFGH | └─────┘
ピン 信号名称 IN/OUT 意味 1 DCD IN 受信キャリア検出(Data Carrier Detect) 2 RXD IN 受信データ(Receive Data) 3 TXD OUT 送信データ(Transmit Data) 4 DTR OUT データ端末レディ(Data Terminal Ready) 5 GND - 信号用接地(Signal Ground) 6 DSR IN データセットレディ(Data Set Ready) 7 RTS OUT 送信要求(Request to Send) 8 CTS IN 送信可(Clear to Send) 9 RI IN 被呼表示(Ring Indicator)
- 一般的なストレート・ケーブル、クロス・ケーブルを解説します。
RS-232C 9P-9P Straight Cable HOST MODEM 信号名称 IN/OUT ピン 信号方向 ピン IN/OUT 信号名称 DCD IN 1 ← 1 OUT DCD RXD IN 2 ← 2 OUT RXD TXD OUT 3 → 3 IN TXD DTR OUT 4 → 4 IN DTR GND - 5 − 5 - GND DSR IN 6 ← 6 OUT DSR RTS OUT 7 → 7 IN RTS CTS IN 8 ← 8 OUT CTS RI IN 9 ← 9 OUT RI
RS-232C 9P-9P Cross Cable HOST-1 HOST-2 信号名称 IN/OUT ピン 信号方向 ピン IN/OUT 信号名称 DCD IN 1 NC 1 IN DCD RXD IN 2 ← 3 OUT TXD TXD OUT 3 → 2 IN RXD DTR OUT 4 → 6 IN DSR GND - 5 − 5 - GND DSR IN 6 ← 4 OUT DTR RTS OUT 7 → 8 IN CTS CTS IN 8 ← 7 OUT RTS RI IN 9 NC 9 IN RI
Windows 用ソフトウェア
ダウンロード Remocon2.zip(221KB)
単独で動作します。外部ライブラリは必要ありません。
対応COMポートを3つから9つ(COM1-COM9)に拡張しました(2007-08-29)。
![]()
![]()
![]()
![]()
![]()
メニュー説明
メニュー 機能 File
- COM:COMポートの選択(デフォルトはCOM1)
- Exit:終了
Opt
- Count Pulse:パルス数をカウントします。このパルス数を元に各パルスの長さを計測します。
- Analize Pulse:各パルスの長さを計測します。分解能は100usです。
解析可能な最大パルス数はメモリの関係から48です。
0us と表示されることがありますが、これは 25500us 以上の場合です。
リーダ部、ストップ部を含めて表示します。Help
- Web Home:HP をアクセス
- About:Remoconについて
注意事項
- NECフォーマット、家電製品協会フォーマット以外のフォーマットは送信できません。たとえばリーダ部は固定長です。
- 解析はできます。
- 制御コードとしてはNECフォーマット、家電製品協会フォーマット以外も送信できる仕様になっています。
- 独自にプログラムを作成して対応ください。
学習方法
準備上記をまず実行ください。これを怠ると学習できません。
- Opt->Count Pulse を実行
- Opt->Analize Pulse を実行
- NECフォーマット,家電製品協会フォーマット種別ごとにボタンのデータを学習します。
- Learning をチェックし、学習したいボタンを押すと学習モードに入ります。
- 5秒以内にリモコンボタンを赤外線受光部に向けて押して下さい。
- 正常に認識すると読みとったデータを表示します。
- 学習データは Remocon2.txt に書き込まれます。
- Remocon2.txt ファイルがなければ自動生成されます。
RS-232C 通信条件
通信速度 9600bps パリティ なし ビット数 8 ストップビット 1 制御コマンド
- ハードウェアの制御には1バイトからなるコマンドを送信することで行います。
- 赤外線送信を行う場合にはコマンドに続けて数バイトのデータを送信します。
- 赤外線受信を行う場合にはコマンドを送ると赤外線受信モードになり、 赤外線が受信されると、数バイトのデータを送り返してきます。
- 家電製品協会フォーマット、データ部の任意ビット(最大48ビット)に対応しました。
分類 コマンド データ NECフォーマット赤外線送信 0x0 4バイト(送信)
- カスタム・コード(2バイト)
- データ・コード(1バイト)
- 反転データ・コード(1バイト)
家電製品協会フォーマット赤外線送信 0x1 24バイト(送信)
- Carrier キャリアを指定します。
0=41.666KHz 1=38.4615KHz 2=35.7142KHz 3=33.3333KHz- High0 論理0のOn部分の長さを指定します。
例 500us x 38KHz(Carrier) = 19- Low0 論理0のOff部分の長さを指定します。
例 500us x 38KHz(Carrier) = 19- High1 論理1のOn部分の長さを指定します。
例 500us x 38KHz(Carrier) = 19- Low1 論理1のOff部分の長さを指定します。
例 1500us x 38KHz(Carrier) = 58- StartHs リーダのOn部分の長さを指定します。
例 4ms x 38KHz(Carrier) / 2 = 77- StartLs リーダのOff部分の長さを指定します。
例 2ms x 38KHz(Carrier) / 2 = 38- StopHs トレーラのOn部分の長さを指定します。
例 500us x 38KHz(Carrier) / 2 = 10- StopLs トレーラのOff部分の長さを指定します。
例 8ms x 38KHz(Carrier) / 2 = 152- CustomH カスタムのHighバイトを指定します。
- CustomL カスタムのLowバイトを指定します。
- Parity パリティ部とデータ・コード部を指定します。
- Data1 データ1を指定します。
- Bits1 データ1の有効ビット数を指定します。例 8
- Data2 データ2を指定します。
- Bits2 データ2の有効ビット数を指定します。例 8
- Data3 データ3を指定します。
- Bits3 データ3の有効ビット数を指定します。例 8
- Data4 データ4を指定します。
- Bits4 データ4の有効ビット数を指定します。例 8
- Data5 データ5を指定します。
- Bits5 データ5の有効ビット数を指定します。例 8
- Data6 データ6を指定します。
- Bits6 データ6の有効ビット数を指定します。例 8
NECフォーマット赤外線受信 0x2 4バイト(受信)
- カスタム・コード(2バイト)
- データ・コード(1バイト)
- 反転データ・コード(1バイト)
家電製品協会フォーマット赤外線受信 0x3 6バイト(送信)、9バイト(受信) 有効ビット数は Count Pluse 解析から計算します。
- Bits1 データ1の有効ビット数を指定します。例 8
- Bits2 データ2の有効ビット数を指定します。例 8
- Bits3 データ3の有効ビット数を指定します。例 8
- Bits4 データ4の有効ビット数を指定します。例 8
- Bits5 データ5の有効ビット数を指定します。例 8
- Bits6 データ6の有効ビット数を指定します。例 8
- CustomH が返されます。
- CustomL が返されます。
- Parity パリティ部とデータ・コード部が返されます。
- Data1 データ1が返されます。
- Data2 データ2が返されます。
- Data3 データ3が返されます。
- Data4 データ4が返されます。
- Data5 データ5が返されます。
- Data6 データ6が返されます。
Count Pulse 解析 0x4 1バイト(受信) リーダ、ストップも含めてカウントされます。
- パルス数(1バイト)
Analyze Pulse 解析 0x5 1バイト(送信)、最大96バイト(受信) 解析するパルス数には Count Pluse 解析で得られた数を指定します。
- 解析するパルス数n(最大48)
- 解析データ(n x2バイト)
ただし、最大は48です。
解析データは 100us の分解能です。例 5 の場合、500us です。
High 部分、Low 部分を交互に返してきます。16F62x 用ファームウェア
ダウンロード Remocon2.hex
PIC が高機能になり、製作も容易になりました。(C)1997-2004 All rights reserved by Einstein.
しかし、この時代においても手元にあるリモコンを解析してみるとデータ長が42ビットと理解に苦しむ結果です。 いつになれば統一されるのでしょうか。。。