Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

RGB-светодиод

04.Communication: ReadASCIIString
RGB-модуль KY-009 с SMD-светодиодом и с общим катодом
RGB-модуль KY-016 с общим катодом

Кроме стандартных одноцветных светодиодов существуют RGB-светодиоды. Мы можем вручную управлять цветом в разных пределах в формате, знакомым многим разработчикам - RGB (Красный_Зелёный_Синий).

У RGB-светодиода четыре ножки. Одна из них (самая длинная) - общий катод или анод, который находится вторым слева. Если вы вдруг будете возмущаться, что у вас бракованный светодиод, у которого самая длинная ножка является третьей, то я могу удалённо починить его (бесплатно). Возьмите светодиод в руки, закройте глаза и медленно поверните его. Откройте глаза - самая длинная ножка стала второй. Магия!

RGB-светодиод

К каждой ножке, которая отвечает за цвет, нужно подключать резисторы, как и для обычных светодиодов (подойдут на 220 Ом). Подключение общей ножки зависит от модели. Если светодиод с общим анодом, то подключайте к питанию, если с общим катодом - то к заземлению. При неправильном подключении светодиод просто не будет светиться.

Если быть точным, каждый цвет требует определённое сопротивление. Изготовители иногда указывает эти значения в даташитах. Можете воспользоваться данными для более точного подбора цветов. Кроме того матовые светодиоды лучше передают цвет, чем прозрачные. Пробуйте разные варианты в ваших проектах.

04.Communication: ReadASCIIString

В Arduino IDE есть пример File | Examples | 04.Communication | ReadASCIIString, использующий RGB-светодиод. Мы можем вводить нужные значения цвета в Serial Monitor и светодиод начнёт светиться заданным цветом.

Подключаем компоненты как на рисунке. Первую ножку подключаем к третьему выводу, вторую ножку к пятому выводу, а третью ножку к шестому выводу. Общую ножку подключаем к питанию 5В. Если вы не обратили внимания, то напомню, что нужно использовать выводы с символом тильды (~), чтобы плавно менять напряжение.

RGB-светодиод


// выводы 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-модуль KY-009 с SMD-светодиодом и с общим катодом

Бывают 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);
  }
}

RGB-модуль KY-016 с общим катодом

Трёхцветный светодиодный модуль содержит RGB-светодиод с тремя входами и общим катодом. На плате модуля установлены ограничительные резисторы.

KY-016


KY-016 | Arduino 
----------------
     R | 11
     G | 10
     B | 9
   GND | GND

Все предыдущие примеры применимы к данному модулю.

Дополнительные материалы

Смотри также пример для ESP32.

Реклама