静電容量式のレインセンサを自作しました。
以前に使っていた電極式のレインセンサは、電極が腐食するデメリットがありました。1年も経たないうちに電極が導通してしまい、常に検出状態になっていました。
どうしても水に電気を流すと電極が腐食されるのは避けられないため、電極が露出していない静電容量方式のレインセンサを作りました。
以下のスイッチサイエンスのページで購入できます。
スイッチサイエンス - 静電容量式レインセンサ基板
基板を設計
基板はKiCadで設計しました。
回路構成としては、2端子あるためこの様にしました。
KiCadでガーバーデータを出力し、Fusion PCBに発注しました。
基板は発注から2週間程度で送られてきました。
プリント基板の発注方法は、以下のサイトが参考になります。
KiCADからガーバーファイルを出力する方法
プリント基板の自作!簡単にできる格安オーダーメイド法
静電容量検出回路の設計
センサの静電容量値を測定するための検出回路は以下になります。センサーをSensor Inに接続し、Pulse Outをマイコンなどの入力に接続します。LOWパルスの長さを測定することで、現在の静電容量値を読み取ることができます。
静電容量パルス測定用プログラム
Arduino UNO 用のサンプルスケッチです。
2番ピンにパルス出力を接続します。雨を検出すると13番のLEDが光ります。
RAIN_THR
の値がしきい値になっています。この値を変更することで、感度を調節できます。範囲は0~255
で、0
に近づけるほど感度が良くなり、255
に近づけるほど感度が悪くなります。このプログラムは雨が落ちたかどうかを検出します。雨が降るとセンサが反応しますが、雨粒が落ちないと反応しないようになっています。雨粒が落ちると再度反応します。
#define RAIN_IN_PIN 2
#define RAIN_OUT_PIN 13
#define TIMEOUT_US 100000
#define R_K_OHM 100.0
#define SAMPLES 100
#define LOWPASS_CAP 0.995
#define LOWPASS_RAIN 0.9
#define LOWPASS_MAX 1.0
#define CAP_AMP 0.2
#define CAP_MAX 255.0
#define RAIN_AMP 100.0
#define RAIN_MAX 255.0
#define RAIN_THR 20.0
float rain;
float cap;
float cap_before;
void setup(){
rain = 0;
cap = 0;
cap_before = 0;
pinMode(RAIN_OUT_PIN, OUTPUT);
}
float get_cap(){
return (float)pulseIn(RAIN_IN_PIN, LOW, TIMEOUT_US) * (1000.0 / R_K_OHM) / log(2);
}
void loop(){
cap_before = cap;
cap = 0;
for(int i = 0; i < SAMPLES; i++){
cap += get_cap();
delayMicroseconds(100);
}
cap = constrain(cap_before * LOWPASS_CAP + cap * CAP_AMP * (LOWPASS_MAX - LOWPASS_CAP) / SAMPLES, 0, CAP_MAX);
rain = constrain(rain * LOWPASS_RAIN + max(cap - cap_before, 0) * RAIN_AMP * (LOWPASS_MAX - LOWPASS_RAIN), 0, RAIN_MAX);
if(rain > RAIN_THR){
digitalWrite(RAIN_OUT_PIN, HIGH);
}
else{
digitalWrite(RAIN_OUT_PIN, LOW);
}
}