ことのはじめ
体重の情報をサーバーで収集したかったため検討をはじめた。
自分で歪みゲージ単体を買ってきて体重情報を取るのはメカ構造も検討しなければならないため、既存の体重計をハックすることにした。
体重計を分解する
使った体重計はこちら(タニタHD660)。ヨドバシ.comで1000円くらいで買えた。
後述するが体重計には4つの歪みゲージが内蔵されている。
スイッチサイエンスで歪みゲージを買うと一個1000円近くするにも関わらず、この体重計を買うことで4つの歪みゲージとメカのハウジングが1000円で手に入るのだから、なんとお得なことかお分かりいただけるだろう。
このHD660は裏のネジを回すだけで簡単に蓋が外せる。
4隅の赤丸部分が歪みケージの配置場所。歪みゲージからは3本の線(赤、白、緑)がでており、それぞれが中央の基板に向かって配線されている。
回路を見るために中央のパネル部(基板)を裏返す。
赤で囲ってある部分が歪みゲージの線が着地しているところ。
これらがどのように結線されているのかテスターを当てながら確認したところ。
下図のようになっていることが分かった。
(一番左の歪みゲージの向きは見やすいように90度回転させている。また、W, G, Rはそれぞれ線の色:White, Gree, Redを表している。)
これによってこの4つのひずみゲージによって下図のようなホイートストンブリッジが構成されていることが見えてきたので、結線先の分からない一番左のGと左から3番目のGがセンスラインであるという目星をつけた。
この2点間の電圧をテスターで測定してみる。
- 体重計に何も載せない時(体重計の数字が0を示していたとき)、2点間の電圧はおよそ-0.8mVだった。
- 体重計に載ったとき、およそ0.6mVだった。
回路を作成する
この結果を受けてブロック図を作成。
体重計からの微小電圧(-1mV ~ 1mV)を回路によって0V ~5Vに増幅、それをArduinoのADCで測定し、サーバーに投げる。
体重計とArduinoを仲介する回路が必要なので、その回路を作成する。
作成指針は、
- 入力に負電圧があるので、仮想GNDを用いることで最終的な出力が正電圧しか出ないようにする。
- 入力がpk-pkで2mV程度、出力目安がmax5Vなので、1000倍程度に増幅する必要がある(実際は回路を作った後に調整)
- ホイートストンブリッジの出力は差動出力なので、差動増幅器を用いる。
差動増幅器についてはディスクリートで組んでも外付け抵抗をマッチングさせないと精度がだせない上に配線が面倒なので秋月にある計装アンプIC(LT1167CN8)を用いた。
当初面倒くさいあまりC1、C2をつけていなかったが見事に発振したのでつけた。本当はもっと大きい値のほうが安定するが手持ちが0.1uFしかなかった。また、C1,C2をつけるだけだと余計にLM358Nが発振するので出力抵抗R4をつけた。
回路の動作に関しては電圧波形のイメージ図(LTSpiceでのシミュレーション結果)をみると理解しやすい。
このシミュレーションでは仮想GND(回路図上のVGND)の電圧を2.5V、計装アンプのゲインを1000倍に設定している。
ごらんの通りVGNDを中心に出力電圧が振幅している様子が分かる。
回路図にあるR5は可変抵抗にしているので、VGNDのレベルを動かせる。体重計が0kg(電圧入力でいうと-1mV程度)のときに、VOUTの電圧が0Vを下回らないように調整する。
ゲインは入力電圧のmax値(ここでは1mVとしているが、かなり体重の重い人がのるとそれを超えるかも)が入った際に、出力のVOUTが飽和しない範囲で調整する。
電圧から体重に変換する
事情があってここまではやっていないのだが、次のようにして変換できるはず。
今回は、体重計のパネルは生きているので、
- Aさんに体重計に載って貰う。パネルの体重を確認。ADCの読み取り値を確認。
- Bさんに体重計に載って貰う。以下同じ
- Cさんに...以下同じ
これでプロットしていけば、体重計と電圧値の相関(おそらくリニア)が分かるので電圧値から体重計に変換できるようになる...はず。
データをサーバーにあげる
HTTPサーバーを立てて、ArduinoYunからHTTP通信してあげればよいと思う。
本題ではないので割愛。
ArduinoYunについては、こちらを。