curious4dev

色々ダメなandroidアプリを開発したい会社員 高橋が綴る、androidアプリ開発やArduinoについて

*

【完成】ArduinoIDE1.6.4+ATTiny13Aで赤外線リモコン

 

お疲れ様です。高橋です。

苦戦していたArduinoIDE1.6.4を使ったATTiny13Aの赤外線リモコン化ですが、やっと動きました。

作る手順

  1. コピーしたい赤外線リモコンをゲット
  2. リモコンが発するパターンを知る
  3. パターンを再現するスケッチを書く
  4. 1.2MHzで動くよう、FUSEビットをATtiny13Aに書き込む
  5. スケッチをATtiny13Aに書き込む

1. リモコンをゲット

私は自室の電灯のリモコンをなくしてしまったのですが、隣の部屋に同じ電灯とリモコンがあったので、そのリモコンを使いました。

IMG_5615

2. リモコンが発するパターンを知る

リモコンが発するパターンを知る必要があります。

こんな感じで、赤外線受信部品を50円程で秋月で買い、【きむ茶工房ガレージハウス】さんの赤外線リモコンを送信器にして何か動かすを参考にして、電灯のリモコンの発するパターンを取得します。

IMG_5606

上記サイトを参考にすると、下記のように赤外線パターンを得る事が出来ます。

01000001101101100101100010100111 ( 82 6D 1A E5 )

右端の16進数で表現された4byteの値が重要です。

3. パターンを再現出来るようにする

kenkenpaさんの「PWMについて調べて、リモコン信号出力してみた。」を参考に、スケッチを実装します。

その際、上記サイトのスケッチ内のloop()でコールしているsendIrNEC1M2Hzに与えている引数「0xE41BBF40」を、先ほど取得した赤外線パターン「0x826D1AE5」を与える必要があるのですが、この4バイトを逆転させて与えます。つまり、

って感じです。

修正箇所はここだけです。

4. 1.2MHzで動くよう、FUSEビットをATtiny13Aに書き込む

スケッチを書いたらATtiny13Aに書き込む・・・前にやる事があります。動作周波数の設定です。

ATTiny13Aは内部の周波数が128KHz、4.8MHz、9.6MHzの3パターン、用意されています。

で、買ったばかりの状態だと9.6MHzなのですが、さらに追加の設定項目として「分周」というものがあります。分周とは、例えば、2分周だと4.8MHz、8分周だと1.2MHzというように、周波数を分割する際の値です。多分。

買ったばかりの状態だと、周波数自体は9.6MHzなのですが、8分周モード、つまり1.2MHzで動作する状態になってます。

今回のスケッチでは1.2MHz動作のままで良いので、いじらなくても良いです。しかし、何度か実験で使ったATtiny13Aは、今がどの周波数で動いてて分周されてるのかもわからない状態である事が多いと思います。

これを再設定しなおすには、ArduinoIDEから、ブートローダを書き込む必要があります。

051604

ブートローダを書き込む、といっても、どんな値を書き込むのかが重要です。この値を設定するには「ボード」で設定されたマイコン(上記だとATtiny13 (intern…))の設定情報に依存します。設定情報はどこで書けるかというと、boards.txtです。boards.txtで書き込んだ値は、上記「ブートローダを書き込む」メニューでいきなり書き込まれますが、裏側では様々なコマンドが走っています。それを司っているのがplatform.txtです。boards.txtもplatform.txtも、スケッチを保存するhome/hardware/attiny/avr/の中にあるはずです。

色々いじりまくった最終的な私のboards.txtは下記の通りで、

platform.txtは下記の通りです。

とは言え今回のスケッチは1.2MHz版である事が求められていますので、1.2MHz版のATtiny13Aを選択した状態で、ブートローダを書き込めばOK。買ったばかりのものでも正常動作します。多分

5. スケッチをATtiny13Aに書き込む

ブートローダーを書き込んだら、スケッチを「ATTiny13A 1.2MHz」に向けて、「Arduino as ISP」として書き込みます。

書き込む際は、下記のようにログを出力させておいたほうが、どういう手順でコンパイルと書き込みが行われているのか理解出来ます。

kenkenpaさんの参考スケッチは、実は中身が高度すぎて、あまり理解出来ていません

PWMという手法を使って、リモコンの操作に必要な38KHzを作り出しているという事はなんとなくわかるのですが。

スケッチ容量は驚異の374byte!おそらくロジックを色々いじるのではなく、直接ハードウェアを操作する系の記述なんだと思います。それと、前回やっていた方法(マイクロ秒レベルでのLEDの明滅操作)に必要だった赤外線データは、unsigned int型が75個、150byte必要だったのですが、今回はたったの4byteで済んでます。

書き込みは下記実体配線図通りに組んだ状態で実施し、

051002

一度ATTiny13Aにスケッチが書き込まれたら、こんなにシンプルになります。

IMG_5641

下記が実体配線図です。

051601

現状、5VとGNDをUNOから引っ張っていますが、ボタン電池化すれば小型化出来ます。

次回は、電池から電源を取り出すにはどんな準備が必要なのか、勉強です。

以上、よろしくお願い致します。

 - 電子工作

Comment

  1. […] ①ここをベースに、②ここを参照 […]

  関連記事

LEDドライバなる物の存在

お疲れ様です。高橋です。 本日、同僚とLED周りについて雑談していると、「LED …

aitendoで買った375円のバックライト付きI2C LCDで文字を表示してみた。

お疲れ様です。高橋です。 ちょっと前にaitendoで買ったバックライト付きのL …

汎用ロジックIC(NAND/NOR/AND/OR)試験機

お疲れ様です。高橋です。 単一の機能を持ったシンプルな、汎用ロジックICという物 …

満員電車内でのオナラと検知 #5

お疲れ様です。高橋です。 マイコンと5V給電 先日実験に成功した硫化水素センサー …

aitendoで買った4桁7セグLEDを使う

お疲れ様です。高橋です。 aitendoの4桁7セグLED aitendoで1個 …

LPC810をSCC/PSGにする

お疲れ様です。高橋です。 出会い ImpactDrillさんのサイトの「LPC8 …

PCとArduinoをJavaでシリアル通信

お疲れ様です。高橋です。 先日作ったコレ。 よくよく考えると、書き込む際にいちい …

遠隔でRaspberryPi+DCモーターを制御してaitendoの名刺をクルクルさせる。

お疲れ様です。高橋です。 「猫×おもちゃ×動画×アプリ」のための要素技術として必 …

4桁7セグLEDを基板に実装

お疲れ様です。高橋です。 昨日に引き続き今日も奇跡的に早く帰宅する事が出来たため …

抵抗が焼けた – Arduinoで赤外線リモコン

お疲れ様です。高橋です。 今日の実験中、抵抗が焼けてしまいました。 なんか異臭が …