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 через пробел. Первое значение относится к красному оттенку, второе – к зеленому, третье – к синему. Коды цветов можно посмотреть, например, здесь.






