DSC_0568.JPG DSC_0677.JPG
 

概要

  • 1キー(1ボタン)だけで全ての操作ができる赤外線学習リモコンを作成する。
  • 部品は AVR マイコン(ATTiny85, フラッシュメモリ8kB/RAM512B/EEPROM512B)、赤外線LED、赤外線リモコン受光モジュール、ピエゾブザー、タクティルスイッチ、プルアップ抵抗だけ
  • 学習した信号は圧縮して AVR マイコン内蔵の EEPROM(不揮発性メモリ) に保存する。最大6種類の信号が記録できる。
  • 電池電源でも長期間使えるように、12秒間操作がないとパワーダウンモードになる。

回路図、基板図

1key-sch01.png 1key-brd.png DSC_0570.JPG

  • 電源電圧は4.5V です(リチウムコイン電池1個の 3V で動くといいのですが、残念ながら 3V では、赤外線 LED の発光はできても、赤外線受信モジュールの動作電圧に足りないため、学習ができません。今後低電圧で動く赤外線受信モジュールで実験してみる予定です)。
    • 2.7Vから動作する赤外線受信モジュール RPM7238-H8R で実験してみました。電気的には問題なく動作しました。RPM7138-R の代わりにこれを使えば、回路全体を 3V で駆動可能です。ただし5V版と同じ形状のプラスチックのパッケージの製品がありません。(2014/7/7)
    • 100円ショップで購入できる「マグネットスイッチ付きLEDライト」の電源が、アルカリボタン電池 LR44*3個で 4.5V です。基本的にはそのケースに組み込む想定で、回路とファームウェアを調整してあります。
  • 基板図中に赤字で 接続と書いてある、基板中央付近の2個のパッド(JP1とJP2)間は忘れずジャンパ線で接続してください(この接続を忘れると、赤外線受信モジュールの電源が入らず、学習ができません)

ワンキー赤外線学習リモコン(ATTiny85用) ファームウェア

  • ファームウェアの使い方
    • gcc(avr-gcc-4.5.1_1) 用ソースコードとコンパイル後のバイナリファイルです
    • ZIP ファイル内の 1key.hex がファームウェアのバイナリファイル(Intel HEX 形式) です。このファイルを AVR マイコン(ATTiny85) に書き込んでください。
      • 実際の書き込みに必要なファイルは 1key.hex だけです。
    • 書き込み前または後に、ヒューズ(lfuse) を 0xf1 にする必要があります
      • ヒューズ(lfuse) を 0xf1 にすると、クロックが内蔵 PLL 16MHz になります
    • hfuse はデフォルトのまま(0xdf) です

作り方

pdftop01.jpg
 

部品表

回路図での記号型番説明入手先
U1ATTINY85AVRマイコン(DIP 8pin)DigiKey
RPM7138-RRPM7138-R赤外線受信モジュールDigiKey
IR-LEDOSIR5113A5mm赤外線LED秋月
SW1FSM4JHタクティルスイッチDigiKey
SP1PKM13EPYH4000-A0(PKM13EPYH4002-B0)ピエゾブザーDigiKey
R110kΩ抵抗秋月
R251Ω(20Ω)抵抗秋月
  • マルツパーツ館では上の表の全部品の取り扱いがあります(2014/6/30 マルツパーツ館には、赤外線 LED OSIR5113A がありません。どれが代用可能かは未確認です)

かんたん操作説明

  • 学習
    1. 短く1~6回押して保存先を指定する
    2. sp.png ブ(未学習の時のみ)
    3. 長押し(1回目)
    4. sp.png
    5. 長押し(2回目)
    6. sp.png ピー
    7. 赤外線受信(受光部に向けて学習したいリモコンの信号を送信してください)
    8. sp.png ピー
    • 学習済みの信号が誤って消されるのを防ぐため、学習操作は上記のように2回続けて長押ししないと反応しないようになっています。
    • 赤外線受信後にピーと鳴らない場合(3回または4回ブザー音が鳴る場合)は学習に失敗しています。下のブザー音の意味を見てください。
  • 送信
    • 短く1~6回押すと、メモリ1~6に学習済みの信号を送信する
      • ボタンを押し終わってから赤外線が送信されるまでに少しタイムラグがあります。
      • タイムラグは、ボタンが何回連続で押されたかを確定するまでの時間です。
  • 固定モード送信
    • 1種類の信号だけ送信できればよい場合は、短く1~6回押して送信する信号を指定した後、短く9回連続で押すと、固定モードになってタイムラグがなくなります。固定モードは長押しで解除。

