ArduinoIDE1.6.4+ATTiny13Aで赤外線リモコン
お疲れ様です。高橋です。
先日実験したArduinoで赤外線リモコンの問題点、それはArduino UNOを使ってしまう事。
リモコンのためにArduino UNOを1個消費してしまっては、2,940円(Arduino)+50円(赤外線受光部)+10円(赤外線LED)の合計3,000円と高コストになってしまいます。これは大問題です。
ATTiny13Aとは
既に赤外線の発光パターンはわかっているので、ボタンを押したらそのパターン通りに赤外線LEDを発光するためだけのマイコンがあれば良いのです。
こいつは「ATTiny13A」といいます。Arduino UNOの心臓部であるATMEGA328P-PUを販売しているATMEL社が出している、小さいマイコンです。秋月価格で50円。安い代わり、プログラムを書き込める容量は1,024バイトしかありません。でも1,024byteあれば、決まったパターンでLEDを明滅させる事くらい出来ると思う。
ArduinoIDE1.6.4でATTiny13Aを使えるようにする
Arduino IDEでATTiny13Aを使えるようにするため、kosakalabさんの「Arduino IDEでATtiny他の開発(Arduino-ISP編)」を参考にさせてもらいました。
上記サイトを参考にした手順は下記の通り。
- hardware.zipをダウンロードする
- 解凍するとhardwareが出来る。
- hardwareの中の「attiny」の中に「avr」というディレクトリを作成
- 「attiny」に元々入っていたファイルやディレクトリをavrの中に移動
- ArduinoIDEのドキュメントの保存場所(e.g. C:\Users\hoge\Documents\Arduino)にhardwareディレクトリを移動
- 「C:\Program Files (x86)\Arduino\hardware\arduino\avr」の中に入っている「platform.txt」を、「C:\Users\hoge\Documents\Arduino\hardware\attiny\avr」にコピー
- 「C:\Users\hoge\Documents\Arduino\hardware\attiny\avr」の「boards.txt」にあるATTiny13系だけ、コメントを外す。
- 下記をboards.txtに付け加える(これをやらないとエラー)
- attiny13-1.upload.tool=arduino:avrdude
- attiny13-8.upload.tool=arduino:avrdude
そして、Arduino UNOにArduinoISPスケッチを書き込んだら、ボード「ATTiny13(1.2でも9.6でも)」に、書込装置「Arduino as ISP」モードでATTiny13A用のスケッチを書き込みます。
まずはLEDをチカチカさせる確認
回路は下記の通り。
void setup( ) { pinMode(3, OUTPUT); } void loop( ) { digitalWrite(3, HIGH); delay(150); digitalWrite(3, LOW); delay(150); }
150ミリ秒毎にLEDを点滅させてますが、これで体感的に1秒毎に点滅しています。
最初は参考サイト通りに1000ミリ指定してたのですが、7~8秒掛かってる感じがしたので、調整しました。内部クロック周波数が原因?とりあえず放っておきます。
赤外線LEDを使ってみる
LED点滅はうまくいったので、とりあえずリモコン化。タクトスイッチを押すと5Vなり3.3Vなりが通電するようにしてます。
スケッチ
unsigned int data[] = {908, 445, 61, 49, 63, 163, 60, 50, 63, 49, 63, 50, 60, 50, 63, 50, 62, 161, 63, 163, 60, 50, 62, 164, 60, 163, 63, 50, 60, 163, 62, 161, 63, 50, 63, 50, 60, 163, 62, 50, 60, 163, 63, 162, 62, 50, 62, 50, 60, 51, 62, 164, 60, 50, 63, 164, 60, 50, 63, 50, 62, 161, 62, 164, 60, 163, 62, 4098, 907, 218, 62, 9611, 908, 218, 63}; void setup( ) { pinMode(3, OUTPUT); int dataSize = sizeof(data) / sizeof(data[0]); for (int cnt = 0; cnt < dataSize; cnt++) { unsigned long len = data[cnt] * 10; unsigned long us = micros(); do { digitalWrite(3, 1 - (cnt & 1)); delayMicroseconds(8); digitalWrite(3, 0); delayMicroseconds(7); } while (long(us + len - micros()) > 0); } } void loop( ) { }
回路図
とりあえず赤外線LEDではなく、普通のLEDを使ってみたのですが、やはり明滅が遅すぎる。これだとリモコンとして機能しません。原因究明は、またいずれ。
以上、よろしくお願い致します。
関連記事
-
iPhoneでルンバを操作してみたい
お疲れ様です。高橋です。 突然ですがiPhoneでルンバを操作したいと思います。 …
-
【完成】 耳コピミキサー
お疲れ様です。高橋です。 作成途中だった耳コピミキサー、やっと完成しました。 思 …
-
LPC810をSCC/PSGにする
お疲れ様です。高橋です。 出会い ImpactDrillさんのサイトの「LPC8 …
-
aitendoのArduino用生シールド基板を1枚120円で買った。
お疲れ様です。高橋です。 今日もaitendoに行ってきたのですが、120円のシ …
-
音階LEDの再設計
お疲れ様です。高橋です。 本日帰宅途中に電車をぼーっと待っている時、ふと、音階L …
-
MIDI INの実験
お疲れ様です。高橋です。 Arduino+YMZをMIDI化するための第一歩の実 …
-
マウスの位置座標を使った電子楽器を作ってみた。
お疲れ様です。高橋です。 先日分解したマウスを使って、位置座標の取り出しと、取り …
-
EEPROM書き込みシールドの作成
お疲れ様です。高橋です。 先日成功したPCからのEEPROM書き込みですが、ジャ …
-
YMZシールドの作成 #2
お疲れ様です。高橋です。 先日から作っていたYMZシールドですが、本日完成しまし …
-
マウスを入力I/Fとして使うのを断念してみた。
お疲れ様です。高橋です。 先日の「マウスを分解してみた」でマウスを分解し、ケーブ …