Это старая версия документа!


Эксперимент 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. }

Теперь мы получили объект для управления аппаратным генератором ШИМ, подключенным к 15 выводу микроконтроллера. Теперь нужно настроить и его. Как мы уже знаем, у сигнала с широтно- импульсной модуляцией есть два параметра- частота и коэффициент заполнения или скважность. Выберем частоту достаточно большую, чтобы глаз не замечал мерцания, например, 200 герц

  1. pwmLed.freq(200)

Настройки закончили, теперь будем управлять яркостью светодиода:

  1. while True:
  2. pwmLed.duty(200)
  3. time.sleep(1)
  4. pwmLed.duty(1023)
  5. time.sleep(1)

В бесконечном цикле мы устанавливаем значение ШИМ равное 200, а потом 1023 с задержками по 1 секунде. В результате наш светодиод одну секунду горит тускло, потом одну секунду горит ярко.

Осталось разобраться что это за цифры 200 и 1023, которые мы передали в качестве параметров в функцию duty(). Это и есть коэффициент заполнения, только здесь он он выражен не в процентах, а числом от 0 до 1023, где 0 — это 0%, а 1023 — это 100%.

Когда тебе надоест смотреть на результат работы этой программы, то, как обычно, останови ее через кнопку остановки. Программа завершится, а работа ШИМ генератора— нет, ведь он не привязан к нашей программе, это отдельное устройство, которое мы лишь настроили и запустили, но работает оно само.

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