RGB светодиод представляет собой 3 светодиода красного, зеленого и синего цвета в одном корпусе. При использовании ШИМ можно получить целую уйму цветов и оттенков.
Различают RGB с общим катодом (common Cathode) и с общим анодом (common Anode). Вот как можно подключить RGB к arduino:
RGB светодиод с общим анодом
Слева на картинке подключение с общим анодом: подключаем анод к напряжению +5В на плате ардуино, а OUT1, OUT2 и OUT3 — к трем пинам ардуины (например, 3, 5 и 6, где есть ШИМ).
Чтобы загорелся красный цвет, необходимо на выходе OUT1 установить логический 0 (LOW). Если нужно зеленный — то LOW выставить на OUT2, если синий — OUT3.
RGB светодиод с общим катодом
Справа на картинке подключение с общим катодом: подключаем катод к GND на плате, выходы OUT1, OUT2 и OUT3 — к пинам 3, 5, 6 платы ардуино. Чтобы загорелся красный цвет, необходимо на выходе OUT1 установить логическую 1 (HIGH).
Мне попался готовый модуль от китайцев. На платке запаян RGB светодиод с общим катодом и 3 резистора на 1 кОм. Резисторы лучше подобрать самому, поскольку яркость свечения различаются. В принципе, если использовать только 3 цвета, то сойдет и так.
#define RED 11 // "Красный" анод #define GREEN 12 // "Зеленный" анод #define BLUE 13 // "Синий" анод void setup() { /* Настройка пинов на выход */ pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); } void loop() { /* Красный */ digitalWrite(RED, HIGH); digitalWrite(GREEN, LOW); digitalWrite(BLUE, LOW); delay(500); /* Зеленый */ digitalWrite(RED, LOW); digitalWrite(GREEN, HIGH); digitalWrite(BLUE, LOW); delay(500); /* Синий */ digitalWrite(RED, LOW); digitalWrite(GREEN, LOW); digitalWrite(BLUE, HIGH); delay(500); }
Отпаял светодиод и подобрал другие номиналы резисторов. С контакта D9 на красный анод через резистор 130 Ом, с контакта D10 на зеленый через резистор 470 Ом, c контакта D11 через резистор 220 Ом на синий, GND к GND. Загрузил скетч, который принимает 3 числа с последовательного порта и , согласно им, генерирует ШИМ-сигналы.
#define RED 9 // "Красный" анод #define GREEN 10 // "Зеленный" анод #define BLUE 11 // "Синий" анод void setup() { Serial.begin(9600); /* Настройка пинов на выход */ pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); } void loop() { while (Serial.available() > 0) { /* Ищет целое число из сериал порта и записывает его в переменную red */ int red = Serial.parseInt(); /* Ищет следующее число и записывает его в переменную green */ int green = Serial.parseInt(); /* Ищет следующее число и записывает в переменную blue */ int blue = Serial.parseInt(); /* Если был переход на новую строку */ if (Serial.read() == '\n') { // Функция constrain ограничивает значение диапазоном от 0 до 255 /* Для RGB светодиода с общим катодом */ red = constrain(red, 0, 255); green = constrain(green, 0, 255); blue = constrain(blue, 0, 255); /* Для RGB светодиода с общим анодом нужно инвертировать значения*/ /* red = 255 - constrain(red, 0, 255); green = 255 - constrain(green, 0, 255); blue = 255 - constrain(blue, 0, 255); */ /* Устанавливаем ШИМ волны, согласно принятым значениям */ analogWrite(RED, red); analogWrite(GREEN, green); analogWrite(BLUE, blue); /* Выведем 3 числа в последовательный порт в шестнадцатиричном виде */ Serial.print(red, HEX); Serial.print(green, HEX); Serial.println(blue, HEX); } } }
В монитор порта через пробел необходимо отправить 3 значения от 0 до 255 через пробел. Первое значение относится к красному оттенку, второе — к зеленому, третье — к синему. Коды цветов можно посмотреть, например, здесь.