Подключение потенциометра Ардуино на конкретных примерах

Принцип работы потенциометра

Переменное сопротивление aduinoПеременный резистор или потенциометр — это электрическое устройство, уровень сопротивления которого можно установить в определенных пределах. Таким образом, мы можем изменять параметры электрических цепей, гибко адаптируя их к определенным условиям: например, регулируя чувствительность датчика или громкость звука в динамике. Потенциометры широко используются в схемах для регулировки громкости, напряжения, контраста и т.д. Благодаря своей простоте и практичности.

Потенциометр ArduinoВ зависимости от конструкции потенциометры делятся на два больших класса: цифровые и аналоговые. Сердце цифрового потенциометра — резистивная шкала, на каждой фазе цепи которой находятся электронные переключатели. В данный момент замыкается только электронный переключатель, который устанавливает определенное значение сопротивления. Количество шагов на шкале определяет диапазон разрешения потенциометра. Аналоговый потенциометр может непрерывно изменять свое значение, но, как правило, в более узком диапазоне, а сам резистор будет больше по размеру.

В подавляющем большинстве случаев цифровые потенциометры используются в проектах Arduino. Чаще всего это интегральные схемы с положением цифровой стрелки в центре шкалы.

Программа

Тестовая программа уже есть в стандартной библиотеке, поэтому сегодня писать не будем. Давайте немного изменим стандарт.

Откройте программу AnalogInOutSerial из меню Файл — Примеры — Аналоговый. Давайте добавим константу и переменную, чтобы подключить потенциометр и полученное от него значение.

const int analogInPin1 = A0; const int analogInPin2 = A1; const int analogOutPin = 9; int значение sensor1 = 0; int value sensor2 = 0; int outputValue = 0;

Откройте последовательный порт в функции setup (). И в функции loop () добавьте показание сигнала со второго подключенного потенциометра.

