Arduinoでロードセルを使う方法|HX711の配線・校正・重さ測定

プログラミング・電子工作






Arduinoでロードセルを使う方法|HX711で重さ・荷重を測定







センサー / 初心者

Arduinoでロードセルを使う方法|HX711で重さ・荷重を測定

ロードセルは、体重計やキッチンスケールの中にも使われている、重さや荷重を測るためのセンサーです。ただし、ロードセル単体の出力はごくわずかな電圧変化にすぎず、Arduinoのアナログ入力で直接読み取ることはできません。そこで登場するのが、専用のアンプ(増幅・変換モジュール)である「HX711」です。本記事では、配線からライブラリのインストール、正確なキャリブレーション手順、安定して測定するコツまで、初心者の方に向けて順を追って解説します。

YOFUKASI LAB編集部
公開日:2026年9月25日
読了目安:15分

執筆・実機検証:YOFUKASI LAB運営者

理学療法士/Arduino・Pythonを使った医療機器制作・学会発表経験あり

Chapter 01 / Basics

01ロードセルとHX711とは|仕組みを理解する

ロードセルのひずみをHX711で増幅してArduinoで重さとして読み取る仕組み

ロードセルは「ひずみ」を電気信号に変える部品

ロードセルは、金属の板にひずみゲージという特殊な抵抗線が貼り付けられたセンサーです。重さがかかると、金属がごくわずかにたわみます。このたわみ(ひずみ)によって、ひずみゲージの電気抵抗がほんの少しだけ変化します。4本の抵抗を「ホイートストンブリッジ」という回路構成で組み合わせることで、重さに比例したごく小さな電圧差として取り出せる仕組みです。ホビー向けでよく使われるのは、片側を固定して使う「ロードセル(棒状・バー型)」で、1kg〜50kg程度まで、さまざまな定格のものが販売されています。

HX711が必要な理由

ロードセルが出力する電圧の変化は、フルスケールでもわずか数mV程度しかありません。ArduinoのanalogRead()で直接読み取るには小さすぎて、実用的な精度が得られません。そこで使われるのが「HX711」という24ビットのAD変換(アナログ→デジタル変換)専用ICです。HX711モジュールは、この微小な電圧を増幅したうえでデジタル値に変換し、DT(データ)とSCK(クロック)というたった2本の信号線でArduinoに送ってくれます。土壌水分センサーや可変抵抗のようにanalogReadで済むセンサーとは、この点が大きく異なります。

編集部想定シナリオ

理学療法の臨床現場で握力や下肢の荷重を数値化したいと考えたSさんは、最初「ロードセルをそのままanalogReadで読めるはず」と考えて配線してみた。しかし、値はほとんど変化せず、ノイズだらけの数値が表示されるだけだった。調べてみると、ロードセル単体の出力は数mVしかなく、Arduinoの10ビットADCでは分解能が全く足りていなかった。HX711を挟むことで、この問題はすぐに解決した。HX711は24ビットの分解能を持ち、微小な電圧変化を精度よくデジタル値に変換してくれるためだ。



Chapter 02 / Parts

02必要なもの|部品を揃える

Arduinoとロードセル、HX711を使った重さ測定に必要な部品一覧

今回使用する部品

部品 目安価格 選び方のポイント
Arduino Uno(またはNano等) 2,000〜3,500円 DT・SCK用に空きデジタルピンが2本あればOK
ロードセル(バー型) 500〜1,500円 測定したい最大重量の1.2〜1.5倍程度の定格を選ぶ
HX711モジュール 200〜500円 ロードセル用の4ピン端子台が付いているものが便利
ブレッドボード・ジャンパー線 数百円 配線数は少ないので、小型のもので十分
キャリブレーション用の重り 手持ちのもので可 正確な重さが分かっているもの(水500mLペットボトル等)

※ロードセルとHX711は、セット販売されていることも多く、初めての場合はセット品がおすすめです。

ロードセルの取り付け方について

