Arduinoでコンデンサの容量測定
この記事では、Arduinoでコンデンサの容量(キャパシタンス)を測定する方法を解説する。
コンデンサの容量の測定方法として発振回路を利用したものをよく見かけるが、ここでは時定数を利用した測定方法を紹介する。
時定数からコンデンサの容量を測定する方法
時定数とは、コンデンサにE[V]の電圧をR[Ω]の抵抗を介してかけた時、コンデンサの電圧がEの63.2%まで充電される時間のことである。
何故そうなるのかはこちらの記事を参考にして欲しい。
時定数をτとすると、次式で導き出される。
$$τ = RC$$
幸い、Arduinoにはアナログ電圧を測れるピンを備えているのでコンデンサの容量を測ることは簡単である。デジタルピンは5V出力であるので、5V電圧をコンデンサへかけ、その63.2%の電圧3.22Vになるまでの時間を計測すればコンデンサの容量を導き出すことができる。
$$C = \frac{τ}{R}$$
回路図
容量を測定したいコンデンサ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以下のコンデンサの測定は基板を含め改良する余地があるだろう。
この記事で使った関連製品はこちら
Uno Rev.3、8 bit、AVR、ATmega328、USB-シリアルコンバータとしてプログラムされたATmega 16U2搭載
AmazonArduinoの参考書
本書では、開発者自らが、Arduinoの哲学、ハードウェア、ソフトウェアの基礎を解説、誰にでもできる簡単なチュートリアルを行います。
Amazon最後まで読んでいただきありがとうございました。
「この記事が参考になったよ」という方は、ぜひ記事をシェアをしていただけるととても嬉しいです。
今後も有益な記事を書くモチベーションにつながりますので、どうかよろしくお願いいたします。↓↓↓↓↓↓↓