💡やること
ロードセル計量センサを使って、デジタルはかりをつくります。
🏁デモ
🔧パーツ一覧
no | 部品名 | 個数 | 備考 |
---|---|---|---|
1 | ラズベリーパイ | 1 | 今回は4Bで確認 |
2 | 電子スケール ロードセル計量センサセット(重量センサ+HX711) | 1 | Amazon |
3 | ジャンパー線 | 適量 | - |
接続図
ピンの接続
Pin | HX711 | 備考 |
---|---|---|
5V | VCC | 赤色ケーブル |
GND | GND | 黒色ケーブル |
BCM5 | DT | 黄色ケーブル |
BCM6 | SCK | 緑色ケーブル |
💻環境
開発環境
- ラズベリーパイ
- Linux rpi 5.10.17-v7l+ #1403 SMP Mon Feb 22 11:33:35 GMT 2021 armv7l GNU/Linux
- Python
- Python 3.7.3 (default, Jan 22 2021, 20:04:44)
ラズベリーパイの設定
特になし
モジュールのインストール
apt
特になし
pip
Pythonに関するモジュールをインストールします。
$ python3 -m venv env
$ source env/bin/activate
(env) $ pip install RPi.GPIO
(env) $ git clone https://github.com/tatobari/hx711py
📝手順
- キャリブレーションの実施
- 動作の確認
キャリブレーションの実施
センサーのばらつきや筐体の差などがあるため、キャリブレーション(校正)を行う必要があります。
tatobariさんが公開されているモジュールのサンプルに従って、キャリブレーションを実施します。
以下の手順で行います。
- 何も載せていない状態で、プログラムを実行
- 分銅(重さが分かっているもの)を置いて、データを取得する
- データからキャリブレーション値(referenceUnit)を算出
何も載せていない状態で、プログラムを実行
以下がキャリブレーション用のコードとなります。
samp_calibration.py
import time
import sys
import RPi.GPIO as GPIO
from hx711py.hx711 import HX711
PIN_DAT = 5
PIN_CLK = 6
referenceUnit = 1 # <=これを決めたい
def cleanAndExit():
print("Cleaning...")
GPIO.cleanup()
print("Bye!")
sys.exit()
def main():
hx = HX711(PIN_DAT, PIN_CLK)
# データの並び順を指定
hx.set_reading_format("MSB", "MSB")
# キャリブレーション値を設定
hx.set_reference_unit(referenceUnit)
hx.reset()
hx.tare()
print("Tare done! Add weight now...")
while True:
try:
# Prints the weight.
val = hx.get_weight(5)
print(val)
hx.power_down()
hx.power_up()
time.sleep(0.1)
except (KeyboardInterrupt, SystemExit):
panel.display_clear()
cleanAndExit()
if __name__ == "__main__":
main()
プログラムを実行します。
(env) $ python samp_calibration.py
Tare done! Add weight now...
18.333333333328483
-3.6666666666715173
16.333333333328483
...
何も載っていない場合は、小さな値が行ったり来たりするようです。
分銅(重さが分かっているもの)を置いて、データを取得
今回、手持ちの分銅(200g)を使用しました。
分銅を載せると、プログラムの結果が以下のように変わります。
(env) $ python samp_calibration.py
Tare done! Add weight now...
18.333333333328483
-3.6666666666715173
16.333333333328483
-7.444444444437977
61824.55555555556 # <=分銅を載せた
92595.55555555556
94617.55555555556 # <= データが安定している
94591.55555555556 # <= データが安定している
94584.55555555556 # <= データが安定している
94592.55555555556 # <= データが安定している
94591.55555555556 # <= データが安定している
94613.55555555556 # <= データが安定している
94639.55555555556 # <= データが安定している
94630.55555555556 # <= データが安定している
略
94621.55555555556 # <= データが安定している
94621.55555555556 # <= データが安定している
データからキャリブレーション値(referenceUnit)を算出
"データが安定している"から平均値を算出し、リファレンスの重さ(g)で割ります。
今回の例だと以下となります。
cal_ref.py
# 分銅の重さ
REF_OMOSA = 200
# データの取得
SAMP_DATAS = [
94617.55555555556, 94591.55555555556, 94584.55555555556, 94592.55555555556,
94591.55555555556, 94613.55555555556, 94639.55555555556, 94630.55555555556,
94621.55555555556, 94621.55555555556, 94615.55555555556, 94643.55555555556,
94611.55555555556, 94614.55555555556, 94628.55555555556, 94596.55555555556,
94626.55555555556, 94600.55555555556, 94589.55555555556, 94591.55555555556,
94621.55555555556, 94618.55555555556, 94596.55555555556, 94622.55555555556,
94621.55555555556, 94548.55555555556, 94601.55555555556, 94595.55555555556,
94627.55555555556,
]
print("referenceUnit is ", sum(SAMP_DATAS) / len(SAMP_DATAS) //REF_OMOSA)
実行すると、
(env) $ python cal_ref.py
referenceUnit is 473.0
473であることが分かりました。
これでキャリブレーションが完了です。
動作の確認
hakari.pyにて動作を確認します。
コード - 計測と表示
samp_calibration.pyのファイルの以下を修正します。
referenceUnit = 1
↓
referenceUnit = 473 #<=算出した値
実行手順
(env) $ python samp_calibration.py # <=referenceUnitを変更したもの
-0.32910500352361843
-0.32064834390416813
-0.4326990838618848
-0.37773079633545775
-0.32699083861875583
-0.33967582804793134
49.74277660324171 # <=50gの分銅をのせた
49.68780831571528
49.70472163495418
49.64552501761803
49.723749119097945
約50gが測定されていることが確認できます。
🔎ポイント
ロードセルモジュールの動作
ロードセルとは、力(質量、トルク)を検出するセンサーです。
今回は、ビーム型の5kgのモノを使っています。
- もっと重いものを計測したい場合は、最大20kg
- もっと軽いものを精度よく計測したい場合は、最大500g
を使用することもできます。
精度メモ
今回のリファレンスで確認したところ以下のような結果でした。
分銅の重さ | 取得データ |
---|---|
10g | 10.01~10.03 |
20g | 19.97~20.05 |
50g | 49.94~50.04 |
100g | 99.92~100.07 |
200g | 199.99~200.06 |
500g | 499.98~500.12 |
かなりの精度で取れています。
筐体がしっかりしていれば、様々なアプリケーションに応用できそうです。
表示機と組み合わせる
表示機と組み合わせた例を下記に記載してあります。