「タイマー機能付き赤外線学習リモコン」の製作
2010.08.03 「けん」様より、動作報告を頂きました。
ダイキン製のエアコンのリモコンデータは、本製作物では学習できません。
搬送波の問題ではなく、データビット長が他のエアコンより長い様です。
正月休み明けが寒い!
私の住んでいる岩手県は冬になると連日氷点下が続くのも珍しくありません。
休日明けの朝は会社内が非常に冷え込んでいて、エアコンを稼働させても直ぐには暖まりません。
会社に設置されているエアコンにはタイマー機能が付いているのですが、週間タイマーの機能しか無く、正月休みの様な1週間以上の休みがあるとタイマー設定が出来ません。
更に設置されているエアコンによっては週間タイマーも付いていないエアコンがあり、毎朝寒い思いをしている状況でした。
そこで、「週間指定タイマー」と「日時指定タイマー」によりエアコンの電源をON/OFFするコントローラーを作成してみました。
当初は、赤外線リモコン機能を持っているエアコン4台に1個づつコントローラーを設置しようと思っていたのですが、タイマー変更の度に4台のコントローラーを設定するのは大変なので、1台のコントローラーで複数のエアコンを制御することにしました。
既に3月も中旬となってしまい今更ですが、来季の為ということで・・・
赤外線信号を受信する回路・・・
まずは、エアコンに送信する赤外線データを学習する必要があります。
赤外線受信には下図にある様な回路をマイコンのポートに繋いでやれば0/1のデータは取得できます。
ものすごく古い話ですが、Oh!X(プログラミングを学ぶには最高の雑誌でした)という雑誌で紹介されていた学習リモコンもこんな感じの受信回路を使用して信号をサンプリングしていました。
この方式は、搬送波が38KHz以外の信号でも学習可能ですが、メモリを大量に消費します。
今回は信号をサンプリングするだけの容量を持ったマイコンを使用しませんので別の方式で学習しなければなりません。
大抵の赤外線リモコンから出ている信号は38KHzで変調されているので、BPFを通さないとデータとしての0/1が取得できません。
そこで、BPF内蔵のモジュール(PL-IRM0101)を使用することで、面倒な回路を組むことを回避します。
このモジュールはノイズに弱いらしいので、ここは慎重に付属のデータシートの通りの回路を組みます。
赤外線リモコンデータを解析(学習)する・・・
赤外線リモコンからデータが送信される時、スタートパルスが最初に送信されます。
スタートパルスの特徴は、比較的長い時間(約3msec)レベルがHiになる事です。その後、レベルはLoになります。
このパルスを検出したらデータ受信処理を行います。
データビットのパルスは、Hiレベルの時間とLoレベルの時間の差で0/1を判定します。
データビットが0の場合は、赤外線信号のHiレベルとLoレベルの時間は、だいたい同じです。
データビットが1の場合は、赤外線信号のHiレベル時間よりLoレベル時間が長くなります。
今回は、赤外線信号のHiレベルの時間とLoレベルの時間の和(周期)に対して、Hiレベルの時間の割合が30%未満の場合を1としております。
赤外線リモコンのデータの最後にはエンドパルスが出力されます。
エンドパルスの特徴は、赤外線信号がHiになった後、比較的長い時間(今回は約5msec以上)レベルがLoになる事です。
このパルスを検出したらデータ受信処理を終了します。
この図にあるような波形を 010001 と認識できれば赤外線信号の学習機能は完成です。
今回学習する情報は、スタートパルスのHi時間(SH)とスタートパルスのLo時間(SL)
ビットデータ0のHi時間(0H)とビットデータ0のLo時間(0L)
ビットデータ1のHi時間(1H)とビットデータ1のLo時間(1L)
エンドパルスのHi時間(EH)
ビットデータ長(ビット数)
ビットデータ配列 です。
この方式は万能ではなく、学習できないリモコンが存在します。それは、Windowsのメディアセンターを制御するマイクロソフトのリモコンです。(どうでも良いことですが・・・)
これ以外の我が家のリモコンはテレビ・ホームシアター・エアコンの全てを学習できました。
メーカーによって、Hiレベルの時間とLoレベルの時間が違う様です。
赤外線リモコンデータを出力(送信)する・・・
学習した各パラメータを使用して、赤外線LEDを点灯(1)/消灯(0)させるだけです。
その際に、38KHzで変調して赤外線LEDを制御します。今回はTimer0をCTC動作させて38KHzを生成しております。
基板作成後にTimer2で生成した方が良かったと後悔する事になります・・・。
今回使用した赤外線LEDはパルス発光時には100mAまで電流を流すことが可能です。
更に並列で4つのLEDを発光させる訳ですから、最大で400mAの電流を制御できなければなりません。
制御用のトランジスタは以前に買ったまま放置していた2SC1213ACを使用します。このトランジスタなら500mAまで流せますので安心して使用できます。
念の為、2SC1815とダーリントン接続してコレクタ電流を確保します。
各エアコンの赤外線受信部に、赤外線LEDを貼り付けて、長い電線でコントローラーに並列接続してみました。
伝送経路が長いと波形が鈍って正常に信号を送れなくなる可能性がありますが、約50mまでは問題無く送信できております。
操作方法が易しいユーザーインターフェースを考える・・・
常に私が操作していれば良いのですが、誰でも悩まずに操作できる様にユーザーインターフェース(UI)を考えます。
最近流行りのタッチパネル付きの液晶パネルが良さそうですが、システムが複雑になるのと、使用するマイコンAtMega328Pではポート数が足りないので見送りました。
結局、↑↓←→キーとEnterキーとCancelキーの6つのボタンとグラフィック液晶で(SG12864ASLB-GB-R01)で作る事にしました。
この液晶は、最近のものと比べると割高な気がしますが、制御方法の情報が豊富なのでこれを使用しました。
グラフィック表示が可能なので漢字表示もできます。これならユーザーに対して操作方法を日本語で表示することができるので、マニュアルを読む必要も無くなります。
赤外線出力用にTimer0を使用してしまったので、LCDに出力するデータポートを連続して8bitを確保できませんでした。
ポートDとポートBにそれぞれ4bit割り当てています。おかげでプログラムが面倒になってしまいました。
時計(RTC)の制御・・・
電波時計にすれば誤差が少なくなりますが、回路の規模が大きくなるのと、実際に使用する場所では電波が受信できない可能性が高い(社内の電波時計は稼働して2年目ですが数分ズレています)ので、高精度のOSC(KTXO-18S)を使用して1秒を得る事にしました。
このOSCは誤差1ppm(月差3秒以内)ですので、時刻補正をする頻度は少ないと思われます。
停電時の対応・・・
ブレーカーが落ちたりして停電して、電源復帰後に時計表示が「00:00:00」になっている家電をみかけます。
これと同様な状況になるのではタイマーとしては失格ですので電池によるバックアップを行います。
具体的には、リチウムイオン電池を使用してAC給電中は充電を行っておき、停電時には電池による動作を行います。
この電池と充電・放電制御にはnPMPで使用した物と全く同じ部品で構成しています。
もしかしたら、リセットICの出力にプルダウン抵抗を入れた方が良いかもしれません。AC給電中に電池を外しても電源が切れない現象が発生しました。本来なら電池を外した瞬間にFETがOFFになるので電源もOFFになる筈です。←冷静に考えると、当然の動作です。私の勘違いでした。(2010/08/08追記)
今後の検討課題とします。
画像公開・・・
タイマー機能の仕様・・・
1.週間タイマー
毎週指定した曜日の指定時刻に指定した赤外線データを出力します。
2.日時指定タイマー
指定した日付の指定した時刻に指定した赤外線データを出力します。
週間タイマー・日時指定タイマー合わせて50個までプログラムが可能です。
一発でエアコンが反応しない場合を考え、同じデータを1秒間隔で5回出力します。
この為、テレビの様な1種類の信号で電源をON/OFF(フリップ動作)する機器には使用できません。
赤外線リモコン学習機能の仕様・・・
搬送波 38KHz の赤外線リモコンデータを学習可能
最大8個までのデータを学習可能 ( IR1 ~ IR8 )
今後の検討要素(多分放置)
リチウムイオン電池の充電・放電回路の見直し。( 問題無しと判断 2010.08.08 )
バックライトの点灯。(本製作物で使用しているLCDのバックライトの消費電力が大きいので断念 2010.08.08 )
規模を大きくしてタッチパネルを採用してみたい。(LAN経由で外からの遠隔操作を検討中 2010.08.08)
|