Диммер — электронное устройство, предназначенное для изменения электрической мощности (регулятор мощности). Обычно используется для регулировки яркости света, излучаемого лампами накаливания или светодиодами.
Регулировку яркости светодиода будем производить при помощи переменного резистора, это устройство состоит из полукруглой пластины,
покрытой веществом, имеющим электрическое сопротивление,
и скользящего контакта с ручкой. У переменного резистора
три вывода — по концам пластины и скользящий контакт.
Сопротивление меняется в зависимости от длины отрезка
резистивной пластины от ее начала до скользящего контакта. Чем
больше этот путь, тем выше сопротивление.
Рисунок 1. Переменный резистор. Внешний вид, устройство и условное обозначение
Переменный резистор можно представить как схему из двух резисторов
С помощью переменного резистора будем получать аналоговый сигнал. Используем широко распространенную схему резисторного делителя напряжения. Резисторный делитель — это два последовательных участка цепи, называемых плечами, сумма напряжений на которых равна напряжению питания. Плечо между минусом питания и средней точкой называют нижним, а другое — верхним.
Резисторный делитель используется для деления напряжения. Например, если верхнее и нижнее плечи имеют одинаковые сопротивления, то напряжение на средней точке делителя равно половине напряжения питания. Такой делитель делит напряжение на 2. Подключим нижнее плечо с земле, а верхнее к напряжению питания. Тогда при вращении ручки переменного резистора на его средней точки напряжение будет изменяться от 0 до 5 в. Подключим среднюю точку ко входу аналого- цифрового преобразователя (на контроллере это A0…A5) и будем измерять напряжение на ней.
Микроконтроллеры Atmega, содержат шестиканальный аналого-цифровой преобразователь (АЦП). Разрешение преобразователя составляет 10 бит, что позволяет на выходе получать значения от 0 до 1023. Основным применением аналоговых входов большинства платформ Arduino является чтение аналоговых датчиков.
const int analogPin = A0;//константа с номером пина для переменного резистора const int ledPin = 3;//константа с номером пина(ШИМ) для светодиода int inputValue = 0;//значение считанного аналогового сигнала int outputValue = 0;//коэффициент заполнения ШИМ сигнала void setup() { } void loop() { inputValue = analogRead(analogPin);//считываем аналоговый сигнал и записываем его в переменную outputValue = map(inputValue,0,1023,0,255);//преобразуем считанные данные из интервала 0-1023 пропорционально в интервал 0 to 255 analogWrite(ledPin,outputValue);//формируем ШИМ сигнал в соответствии с конвертированными данными }
Давайте посмотрим, как все работает.
в строке 10 считываем аналоговый сигнал с пина к которому подключен переменный резистор и записываем его в переменную inputValue
inputValue = analogRead(analogPin);
в строке 11 с помощью функции map() конвертируем сигнал записанный в переменную inputValue из диапазона 0-1023 (аналогового сигнала) в диапазон 0-255 (ШИМ сигнала) и записываем его в переменную outputValue
outputValue = map(inputValue,0,1023,0,255);
и в строке 12 формируем ШИМ сигнал на пине к которому подключен светодиод с коэффициентом заполнения записанным в переменную outputValue ранее
analogWrite(ledPin,outputValue);