Андрей Смирнов
Время чтения: ~13 мин.
Просмотров: 35

Управление RGB лентой с помощью Arduino и драйвера L298N

На предыдущем уроке мы уже попробовали зажигать и гасить с помощью Ардуино обычный светодиод. Теперь же разберемся с многоцветным светодиодом, который часто называют сокращенно: RGB-светодиод. RGB — это аббревиатура, которая расшифровывается как: Red — красный, Green — зеленый, Blue — синий. То есть внутри этого устройства размещается сразу три отдельных светодиода. В зависимости от типа, RGB-светодиод может иметь общий катод или общий анод.

1. Смешение цветов

Чем RGB-светодиод, лучше трех обычных? Всё дело в свойстве нашего зрения смешивать свет от разных источников, размещенных близко друг к другу. Например, если мы поставим рядом синий и красный светодиоды, то на расстоянии несколько метров их свечение сольется, и глаз увидит одну фиолетовую точку. А если добавим еще и зеленый, то точка покажется нам белой. Именно так работают мониторы компьютеров, телевизоры и уличные экраны. Матрица телевизора состоит из отдельно стоящих точек разных цветов. Если взять лупу и посмотреть через нее на включенный монитор, то эти точки можно легко увидеть. А вот на уличном экране точки размещаются не очень плотно, так что их можно различить невооруженным глазом. Но с расстояния несколько десятков метров эти точки неразличимы. dots-1024x1024.jpg Получается, что чем плотнее друг к другу стоят разноцветные точки, тем меньшее расстояние требуется глазу чтобы смешивать эти цвета. Отсюда вывод: в отличие от трех отдельностоящих светодиодов, смешение цветов RGB-светодиода заметно уже на расстоянии 30-70 см. Кстати, еще лучше себя показывает RGB-светодиод с матовой линзой.

2. Подключение RGB-светодиода к Ардуино

Поскольку многоцветный светодиод состоит из трех обычных, мы будем подключать их отдельно. Каждый светодиод соединяется со своим выводом и имеет свой отдельный резистор. В уроке мы используем RGB-светодиод с общим катодом, так что провод к земле будет только один. Принципиальная схемаrgbled_схема.pngВнешний вид макетаrgbled_bb-1024x486.png

3. Программа для управления RGB-светодиодом

Составим простую программу, которая будет по очереди зажигать каждый из трех цветов.

