重量計_HX711-ハーフブリッジロードセル4個
JUGEMテーマ:電子工作
重さをはかるロードセルっていうものを使った事がないので興味が出て
amazonでポチっておいたものが届いたので組み立てて実験してみた話。
ロードセルが四つもくっついてて安いじゃんとか思って買ってみました。
https://www.amazon.co.jp/gp/product/B09YYJCM35/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&th=1
アンプとADコンバーターとしてHX711を使用するわりと一般的なものです。
そしたら・・・ですね。いつものようにハマりポイント有りましたので、
その注意点をお伝えするべく、この記事を書いております。
■色々調べた事まとめ。
参考にしたページ
https://denshikit.main.jp/topf/technology84.html
親切丁寧にまとめてあります。
台所にあるキッチンスケール。
一昔前はバネがくっついてて、押すとへっこむと思ってたんだけど、
今は押してもへっこまないんですね。
ロードセルの設置方法によって微妙な歪みが発生するのでそれを
検出するって事ですね。
んーなるほど。すげー。
■接続図
AMAZONにのっている説明の接続図に従って、接続してみて、
上記参考ページのプログラムをそのまま入れてみました。
arduinoとプログラムは動いている。なんか数字も上げて来てくれるんだけど。
何を乗っけても反応なし。
なんか誤差っぽい数字の違いはあるんですがね。
ここでいろいろ考えて
■ハマりポイント1
なんと、回路図が異なる。
上の図の左上と右下に同じものを異なる方法で図にしてあるんだけど、
よく見ると異なる。おそるべし中国製造2025
見たときに気づいていたんだけど、
他にもハーフブリッジロードセルを販売しているほかの
amazonのページの回路と右下の説明が同じだったため、
右下を採用して接続していたため、動かなかったみたいです。
後で自分で書いた回路図は掲載するけど、左上は正しいっぽい。
■ハマりポイント2
なんと、ロードセルの置き方が難しい。
写真の通り、はんだ付けで使っているゴムの板の上に四つ並べて
上から指とかで押してみるんだけど、
この真ん中の所。ただ置いただけだと下のほうにも出っ張りがあり、
曲がらないんですね。
ロードセルは微妙に曲がらないとですので、
MDF版を加工して真ん中が下に下がるように配置しました。
配置
そして、上に鉄板を置いて、その上に物を載せることで重さが測定できるようになりました。
鉄板
完成
測定
測定2
プログラムは参考ページからほとんど変えておらず、
HX711 から取得した数値を重さに変換する計算式が異なるぐらいです。
■ロードセルスペック
50Kgまで測定できるので4つで200Kgまで測定可能。
ロードセルの中身の抵抗は1KΩで2個入ってて、
ハーフブリッジになっている。
あと温度が上は50℃まで、下は-10℃まで
ぐらい知っていればば普通は大丈夫かな
自分もわからない部分有ります。
英語だしね。
■回路図
■プログラム
long saisyo = 0;
void setup() {
Serial.begin(9600);
Serial.println("start");
pinMode(9, OUTPUT);
pinMode(8, INPUT);
delay(300);
for (char i = 0; i < 24; i++) {
digitalWrite(9, 1);
delayMicroseconds(1);
digitalWrite(9, 0);
delayMicroseconds(1);
saisyo = (saisyo << 1) | (digitalRead(8));
}
saisyo = saisyo ^ 0x800000;
Serial.print("saisyo=");
Serial.println(saisyo);
}
void loop() {
long atai = 0;
for (char i = 0; i < 24; i++) {
digitalWrite(9, 1);
delayMicroseconds(1);
digitalWrite(9, 0);
delayMicroseconds(1);
atai = (atai << 1) | (digitalRead(8));
}
atai = atai ^ 0x800000;
Serial.print("atai=");
Serial.println(atai);
long omosa;
omosa = ((atai - saisyo)) / 216.5227963525836;
omosa = omosa * 10;
Serial.print("omosa=");
Serial.println(omosa);
delay(2000);
}