詳細操作説明

No.操作名コマンド説明
1送信短押し×[メモリ番号]回[メモリ番号]は1~6。単純に短押しすると、押した回数に応じて学習済みのメモリの内容を赤外線送信する(つまりシングルクリックでメモリ1の内容を出力、ダブルクリックでメモリ2の内容を出力...という動作をする)。
2*学習(モードA)長押し×2回+赤外線受信赤外線信号を学習する。記憶先は直前に No.1 で送信したメモリ番号。
3*学習(モードB)長押し×3回+赤外線受信赤外線信号を学習する。記憶先は直前に No.1 で送信したメモリ番号。No.2との違いは、No.3で学習した場合、送信時に同じ信号を約40[ms]間隔で2回繰り返して送信する点。
4*消費メモリ確認短押し×7回学習済みの信号が消費しているメモリ(EEPROM)量に応じてBEEPを鳴らす。対象は直前に No.1 で送信したメモリ番号。BEEP1回が32バイト。
5メモリ残量確認短押し×8回全メモリ(EEPROM)残量に応じてBEEPを鳴らす。BEEP1回が32バイト。
6*固定モード短押し×9回固定モードに移行。固定モードでは短押しした瞬間に赤外線が送信される(通常モードでは短押しから赤外線の送信までにタイムラグがあるが、それが解消する)。固定モードにすると、直前に送信した1種類の信号しか送信できなくなる。固定モードは長押しで解除される。
7*メモリ削除短押し×11回学習した赤外線信号を消去する。対象は直前に No.1 で送信したメモリ番号。
8完全初期化短押し×12回学習結果を全て消去して初期状態に戻す。
  • 表中の「メモリ」は AVR マイコン(ATTINY85)内蔵のEEPROMのこと。
  • ボタンが1つしかないので、学習、送信、その他の操作はすべて上の表のコマンドで実行する。
  • 1~6の6個のメモリに6種類の赤外線信号を学習可能。どのメモリかをボタンの連打数で指定。
  • 学習済みのメモリ番号に重ねて学習すると上書きされる。
  • *印の付いたコマンドは、まず No.1 で対象となるメモリ番号を指定してから実行すること。
    • モードAとモードBの違いは、学習したパターンで発光する時に、1回だけ発光するか(モードA)、40[ms]間隔で2回発光するか(モードB)の違い。 信号の区切り目で学習を終了するか(モードA)、発光が続いている限り学習を続けるか(モードB)(通常はモードAで学習できますが、失敗する場合はモードBを試してください)。

ブザー音の意味

  • ブザー音には短い音、長い音、低い音の3種類があります。それぞれの意味は次の表の通りです。
    • 短い音
      1回学習予告
      2回ピピ起動音(電池を入れた時)
      3回ピピピ固定モード開始
      4回ピピピピ固定モード解除
  • 長い音
    1回ピー学習スタンバイ(モードA)/学習成功(モードA)
    2回ピーピー学習スタンバイ(モードB)/学習成功(モードB)
    4回ピーピーピーピーメモリ削除成功
    5回ピーピーピーピーピー完全初期化成功
  • 低い音(エラー音)
    1回学習前に送信しようとした
    2回ブブノイズを受信したため学習中断
    3回ブブブ受信した赤外線信号が長すぎて RAM 不足のため学習中断
    4回ブブブブメモリ(EEPROM)不足のため学習中断またはメモリ削除失敗