void loop () {// считываем аналоговое значение в: sensorValue1 = analogRead (analogInPin1); sensorValue2 = analogRead (analogInPin2);

2 Логика работы и схема подключения цифрового потенциометра X9C103 к Arduino

Между 0 и максимальным значением с шагом 1/100 от максимума можно регулировать сопротивление на третьем подвижном штыре.

Положение «мобильного» терминала контролируется серией отрицательных импульсов. Каждый импульс сдвигает значение сопротивления на 1 шаг в сторону увеличения или уменьшения.

Потенциометр управляется тремя линиями:

Название булавки Назначение Примечание
CS Выбор устройства LOW — устройство активно
INC Изменение выходного сопротивления Отрицательные импульсы
U / D Направление изменения U (вверх) — если напряжение на ножке микросхемы ВЫСОКОЕ, D (вниз) — НИЗКОЕ

Вот как выглядит временная диаграмма управляющих сигналов:

Временная диаграмма управления потенциометром X9C102, X9C103, X9C104
Временная диаграмма управления потенциометром X9C102, X9C103, X9C104

Здесь VW — напряжение на центральном контакте.

Строим схему как показано на рисунке:

Схема подключения цифрового потенциометра X9C102, X9C103, X9C104 к Arduino
Схема подключения цифрового потенциометра X9C102, X9C103, X9C104 к Arduino

Для модуля требуется питание +5 В.

Сonstrain()

Вы также можете использовать функцию constrain (). Он принимает три параметра и выводит значения пределов диапазона, если проверяемое значение выходит за пределы этого диапазона. Например,

sensVal = ограничение (0, 5, 150); // 5 sensVal = constriction (200, 5, 150); // 150 sensVal = constrain (95, 5, 150); // 95 // ограничиваем значения sensVal в диапазоне от 5 до 150Регулируем яркость светодиода двумя потенциометрами
Регулируем яркость светодиода двумя потенциометрами
Регулируем яркость светодиода двумя потенциометрами

Первый пример

Сначала попробуем просто считать напряжение на выводе A0 микроконтроллера и отправить его в COM-порт.

Это делается с помощью функции analogRead (). Этой функции необходимо передать номер контакта, напряжение, при котором он должен быть измерен, и она вернет текущее значение.

Загрузите на карту следующий пример:

int val; void setup () {Serial.begin (9600);} недействительный цикл () {val = analogRead (A0); Serial.println (val); задержка (1000);}

Микроконтроллер Atmega8A, используемый на нашей EduBoard, имеет модуль АЦП с 10-битным разрешением и возможностью мультиплексирования с шестью входами. Эти входы пронумерованы A0-A6 (или 14-19).

Измерение производится относительно напряжения питания. Ни при каких обстоятельствах на вход не должно подаваться отрицательное напряжение или напряжение выше напряжения питания! Мы подключили ко входу переменный резистор и наше входное напряжение точно не выйдет за пределы блока питания.

Теперь разберемся, что нам пришлёт платеж. Как только разрешение составит 10 бит — в десятичной форме, значение изменится от 0 до 1023. Измерение относится к 5 вольтам, поэтому изменение показаний 1 соответствует фактическому напряжению 5/1023 = 4,9 мВ. То есть с помощью встроенного АЦП микроконтроллера можно измерить напряжение с точностью до 4,9 мВ.
Вернемся к эскизу. Из-за линии …

val = analogRead (A0);

. переменная val будет записана с оцифрованным напряжением, считываемым на выводе A0. Откройте дверной монитор (Ctrl + Shift + M) и посмотрите, как меняются показания АЦП при вращении вала переменного резистора. Обратите внимание, что нет необходимости регулировать штифт на входе.
Пришло время немного улучшить работу с модулем аналого-цифрового преобразователя. На практике младшие биты АЦП могут сильно колебаться из-за шума и обычно отбрасываются двумя битами одновременно. Остается 8-битное число, с которым гораздо удобнее работать. В этом случае точность составляет 5/255 = 19,6 мВ, чего достаточно для большинства ситуаций.
Измените код, чтобы отправить 8-битное значение. Замените строку, в которой отображается состояние АЦП, на это:

val = analogRead (A0) >> 2;

Теперь присваиваем значение, считываемое АЦП, переменной val, сдвинутой на два бита вправо. Остальные биты просто отбрасываются.

Map()

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

Данные потенциометра будут от 0 до 1023, и мы можем подавать напряжение на светодиод от 0 до 255. Это преобразование легко сделать с помощью функции map().

Пропорционально переносит значение из текущего диапазона значений в новый диапазон. Например,

outputValue = map ((sensorValue1 + sensorValue2) / 2, 0, 1023, 0, 255);

В этом случае мы получаем среднее значение от двух подключенных потенциометров в диапазоне от 0 до 1023. Но мы преобразуем его в новый диапазон от 0 до 255. Что уже может быть выведено на светодиод через PWM.

Второй пример

Теперь мы можем легко изменить яркость светодиода с помощью ШИМ модуляции, задав ее переменным резистором. Установите «цветную» перемычку, как описано в этой статье. Таким образом, вы подключены к 9-му, 10-му и 11-му пиновым сегментам трехцветного светодиода.
Для начала попробуем изменить яркость всего одного светодиода:

#define СИНИЙ 9int val; void setup () {pinMode (BLUE, OUTPUT);} void loop () {analogWrite (BLUE, (analogRead (A0) >> 2));}

Достаточно простой код, если вы помните, как работает analogWrite (). По мере вращения вала переменного резистора яркость светодиода изменяется с минимальной на максимальную.
Между прочим, если вы удалите двухбитовый сдвиг, функция analogWrite () переполнится, так как может принимать только значения от 0 до 255. Попробуйте удалить этот сдвиг и посмотрите, что произойдет.
И наконец, добавим управление всеми тремя светодиодами. Осталось только найти отвертку, чтобы покрутить два других режущих резистора.

#define СИНИЙ 9 # определить ОРАНЖЕВЫЙ 10 # определить ЗЕЛЕНЫЙ 11int val; void setup () {pinMode (BLUE, OUTPUT); pinMode (ОРАНЖЕВЫЙ, ВЫХОД); pinMode (ЗЕЛЕНЫЙ, ВЫХОД);} void loop () {analogWrite (СИНИЙ, (analogRead (A0) >> 2)); analogWrite (ОРАНЖЕВЫЙ, (analogRead (A1) >> 2)); analogWrite (ЗЕЛЕНЫЙ, (analogRead (A2) >> 2));}

Скетч чтения аналогового входа ардуино

/ ** * Эксперимент № 1. * * https://jarduino.ru * * Эксперименты с ардуино. * / const byte POT_PIN = A0; // Порт для . int val {0}; // Переменная для… // вызывается один раз, для начальной конфигурации void setup () {Serial.begin (9600); pinMode (A0, ВХОД); // вывод A0 будет входом} // вызывается в цикле void loop () {val = analogRead (POT_PIN); // Считываем аналоговое значение и присваиваем его переменной val. Serial.print (val); // Отправляем прочитанное значение в последовательный порт. Serial.print («(«); Serial.print (map (val, 0, 1023, 0, 5))); // Распечатать значение в вольтах Serial.println («V)»); задержка (100); // Небольшая задержка в мс. }

Объяснение

Чтобы получить аналоговое значение, мы вызываем analogRead (A0). Он вернет целочисленное значение в диапазоне 0..1023. В данном случае 0 соответствует 0 В, а 1024 — максимум, т.е. 5В.

Потенциометр действует как делитель напряжения, позволяя подавать напряжение на порт A0 в диапазоне от 0 В до значения на входе (5 В).

Теперь должно быть понятно, почему точность измерения Arduino составляет 1/1024 — это деление шкалы аналогового считывателя значений.

для получения истинного аналогового значения, выраженного в вольтах, можно применить простую формулу соотношения. Однако в arduino есть готовая функция карты, которая сделает это за нас:

map (val, 0, 1023, 0, 5)

На вход подаются значение, которое нужно преобразовать, диапазон значений в текущих единицах измерения (0..1023) и диапазон в единицах вывода (0..5В).

Подключение потенциометра к платам Ардуино

Схема подключения

Потенциометр подключается к ардуино по схеме, изображенной на рисунке:

Переменный резистор Arduino

Для этого необходимо подключить три пина потенциометра к указанным пинам платы:

  • Черный — GND;
  • Красный — питание 5В;
  • Средний — от центрального выхода к аналоговому входу A0.

При изменении положения вала подключенного потенциометра происходит изменение параметра сопротивления, что вызывает изменение индикатора на нулевом выводе платы Arduino. Считывание полученного значения аналогового импульсного напряжения выполняется в скетче с помощью команды analogRead ().

В плату Arduino встроен аналого-цифровой преобразователь, способный считывать напряжение и преобразовывать его в цифровые индикаторы со значением от нуля до 1023. Когда указатель поворачивается до конечного значения в одном из двух возможных направлений, напряжение на выводе равно нулю, и, следовательно, напряжение, которое будет генерироваться, равно 0 В. Когда вал поворачивается до конца в противоположном направлении, на вывод подается напряжение 5 В, что означает числовое значение будет 1023.

Пример проекта

Примером реализации схемы подключения потенциометра может служить макетная плата с подключенным переменным резистором и светодиодом. Потенциометр будет контролировать уровень яркости.

Подключение потенциометра Arduino

Для выполнения работы необходимо подготовить следующие детали:

  • 1 плата Arduino Uno
  • 1 x беспаечный макет
  • 1 светодиод
  • 1 резистор сопротивлением 220 Ом
  • 6 проводов «папа-папа»
  • 1 потенциометр.

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

Как подключить потенциометр к Ардуино

Для этого урока нам понадобятся:

Внешние ножки переменного резистора подключены к портам питания (5V и GND). Средний контакт имеет подвижный контакт, на котором изменяется напряжение из-за изменения сопротивления при повороте ручки. Полярность подключения «+» и «-» не имеет значения, в этом случае произойдет только инверсия сигнала потенциометра. Соберите следующую схему и загрузите данный код в плату.

Скетч. Подключение потенциометра и светодиода

Чтобы отрегулировать яркость светодиода с помощью переменного резистора, считайте данные с этого радиоэлемента, подключив его к аналоговому входу. В зависимости от поворота ручки потенциометра необходимо изменять яркость светодиода в линейной зависимости. Сделать это на микроконтроллере достаточно просто, ниже размещена схема подключения переменного резистора с примером кода.

Скетч. Подключение потенциометра и сервопривода

Серводвигатель подключается к аналоговым выходам Arduino Nano. В скетче используется функция карты, которая пропорционально переносит значение переменной из текущего диапазона значений в новый диапазон. Поэтому значения потенциометра в диапазоне 0… 1023 переводим их в новый диапазон от 0 до 180 (угол поворота серводвигателя). Постройте схему и загрузите следующий эскиз.

Код:

#включать // включение библиотеки для оборудования SPI # defineCS10 // ножка чипсета byteval = 0; voidsetup () {Serial.begin (115200); SPI.begin (); pinMode (CS, ВЫХОД); } voidloop () {floatvoltage = (analogRead (A0) * 5.0) /1024.0; // считываем напряжение на входе A0 Serial.print («Voltage =»); // отправляем данные о напряжении на монитор порта Serial.print (Voltage); Serial.print («val =»); // значение записываем на потенциометр Serial.print (val, BIN); // двоичный Serial.print («/»); Serial.println (val, DEC); // десятичное значение ++; // добавляем 1 к переменной MCP4xxxxWrite (val); // записываем значение переменной в потенциометр delay (50); // ждем следующего раза} voidMCP4xxxxWrite (byteval) {// отправляем значение ползунка в потенциометр digitalWrite (CS, LOW); // разрешить прием данных микросхемой SPI.transfer (0b00010001); // отправляем первый байт в регистр конфигурации SPI.transfer (val); // отправляем второй байт в «регистр ползунка» digitalWrite (CS, HIGH); // отключаем прием данных от микросхемы}

Результат чтения аналогового входа ардуино

Скетч считывает значение из аналогового порта A0 (с небольшой задержкой) и отправляет его в последовательный порт. В этом случае считанное значение преобразуется в вольты и также отображается.

Скетч управления цифровым потенциометром X9C102, X9C103, X9C104

Теперь напишем такой скетч:

const int CS = 10; const int INC = 9; const int UD = 8; void setup () {pinMode (CS, ВЫХОД); pinMode (INC, ВЫХОД); pinMode (UD, ВЫХОД); digitalWrite (CS, HIGH); // X9C в режиме низкого энергопотребления digitalWrite (INC, HIGH); digitalWrite (UD, HIGH); } void loop () {для (int я = 0; я <= 100; я + = 10) {setResistance (я); задержка (100); }} // Устанавливаем сопротивление на «подвижном» выводе. // Уровень в процентах изменяется от 0 до 100% от максимального значения void setResistance (int percent) {// Уменьшает сопротивление до 0%: digitalWrite (UD, LOW); // выбираем более раннюю версию digitalWrite (CS, LOW); // выбираем потенциометр X9C для (int i = 0; i <100; i ++) {// потому что потенциометр имеет 100 доступных позиций digitalWrite (INC, LOW); микросекунды задержки (1); digitalWrite (INC, HIGH); микросекунды задержки (1); } // Увеличиваем сопротивление до требуемого: digitalWrite (UD, HIGH); для (int i = 0; i

Эта диаграмма содержит следующий алгоритм: увеличивайте сопротивление каждые 100 мс с шагом 10% от 0 до 100% от максимального потенциометра.

Загрузим этот скетч в память платы Arduino.

Оцените статью
Блог про светодиоды