こんにちは。Matsuです。
社内備品管理システム、前回はユースケースのお話をしました。
ところで、当初「備品を重量で管理しよう!」と言いましたが、そもそも重量で管理するにはそれなりの精度で重量の測定ができなければいけません。今回は実際に重量計とマイコンを使って重量の測定を試してみましょう。
重量計のモジュールはこちらにしました。5Kgのロードセル(金属の棒状の重量計本体)とAD変換モジュールHX711(緑の基板)、さらに上下のアクリル板までセットになっているものなので、お試しで使ってみるにはお手頃なセットです。
上の画像のように、ロードセル(金属棒)の上側は左のみが上のアクリル板に、下側は右のみが下のアクリル板にネジ止めされています。金属棒の中央には∞の形に穴があけられ、上と右に歪みゲージがついています。上のアクリル板に物を乗せると、重みで金属棒が歪み、その歪みを測定して重量を測る仕組みです。
緑色の基板はHX711というAD変換モジュールです。これがロードセルのセンサーから送られたアナログ値をデジタル値に変換してくれます。
これに、今回はArduino UNO R4 WiFiを組み合わせて動作させてみます。
全体はこんな感じになります。
HX711とArduino間の配線は以下のようになります。
プログラム作成の準備
それでは、Arduinoのプログラムを作っていきます。
Arduinoの開発環境はArduino IDEを使いますが、細かい手順は割愛させていただきます。
Arduino UNO R4 WiFiを使いますので、Arduino IDのボードマネージャからArduino UNO R4 WiFi Boards を追加。
さらに、HX711のライブラリを追加します。
実際の手順は検索すればいろいろ見つかるかなと思います。
プログラム
以下が今回作成したプログラムです。
#include <Arduino.h>
#include "HX711.h"
const int DT_PIN = 2;
const int SCK_PIN = 3;
const float SCALE1_PARAM = 414.93; // キャリブレーションで算出した値を入れる
HX711 scale1;
void setup() {
Serial.begin(9600);
Serial.println("START");
scale1.begin(DT_PIN, SCK_PIN);
// キャリブレーションする場合は以下ブロックを有効にする
#if 0
scale1.set_scale();
scale1.tare();
Serial.print("calibrating...");
delay(5000);
// キャリブレーションする場合、5秒間のうちに物を乗せる
Serial.println(scale1.get_units(10));
// ここの数値を乗せた物の重量で割った値をSCALE1_PARAMに入れる
#endif
// キャリブレーション値設定
scale1.set_scale(SCALE1_PARAM);
// 0リセット
scale1.tare();
}
void loop() {
String weight = String(scale1.get_units(10)) + "g";
Serial.println(weight);
scale1.power_down();
delay(500);
scale1.power_up();
}
測定した重量はとりあえずシリアルで出力することにしました。出力された重量はArduino IDEのシリアルモニタで確認できます。シリアルモニタのボーレートを9600baudに変更するのを忘れないようにしましょう。
プログラムを動かすと、こんな感じで0.5秒ごとに次々と重量が表示されます。
でも、最初はめちゃくちゃな重量が表示されているはずです。
めちゃくちゃな重量が表示されていたのは、ロードセルごとに特性が異なるため、それに併せた補正値を設定する必要があるためです。
補正値を設定する作業を一般的にキャリブレーションといいます。今回のプログラムでキャリブレーションする場合は、プログラム中 #if 0 を #if 1 に変更してArduinoに書き込みます。書込後に起動し、シリアルモニタに”calibrating…”が表示されている5秒間のうちに、重量計に何か物を乗せます。
今回はスマートフォン(約229g)を使います。
ここから、Arduino IDEのシリアルモニタを見ていきます。
“calibrating…”の右に 95020.22 という値が表示されていますね。これがロードセルから出力された生の値です。ここで、「”calibrating…”の右に表示される値」 / 「乗せた物の重量(g)」を計算して出た値をSCALE1_PARAM設定します。
今回は、95020.00 / 228.9(g) ≒ 415.11 とします。
SCALE1_PARAMを修正したらもういちどプログラムを書込みます。
このとき併せて #if 1 を #if 0 に戻します。
起動後にスマートフォンを乗せると、ちゃんとそれらしい重量がとれるようになりました。
(※物を乗せたまま起動すると正しく値が表示されません。起動時は上に物が無いようにしましょう。)
228.9gからは多少誤差が出ていますのでもう少し調整が必要そうですが、とりあえずは実用になりそうな感じです。今回5Kgのロードセルを使いましたが、測定するたび±1gくらいは値が揺れるようですね。Amazonの商品ページにも精度1グラムとありましたので、だいたい仕様通りかなと思います。
許容重量の少ないロードセルのほうが制度が高いようなので、測定する対象によってロードセルの選定も必要になりそうです。
というわけで、無事に重量の測定ができることが確認できましたので、引き続き備品管理システムの作成を進めていきたいと思います。
関連記事
-
こんにちは、アバンセシステムのTIGERです。今回は、3Dスキャン技術を使って3Dオブジェク...
公開日:2023.04.14 更新日:2023.04.14
-
はじめまして、アバンセシステムのTIGERです。よろしくお願いします。 今回はRaspber...
公開日:2022.09.09 更新日:2022.09.09
tag : IoT Raspberry Pi
-
ラズパイ実験室 〜いろんなmicroSDで性能を測ってみた〜
こんにちは! IoT時代到来の真っ只中ということで、弊社でも数多くのセンシングデバイスを取り...
公開日:2021.04.30 更新日:2021.06.29
tag : Raspberry Pi
-
WSL2でLocalStackを使ってLambda を実行してみる~実行編~
こんにちは、motoKNです。前回 の続きとなります。 それではローカル環境にLocalSt...
公開日:2023.01.13 更新日:2023.01.13
tag : クラウド
-
WSL2でLocalStackを使ってLambda を実行してみる~構築編~
こんにちは。ラボ記事投稿2回目のmotoKNです。 私自身、今のところ業務でクラウド環境を使...
公開日:2022.09.23 更新日:2022.12.08
tag : クラウド
-
第1回 ルネサスRX64MでBLE通信をしてみよう! ~開発環境準備編
こんにちは!Matsuです。 組み込み機器の世界もいろいろと進化してきました。IoTやスマー...
公開日:2022.06.10 更新日:2022.06.10