バー型のロードセルは、片方の端をしっかり固定し、もう片方の端に台や皿を取り付けて、そこに荷重をかける使い方が基本です。取り付けが左右非対称だったり、固定が甘かったりすると、正確な値が出にくくなります。多くの製品には、固定用・荷重用それぞれにネジ穴が空いているので、説明書の向きに合わせて土台に固定しましょう。

Chapter 03 / Wiring

03配線方法:ロードセル → HX711 → Arduino

ロードセルからHX711、Arduino Unoまでの配線方法

ロードセルの4本線とHX711の対応

ロードセルからは、通常4本の配線が出ています。多くの製品では、次のような色分けになっています。ただし、これはあくまで一般的な傾向であり、メーカーによって色の割り当てが異なる場合があるため、購入時の説明書も必ず確認してください。

ロードセルの線の色 役割 HX711側の接続端子
赤 励起電圧(+) E+
黒 励起電圧(-) E-
緑 信号出力(+) A+
白 信号出力(-) A-

※白と緑(A-とA+)が入れ替わっていても壊れることはありません。この場合は、6章で説明するキャリブレーション係数がマイナスの値になるだけです。

HX711とArduinoの配線

HX711側からArduinoへの配線は、電源2本と信号2本の、合計4本だけです。とてもシンプルです。

HX711側 Arduino側
VCC 5V
GND GND
DT(DOUT) デジタルピン 2
SCK デジタルピン 3
[画像挿入位置]ロードセル・HX711・Arduino Unoの配線図(E+/E-/A+/A-とDT・SCKの接続関係がわかるもの)

配線時の注意点

HX711の多くの基板は、2.6V〜5.5Vの範囲で動作しますが、ロジック(DT・SCKの信号電圧)はVCCに連動するタイプが一般的です。Arduino Unoのように5V系のボードでは、VCCも5Vにつないで問題ありません。3.3V系のボード(一部のESP32等)で使う場合は、対応電圧をよく確認してから接続してください。また、配線が長いとノイズを拾いやすくなるため、可能な範囲で配線は短くまとめることをおすすめします。



Chapter 04 / Library

04HX711ライブラリのインストール

Arduino IDEでHX711ライブラリをインストールして生の値を確認する手順

HX711は、生のデジタル値を送ってくるだけのICです。そこから重さを計算する処理を自前で書くのは大変なので、専用ライブラリを使うのが定番です。定番かつ広く使われているのは、Bogdan Necula氏が公開している「HX711 Arduino Library」です。

1

ライブラリマネージャを開く

Arduino IDEのメニューから「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」を選びます。

2

「HX711」で検索する

検索欄に「HX711」と入力します。「HX711 Arduino Library by Bogdan Necula」が候補に表示されます。

3

インストールする

該当のライブラリを選び、「インストール」ボタンを押します。数秒でインストールが完了します。

4

スケッチ例で動作確認する

「ファイル」→「スケッチ例」→「HX711」の中に、サンプルスケッチが入っています。まずはこれを書き込んで、生の値が表示されるか確認しておくと安心です。

Chapter 05 / Basic Code

05基本コード|生の値を読み取る

ロードセルとHX711のキャリブレーションで重さを正確に測る手順

まずは生の値を表示してみる

配線とライブラリの準備ができたら、まずはキャリブレーションなしで、生のデジタル値を読み取ってみましょう。この段階では「重さ」ではなく、HX711が変換した数値そのものが表示されます。

// HX711の生の値を表示するコード
#include "HX711.h"

const int DT_PIN = 2;
const int SCK_PIN = 3;

HX711 scale;

void setup() {
  Serial.begin(9600);
  scale.begin(DT_PIN, SCK_PIN);
}

void loop() {
  if (scale.is_ready()) {
    long reading = scale.read();  // 生のADC値を1回読み取る
    Serial.print("生の値: ");
    Serial.println(reading);
  } else {
    Serial.println("HX711が見つかりません。配線を確認してください。");
  }
  delay(500);
}

何も乗っていない状態でも値が出る理由

ロードセルに何も乗せていない状態でも、ゼロぴったりにはならず、何らかの数値が表示されます。これは異常ではありません。ロードセル自体の重さや、取り付け誤差などによる「オフセット」が含まれているためです。このオフセットを取り除く作業が、次の章で説明するtare()(風袋引き)です。



