土壌水分計の自作 その2 コンデンサ容量測定

Arduinoによるコンデンサ容量測定

最終的には土壌の誘電率を測定するのですが、その前にコンデンサの容量を測定して理論値との比較を行いたいと思います。

並行板コンデンサ容量Cは誘電率ε、電極間距離d、電極面積Sを用いてC= \frac{\varepsilon S}{d}と表されるため、コンデンサの容量がわかれば誘電率が分かるのです。

まずはステップ入力を切り替え(5V→0V→5V→0V→)て行うこと考えていきたいと思います。

RCローパスフィルタにステップ入力を入れたときのコンデンサ容量

下記のような回路について、Arduino 2PINにV_0=5Vで周期60秒のステップ入力をかけ、Arduino A5PINの電圧V_Cを測定します。この回路に関して下記の式が成り立ちます。

 V_0=RI(t)+\frac{1}{C}\int I(t) dt

この式をコンデンサ容量Cについて解くと時間tを用いて下記の式が成り立ちます。

 \displaystyle C=-\frac{t}{R・ln(\frac{V_0-V_C}{V_0})}
f:id:GypsophilaRupi:20191201214627p:plain
ただし、交流のような挙動を再現するには回路図のGNDを0,5Vに入れ替える必要があるので気を付けて下さい。
次の記事では交流のような挙動を再現しています。
gypsophilarupi.hatenablog.com

Arduinoソースコード

シリアルモニタに測定した電圧と時間を表示するソースコードは下記の通りです。
コンデンサ容量はexcelを用いて計算しました。

const int PIN_ANALOG_INPUT = 5;
const int PIN_DIGITAL_OUTPUT = 2;
int t = 1;
int Capacitor = 0;


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

void loop() {
  int i = analogRead( PIN_ANALOG_INPUT );
  float CapacitorVolt = i * 5.0 / 1023.0;
  Serial.print( CapacitorVolt);
  Serial.print(",");
  Serial.print( millis());
  Serial.println();
  pinMode(PIN_DIGITAL_OUTPUT, OUTPUT); 
  if(millis()/60000==t){
    if(t%2==1){
      digitalWrite(PIN_DIGITAL_OUTPUT,HIGH);
    }else{
      digitalWrite(PIN_DIGITAL_OUTPUT,LOW);
    }
    t=t+1;
  }

  delay( 100 ); 
}

参考URL:Arduino で電圧を測る (アナログ入力を読取る) - Arduino - 基礎からの IoT 入門

コンデンサ容量の測定結果と考察

ステップ入力をかけたときの実際のコンデンサ電圧値と電圧値から求めたコンデンサ容量は下記のグラフのようになりました。

f:id:GypsophilaRupi:20191201222326p:plain:w400

f:id:GypsophilaRupi:20191201222353p:plain:w400

電圧の立ち上がり時間はコンデンサ容量が大きいほど大きくなりました。
コンデンサ容量は理論値に対して30%前後ずれてますが、大体の値は出ており、コンデンサ容量の相対評価は出来そうです。
今後はこの方法を用いて土のキャパシタンスも測定できないか試してみたいと思います。
gypsophilarupi.hatenablog.com