赤外線信号学習操作のコツ

  • 送信側(学習元)の赤外線 LED と受光部は 10cmくらい離す
  • 送信側のリモコンのボタンは一瞬押して離す(押しっぱなしにしない)
    • ファームウェアの Version 49 以降、モードAでは押しっぱなしでもよくなりました。
  • インバーター式蛍光灯はノイズ源になるので消す
  • うまく学習できない場合はまわりの明るさを変えてみる
    • 赤外線受信モジュールにロームの製品(RPM7138-R)を使うようにしたら、インバーター式蛍光灯や周囲の明るさにあまり影響されなくなりました。
  • 赤外線ポート付きのノート PC が常時赤外線を出してノイズ源になることがあるので注意

写真

  • ブレッドボードでテスト
    1key1.JPG
     
  • 専用基板を作成した
    DSC_0609.JPG
     
  • 受信した赤外線パルスの生データをシリアルに出力するモードを追加(2014/6/1)。VB でパルス列を表示するプログラムを書いた。

teraterm01.png vhs-sharp-on.png


ワークショップ向け紹介文

  • 100円ショップのLEDライトを改造して、AVRマイコンを使った1ボタン赤外線 学習リモコンを作成します。 部品(9点)のはんだ付け、マイコンへのプログラムの書き込み、 ケースへの穴あけを行います。ハンダゴテを使用しますが、 はんだ付けに自信のない方や小さいお子様は、はんだ付け不要のコースも可能です。
  • 電子工作がはじめての方でも大丈夫です(ハンダごては使いません)。経験を問わず、老若男女どなたでも参加可能です。数名のグループでの参加も可能です。ブレッドボードを使いますが、試作品らしくない、そのまま使えるリモコン作りにチャレンジします。お手軽に赤外線学習リモコンを作ってみましょう!!
  • 専用シートのマークに合わせて電子部品をさしこむだけで、簡単に作品が作れます。お手軽に赤外線学習リモコンを作ってみましょう!! 普通のブレッドボード工作よりも簡単ですが、一見ブレッドボードには見えないハッタリ作品ができます。はんだごては使いませんので、電子工作が初めての方でも安心して参加していただけます。前回の開催時と比べて、作業が大変易しくなりました。

 

ブレッドボード版

2014-06-28 (土)

ブレッドボードで作れるようにした。ブレッドボードだと部品の配置の都合上、AVR マイコンのピンアサインを変える必要がある。ファームウェアのヘッダファイルで基板用かブレッドボード用かを切り替えられるようにした。 ブレッドボードでは電源をリチウムコイン電池 CR2016 2個直列 で 6V にしたところ、広角の赤外線 LED(東芝 TLN105B) でもある程度の距離が届くようになり、快適になった。

改良

2014-06-27 (金)

赤外線信号は一次圧縮(リアルタイムランレングス圧縮)後に二次圧縮(ビット列化)して保存している。もし二次圧縮しないほうが小さい場合はそのまま保存するように改良した。 YUASA の扇風機のリモコンでは二次圧縮しないほうが小さくなり、今回の改良によって EEPROM の消費が 約320バイトから半分の約160バイトになった。

使ってます

2014-06-24 (火)

エアコンに対応できるようになったので、部屋のエアコンの ON と OFF を学習させて、予備リモコンとして結構実用的に使っている。本物のリモコンと違ってワンボタンしかないので、寝たまま手探りで操作できるところが便利。

YUASA ショック

2014-06-19 (木)

信号長が長くて手ごわいエアコンが学習できたので、これでなんでも学習できると気を良くしていたが、たまたま YUASA というメーカーの扇風機のリモコンが学習できないのに気付いた。いや、学習はできるが、うまく圧縮できていなくて、ボタン1つを学習しただけで EEPROM を半分以上消費してしまう。パターンを見てみると、データ長は極端に長くはないが、ちょっと困った特徴がある。

