LoginSignup
1
2

More than 1 year has passed since last update.

ESP32のタッチセンサ機能で水位センサを実験

Posted at

水槽の水位を測って、ポンプを動かしたい。

マイコンで測るには電極を水に挿して抵抗値を測れば簡単に値が取れる。しかしながらちょっと動かすだけならいいけど長期で動かすと電蝕の問題が発生する。

これと同様の問題は土壌センサでもあって、簡単な電極は何ヶ月も経つと腐食する。
と、秋月電子でこういったものがあるのに気がついた。
image.png
静電容量式だと腐食の問題は発生しない。では、同じ原理で水位も測れないかな?

ESP32で、簡単なタッチセンサ機能がある。
以下のスケッチで試してみた。

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  Serial.println(touchRead(T0));
  delay(500);
}

環境

  • 2023/01/27 00:00-01:00
  • 湿度 40〜44%
  • 気温 17℃
  • Arduino 開発環境 1.8.19
  • esp32 by Espressif Systems Version 2.0.4
  • WROOM32 (WEMOS LOLIN 32)

実験

今回は、簡単にピン4にジャンパーケーブルをつなげた。導体を水に濡らさないように、ループの部分を水に浸すように考えてみる。

image.png

この状態で、値を取る。
image.png

水に沈めたら
image.png

値が変化しました
image.png

U字型に折った状態で、先端から何センチ水に浸したときの値の変化

0 1 2 3 4 5 6 7 8 9
81 71 67 64 62 60 59 58 57 56

割と取れてますね。

値のゆらぎ

静電容量式は、環境によって値がどんどん変わっていきます。なので絶対値で取るのはダメで、変化量で判定する必要があります。
しかしながら、今回は水にずっとじゃぼ漬けして使いたいのでドリフトなどをいかにするとキャンセルできるかな?

まず、静電容量ですがGPIO4の値を測っています。何に対しての値かな?
基準レベルを設定するのが良くないかな、ということで水面をGNDに導通させておくのがいいでしょうか?
しかしながら今回は水面GNDではなく、GPIO4とGNDの並行線でプローブを作ってみることにしました。
image.png
水深よりは、水面に接触しているかどうかをより知りたいので、先端を単なるU字型ではなく♡型にしてみました。これをGPIO4とGNDに差し込みます。
image.png

この状態での測定値は55。

image.png

水に思いっきり浸けた状態では35になりました。

image.png

先端をちょとだけ水に浸けた値は44。

image.png

一旦引き出して、水滴が付いている状態は49。
image.png

水滴を拭いて、水に浸けた深さ(cm)と値を測定しました。

0 1 2 3 4 5 6 7
51 45 43 40 39 38 36 35

暫定まとめ

  • シングルラインプローブ、GNDとペアにしたプローブ、両方で水位を検出できる。
  • GNDとペアにしたプローブが安定性が増すかどうかはこれだけの実験では不明
  • ♡型が効果があるかどうかもこれだけの実験では不明
  • 水面から1cm沈めた状態で10%程度値が下がる
  • 更に5cm沈めた状態で15〜20%程度値が下がる
  • 深さを増すに従い値の変化は小さくなる

これを元に水位を検出するのはまだアレで、少なくとも安定性を調べないといけません。
この状態で、しばらく測定を続けていきます。

image.png

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2