Проект 5: RGB-світлодіод. Широтно-імпульсна модуляція. Переливати кольорами веселки

В цьому експерименті ми розглянемо широтно-імпульсну модуляцію, яка дозволяє Arduino виводити аналогові дані на цифрові виводи, і застосуємо ці знання для створення прозвольних кольору світла з допомогою RGB-світлодіоди.

Необхідні компоненти:

Arduino не може на цифровий вивід видавати довільне напруження. Видається або +5 В (HIGH), або 0 В (LOW). Але рівнем напруги управляється багато: наприклад, яскравість світлодіода або швидкість обертання мотора. Для симуляції неповної напруги використовується ШІМ (широтно-імпульсна модуляція, або PWM) .ШІМ - це операція отримання змінного аналогового значення за допомогою цифрових сигналів. Цифровий сигнал на виході постійно перемикається між максимальним і мінімальним значеннями. Перемикання має частоту в тисячі герц. Око не помічає мерехтіння більше 50 Гц, тому нам здається, що світлодіод не мерехтить, а горить в неповну силу. Тривалість включення максимального значення називається шириною імпульсу. Для отримання різних аналогових величин змінюється ширина імпульсу (див. Рис. 5.1) .Arduino-функція analogWrite () видає ШІМ-сигнал на цифровий вивід Arduino. Після виклику analogWrite () на виході буде генеруватися постійна прямокутна хвиля із заданою шириною імпульсу до наступного виклику analogWrite (), частота видається ШІМ-сигналу дорівнює 490 Гц. На платах Arduino Nano і UNO ШІМ підтримують виводи 3, 5, 6, 9, 10 і 11, на платі Mega - виводи 2-13. Дані виводи відмічені знаком тильди ~.


Рис. 5.1. Залежність значень ШІМ від ширини імпульсу

В даному експерименті ми використовуємо RGB-світлодіод. RGB розшифровується як абревіатура Red, Green, Blue, за допомогою цих кольорів можна отримати будь-який колір шляхом змішування. Світлодіод RGB відрізняється від звичайного тим, що містить 3 невеликих кристала R, G, B, які зможуть синтезувати будь-який колір або відтінок. RGB-світлодіод має 4 виведення (див. Рис. 5.2). Підключимо RGB-світлодіод до плати Arduino і змусимо переливатися його кольорами веселки. На рис. 5.3 показана схема підключення RGB-світлодіоди до плати Arduino. Тепер перейдемо до написання скетчу. Насправді веселка має безліч кольорів, а 7 кольорів були придумані тільки тому, що ці кольори найбільш стійко сприймаються і визначаються оком і ми їх можемо назвати і згадати приказкою «Чапля осінь жде завзято, буде сани фарбувати».


Рис. 5.2. Виводи RGB-світлодіода

Рис. 5.3. Схема підключення RGB-світлодіода

Список цих 7 основних кольорів веселки з розкладанням по компонентам R, G і B представлений в табл. 5.1.

Наш світлодіод повинен переливатися від червоного до фіолетового, проходячи через всі 7 основних кольорів. Алгоритм обчислення будь-якого проміжного кольору веселки наступний:

  1. Приймемо за початкову точку відліку червоний колір (255, 0, 0) .
  2. Будемо поступово збільшувати значення зеленої складової G, поки не досягнемо значення оранжевого (255, 125, 0), а потім і жовтого кольору (255, 255, 0) .
  3. Поступово зменшимо значення червоної складової R до значення зеленого кольору (0, 255, 0) .
  4. Поступово збільшимо значення синьої складової B до значення блакитного кольору (0, 255, 255) .
  5. Поступово зменшимо кількість зеленої складової G до значення синього кольору (0, 0, 255) .
  6. Поступово збільшимо кількість червоної складової R до значення фіолетового кольору (255, 0, 255) .
  7. Витримуємо невелику паузу і переходимо до кроку 1. Вміст скетчу показано в лістингу 5.1.
const int RED = 11; // вивід червоною ноги RGB-світлодіода
const int GREEN = 10; // вивід зеленої ноги RGB-світлодіода
const int BLUE = 9; // вивід синьою ноги RGB-світлодіода
int red; // змінна для зберігання R-складової кольору
int green; // змінна для зберігання G-складової кольору
int blue; // змінна для зберігання B-складової кольору
void setup ()
{;}
void loop ()
{
// від червоного до жовтого
red = 255; green = 0; blue = 0;
for (green = 0; green <= 255; green ++)
setRGB (red, green, blue);
// від жовтого до зеленого
for (red = 255; red> = 0; red -)
setRGB (red, green, blue);
// від зеленого до блакитного
for (blue = 0; blue <= 255; blue ++)
setRGB (red, green, blue);
// від блакитного до синього
for (green = 255; green> = 0; green -)
setRGB (red, green, blue);
// від синього до фіолетового
for (red = 0; red <= 255; red ++)
setRGB (red, green, blue); delay (2000);
}
// функція установки кольору RGB-світлодіода
void setRGB (int r, int g, int b)
{
analogWrite (RED , r);
analogWrite (GREEN, g);
analogWrite (BLUE, b);
delay (10);
}

Порядок підключення:

  1. Щоб бачити змішування трьох компонентів R, G, B, а не окремі складові, необхідно зробити поверхню світлодіода шорсткою невеликий обробкою напилком або накрити RGB-світлодіод матовою пластіной.
  2. Підключаємо RGB-світлодіод за схемою на рис. 5.3.
  3. Завантажуємо в плату Arduino скетч з лістингу 5.1.
  4. Спостерігаємо світіння світлодіода переливаються кольорами веселки.