jmz's blog

いろいろなまとめ

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判定しています。
サンプルの違いはここだけです。