temp1.jpg temp2.jpg notepad.png

概要

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

使い方

  • Digispark を USB 端子に挿しこみ、文字が入力できるところにカーソルを合わせて、キーボードの ScrollLock キーを,1秒以内に4回押すと、現在の温度が表示されます。
  • Digispark 上の LED は ScrollLock の状態に連動して点滅します。
  • ScrollLock ランプがついたままの状態にすると、1分間に1回温度が表示され続けます。
  • Digispark を USB 接続した直後は正しい温度が得られません(実際より4~6℃低い値になります)。3分間ほど待って安定してから測定してください。

作り方

書き込みツールの準備

Digispark にファームウェア(HEXファイル)を書き込むツールを準備してください。

  • RaspberryPi, Linux, FreeBSD の場合: Digispark+gcc Lチカチュートリアル(RaspberryPi, Linux, FreeBSD 版) の [1]~[2] を実行して、書き込みツール micronucleus を作成して下さい。使い方は
    # micronucleus --run ファイル名.hex
    です。このコマンドを実行後に Digispark を挿しこむと、指定したファームウェアが書き込まれます。

温度センサーの校正

今回使った Tiny85 に内蔵された温度センサーは、チップごとのばらつきが非常に大きいため、はじめに校正する必要があります。別途、現在の室温がわかる温度計を用意してください

  1. 校正用ファームウェアの書き込み
    ZIP ファイル中の temp-cal.hex を Digispark に書き込みます。
    # micronucleus --run temp-cal.hex
  2. 温度センサー値の確認
    Digispark を USB コネクタに挿しこむと、キーボードとして認識されて、5秒ごとに温度センサーの値がキーボードから出力されます。メモ帳などに入力して値を確認します。
  3. 3分以上待機する(重要)
    センサーの値が安定するまで 3分~5分間程度かかります。必ず安定してから読み取ってください。
  4. 使うファームウェアの決定
    センサーの値から現在の室温 を引き算します。その値のラベルの付いたファームウェアを使うと、自動的に校正されます。
    (例) センサーの値が 310 で現在の室温が26℃の場合は、310-26=284 なので、temp-284.hex を使います。小数になった場合は四捨五入してください。

ファームウェアの書き込み

上記の手順で選んだファームウェアを書き込めば完成です。

# micronucleus --run temp-284.hex

ダウンロード

fileDigispark-temp-1.0.zip

  • Digispark に書き込むファームウェアです。
  • 校正用ツール/校正済みファームウェアのソースとバイナリを含みます。
  • Digispark をキーボードとして認識させるファームウェアと、ScrollLock 状態の読み取りには Code and Life-USB HID keyboard with V-USB のコードを使わせていただいています。

余談

  • 入力キーに 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)で、スタティックリンク版が作れれば添付したかったのですが、作成できませんでした。作り方が分かる方がいましたら教えてください。
    • micronucleus.exe スタティック版 を作成しました。本家の micronucleus.exe がライブラリ不足で動作しない場合にお試しください。Digispark 書き込み用のドライバのインストールは必要です。
  • 温度表示のフォーマットは [スペース][符号][数字][数字][C][ENTER] の6文字で、 先頭に空白が入っています。これは Excel に入力するときに、先頭に + が入っていると = と同じ意味として扱われてしまうためです。Excel は ScrollLock が ON だと、カーソルキーの機能がスクロールになります。
  • ScrollLock がないキーボードがありました。Windows10 のソフトウェアキーボードでも操作できました。

Counter: 5470, today: 3, yesterday: 3

添付ファイル: filemicronucleus-static.zip 1080件 [詳細] fileDigispark-temp-1.0.zip 1404件 [詳細] filenotepad.png 1428件 [詳細] filetemp1.jpg 1641件 [詳細] filetemp2.jpg 1395件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-12-04 (火) (2163d)