Chapter 06 / Calibration

06【最重要】キャリブレーション(校正)の手順

キャリブレーションが必要な理由

HX711が出力する生の値は、あくまでも「ADCが変換した数値」であり、そのままでは「グラム」や「キログラム」の単位になっていません。ロードセルごとに感度がわずかに異なるため、生の値と実際の重さの関係を、自分の手で一度確定させる必要があります。この作業がキャリブレーション(校正)です。ライブラリ内部では、次の式で重さを計算しています。

重さ = (生の値 − オフセット) ÷ キャリブレーション係数

オフセットはtare()で自動的に求められます。キャリブレーション係数だけを、既知の重さを使って自分で求める必要があります。

手順①:風袋引き(tare)で基準ゼロを決める

1

ロードセルに何も乗せない状態にする

台や皿は取り付けたままで構いませんが、測定したいもの(重り)は乗せない状態にします。

2

scale.tare()を実行する

この状態でscale.tare()を呼び出すと、そのときの生の値がオフセットとして記録され、以後は「ゼロ」を基準に計算されるようになります。

手順②:既知の重さを乗せて係数を計算する

3

正確な重さが分かっているものを用意する

水500mLのペットボトル(約500g)や、キッチンスケールで測った重りなど、正確な重さが分かっているものを用意します。

4

set_scaleを一時的に1にして、生の値を読む

scale.set_scale()を引数なしで呼び出すと、係数が1に設定されます。この状態で重りを乗せ、scale.get_units(10)(10回平均)を実行し、表示された数値をメモします。

5

「読み取った値 ÷ 既知の重さ」で係数を計算する

例えば、500gの重りで読み取った値が「104,300」だった場合、係数は 104300 ÷ 500 = 208.6 です。この数値を、コードのcalibration_factorに設定します。

キャリブレーション用スケッチ

// HX711のキャリブレーション用コード
#include "HX711.h"

const int DT_PIN = 2;
const int SCK_PIN = 3;

HX711 scale;

void setup() {
  Serial.begin(9600);
  scale.begin(DT_PIN, SCK_PIN);

  Serial.println("ロードセルに何も乗せずにEnterを押してください");
  while (!Serial.available()) {
    delay(10);
  }
  while (Serial.available()) { Serial.read(); }  // バッファをクリア

  scale.set_scale();  // 係数を一旦1にする
  scale.tare();        // ゼロ点(オフセット)を記録
  Serial.println("ゼロ点の記録が完了しました");
}

void loop() {
  Serial.print("生の値(10回平均): ");
  Serial.println(scale.get_units(10));
  delay(1000);
}

このコードを書き込み、シリアルモニタで何も乗せていない状態を確認したらEnterを送信します。その後、既知の重さの物を乗せ、表示された値をメモして、係数を計算してください。



Chapter 07 / Practical Code

07実践コード|安定した重さ表示にする

HX711で重さの測定値を安定させる平均化とtareのポイント

係数を組み込んだ完成版コード

6章で求めたキャリブレーション係数を使えば、生の値ではなく、実際の重さ(グラム)を直接表示できるようになります。

// キャリブレーション済みの重さ測定コード
#include "HX711.h"

const int DT_PIN = 2;
const int SCK_PIN = 3;
const float CALIBRATION_FACTOR = 208.6;  // 6章で計算した自分の係数に置き換える

HX711 scale;

void setup() {
  Serial.begin(9600);
  scale.begin(DT_PIN, SCK_PIN);
  scale.set_scale(CALIBRATION_FACTOR);
  scale.tare();  // 起動時に空の状態でゼロ点を記録
  Serial.println("準備完了。重さの測定を開始します。");
}

void loop() {
  float weight = scale.get_units(10);  // 10回平均で安定させる

  if (weight < 0) weight = 0;  // マイナス表示のブレを丸める

  Serial.print("重さ: ");
  Serial.print(weight, 1);
  Serial.println(" g");

  delay(300);
}

測定を安定させる4つのポイント

①

平均回数(get_unitsの引数)を増やす

