DIY 自动量程电容表 (10 pF – 10 μF) – Arduino Nano 简易制作
项目动机
普通数字万用表多不具备测电容功能,专用电容表或高端万用表价格昂贵。本项目利用 Arduino Nano 实现一款自动量程电容表,测量范围 10 pF – 10,000 μF,仅需几元器件,适合电子爱好者自制实验室工具。
工作原理
基于 RC 充电时间常数法:
- 已知电阻
R给未知电容C充电 - 单片机测量电压从 0 充至
63.2%(1–1/e) 供电电压所需时间τ = R×C - 代码中以 ADC 读值 644 (约 3.3V × 0.632) 作为判断点
- 根据充电时间自动切换两档量程:
- nF 档:用 1 MΩ 电阻,测 ≤1 μF 电容
- μF 档:用 1 kΩ 电阻,测 >1 μF 电容
上电自动零点校准,测量前需确保被测电容已放电。
硬件清单
| 元器件 | 数量 | 规格/备注 |
|---|---|---|
| Arduino Nano R3 | 1 | 主控,紧凑体积 |
| 1602 字符 LCD | 1 | 16×2,含 I²C 模块更简洁 |
| 电阻 | 1MΩ、10kΩ、1kΩ 各 1 | 1MΩ 充电/10kΩ 放电/1kΩ 大电容充电 |
| 10kΩ 单圈电位器 | 1 | LCD 对比度调节 |
| 焊接工具、面包板/万用板、外壳 | 若干 | 组装用 |
接线说明
LCD (并口模式) Arduino Nano
RS → D12
E → D11
D4 → D5
D5 → D4
D6 → D3
D7 → D2
VSS → GND
VDD → 5V
VO → 电位器中间脚 (两端接 5V/GND)
RW → GND
A → 5V (背光+)
K → GND (背光-)
测量电路:
A0 (ADC) ──┬── 被测电容正极
│
1MΩ/1kΩ (由 D7/D8 控制切换)
│
GND
放电路径: D7/D8 同时拉低 → 经 10kΩ 放电
核心代码 (已整理注释)
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS,E,D4,D5,D6,D7
void setup() {
lcd.begin(16, 2);
pinMode(A0, INPUT);
}
unsigned long time0, time1, time2;
float c, null0;
byte kn, mk, i;
void loop() {
lcd.setCursor(15, 0);
lcd.print("*"); // 心跳指示
// mk=0 用 1MΩ (nF档), mk=1 用 1kΩ (μF档)
if (mk == 0) {
pinMode(8, OUTPUT); digitalWrite(8, HIGH); // 充电
pinMode(7, INPUT); // 另一端高阻
} else {
pinMode(7, OUTPUT); digitalWrite(7, HIGH);
pinMode(8, INPUT);
}
time0 = micros();
// 等待充电至 63.2% (ADC ≈ 644)
while (analogRead(A0) < 644) {
time2 = micros() - time0;
if (time2 >= 1000000 && mk == 0) { // nF档超时 1s → 切 μF档
mk = 1;
time0 = 100000000; // 强制跳出
break;
}
}
time1 = micros() - time0; // 充电耗时 μs
// 放电
pinMode(7, OUTPUT); digitalWrite(7, LOW);
pinMode(8, OUTPUT); digitalWrite(8, LOW);
while (analogRead(A0) > 0); // 等待完全放电
// μF档若时间极短则切回 nF档
if (mk == 1 && time1 < 1000) mk = 0;
// 显示
lcd.setCursor(1, 0);
c = time1 / 1000.0 - null0; // 换算 nF, 减零点漂移
c = abs(c);
if (time1 >= 10000000) {
lcd.print(" TEST uF ");
} else {
lcd.print(c, 2);
if (mk == 0) lcd.print(" nF ");
else lcd.print(" uF ");
}
// 首次运行记录零点偏移
if (i == 0) { i++; null0 = c + 0.02; }
delay(100);
}
精度与误差分析
- 典型精度 ±3% – ±5%
- 主要误差来源:电阻公差(建议用 1% 薄膜电阻)、供电电压稳定度、PCB/面包板寄生电容、ADC 量化误差
- 小电容 (<100 pF) 受寄生电容影响大,建议短导线、屏蔽
- 大电容 (>1000 μF) 充电时间长,可适当增大充电电阻或延长超时
外壳与成品化建议
- 将电路焊接在万用板或绘制简单 PCB
- 测量端子采用镀金针孔或弹簧夹,方便插拔电容
- 加装电池盒 (2×18650 或 9V) 实现便携
- 外壳预留 USB 口可给 Nano 供电兼充电
- 面板贴标签标明量程、极性、放电警示
扩展思路
- 增加电感/电阻测量功能,变身迷你 LCR 表
- 接入蓝牙模块 (HC-05) 将读数传手机 App 记录曲线
- 用 OLED 替代 1602,显示更多参数 (ESR、漏电流等)
- 增加自动识别元件类型 (电容/电阻/二极管) 逻辑
原理图

制造工艺
- 智能缺水报警器 – DIY植物土壤湿度监测装置
- 用 Arduino Nano 和 Nokia 5110 LCD 自制 20kHz 示波器:简易 DIY 指南
- DIY ADXL335 地震检测仪 — 低功耗三轴加速度计项目
- 意大利语单词时钟:Arduino Nano + NeoPixel 144 灯珠 + LCD + RTC 打造
- 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
- 基于Arduino MKR Fox 1200构建可靠Sigfox千瓦时电表
- DIY 高频频率计 - Arduino Nano 实测 6.5MHz,三档测量时间可选
- 蓝牙温度监测仪:Arduino Nano + NTC 热敏电阻 + HC-06 无线传输
- 非接触手势门锁:APDS-9960 + Arduino 实现安全门禁
- Arduino Nano 多功能伴侣套件 —— 电阻/电容测量、二极管测试、RTC时钟一体化
- 为Arduino构建隔离模拟输入电路
- Arduino UNO 精准视觉反应时间测试仪