Подключение переменного резистора к Arduino
Переменный резистор, или потенциомер, представляет из себя резистор с двумя выводами, выполненный в виде пластины, с третьим подвижным контактом. При вращении ручки переменного резистора подвижный контакт перемещается вдоль пластины и сопротивление между подвижным контактом и выводами резистора изменяется. При этом в крайних положениях ручки подвижный контакт практчиески замыкается с одним из выводов резистора.
В большинстве случаев переменный резистор используется в качестве регулировочного делителя напряжения, где на выводы резистора подается напряжение сигнала, а подвижный контакт выступает средним выводом делителя. При вращении ручки переменного резистора напряжение сигнала на среднем выводе будет уменьшаться от его максимального значения вплоть до нуля. Таким образом переменные резисторы используются для регулировки уровня звука, уровня напряжения и так далее.
Применительно к Arduino переменный резистор удобно использовать в качестве ручки управления для регулировки или настройки чего либо. Поворот ручки позволяет ввести в контроллер плавно меняющееся значение. Для этого на переменный резистор подается напряжение, соответствующее напряжению питания контроллера, а подвижный контакт подключается к аналоговому входу контроллера. Аналоговый вход позволяет измерить напряжение на подвижном контакте, которое пропорционально повороту ручки переменного резистора.
В качестве примера использования переменного резистора мы осуществим плавную регулировку яркости свечения светодиода, подключенного к Arduino.
Схема подключения изображена на рисунке. Подвижный контакт переменного резистора подключен к выводу A0 платы Arduino. На выводе A0 контроллер может измерить напряжение. Светодиод подключен через токоограничивающий резистор к выводу 9 контроллера. Вывод 9 может использоваться для плавной регулировки выходного напряжения при помощи ШИМ (широтно импульсной модуляции).
Приведенный ниже скетч учитывает схему подключения переменного резистора и светодиода к соответствующим выводам контроллера.
Функция analogRead() считывает значение напряжения на выводе, преобразованное при помощи АЦП (аналогово цифрового преобразователя) контроллера в цифровой вид. Напряжение на входе A0 может изменяться от 0 до 5 В, а его цифровое представление от 0 до 1023 в зависимости от положения ручки переменного резистора. Для того что бы получить точное значение напряжения, считанное цифровое значение необходимо поделить на 204,8.
Функция analogWrite() активизирует ШИМ на указанном выводе. Глубина модуляции может принимать значение от 0 до 255, что будет соответствовать напряжению на выводе от 0 до 5 В.
Таким образом, что бы преобразовать входное цифровое значение АЦП (от 0 до 1023) в выходное значение глубины модуляции (от 0 до 255), необходимо поделить его на 4 (1024/256 = 4).
void setup() {
pinMode (9, OUTPUT); // инициализация вывода 9 как "Выход"
}
void loop() {
int sensorValue = analogRead (A0); // считывание значения напряжения на входе A0
analogWrite (9, sensorValue/4); // вывод значения на светодиод
}