ユアサ-扇風機-切(圧縮できない).png
  • 0 が T+3T, 1 が 3T+T のようにエンコードされていて、0 と 1 の信号長が同じ。
  • リーダが 8T+8T くらいでメインの信号と切り分けにくい。
  • 同じ信号が繰り返して送られているが、繰り返しの間隔が 16T くらい。

    この3点はいずれも従来のアルゴリズムの急所で、このままでは圧縮できないし、圧縮アルゴリズムの改良で対応するのもちょっと大変そう。これは困った。

    2014/6/21: とりあえずの解決策を思いついた。このパターンは、ランレングスだけなら結構小さくなるはず。それ以上圧縮しないほうが小さい場合はそのまま EEPROM に保存するようにすれば解決するかもしれない。

エアコンも学習できるようになった

2014-06-12 (木)

リアルタイム圧縮によって、これまで学習できなかったダイキンと日立のエアコンが学習できるようになった(シャープのエアコンはもともと学習できていた)。まだ電源 ON/OFF しか確認していないが、ファームウェアの Version49 として公開した。今のところ試したリモコンは何でも学習できている。

リアルタイム圧縮できた

2014-06-10 (火)

学習中に赤外線信号をリアルタイムでランレングス圧縮するコードができた~。これで相当長い信号も学習できるはず。あとでダイキンと日立のエアコンで試してみよう。72kHz の割り込み期間内(13.9μs)にすべての処理を行わないといけないので、圧縮も含めた学習処理に使える命令数が222ステップしかない。どう書けば実行コードが短くなるのか、コンパイル後のアセンブリコードを眺めながらコーディング。無理かと思ったが、AVR-GCC の最適化のおかげでちゃんとサイズ内に収まった。すばらしい。ただコードを短くするためにトリッキーな書き方をしてしまって、バグを埋め込んでしまっているおそれも。ちゃんと見直そう。

UART

2014-06-10 (火)

シリアル入力機能を追加して、リモコンを PC からもコントロールできるようにした。学習した生信号を PC のシリアルポートに入力して表示させられるようになってからデバッグがはかどる。むしろいままでその機能なしで(しかもデバッガなども使わずに)開発してきた方がびっくりだが。

リアルタイム圧縮

2014-06-09 (月)

エアコンのリモコンの信号が長すぎて RAM に収まらず学習できない問題、どうにかならないか。Tiny85 の RAM は512 バイトしかない(さらに変数やスタックで消費するため、実質使えるのは330バイトくらい)。かといって RAM が 1Kバイトの AVR の機種(Mega8など)は、内蔵クロックでの 16MHz 動作ができない。ソフトウェア的に解決したいので、学習中にリアルタイムにランレングス圧縮する方向で検討中。圧縮ルーチンの実行速度が割り込み周期に間に合うかが問題。

シリアル入出力

2014-06-09 (月)

ソフトウェア UART を実装した。学習した赤外線信号の生データを PC に出力することはできた。次は PC からシリアルポート経由でリモコンを操作する機能を実装中。

電源問題

2014-06-06 (金)

電源問題、だいたい判明。結論としては、新品の LR44*3個を使えば正常動作することがわかった。Panasonic 製のいい電池でも、1個10円くらいの電池でも大丈夫だったが、100円ショップのテスト用電池だと問題が発生する。本当にテスト用だった。

学習できないエアコン

2014-06-06 (金)

自分のまわりにある機器のなかで、ダイキンと日立のエアコンだけが学習できない。エアコンのリモコンの出す赤外線信号の波形を見てみると 320bit 以上あり、AVR の RAM に入りきらないのが学習できない理由のようだ。RAM を節約するために赤外線信号の時間計測の分解能を 1/4 に落として(現在は 76[kHz], 13.16[μs] が最小計測単位)、1パルスを4bitで表現する方法を試してみたが、それでも ATTiny85 の 512バイトの RAM には入りきらなかった。さらに、分解能をそこまで落とすと学習できなくなる機器もあり(ビクターのDVDプレイヤーなど)、この方法はとりあえず断念。

ファームウェア大改造

2014-05-29 (木)

