2023/12/18 早瀬光輝
私は、電子スケールを用いて商品の個数と重さを表示するプログラムを作成しました。今回のブログでは「重さ計測のハードウェアとプログラム」について共有したいと思います。この研究は、小分けビジネスを実現する根幹的な技術です。小分けビジネスとは、個人で購入するには多すぎる物を客が必要な量だけ購入することができるというものです。
今回はraspberry piとhx711を使った重量測定器(TkinterでCUI表示)[1]というサイトを参考に作成しています。はじめにraspberry piを起動させ、下の図のようにhx711とraspberry piをhx711のキットに付属のフラットケーブルを使って接続します。下の図は[1]のサイトの図を再現したものです。
接続してから、githubから以下のコードを実行してpythonのhx711ライブラリを入手します。
[1]よりコードを引用
[1]より引用
実際に実行すると上記のような数値が表示されます。ここに表示されている数値はロードセルの出力を表示しているだけなので、キャリブレーションして重量に相当する数値にしければなりません。
[1]より引用
[1]では200gの錘を電子スケールにおいて、数値が安定している212399~212390の平均値を実際の重量で割った数値を補正値にしています。錘の重量が200gとすると、212417(平均値)/200g(実際の重量)=1062 が補正値となります。この補正値は電子スケールによって変動するので、必ずこの値になるわけではありません。私の場合は、補正値458.8で設定しています。
以下に実際に私が使用しているコードを表示します。
raspberry piのコード
上記のコードは1行目、2行目でflaskとjsonify、hx711をインポートしています。4行目でFlaskのWebアプリケーションのインスタンスを作成し、5行目でGPIOピン5および6を使用してHX711クラスのインスタンスを作成します。6行目で先ほど決定した補正値458.8をreferenceUnitに設定し、7行目でHX711センサーの読み取り形式を設定します。8行目でセンサーの参照単位を設定します。9行目はhx711センサーをリセットし、10行目でセンターにかかる重さがない状態での出力をゼロに合わせるテアリングを行います。12~16行目で、hx.get_weight()の重量情報をjsonifyにしてからgetメソッドで取得しています。以上のプログラムは、raspberry piで動かし電子スケールで重さを測ることができます。
ここでは、先ほどのプログラムをraspberry piで動作させ、その重量情報を表示するプログラムを紹介します。
重量情報を表示するプログラム
1,2行目でtimeとリクエストモジュールをインポートしています。5~7行目はraspberry piの重量情報をリクエストしてjosn形式にして受け取るfetch_weight関数です。9行目でjsonデータをfloatにして、10行目でユーザに「最初にいれた商品数を入力してください」とinputで問います。11行目で重量(g)を最初に入れた商品数で割って、商品1つ当たりの重さ(g)を求めています。13行以降は重量情報を更新して、繰り返し重量情報をprintします。
上記の動画はプログラムを実際に動作させたものです。これで電子スケールで重さを測って、重量データを表示することができます。この技術を応用して、色々なものを販売できるようにしていきたいと思います。