重量センサーを使ってみた
重量センサーで遊びたいと思い、とりあえずobnizに繋いでみました
試しにちゃんと測れるか確認してみます
↓「12グラム」です。ちなみにこのプラモデルはヘキサギアの「ビアンコ」というものです。
const Obniz = require('obniz');
const obniz = new Obniz('xxxx-xxxx');
obniz.onconnect = async () => {
//ロードセルを使用
var sensor = obniz.wired('hx711' , {gnd:0, dout:1, sck:2, vcc:3} );
var value = await sensor.getValueWait(1); //1 times average
console.log('grams:' + value );
};
↓「301971」と計測されました
ちなみに何も置いていないと「297300」になりました。
どうやらそのままでグラムにはならないようです。
何も置いていない状態で0グラムになる&何か置いたらちゃんとグラムで測れるようにしたいです。
調べてみると、
setOffset
setScale
を設定しないとだめのようだったので試してみます。
まずsetoffsetを設定しました。
何も置いていない状態での計測結果をそのまま設定すると、計測値がゼロに近くなりました。
計測器が少なからず歪んでいるのでその補正をしなければいけない。と理解しました。
この状態で先ほどの「ビアンコ」を載せると、5020という数字が出ました。
const Obniz = require('obniz');
const obniz = new Obniz('xxxx-xxxx');
obniz.onconnect = async () => {
//ロードセルを使用
var sensor = obniz.wired('hx711' , {gnd:0, dout:1, sck:2, vcc:3} );
sensor.setOffset(297300);
var value = await sensor.getValueWait(1); //1 times average
console.log('grams:' + value );
};
次にsetScaleを設定しました。
12グラムのものが5020を計測されるので、按分して係数を求めて「418」という数字が出しました。
この数字をsetScaleに設定します。
小数点がたくさんついたので小数点の処理も追加しました。
const Obniz = require('obniz');
const obniz = new Obniz('xxxx-xxxx');
obniz.onconnect = async () => {
//ロードセルを使用
var sensor = obniz.wired('hx711' , {gnd:0, dout:1, sck:2, vcc:3} );
sensor.setScale(418);
sensor.setOffset(297300);
var value = await sensor.getValueWait(1); //1 times average
var grams = Math.ceil(value);
console.log('grams:' + grams);
};
別のものを載せても正しくグラムが測れたので
ややブレが生じることがあるものの、ひとまずはこれでよしとしました。
まとめ
重量センサーを使うときは、「setOffset」「setScale」を設定する必要がある。
①何も置いていない状態で計測する。
②計測された数字を「setOffset」に設定する。
③何か適当な重さのモノを計測した数字と、そのモノのグラム数を案分する
④按分した結果を「setScale」に設定する。
とりあえず、この流れをやればブレはあるもののグラムを計測することができそうです。
こういうのをキャリブレーションというみたいです。
多少ブレが生じることもあるので、もっと正しい使い方がありそうです。
数グラムの誤差があってもやりたいことができないことをなさそうなのでこのまま行こうと思います。
どなたか正しいやり方があれば教えてください。