ファームウェアの大改変を行った。改良点は (1)どのリモコンでもモードAで学習できるようにした(モードの切り替えが不要になった)。(2)デバッグモード追加。学習した信号をシリアルに出力できる。(3)デバッグモードを使って各社のリモコン信号を観察して、圧縮アルゴリズムを改良した。新しいファームウェアはまだあまりテストしていないので未公開。テスト後にコードを整理して公開しよう。

赤外線 LED の選択

2014-05-23 (金)

赤外線 LED にもいろいろな製品がある。流せる電流、照度、照射角がデータシートに書いてあり、これらのパラメータが大抵トレードオフになっている。今回はボタン電池の非力な電源でできるだけ到達距離を伸ばしたかったので、試行錯誤してみた。結論としては秋月で袋買いした OSIR5113A がよかった。照射角(半値全角)が15度と狭いが、透明なプラスチックのケースを通して発光させると適度に散乱してよい感じだった。ただしケースの不透明な部分でどうしても一部の光がさえぎられてしまう。市販製品のリモコンをよく見ると、赤外線 LED のまわりのケースの形状に工夫がしてあって、できるだけ光をさえぎらない構造になっている。

赤外線受信モジュールの選択

2014-05-23 (金)

赤外線受信モジュールは種類が多い。秋月でいろいろ買って試してみたところ、電気的ノイズに弱いもの、蛍光灯に弱いもの、周囲が明るくないとノイズがひどいものなどさまざま。赤外線が入射していないのに出力があることが多くて結構困る。モジュールを使って赤外線のパルス幅をセンシングすると、全体的に点灯時間が長めに、消灯時間が短めになる傾向があるのでソフトウェアで補正が必要。また一見同じ形状のモジュールでもピンアサインが違うことが多いので注意が必要。現在、一番安定して使えているのがロームの RPM7138-R。海外製のモジュールよりは少々お値段が高いが、ノイズに強く非常に使いやすい。

ファームウェア

2014-05-22 (木)

そのうちファームウェアの解説も書きたい。ファームウェアは AVR-GCC でスクラッチから書いたもので、結構頑張っている。頑張っている点は (1)EEPROM が512 バイトしかないので、学習した信号を生のままでなく少し圧縮して保存している。(2)各種フォーマット(家製協、NEC、ソニー、その他外国製の謎のリモコン)に対応するため、アルゴリズムを工夫している。可能な限りビット列として解釈するが、イレギュラーな信号は生のまま記録する。受信した信号の解釈のためにパルスの平均時間を求めたりもしている。(3)RAM も512 バイトしかないので、RAM 上でリアルタイムに処理する学習データは、1~2バイトの可変長フォーマットで処理している(それでもエアコン等の長すぎる信号は RAM に入りきらない)。(4)EEPROM 用の超簡易な独自ファイルシステムを実装してデータを保存している。

電源トラブルの調査

2014-05-21 (水)

12秒間操作しない状態が続くと、赤外線受光モジュールの電源が切られ、マイコンは省電力モードになる(省電力モードからはボタンを押すと回復する)。省電力モード中の消費電流は、実測で2μA以下なので、電池は入れたままでもそれほど消耗しない。...はずだったのだが、なぜか電池が1~2日で消耗してしまう現象が発生した。その状態で電池を外して、一個ずつ電圧を測定してみると、正負が逆になる電池が出てくる。何かおかしい。

また、これも電源電圧と関係しているような気がするが、やはり数日放置するとボタンを押しても反応しなくなる(電池を入れ直すと直ることもある)。

考えられる原因としては、100円LEDライトの動作確認用電池をそのまま使っているのが問題なのかもしれない。または赤外線LEDに大電流を流しているのが問題かも。あるいはウォッチドッグタイマーが発動した時にうまく再起動できていないのかもしれない。リセットピンがオープンのままなのがまずいのかも。

いまだに現象の再現性が確認できないので、電源電圧を測定する実験を開始。新品の電池を入れて、10分おきに別のマイコンのADコンバータで電源電圧を測定して、電源電圧の急低下が発生する条件を探ってみる。

概要を書く

2013-10-11 (金)

