Amateur Radio Station R9AL

RGB светодиодная лента

      RGB светодиодная лента представляет собой длинную и гибкую печатную плату, на которой размещаются токовые дорожки с трехцветными светодиодами и резисторами для ограничения протекающего тока. Эти светодиодные ленты называются RBG, потому что в них используются RGB-светодиоды (см. RGB - светодиод). На них может быть включен любой из цветов по отдельности, а также любой оттенок цвета за счет регулировки яркости каждого канала цвета по отдельности, что дает возможность получить даже белый свет.


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

В качестве контроллера вполне можно использовать обычные транзисторы, так как потребляемый лентой ток может быть достаточно велик. Ленты поставляются в катушках (обычно пятиметровых), но можно отрезать необходимой длины, правда разрезать ленту нужно строго по линиям разреза, указанным на ленте. Количество светодиодов на отрезках ленты должно быть кратно трем, так как минимальный сегмент ленты содержит три RGB-светодиода.

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

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

Адресная светодиодная лента - это на данном этапе самая совершенная RGB-лента.


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


Управление такое лентой гораздо сложнее, чем обычными RGB-светодиодами. В Tinkercad есть несколько разных адресных лент, от 4 до 20 светодиодов в ленте, а также ленты в форме кольца.


В нашем эксперименте мы используем ленту из четырех светощдиодов. В начале нам необходимо подключить ленту к Arduino. У адресной ленты четыре вывода: +5V и GND подключаем к плюсу и минусу источника питания, соответственно, контакт Din подключаем к любому цифровому пину Arduino, например вывод 11. С другой стороны ленты есть еще выход Do, он подключается к следующей ленте, позволяя управлять лентами по принципу каскада, как одной.

Нежелательно использовать Arduino в качестве источника питания, так как выход +5V может обеспечить ток лишь в 800 мА. Этого хватит не более чем на 13 пикселей светодиодной ленты, но у нас всего четыре светодиода в ленте, поэтому питание будем брать с платы контроллера.


Для управления лентой нам потребуется использовать библиотеку Adafruit_NeoPixel.h. В Tinkercad эта библиотека уже установлена.

Сначала напишем очень простой код, будем поочередно зажигать и гасить светодиоды:
#include "Adafruit_NeoPixel.h" // Подключаем библиотеку Adafruit NeoPixel. 

#define LED_COUNT 4            // Указываем, какое количество пикселей у нашей ленты. 
#define LED_PIN 11             // Указываем, к какому порту подключен вход ленты DIN. 


// Создаем переменную led для управления нашей лентой. 
Adafruit_NeoPixel led = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); 

void setup() 
{ 
  led.begin();   // Инициализируем ленту. 
} 

void loop() 
{ 
  // Включаем все светодиоды по очереди. 
  for (int i = 0; i < LED_COUNT; i++) 
  { 
    led.setPixelColor(i, led.Color(0, 255, 0)); // Зеленым i-й светодиод. 
    led.show();                                   // Передаем цвета ленте. 
    delay(100);                                     // Ждем 100 мс.
  } 
  
  // Выключаем все светодиоды по очереди. 
  for (int i = 0; i < LED_COUNT; i++) 
  { 
    led.setPixelColor(i, led.Color(0, 0, 0));   // Выключен i-й светодиод. 
    led.show();                                   // Передаем цвета ленте. 
    delay(100);                                     // Ждем 500 мс. 
  } 
}


Код достаточно простой, но вс еже требует дополнительных пояснений. Вот эта строка:
Adafruit_NeoPixel led = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); 
называется строкой инициализации. В ней переменная LED_COUNT - количество светодиодов в ленте, LED_PIN - к какому выводу подключена лента, NEO_GRB - цветовой формат вывода и NEO_KHZ800 - частота ШИМ.

Мы могли бы нашу программу написать иначе, без дополнительных переменных, а цвет светодиода (цвет может быть любой) можем задать в шестнадцатеричном виде:
#include "Adafruit_NeoPixel.h" // Подключаем библиотеку Adafruit NeoPixel. 

// Создаем переменную strip для управления нашей лентой. 
Adafruit_NeoPixel led = Adafruit_NeoPixel(4, 11, NEO_GRB + NEO_KHZ800); 

void setup() 
{ 
  led.begin();   // Инициализируем ленту. 
} 

void loop() 
{ 
  // Включаем все светодиоды по очереди. 
  for (int i = 0; i < 4; i++) 
  { 
    led.setPixelColor(i, 0xFF0000);   // Красным i-й светодиод. 
    led.show();                       // Передаем цвета ленте. 
    delay(100);                       // Ждем 100 мс.
  } 
  
 
  
//  Выключаем все светодиоды по очереди. 
  for (int i = 0; i < 4; i++) 
  { 
    led.setPixelColor(i, 0x000000);   // Выключен i-й светодиод. 
    led.show();                       // Передаем цвета ленте. 
    delay(100);                       // Ждем 500 мс. 
  } 
}


Теперь попробуем подключить к нашей схеме еще одну ленту:


Если сейчас запустить программу, то по прежнему будет работать только первая лента, чтобы зажигались светодиоды второй ленты, необходимо библиотеке указать что у нас 8 светодиодов, т.е. в нашей первой программе переменная LED_COUNT должна принять значение 8.

Напишем программу, которая случайным образом будет менять цвета всех восьми светодиодов, задавая цвет каждого светодиода с помощью функции random():
#include "Adafruit_NeoPixel.h" // Подключаем библиотеку Adafruit NeoPixel. 

#define LED_COUNT 8            // Указываем, какое количество пикселей у нашей ленты. 
#define LED_PIN 11             // Указываем, к какому порту подключен вход ленты DIN. 


// Создаем переменную led для управления нашей лентой. 
Adafruit_NeoPixel led = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); 

void setup() 
{ 
  led.begin();   // Инициализируем ленту. 
} 

void loop() 
{ 
  // Включаем все светодиоды по очереди. 
  for (int i = 0; i < LED_COUNT; i++) 
  { 
    led.setPixelColor(i, led.Color(random(255), random(255), random(255))); // Зеленым i-й светодиод. 
    led.show();                                                             // Передаем цвета ленте. 
    delay(100);                                                             // Ждем 100 мс.         
  } 

  int i=0;

}
В качестве практического задания:

Используя любую ленту из доступных в Tinkercad, создайте свой эффект, это может быть поочередное зажигание светодиодов, автомат "бегущий огонь" или любое другое управление цветом или яркостью светодиодов ленты.







Copyright © R9AL 2021 Все права защищены

Рейтинг@Mail.ru Яндекс цитирования