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

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

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

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

Потенциометр — что это такое

Переменный резистор в электрической цепи с платой Arduino Uno или Nano используется в качестве делителя напряжения. На выводы потенциометра подается напряжение (5V и GND), а средний вывод радиоэлемента является подвижным контактом. При вращении ручки потенциометра, напряжение сигнала на среднем выводе будет меняться от своего максимального значения (5 Вольт) до нуля.

Со средней ножки потенциометра снимают напряжение
Подстроечный и переменный резистор (потенциометр)

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

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

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • потенциометр (переменный резистор);
  • беспаечная макетная плата;
  • один светодиод и резистор;
  • сервопривод;
  • провода «папа-папа», «папа-мама».

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

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

Схема подключения потенциометра к Arduino Uno
Схема подключения потенциометра к Arduino Uno
void setup() {
   Serial.begin(9600);     // запускаем монитор порта
   pinMode(A1, INPUT); // к входу A1 подключаем потенциометр
}

void loop() {
   int val = analogRead(A1); // считываем данные с порта A1
   Serial.println(val);             // выводим данные на монитор порта
   delay(500);                       // ставим задержку для удобства
}

Пояснения к коду:

  1. при необходимости подключения нескольких потенциометров к Arduino Nano, следует их подключать к другим аналоговым входам;.

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

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

Схема подключения потенциометра и светодиода к Ардуино
Схема подключения потенциометра и светодиода к Ардуино
void setup() {
   pinMode(10, OUTPUT); // подключаем светодиод к пин 10
   pinMode(A1, INPUT);     // к входу A1 подключаем потенциометр
}

void loop() {
   int val = analogRead(A1); // считываем данные с порта A1
   val = val / 4;                      // делим значения на 4
   analogWrite(10, val);        // меняем яркость светодиода
}

Пояснения к коду:

  1. светодиод подключается к аналоговому выходу с ШИМ сигналом;
  2. данные с порта A1, которые находятся в диапазоне 0…1023, мы делим на 4 и получаем диапазон от 0 до 255 для изменения яркости светодиода.

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

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

Схема подключения потенциометра и сервомотора к Ардуино
Схема подключения потенциометра и сервомотора к Ардуино
#include <Servo.h> // подключаем библиотеку для сервопривода
Servo servo;            // объявляем переменную servo типа "servo"

void setup() {
   servo.attach(10);        // привязываем сервопривод к порту 10
   pinMode(A1, INPUT); // к входу A1 подключаем потенциометр
}

void loop() {
   int val = analogRead(A1);          // считываем данные с порта A1
   val = map(val, 0, 1023, 0, 180); // переводим val в новый диапазон
   servo.write(val);                         // передаем значения для сервопривода
}

Пояснения к коду:

  1. функция map пропорционально переносит значение переменной val из диапазона значений от 0 до 1023 в новый диапазон от 0 до 180;
  2. в самых крайних положениях (0 и 180 градусов) сервомотор может «дергаться».
1 Star2 Stars3 Stars4 Stars5 Stars (4 votes, average: 5,00 out of 5)
Загрузка...

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

  1. Как собрать схему, чтобы светодиод мигал, а скорость мигания задавалась потенциометром?

    1. Попробуй найти схему секвенсора на микросхеме NE555, если ардуино не обязателен

    2. …..
      n = analogRead (A0)
      digitalWrite (9, HIGH);
      delay(n) ;
      digitalWrite (9, LOW);
      delay(n);
      ….
      Если хочешь перевести в какой-то иной диопазон то:

      n = analogRead (A0);
      n = map(n, 0, 1023, 0, 2046);
      digitalWrite (9, HIGH);
      delay(n) ;
      digitalWrite (9, LOW);
      delay(n);

      В данном случае скорость мигания уменьшается в два раза.
      Кстати я надеюсь ты поймешь что и куда подсоединять
      P. S. Я не проверял, по этому мог ошибиться

      1. Код с миганием работает, спасибо!

        void setup()
        {
        pinMode(11, OUTPUT);
        }

        void loop()
        {
        int rotation;
        rotation = analogRead(A0);
        digitalWrite(11, HIGH);
        delay(rotation);
        digitalWrite(11, LOW);
        delay(rotation);
        }

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *