Эксперимент 7. Регулирование яркости светодиода

Для вывода данных традиционно применяется двоичная система с применением логических значений 0 и 1. Но не всегда схемотехнику необходимо значение нуля или единицы.
Среди цифровых пинов контроллера выделяются несколько со знаком ~, данные пины поддерживают сигнал ШИМ (PWM), то есть можно создать сигнал который имеет определенное напряжение и продолжительность.
Контроллер поддерживает восьмибитную ШИМ, что позволяет выбрать переменную в диапазоне значений от 0 до 256.
Давайте посмотрим это на практике, на примере плавного включения и выключения светодиода, подключенному к 3 пину.

Схема эксперимента

Рисунок 1. Электрическая принципиальная схема эксперимента

Рисунок 2. Монтажная схема эксперимента

Программный код эксперимента

Exp7
  1. //объявляем константу с номером пина для светодиода
  2. const int Led = 3;
  3.  
  4. void setup() {
  5. pinMode(Led, OUTPUT); // инициализируем пин как выход
  6. }
  7.  
  8. void loop() {
  9. // создаем цикл, где яркость (brightness) изначально равна 0, и с каждым шагом увеличивается на 1 единицу
  10. for (int brightness = 0; brightness < 255; brightness ++) {
  11. analogWrite(Led, brightness); // формируем сигнал ШИМ на пине
  12. delay(5); // создаем задержку 5 миллисекунд
  13. }
  14. // теперь производим уменьшение значения переменной (уменьшаем яркость)
  15. for (int brightness = 255; brightness >= 0; brightness --) {
  16. analogWrite(Led, brightness);
  17. delay(5);
  18. }
  19. }

Как мы уже знаем, у сигнала с широтно- импульсной модуляцией есть два параметра- частота и коэффициент заполнения(скважность). Частота сигнала ШИМ в контроллере около 500 герц, а коэффициент заполнения сигнала будем задавать с помощью функции analogWrite(Led, brightness), где:

  • Led – номер вывода для генерации ШИМ сигнала.
  • brightness – коэффициент заполнения ШИМ.

Для плавного изменения яркости светодиода необходимо изменять коэффициент заполнения, для этого мы будем использовать оператор цикла for()

Операторы цикла используется для повторения блока операторов, заключенных в фигурные скобки.
Подробнее о цикле For

В условии цикла for мы записали, чтобы значение нашей переменной brightness увеличивалась от 0 до 255, с шагом 1, то есть выражения в теле цикла (заключенные в фигурные скобки) будут повторяться пока значение переменной не достигнет 255, после этого выполнение цикла завершиться.
И поскольку переменная brightness записана в качестве аргумента функции analogWrite(Led, brightness), то с каждым шагом выполнения цикла будет увеличиваться коэффициент заполнения ШИМ, чтобы это происходило плавно в теле цикла присутствует небольшая задержка в 5 мс.
В результате выполнения этого блока программы светодиод будет плавно набирать яркость.
Во втором блоке с оператором for в условии записано уменьшение значения переменной brightness, и соответственно уменьшению коэффициента заполнения ШИМ в процессе выполнения цикла, в результате чего светодиод плавно гаснет.
После завершения работы второго цикла, выполнение передается на первый и далее по кругу.

Попробуй изменить программу так, чтобы светодиод набирал не полную яркость либо затухал не полностью