スケール(はかり)を作る
M5Stack を使ってはかりをつくるために試行錯誤したので記録しておきます。
今回は5kgまで測定できるはかりを作りました。
材料
- M5Stack Basic
- Groveケーブル
- ジャンパワイヤ4本
-
デジタルロードセル 下の写真のように組み立て済みのタイプなので使いやすいです。5kgまで測れます。
つなぎ方
写真のようにつなぎます。
ロードセルに繋がっている基板(HX711)に、セット品であるワイヤー(両端メス)を接続した後、Groveケーブルに接続します。
私は今回、間にジャンパワイヤ(両端オス)を挟んで接続しました。
HX711 VCC -(紫)-(赤)- M5Stack 5V
HX711 SCK -(灰)-(白)- M5Stack 22ピン(SCL)
HX711 DT -(白)-(黄)- M5Stack 21ピン(SDA)
HX711 GND -(黒)-(黒)- M5Stack GND
プログラム
利用するライブラリはこちら(https://github.com/bogde/HX711)
ソースコードは以下のように書きました。
#include <M5Stack.h> // M5Stackを使用
#include <HX711.h>
// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 21;
const int LOADCELL_SCK_PIN = 22;
void setup() {
M5.begin();
M5.Lcd.setTextSize(2); // 文字サイズを2にする
M5.Lcd.fillScreen(BLACK); // 背景を黒にする
Serial.begin(115200);
Serial.println("Initializing the scale");
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
// scale.set_scale(LOADCELL_DIVIDER);
// scale.set_offset(LOADCELL_OFFSET);
// ☆それぞれの環境で適切な値を設定する☆
scale.set_scale(475.f);
// 現在を0gにセット
scale.tare(); // reset the scale to 0
}
void loop() {
if (M5.BtnA.wasPressed()) {
Serial.println("M5.BtnA.wasPressed()");
// ☆それぞれの環境で適切な値を設定する☆
scale.set_scale(475.f);
// 現在を0gにセット
scale.tare();
}
M5.update();
int weight = scale.get_units(5);
M5.Lcd.setCursor(40,30,4);
M5.Lcd.printf("%1d g ", weight);
M5.Lcd.fillRect(0, 80, 320, 80, TFT_BLACK);
M5.Lcd.fillRect(0, 80, weight*0.16, 80, TFT_BLUE);
Serial.print("average:\t");
Serial.println(weight, 1);
}
最初にやることは、
scale.set_scale(475.f);
… 「☆それぞれの環境で適切な値を設定する」という部分。後述します。
scale.tare();
… 現在を0グラムとしてリセット
の2行だけ。
あとは測定時に、
int weight = scale.get_units(5);
で値がとれます。
引数の5というのは5回計測した平均値を出力するということだそうです。
HX711について色々情報があって混乱したのですが、
scale.set_offset()
などは使わなくて大丈夫でした。
set_scaleに設定する値
プログラム中の☆の部分、set_scaleには引数にそれぞれの環境に合った値を引数にセットしなくてはなりません。
この値を何にすればよいか調べる方法なのですが、適当な値を入れて試してみて、実際にあるたとえば65グラムの物が正しく65グラムと測定される値になるように値を変更して測定して~を繰り返して割り出しました。
大変だったところ
結構簡単かなと思いきや時間がかかってしまいました。
じつは最初M5StickCでやっていたのですがどうしても調整しても測定値が定まらず、途中うまくできた!と思った瞬間はあったのですがそのあともおかしくなり最終的には何も載せていない0gのときも値が変動し始めたのでこれはおかしいと思ってM5Stack Basicに変更してやっと安定しました。