Arduino UNOで作る高精度電子はかり ─ HX711+ロードセル完全ガイド
概要
3kgロードセルとHX711アンプ、I2C LCDを用いたデジタルはかりをArduino UNOで自作。キャリブレーション手順から実用コードまで、初心者でも迷わず作れるよう詳細に解説します。
必要な部品
- Arduino UNO ×1
- 3kg ロードセル(4線式) ×1
- HX711 ロードセルアンプモジュール ×1
- 16×2 I2C LCD(PCF8574、アドレス0x3F) ×1
- タクトスイッチ ×1(風袋引き/ゼロリセット用)
- ブレッドボード、ジャンパーワイヤー
配線
| HX711 | Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| DT (DOUT) | D3 |
| SCK (CLK) | D2 |
ロードセルの4線(赤E+、黒E-、白A+、緑A-)をHX711の対応端子へ。I2C LCDはSDA→A4、SCL→A5、VCC→5V、GND→GND。タクトスイッチはD7とGND間(内部プルアップ使用)。
ライブラリ
HX711(bogde版推奨)Wire(標準)LiquidCrystal_PCF8574
キャリブレーション手順(最重要)
- ロードセルに何も載せない状態でキャリブレーションスケッチをアップロード
- シリアルモニタを開く(115200bps)
- 既知の重り(例:250g)を載せる
- キー操作で
calibration_factorを調整し、表示値が実重量と一致するまで繰り返すa/s/d/f:大きく増減z/x/c/v:微調整
- 一致した時点での
calibration_factorをメモ - 本番スケッチの
scale.set_scale(メモした値)に反映
本番スケッチ
#include "HX711.h"
#include
#include
#define DOUT 3
#define CLK 2
#define TARE_SW 7
HX711 scale(DOUT, CLK);
LiquidCrystal_PCF8574 lcd(0x3F);
float calibration_factor = -96650; // キャリブレーションで求めた値に書き換え
void setup() {
Wire.begin();
pinMode(TARE_SW, INPUT_PULLUP);
lcd.setBacklight(255);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Nissi 3kg Scale");
lcd.setCursor(0, 1);
lcd.print("Press SW to tare");
scale.set_scale(calibration_factor);
scale.tare(); // 起動時ゼロ点調整
}
void loop() {
lcd.setCursor(0, 1);
lcd.print("W = ");
lcd.setCursor(6, 1);
lcd.print(scale.get_units(), 3); // 小数点3桁
lcd.print(" kg ");
if (digitalRead(TARE_SW) == LOW) {
scale.tare(); // 風袋引き
delay(500); // チャタリング防止
}
}
精度向上のコツ
- ロードセルの固定:ベースと計量皿をしっかり固定し、横力がかからないよう設計
- 温度ドリフト:HX711は温度特性があるため、定温環境推奨。高精度なら温度補正実装を
- 電源安定化:USB給電ではなく、低ノイズな5Vレギュレータ推奨
- 平均化:
scale.get_units(10)のように引数を渡し、複数回平均を取る - キャリブレーション重り:満量付近の既知重り(例:2kg)で合わせると全域で精度向上
拡張アイデア
- EEPROMにキャリブレーション値保存
- 単位切替(g/kg/lb/oz)
- データロギング(SDカード/シリアル出力)
- 閾値アラーム(過重・不足検知)
- バッテリー駆動化(ディープスリープ+定期測定)
よくあるトラブル
| 症状 | 原因・対策 |
|---|---|
| 値が安定しない/ドリフトする | 配線が長い、電源ノイズ、ロードセル固定不良、温度変化 |
| マイナス値が出る | ロードセルの配線極性逆(白緑を入れ替え)、またはtare()未実行 |
| 全く変化しない | HX711不良、クロック/データ線接続間違い、ライブラリバージョン不一致 |
| LCDに何も出ない | I2Cアドレス違い(0x27/0x3F確認)、配線ミス、ライブラリ未導入 |