ロードセルとADモジュール
ロードセルは、電子はかりなどに使われているセンサです。いろいろな形状があるのですが、右図は今回使用したロードセルです。50Kgまで測定できます。
ロードセルにはひずみゲージが付けられており、その抵抗の変化で、重さを測定するものです。
ロードセルから重さのデータを取得するには、HX711と呼ばれるロードセル用のADモジュールが使われます。
このモジュールでは、標準で1秒間に10回(10Hz)のデータ取得ですが、右上の抵抗(0Ω)を80Hz側にする(短絡)ことで、1秒間に最大80回までのデータ取得が可能になります。
ロードセルとの接続は、左側のE+、E-、A-、A+の4端子を使って接続します。Arduinoとの接続は、右側のGND、DT、SCK、VCCの4端子を接続します。
Arduinoプログラミング
Arduinoでは、HX711用のライブラリがありますので、これを利用すると簡単に重さを測定することができます。ただし、ロードセルには測定できる重さが様々のため、パラメータ設定が必要です。サンプル例を示します。
#include "hx711.h"
// HX711 ( dat, sck ) ピンの設定
HX711 scale( 19, 18 );
// ロードセル設定
#define OUT_VOL 0.001f // 定格出力 [mV/V]
#define LOAD 50000.0f // 定格容量 [kg]
long offset;
int kg = -1;
long gram;
void setup(void) {
Serial.begin( 115200 );
delay(200);
Serial.printf("\n\n" );
Serial.printf("=== start System. ===================\n" );
// HX711 初期化
scale.begin();
if( scale.isReady() ){
scale.setOutVol( OUT_VOL );
scale.setLoad( LOAD );
delay(50);
long sum=0;
for(int i=0;i<10;i++){
sum += abs( scale.getGram() );
}
offset = sum / 10;
}
}
int readWeightKg(){
kg= -1;
if( scale.isReady() ){
gram = abs( abs(scale.getGram()) - offset ) ;
kg = (int)(( gram ) / 1000 );
if( kg < 0 ) kg = 0;
}else{
kg = -1;
}
return kg;
}
int cntKg= 0;
int cntLED= 0;
void loop(void) {
delay(1);
cntKg++;
if( cntKg > 100 ) {
cntKg=0;
int kg = readWeightKg();
if( kg >= kg_TH ){
Serial.printf("Weight: %4ld[g]\n", gram );
}
}
}<10 -="" 0="" 1000="" 10="" abs="" cntkg="" cntled="0;" delay="" else="" gram="" i="" if="" int="" kg="" loop="" offset="" readweightkg="" return="" scale.getgram="" scale.isready="" sum="" void="">
10>

プログラムでは、ロードセルのばらつきがあるため、setup()内で初期化後に、10回読み込み、平均を取ってオフセット値を計算しています。
実際の値は、読み込んだ値からオフセット値を引いたものが、実際の重量となります。
実行結果は右のシリアルモニタです。
参考にソースコードを見る方は次のリンクからご覧ください。
ソースコード