自作記事。まず回路図、操作方法、部品表を書こう。

赤外線信号学習操作のコツ

2013-09-06 (金)

自分はもう何百回となく学習操作を繰り返しているので無意識にやってしまっているが、赤外線受光モジュールで学習する時には、周囲の明るさ、距離、インバータ式蛍光灯の影響、押す時間などいくつかコツがあるので、忘れずにどこかに書いておかないと。ローム社の製品カタログが、これまでの学習時の感覚と一致していて納得の内容。実際マルツでロームのモジュール RPM7138-R を買って試してみたら、ノイズにも強いし、電池の電圧がかなり下がっても正しく学習できる。ロームのモジュールすごい。

コマンド

2013-09-01 (日)

コマンド体系を試行錯誤中。1キーで送信、学習、削除、メモリ残量確認などのコマンドを指定するのはどうするのがベストか。ようやくよさそうな方法が固まりつつあるので、確定していいかな。ただどうやっても完全にマニュアルなしで操作するのは無理そう。

日立のエアコン

2013-08-31 (土)

手元にあるリモコンで試してみると、ほとんどがうまく学習できた。ただ日立のエアコンだけはおかしい。学習後に赤外線を出すとハングアップしてしまうようで、8秒後にウォッチドッグタイマで再起動しているようだ(BEEP 音でわかる)。特定の信号でだけハングアップするというのはちょっと奇妙な現象。おかしくなった状態で EEPROM を avrdude で吸い出して、原因を突き止めることにする。

原因判明。この日立のエアコンは赤外線信号が長く、記録できる長さを超えていた。その時の処理がおかしかったので修正。AVR ATTiny85 の RAM 容量の制約で最大 352÷2=176 ビットしか記録できない。RAM の多い MEGA64 で試してみたら学習できたので、信号の長さの問題なのは間違いない。ここまで長い信号を使うリモコンはあまりないと思うが、こればかりはいまのところどうしようもない。

追記: ダイキンのエアコンも新しい機種に買い替えたら、赤外線信号が長すぎて記録できなくなった→その後学習できるようにファームウェアを改良した。


  • キーワード: 学習、万能リモコン、自作、制作、avr、gcc、libc、C言語、赤外線、信号、解析、学習、1ボタン
Counter: 14026, today: 1, yesterday: 1

添付ファイル: filepdftop01.jpg 541件 [詳細] fileDSC_0609.JPG 282件 [詳細] file1key1.JPG 355件 [詳細] fileDSC_0570.JPG 361件 [詳細] fileDSC_0677.JPG 411件 [詳細] fileDSC_0568.JPG 398件 [詳細] file1key-v66-special.zip 290件 [詳細] file1key-v66(b).zip 752件 [詳細] file1key-v66.zip 304件 [詳細] file1key-v49.zip 746件 [詳細] fileユアサ-扇風機-切(圧縮できない).png 736件 [詳細] file1key-brd.png 1078件 [詳細] filevhs-sharp-on.png 945件 [詳細] fileteraterm01.png 992件 [詳細] file1key-howtomake-3.pdf 1834件 [詳細] file1key-howtomake-2.pdf 476件 [詳細] filesp.png 896件 [詳細] file1key-howtomake-1.pdf 840件 [詳細] file1key.jpg 427件 [詳細] fileDSC_0569.JPG 390件 [詳細] file1key-v35.zip 529件 [詳細] file1key-brd.pdf 1054件 [詳細] file1key.pdf 287件 [詳細] file1key-brd(old).png 1193件 [詳細] file1key-sch01.pdf 1396件 [詳細] file1-KEY赤外線リモコンメモ.pdf 551件 [詳細] file1key-sch01.png 2129件 [詳細] file1key3-1.jpg 487件 [詳細] file1key2-3.JPG 480件 [詳細] file1key2-2.JPG 516件 [詳細] file1key2-1.JPG 601件 [詳細] file1key.mpeg 636件 [詳細] filebouhan.mpeg 655件 [詳細] file1key3.JPG 541件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-28 (月) (265d)