http://star.gmobb.jp/koji/data/remocon01.JPG 「学習リモコン」は市販されていますが、せっかくAVRを始めたのだから自作することにしました。 ネットを検索するとやはり、[ELM-ChaNさん|http://elm-chan.org/index_j.html]のところに辿り着きました。ここの[赤外線リモコン制御モジュール|http://elm-chan.org/fsw/irctrl/00index.html]を活用すれば容易に作成できそうです。こういうものを作るときにいつも困るのが、ケースと多数のキーの取付です。そこで、本体が壊れて使わなくなったリモコンのケースとキーパッドを流用することにしました。 http://star.gmobb.jp/koji/data/remocon02.JPG 主を失った古いラジカセのリモコン。赤外線リモコンの中身はだいたいこんな感じ。キーマトリクスは8×4=32でした。 !主な材料 *[AVRマイコン ATMEGA168P-20PU|http://akizukidenshi.com/catalog/g/gI-03033/] *[赤外線LED OSI5FU5111C-40|http://akizukidenshi.com/catalog/g/gI-03261/] *[赤外線リモコン受信モジュール PL-IRM2161-C438|http://akizukidenshi.com/catalog/g/gI-03292/] !製作 http://star.gmobb.jp/koji/data/remocon03.JPG [拡大1|http://star.gmobb.jp/koji/data/remocon04.JPG] [拡大2|http://star.gmobb.jp/koji/data/remocon05.JPG] 基板のキーパッドを残し、コントロール部分をAVRに置き換える。省スペース化のため[3色LED|http://akizukidenshi.com/catalog/g/gI-04033/]を使っています。回路は、ATmeaga168Pを使ったのでサンプルの設定をほとんどそのまま使っています。uartを無くして、ポートをキースキャンに使っているだけです。[回路図|http://star.gmobb.jp/koji/data/ir_remocon_cir.PNG] プログラムはサンプルよりむしろシンプルです。受信したものをそのままEEPROMに書込、読出して送信しているだけです。{{ref ir_remocon.c,AVR学習リモコンの製作,学習リモコンプログラムソース}} !コンパイルの仕方 上記のプログラムと、ChaNさんの[赤外線リモコン制御モジュール|http://elm-chan.org/fsw/irctrl/00index.html]のページにあるサンプルコードをダウンロードし、'''sampleフォルダにある'''、ir_ctrl.c とir_ctrl.hを使いますが少し変更します。 ir_ctrl.cの最終行(初期化処理)を、 /* Enable receiving */ #if IR_USE_RCVR IR_CAPT_FALL(); //IR_CAPT_ENA();←コメントアウト IR_CAPT_DIS();←ここ #endif } のように書換えます。リモコンの場合、通常は受信しないからです。 *'''【2015.10.28】ChaNさんサイトのサンプルソースが更新されたためコンパイルできなくなったとの報告がありました。新しいサンプルではコンパイルが通るように修正しただけでは動作しないことを確認しましたので当時のソースをUPしておきます。'''{{ref ir_remocon_old_src.zip,AVR学習リモコンの製作,ソース一式}} !使用法 32キーのうち1つをコマンド用のキー「プログラムキー」としています。(登録できるのは31キーです)プログラムキーを長押し(約1秒)すると、LEDが緑色に点灯しプログラムモードになります。 http://star.gmobb.jp/koji/data/remocon06.JPG どれか記憶させたいキーを押すとLEDが赤色に変わり、受信中になります。 http://star.gmobb.jp/koji/data/remocon07.JPG 受光部に向けてコピーしたい元のリモコンから送信します。正常に受信すると直ぐにLEDが緑色に変わり、EEPROMに登録されます。(受信が巧くいかないときでも約10秒後には緑色に戻ります)続けて別のキーに次々に登録していくことができます。 http://star.gmobb.jp/koji/data/remocon08.JPG LEDが緑色のときプログラムキーを押すと消灯し、通常モードになります。 (放置しても約15秒後には消灯します)通常モードでボタンを押すと送信中LEDが青色に点灯します。 http://star.gmobb.jp/koji/data/remocon09.JPG 押しても光らないボタンは登録されていないかもしくは登録されていてもフォーマットが不正で送信していないことを示します。(フォーマットが不正の場合は、頑張ってir_ctrl.cを適切に変更するしかありません。フォーマットの縛りを緩和すると、だいたい対応できるようです。独自フォーマットは対応不可能です) MEGA168のROMの容量からデータのサイズを14バイトに制限しています。エアコンなどデータが長いものは登録できません。 !注意事項 本機はパワーダウンモードを使用しているので電源スイッチがありません。ISPライタから電源を供給すると競合してしまいます。(私は、うっかりやってしまい電池が破裂して液漏れを起こして大変でした)なので書込時は電池をはずすかISPコネクタには電源を繋がないようにします。当たり前ですが。デフォルトのヒューズ設定ではプログラムを書込むときEEPROMを消去します。登録している場合はバックアップを取っておくとよいです。(ヒューズのハイバイトのbit3を0にすれば消去しなくなります) 製作、使用は自己責任でお願いします。 Fuse:L-H-X = E6-D7-F9 (分周なし、クリスタル用全振幅発振器、EEPROMを保持) http://star.gmobb.jp/koji/data/ir_matrix.png !変更履歴 *2010.11.18 連続押下時、リピートフレーム出力対応。 !!関連リンク ELM-ChaNさんのページ http://elm-chan.org/index_j.html 赤外線リモコンの通信フォーマット概要 http://elm-chan.org/docs/ir_format.html ATmega168データシート和訳 http://awawa.hariko.com/chira-ura/index.html 千秋ゼミ 高速ISPライター HIDaspx http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?AVR%2FHIDaspx#content_1_1 AVR Wiki http://www34.atpages.jp/avrwiki/wiki.cgi?page=AVRWiki //http://avrwiki.jpn.ph/wiki.cgi //http://wikiwiki.jp/avr/ その他のAVR関連の製作 AVRパラレルライターの製作 AVRとZ80でCP/M AVRとZ80でTK-80 Mega64でLED GAME ---- *素晴らしい作品で私も作りたいです。ChaNさんのサンプルコードが更新されたようです。ir_ctrl.cの最終行(初期化処理)の変更する部分が見つけられません。また、これはincludeファイルにすればよいのでしょうか。最後に、32キーのうちのコマンドキーはAVRのマトリクスの何番と何番のピンを短絡すればテストできますか。 - AVRビギナー (2015年10月04日 17時53分23秒) *サンプルコードがだいぶ変わったようですね。最後のCAPT_ENA();をコメント化しCAPT_DIS();を追加すればよいのでは。表を追加しました。ir_remocon.cの26行の#define PROG_KEY で好きなように変更できます。 - 管理人 (2015年10月04日 20時43分11秒) *ありがとうございます。「うまくいきました」と返事をしようとしているうちに遅くなってしまいました。すみません。ir_ctrl.c とir_ctrl.hそれに学習リモコンプログラムソースを合わせてコンパイルする方法がうまくできていないようです。うまくいけばまたご連絡します。 - AVRビギナー (2015年10月13日 21時37分46秒) *うまく行かないので、少し詳しい友人に見てもらったところ、ir_ctrl.cの変数がstateとbuffに変更されているのが原因ではないかとのことで、修正してくれました。その結果、コンパイルはエラー0で終了し、緑赤青のLEDが説明通り点灯し、赤外線LEDも発光するようになりました、しかし信号は家電協のヘッダーだけで、内容はOかFの連続になります。やはりir_ctrl.cのプログラム変更がなにか原因になっているのではないかと思います。なんとかご教授お願いします。 - AVRビギナー (2015年10月27日 23時16分28秒) *ir_remocon.cのIrCtrl.stateをIrCtrl.statに、IrCtrl.buffをIrCtrl.rxdataにすればコンパイルは通りますね。古いソースをUPしました。まずこちらを試してください。 - 管理人 (2015年10月28日 10時24分13秒) *そのようにしたつもりなのですが、コンパイルはできても信号を正しく記憶・再生できませんでした。でもhexファイルをupしていただいたので、こちらはうまく動作しました。今後、基板に組んで実用化したいと思います。ありがとうございました。 - AVRビギナー (2015年10月30日 00時04分27秒) {{comment}}