Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
04.Communication: ReadASCIIString
RGB-модуль KY-009 с SMD-светодиодом и с общим катодом
RGB-модуль с SMD-светодиодом 5050
RGB-модуль KY-016 с общим катодом
Кроме стандартных одноцветных светодиодов существуют RGB-светодиоды. Мы можем вручную управлять цветом в разных пределах в формате, знакомым многим разработчикам - RGB (Красный_Зелёный_Синий).
У RGB-светодиода четыре ножки. Одна из них (самая длинная) - общий катод или анод, который находится вторым слева. Если вы вдруг будете возмущаться, что у вас бракованный светодиод, у которого самая длинная ножка является третьей, то я могу удалённо починить его (бесплатно). Возьмите светодиод в руки, закройте глаза и медленно поверните его. Откройте глаза - самая длинная ножка стала второй. Магия!
К каждой ножке, которая отвечает за цвет, нужно подключать резисторы, как и для обычных светодиодов (подойдут на 220 Ом). Подключение общей ножки зависит от модели. Если светодиод с общим анодом, то подключайте к питанию, если с общим катодом - то к заземлению. При неправильном подключении светодиод просто не будет светиться.
Если быть точным, каждый цвет требует определённое сопротивление. Изготовители иногда указывает эти значения в даташитах. Можете воспользоваться данными для более точного подбора цветов. Кроме того матовые светодиоды лучше передают цвет, чем прозрачные. Пробуйте разные варианты в ваших проектах.
В Arduino IDE есть пример File | Examples | 04.Communication | ReadASCIIString, использующий RGB-светодиод. Мы можем вводить нужные значения цвета в Serial Monitor и светодиод начнёт светиться заданным цветом.
Подключаем компоненты как на рисунке. Первую ножку подключаем к третьему выводу, вторую ножку к пятому выводу, а третью ножку к шестому выводу. Общую ножку подключаем к питанию 5В. Если вы не обратили внимания, то напомню, что нужно использовать выводы с символом тильды (~), чтобы плавно менять напряжение.
// выводы 3, 5 и 6
const int redPin = 3;
const int greenPin = 5;
const int bluePin = 6;
void setup() {
Serial.begin(9600);
// режим вывода
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
while (Serial.available() > 0) {
// ищем правильные числовые значения из входящего потока
int red = Serial.parseInt();
// делаем это снова
int green = Serial.parseInt();
// и ещё раз
int blue = Serial.parseInt();
// ищем символ новой строки (конец данных)
if (Serial.read() == '\n') {
// ограничиваем значения в пределах 0 - 255 и инвертируем
// если используется общий катод, то применяйте "constrain(color, 0, 255);"
red = 255 - constrain(red, 0, 255);
green = 255 - constrain(green, 0, 255);
blue = 255 - constrain(blue, 0, 255);
// применяем значения к каждому цвету:
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
// выводим введённые значения в виде шестнадцатеричного числа
Serial.print(red, HEX);
Serial.print(green, HEX);
Serial.println(blue, HEX);
}
}
}
Запускаем скетч, открываем окно Serial Monitor и вводим три числа через запятую. Каждое число должно находиться в пределах от 0 до 255. Например, чтобы получить чистый красный цвет, нужно ввести 255,0,0. Вместо запятой можно вводить любые нечисловые символы, но зачем?
Белый цвет - это 255,255,255. Тогда по идее чёрный - это 0,0,0. Но на самом деле вы не получите чёрный цвет, а просто выключите светодиод.
Бывают RGB-светодиоды в виде модуля с четырьмя выводами в формате SMD. Как и у обычного светодиода, три вывода отвечают за цвет, а один общий вывод является общим катодом. Поэтому провод присоединяем к земле, а не к питанию.
Скетчи остаются без изменений, только в одном месте меняются три строчки кода. В предыдущем примере есть комментарий на этот счёт.
red = constrain(red, 0, 255);
green = constrain(green, 0, 255);
blue = constrain(blue, 0, 255);
Упрощённый скетч с включением разных цветов.
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
int val;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(greenPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
for (val = 255; val > 0; val--)
{
analogWrite(redPin, val); //set PWM value for red
analogWrite(greenPin, 128 - val); //set PWM value for green
analogWrite(bluePin, 255 - val); //set PWM value for blue
Serial.println(val); //print current value
delay(1);
}
for (val = 0; val < 255; val++)
{
analogWrite(redPin, val);
analogWrite(greenPin, 128 - val);
analogWrite(bluePin, 255 - val);
Serial.println(val);
delay(1);
}
}
Аналогичный модуль как и KY-009. Подключение и пример остаются без изменений.
Каждый цвет управляется отдельно. На плате уже размещены токоограничивающие резисторы.
Трёхцветный светодиодный модуль содержит RGB-светодиод с тремя входами и общим катодом. На плате модуля установлены ограничительные резисторы.
KY-016 | Arduino
----------------
R | 11
G | 10
B | 9
GND | GND
Все предыдущие примеры применимы к данному модулю.
Смотри также пример для ESP32.