Емкостные датчики широко используются для измерения различных физических и химических параметров процесса, таких как смещение, ускорение, толщина, усилие, давление, напряжение, уровень и влажность. При этом измеренное значение емкости сопоставляется с измеряемой величиной для дальнейшей индикации или управления.
Этот проект на Arduino UNO позволяет измерять емкость в диапазоне от 1 мкФ до 1 мФ с последующим выводом результата на LCD индикатор и на монитор компьютера (последовательный монитор Arduino IDE).

Приведем две схемы: первая схема — с таймером NE555, который работает в режиме нестабильного мультивибратора, вторая — с таймером NE555 в моностабильном режиме.
Первая схема
Здесь таймер NE555 (IC1) работает с двумя внешними резисторами (R1 и R2) и с конденсатором (Cx), емкость которого должна быть измерена. IC1 питается от +5В платы Arduino, таким образом, отпадает необходимость в использовании внешнего источника питания.
Таймер IC1 на выводе 3 генерирует прямоугольные импульсы амплитудой 5В с определенной частотой (в зависимости от значений R1, R2 и Cx).
Вывод 3 IC1 подключен к контакту 2 платы Arduino. Так как этот вывод Arduino является аппаратным прерыванием (Interrupt 0), исходный код (capacityitance1.ino), загруженный в Arduino, использует обработчик прерываний, который выполняется всякий раз, когда на выходе таймера происходит переход сигнала с низкого на высокий уровень. Таким образом, непрерывно высчитывается период импульса.
Период импульса (T) зависит от параметров R1, R2 и Cx:
T = 0,693 × (R1 + 2 × R2) × Cx => Cx = 1,443 × T / (R1 + 2 × R2)
Измеренное значение Cx (в мкФ) затем выводиться на LCD индикатор и монитор компьютера.
Исходный код (capacitance1.ino) написан на языке программирования Arduino. Микроконтроллер Atmega328/Atmega328P запрограммирован с использованием программного обеспечения Arduino IDE. Выберите правильную плату из меню Инструменты→Плата в Arduino IDE и запишите программу (скетч) через стандартный порт USB на вашем компьютере.
В скетче:
- LiquidCrystal.h – библиотека для работы с LCD-дисплеем.
- Функция lcd.begin (16, 2) устанавливает работу 16×2 символьный LCD-дисплей.
- Функция Serial.begin (9600) инициализирует последовательный порт со скоростью передачи 9600 бит.
- Функция attachInterrupt (0, cap, RISING) вызывает прерывание обработчика «cap» всякий раз, когда сигнал, подключенный к выводу прерывания 0 (контакт 2) Arduino, переходит с низкого в высокое состояние.
- Функция Serial.print (capacitance, 3) отправляет на монитор компьютера измеренное значение емкости (до трех знаков после запятой), используя последовательный порт.
- Функция lcd.setCursor (0, 1) устанавливает начальное положение курсора LCD.
- Функция lcd.print (capacitance, 3) выводит измеренное значение емкости до трех знаков после запятой на LCD.
Вторая схема
В данном случае таймер NE555 (IC1) работает в режиме моностабильного мультивибратора с внешним резистором R1 и конденсатором (Cx), емкость которого должна быть измерена.
В этом режиме работы, когда на триггерном выводе таймера с вывода 9 Arduino устанавливается логический ноль, на выходе таймера 3 устанавливается высокий уровень около 5 В в течение определенного периода времени, который определяется значениями R1 и Cx.
Период времени (T), при котором выход таймера остается высоким, определяется по формуле:
T = 1,1 × R1 × Cx => Cx = T / (1,1 × R1)
Так же как и в предыдущей схеме, выход таймера подключен к контакту 2 Arduino, который является выводом аппаратного прерывания (Interrupt 0). Исходный код (capacitance2. ino), загруженный в Arduino, использует обработчик прерывания в пределах прерывания, то есть двухуровневую вложенную подпрограмму прерываний (ISR).
Первый обработчик прерываний запускается каждый раз, когда выход таймера переходит от низкого к высокому состоянию, а второй ISR вызывается из первого, когда выход таймера переходит от высокого к низкому.
Таким образом, время, в течение которого выход таймера остается высоким, получается путем вычисления разницы во времени между двумя такими последовательными прерываниями, которые равны T.
Скетч (capacitance2.ino), написанный на языке программирования Arduino.
В сетче:
- LiquidCrystal.h – библиотека для работы с LCD-дисплеем.
- Функция attachInterrupt (0,analyze1,RISING) вызывает обработчик прерываний с именем analysis1 всякий раз, когда выход IC1, подключенный к выводу прерывания 0 (контакт 2) Arduino, переходит с низкого на высокое состояние.
- Функция attachInterrupt (0, analyze2, FALLING) вызывает обработчик прерываний с именем analysis2 всякий раз, когда выход IC1, подключенный к контакту 2 Arduino, переходит с высокого в низкое состояние.
Триггерный импульс с высокого уровня на низкий, подаваемый с вывода 9 Arduino на вывод 2 IC1, генерируется с помощью следующего кода:
void loop () {
digitalWrite (9, HIGH);
задержка (10);
digitalWrite (9, LOW);
задержка (1);
digitalWrite (9, HIGH);
в то время как (1);
} Примечание. Чтобы измерить емкость конденсатор (Cx), подключите конденсатор и нажмите Reset на плате Arduino Uno.
Скачать скетч измерителя емкости (928 bytes, скачано: 252)
EFY 3/2017
