Каталог статей

Главная » Все схемы » Схемы устройств на микроконтроллерах » Устройства на микроконтроллерах

Выбранная схема!!!


8022
Цифровой измеритель емкости на базе Arduino | Полный DIY-проект

Цифровой измеритель емкости на базе Arduino | Полный DIY-проект

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

В этом проекте представлен подход, основанный на прерываниях, с использованием таймера NE555 и Arduino Uno для измерения емкости в диапазоне от 1 мкФ до 1 мФ и обеспечения локальной индикации с использованием LCD и данных. сбор данных с помощью дисплея ПК (последовательный монитор Arduino IDE). Авторский прототип цифрового измерителя емкости показан на рис. 1.

Рис. 1: Авторский прототип цифрового измерителя емкости на базе Arduino

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

Схема и работа измерителя емкости

Блок-схема цифрового измерителя емкости на базе Arduino показана на рис. 2, а его принципиальная схема с таймером NE555 в режиме нестабильного мультивибратора показана на рис. 3.

Рис. 2. Блок-схема цифрового измерителя емкости на базе Arduino

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

Рис. 3. Принципиальная схема цифрового измерителя емкости на базе Arduino с таймером NE555 в нестабильном режиме

IC1 генерирует выходной сигнал прямоугольной формы с амплитудой +5 В на определенной частоте (в зависимости от значений R1, R2 и Cx), который доступен на его выходном контакте 3. Выходной контакт 3 IC1 подключен к контакту 2 платы Arduino.

Поскольку этот вывод Arduino является выводом аппаратного прерывания (называемым прерыванием 0), исходный код (capacitance1.ino), загруженный в Arduino, использует обработчик прерываний, который выполняется всякий раз, когда выходной сигнал таймера переходит от низкого к высокому уровню.

Таким образом, период времени прямоугольной волны непрерывно получается путем расчета разницы во времени между двумя такими последовательными переходами. Период времени (T) колебаний прямоугольного выходного сигнала IC1 определяется как:

T=0,693×(R1+2×R2)×Cx

Таким образом, значение Cx задается как:

Cx=1,443×T/(R1+2×R2)

Измеренное значение Cx (в мкФ) затем отображается на 16×2-символьном LCD и ПК.

Таймер NE555

Таймер NE555 IC1 работает как генератор в режиме нестабильного мультивибратора со свободной частотой, а рабочий цикл точно контролируется R1, R2 и Cx. Контакты 4 и 8 микросхемы IC1 подключены к разъему +5В платы 1.

R1 и R2 по 100 кОм каждый подключены между контактами 6 и 7 и контактами 7 и 8 соответственно микросхемы IC1. IC1 имеет одно и то же заземление с платой Arduino. Разработанная автором коммутационная плата таймера показана на рис. 4.

Рис. 4: Подключение таймера NE555 на авторской коммутационной плате

Доска Arduino Uno

Arduino Uno — это плата разработки на базе микроконтроллера AVR ATmega328 с шестью контактами аналогового ввода и 14 контактами цифрового ввода-вывода. Микроконтроллер имеет 32 КБ флэш-памяти ISP, 2 КБ RAM и 1 КБ EEPROM. Плата обеспечивает последовательную связь через UART, SPI и I2C.

Микроконтроллер может работать на тактовой частоте 16 МГц. В этом проекте контакты цифрового ввода-вывода 3, 4, 5, 6, 11 и 12 Arduino подключены к контактам 14, 13, 12, 11, 6 и 4 соответственно LCD.

16×2 символа LCD. Поскольку наша программа Arduino (capacitance.ino) использует LCD в 4-битном режиме, только линии данных LCD D3-D7 настроены для чтения данных из Arduino. Контакты 1 и 2 LCD подключены к GND и 5 В соответственно от платы Arduino. Вывод чтения/записи (контакт 5) LCD подключен к GND. Для регулировки контрастности дисплея предусмотрен потенциометр 10 кОм (VR1).

Программное обеспечение

Исходный код (capacitance1.ino) написан на языке программирования Arduino. Atmega328/Atmega328P программируется с использованием программного обеспечения Arduino IDE. Выберите нужную плату в меню «Инструменты» → «Плата» в Arduino IDE и запишите программу (эскиз) через стандартный порт USB на вашем компьютере.

Здесь код, написанный на Arduino, использует заголовочный файл LiquidCrystal.h, предоставленный библиотекой Arduino для работы с LCD.

Функция lcd.begin(16, 2) помогает настроить символ LCD размером 16×2.

Функция 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 в моностабильном режиме

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

Рис. 5. Принципиальная схема цифрового измерителя емкости на базе Arduino с таймером NE555 в моностабильном режиме

В этом режиме работы, когда вывод триггера таймера устанавливается на низкий уровень (0 В) путем отправки активного низкого импульса с контакта 9, выход таймера (с контакта 3) переходит в высокий уровень (+5 В) в течение определенного периода времени, который определяется значениями R1 и Cx. Период времени (T), в течение которого выходной сигнал таймера остается высоким, определяется как:

T = 1,1×R1×Cx

Выход таймера подключен к контакту 2 Arduino, который является контактом аппаратного прерывания (называемым прерыванием 0). Исходный код (capacitance2.ino), загруженный в Arduino, использует обработчик прерывания внутри прерывания, то есть двухуровневую вложенную подпрограмму прерывания (ISR).

Первый обработчик прерывания выполняется всякий раз, когда выходной сигнал таймера переходит из низкого уровня в высокий, а второй ISR вызывается изнутри первого, когда выходной сигнал таймера переходит из высокого в низкий. Таким образом, время, в течение которого выходной сигнал таймера остается высоким, получается путем расчета разницы во времени между двумя такими последовательными прерываниями, которая равна T.

Таким образом, значение Cx задается как:
Cx = T/(1,1×R1)

Измеренное значение Cx (в мкФ) затем отображается на LCD размером 16×2 символа и последовательном мониторе Arduino IDE.

Таймер NE555

Таймер NE555 IC1 работает в режиме моностабильного мультивибратора, где время на выходе становится высоким после подачи импульса высокого-низкого-высокого уровня с контакта 9 Arduino, который управляется R1 и Cx, подключенными снаружи к микросхеме.

Выход контакта 3 таймера подключен к выводу прерывания (контакт 2) Arduino. Контакты 4 и 8 IC1 подключены к разъему +5 В платы 1. R1 100 кОм подключен между контактами 8 и 7. IC1 имеет одно и то же заземление с платой Arduino. Разработанная авторами коммутационная плата таймера представлена на рис. 6.

Рис. 6: Подключение таймера NE555 на коммутационной плате авторов

Программное обеспечение

Код (capacitance2.ino), написанный на языке программирования Arduino, использует заголовочный файл LiquidCrystal.h, предоставленный библиотекой Arduino для работы с LCD.

Функция AttachInterrupt(0,analyze1,RISING) вызывает обработчик прерываний с именем Analysis1 всякий раз, когда выход IC1, подключенный к выводу прерывания 0 (вывод 2) Arduino, переходит из низкого уровня в высокий, то есть происходит переход по нарастающему фронту.

Функция AttachInterrupt(0,analyze2,FALLING) вызывает обработчик прерываний с именем Analysis2 каждый раз, когда выход IC1, подключенный к выводу 2 Arduino, переходит из высокого состояния в низкий, то есть происходит переход по заднему фронту.

Триггерный импульс «высокий-низкий-высокий», подаваемый на вывод 2 микросхемы IC1, генерируется выводом 9 Arduino с использованием следующего кода в функции voidloop(). Обратитесь к исходному коду.

пустой цикл ( ){
digitalWrite(9, ВЫСОКИЙ);
задержка(10);
digitalWrite(9, LOW);
задержка(1);
digitalWrite(9, ВЫСОКИЙ);
while (1);

Примечание. Чтобы проверить новый конденсатор (Cx), подключите конденсатор и нажмите кнопку Reset на плате Arduino Uno.


Категория: Устройства на микроконтроллерах | Добавил: Администратор (20.05.2026)
Просмотров: 109 | Рейтинг: 0.0/0


Всего комментариев: 0

Все ссылки на книги и журналы, представлены на этом сайте, исключительно для ознакомления, авторские права на эти публикации принадлежат авторам книг и издательствам журналов! Подробно тут!
Жалоба

ьте свои комментарии !!!!

Имя *:
Email:
Код *:

Copyright Zloy Soft (Company) © 2008 - 2026