Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
products:aruno:exp8 [2020/05/28 08:29] – создано alexnikproducts:aruno:exp8 [2020/08/28 11:48] (текущий) alexnik
Строка 1: Строка 1:
-===== Эксперимент 7Аппаратный ШИМ =====+===== Эксперимент 8Диммер =====
  
-Среди цифровых пинов контроллера выделяются некоторые со знаком ''~'', данные пины поддерживают сигнал ШИМ (PWM), то есть можно создать сигнал который имеет определенное напряжение и продолжительность.\\+Диммер — электронное устройство, предназначенное для изменения электрической мощности (регулятор мощности). Обычно используется для регулировки яркости света, излучаемого лампами накаливания или светодиодами.\\ 
 +Регулировку яркости светодиода будем производить при помощи переменного резистора, это устройство состоит из полукруглой пластины
 +покрытой веществом, имеющим электрическое сопротивление, 
 +и скользящего контакта с ручкой. У переменного резистора 
 +три вывода — по концам пластины и скользящий контакт. 
 +Сопротивление меняется в зависимости от длины отрезка 
 +резистивной пластины от ее начала до скользящего контакта. Чем 
 +больше этот путь, тем выше сопротивление. 
 + 
 +{{ :products:esp-iot:varr.png?nolink |}} 
 +//Рисунок 1. Переменный резистор. Внешний вид, устройство и условное обозначение// 
 + 
 +Переменный резистор можно представить как схему из двух резисторов 
 +{{ :products:esp-iot:varr.1.png?nolink |}} 
 + 
 +==== Делитель напряжения ==== 
 +С помощью переменного резистора будем получать аналоговый сигнал. 
 +Используем широко распространенную схему резисторного 
 +делителя напряжения. Резисторный делитель — это два 
 +последовательных участка цепи, называемых плечами, сумма 
 +напряжений на которых равна напряжению питания. Плечо между 
 +минусом питания и средней точкой называют нижним, а другое — 
 +верхним. 
 + 
 +{{ :products:esp-iot:varr.2.png?nolink |}} 
 + 
 +Резисторный делитель используется для деления напряжения. 
 +Например, если верхнее и нижнее плечи имеют одинаковые 
 +сопротивления, то напряжение на средней точке делителя равно 
 +половине напряжения питания. Такой делитель делит напряжение 
 +на 2. 
 +Подключим нижнее плечо с земле, а верхнее к напряжению питания. Тогда при вращении ручки переменного резистора на его средней точки напряжение будет изменяться от 0 до 5 в. Подключим среднюю точку ко входу аналого- цифрового преобразователя (на контроллере это A0...A5) и будем измерять напряжение на ней. 
 +<WRAP center round tip 60%> 
 +Микроконтроллеры Atmega, содержат шестиканальный [[theory:adc | аналого-цифровой преобразователь (АЦП)]]. Разрешение преобразователя составляет 10 битчто позволяет на выходе получать значения от 0 до 1023. Основным применением аналоговых входов большинства платформ Arduino является чтение аналоговых датчиков. 
 +</WRAP> 
 + 
 +==== Схема эксперимента ==== 
 +{{ :products:ardu:adcexp_sch.png?nolink |}} 
 +//Рисунок 1. Электрическая принципиальная схема эксперимента// 
 + 
 +{{ :products:ardu:exp05.png?direct&400 |}} 
 +//Рисунок 2. Монтажная схема эксперимента// 
 + 
 +==== Программный код эксперимента ==== 
 + 
 +<file cpp Exp8[enable_line_numbers="2", start_line_numbers_at="1"]> 
 +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);//формируем ШИМ сигнал в соответствии с конвертированными данными 
 + } 
 +</file> 
 + 
 +Давайте посмотрим, как все работает.\\ 
 +в **строке 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);''\\ 
 + 
 + 
 +==== Дополнительное задание ==== 
 +<WRAP center round tip 60%> 
 +  * Сейчас, когда резистор выкручен полностью влево, светодиод не горит. А когда выкручен полностью вправо — горит на полную мощность. Как изменить программу, чтобы стало наоборот? 
 +  * Как добиться того же результата изменяя схему устройства, не изменяя программу? 
 +</WRAP>