RGB-светодиод


RGB-светодиод Помимо одноцветных диодов, в природе (и в стартере) есть — RGB-светодиоды (Red, Green, Blue — красный, зелёный, синий), у этих ног по-больше — один общий катод и по аноду на каждый цвет. Фактически это просто три светодиода в одном корпусе. Меняя ток через каналы можно получить любой цвет.
Суём катод на GND, а остальные через резисторы будем ШИМить:

Пример нехитрого скетча:

//обзавём каналы
int red = 9;
int green = 10;
int blue = 11;

void setup() {

  pinMode(red, OUTPUT);
  pinMode(green, OUTPUT);
  pinMode(blue, OUTPUT);

}

void loop() {
   digitalWrite(red, HIGH);  // посветим красным
   delay(500);
   digitalWrite(red, LOW);
   delay(500);
   digitalWrite(green, HIGH);  // посветим зелёным
   delay(500);
   digitalWrite(green, LOW);
   delay(500);
   digitalWrite(blue, HIGH); // посветим синим
   delay(500);
   digitalWrite(blue, LOW);
   delay(500);

   analogWrite(red, 235);  // белый
   analogWrite(green, 100);
   analogWrite(blue, 255);
   delay(1000);
   analogWrite(red, 255);  // фиолетовый
   analogWrite(green, 0);
   analogWrite(blue, 255);
   delay(1000);
   analogWrite(red, 255);  // жёлтый
   analogWrite(green, 140);
   analogWrite(blue, 0);
   delay(1000);
   digitalWrite(red, LOW);
   digitalWrite(green, LOW);
   digitalWrite(blue, LOW);
}


Можно менять цвета плавно и в рандомном порядке — так красивее=) А если накрыть светодиод рассеивателем, получится симпатичный ночник=)
Соорудим.
Залепим по-быстрому из ПКЛа рассеивающую елду:

Гусары, молчать!…=))
И нарисуем соответсвующий скетч:

//обзавём каналы
int RedPin = 9;
int GreenPin = 10;
int BluePin = 11;
//заведём переменные текущих значений каналов, и сразу их забьём рандомными значениями
int ValRed = random(0, 255);
int ValGreen = random(0, 255);
int ValBlue = random(0, 255);

void setup() {
  pinMode(RedPin, OUTPUT);  //настроим пины каналов на выход
  pinMode(GreenPin, OUTPUT);
  pinMode(BluePin, OUTPUT);

  analogWrite(RedPin, ValRed);   //и сразу запихает туда первую пачку значений
  analogWrite(GreenPin, ValGreen);
  analogWrite(BluePin, ValBlue);
}

void loop() {

  int NewValRed = random(10, 255); //сгенерим новые значения
  int NewValGreen = random(10, 255);
  int NewValBlue = random(10, 255);

  //будем крутить пока новые не сравняются с текущими
  while ((ValRed != NewValRed)&(ValGreen != NewValGreen)&(ValBlue != NewValBlue)) {
//для красного канала
      if (ValRed < NewValRed){  //если новое больше текущего
        analogWrite(RedPin, ValRed++ ); //то текущий увеличиваем
      };
      if (ValRed > NewValRed) { // если меньше уменьшаем
        analogWrite(RedPin, ValRed-- );
      };
 //для зелёного канала
     if (ValGreen < NewValGreen){
        analogWrite(GreenPin, ValGreen++ );
      };
     if (ValGreen > NewValGreen) {
        analogWrite(GreenPin, ValGreen-- );
      };
//для синего канала
     if (ValBlue < NewValBlue){
        analogWrite(BluePin, ValBlue++ );
      };
     if (ValBlue > NewValBlue) {
        analogWrite(BluePin, ValBlue-- );
      };
   delay(10); //чтоб в глазах не рябило подождём
  }
}

В итоге:

http://www.youtube.com/watch?v=lrrLTV8iCmE

тёмные участки на елде — более толстый слой ПКЛ-а, если будете делать что-нибудь в этом духе — обеспечьте равномерность толщины стенок=)
Скетч тоже можно ещё ровнять и ровнять — сделать постоянной общую яркость, поменять распределение вероятностей — а то красных не дождаться, как и «чистых цветов», ну т.д.


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение