SSブログ

赤外線リモコン (フォーマット) [Arduino]

赤外線リモコンのフォーマットにはいくつかあるのですが、日本では
 ・NECフォーマット
 ・家製協(AEHA)フォーマット
 ・SONYフォーマット
などが代表的です。
海外の製品はさらに多様なようです。

SB-Projects: IR remote control:
http://www.sbprojects.com/knowledge/ir/ir.htm

できればいろいろなフォーマットに対応できるといいのですが、うちには東芝テレビのREGZA、Panasonicの照明、三菱エアコン霧ヶ峰くらいしか赤外線リモコン対応機器がなく、動作確認が容易なものでいうと東芝のREGZA(NECフォーマット)が最適でした。

ということで、NECフォーマットについて調べてみました。

necformat.png

リモコン | デバイス共通 | マイクロコンピュータ | 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_v1.jpg
初代赤外線実験機「IRduino Ver.1」です。
赤外線LEDを直接ATmegaのデジタル出力ピンにつないだため、あまりに低出力で受光部近くまで寄らないと反応してくれません。
リモコンの赤外線は38kHzのパルス出力なのですが、高出力でないとだめなのです。

<一番参考になったページ>
ボクにもわかる地上デジタル - 地デジ方式編 - 赤外線リモコン方式と解析・回路図:
http://www.geocities.jp/bokunimowakaru/std-commander.html

ここの「赤外線リモコン送信回路図(低出力)」では、トランジスタをスイッチとして使う方法が紹介されていますが、ATmegaから直接つなぐのに比べれば反応はかなり改善されました。
さらに「赤外線リモコン送信回路図(高出力) 」は部品点数が増えますが高出力です。
これをもとに改良型Arduino赤外線リモコン実験機をつくりました。
「IRduino Ver.3」
irduino_v3.jpg
回路図:
irduino.png
(素人の作りなので勘弁してください。)
リモコン受光部の入力が2番、赤外線の出力が3番、テスト用のタクトスイッチが4番、確認用LEDが13番としました。

ツェナーダイオード [パーツ]

USB直結のところで使った「ツェナーダイオード」について調べてみました。
原理とかは Wikipedia にも書いてありますが、読んでもよくわかりませんでした。
zener.jpg
ツェナーダイオード - 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)

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 ユニバーサル基板で再現してみました。(まちがってたら
ごめんなさい。)
duino-v.png

<ブートローダの準備、書き込み>

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.png

usbduino.jpg
(手前が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端子レギュレータのシルク印刷の外側くらいで切断しました。
blws-1.jpg
blws-2.jpg
ANALOG IN 0番とVinの間のあたりの裏面のパターンをカットします。
ICソケットも1, 7, 8, 9, 10, 17, 18, 19, 20, 22ピン以外は抜きました。
blws-3.jpg
R1 に 10kΩ
Q1 に 16MHz のセラロック
J2, J4 にピンヘッダを逆さにして取り付け
DIGITAL 10番とX4のRSTと書いてあるところをつないで、ハードウェア的には完成です。
blws-4.jpg

さて、Duemilanove を書き込みマシンにするために、
File → Examples → ArduinoISP を選んで、
arduinoisp.png
このスケッチを Duemilanove にかきこみます。

そこから、
Tools → Board で書き込み先のチップを選択 (ライターのチップではない)
Tools → Burn Bootloader → w/ Arduino as AVRISP
で書き込みできるようなのですが、ATmega168Pの場合、168(無印)と168Pのチップのシグニチャが違うため書き込めないようです。

そこでまた avrdude-GUI [YCIT] さんにお世話になります。
adgy-ai.png
(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を読み込んでくれます。
adgy-1.png
adgy-2.png
adgy-3.png
続いて、「BoardsView」を起動し、「Import(Text)」ボタンを押して、ArduinoのIDEのフォルダの中にある hardware\arduino\boards.txt を指定します。
bv-1.png
すると、一覧が出てくるので、Duemilanove互換にするなら ATmega168, 328のチップに合わせて選んで、右クリックして、「0) Fuse and fname to ClipBoard」を選びます。
ATmega168pなら diecimila の設定でいいと思います。
bv-2.png
また、「avrdude-GUI」に戻り、テキストボックス以外のところで右クリック。
「4) HEX Tools」 → 「4-3) FUSE <-- ClipBoard 」でファイルとFUSEの設定完了。
adgy-4.png
「Fuse (HEX)」の「Write」で書き込み。
「Frash」の「Write」で書き込み。
「Lock Bit」が「0F」になっているのを確認して「Write」で書き込み終了。
adgy-5.png

avrdude-GUI [YCIT] に感謝。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。