Эксперимент 13. Лампа настроения

Теперь будем управлять яркостью сразу трех цветов, чтобы получить различные их сочетания. Но если мы будем управлять тремя цветами одновременно, то получим лишь пульсирующий белый цвет. Ведь все три составляющие вместе дают белый, интесивностью которого мы управляем. Как же получить плавно переливающиеся цвета? Будем управлять каждым цветом по функции синуса, но с разными периодами.

Рисунок 1. Графики яркости светодиодов в зависимости от времени

Из рисунка видно, что периоды изменения цветов разные, благодаря этому на каждом шаге мы получаем разную яркость для каждого цвета и, соответственно, разный результирующий цвет. Вертикальными пунктирными линиями показаны условные шаги.

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

Оставим собранной без изменений схему из прошлого эксперимента

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

Токоограничительные резисторы в схеме обязательны!

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

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

Exp13.py
  1. from machine import Pin, PWM
  2. import time
  3. import math
  4. _init()
  5.  
  6. LedPinB = 15
  7. LedPinG = 14
  8. LedPinR = 13
  9.  
  10. ledB = Pin(LedPinB, Pin.OUT)
  11. ledG = Pin(LedPinG, Pin.OUT)
  12. ledR = Pin(LedPinR, Pin.OUT)
  13.  
  14. pwmB = PWM(ledB)
  15. pwmG = PWM(ledG)
  16. pwmR = PWM(ledR)
  17.  
  18. pwmB.freq(500)
  19. pwmG.freq(500)
  20. pwmR.freq(500)
  21.  
  22. while True:
  23. for i in range(100):
  24. pwmB.duty(int(math.sin(i / 50 * math.pi) * 500 + 500))
  25. pwmG.duty(int(math.sin(i / 75 * math.pi) * 500 + 500))
  26. pwmR.duty(int(math.sin(i / 25 * math.pi) * 500 + 500))
  27. time.sleep_ms(30)

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