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

ロードセルは「ひずみ」を電気信号に変える部品
ロードセルは、金属の板にひずみゲージという特殊な抵抗線が貼り付けられたセンサーです。重さがかかると、金属がごくわずかにたわみます。このたわみ(ひずみ)によって、ひずみゲージの電気抵抗がほんの少しだけ変化します。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ビットの分解能を持ち、微小な電圧変化を精度よくデジタル値に変換してくれるためだ。
02必要なもの|部品を揃える

今回使用する部品
| 部品 | 目安価格 | 選び方のポイント |
|---|---|---|
| Arduino Uno(またはNano等) | 2,000〜3,500円 | DT・SCK用に空きデジタルピンが2本あればOK |
| ロードセル(バー型) | 500〜1,500円 | 測定したい最大重量の1.2〜1.5倍程度の定格を選ぶ |
| HX711モジュール | 200〜500円 | ロードセル用の4ピン端子台が付いているものが便利 |
| ブレッドボード・ジャンパー線 | 数百円 | 配線数は少ないので、小型のもので十分 |
| キャリブレーション用の重り | 手持ちのもので可 | 正確な重さが分かっているもの(水500mLペットボトル等) |
※ロードセルとHX711は、セット販売されていることも多く、初めての場合はセット品がおすすめです。
ロードセルの取り付け方について
バー型のロードセルは、片方の端をしっかり固定し、もう片方の端に台や皿を取り付けて、そこに荷重をかける使い方が基本です。取り付けが左右非対称だったり、固定が甘かったりすると、正確な値が出にくくなります。多くの製品には、固定用・荷重用それぞれにネジ穴が空いているので、説明書の向きに合わせて土台に固定しましょう。
03配線方法:ロードセル → HX711 → Arduino

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

HX711は、生のデジタル値を送ってくるだけのICです。そこから重さを計算する処理を自前で書くのは大変なので、専用ライブラリを使うのが定番です。定番かつ広く使われているのは、Bogdan Necula氏が公開している「HX711 Arduino Library」です。
ライブラリマネージャを開く
Arduino IDEのメニューから「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」を選びます。
「HX711」で検索する
検索欄に「HX711」と入力します。「HX711 Arduino Library by Bogdan Necula」が候補に表示されます。
インストールする
該当のライブラリを選び、「インストール」ボタンを押します。数秒でインストールが完了します。
スケッチ例で動作確認する
「ファイル」→「スケッチ例」→「HX711」の中に、サンプルスケッチが入っています。まずはこれを書き込んで、生の値が表示されるか確認しておくと安心です。
05基本コード|生の値を読み取る

まずは生の値を表示してみる
配線とライブラリの準備ができたら、まずはキャリブレーションなしで、生のデジタル値を読み取ってみましょう。この段階では「重さ」ではなく、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()(風袋引き)です。
06【最重要】キャリブレーション(校正)の手順
キャリブレーションが必要な理由
HX711が出力する生の値は、あくまでも「ADCが変換した数値」であり、そのままでは「グラム」や「キログラム」の単位になっていません。ロードセルごとに感度がわずかに異なるため、生の値と実際の重さの関係を、自分の手で一度確定させる必要があります。この作業がキャリブレーション(校正)です。ライブラリ内部では、次の式で重さを計算しています。
重さ = (生の値 − オフセット) ÷ キャリブレーション係数
オフセットはtare()で自動的に求められます。キャリブレーション係数だけを、既知の重さを使って自分で求める必要があります。
手順①:風袋引き(tare)で基準ゼロを決める
ロードセルに何も乗せない状態にする
台や皿は取り付けたままで構いませんが、測定したいもの(重り)は乗せない状態にします。
scale.tare()を実行する
この状態でscale.tare()を呼び出すと、そのときの生の値がオフセットとして記録され、以後は「ゼロ」を基準に計算されるようになります。
手順②:既知の重さを乗せて係数を計算する
正確な重さが分かっているものを用意する
水500mLのペットボトル(約500g)や、キッチンスケールで測った重りなど、正確な重さが分かっているものを用意します。
set_scaleを一時的に1にして、生の値を読む
scale.set_scale()を引数なしで呼び出すと、係数が1に設定されます。この状態で重りを乗せ、scale.get_units(10)(10回平均)を実行し、表示された数値をメモします。
「読み取った値 ÷ 既知の重さ」で係数を計算する
例えば、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を送信します。その後、既知の重さの物を乗せ、表示された値をメモして、係数を計算してください。
07実践コード|安定した重さ表示にする

