HX711のライブラリについて
Arduinoでロードセルを使って重さを測ろうとすると、A/DコンバータのHX711がよく使われます。これのライブラリを日本語で解説しているところがなかったので、ちょっと自分用にまとめてみようかと思います。
英語が読める人はgithubのこちらを読めば、すぐ分かるかと。
github.com(ちなみにHX711のArduinoのライブラリは複数あります…)
センサーの類にもれず、ロードセルはゼロ点補正と校正値(入力値の傾き)が必要となります。
・ ざっとした使い方
ゼロ点補正(風袋リセット)した後、校正値を調べるため既知の重さを置いて調整する。
1.set_scale() //パラメータ無しで
2.tare() //パラメータ無しで(これでゼロセット)
3.get_units(10) //既知の重さを置いて10回平均値を得る。
4.上記の平均値を既知の重量で割ってset_scale()する。
・使い方
「HX711_basic_example/HX711_basic_example.ino」のざっくりとした説明。
まず、HX711のメソッドを定義。
HX711 scale; //"scale"は何でもいい。可読性のある名前で。
setup中で以下を指定。
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); //PIN番号をbeginで定義
あとは
long reading = scale.read(); //値を変数に代入
で値が取れます。
・他のメソッドについて
「HX711 scale;」とした上で、下記
> scale.read()
ADCの生値を読み込み。
> scale.read_average(20)
ADCの生値を20回平均した値。(20は任意)(回数の仕様はbyte(8ビット)、delayは0ms )
> scale.tare();
上記「ざっとした使い方」に記載のゼロセットコマンド
> scale.set_scale(2280.f);
既知の重さをADCの値で割った数字を入れる。(「2280」の値がそれ)
#floatなのでfが付いている
例えば、ロードセル上に「100g」という既知の重さを置いて、get_units(10)でADC値を取得して、100(g)で割ったあと、その値を上記のset_scaleに入力すると、以下のget_units()で出てくる値が「g単位」になります。
> scale.get_value(5)
0セットを反映したADCの値を5回平均した値。(回数の仕様については上記)
> scale.get_units(5)
既知の重さで補正した単位で5回平均した値。(回数の仕様については上記)
> scale.get_scale()
上記の現在の設定値を取得する。
> scale.power_down()
> scale.power_up()
A/DのスリープモードON/OFFについて。電池駆動の場合など。
(PD_SCKピンがLowからHighに変化し、Highの状態が60μs以上続くと、HX711はパワーダウンモードに移行します。)
set_gain()などもありますが、ここでは突っ込みません。
・retryとtimeoutサンプルについて
上記githubのsampleにあるソースですが、違いは大変少なく、basic_exampleのloop()内において
> if (scale.is_ready()) {
とscaleを呼ぶ箇所が、retryは
> if (scale.wait_ready_retry(10)) {
と10回リトライして秤を探しています。
また、timeoutは
> if (scale.wait_ready_timeout(1000)) {
と1000ms待ってtimeout判定しています。
サンプルの違いはここだけです。