В данном уроке вы научитесь использовать циклы с условиями, узнаете какие типы сигналов существуют и в чем их различия, научитесь использовать фоторезистор.
Цикл while while(условие == истина) { //выполняемые операторы } Цикл while называется циклом с условием. Пока условие в скобках истинно, операторы внутри скобок будут циклично выполняться. Важно! Программа не будет выполняться дальше, пока условие не станет ложным.
Цифровой сигнал - это такой тип сигнала, который может принимать только фиксированные значения. В нашем случае это значения 5В (HIGH или логическая 1), а также 0В (LOW, или логический 0).
Контроллер распознаёт в качестве логической единицы сигнал с напряжением в диапазоне от 3 до 5.5В. А в качестве логического нуля - сигнал с напряжением в диапазоне от 0 до 2 В. При использовании функции digitalRead() во время работы с сигналом в диапазоне от 2В до 3В вы можете получить непредсказуемое значение.
Аналоговый сигнал - такой тип сигнала, который может принимать любые значения (не только 0 и 1).
Обратите внимание: все сигналы в природе являются аналоговыми
analogRead() - функция, считывающая значение на аналоговом пине. Функция преобразует напряжение на пине в цифровое значение в диапазоне от 0 до 1023 (при том, значению 1023 соответствует напряжение 5В на аналоговом пине).
ШИМ (широтно-импульсная модуляция) - метод, используемый микроконтроллером для имитации аналогового сигнала. Как мы помним, контроллеры умеют работать только с цифровым сигналом.
Изменяя шрину импульсов цифрового сигнала, контроллер создаёт иллюзию аналогового сигнала. При помощи этого метода можно управлять работой аналоговых устройств (яркостью светодиодов, скоростью моторов и др
analogWrite(номерПина,значение) - команда отправляющая ШИМ-сигнал на указанный пин. Обратите внимание, хоть в имени команды фигурирует слово analog, данная команда применяется к цифровому пину обозначенному символом ~
Задание. Создайте устройство, изменяющее яркость светодиодной подсветки в зависимости от уровня внешней освещенности. Для получения данных об уровне освещенности, используйте фоторезистор.
Соберите электрическую схему устройства: светодиод подключается через резистор к ШИМ-пину. Из фоторезистора и резистора с сопротивлением до 5 КОм формируем «подстроечный» резистор, который будет реагировать на уровень освещенности. Подключаем эту сборку к аналоговому входу А0.
Рассмотрим некоторые элементы кода программы: в переменную sensor записываются данные с аналогового порта. Экспериментально мы выяснили что при использовании резистора с номиналом 5 КОм, значения на аналоговом входе при максимальном и минимальном уровне освещенности изменяются в диапазоне от 28 до 929.
Логика работы устройства следующая: чем выше уровень освещенности, тем ярче должен включаться светодиод. Соответственно, нам необходимо «перевернуть» значение, полученное после использования команды analogRead().
Для этого, мы отнимаем от максимально возможного значения (929) значение полученное с датчика в конкретный момент времени (переменная sensor).
Как вы помните, команда analogWrite() использует значение аргумента для ШИМ в диапазоне от 0 до 255. Для того чтобы перевести значение в диапазоне от 0 до 929 к диапазону 0-255, мы разделим это самое значение на 4 и сохраним его в переменную PWM.
Таким образом, если уровень освещенности максимален. значение переменной sensor равно 929, а зачение переменной PWM = (929-929)/4 = 0. Светодиод отключен. Когда уровень освещенности минимален: PWM=(929-28)/4 = 225, светодиод горит.