赤外線リモコンの受信機の製作
【デジットでゲットした100円リモコン編】
PICマイコンは久しぶりに使います。本業が暇になってきたので(本当は困るのですが、(-。-;) ) 勉強に勤しんでいます。
さて、今回使用するPICマイコンは、8Pinタイプの物で、1個が何と
80円と驚き価格のマイコンです。そこで何を作るか、テーマを考えいたところ、実は今年の4月末日に関西に仕事があり、そのついでに日本橋の電気街に行くことが出来ました。必ず行きたいと思っていた所は2つあり、一つは「塚口勇商店
」、もう一つは「デジット」と言うお店です。
何を隠そう私は30年以上前に「塚口勇商店」に通っていて、今でもそこで入手した絶縁トランスを使っています。30年以上前には「デジット
」は無かったと思いますが、店内にはびっしりと部品が並んでいて、店員さんも東京にはない対応(サービス)をして頂け、個人的には居心地のいいお店でした。
↑塚口勇商店 ↑デジット
「塚口勇商店」についてホームページがありませんが、Web上でググってみて下さい。色々おもしろい情報が結構出てきます。ここでは割愛しますが、私も含め多くの人がこの店の恩恵を受けていることに、ある意味驚きでした。誰かは「神の領域
」と言っていた人もいました。私も今となってはかなり貴重なお店と位置付けています。この日もきっちりと掘り出し物をゲットしましたが、持ち帰れないので宅急便にて送ってもらいました。もちろん送料はかかります。30年以上前に通っていたころに対応してくれていた通称「オジサン」は健在しておりましたが、
2代目らしき男の人が対応してくれていました。確か「オジサン」には奥さんがいたはずですが、聞くところによると元気とのことでした。できればまた行きたいと思っています・・・
さて前置きが長くなりました、いつもの製作仕様を下記に示します。
PL-IRM-2161-C438 OSRB38C9AA
いつもの様にブレードボードでの実験です。部品点数はマイコンICの他、赤外線センサーとMCLR用のプルアップ抵抗10kΩ1本とパスコンが基本部品です。今回は動作確認のためLEDを2個付けています。もちろん電流制限用の抵抗を取り付けています。
使った赤外線センサーは殆どの物が使えそうです。今回は秋月電子さんで売られていた上記写真の右側2種類の物です。どちらも2個入り100円とリーズナブルです。今回採用した赤外線センサー
は3V駆動もできるタイプを選択しました。ちょっと昔は5V駆動しかなかったのですが、最近はボタン電池駆動を意識したのか、3V
駆動対応型も出回っているようです。
冒頭でテーマについて話が脱線しましたが、今回のテーマになったきっかけは、デジットで100円リモコンを見つけたのが理由です。
↑こちらはデジットでゲットした
リモコンです。1個100円!
ボタンは26個あります。
↑こちらはリサイクルショップで
ゲットしたリモコンです。
1個290円でした。
ボタンは40個あります。
赤外線を使った製作記事をWebでよく見かけますが、なぜか送信機と受信機をセットで製作されている方が多いように思えます。中には独自の通信フォーマットを作って通信しているものもあります。実は以前からこの赤外線によるリモコンを考えていたのですが、
リモコン送信機はリサイクルショップなどへ行くとてもリーズナブル価格でかなりの数があります。それを使わない手はありません。また家の中にもテレビやビデオをはじめ、当たり前の様にリモコンが使われています。ちなみに私の家にはSONY系のリモコンがたくさんあります。
さて、上記2台のリモコンはNECフォーマットをベースにしたものであることが分かりました。具体的な調べ方はWeb情報に譲りますが、3本足の赤外線センサーの内、電源2本と1本の出力端子があるだけなの、その端子をオシロスコープなどで見ればフォーマットはすぐに分かります。
ちなみにNEC通信フォーマットについては以下のサイトが参考になります。
http://www.elm-chan.org/docs/ir_format.html 旧NEC、今ではRENESASが後を継いでいるようです。
赤外線通信フォーマットはNECの他、家電協会フォーマット、SONYフォーマットがあり、大枠は次のグループに分かれているようです。
があるようで、NECが多いのは開発された当初、NECチップ搭載機が多く出回った為と言われています。今回、NECフォーマットに対応させる受信機を製作しましたが、いずれ他のフォーマットにも対応する様なリモコンを考えたいと思います。
■ デジット100円リモコンのボタンとコード(※こちらで独自に解析したものです。間違い等がある場合はご指摘願います。)
ボタン名 | ファーストデータ | セカンドデータ | ボタン名 | ファーストデータ | セカンドデータ |
電源 | 0x08 | 0xF7 | 4 | 0xB2 | 0x40 |
FLASH | 0x60 | 0x9F | 5 | 0x02 | 0xFD |
START | 0x90 | 0x6F | 6 | 0x32 | 0xCD |
ESC | 0xB8 | 0x47 | 7 | 0x20 | 0xDF |
⊔ | 0xF8 | 0x07 | 8 | 0x00 | 0xFF |
ENTER | 0xB0 | 0x4F | 9 | 0x50 | 0xAF |
N1 | 0x98 | 0x67 | 0 | 0x78 | 0x87 |
N2 | 0xD8 | 0x27 | 00 | 0x70 | 0x8F |
N3 | 0x88 | 0x77 | ・ | 0x58 | 0xA7 |
N4 | 0xA8 | 0x57 | SET | 0x38 | 0xC7 |
1 | 0xE8 | 0x17 | ADDR | 0x28 | 0xD7 |
2 | 0x48 | 0xB7 | DATA | 0xF0 | 0x0F |
3 | 0x68 | 0x97 | TEXT | 0x30 | 0xCF |
ところでリモコンが発する信号内容は独自の物が多く、上記2台のリモコンも、一般の家電に添付されている日本のリモコンが発するコードとは別の様です。特にNECフォーマットの中にある、カスタムコードと呼ばれるものは、当時NECが契約したメーカーに割り当てていたもので、
一般向けには発行していないようです。従って今回使った2台のリモコンのカスタムコードはどちらも固定された8bitコードで、ファーストコード「0x00」とセカンドコード
「0xFF」でした。セカンドコードはどうやらファーストコードの反転データになっている様です。
カスタムコードの後に続く信号がリモコンボタンに割り当てられたデータコード
と呼ばれるものです。これもファーストデータとセカンドデータに分かれていて、それぞれ8bitデータで、セカンドデータはファーストデータの反転データ
になっています。反転データがあるのは恐らく通信誤りのチェック用だと思います。
今回製作した受信機は、カスタムコードを読み込まないようにしていますが、信号として現れるパルスはきちんと処理しています。後に続く二つの
8bitデータコードはきちんと読み込み、ファーストデータとセカンドデータの「&&」アンドを取って確認しいています。(ソフトウェア参照)
ソフトウェアについて少し触れておきます。相変わらず汚いコードになっていることをまずはお詫び申し上げます。今回の赤外線受信機のプログラム・アルゴリズムをどうするか、Webなどを参考にすると、タイミングを取ってサンプリングしてみたり、
パルスのエッジごとに割り込みをかけタイマーデータをサンプリングするなど、先人の御仁たちは色々工夫されているようです。今一つ理解できないので、基本的には同じ考え方として、エッジ検出とタイミング、および16ビットタイマー1を使ってパルス幅を検出するやり方にしました。
特に正確なパルス幅が必要だったので、タイマー1を使いました。クロック源はマイコン内蔵の物を使っています。結構正確だったのにビックリです。
またRA4(3Pin)をデバッグ用の信号出力にしており、
ここにオシロスコープをつないで、要所の波形を観測することが出来ます。また信号確認用として赤と緑の二つのLEDを取り付けて、いくつかのボタンに応じて点滅させるなどの処理をしています。
今回のプログラムでは、電源を押すと赤LED点灯、FLASHを押すと青LED点灯、ESCを押すと二つのLEDは消灯します。
また1を押すと1回だけ赤LED点滅、2を押すと2回、・・・9を押すと9回点滅と言う動作もさせています。
最後にRA2(5Pin)が空いています。ここは「INT」割り込みが使える端子です。今は使っていませんが、待機時にスリープ
させておき、赤外線信号を受けたら起動して処理をすれば省エネになり、バッテリー駆動も可能になってきます。
マイコンのPIC12F18xxシリーズはPIC16F18xxと殆ど同じなので、一部のレジスタを変更するだけで今回のプログラムはそのまま動作させることが出来ます。入出力(I/O)を増やしたいときは、
多ピンのマイコンを使い、前途の様な少しの変更を施し、「void ActionLED(void)」のモジュールに書かれた部分に処理を追加すれば、対応が可能です。ぜひチャレンジしてみて下さい。
秋月電子さんでは赤外線センサーを使ったキットがあり、
「PICマイコン赤外線リモコン学習キット」なるもを、2,400円で売られています。単純な送受信機であれば高価な買い物ですが、これから赤外線通信技術を深めたいと言われる方には大変便利なものと思います。
私も持っていませんがいずれは入手してみたいと思っています。なお秋月のこのキットのページに載っているPDF資料は大変役に立つものです。ぜひダウンロードされることをお勧め致します。では実際の動作は最近始めたYoutube画像で見て下さい。画像がぼやけていますが、お許しをm(__)m・・・おしまい!
上記の回路を応用して以前、秋月電子さんで購入した「白色パワーLEDバー」を照明代わりに考えていたのですが、上にある照明をON/OFFするのに困っていましたので、今回製作することにしました。それに伴い、プログラムを変更しました。 電源スイッチボタンはオルタネートモードに変え、FLASHボタンは単にLEDの点灯だけにし、ESCは単にLEDの消灯だけの動作にしました。また1~9のボタンは単にLEDだけを点滅させる機能にしました。 ソースファイルはここです。回路はあえて書きません。RA0[7Pin]はLEDの点灯に、RA1[6Pin]は抵抗入りトランジスタのベースに接続し、トランジスタのコレクタは12Vのリレーコイルをドライブしています。 サージ吸収用ダイオードは必ずリレーコイルと並列に(極性要注意)取り付けて下さい。
実際に約2.4m上のところに取り付けて、動作させてみました。かなり明るく、リモコン動作も良好です。いずれ何本か購入し、リモコンのボタンに対応するBOXをそれぞれ製作して、任意の場所のON/OFFが出来るようにしたいと思います。BOXの大きさは55×40×H20 のタカチの樹脂ケースです。また別な応用として、PWM出力を利用し、明るさを可変することもできそうです。