get_units(1)のように平均回数が少ないと、値がチラチラと揺れやすくなります。10〜20回程度の平均にすると、ノイズが大きく減ります。ただし増やしすぎると表示の更新が遅くなるため、用途に応じたバランスが必要です。

②

電源を安定させる

USBポートによっては電源品質にばらつきがあります。パソコンのUSBポートで値が不安定な場合、ACアダプター経由のUSB電源に変えるだけで安定することがあります。

③

荷重は台の中心にかける

バー型ロードセルは、荷重がかかる位置によって値が変わりやすい特性があります。皿や台を取り付ける際は、中心に荷重がかかるよう設計しましょう。

④

使う直前にtare()し直す

温度変化や時間経過によって、ゼロ点はわずかにドリフト(ずれ)することがあります。厳密な測定が必要な場面では、測定の直前に風袋引きをやり直すと安心です。

Chapter 08 / Application

08応用|リハビリ・作品制作への活用例

Arduinoとロードセルを使ったデジタルはかりや荷重測定の応用例

荷重を数値化するリハビリ分野での活用

ロードセルとHX711の組み合わせは、重さを正確に数値化できるという特性上、リハビリテーションの現場とも相性が良い技術です。例えば、片脚立位や座位での荷重を台の下に設置したロードセルで測定し、左右差を数値として記録する、握力の変化を経時的に記録する、といった使い方が考えられます。実際の臨床応用や医療機器としての利用にあたっては、精度の妥当性検証や安全面の検討が別途必要になりますが、まずは仕組みを理解し、試作段階で数値の変化を可視化してみることは、アイデアの検証に役立ちます。

応用アイデア

台の四隅にロードセルを1つずつ、計4個配置すれば、重心の左右差・前後差まで推定できるようになります。HX711は1個のICにつきロードセル1個が基本ですが、Arduino側のDT・SCKピンを増やせば、複数のHX711を同時に扱うことも可能です。得られた数値をシリアル通信でPythonに送り、グラフとして可視化する、という組み合わせも定番のアプローチです。

作品制作でのアイデア

重さをトリガーにしたインタラクティブな作品も作れます。例えば、一定以上の重さが乗ったらLEDやブザーで知らせる、荷重の変化をきっかけにアニメーションを再生する、といった仕組みです。if文と組み合わせるだけで、幅広い応用が可能になります。



Chapter 09 / Troubleshooting

09よくあるトラブルと対処法

HX711とロードセルで値が出ない・マイナスになる・揺れる場合の対処法

症状別の対処早見表

症状 主な原因 対処法
「HX711が見つかりません」と表示される DT・SCKの配線ミス、またはピン番号の指定違い 3章の配線表とコード内のDT_PIN・SCK_PINの数値を照合する
値が常にほぼ0のまま変化しない E+/E-の配線ミス、またはロードセルの取り付け不良 励起電圧側(E+・E-、通常は赤・黒)の配線を確認する
重さを乗せると値がマイナスになる A+/A-(信号側)の配線が逆 白と緑の配線を入れ替えるか、係数の符号を逆にする
数値が細かく揺れて安定しない 平均回数不足、電源品質、配線ノイズ get_units()の平均回数を増やし、電源をACアダプター経由に変える(7章参照)
時間が経つとゼロ点がずれてくる 温度変化や機械的なドリフト 測定の直前にtare()をやり直す運用にする
係数を設定しても重さが実際とズレる キャリブレーション時の既知重量が不正確 より正確に重さが分かっている物でキャリブレーションをやり直す(6章参照)

原因を素早く切り分けるコツ

編集部想定シナリオ

Tさんは配線を終えてコードを書き込んだが、シリアルモニタに「HX711が見つかりません」と表示され続けた。テスターで確認したところ、DTとSCKの配線が、コード内のピン番号(2番・3番)と逆になっていることが判明した。配線をコードに合わせて修正すると、すぐに値が表示されるようになった。HX711まわりのトラブルの多くは、この手の「番号の食い違い」が原因であるケースが多く見られる。

Chapter 10 / FAQ

10よくある質問

基本のQ&A

