Arduinoでコンデンサの容量測定

Arduinoでコンデンサの容量を測定する方法
Arduinoでコンデンサの容量を測定する方法

この記事では、Arduinoでコンデンサの容量(キャパシタンス)を測定する方法を解説する。

コンデンサの容量の測定方法として発振回路を利用したものをよく見かけるが、ここでは時定数を利用した測定方法を紹介する。

時定数からコンデンサの容量を測定する方法

時定数とは、コンデンサにE[V]の電圧をR[Ω]の抵抗を介してかけた時、コンデンサの電圧がEの63.2%まで充電される時間のことである。

何故そうなるのかはこちらの記事を参考にして欲しい。

時定数をτとすると、次式で導き出される。

$$τ = RC$$

幸い、Arduinoにはアナログ電圧を測れるピンを備えているのでコンデンサの容量を測ることは簡単である。デジタルピンは5V出力であるので、5V電圧をコンデンサへかけ、その63.2%の電圧3.22Vになるまでの時間を計測すればコンデンサの容量を導き出すことができる。

$$C = \frac{τ}{R}$$

回路図

Arduinoでコンデンサを測定する回路図
Arduinoでコンデンサを測定する回路図

容量を測定したいコンデンサCxと抵抗RおよびArduinoを図のように配線する。

D2をHIGHにすると2MΩの抵抗を介して電流がコンデンサへ流れていく。コンデンサの電圧は徐々に上がっていき、A5が電源電圧の63.2%Vになるまでの時間を計測する。

また、D3と1kΩの抵抗はコンデンサの電荷を放電してリセットさせるためのものである。

プログラム

コンデンサの容量を測定するプログラムがこちら。VS Codeの拡張機能のPlatformIOでArduino開発を行ったのでArduino.hをインクルードしているが、Arduino IDEを使用する場合は#include <Arduino.h>を削除すること。

/*
  Created by Toshihiko Arai.
  https://101010.fun/iot/arduino-measure-capacitance.html
*/
#include <Arduino.h>

const int PULSE_PIN = 2;
const int DIGITAL_READ_PIN = 3;
const int ANALOG_READ_PIN = 5;

const double E = 5.06; // GPIO電圧実測値
const double R = 2000000.0; // 2MΩ
const double V = E * 0.632;

void setup()
{
  Serial.begin(9600);
  pinMode(PULSE_PIN, OUTPUT);
  digitalWrite(PULSE_PIN, LOW);
}


void discharge() { 
  pinMode(DIGITAL_READ_PIN, OUTPUT);
  digitalWrite(DIGITAL_READ_PIN, LOW);
  delay(1000);
  pinMode(DIGITAL_READ_PIN, INPUT);
  delay(10);
}

unsigned long charge() {
  digitalWrite(PULSE_PIN, HIGH);
  return micros();
}

void loop() {
  discharge();

  unsigned long time_start = charge();

  double volts = 0;
  while (volts < V)
  {
    volts = double(analogRead(ANALOG_READ_PIN)) / 1023.0 * E;
  }

  double T = micros() - time_start; // T: 時定数
  double c;
  char *farad = "uF";

  if (T < 2500)
  {
    c = T / R * 1000000; // pFに対応
    farad = "pF";
  }
  else if (T < 50000)
  {
    c = T / R * 1000; // nFに対応
    farad = "nF";
  }
  else
  {
    c = T / R; // uF
  }

  
  Serial.print(c);
  Serial.print(farad);

  Serial.println();
  digitalWrite(PULSE_PIN, LOW);
  discharge();

}

実験結果の所感

実際、100pF〜10uFまで測定してみた結果、かなり良い精度でコンデンサの容量を測定することができて驚いた。そもそもコンデンサの容量は10%程度の誤差なのでそれを考えても正確に測れている。また、ブレッドボードで実装したためか、100pFあたりの静電容量が誤差として余計に含まれてしまっている。1000pF以下のコンデンサの測定は基板を含め改良する余地があるだろう。

この記事で使った関連製品はこちら

Arduino Uno Rev3 ATmega328 マイコンボード A000066
Arduino Uno Rev3 ATmega328 マイコンボード A000066

Uno Rev.3、8 bit、AVR、ATmega328、USB-シリアルコンバータとしてプログラムされたATmega 16U2搭載

Amazon

Arduinoの参考書

電子部品ごとの制御を学べる! Arduino 電子工作実践講座 改訂第2版
電子部品ごとの制御を学べる! Arduino 電子工作実践講座 改訂第2版

電子パーツを自由自在に組み合わせて電子工作ができるように、Arduinoによる電子部品ごとの制御方法を詳しく解説。初心者や電子工作に躓いた人でも安心して取り組めるよう、豊富な図・写真で徹底解説。2018年発刊の「Arduino 電子工作 実践講座」の改訂版です。

KindleAmazon
Arduinoをはじめよう 第3版 (Make:PROJECTS)
Arduinoをはじめよう 第3版 (Make:PROJECTS)

本書では、開発者自らが、Arduinoの哲学、ハードウェア、ソフトウェアの基礎を解説、誰にでもできる簡単なチュートリアルを行います。

Amazon

最後まで読んでいただきありがとうございました。

「この記事が参考になったよ」という方は、ぜひ記事をシェアをしていただけるととても嬉しいです。

今後も有益な記事を書くモチベーションにつながりますので、どうかよろしくお願いいたします。↓↓↓↓↓↓↓

あなたにおすすめ