[[VIR-USB 接続赤外線学習リモコン]]

-VIR: USB 接続赤外線学習リモコンユニットに関する技術の解説です。
-VIR が入出力する赤外線信号のテキストフォーマットについては別ページにまとめました: [[VIR-フォーマット]]
-内容は随時更新していきます。

*制御ソフトとファームウェアのバージョンの確認方法 [#yc5957dd]
-制御ソフトのバージョン
--V-IR コマンドをオプションなしで実行します。最後の行の VERSION=○○ が制御ソフトのバージョン番号です(この例ではバージョン31)。
--V-IR コマンドをオプションなしで実行します。最後の行の VERSION=○○ が制御ソフトのバージョン番号です(この例では制御ソフト V.31)。

 % V-IR
 USAGE:
 V-IR [-r(raw)][-f freq][-v(verb)] R > FILE.ir  RECEIVE IR DATA & WRITE TO RAM
 V-IR S < FILE.ir               TRANSMIT IR DATA & WRITE TO RAM
 V-IR P                         SHOW IR DATA IN RAM
 V-IR s                         SAVE DATA FROM RAM TO EEPROM
 V-IR l                         LOAD DATA FROM EEPROM TO RAM & TRANSMIT IT
 V-IR V                         SHOW INFO OF AVR-FIRMWARE
 Run this command as a root user.
 (VERSION=31, CMD=V-IR, EUID=0)

-ファームウェアのバージョン
--USB 端子にデバイスを挿入して "V-IR V" を実行します。表示された数値がファームウェアのバージョン番号です(この例ではファームウェア31)。
--USB 端子にデバイスを挿入して "V-IR V" コマンドを実行します。表示された数値がファームウェアのバージョン番号です(この例ではファームウェア31)。

 % V-IR V
 31

*動作と使い方 [#aabda383]
// 動作の概要 [#u5b1d13d]
// 学習時は、赤外線受信モジュールの出力を一定時間ごとにサンプリングして、赤外線の ON/OFF の継続時間のパターンを記録します。送信時は同じパターンで赤外線 LED を点滅させます。
// 学習したパターンは Tiny85 の RAM に記録されます。制御ソフトは USB 経由で RAM に記録されたパターンを読み出したり、パターンを書き込むためのものです。1種類の信号だけですが、Tiny85 の EEPROM(512バイト) に記録・読み出しする機能もあります。

**基板上のボタンを押したときの動作 [#ne7671c8]
ボタンを長押しすると学習待機状態になります。この状態で赤外線受信モジュールに赤外線信号を入力するとサンプリングが開始され、RAM に記録されます。記録終了後、結果は EEPROM に転送されます。

ボタンを短く押すと、学習した信号が EEPROM から RAM に読み出され、そのパターンで 赤外線 LED が点滅します。

学習待機状態の時にボタンを押すと学習待機状態をキャンセルできます。

**制御ソフトからの操作 [#y886ae58]
制御ソフト V-IR (Windows 版は V-IR.EXE) にコマンド文字(半角1文字)を与えて動作を指定します。コマンドは大文字小文字を区別します。学習コマンドで出力された文字列をそのまま送信コマンドに渡せば、同じ信号を送信できます。

-学習コマンド(R)
 % VIR.EXE [オプション] R [ファイル名]
 赤外線信号を受信、学習し、指定したファイルに出力します。
 ファイル名を省略したときは標準出力に出力します。
 以下のオプションが追加で指定できます。
 -r : 無圧縮で出力します
 -f 数値: キャリア周波数(kHz)を指定します。キャリア周波数は出力ファイルに
 書き込まれ、赤外線信号の送信時に同じキャリア周波数が設定されます。デフォ
 ルトは38kHzです。
 -v : コマンド実行時に詳細を表示します

-送信コマンド(S)
 % VIR.EXE [オプション] S [ファイル名]
 指定したファイルから赤外線信号を読み取り、赤外線 LED から送信します。
 ファイル名を省略したときは標準入力から読み取ります。
 ファイルは複数指定することができ、その場合は順番に送信されます。
 以下のオプションが追加で指定できます。
 -v : コマンド実行時に詳細を表示します

-表示コマンド(P)
 % VIR.EXE  P
 現在 RAMに記憶されている信号を標準出力に出力します。

-EEPROM セーブコマンド(s)
 % VIR.EXE  s
 現在 RAM に記憶されている信号を EEPROMに保存します。

-EEPROM ロードコマンド
 % VIR.EXE  l
 EEPROM に保存されている赤外線信号を RAMに読み出し、かつ赤外線 LED から送信
 します。

-状態表示コマンド(V)
 % VIR.EXE  V
 ファームウェアのバージョンを表示します。

**LED による状態表示 [#a85be63a]
下段の基板(DigiSpark) 上に、電源 LED と表示 LED があります。
表示 LED は下記の意味があります。

|消灯|通常状態|
|点灯|学習待機状態|
|点滅(1回)|学習成功または赤外線送信成功|
|点滅(5回)|赤外線信号が RAM 容量を超えたため学習に失敗した|

**電源投入時の動作 [#x7ca684c]
電源投入直後の約6秒間はファームウェアの書き換え待ちの待機時間です。この間は操作を受け付けません(この間に Digispark のライティングソフトウェア micronucleus を起動すると、ファームウェアの書き換えが行われます)。その後 USB の初期化が行われます。USB の初期化中は表示 LED が点灯します。その後、表示LED が消灯し、通常状態に移行します。

**サンプリングレート [#y8022037]
本機では赤外線信号のサンプリングレートはキャリア周波数の2倍で、キャリア周波数に影響を受けます。キャリア周波数はデフォルトでは 38kHz なので通常は 76kHz(13.2us 単位)でサンプリングを行います。キャリア周波数は手動で学習ごとに変更することもできますが、オリジナルのリモコンの信号からキャリア周波数を自動で検出することはできません。

*回路 [#q6ba721f]
**DigiSpark [#o87c95d2]
DigiSpark は AVR マイコン ATTiny85 を搭載した小型の Arduino 互換ボードです。専用の USB コントローラ IC は積んでいませんが、ソフトウェアによる USB 通信ライブラリ V-USB によって、PC から USB 経由でファームウェアを書き込んだり、外部と USB で通信することができます。このキットは、DigiSpark に赤外線送受信回路を追加して、USB で制御する赤外線リモコンを実現しています。

**オリジナル赤外線送受信シールド [#zf625cfc]
Arduino に外部回路を追加するための拡張基板をシールドと呼びます。本家からも赤外線送受信用の [[Infrared Shield:https://digistump.com/wiki/digispark/tutorials/ir]] が発売されていますが、本家版の回路では赤外線 LED を ATTiny85 の出力ピンで直接駆動しているため、赤外線信号が遠くまで届きませんでした。そこで、ATTiny85 の出力でトランジスタを駆動し、赤外線 LED を大電流で光らせる、赤外線送受信シールドを独自に開発しました。そのおかげで 5[m] 以上離れた場所からも信号が届くようになりました。また、広角の LED を使うことで、広い範囲に赤外線信号を照射できるようになりました。

シールドのピン配列は本家版と互換になっていますので、そのまま置き替えて使うこともできます。基板上のジャンパパターンも本家版と互換になっているため、組み立ての際は J1 と J4 をショートさせる必要があります。

本家版 Infrared Shield にはありませんでしたが、手動操作ができるように、シールド基板上にスイッチを1つ追加しました。ただ ATTiny85 の I/O ピンは PB0~PB5 の6ピンしかありませんが、PB3,PB4 は USB 用に占有されていて、PB1 には元々赤色 LED と電流制限抵抗(R5, 回路図には値がないですが、実測 700Ω 程度) が接続されていて、ピンに空きがありません。そこで表示用の LED が接続されている PB1 に、LED と並列にスイッチを入れて、PB1 を入出力共用にしています。PB1 は通常は出力ピンですが、時分割で短時間入力ピンとしても利用しています。スイッチを ON にしたときに出力がぶつかってショートしないように、スイッチには直列に200Ωの抵抗を入れています。スイッチを ON にすると、この200Ωの抵抗を通して LED が薄く点灯してしまいますが、ピンを入出力共用にしている都合上やむを得ません。

なお、本来の Digispark では PB5 が入出力ピンとして利用できますが、Digispark のクローン品では PB5 がリセットのままになっているケースがあるため、どちらのボードでも使用できるように、今回は PB5 は使用していません。

今回の DigiSpark の ATTiny85 のピンの用途は下記の表の通りです。
|Tiny85ピン番号|I/O|用途|
|1|PB5|リセット(クローン版 Digispark のみ)|
|2|PB3|USB-|
|3|PB4|USB+|
|4|GND|GND|
|5|PB0|赤外線LED|
|6|PB1|表示用可視光 LED / スイッチ(時分割で入出力共用)|
|7|PB2|赤外線受信モジュール|
|8|VCC|VCC(5V)|

**赤外線 LED と受光モジュール [#afdbcce8]
赤外線 LED は、できるだけ赤外線が広角に照射されるようにという観点で 
[[TSAL6200:http://www.vishay.com/doc?81010]]または[[TSAL4400:http://www.vishay.com/doc?81006]] を選択しました。データシートでは指向角が±25度(TSAL4400), ±17度(TSAL6200) となっており、受光部を正確に狙わなくても動作します。

赤外線受光モジュールは似たスペックの製品でもノイズへの強さ、動作電圧や電圧変動への強さ、受信した信号を正確に再現するかなど、かなりの特性の差があります。今回は信号の再現性を重視して、TSOP38238 を選択しました。

今回使用した赤外線 LED, 受光モジュールは海外製品で、入手性があまりよくないのが難点です。

**回路図[#s898a180]
図をクリックすると拡大表示されます。

&ref(回路図1.png,zoom,400x300);
LEFT:''DigiSpark の回路図''
#BR
&ref(回路図2.png,zoom,400x300);
LEFT:''赤外線送受信シールドの回路図''

*マイコン側ファームウェア [#sf812602]
**V-USB [#g82a6324]
**ベンダーコード、プロダクトコード [#aa019e7a]

*PC側制御プログラム [#m259ee97]
**libusb1.0 [#sc287448]
**プログラムのコンパイル [#e34210f5]
-OSによる差

*Pukiwiki プラグイン [#yce45d4c]
**send() コマンドと引数 [#b9fef5d3]
**receive() コマンドと引数 [#yd1c9a5e]

#counter


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS