【esp32】ロードセルで重さをはかる
水耕栽培で使う栽培養液は、苗の時期、生育期、結実期それぞれで消費される養液の量が異なり、天候でも異なってきます。
そこで1日の養液使用量が判れば自動で補充出来て水耕栽培管理が楽になるんじゃない?ということで水耕栽培養液の量を測定してみることにしました。
重さを測る
養液ですので流量計を使う方法も考えられます。
この場合には養液の送った量と戻った(循環)量の差が消費量となり、1日の消費量の総和がその日の消費量という事になりますが、計算する回数が多く成れば誤差も大きくなります。
業務ではともかく、家庭菜園レベルの水耕栽培では循環式水耕栽培だと思うので流量計では誤差が問題になって来ます。
ということで養液タンクの重さを測ることで養液の消費量を管理することにしました。
ロードセルとは
arduinoやesp32を使って重さを測るにはロードセルというセンサーが適しています。
JISではロードセル(Load Cell)は、「加えられた力に対し、ある定義された関係で信号を発生する機器」とされています。
計量法でロードセル独自の規格を設定していませんが、性能試験方法としてJIS(電気式ロードセル性能試験方法 JIS B7602)や JMIF[日本計量機器工業連合会]の 「ロードセルの性能試験方法」で規格化されているようです。
カズが購入したロードセルの精度は±0.05%で、50Kgでは±25gの誤差となります。
ですから、200Kgまで計量できる量りでは4個のロードセルを使いますので±100gの誤差が発生します。
市販の体重計では50.3Kとか100gまでの表示となっているのはそのためですね。
ロードセルの設置
ロードセルを設置するのに合板となども利用できると思うのですがカズは耐圧と腐食などを考慮してブロックにしようと思います。
ロードセルの外枠の中の部分がセンサーになるのでセンサー部分がブロックに接触しないよう1~2mm程度ブロックを削ります。
コンクリートを削る(はつる)平タガネがあると便利ですが左程大きく削る訳ではないので古いマイナスドライバーを代用しました。
アマゾンでは安い平タガネがありましたけど…(^^;
削ったらロードセルを設置します。カズは外枠部分にボンドを塗布してコンクリートブロックに固定しました。
ロードセルの配線
構造:ハーフブリッジ;内部:1000オームハーフブリッジ歪ゲージ;ワイヤ接続:正極は赤、負極は黒、データ出力は白
商品説明欄にはこのように記述されています。
ちょっと判りにくい表現ですがハーフブリッジということですので、赤のリード線から1KΩの抵抗を介して黒のリード線に出力され、同様に別の1KΩの抵抗を介して白のリード線に出力されるということになります。(ハーフブリッジ)ですから白、黒のリード線を結合することで実質2KΩの抵抗を介したフルブリッジ回路が形成されます。
E+でプラスの電圧を、E-でマイナスの電圧を与え、A+で出力します。、でも微弱な電圧ですのでHX711で増幅するということになります。
HX711アンプとも呼ばれているようです。
ロードセル スケッチ
ロードセルのヘッダファイルはいくつかあるようですがgithubで公開されているHX711-masterファイルを利用します。
リンク先からZIPファイルをDLしてスケッチ ⇒ ライブラリをインクルード ⇒ ZIP形式のライブラリをインストール と進み先程ダウンロードしたHX711-master ZIPファイルをインストールします。
サンプルスケッチはzipファイルの中にありますが、一部改変して水耕栽培養液計測に使えるようにしてみました。
long COR = 231400 ;の値を修正することで風袋を調整します。
float COE = 24.722 の値を変更することでグラム変換率を調整します。
スケッチではクリープ(歪)や電流ノイズの影響を便宜的にカットしています。
また10g以下を切り捨てています。
[wpdm_package id=’491′]
[php]
#include "HX711.h"
int LOADCELL_DOUT_PIN = 2;
const int LOADCELL_SCK_PIN = 3;
long weight;
long weight2;
long COR = 231400 ;
float COE = 24.722 ;
HX711 scale;
void setup() {
Serial.begin(19200);
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
}
void loop() {
Serial.print("get value: ");
weight=(scale.get_value(20)+COR);
Serial.println(weight);
if(weight > 600){
weight2=(weight/COE)/10 ;
weight2=weight2*10;
Serial.print("Weight :");
Serial.print(weight2);
Serial.println(" g");
}else{
Serial.print("Weight :");
Serial.println("0 g");
}
}
[/php]
ロードセルで重さを測る まとめ
ロードセル4個を使った配線が見つからない(間違いはある (^^; )のでロードセルの構造を調べて配線してみました。
一日荷重をかけて翌日計測するとゼロ点の数値が異なります。
ですから常時荷重がかかった状態での数値の変化や温度による変化を時系列で取得し、補正することでより正確な荷重測定が出来るかな?と思います。
この養液重量測定で例えば水1Kg(1000cc)加えて溶液を添加することも可能になりました。
養液の添加は蠕動ポンプを使って行います。
実験では回転数と養液の量が比例関係にありますので、回転数を設定することで添加する養液量が決まります。
しかし、市販の蠕動ポンプは回転数の計測が出来ませんので少しポンプの加工が必要になります。
蠕動ポンプとロードセルを使った自動水耕栽培養液添加システムは後日ということで…
最後までご覧いただき有難うございました。
Twitterもやってます。 (^^;