DIY Автоматический измеритель емкости (10 пФ – 10 мкФ) на Arduino Nano
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino Nano R3 | 1 |
| Резистор 10 кОм | 1 |
| Резистор 1 кОм | 1 |
| Резистор 1 МОм | 1 |
| Алфавитно-цифровой LCD 16x2 | 1 |
| Однооборотный потенциометр 10 кОм (для контраста LCD) | 1 |
Необходимые инструменты
- Паяльник
Приложения и онлайн-сервисы
- Arduino IDE
О проекте
Простые цифровые мультиметры (DMM) не измеряют емкость. Для определения емкости нужен либо дорогой продвинутый DMM, либо специализированный модуль измерения емкости.
В этом проекте я сделаю простой измеритель емкости на Arduino с автодиапазоном. Он измеряет емкость от 10 пФ до 10 000 мкФ. Измерение происходит в автоматическом режиме — достаточно подключить конденсатор к измерительным контактам. Устройство имеет два диапазона: «нФ» и «мкФ». При измерении сначала включается диапазон «нФ», если емкость слишком большая — происходит переход на «мкФ».
Каждый измеритель емкости имеет RC-цепь с известными резисторами и неизвестным конденсатором. Arduino измеряет напряжение на конденсаторе и фиксирует время, за которое оно достигает определенного процента от полного заряда (временная постоянная). Зная сопротивление, можно вычислить неизвестную емкость по формуле в программе. Конденсатор под тестом заряжается через один из резисторов. Arduino инициирует заряд через резистор в зависимости от емкости. В измерителе при каждом включении выполняется нулевая калибровка, поэтому при включении к контактам не должен быть подключен конденсатор. Также все конденсаторы должны быть предварительно разряжены.

Точность ± несколько процентов и в основном зависит от допуска используемых резисторов и стабильности напряжения питания.
Всё устройство помещено в подходящий корпус — еще один полезный инструмент в вашей лаборатории.
Код
Arduino код (C/C++)
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS,E,D4,D5,D6,D7
void setup() {
lcd.begin(16, 2); // LCD 16x2
pinMode(A0, INPUT);
}
unsigned long time0, time1, time2;
float c, null0;
byte kn, mk, i;
void loop() {
lcd.setCursor(15, 0);
lcd.print("*");
if (mk == 0) {
pinMode(8, OUTPUT);
pinMode(7, INPUT);
digitalWrite(8, HIGH);
}
if (mk == 1) {
pinMode(7, OUTPUT);
pinMode(8, INPUT);
digitalWrite(7, HIGH);
}
time0 = micros();
while (analogRead(A0) < 644) {
time2 = micros() - time0;
if (time2 >= 1000000 && mk == 0) {
mk = 1;
time0 = 100000000;
break;
}
}
time1 = micros() - time0;
while (analogRead(A0) > 0) {
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
}
if (mk == 1 && time1 < 1000) mk = 0;
lcd.setCursor(1, 0);
c = time1;
c = c / 1000 - null0;
c = abs(c);
if (time1 >= 10000000) {
lcd.setCursor(1, 0);
lcd.print(" TEST uF ");
} else {
lcd.print(c);
if (mk == 0) lcd.print(" nF ");
if (mk == 1) lcd.print(" uF ");
}
if (i == 0) {
i++;
null0 = c + 0.02;
}
delay(100);
}
Схемы

Производственный процесс
- Умный датчик полива «Thirst Alert» на Arduino — DIY сигнализация засухи для растений
- Создание осциллографа на Arduino Nano с дисплеем Nokia 5110 (20 кГц): простое DIY-руководство
- DIY детектор землетрясений на ADXL335 с усилением ОУ OP07
- Итальянские словесные часы на Arduino Nano, NeoPixel, LCD и RTC
- Простой ИК-датчик препятствий на Arduino: ИК-светодиод и фотодиод
- Надежный счетчик кВт·ч на Sigfox с Arduino MKR Fox 1200
- Частотомер до 6.5 МГц на Arduino Nano: DIY измеритель частоты
- Bluetooth-монитор температуры на Arduino Nano с NTC-термистором
- Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25
- Точный тест времени реакции на Arduino UNO