const byte rPin = 3;  const byte gPin = 5;  const byte bPin = 6;    void setup() {      pinMode( rPin, OUTPUT );      pinMode( gPin, OUTPUT );      pinMode( bPin, OUTPUT );  }    void loop() {      // гасим синий, зажигаем красный      digitalWrite( bPin, LOW );      digitalWrite( rPin, HIGH );      delay( 500 );      // гасим красный, зажигаем зеленый      digitalWrite( rPin, LOW );      digitalWrite( gPin, HIGH );      delay( 500 );      // гасим зеленый, зажигаем синий      digitalWrite( gPin, LOW );      digitalWrite( bPin, HIGH );      delay( 500 );  }

Загружаем программу на Ардуино и наблюдаем результат. Немного оптимизируем программу: вместо переменных rPin, gPin и bPin применим массив. Это нам поможет в следующих заданиях.

const byte rgbPins[3] = {3,5,6};    void setup() {      for( byte i=0; i i++ )          pinMode( rgbPins[i], OUTPUT );  }    void loop() {      digitalWrite( rgbPins[2], LOW );      digitalWrite( rgbPins[0], HIGH );      delay( 500 );      digitalWrite( rgbPins[0], LOW );      digitalWrite( rgbPins[1], HIGH );      delay( 500 );      digitalWrite( rgbPins[1], LOW );      digitalWrite( rgbPins[2], HIGH );      delay( 500 );  }

4. Семь цветов радуги

Теперь попробуем зажигать одновременно по два цвета. Запрограммируем такую последовательность цветов:

  • красный
  • красный + зеленый = желтый
  • зеленый
  • зеленый + синий = голубой
  • синий
  • синий + красный = фиолетовый

Оранжевый цвет мы для упрощения опустили. Так что, получилось шесть цветов радуги 🙂

const byte rgbPins[3] = {3,5,6};  const byte rainbow[6][3] = {      {1,0,0}, // красный      {1,1,0}, // жёлтый      {0,1,0}, // зелёный      {0,1,1}, // голубой      {0,0,1}, // синий      {1,0,1}, // фиолетовый  };    void setup() {      for( byte i=0; i i++ )          pinMode( rgbPins[i], OUTPUT );  }    void loop() {      // перебираем все шесть цветов      for( int i=0; i<6; i+{          // перебираем три компоненты каждого из шести цветов          for( int k=0; k k++ ){              digitalWrite( rgbPins[k], rainbow[i][k] );          }          delay( 1000 );      }  }

В результате работы программы получается:

5. Плавное изменение цвета

Мы не зря подключили RGB-светодиод к выводам 3, 5 и 6. Как известно, эти выводы позволяют генерировать ШИМ сигнал разной скважности. Другими словами, мы можем не просто включать или выключать светодиод, а управлять уровнем напряжения на нем. Делается это с помощью функции analogWrite. Сделаем так, что наш светодиод будет переходить между цветами радуги не скачкообразно, а плавно.

const byte rgbPins[3] = {3,5,6};  int dim = 1;    void setup() {      for(byte i=0; i i++){          pinMode( rgbPins[i], OUTPUT );      }      // начальное состояние - горит красный цвет      analogWrite(rgbPins[0], 255);      analogWrite(rgbPins[1], 0);      analogWrite(rgbPins[2], 0);  }    void loop() {      // гасим красный, параллельно разжигаем зеленый      for(int i=255; i>=0; i--){          analogWrite( rgbPins[0], i/dim );          analogWrite( rgbPins[1], (255-i)/dim );          delay(10);      }      // гасим зеленый, параллельно разжигаем синий      for(int i=255; i>=0; i--){          analogWrite( rgbPins[1], i/dim );          analogWrite( rgbPins[2], (255-i)/dim );          delay(10);      }      // гасим синий, параллельно разжигаем красный      for(int i=255; i>=0; i--){          analogWrite( rgbPins[2], i/dim );          analogWrite( rgbPins[0], (255-i)/dim );          delay(10);      }  }

Переменная dim определяет яркость свечения. При dim = 1 имеем максимальную яркость. Загружаем программу на Ардуино.

Задания

  1. Индикатор температуры. Добавим в схему термистор и подключим его к аналоговому входу. Светодиод должен менять свой цвет в зависимости от температуры термистора. Чем ниже температура, тем более синий цвет, а чем выше, тем более красный.
  2. RGB лампа с регулятором. Добавим в схему три переменных резистора и подключим их к аналоговым входам. Программа должна непрерывно считывать значения резисторов и менять цвет соответствующей компоненты RGB-светодиода.

 2+

Это шестой урок курса по изучению Ардуино и здесь мы добавим новый элемент из наших наборов. Это RGB-светодиод, входящий в состав наборов«Базовый» и «Изучаем Arduino» серии «Дерзай».

RGB расшифровывается как аббревиатура Red, Green, Blue, при помощи этих цветов можно получить любой цвет путем смешения. Светодиод RGB содержит 3 небольших кристалла R, G, B, с помощью которых мы сможем синтезировать любой цвет или оттенок. В этом уроке мы подключим RGB-светодиод к плате Arduino и заставим его переливаться всеми цветами радуги. Для данного проекта Вам понадобятся детали, которые имеются в наборах «Базовый» и «Изучаем Arduino» :

  1. Arduino Uno;
  2. Кабель USB;
  3. Плата прототипирования;
  4. Провода «папа-папа» — 7 шт;
  5. Резисторы 220 Ом – 3 шт;
  6. RGB-светодиод – 1 шт;
  7. Потенциометр.

Собираем схему, показанную на рисунке 1.

Рисунок 1. Схема соединений

Теперь приступим к написанию скетча. RGB-светодиод должен переливаться всеми цветами радуги от красного до фиолетового, затем переходим к красному и так по кругу. Скорость перехода цветов регулируем потенциометром. В таблице 1 приведены данные значений R, G, B для 7 основных цветов радуги.

Таблица 1. Данные значений  R, G, B для 7 основных цветов радуги

Цвет R G B
красный 255
оранжевый 255 125
желтый 255 255
зеленый 255
голубой 255 255
синий 255
фиолетовый 255 255

Для смешения цветов необходимо с выводов Arduino на R, G, B входы светодиода подавать полный спектр напряжений. Но Arduino не может на цифровой вывод выдавать произвольное напряжение. Выдается либо +5В (HIGH), либо 0 В (LOW). Для симуляции неполного напряжения используется ШИМ (Широтно-Импульсная Модуляция, или PWM).

Я надеюсь, Вы уже изучили главу 2.6 книги Джереми Блюма «Изучаем Arduino: инструменты и методы технического волшебства», где подробно рассказывается о механизме широтно-импульсной модуляции. Алгоритм выполнения программы:

  • Увеличиваем значение зеленой составляющей G, пока не достигнем значения оранжевого (255,125,0),
  • Увеличиваем значение зеленой составляющей G, пока не достигнем желтого цвета (255,255,0).
  • Уменьшаем значение красной составляющей R до значения зеленого цвета (0,255,0).
  • Начальную точка — красный цвет (255,0,0).
  • Увеличиваем значение синей составляющей B до значения голубого цвета (0,255,255).
  • Уменьшаем значение зеленой составляющей G до значения синего цвета (0,0,255).
  • Постепенно увеличим значение красной составляющей R до значения фиолетового цвета (255,0,255).
  • Уменьшаем значение синей составляющей B до значения красного цвета (255,0,0).

Переходим к шагу 1.

После каждого шага делаем паузу для фиксации показа цвета,

 delay(VIEW_PAUSE);

проверяем значение потенциометра и изменяем значение скорости изменения цвета.

 void setpause()   {   pause=map(analogRead(POT),0,1024,MIN_PAUSE,MAX_PAUSE);   Serial.print("pause=");Serial.println(pause);   }

Создадим в Arduino IDE новый скетч, занесем в него код из листинга 1 и загрузим скетч на на плату Arduino. Напоминаем, что в настройках Arduino IDE необходимо выбрать тип платы (Arduino UNO) и порт подключения платы. Листинг 1

 const int RED=11; // вывод R RGB-светодиода   const int GREEN=10; // вывод G RGB-светодиода   const int BLUE=9; // вывод B RGB-светодиода   int red; // переменная для хранения R-составляющей цвета   int green; // переменная для хранения G-составляющей цвета   int blue; // переменная для хранения B-составляющей цвета   const int POT=A0; // вывод подключения потенциометра   const int MIN_PAUSE=10; // минимальная задержка смены цвета, мс   const int MAX_PAUSE=100; // максимальная задержка смены цвета, мс   int pause; // переменная для хранения текущей задержки   const int VIEW_PAUSE=2000; // время фиксации основного цвета, мс    void setup()   {   Serial.begin(9600);   }   void loop()   {   // от красного к желтому   Serial.println("red - yellow");   red=255;green=0;blue=0;   for(green=0;green<=255;green++) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от желтому к зеленому Serial.println("yellow - green"); red=255;green=255;blue=0; for(red=255;red>=0;red--)   setRGB(red,green,blue);   setpause();   delay(VIEW_PAUSE);   // от зеленого к голубому   Serial.println("green - blue");   red=0;green=255;blue=0;   for(blue=0;blue<=255;blue++) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от голубого к синему Serial.println("blue - blue"); red=0;green=255;blue=255; for(green=255;green>=0;green--)   setRGB(red,green,blue);   setpause();   delay(VIEW_PAUSE);   // от синего к фиолетовому   Serial.println("blue - purple");   red=0;green=0;blue=255;   for(red=0;red<=255;red++) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от фиолетового к красному Serial.println("purple - red"); red=255;green=0;blue=255; for(blue=0;blue>=0;blue--)   setRGB(red,green,blue);   setpause();   delay(VIEW_PAUSE);   }   // функция установки цвета RGB-светодиода   void setRGB(int r,int g,int b)   {   analogWrite(RED,r);   analogWrite(GREEN,g);   analogWrite(BLUE,b);   delay(pause);   }   // функция установки текущей задержки   void setpause()   {   pause=map(analogRead(POT),0,1024,MIN_PAUSE,MAX_PAUSE);   Serial.print("pause=");Serial.println(pause);   }  

После загрузки скетча наблюдаем изменение цвета RGB-светодиода цветами радуги, потенциометром меняем скорость смены цвета (см. рисунок 2,3).

Рисунок 2,3. RGB-светодиод – всеми цветами радуги

Светодиодная лента Ардуино

Руководство по выбору светодиодных лент к Arduino.

При покупке светодиодных лент есть несколько вещей, которые следует учитывать. Во-первых, это функциональность. Если вы планируете использовать устройства в основном для окружающего освещения, то правильным выбором станет простая диодная полоса 12 В RGB (SMD5050). Многие приборы поставляются с инфракрасным пультом для управления ими, хотя в этом проекте мы будем использовать Arduino. Потратьте немного времени на покупки. На момент написания статьи метр ленты можно было купить всего за 1 доллар. Если вы хотите что-то более высокотехнологичное, рассмотрите SPI RGB ленту.

Эти полосы, иногда называемые Neopixels, имеют интегрированные чипсеты, которые позволяют им управлять каждым диодом поодиночке. Это означает, что они способны на большее, чем просто дополнительное освещение. Вы можете использовать их для создания дешевого светодиодного дисплея с нуля. Из лент можно соорудить даже собственную домашнюю тучку с извергающими молниями. Или бегущую светодиодную ленту.

Подробне о SPI RGB лентах вы можете прочитать здесь.

Светодиодная лента Ардуино — Подключение

Svetodiodnaya-lenta-Arduino-2-300x191.png

Подключение адресной светодиодной ленты к Ардуино

Прежде чем настраивать схему светодиодная лента Ардуино, давайте поговорим о МОП-структуре — MOSFET.

Настройте свою схему следующим образом:

Svetodiodnaya-lenta-Arduino-3-300x164.png 1. Подключите контакты Arduino 9, 6 и 5 к концам затвора трех МОП-транзисторов и подключите резистор 10 кОм в соответствии с заземлением. 2. Подключите ножки источника к заземлению. 3. Подключите дренажные опоры к разъемам Green, Red и Blue на светодиодной ленте. 4. Подключите шину питания к разъему +12v светодиодной полосы (обратите внимание, что на изображении выше провод питания черный, чтобы соответствовать цветам разъемов на моей светодиодной полосе). 5. Подключите заземление Arduino. 6. Подключите стабилизатор питания 12 В в сеть. Большинство светодиодных полосок имеет разъемы Dupont, к которым легко подключиться. Если у вас нет таких, вам понадобится припаять провода к диодной ленте. Не паникуйте, если вы новичок в пайке — это легкая работа. В интернете есть множество руководств по началу работы с паяльником, с которыми можно ознакомиться, если пайка доставляет вам трудности. Для этого проекта мы будем управлять нашей платой Arduino по USB . Вы можете выбрать питание платы с помощью вывода VIN, но перед этим убедитесь, что вы знаете ограничения мощности для своего устройства.

После всех процедур схема и Светодиодная лента Ардуино должна выглядеть примерно так:

Svetodiodnaya-lenta-Arduino-4-300x173.png

Теперь, когда вы все связали, пришло время сделать простой код Arduino, чтобы контролировать его.

Светодиодная лента Ардуино — написание кода.

Вы можете сделать эскиз самостоятельно или просто загрузить готовый код из GitHub (https://gist.github.com/anonymous/d4fa3719478c3c5a9c321cc372e9540).

Начните с определения штырей, которые будут использоваться для управления МОП-транзисторами.

В вашей настройке мы установим выводы Arduino. Мы также будем вызывать пару функций с задержкой в 5 секунд. Этих функций еще не существует, но не беспокойтесь, мы доберемся до них.

Закончив этот код, сохраните его. Проверьте код и загрузите на плату Arduino. Если вы видите ошибки, проверьте код снова на предмет каких-либо опечаток или отсутствующих точек с запятой.

Плавное включение светодиодной ленты на Ардуино

Svetodiodnaya-lenta-Arduino-5-300x115.png

Теперь вы должны увидеть, что ваша светодиодная лента Ардуино наращивает яркость, удерживая белый оттенок в течение 5 секунд, а затем равномерно исчезает до нуля:

Svetodiodnaya-lenta-Arduino-6-300x114.png

Если у вас возникли трудности, дважды проверьте свою проводку и код.

Ардуино и адресная светодиодная лента

Этот проект — простой способ начать работу, но идеи, которые он охватывает, могут быть расширены для действительно эффектного освещения. С помощью всего лишь нескольких компонентов вы можете создать свой собственный восход солнца. Если у вас есть стартовый комплект с Arduino, вы можете использовать любую кнопку или датчик для запуска светодиодов при входе в комнату, например:

Как мы видим, при открытии двери светодиодная лента Ардуино плавно зажигается и встречает человека.

Svetodiodnaya-lenta-Arduino-8-300x199.png

Теперь, когда мы рассмотрели схему с обычной светодиодной лентой, перейдем к адресным светодиодным лентам  SPI RGB лента.

Светодиодная лента Ардуино — Яркие идеи.

Эти ленты требуют меньшего количества компонентов для запуска, и есть некоторая свобода в отношении именно того, какие значения компонентов вы можете использовать. Конденсатор в этой цепи гарантирует, что светодиоды 5v получают постоянный источник питания. Резистор становится гарантом того, что сигнал данных, полученный от Arduino, не загружен всяческими помехами.

Вам понадобится:

● Светодиодная лента 5v WS2811/12/12B; Все три модели имеют встроенные микросхемы и работают одинаково.

● 1 x Arduino Uno или аналогичная совместимая плата;

● 1 x резистор 220-440 Ом;

● 1 x конденсатор microFarad 100-1000 (все, что между этими двумя значениями, отлично подойдет);

● Макет и монтажные провода;

● Блок питания 5 В.

Настройте схему, как показано на рисунке:

Svetodiodnaya-lenta-Arduino-9-300x172.png

Обратите внимание, что конденсатор должен быть правильной ориентации.

Вы можете понять, какая сторона прикрепляется к рейке земля, ища знак минуса (-) на корпусе конденсатора. На этот раз мы задействуем Arduino, используя источник питания 5 В. Это позволит устройству работать автономно.

Во-первых, убедитесь, что ваша плата может работать с 5 В, прежде чем присоединить ее к источнику питания. Почти все платы работают на 5V через USB-порт, но штыри питания на некоторых могут иногда пропускать регуляторы напряжения и превращать их в поджаренные тосты.

Кроме того, рекомендуется убедиться, что несколько отдельных источников питания не подключены к Arduino — отсоединяйте USB-кабель всякий раз, когда используете внешний источник питания.

После того, как все подключено, прибор должен выглядеть так:

Svetodiodnaya-lenta-Arduino-10-300x140.png

Теперь, когда разобрались со светодиодной лентой, давайте перейдем к коду.

Светодиодная лента Ардуино — Бегущий огонь или световая волна

Чтобы безопасно запрограммировать нашу плату, отсоедините линию VIN от линии электропередач. Вы подключите ее позже обратно.

Присоедините свой Arduino к компьютеру и откройте Arduino IDE. Убедитесь, что у вас правильный номер платы и порта, выбранный в меню «Сервис»> «Сервис и инструменты»> «Порт».

Мы будем использовать библиотеку FastLED для тестирования нашей установки. Вы можете добавить библиотеку, нажав на Эскиз> Включить библиотеку> Управление библиотеками и поиск FastLED. Нажмите «Установить», и библиотека будет добавлена в среду IDE.

В разделе «Файл»> «Примеры»> «FastLED» выберите эскиз DemoReel100. В этом эскизе задействованы различные эффекты, которые можно сделать с помощью светодиодных полос WS2812, и невероятно легко настроить.

Все, что вам нужно изменить, — это переменная DATA_PIN, чтобы она соответствовала значку 13 и переменной NUM_LEDS для определения количества светодиодов, находящихся в полосе, которую вы используете. В этом случае я применяю только небольшую линию из 10 светодиодов, вырезанных из более длинной полосы.

Используйте большее количество для красивейшего светового шоу!

Вот и все!

Svetodiodnaya-lenta-Arduino-11-300x141.png

Загрузите эскиз на свою плату, отсоедините USB-кабель и включите источник питания 5 В.

Наконец, подключите VIN Arduino к линии электропередач и наслаждайтесь представлением.

 Светодиодная лента Ардуино RGB

Если ничего не происходит, проверьте свою проводку и укажите правильный вывод Arduino в демо-эскизе.

Светодиодная лента Ардуино — Безграничные возможности

Учиться работать со светодиодными лентами — хороший способ познакомиться с базовым программированием на Arduino, но лучший способ учиться — изменять коды. Побалуйтесь с приведенным выше кодом и посмотрите, что вы можете сделать! Если все это слишком сложно для вас, подумайте о проектах Arduino для начинающих.

Используемые источники:

  • https://robotclass.ru/tutorials/arduino-rgb-led/
  • https://playarduino.ru/uroki-arduino/rgb-svetodiod-s-arduino-perelivatsya-vsemi-tsvetami-radugi/
  • https://lightru.pro/svetodiodnaya-lenta-arduino/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации