Перейти к основному содержимому

Аналоговые выводы. Потенциометр

Аналоговые выводы

Analog In — порты, принимающие аналоговый сигнал от датчиков, работают на вход. Данные порты также можно запрограммировать, как цифровые входы/выходы.

Порты Analog In

Рисунок 1. Порты Analog In

Аналоговый сигнал может меняться во времени, он непрерывен, а цифровой меняется только скачками (два положения 0В или 5В).

Аналоговый и цифровой сигналы

Рисунок 2. Аналоговый и цифровой сигналы

Для считывания сигналов с аналоговых вводов используется команда analogRead(pin). Эта команда возвращает значение от 0, при 0В на аналоговом пине, до 1023 при 5В на аналоговом пине.

Потенциометр

Потенциометр - это переменный резистор, т.е. его сопротивление меняется в зависимости от положения ручки. Крайнее левое положение соответствует минимальному использованию его внутреннего сопротивления, крайнее правое - максимальному.

Потенциометр

Рисунок 3. Потенциометр

Вот он выглядит потенциометр в реальности и в Tinkercad. У него 3 вывода. Два крайних - это +5V и GND (не имеет значения какой слева, а какой справа). Средний вывод подключается к аналоговому пину и выдает сигнал от 0 до 1023.

Потенциометр в реальности и в Tinkercad

Рисунок 4. Потенциометр в реальности и в Tinkercad

Считываем показания в монитор порта

Собираем схему с потенциометром

Схема с потенциометром

Рисунок 5. Схема с потенциометром

Программа для вывода показаний потенциометра в монитор порта

#define potenciometr A0 //создаем переменную для потенциометра
int potValue; //создаем переменную для хранения показаний потенциометра

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

void loop(){
potValue = analogRead(potenciometr); //считываем показания потенциометра и сохраняем в переменную potValue
Serial.print("Potenciometr value: "); //выводим в монитор порта фразу "Potenciometr value: "
Serial.println(potValue); //выводим в монитор порта значение переменной potValue и ждем 100 миллисекунд
delay(100);
}

Изменяем яркость светодиода потенциометром

Собираем схему с потенциометром и светодиодом

Схема с потенциометром и светодиодом

Рисунок 6. Схема с потенциометром и светодиодом

Программа для изменения яркости светодиода потенциометром

#define potenciometr A0   //создаем переменную для потенциометра
#define led 3 //создаем переменную для светодиода
int potValue; //создаем переменную для хранения показаний потенциометра

void setup(){
pinMode(potenciometr, INPUT); //настраиваем пин, к которому подключен потенциометр, как вход
pinMode(led, OUTPUT); //настраиваем пин, к которому подключен светодиод, как выход
Serial.begin(9600); //настраиваем работу с монитором порта
}

void loop(){
potValue = analogRead(potenciometr); //считываем показания потенциометра и сохраняем в переменную potValue
potValue = potValue/4; //делим значение переменной на 4
analogWrite(led, potValue); //задаем значение переменной potValue в качестве яркости светодиода
Serial.print("Potenciometr value: "); //выводим в монитор порта фразу "Potenciometr value: "
Serial.println(potValue); //выводим в монитор порта значение переменной potValue и ждем 100 миллисекунд
delay(100);
}
подсказка

Подробнее о analogWrite() можно прочитать здесь.

Подробнее о analogRead() можно прочитать здесь.

Задания

  1. Сделайте аналоговый калькулятор. Соберите схему с платой Arduino и двумя потенциометрами, подключенными в пинам А0 и А1. Запрограммируйте вывод в монитор порта значений, считанных с потенциометров, разделенных на 10 и округленных. Также выведите в монитор порта сумму этих значений.

  2. Усложните аналоговый калькулятор. Соберите схему с платой Arduino, двумя потенциометрами, подключенными в пинам А2 и А3, и кнопкой, подключенной к пину 5. Запрограммируйте вывод в монитор порта значений, считанных с потенциометров, разделенных на 10 и округленных. Также выведите в монитор порта результат арифметической операции между этими числами. Выбор одной из четырех арифметических операций должен осуществляться с помощью кнопки.