&ref(temp1.jpg,zoom,250x200);
&ref(temp2.jpg,zoom,200x200);
&ref(notepad.png,zoom,250x200);

*概要 [#m164d184]
マイコンボード Digispark を使った、キーボードとして認識される USB 温度計です。
PC の USB 端子に接続して、別のキーボードの COLOR(RED){ScrollLock キーを4連打}すると、現在の温度が文字として入力されます。疑似的にキーボードを押すことで文字を出力していますので、メモ帳や検索欄など、どこにでも入力できます。Digispark 上のマイコン Tiny85 に内蔵された温度センサーを使っています(精度は高くありません)。Digispark 以外の追加部品は不要で、Digispark にファームウェアを書き込むだけで完成します。

*使い方 [#kb2f1c2a]
-Digispark を USB 端子に挿しこみ、文字が入力できるところにカーソルを合わせて、キーボードの COLOR(RED){ScrollLock キーを,1秒以内に4回}押してください。現在の温度が表示されます。
-Digispark 上の LED は ScrollLock の状態に連動して点滅します。
-ScrollLock ランプがついたままの状態にすると、COLOR(RED){1分間に1回}温度が表示され続けます。

*作り方 [#q75a266f]
**書き込みツールの準備 [#o06091de]
Digispark にファームウェア(HEXファイル)を書き込むツールを準備してください。

-RaspberryPi, Linux, FreeBSD の場合: [[Digispark+gcc Lチカチュートリアル(RaspberryPi, Linux, FreeBSD 版):http://milkandlait.blogspot.jp/2017/08/digisparkgcc-lfreebsd.html]] の [1]~[2] を実行して、書き込みツール micronucleus を作成して下さい。使い方は
 # micronucleus --run ファイル名.hex
です。このコマンドを実行後に一度 Digispark を抜いて挿しこむと書き込まれます。

-Windows の場合: [[DigiSpark に対応した Arduino の統合開発環境:https://sourceforge.net/projects/digistump/files/DigisparkArduino-Win32-1.0.4-May19.zip/download]] に含まれる micronucleus.exe を使えば、上と同じ手順で Windows PC からも書き込めます。

**温度センサーの校正 [#f605d7d5]
今回使った Tiny85 に内蔵された温度センサーは、チップごとのばらつきが非常に大きいため、はじめに校正する必要があります。COLOR(RED){別途、現在の室温がわかる温度計を用意してください}。
+校正用ファームウェアの書き込み~
ZIP ファイル中の temp-cal.hex を Digispark に書き込みます。
 # micronucleus --run temp-cal.hex
+温度センサー値の確認~
Digispark を USB コネクタに挿しこむと、キーボードとして認識されて、5秒ごとに温度センサーの値が出力されます。メモ帳などに入力して値を確認します。
+COLOR(RED){3分以上待機する(重要)}~
センサーの値が安定するまで 3分~5分間程度かかります。必ず安定してから読み取ってください。
+使うファームウェアの決定~
COLOR(RED){センサーの値から現在の室温 を引き算します}。その値のラベルの付いたファームウェアを使うと、自動的に校正されます。~
(例) センサーの値が 310 で現在の室温が26℃の場合は、310-26=284 なので、temp-284.hex を使います。小数になった場合は四捨五入してください。

**ファームウェアの書き込み [#kb4c588b]
上記の手順で選んだファームウェアを書き込めば完成です。
 # micronucleus --run temp-284.hex

*ダウンロード [#n3dd64cc]
&ref(Digispark-temp-1.0.zip);
-Digispark に書き込むファームウェアです。
-校正用ツール/校正済みファームウェアのソースとバイナリを含みます。
-Digispark をキーボードとして認識させるファームウェアと、ScrollLock 状態の読み取りには [[Code and Life-USB HID keyboard with V-USB:http://codeandlife.com/2012/06/18/usb-hid-keyboard-with-v-usb/]] のコードを使わせていただいています。

*余談 [#b2138252]
-入力キーに ScrollLock を使う理由: キーボードに情報を伝える手段は CAPS, Scroll Lock, NUM Lock ランプの ON/OFF しかありません。当初 CAPS を使おうとしたのですが、SHIFT を同時に押さないと CAPS ランプを点滅させられない PC があり、SHIFT を押していると、数字を表示させようとしても記号になってしまいます。また NUM Lock は常時 ON のケースが多いと考えて、ScrollLock を使いました。
-温度センサについて: Tiny85 の A/D コンバータの入力で内蔵温度センサを選択すると、A/D 変換の結果として温度が返ってきますが、オフセット値の個体差が大きく、手持ちの10個の Digispark で同じ温度を測定したところ、10℃くらいの個体差がありました。校正は、このオフセット値を補正しているだけです(温度 = A * AD変換値 + B の B のみ補正しています)。
-Digispark の発熱について: Digispark はオーバークロックで動作しているためか、電源を入れると自己発熱して温度が上がっていきます。3分ほどで電源 ON 直後より 4~6℃ 程度高くなるため、上記の手順のように、温度が上がり切った状態で校正しています。そのため、電源 ON 直後は正しい温度が得られません。
-A/D 変換について: A/D 変換終了割り込みを使って、測定中はマイコンを Sleep 状態にしています。また毎回64回測定して平均をとっています。
-書き込みツール micronucleus.exe について: Windows(MinGW/msys)で、スタティックリンク版が作れれば添付したかったのですが、作成できませんでした。作り方が分かる方がいましたら教えてください。
-温度表示のフォーマットは [スペース][符号][数字][数字][C][ENTER] の6文字で、
先頭に空白が入っています。これは Excel に入力するときに、先頭に + が入っていると = と同じ意味として扱われてしまうためです。Excel は ScrollLock が ON だと、カーソルキーの機能がスクロールになります。
-ScrollLock がないキーボードがありました。Windows10 のソフトウェアキーボードでも操作できました。

----
#counter

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