赤外線リモコン (フォーマット) [Arduino]
赤外線リモコンのフォーマットにはいくつかあるのですが、日本では
・NECフォーマット
・家製協(AEHA)フォーマット
・SONYフォーマット
などが代表的です。
海外の製品はさらに多様なようです。
SB-Projects: IR remote control:
http://www.sbprojects.com/knowledge/ir/ir.htm
できればいろいろなフォーマットに対応できるといいのですが、うちには東芝テレビのREGZA、Panasonicの照明、三菱エアコン霧ヶ峰くらいしか赤外線リモコン対応機器がなく、動作確認が容易なものでいうと東芝のREGZA(NECフォーマット)が最適でした。
ということで、NECフォーマットについて調べてみました。
リモコン | デバイス共通 | マイクロコンピュータ | FAQ | サポート | ルネサスエレクトロニクス:
http://www2.renesas.com/faq/ja/mi_com/f_com_remo.html
要点は、
・38KHzのキャリア周波数、デューティ比は 1/3
・9ms+4.5msのリーダ・コード
・16ビットのカスタム・コード
・8ビットのデータ・コードとその反転コード
・最後にストップ・ビット
・0/1の区別は赤外線の有無ではなく、ビットの長さで区別
・ビットの長さは2.25ms (データ=1) か1.125ms (データ=0) 、赤外線が出されている期間の長さは0.56ms
次回これをプログラムにしてみたいと思います。
・NECフォーマット
・家製協(AEHA)フォーマット
・SONYフォーマット
などが代表的です。
海外の製品はさらに多様なようです。
SB-Projects: IR remote control:
http://www.sbprojects.com/knowledge/ir/ir.htm
できればいろいろなフォーマットに対応できるといいのですが、うちには東芝テレビのREGZA、Panasonicの照明、三菱エアコン霧ヶ峰くらいしか赤外線リモコン対応機器がなく、動作確認が容易なものでいうと東芝のREGZA(NECフォーマット)が最適でした。
ということで、NECフォーマットについて調べてみました。
リモコン | デバイス共通 | マイクロコンピュータ | FAQ | サポート | ルネサスエレクトロニクス:
http://www2.renesas.com/faq/ja/mi_com/f_com_remo.html
要点は、
・38KHzのキャリア周波数、デューティ比は 1/3
・9ms+4.5msのリーダ・コード
・16ビットのカスタム・コード
・8ビットのデータ・コードとその反転コード
・最後にストップ・ビット
・0/1の区別は赤外線の有無ではなく、ビットの長さで区別
・ビットの長さは2.25ms (データ=1) か1.125ms (データ=0) 、赤外線が出されている期間の長さは0.56ms
次回これをプログラムにしてみたいと思います。
赤外線リモコン (ハードウェア) [Arduino]
Arduinoで赤外線リモコンのページをいくつか見つけてみたのですが、ソフト面ではライブラリになっていてブラックボックスな感じがしてよくわからなかったり、実験段階であったり、またハード面では出力の弱さが問題でした。
初代赤外線実験機「IRduino Ver.1」です。
赤外線LEDを直接ATmegaのデジタル出力ピンにつないだため、あまりに低出力で受光部近くまで寄らないと反応してくれません。
リモコンの赤外線は38kHzのパルス出力なのですが、高出力でないとだめなのです。
<一番参考になったページ>
ボクにもわかる地上デジタル - 地デジ方式編 - 赤外線リモコン方式と解析・回路図:
http://www.geocities.jp/bokunimowakaru/std-commander.html
ここの「赤外線リモコン送信回路図(低出力)」では、トランジスタをスイッチとして使う方法が紹介されていますが、ATmegaから直接つなぐのに比べれば反応はかなり改善されました。
さらに「赤外線リモコン送信回路図(高出力) 」は部品点数が増えますが高出力です。
これをもとに改良型Arduino赤外線リモコン実験機をつくりました。
「IRduino Ver.3」
回路図:
(素人の作りなので勘弁してください。)
リモコン受光部の入力が2番、赤外線の出力が3番、テスト用のタクトスイッチが4番、確認用LEDが13番としました。
初代赤外線実験機「IRduino Ver.1」です。
赤外線LEDを直接ATmegaのデジタル出力ピンにつないだため、あまりに低出力で受光部近くまで寄らないと反応してくれません。
リモコンの赤外線は38kHzのパルス出力なのですが、高出力でないとだめなのです。
<一番参考になったページ>
ボクにもわかる地上デジタル - 地デジ方式編 - 赤外線リモコン方式と解析・回路図:
http://www.geocities.jp/bokunimowakaru/std-commander.html
ここの「赤外線リモコン送信回路図(低出力)」では、トランジスタをスイッチとして使う方法が紹介されていますが、ATmegaから直接つなぐのに比べれば反応はかなり改善されました。
さらに「赤外線リモコン送信回路図(高出力) 」は部品点数が増えますが高出力です。
これをもとに改良型Arduino赤外線リモコン実験機をつくりました。
「IRduino Ver.3」
回路図:
(素人の作りなので勘弁してください。)
リモコン受光部の入力が2番、赤外線の出力が3番、テスト用のタクトスイッチが4番、確認用LEDが13番としました。
ツェナーダイオード [パーツ]
USB直結のところで使った「ツェナーダイオード」について調べてみました。
原理とかは Wikipedia にも書いてありますが、読んでもよくわかりませんでした。
ツェナーダイオード - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%84%E3%82%A7%E3%83%8A%E3%83%BC%E3%83%80%E3%82%A4%E3%82%AA%E3%83%BC%E3%83%89
一番気になったところは、なぜ 3.6V なのかというところです。
「Practical Arduino」 という本にずばっと書いてありました。
この本の55ページです。
http://www.google.co.jp/search?tbm=bks&tbo=1&q=Practical+arduino+3.6V+Zener&btnG=%E6%9B%B8%E7%B1%8D%E3%81%AE%E6%A4%9C%E7%B4%A2
つまり、
・3.3Vといっても、USBの規格上2.8-3.6Vの間であればいい
・実測値は少し低めになる
ということのようです。
原理とかは Wikipedia にも書いてありますが、読んでもよくわかりませんでした。
ツェナーダイオード - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%84%E3%82%A7%E3%83%8A%E3%83%BC%E3%83%80%E3%82%A4%E3%82%AA%E3%83%BC%E3%83%89
一番気になったところは、なぜ 3.6V なのかというところです。
「Practical Arduino」 という本にずばっと書いてありました。
この本の55ページです。
http://www.google.co.jp/search?tbm=bks&tbo=1&q=Practical+arduino+3.6V+Zener&btnG=%E6%9B%B8%E7%B1%8D%E3%81%AE%E6%A4%9C%E7%B4%A2
つまり、
・3.3Vといっても、USBの規格上2.8-3.6Vの間であればいい
・実測値は少し低めになる
ということのようです。
Practical Arduino: Cool Projects for Open Source Hardware (Technology in Action)
- 作者: Jonathan Oxer
- 出版社/メーカー: Apress
- 発売日: 2009/12/30
- メディア: ペーパーバック
タグ:ダイオード
USB直結 [Arduino]
「Duino-V」という、USBシリアル変換無しでプログラムを書き込みできるものがありました。
スイッチサイエンス/商品詳細 Duino-V rev.1 完成品:
http://www.switch-science.com/products/detail.php?product_id=532
Lynx-EyEDの電音鍵盤
http://ecrafts.g.hatena.ne.jp/Lynx-EyED/?word=*[duino-v]
ATmega328PにMetaboardブートローダを搭載させています。
<ハードウェアの作成>
duino-Vを、またICB-90 ユニバーサル基板で再現してみました。(まちがってたら
ごめんなさい。)
<ブートローダの準備、書き込み>
arduino-0021\hardware\arduino\boards.txt
というところにある、boards.txtに
を追加します。
続いて、
V-USB - A Firmware-Only USB Driver for Atmel AVR Microcontrollers:
http://www.obdev.at/products/vusb/usbasploader.html
ここから、USBaspLoaderのブートローダをダウンロードします。
解凍して
firmware\hexfilesフォルダにある、mega328p_16mhz.hex というファイル
を
arduino-0021\hardware\arduino\ に metaboard というフォルダを作成し、その中に入れます。
そうして 先日つくったブートローダ書き込み機で、Arduino IDE 、AVRdude-GUI YCIT などから USBaspLoader を ATmega328p に書き込めば、ハードウェアとしては完成
<ドライバのインストール>
fischl.de - USBasp - USB programmer for Atmel AVR controllers
http://www.fischl.de/usbasp/
ここから、Windowsのドライバをダウンロード
Duino-VをUSBポートに差し込むと「USBデバイスが認識されません」と表示されるので、リセットボタンを押します。
<スケッチの書き込み>
Arduino IDE のメニューから Tools → board の中から Metaboard(328) を選択。
LEDチカチカのサンプルスケッチで動作確認。
<ちょっと>
他にmetaboardを紹介しているとことでは、USBの電源電圧 5Vで 信号は3.3Vで、ツェナーダイオードを使っていたり、ATmega を3.3V駆動していたりするようです。(16MHzでは、4.5 - 5.5Vの電圧が必要みたいですが、、)
Metaboard - Metalab
http://metalab.at/wiki/Metaboard
と、いうことで、ツェナーダイオードを付けたバージョンもつくってみました。
(手前がmetaboard互換、奥がduino-V互換(のつもり))
スイッチサイエンス/商品詳細 Duino-V rev.1 完成品:
http://www.switch-science.com/products/detail.php?product_id=532
Lynx-EyEDの電音鍵盤
http://ecrafts.g.hatena.ne.jp/Lynx-EyED/?word=*[duino-v]
ATmega328PにMetaboardブートローダを搭載させています。
<ハードウェアの作成>
duino-Vを、またICB-90 ユニバーサル基板で再現してみました。(まちがってたら
ごめんなさい。)
<ブートローダの準備、書き込み>
arduino-0021\hardware\arduino\boards.txt
というところにある、boards.txtに
###########################################
metaboard.name=Metaboard(328)
metaboard.upload.protocol=usbasp
metaboard.upload.maximum_size=30720
metaboard.upload.speed=19200
metaboard.upload.disable_flushing=true
metaboard.build.mcu=atmega328p
metaboard.build.f_cpu=16000000L
metaboard.build.core=arduino
metaboard.bootloader.low_fuses=0xf7
metaboard.bootloader.high_fuses=0xda
metaboard.bootloader.extended_fuses=0x03
metaboard.bootloader.path=metaboard
metaboard.bootloader.file=mega328p_16mhz.hex
metaboard.bootloader.unlock_bits=0x3F
metaboard.bootloader.lock_bits=0x2F
###########################################
を追加します。
続いて、
V-USB - A Firmware-Only USB Driver for Atmel AVR Microcontrollers:
http://www.obdev.at/products/vusb/usbasploader.html
ここから、USBaspLoaderのブートローダをダウンロードします。
解凍して
firmware\hexfilesフォルダにある、mega328p_16mhz.hex というファイル
を
arduino-0021\hardware\arduino\ に metaboard というフォルダを作成し、その中に入れます。
そうして 先日つくったブートローダ書き込み機で、Arduino IDE 、AVRdude-GUI YCIT などから USBaspLoader を ATmega328p に書き込めば、ハードウェアとしては完成
<ドライバのインストール>
fischl.de - USBasp - USB programmer for Atmel AVR controllers
http://www.fischl.de/usbasp/
ここから、Windowsのドライバをダウンロード
Duino-VをUSBポートに差し込むと「USBデバイスが認識されません」と表示されるので、リセットボタンを押します。
<スケッチの書き込み>
Arduino IDE のメニューから Tools → board の中から Metaboard(328) を選択。
LEDチカチカのサンプルスケッチで動作確認。
<ちょっと>
他にmetaboardを紹介しているとことでは、USBの電源電圧 5Vで 信号は3.3Vで、ツェナーダイオードを使っていたり、ATmega を3.3V駆動していたりするようです。(16MHzでは、4.5 - 5.5Vの電圧が必要みたいですが、、)
Metaboard - Metalab
http://metalab.at/wiki/Metaboard
と、いうことで、ツェナーダイオードを付けたバージョンもつくってみました。
(手前がmetaboard互換、奥がduino-V互換(のつもり))
ブートローダライター [シールド版] [Arduino]
もう一つの書き込み方法です。
(※ Arduino Uno では現時点では使用できないようです)
Using an Arduino as an AVR ISP (In-System Programmer)
http://arduino.cc/en/Tutorial/ArduinoISP
このページの4つめの図(最後の図)を
秋月電子通商の
ATMEGA168/328用マイコンボード(I/Oボード)
http://akizukidenshi.com/catalog/g/gP-04399/
をつかってシールド仕立てにしていきます。
ピンヘッダを逆さにして、ソケットに挿すこととしましたが、Duemilanove のUSBソケットに干渉しそうになるので、3端子レギュレータのシルク印刷の外側くらいで切断しました。
ANALOG IN 0番とVinの間のあたりの裏面のパターンをカットします。
ICソケットも1, 7, 8, 9, 10, 17, 18, 19, 20, 22ピン以外は抜きました。
R1 に 10kΩ
Q1 に 16MHz のセラロック
J2, J4 にピンヘッダを逆さにして取り付け
DIGITAL 10番とX4のRSTと書いてあるところをつないで、ハードウェア的には完成です。
さて、Duemilanove を書き込みマシンにするために、
File → Examples → ArduinoISP を選んで、
このスケッチを Duemilanove にかきこみます。
そこから、
Tools → Board で書き込み先のチップを選択 (ライターのチップではない)
Tools → Burn Bootloader → w/ Arduino as AVRISP
で書き込みできるようなのですが、ATmega168Pの場合、168(無印)と168Pのチップのシグニチャが違うため書き込めないようです。
そこでまた avrdude-GUI [YCIT] さんにお世話になります。
(1) Programmerに (avrisp) Atmel AVR ISP を選択
(2) Port にライターとなったArduino のシリアルポートを選択
(3) Command Line Option に 「-b 19200」と入力
(4) Read ボタンを押して、チップ名 と Fuse、Lock Bit が出ることを確認
あとは、前回と同じように書き込みをします。
(※ Arduino Uno では現時点では使用できないようです)
Using an Arduino as an AVR ISP (In-System Programmer)
http://arduino.cc/en/Tutorial/ArduinoISP
このページの4つめの図(最後の図)を
秋月電子通商の
ATMEGA168/328用マイコンボード(I/Oボード)
http://akizukidenshi.com/catalog/g/gP-04399/
をつかってシールド仕立てにしていきます。
ピンヘッダを逆さにして、ソケットに挿すこととしましたが、Duemilanove のUSBソケットに干渉しそうになるので、3端子レギュレータのシルク印刷の外側くらいで切断しました。
ANALOG IN 0番とVinの間のあたりの裏面のパターンをカットします。
ICソケットも1, 7, 8, 9, 10, 17, 18, 19, 20, 22ピン以外は抜きました。
R1 に 10kΩ
Q1 に 16MHz のセラロック
J2, J4 にピンヘッダを逆さにして取り付け
DIGITAL 10番とX4のRSTと書いてあるところをつないで、ハードウェア的には完成です。
さて、Duemilanove を書き込みマシンにするために、
File → Examples → ArduinoISP を選んで、
このスケッチを Duemilanove にかきこみます。
そこから、
Tools → Board で書き込み先のチップを選択 (ライターのチップではない)
Tools → Burn Bootloader → w/ Arduino as AVRISP
で書き込みできるようなのですが、ATmega168Pの場合、168(無印)と168Pのチップのシグニチャが違うため書き込めないようです。
そこでまた avrdude-GUI [YCIT] さんにお世話になります。
(1) Programmerに (avrisp) Atmel AVR ISP を選択
(2) Port にライターとなったArduino のシリアルポートを選択
(3) Command Line Option に 「-b 19200」と入力
(4) Read ボタンを押して、チップ名 と Fuse、Lock Bit が出ることを確認
あとは、前回と同じように書き込みをします。
ブートローダの書き込み [Arduino]
おすすめの書き込みソフト
avrdude-GUI [YCIT] - 千秋ゼミ
http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?AVR%2Favrdude13#u5b116f1
これが一番簡単のようです。
zipを解凍し、binフォルダの 「avrdude-GUI」 を起動します。
前回作成した FT232RLを使用した書き込み機の場合には、
「Programmer」 のところに 「(diecimila) FT232Sync Bitbang」 を選択して、「Read」ボタンを押すだけで自動でチップを認識して、Fuseを読み込んでくれます。
続いて、「BoardsView」を起動し、「Import(Text)」ボタンを押して、ArduinoのIDEのフォルダの中にある hardware\arduino\boards.txt を指定します。
すると、一覧が出てくるので、Duemilanove互換にするなら ATmega168, 328のチップに合わせて選んで、右クリックして、「0) Fuse and fname to ClipBoard」を選びます。
ATmega168pなら diecimila の設定でいいと思います。
また、「avrdude-GUI」に戻り、テキストボックス以外のところで右クリック。
「4) HEX Tools」 → 「4-3) FUSE <-- ClipBoard 」でファイルとFUSEの設定完了。
「Fuse (HEX)」の「Write」で書き込み。
「Frash」の「Write」で書き込み。
「Lock Bit」が「0F」になっているのを確認して「Write」で書き込み終了。
avrdude-GUI [YCIT] に感謝。
avrdude-GUI [YCIT] - 千秋ゼミ
http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?AVR%2Favrdude13#u5b116f1
これが一番簡単のようです。
zipを解凍し、binフォルダの 「avrdude-GUI」 を起動します。
前回作成した FT232RLを使用した書き込み機の場合には、
「Programmer」 のところに 「(diecimila) FT232Sync Bitbang」 を選択して、「Read」ボタンを押すだけで自動でチップを認識して、Fuseを読み込んでくれます。
続いて、「BoardsView」を起動し、「Import(Text)」ボタンを押して、ArduinoのIDEのフォルダの中にある hardware\arduino\boards.txt を指定します。
すると、一覧が出てくるので、Duemilanove互換にするなら ATmega168, 328のチップに合わせて選んで、右クリックして、「0) Fuse and fname to ClipBoard」を選びます。
ATmega168pなら diecimila の設定でいいと思います。
また、「avrdude-GUI」に戻り、テキストボックス以外のところで右クリック。
「4) HEX Tools」 → 「4-3) FUSE <-- ClipBoard 」でファイルとFUSEの設定完了。
「Fuse (HEX)」の「Write」で書き込み。
「Frash」の「Write」で書き込み。
「Lock Bit」が「0F」になっているのを確認して「Write」で書き込み終了。
avrdude-GUI [YCIT] に感謝。
タグ:ブートローダ