「ひかり201号」用赤外線リモコン--NECフォーマットな一品

2005年12月4日 更新
2004年10月30日 作成


PICマイコンを使って、赤外線リモコンを作ってみました。PIC12F675を使った一品で、R6(単3形)乾電池2本の電源で、数メートル離れた場所から、交通信号機のおもちゃ「ひかり201号」を操作できます。

リモコンの写真

使い方

PDF形式のマニュアルを用意しましたので、どうぞご覧ください。

ボタンを押すと、赤外線の信号が出るという、単純明快な品物です。

  1. 青いボタンを押すと「1」の信号が出ます。
  2. 黄色いボタンを押すと「2」の信号が出ます。
  3. 赤いボタンを押すと「3」の信号が出ます。

ただし、信号が出るのはボタンを押した瞬間だけです。ボタンを長く押し続けても、意味がありません。

信号機本体では、ボタンごとに次の意味を持たせてあります。

ボタンの色送出値機能
1設定する値を進める。
2設定する機能を選択する。
3信号の状態をすぐに進める。

青と黄は、設定を行うボタンです。赤は、押すとすぐに信号が変わります。押しボタン式信号のボタンとしても、使います。

ちなみに、こんなこだわりがあります。

NECフォーマット

今回は、受信側の信号機本体で、リモコン受信モジュールを用いた本格的な受信回路を使っています。なので、リモコンのほうでも、本格的な信号を出せるようにしました。

「NECフォーマット」(http://www.necel.com/ja/faq/mi_com/__com_remo.html)は、赤外線リモコンの規格のうちの1つです。次の特徴があります。

ちなみに、カスタムコードが「00XXh」となる場合は、どのメーカーでも自由に使えることになっています。そこで、今回の信号機のリモコンは、カスタムコードを「0033h」としました。

回路を設計する

リモコンを実現するためには、こんな要素が必要です。

8ピンのマイコンPIC12F675を使う

比較的必要な要素が少ないので、8ピンのPICマイコンPIC12F675を使うことにしました。

PIC12F675には、次の特長があります。

ちなみに、この用途であればADコンバータを内蔵したマイコンは必要ありません。同じような構成でADコンバータを省略したPIC12F629を使ったほうが、本当はいいのかもしれません。でも私は、PIC12F629とPIC12F675の2種類を取り揃えておくのがたいへんなので、8ピンのマイコンを使うときはいつも、PIC12F675を使っています。PIC12F629は、140円で買えたりするのですが、価格差は10円だけですから。

そんなわけで、回路図は次のようになりました。赤外線LEDは大きな電流を必要とするので、トランジスタで増幅をしています。クロックには、信号機本体と同じ4.19MHzのセラミック発振子を使いました。

回路図

ちなみに、以前の回路図では、トランジスタが2SC1815Yとなっていますが、コレクタ電流が流れすぎて、壊れる可能性があります。2SC2120など、より大きなコレクタ電流を流せるトランジスタを使ったほうが、安全です。

プログラムを書く

プログラムの流れとしては、単純に次のように考えました。

  1. ボタンが押されるまでは、スリープモードになっている。
  2. ボタンが押されると、赤外線の信号を出力する。
  3. 信号を出し終えたら、再びスリープモードに戻る。

プログラムリストは、次のリンクにあります。MPLABの、バージョン6などで使えます。

せっかくですから、PIC12F675の基本的な使い方をふまえて、プログラムの説明をします。

最初はハードの設定から

PIC12F675では、最大で6つのI/Oポートを使えます。でも、最初にきちんと設定をしないと、それぞれのピンが別の用途に割り当てられてしまうこともあります。

プログラムを書きはじめる前に、まずは「コンフィギュレーションビット」の設定です。

次は、プログラムの中で行う設定です。こちらの設定は、プログラムの中で自由に変更できるので、用途によっては状況に応じて同じピンを複数の機能で使い分けることもできそうです。

暇なときはスリープする

PICマイコンには、SLEEPという命令があり、使うとクロックを停止して止まります。SLEEPの状態では消費電力がたいへん少なく、待っている時間が多いリモコンでは重宝します。

でも、ボタンを押したときには、動作をきちんと再開させなければなりません。ボタンが押されたら割り込みが起こるようにすれば、割り込みによりSLEEP状態が終わり、マイコンの動作が再開されるようになります。

    movlw B'00001011'	;GP0,1,3を割り込みの対象に
    movwf IOC
    clrf STATUS		;Select bank 0
    clrf INTCON		;Clear INTCON
    bsf INTCON, 3	;Set Port change enable bit
    bsf INTCON, 7	;Set Global Interrupt Enable bit

このあたりで、割り込みの設定をしています。

割り込みが起きると、4番地に飛ぶので、4番地からは割り込み処理ルーチンを書きます。処理が終わったら、retfie命令で、もとの場所に戻れます。

    ; 割り込みではじまる場合
warikomi
    org H'04'	
    movf GPIO, W	;Read GPIO to stop warikomi status
    clrf INTCON	;割り込み禁止
    retfie

割り込みルーチンへ行くときと帰るときには、少しくせのある動作をするようですので、詳しくはデータシートを読みましょう。

しっかり光らせる

ボタンが押された場合には、LEDを点滅させるルーチンへ行きます。

「sendir」のルーチンで、送信をしています。

送信では、細かいタイミングを考える必要があります。4.19MHzの発振子を使った場合、1秒間に実行される命令の数はおよそ104万8600回になります。タイミングは、この実行速度から逆算して計算します。

例えば、38kHzの1周期は、27.59回命令を実行するのにかかる時間に相当します。なので、27命令周期か28命令周期で光を点滅させれば、だいたい38kHzで点滅させられたりします。

このようにして、ひたすら命令の数を数えながらプログラムを書くことで、NECフォーマットの信号を出すソフトウエアが完成しました。

さて、次は信号機本体を完成させなければなりません。


次の記事: 動きつつある新型自作交通信号機「ひかり201号」--灯器とケーブルと交差点を作る(2004-11-01)

前の記事: 自作信号機ユニット「ひかり201号」の新要素--赤外線リモコンで操作できる交通信号機のおもちゃ(企画)(2004-10-03)



杉原俊雄のホームページ -> PICマイコンを楽しむ -> 「ひかり201号」用赤外線リモコン--NECフォーマットな一品
製作・著作:杉原俊雄(すぎはら としお)
(c)2004 Sugihara Toshio. All rights reserved.