Q.キャリブレーション係数(calibration_factor)がマイナスになります。故障でしょうか?
A.故障ではありません。ロードセルの4本の配線のうち、A+とA-(白と緑)が入れ替わっていると、重さが増えるほど生の値が小さくなり、計算上マイナスの係数になります。配線を入れ替えるか、コード側でset_scale()に渡す値の符号を逆にすれば、プラスの値として扱えます。

Q.重さの表示が毎回少しずつ違う値になります。安定させるにはどうすればいいですか?
A.get_units()の引数に10〜20程度の数値を渡して複数回のサンプルを平均する、測定のたびにtare()をやり直さない、電源をUSB経由の安定した供給にする、ロードセルの4隅すべてに均等に荷重がかかる状態で使う、の4点を見直してみてください。特に平均回数を増やすだけでも、ノイズはかなり収まります。

応用のQ&A

Q.何kgまでのロードセルを選べばいいですか?
A.測定したい最大重量の1.2〜1.5倍程度の定格のものを選ぶのが目安です。定格ぎりぎりで使い続けると、金属部分にひずみが残ってしまい、精度が落ちる原因になります。逆に定格が大きすぎると、軽いものを測定したときの分解能(読み取れる最小の重さの変化)が粗くなる点にも注意してください。

Q.HX711はArduino UnoとNanoのどちらでも使えますか?
A.どちらでも使えます。HX711はDT・SCKという2本のデジタルピンだけで通信するシンプルな仕組みのため、特定のボードのSPIやI2Cピンを占有しません。空いているデジタルピンが2本あれば、Uno・Nano・Mega・Leonardoなど、多くのArduino系ボードで動作します。

関連記事・参考資料

基礎を学べる記事

  1. YOFUKASI LAB「Arduinoで使える定番センサー30選」2026年, https://yofukasi-lab-wp.com/2026/09/11/arduino-30-sensors-guide/
  2. YOFUKASI LAB「【完全攻略】圧センサーを用いた電子工作の基礎編」2025年, https://yofukasi-lab-wp.com/2025/03/08/pressure/
  3. YOFUKASI LAB「Arduinoに必要な工具・部品リスト」2026年, https://yofukasi-lab-wp.com/2026/08/22/arduino-tools-parts/
  4. YOFUKASI LAB「Arduinoライブラリの入れ方・作り方・管理方法まとめ」2026年, https://yofukasi-lab-wp.com/2026/08/22/arduino-library-install-create-manage/

応用・関連記事

  1. YOFUKASI LAB「ArduinoとPythonとセンサーを用いたリハビリテーションへの応用」2026年, https://yofukasi-lab-wp.com/2026/07/11/rehabilitation/
  2. YOFUKASI LAB「Arduinoで作るインソール型センサーとリハビリ応用」2026年, https://yofukasi-lab-wp.com/2026/07/25/arduino-insole/
  3. YOFUKASI LAB「リアルタイム握力計測ゲームのコードを徹底解説」2025年, https://yofukasi-lab-wp.com/2025/03/12/force/
  4. YOFUKASI LAB「ArduinoでSDカードにCSV保存する方法」2026年, https://yofukasi-lab-wp.com/2026/08/31/arduino-sd-card-csv-save/
  5. YOFUKASI LAB「Arduinoのコンパイルエラー一覧」2026年, https://yofukasi-lab-wp.com/2026/07/30/error/

参考資料(外部・一次情報)

  1. bogde「HX711 Arduino Library」GitHub, https://github.com/bogde/HX711
  2. Last Minute Engineers「Build a Digital Weighing Scale with HX711 and Arduino」, https://lastminuteengineers.com/hx711-load-cell-digital-weighing-scale-arduino-tutorial/
  3. Random Nerd Tutorials「Arduino with Load Cell and HX711 Amplifier (Digital Scale)」, https://randomnerdtutorials.com/arduino-load-cell-hx711/

※本記事は個人の学習・電子工作用途を対象にしています。医療機器や製品として実際に運用する場合は、精度検証・電気安全・関連法規について専門家に別途ご相談ください。


関連記事

特集記事

コメント

この記事へのコメントはありません。

TOP
CLOSE