係数を組み込んだ完成版コード
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()し直す
温度変化や時間経過によって、ゼロ点はわずかにドリフト(ずれ)することがあります。厳密な測定が必要な場面では、測定の直前に風袋引きをやり直すと安心です。
08応用|リハビリ・作品制作への活用例

荷重を数値化するリハビリ分野での活用
ロードセルとHX711の組み合わせは、重さを正確に数値化できるという特性上、リハビリテーションの現場とも相性が良い技術です。例えば、片脚立位や座位での荷重を台の下に設置したロードセルで測定し、左右差を数値として記録する、握力の変化を経時的に記録する、といった使い方が考えられます。実際の臨床応用や医療機器としての利用にあたっては、精度の妥当性検証や安全面の検討が別途必要になりますが、まずは仕組みを理解し、試作段階で数値の変化を可視化してみることは、アイデアの検証に役立ちます。
台の四隅にロードセルを1つずつ、計4個配置すれば、重心の左右差・前後差まで推定できるようになります。HX711は1個のICにつきロードセル1個が基本ですが、Arduino側のDT・SCKピンを増やせば、複数のHX711を同時に扱うことも可能です。得られた数値をシリアル通信でPythonに送り、グラフとして可視化する、という組み合わせも定番のアプローチです。
作品制作でのアイデア
重さをトリガーにしたインタラクティブな作品も作れます。例えば、一定以上の重さが乗ったらLEDやブザーで知らせる、荷重の変化をきっかけにアニメーションを再生する、といった仕組みです。if文と組み合わせるだけで、幅広い応用が可能になります。
09よくあるトラブルと対処法

症状別の対処早見表
| 症状 | 主な原因 | 対処法 |
|---|---|---|
| 「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まわりのトラブルの多くは、この手の「番号の食い違い」が原因であるケースが多く見られる。
10よくある質問
基本のQ&A
応用のQ&A
関連記事・参考資料
基礎を学べる記事
- YOFUKASI LAB「Arduinoで使える定番センサー30選」2026年, https://yofukasi-lab-wp.com/2026/09/11/arduino-30-sensors-guide/
- YOFUKASI LAB「【完全攻略】圧センサーを用いた電子工作の基礎編」2025年, https://yofukasi-lab-wp.com/2025/03/08/pressure/
- YOFUKASI LAB「Arduinoに必要な工具・部品リスト」2026年, https://yofukasi-lab-wp.com/2026/08/22/arduino-tools-parts/
- YOFUKASI LAB「Arduinoライブラリの入れ方・作り方・管理方法まとめ」2026年, https://yofukasi-lab-wp.com/2026/08/22/arduino-library-install-create-manage/
応用・関連記事
- YOFUKASI LAB「ArduinoとPythonとセンサーを用いたリハビリテーションへの応用」2026年, https://yofukasi-lab-wp.com/2026/07/11/rehabilitation/
- YOFUKASI LAB「Arduinoで作るインソール型センサーとリハビリ応用」2026年, https://yofukasi-lab-wp.com/2026/07/25/arduino-insole/
- YOFUKASI LAB「リアルタイム握力計測ゲームのコードを徹底解説」2025年, https://yofukasi-lab-wp.com/2025/03/12/force/
- YOFUKASI LAB「ArduinoでSDカードにCSV保存する方法」2026年, https://yofukasi-lab-wp.com/2026/08/31/arduino-sd-card-csv-save/
- YOFUKASI LAB「Arduinoのコンパイルエラー一覧」2026年, https://yofukasi-lab-wp.com/2026/07/30/error/
参考資料(外部・一次情報)
- bogde「HX711 Arduino Library」GitHub, https://github.com/bogde/HX711
- Last Minute Engineers「Build a Digital Weighing Scale with HX711 and Arduino」, https://lastminuteengineers.com/hx711-load-cell-digital-weighing-scale-arduino-tutorial/
- Random Nerd Tutorials「Arduino with Load Cell and HX711 Amplifier (Digital Scale)」, https://randomnerdtutorials.com/arduino-load-cell-hx711/
※本記事は個人の学習・電子工作用途を対象にしています。医療機器や製品として実際に運用する場合は、精度検証・電気安全・関連法規について専門家に別途ご相談ください。
コメント