Цифровой измеритель емкости с использованием Arduino Uno и таймера NE555

Емкостные датчики широко используются для измерения различных физических и химических параметров процесса, таких как смещение, ускорение, толщина, усилие, давление, напряжение, уровень и влажность. При этом измеренное значение емкости сопоставляется с измеряемой величиной для дальнейшей индикации или управления.

Этот проект на Arduino UNO позволяет измерять емкость в диапазоне от 1 мкФ до 1 мФ с последующим выводом результата на LCD индикатор и на монитор компьютера (последовательный монитор Arduino IDE).

cifrovoj-izmeritel-emkosti-s-ispolzovaniem-arduino-uno-i-tajmera-ne555-min

Приведем две схемы: первая схема — с таймером NE555, который работает в режиме нестабильного мультивибратора, вторая — с таймером NE555 в моностабильном режиме.

Первая схема

Здесь таймер NE555 (IC1) работает с двумя внешними резисторами (R1 и R2) и с конденсатором (Cx), емкость которого должна быть измерена. IC1 питается от +5В платы Arduino, таким образом, отпадает необходимость в использовании внешнего источника питания.

Цифровой измеритель емкости - схема 1

Таймер 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), емкость которого должна быть измерена.

Цифровой измеритель емкости - схема 2

В этом режиме работы, когда на триггерном выводе таймера с вывода 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.

Скачать скетч измерителя емкости (скачено: 8)

EFY 3/2017


Добавить комментарий

Ваш электронный адрес не будет опубликован.

*