ロードセルSC616CとADコンバータHX711を使って荷重データを読み取る方法を紹介します。また、0.01g分解能での測定が可能であるかも確認しました。
HX711との通信は、Raspberry PiとPythonを使用してGPIOで制御します。この制御にはPython用のHX711ライブラリを使っています。
使用したロードセルSC616Cは容量500gタイプです。
0.01gの測定が『どの程度の精度なのか』『どの程度安定しているか』の雰囲気も伝わる様に、確認動画も紹介しています。ぜひ参考にしてください。
準備
センサーとADコンバータの購入
今回確認し使用したロードセルSC616C(500g)とADコンバータモジュールAE-HX711-SIPは、秋月電子通商で購入しました。
SC616CとHX711の主な仕様は以下の通りです。
ロードセル SC616C(500g)
容量:500g
精度:0.05% FS
出力:0.8 ± 0.15 mV/V
抵抗 1000 ± 10Ω
ADコンバータ HX711
分解能:24bit
データレート:10Hz
PGA:128倍 / 64倍 / 32倍(ChB)
フルスケール:±20mV
センサー供給電源:4.289V(Raspbery Piの5V電源を使用した時の実測値)
各種接続の仕方
接続図
接続写真
Pythonの操作方法
Pythonの基本操作を説明しています。
プログラミング
プログラムコード
HX711との通信は、Raspberry Piから送信するPD_SCKの数によって、入力チャンネルとゲインを選択します。
I2C通信やSPI通信などのライブラリは使えませんが、GitHubにPython用のHX711ライブラリがあるので、それを利用します。
LXTerminalからHX711ライブラリを使うために下のコマンドを実行します。
git clone https://github.com/tatobari/hx711py
/home/pi/の下にhx711フォルダが作成されます。
hx711フォルダの中にexample.pyファイルがあります。
example.pyファイルをPythonで実行すると、データを読み込んで画面に表示します。
(Raspberry Pi 4BとPasoberry Pi OSの組み合わせで何も改造せずに動きました)
example.pyファイルはADのカウント値表示なので、物理量に変換する係数を求めてプログラムコードに追加します。
ADのカウント値から物理量へ変換する係数を求める
1.机上の計算
実測値から係数を求める前に、机上の計算で目安を付けました。
SC616Cの仕様
容量:500g
出力:0.8mV/V
供給電源:4.289V(HX711から電源供給の実測値)
SC616Cに500gfの荷重が加わったときの出力電圧は、
0.8mV/V × 4.289V = 3.4312mV
HX711の仕様
分解能:24bit
フルスケール:±20mV
HX711に3.4312mVを入力した時のADのカウント値は、
3.4312mV / 20mV * 224 / 2 ≒ ±1439149 count
1439149 count / 500g = 2878 count / g
1gfの荷重で、約2900 count / g になることが予想されます。
2.実測値
1gのおもりを載せた時のADのカウント値(1000回測定の平均)
3402 count / g
机上の計算と差がありますが、SC616Cの出力の仕様が、0.8mV/V ±0.15mV なので許容範囲とします。係数を 3402 count / g に決定します。
プログラムの実行
Pythonプログラムを実行して測定データを読み込みます。
①Runボタンを押します。
② 荷重データを0.1秒間隔で画面に表示します。
③Stopボタンを押すとプログラムを終了します。
0.01g 分解能の測定結果
測定結果
0.01g分解能の荷重測定は厳しいという結果でした。
実用的なのは、0.1g以上であると思われます。
実際の測定は、動画のような感じでしたので参考にしてください。
(電源投入後に10分以上のアイドリングと、周囲温度が一定になる様に配慮したうえで、十分に安定した状態で測定しています。)
ノイズ対策をして安定して測れるようにしてから、測定誤差要因を取り除く工夫をすれば、0.01g分解能での測定が出来る可能性はあると思います。
動画はこの記事のVBAプログラムを使っています。
Excelのグラフをアニメーションで動かす方法を紹介しています。
誤差原因
1.精度
SC616Cの精度は 0.05%FSです。500gタイプであれば 0.25gの誤差があります。
0.01g~10gのおもりをそれぞれ1000回づつ測定した結果の平均を以下に示します。
仕様範囲内ですが、小さい荷重の測定は厳しい感じです。
おもり[g] | 測定値[gf] |
0 | 0.001 |
0.01 | 0.014 |
0.02 | 0.016 |
0.05 | 0.056 |
0.1 | 0.090 |
0.2 | 0.203 |
0.5 | 0.501 |
1.0 | 1.003 |
2.0 | 1.998 |
5.0 | 4.991 |
10.0 | 10.000 |
2.クリープ
SC616Cのクリープは 0.1%FS(3分)です。
荷重を加えた後、3分後には0.5gズレる可能性が有ります。
以下のグラフは、実際に 0.01gと 1gを、それぞれ3分間測定した結果です。
仕様範囲内ですが、測定結果のグラフを見ると右肩下がりになっています。
測定結果【10mg】
測定結果【1g】
3.測定値のばらつき
測定値のばらつきを確認を以下の条件で行いました。
・センサに印加する電源はRaspberry Piの電源を使用
・センサーのケーブルは購入時のまま
・測定環境は、住宅の部屋の中(近くに強力なノイズ源となるものは無い)
・特にノイズ対策は行っていない
10gを1000回測定した結果です。
10gに限らず、0.01g、0.02g、0.05g、0.1g、0.2g、0.5g、1g、2g、5g、10gで荷重測定した結果を確認したところ、バラツキの範囲は、±0.0123g(3σ)でした。(ADのカウント値で84LSBです)
まとめ
SC616CとHX711を使用して荷重データをRaspberry Piに読み込むサンプルと、0.01g分解能の測定が可能であるかを確認しました。
SC616Cの仕様をみると0.01gの精度を求めることはできませんが、いろいろ工夫をすれば今よりも安定した測定が出来そうな印象もありました。
例えば、校正データをたくさんとって非直線性を改善したり、測定値のバラツキを改善するノイズ対策を行ったりです。実際に試した項目として移動平均でそれなりに安定はしました。
今後、少しづつこれらの対策を行って、どのくらい改善したかの結果を紹介したいと思います。
プログラミングやソフトウェアの記事です。
コメント
時間と手間がかかる軽量をありがとうございます。大変参考になりました。心より御礼申し上げます。
ありがとうございます。