WioNodeをArduino化して遊んでたら,重さ測れたら楽しいよね.という声がどこからか聞こえてきたのでやってみました.
HX711って5V駆動な品かと思ったら3.3v駆動なマイコンでもいけるっぽい?
ちょっと試してみました.
WioNodeと繋いでみた

今回はAmazonで買った安いHX711基板を使用しています.
ロードセルはビーム型.1kgまで計測できるモノです.

ビーム型のロードセル向けにthingiverseにこんな3Dモデルが落ちているのでサクッと打ち出してみました.
3Dプリンタが無い人は,Amazonのこの辺を使ってみると良いかも.
もう片側はUARTのままで,シリアル経由で結果を吐き出してます
コードはこんな感じ
# include "HX711.h"
const uint8_t PORT0A = 1;
const uint8_t PORT0B = 3;
const uint8_t PORT1A = 4;
const uint8_t PORT1B = 5;
const uint8_t PORT_POWER = 15; // (common with RED_LED)
//set PORT_POWER as HIGH for power supply. Low means no power.
const uint8_t FUNC_BTN = 0;
const uint8_t BLUE_LED = 2;
const uint8_t RED_LED = PORT_POWER;
const uint8_t UART_TX = PORT0A;
const uint8_t UART_RX = PORT0B;
const uint8_t I2C_SDA = PORT1A;
const uint8_t I2C_SCL = PORT1B;
// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = PORT1B;
const int LOADCELL_SCK_PIN = PORT1A;
HX711 scale;
void setup() {
// ----------
// デバッグ用のシリアル通信の初期化
Serial.begin(9600);
while (!Serial); //waits for serial terminal to be open, necessary in newer arduino boards.
Serial.println("HX711 demo");
// ----------
// IO周りの初期化
pinMode(PORT1B, INPUT);
pinMode(FUNC_BTN, INPUT);
pinMode(BLUE_LED, OUTPUT);
pinMode(PORT_POWER, OUTPUT);
digitalWrite(PORT_POWER, HIGH);
digitalWrite(BLUE_LED, HIGH);
// ----------
// HX711の初期化
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(2280.f); // this value is obtained by calibrating the scale with known weights; see the README for details
scale.tare(); // reset the scale to 0
}
void loop() {
if (scale.is_ready()) {
Serial.print("meas : ");
Serial.println(scale.get_units(10), 1);
} else {
Serial.println("HX711 not found.");
}
delay(100);
}
分銅を使った動作確認

10gから900gの間で検証してみた所,こんな具合でした.
重量が増していくと差が出てきちゃいますね.数点計測した結果からキャリブレーションかけた方がより正しい数値になるんだろうな.
【オマケ】3.3vで動作させる場合は,20kΩの抵抗を10kΩに変更した方が良いみたい
どうもHX711は2.7~5.5vまでの範囲で動作するようですが,VFBピンに入れる電圧の観点から3.3v駆動させる場合は,分圧している抵抗値を変更すべきのようです.
(改造せずとも結果的には正しく動作しましたが、ちょっと気持ち悪いので私は10kΩ抵抗に改造しました
以上,WioNodeをArduino化してHX711を使ってみた話でした.