СоХабр закрыт.
С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.
Доброго времени суток, Хабр. Как планировала, продолжаю цикл статей, которые помогут Вам в знакомстве с Arduino. Также, в каждой последующей статье (включая эту) вы сможете найти ответы на самые важные вопросы, которые появляются в комментариях. Для тех кто не читал прошлую часть, сюда.
В комментариях под прошлыми публикациями возникали вопросы о важности резисторов в схемах и о том как их подобрать. Рассмотрим это на практике диодов. В Arduino на обычных пинах подаётся напряжение в 5 В. А диоды рассчитаны на определённый ток. И если превысить этот предел диод сгорит. Резисторы создают сопротивление и уменьшают ток который проходит сквозь них. А чтоб рассчитать нужное сопротивление надо воспользоваться законом Ома ( I = U / R, где I – сила тока (А), U – напряжение (В) и R – сопротивление (Ом).##Продвигаемся далее в изучении Arduino
Мы научились подключать и зажигать светодиод, а также пользоваться кнопкой. Сегодня мы рассмотрим одну очень интересную вещь. Это будет потенциометр (его также называют переменный резистор)
Потенциометр – это регулируемый делитель электрического напряжения (переменный резистор). Он представляет собой резистор с подвижным контактом.
Чаще всего потенциометры используют для управления громкостью звука а также для управления яркостью освещения.
Давайте теперь поговорим о том, как это работает. У потенциометра есть 3 вывода: плюс (5В), минус (земля) и аналоговый вход. На анимационной картинке выше можно видеть как выглядит рабочий потенциометр внутри. На один крайний вывод мы получаем 5В, а на второй крайний вывод у нас идёт минус. Когда мы крутим ручку потенциометра, то ротор вращается по резистивном веществе. Средний вывод у нас — это аналоговый вывод. Когда ручка находиться в начальном положении то на аналоговый вывод поступает минимальное число. Очевидно что чем дальше мы проворачиваем ручку тем большее число мы получаем на выходе.
Для сегодняшних экспериментов нам понадобиться:
Схема подключения выглядит так:
Вот так выглядит простой код считывания и вывода данных с потенциометра в монитор порта:
int pot = A0; // потенциометр подключён к А0
int val; // переменная для хранения значений
void setup() {
Serial.begin(9600); // настраиваем скорость обмена данных на 9600 бит в секунду
pinMode(pot, INPUT);
}
void loop() {
val = analogRead(pot); // считываем данные с потенциометра
Serial.println(val); // с новой строки выводим значения
}
В платах Arduino контроллер имеет интерфейс UART. Именно он позволяет нам установить двунаправленный поток связи с компьютером. В Arduino IDE эта связь имеет графическую оболочку. Именно это и есть монитор порта. Чтоб его открыть можно нажать на значок лупы в правом верхнем углу, в панели инструментов выбрать Инструменты => Монитор порта или просто нажать сочетание клавиш Ctrl + Shift + M. Далее для работы нашей программы необходимо выбрать соответствующее значение скорости а именно 9600 бод.
Давайте объединим потенциометр и диод. И у нас выйдет плавное управление яркостью светодиода. Подключаем всё по следующей схеме:
После подключения давайте напишем код к нашему импровизированному светильнику:
int pot = A0; // потенциометр подключён к А0
int val; // переменная для хранения значений
int LED = 3; // светодиод подключён к 3 пину
void setup() {
Serial.begin(9600); // настраиваем скорость обмена данных на 9600 бит в секунду
pinMode(pot, INPUT);
pinMode(LED, OUTPUT);
}
void loop() {
val = analogRead(pot); // считываем данные с потенциометра
Serial.println(val); // с новой строки выводим значения
val = val / 4; // делим значения с потенциометра на 4
analogWrite(LED, val); // выводим значение переменной, которое получаем после деления на 4
}
Короткие объяснения по коду. Деление на 4 необходимо для следующего. Потенциометр может принимать значения от 0 до 1023. А вот аналоговый вход/выход передаёт значения только в диапазоне от 0 до 255. Поэтому деление нам в данном случае просто необходимо.
Map – это математичесская функция, которая переобразовывает значение переменной из одного диапазона в другой. Функция в коде выглядит следующим образом – map(value, fromLow, fromHigh, toLow, toHigh). Именно она может в нашем коде заменить деление. И вобще эта функция достаточно часто бывает полезна при работе с Arduino. Поэтому наш код теперь выглядит так:
int pot = A0; // потенциометр подключён к А0
int val; // переменная для хранения значений
int LED = 3; // светодиод подключён к 3 пину
void setup() {
Serial.begin(9600); // настраиваем скорость обмена данных на 9600 бит в секунду
pinMode(pot, INPUT);
pinMode(LED, OUTPUT);
}
void loop() {
val = analogRead(pot); // считываем данные с потенциометра
Serial.println(val); // с новой строки выводим значения
val = map(val, 0, 1023, 0, 255); // применяем функцию
analogWrite(LED, val);
}
На этом у нас конец третьей части. Спасибо за внимание.
комментарии (20)