Принцип работы транзистора для плавного управления светодиодной лентой
Транзистор работает как водопроводный кран, только для электронов. Чем выше напряжение, подаваемое на базу биполярного транзистора либо сток полевого, тем меньше сопротивление в цепочке эмиттер-коллектор, тем выше ток, проходящий через нагрузку.
Подключив транзистор к аналоговому порту Ардуино, присваиваем ему значение от 0 до 255, изменяем напряжение, подаваемое на коллектор либо сток от 0 до 5В. Через цепочку коллектор-эмиттер будет проходить от 0 до 100% опорного напряжения нагрузки.
Для управления светодиодной лентой arduino необходимо подобрать транзистор подходящей мощности. Рабочий ток для питания метра светодиодов 300-500мА, для этих целей подойдет силовой биполярный транзистор. Для большей длины потребуется полевой транзистор.
Схема подключения LED ленты к ардуино:
Основные технические характеристики
Чтобы понять, подойдёт ли данный тип LED-ленты для решения поставленных задач, необходимо узнать её параметры. Для этого предлагаем рассмотреть основные технические характеристики светодиодной ленты SMD 5050.
Напряжение питания
Значительная часть светодиодных лент рассчитана на работу от сети постоянного тока напряжением 12 В, что обусловлено несколькими факторами:
- +12 В – это стандарт, применяемый для многих видов аккумуляторов, включая автомобильные;
- +12 В позволяет запитать группу из 3-х последовательно включенных светодиодов любого цвета с минимальными потерями на ограничивающем резисторе;
- +12 В является наиболее безопасным напряжением для человека.
Светодиодная лента SMD 5050 на 12 В – это оптимальный вариант для конструирования подсветки в домашних условиях, т.к. для её подключения можно воспользоваться не только готовым блоком питания, но и блоком питания от компьютера или аккумулятором от ИБП.
Также в продаже можно найти светодиодные ленты SMD 5050 на 24 В и 36 В, подключаемые к соответствующему БП постоянного тока, и с питанием от сети переменного тока 220 В, подключаемые через диодный выпрямитель. Модели с таким напряжением не пользуются большой популярностью по разным причинам, в т.ч. из-за большой кратности резки. Для адресной ленты SMD 5050 напряжение питания составляет 5 В.
Степень защиты от влаги и пыли
Важным параметром при выборе светодиодной ленты является степень защиты от внешнего воздействия твёрдых предметов и воды (IPXX). Пренебрегать этим параметром нельзя, т.к. он влияет на стоимость и на способность изделия противостоять негативному влиянию внешних факторов в процессе эксплуатации. Как правило, внешняя оболочка светодиодных лент SMD 5050 имеет следующий класс защиты:
- IP20 – от твёрдых предметов диаметром более 12,5 мм и никак не препятствует попаданию воды. Такое изделие не имеет никакого покрытия и может применяться только внутри сухих помещений (гостиные, спальни, офисы).
- IP33 – от твёрдых предметов диаметром более 2,5 мм и от капель воды. В данном случае покрытие выполнено из тонкого слоя лака. Кроме сухих помещений, лента может применяться для подсветки кухни, где существует вероятность попадания на неё водяных капель.
- IP54 – с частичной защитой от пыли и брызг воды в виде силиконового слоя только со стороны элементов. Как и в предыдущем варианте, такая лента предназначена для оформления интерьера кухонь и прочих помещений с временно повышенной влажностью.
- IP65 – с полной защитой от пыли и струй воды. В данном случае защитный слой – это силиконовое покрытие со всех сторон. Светодиодная лента с IP выше 65 вполне подходит для уличной подсветки и ванных комнат.
- IP67 – выдерживает кратковременное нахождение под водой. Визуально от изделий с IP65 отличается типом оболочки (ПВХ профиль и силикон сверху). Она прекрасно подходит для авто- и вело- тюнинга.
- IP68 – наивысшая степень пыле и влагозащиты. Такая LED-лента размещена внутри ПВХ-трубки и способна длительно без повреждений выдерживать воздействие воды под давлением. Сфера её применения – украшение бассейнов и фонтанов.
Плотность светодиодов
Этот параметр указывает на количество светодиодов в одном погонном метре ленты и может принимать значения: 30, 60, 120 и 240 шт./м. Чем выше плотность монтажа, тем больше световой поток и мощность потребления светодиодной ленты SMD 5050. Чтобы не допустить деградации светодиодов, ленту с плотностью 120 и 240 светодиодов на метр необходимо клеить на алюминиевый профиль.
Иногда вместо плотности (шт./м.) на бобине можно увидеть надпись «количество – 300 шт.» Это значит, что производитель указал общее количество светодиодов в ленте длиной 5 метров. Соответственно плотность такой ленты стандартная – 60 шт./м.
Световой поток
Для монохромных и RGB светодиодных лент SMD 5050 результирующая величина светового потока зависит от цвета свечения. Известно, что глаз человека лучше всего воспринимает зелёный свет. Поэтому RGB лента, включённая в режиме зелёного света, кажется наиболее яркой. Также не стоит забывать о том, что световой поток LED-ленты «Эконом» класса примерно на 30% ниже, чем у «Премиум» класса. Причём существенная разница в качестве может наблюдаться даже у одного производителя. Например:
- Foton SMD5050-30led/m-RGB-IP20-Econom – 180 lm;
- Foton SMD5050-30led/m-RGB-IP20-Premium – 270 lm.
На световой поток белой светодиодной ленты SMD5050 влияет цветовая температура (оттенок). Для чипа SMD 5050 нейтрального света (4500-5500°K) нормой считается световой поток 18 лм; тёплого света (3000-4000°K) – 16 лм; холодного света (6000-7500°K) – 20 лм. Умножая данные значения на плотность, получим суммарное количество люмен, испускаемых одним метром светодиодной ленты.
Что нужно, чтобы подключить LED к плате Arduino
Вариантов подключения светодиода два. Для целей обучения можно выбрать любой.
- Использовать встроенный светодиод. В этом случае не понадобится больше ничего, кроме кабеля для подключения к ПК через разъем USB – для питания и программирования. Внешний источник напряжения для запитывания платы применять бессмысленно: потребляемый ток невелик.
-
Подключить внешние светодиоды. Здесь дополнительно понадобятся:
- сам светодиод;
- токоограничивающий резистор мощностью 0,25 Вт (или больше) номиналом 250-1000 Ом (в зависимости от LED);
- провода и паяльник для подключения внешней цепи.
Подключение внешнего светодиода непосредственно к выходу контроллера.
LED подключаются катодом к любому цифровому выводу микроконтроллера, анодом на общий провод через балластное сопротивление. При большом количестве светодиодов может понадобиться и дополнительный источник питания.
Управление яркостью светодиода
Мы можем не только включать или выключать свет, но и управлять его яркостью. Для этого используется специальная технология с красивым названием ШИМ. Подключившись к пинам контроллера, поддерживающим ШИМ, можно регулировать интенсивность свечения с помощью функции analogWrite(). Мы должны указывать ей в качестве параметров номер пина и значение из диапазона от 0 до 255. Чем больше число, тем ярче будет светить лампочка. Например, для пина 3 пример будет выглядеть так: analogWrite(3, 255) или analogWrite(3, 100). В первом случае яркость будет максимально возможная, во втором – гораздо меньше.
Нужно помнить, что далеко не все пины контроллера поддерживают ШИМ. У Arduino Uno, Nano, основанных на ATMEGA328, шим поддерживают пины 3, 5, 6, 9, 10, 11. У платы Mega таких пинов гораздо больше.
Как подключить светодиод к Arduino Uno / Nano
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- несколько светодиодов и резисторов 220 Ом;
- провода «папа-папа».
Для надёжной сборки устройств создаются печатные платы, на что уходит много времени. Для быстрой сборки электрических схем без пайки используют макетную плату (breadboard). Под слоем пластика на макетной плате находятся медные пластины-рельсы (дорожки), выложенные по простому принципу (смотри фото). Дорожки служат для создания контакта между радиоэлементами и проводами.
Быстрая сборка схем на макетной плате
Одну и ту же схему можно собрать разными способами
Длинная ножка светодиодов — анод, она всегда подключается к плюсу
Для чего светодиод включают к Ардуино с резистором? Дело в том, что в светодиоде стоит кристалл который боится больших токов. Резистор призван ограничивать силу тока (Амперы), чтобы светодиод не перегорел. Большой ток губителен для светодиода, меньший ток (благодаря подключению резистора) обеспечивает длительную работу. Чтобы подключить светодиод к Ардуино без резистора, используйте 13 порт.
Кабель с разъемами USB-A и USB-B для подключения принтера
Если у вас не установлена программа Arduino IDE, то скачайте последнюю версию на официальном сайте www.arduino.cc. С помощью USB кабеля производится запись программ, также плата получает питание от компьютера. Если требуется автономная работа электронного устройства, то плату можно запитать от батарейки или блока питания на 7-12 В. При подаче питания на плате загорится светодиод индикации.
Убедитесь, что программа определила ваш тип платы Ардуино
Шаг 1. Зайдите в основном меню «Инструменты -> Плата». Если плата Arduino определилась неправильно, то выберите необходимый тип, например, Arduino Uno.
Шаг 2. Установите порт (кроме COM1) подключения в меню «Инструменты -> Порт», так как при подключении Ардуино к ПК создается виртуальный COM-порт.
Убедитесь, что программа определила порт подключения Ардуино
Скетч для включения светодиода от Ардуино
void setup() { pinMode(13, OUTPUT); // объявляем пин 13 как выход } void loop() { digitalWrite(13, HIGH); // зажигаем светодиод delay(1000); // ждем 1 секунду digitalWrite(13, LOW); // выключаем светодиод delay(1000); // ждем 1 секунду }
Подключение светодиодов к другим портам производится по схеме, размещенной выше (подключение резистора к светодиодам также необходимо). А в скетче требуется изменить номера портов, к которым подключены светодиоды. При этом сколько вы используете светодиодов в схеме, столько и раз следует прописать команды .
Скопируйте код и вставьте скетч в программу Arduino IDE
Перед загрузкой программы в микроконтроллер можно выполнить проверку (компиляцию), на наличие ошибок в коде. В случае обнаружения ошибки — будет получено сообщение в нижнем окошке Arduino IDE. В любом случае, при загрузке скетча, сначала происходит проверка и компиляция программы. При компиляции происходит перевод программы в двоичный код, понятный микроконтроллеру.
Перед загрузкой программы в микроконтроллер, потребуется сохранить скетч на компьютере. Нажмите «Сохранить» в появившемся окне и начнется загрузка.
Перед загрузкой программы, потребуется сохранить скетч
Пояснения к коду:
- процедура выполняется при запуске микроконтроллера один раз. Используется для конфигурации портов микроконтроллера и других настроек;
- после выполнения запускается процедура , которая выполняется в бесконечном цикле. Это мы используем, чтобы светодиод мигал постоянно;
- процедуры и должны присутствовать в любой программе (скетче), даже если вам не нужно ничего выполнять в них — пусть они будут пустые, просто не пишите ничего между фигурными скобками.
Схемы включения RGB светодиода
Многоцветные светодиоды, иначе называемые RGB-светодиодами, применяются для индикации, а также создания динамически изменяющейся по цвету подсветки. Фактически, ничего сложного в этих светодиодах нет, однако, в службу технической поддержки компании «ЧИП и ДИП» с завидным постоянством приходят письма с вопросами – как правильно подключить RGB-светодиод, какой источник питания выбрать, обязательно ли нужны специализированные источники питания, или можно обойтись тем, что есть «под рукой»?
Для того, чтобы ответить на все эти вопросы необходимо разобраться с тем, а что же представляет из себя RGB-светодиод, и почему возникают такие вопросы…
Фактически, RGB-светодиод представляет собой сборку из трех светодиодов красного, зеленого и синего цвета, расположенных в одном корпусе. И вот тут возникает первая сложность – кристаллы светодиодов могут быть соединены по схеме с общим катодом, с общим анодом, и с раздельными выводами.
Схему включения кристаллов можно определить визуально – светодиоды с общим катодом, или анодом имеют 4 вывода, светодиоды с раздельными выводами – 6 выводов. Собственно, на этом сложности и заканчиваются. В любом из этих случаев можно рассматривать подключение RGB-светодиода, как подключение трех обычных светодиодов, соединенных параллельно.
На что следует обратить внимание? В первую очередь обязательно необходимо ознакомиться с документацией на RGB-светодиод. Так как используются три различных кристалла, то и параметры их могут различаться. Так, например, для мощного RGB-светодиода TDS-P030L4RGB значение прямого напряжения для кристаллов красного и синего цвета составляет MAX 15VDC, для кристалла зеленого цвета — MAX 17VDC
То есть, если подключить светодиод к источнику питания «напрямую», то одни кристаллы будут светиться ярче, другие – слабее. Поэтому, также как и в случае с обычными светодиодами, нам необходимо включить в схему «гасящее» сопротивления для каждого канала
Так, например, для мощного RGB-светодиода TDS-P030L4RGB значение прямого напряжения для кристаллов красного и синего цвета составляет MAX 15VDC, для кристалла зеленого цвета — MAX 17VDC. То есть, если подключить светодиод к источнику питания «напрямую», то одни кристаллы будут светиться ярче, другие – слабее. Поэтому, также как и в случае с обычными светодиодами, нам необходимо включить в схему «гасящее» сопротивления для каждого канала.
Расчет «гасящего» сопротивления здесь приводить не будем. Подробно об этом рассказывается в видеоролике, размещенном на сайте нашей компании. При этом необходимо иметь в виду, что резистор должен рассчитываться на троекратную величину потребления тока. В этом случае, даже в случае перегорания одного из кристаллов оставшиеся не выйдут из строя. Таким образом, для включения RGB-светодиода можно использовать как специализированные блоки питания, так и источники питания, предназначенные для других целей. Необходимо лишь помнить, что источник питания должен иметь «запас» по току в 15-20%.
Но для управления RGB-светодиодом нам необходимо устройство управления светодиодом, или контроллер. Простейших контроллер представляет собой обычный трехклавишный выключатель. Схема такого включения приведена на рисунке. В этом случае мы получим устройство, с помощью которого можно создать семь цветов свечения светодиода.
А вот для динамического плавного изменения цвет свечения нам не обойтись без контроллера управления цветом светодиода. Возможно использование готовых контроллеров, схемы управления на базе Arduino, с использованием ШИМ-контроллеров. Подробно останавливаться на этом не будем, т.к. полную информацию об этом можно легко найти в Интернете.
Источник
Принцип управления нагрузкой через Ардуино
Плата Ардуино имеет два типа портов вывода: цифровой и аналоговый (ШИМ-контроллер). У цифрового порта возможно два состояния – логический ноль и логическая единица. Если подключить к нему светодиод он либо будет светиться, либо не будет.
Аналоговый выход представляет собой ШИМ-контроллер, на который подаётся сигнал частотой около 500Гц с регулируемой скважностью. Что такое ШИМ-контроллер и принцип его работы можно найти в интернете. Через аналоговый порт возможно не только включать и выключать нагрузку, а и изменять напряжение (ток) на ней
Через аналоговый порт возможно не только включать и выключать нагрузку, а и изменять напряжение (ток) на ней.
Синтаксис команд
Цифровой вывод:
pinMode(12, OUTPUT); — задаём порт 12 портом вывода данных;digitalWrite(12, HIGH); — подаём на дискретный выход 12 логическую единицу, зажигая светодиод.
Аналоговый вывод:
analogOutPin = 3; – задаём порт 3 для вывода аналогового значения;analogWrite(3, значение); – формируем на выходе сигнал с напряжением от 0 до 5В
Значение – скважность сигнала от 0 до 255. При значении 255 максимальное напряжение
Способы управления светодиодами через Ардуино
Напрямую через порт можно подключить лишь слабый светодиод, да и то лучше через ограничительный резистор. Попытка подключить более мощную нагрузку выведет его из строя.
Для более мощных нагрузок, в том числе светодиодных лент, используют электронный ключ – транзистор.
Going further with the potentiometer and RGB LED
In this Arduino tutorial you have learnt how to control an RGB LED with a potentiometer.
The RGB LED has actually 256 * 256 * 256 = 16+ millions possible colors. With one potentiometer, you get 1024 values, which means that you can only get a fraction of the colors. In most situations this may be fine, as you don’t necessarily need a huge precision for your project.
But if you need more colors, or if you just want to experiment more, what you can do is to put 3 potentiometers in your circuit. Each potentiometer will control only one color. In this case, the hardware setup is a bit bigger, but the code would be much simpler. For each potentiometer, you get one value in the range 0-1023, you map this value to 0-255, and apply it to one leg of the RGB LED, that’s it.
Ардуино для начинающих. Урок 5. Кнопки, ШИМ, функции
В этом уроке мы узнаем: как подключить кнопку к ардуино, как подавить дребезг контактов, как в прошивке обработать нажатие на кнопку, как послать ШИМ сигнал, как создать свою функцию и как управлять светодиодом.
В этом уроке используются следующие детали:
Большая макетная плата на 1600 точек с 4 шинами питания: | Купить |
Набор резисторов из 100 штук на все случаи: | Купить |
Набор светодиодов из 100 штук: | Купить |
5 штук кнопок в удобной форме: | Купить |
Соединительные провода 120 штук: | Купить |
Подключение кнопки к Arduino
Подключение кнопки к Arduino
Как видите, ничего сложно в подключении кнопки к ардуино нет
Обратите внимание, что кнопка установлена так, что каждый ее контакт подключен к разным линиям макетной платы. Так же вы можете заметить резистор на 10 кОм который притягивает контакт к земле. Это нужно для того, что бы мы на 8 контакте не ловили наводок
Попробуйте убрать этот резистор из схемы. Светодиод будет загораться при шевелении проводов или кнопки. Теперь давайте рассмотрим скетч:
Это нужно для того, что бы мы на 8 контакте не ловили наводок. Попробуйте убрать этот резистор из схемы. Светодиод будет загораться при шевелении проводов или кнопки. Теперь давайте рассмотрим скетч:
В этом уроке, как и прошлом, в самом начале мы объявляем переменные со значениями пинов к которым у нас подключены кнопка и светодиод. Далее в функции setup() мы обозначаем какой пин используется как вход, а какой как выход. В функции loop() мы используем условный оператор if с оператором сравнения и проверяем приходит ли на пин 8 высокий сигнал. Если да то включаем светодиод, если нет то выключаем. Описание функций и операторов вы найдете в справочнике по языку программирования Arduino
Теперь немного усложним наш код. Давайте сделаем так, что бы при нажатии на кнопку светодиод загорался и гас только при следующем нажатии на кнопку. Для этого в схеме мы менять ничего не будем, а скетч теперь будет выглядеть так:
В этом скетче мы добавили переменные для хранения состояния светодиода и кнопки. Так же мы создали новую функцию для подавления дребезга контактов debounse(). Код в цикле loop() тоже немного изменился. Теперь в условном операторе мы проверяем нажата ли кнопка и если нажата, то меняем состояние светодиода на противоположное. Потом меняем переменную с последним состоянием на текущее состояние кнопки и включаем или выключаем светодиод.
Подключение светодиода к Arduino
Теперь светодиод подключен к 11 пину ардуино, которой умеет делать ШИМ. И нам пришлось добавить токоограничивающий резистор на 220 Ом перед светодиодом, что бы его не спалить. Это необходимо потому, что светодиоды работают при напряжении 3.3 В, а пин ардуино отдает 5 В. Теперь посмотрим что нужно изменить в скетче:
В этом примере мы изменили значение переменной ledPin на 11. Так же добавили переменную для хранения уровня ШИМ ledLevel. При нажатии на кнопку будем увеличивать эту переменную. Функция debounce() осталась без изменений. В цикле мы теперь используем функцию analogWrite().
Мигание светодиодами NeoPixel в ленте
В этом примере мы установим мигающий режим светодиодов в ленте NeoPixel – для этого все светодиоды должны включаться и выключаться одновременно, при этом цвет светодиодов может быть различный.
Arduino
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define NUMPIXELS 7
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void NeoBlink(int num, int wait)
{
for (int i = 0; i < num; i++)
{
pixels.setPixelColor(i, 35, 35, 35);
}
pixels.show();
delay(wait);
for (int j = 0; j < num; j++)
{
pixels.setPixelColor(j, 0, 255, 0);
}
pixels.show();
delay(wait);
}
void setup()
{
pixels.begin();
pixels.setBrightness(50);
}
void loop()
{
NeoBlink(7, 500);
}
1 |
#include <Adafruit_NeoPixel.h> Adafruit_NeoPixelpixels(NUMPIXELS,PIN,NEO_GRB+NEO_KHZ800); voidNeoBlink(intnum,intwait) { for(inti=;i<num;i++) { pixels.setPixelColor(i,35,35,35); } pixels.show(); delay(wait); for(intj=;j<num;j++) { pixels.setPixelColor(j,,255,); } pixels.show(); delay(wait); } voidsetup() { pixels.begin(); pixels.setBrightness(50); } voidloop() { NeoBlink(7,500); } |
RGB светодиод
Появление многоцветных RGB–светодиодов связано с технологическими достижениями в области микроминиатюризации светодиодных кристаллов и серьезным запросом рекламного рынка. Название RGB связано с первыми буквами трех цветов в английском алфавите: R – красный, G – зеленый, B – синий.
Главной особенностью RGB–светодиодов выступает оптический принцип формирования любого известного цвета с помощью трех базовых цветов. Адресное управление каждым цветом дает возможность получать разнообразные цветовые картины, а программный способ управления свечением светодиодных кристаллов облегчает автоматизацию световых решений.
Устройство и сферы применения
Конструктивно RGB–светодиоды представляют собой три светодиодных кристалла с одной оптической линзой, расположенные в одном корпусе. Управление цветом происходит с помощью подачи электрических сигналов на выводы каждого светодиодного кристалла, а сочетание излучений всех трех светодиодов позволяет регулировать итоговый цвет. Для примера, ниже представлен самый популярный RGB–светодиод SMD 5050.
Сферы применения RGB светодиодов напрямую связаны с развитием рынка рекламы и развлекательных мероприятий. Также готовые RGB–светильники и ленты применяются в области светового оформления архитектурных и дизайнерских решений — ночная подсветка зданий или фонтанов, интерьерный свет, индикаторный системы автомобилей и т.д.
Разновидности
Разнообразие сфер применения многоцветных светодиодных источников света определяет основные виды внешнего оформления RGB–светодиодов:
- изделия небольшой мощности выпускаются в стандартных круглых корпусах со сферической линзой и выводами под обычную пайку;
- маломощные RGB–светодиоды в SMD-корпусах поверхностного монтажа широко применяются в светодиодных лентах или полноцветных светодиодных экранах большой площади;
- в корпусах типа Emitter выпускают мощные RGB–источники света с независимым управление каждым светодиодным кристаллом;
- сверх яркие светодиоды в корпусах Пиранья не требуют теплоотвода и легко монтируются на печатные платы.
Схемы расположения выводов (распиновка)
Несколько стандартных схем управления определяют структуру внешних выводов RGB–светодиодов и их соединение внутри корпуса. Существует три основных схемы распиновки, которые соблюдаются на большинстве выпускаемых изделий:
- В схеме с общим катодом для управления используется три независимых вывода анода, а катодные выводы LED-кристаллов соединены между собой;
- Распиновка с общим анодом управляется отрицательными импульсами на катодные выводы, а вместе соединены уже анодные электроды светодиодных кристаллов;
- Независимая схема соединения имеет шесть выводов по числу LED кристаллов, соединений внутри корпуса не производится.
При отсутствии документов на светодиодное изделие тип внешних выводов легко определить с помощью мультиметра. В режиме прозвонки светодиод будет светиться (мощные светодиоды очень слабо), а мультиметр издавать звук соединения, если красный щуп мультиметра подсоединен к аноду светодиодного кристалла, а черный к его катоду. В случае обратного подключения никаких видимых и слышимых эффектов просто не будет.
Подключение
Простейший способ подключения и управления режимами работы RGB–светодиодов реализуется с помощью стандартных микроконтроллеров Arduino. Общий вывод подключается к единой шине микроконтроллера, а управляющие сигналы подаются на выводы LED–кристаллов через ограничительные резисторы.
Управление режимами свечения светодиодных кристаллов происходит с помощью широтной-импульсной модуляции, где скважность импульсов определяет силу света. Программирование ШИМ–модулятора определяет итоговый цвет всего прибора или циклические режимы работы каждого цвета
Также для управления работой многоцветных светодиодов используют специализированные драйверы (например CAT4101) или уже готовые RGB–контролеры.
Постепенное затухание свечения светодиодов в ленте
Постепенное затухание свечения светодиодов (fading) – это еще один из замечательных эффектов светодиодов NeoPixel. Чем медленнее происходит затухание, тем более впечатляющим является этот эффект.
Arduino
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define NUMPIXELS 7
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels
void NeoFade(int FadeSpeed)
{
int fspeed;
for (int i = 0; i < NUMPIXELS; i++) { pixels.setPixelColor(i, 165, 242, 243); } for (int j = 255; j > 0; j=j-2)
{
pixels.setBrightness(j);
pixels.show();
delay(FadeSpeed);
}
}
void setup() {
pixels.begin();
}
void loop() {
NeoFade(100);
}
1 |
#include <Adafruit_NeoPixel.h> Adafruit_NeoPixelpixels(NUMPIXELS,PIN,NEO_GRB+NEO_KHZ800); voidNeoFade(intFadeSpeed) { intfspeed; for(inti=;i<NUMPIXELS;i++){pixels.setPixelColor(i,165,242,243);}for(intj=255;j>;j=j-2) { pixels.setBrightness(j); pixels.show(); delay(FadeSpeed); } voidsetup(){ pixels.begin(); } voidloop(){ NeoFade(100); } |
Случайный режим свечения светодиодов
В этом примере мы будем использовать функцию random(num1, num2) чтобы сгенерировать случайное число в интервале от num1 и num2 и на основе этого выбрать цвет и светодиод.
Arduino
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define NUMPIXELS 7
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels
void setup() {
pixels.begin();
}
void loop() {
pixels.clear();
pixels.setPixelColor(random(0, 7), random(0, 255), random(0, 255), random(0, 255));
pixels.show();
delay(500);
}
1 |
#include <Adafruit_NeoPixel.h> Adafruit_NeoPixelpixels(NUMPIXELS,PIN,NEO_GRB+NEO_KHZ800); voidsetup(){ pixels.begin(); } voidloop(){ pixels.clear(); pixels.setPixelColor(random(,7),random(,255),random(,255),random(,255)); pixels.show(); delay(500); } |
Программирование
Программирование эффектов для управления RGB цветом заключается в изменении интенсивностей трёх цветов, то есть трёх численных значений. У меня есть мощная библиотека для RGB светодиодов и лент, в ней реализовано очень много различных удобных инструментов для работы с цветом. Например плавная смена цвета по спектру будет выглядеть вот так:
В рамках этого урока мы рассмотрим некоторые алгоритмы, потому что это интересно и может пригодиться где-то ещё.
Хранение цвета
Что касается хранения цветовой информации, то это могут быть как три отдельных байта byte r, g, b; , так и более крупный тип данных, например так: long color; . Во втором случае цвет принято записывать в HEX представлении: красный, зелёный и синий байты идут друг за другом 0xRRGGBB . Напомню, что один байт в 16-ричном представлении может иметь значение от 0x00 (0) до 0xFF (255). Таким образом например цвет 0xBBA000 – жёлтый средней яркости ( 0xBB красный, 0xA0 зелёный, 0x0 синий). Такое представление чаще всего встречается в веб-разработке, при работе с микроконтроллером удобнее хранить цвет в байтах. Вот так можно конвертировать цвет из HEX в байты и наоборот:
Может пригодиться при связке Arduino и веба.
Включение цветов
Как я уже писал выше, включение того или иного цвета производится точно так же, как в уроке про обычные светодиоды. Для плавного управления яркостью используется ШИМ сигнал.
Для плавного управления цветом можно использовать потенциометры:
Цветовое колесо
Первый очевидный эффект – плавное перетекание одного цвета в другой. Это можно сделать линейно, вот таким образом:
Реализовать это можно просто через условия. Продолжим предыдущий пример:
Пространство HSV
Следующий вариант более интересен тем, что помимо цвета позволяет настроить его яркость и насыщенность. Такая цветовая модель называется HSV – (Hue, Saturation, Value), или (Цвет, Насыщенность, Яркость), в этом цветовом пространстве гораздо удобнее выбирать нужный цвет. Представить его можно цилиндром:
Светодиод и лента работают в пространстве RGB, HSV цвет нужно конвертировать в RGB для включения соответствующих каналов цвета. В подробности работы алгоритма вдаваться не будем, тем более что существует много разных вариантов его реализации, можно найти их в интернете по запросу HSV to RGB C++. Вот один из них, который использую я:
На этом этапе я могу вам сказать, что после прочтения всех предыдущих уроков вы можете самостоятельно открыть и изучить исходник GyverRGB.cpp и при желании взять оттуда нужный алгоритм или эффект!
Подключение большого количества RGB
У меня на сайте есть статья, где рассказано об алгоритме динамической индикации RGB светодиодов. Она позволяет подключить несколько RGB светодиодов или лент с возможностью изменения цвета.
Источник
Обработка битовой матрицы состояния светодиода
Уменьшаем время срабатывания события до 1/8 секунды и в 1 байте кодируем 8 бит состояний, отображаемых последовательно.
C++
// Массив режимов работы светодиода byte modes[] = { 0B00000000, //Светодиод выключен 0B11111111, //Горит постоянно 0B00001111, //Мигание по 0.5 сек 0B00000001, //Короткая вспышка раз в секунду 0B00000101, //Две короткие вспышки раз в секунду 0B00010101, //Три короткие вспышки раз в секунду 0B01010101 //Частые короткие вспышки (4 раза в секунду) };
uint32_t ms, ms1 = 0, ms2 = 0; uint8_t blink_loop = 0; uint8_t blink_mode = 0; uint8_t modes_count = 0;
void setup() { pinMode(13, OUTPUT); digitalWrite(13, LOW); modes_count = 1; blink_mode = modes; }
void loop() { ms = millis(); // Событие срабатывающее каждые 125 мс if( ( ms – ms1 ) > 125|| ms < ms1 ){ ms1 = ms; // Режим светодиода ищем по битовой маске if( blink_mode & 1<<(blink_loop&0x07) ) digitalWrite(13, HIGH); else digitalWrite(13, LOW); blink_loop++; }
// Этот код служит для демонстрации переключения режимов // Один раз в 5 секунд меняем эффект if( ( ms – ms2 ) > 5000|| ms < ms2 ){ ms2 = ms; blink_mode = modes; if( modes_count >= 7 )modes_count = 1; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
// Массив режимов работы светодиода bytemodes={ 0B00000000,//Светодиод выключен 0B11111111,//Горит постоянно 0B00001111,//Мигание по 0.5 сек 0B00000001,//Короткая вспышка раз в секунду 0B00000101,//Две короткие вспышки раз в секунду 0B00010101,//Три короткие вспышки раз в секунду 0B01010101//Частые короткие вспышки (4 раза в секунду) }; uint32_t ms,ms1=,ms2=; uint8_t blink_loop=; uint8_t blink_mode=; uint8_t modes_count=; voidsetup(){ pinMode(13,OUTPUT); digitalWrite(13,LOW); modes_count=1; blink_mode=modesmodes_count; } voidloop(){ ms=millis(); // Событие срабатывающее каждые 125 мс if((ms-ms1)>125||ms<ms1){ ms1=ms; // Режим светодиода ищем по битовой маске if(blink_mode&1<<(blink_loop&0x07))digitalWrite(13,HIGH); elsedigitalWrite(13,LOW); blink_loop++; } // Этот код служит для демонстрации переключения режимов // Один раз в 5 секунд меняем эффект if((ms-ms2)>5000||ms<ms2){ ms2=ms; blink_mode=modesmodes_count++; if(modes_count>=7)modes_count=1; } } |
Первый и второй и третий режимы слишком просты а вот дальше начинается интересное. Что может уже нормально использоваться для отображения режимов.
4-й режим. Короткая вспышка 1 раз в секунду
5-й режим. Две короткие вспышки в секунду
6-й режим. Три вспышки.
Ну и постоянная череда коротких вспышек
В принципе, на этом можно было и остановиться, так как для большинства проектов этого бы хватило. Но если этого мало и вам нужно будет разрабатывать программирование автосигнализации )))
Что если 8 бит состояний светодиодов мало?
Можно использовать несколько байт. Например, для кодирования сигнала SOS азбукой Морзе я использовал 4 байта, которые используются последовательно
C++
byte bytes[] = {0B00010101,0B00110011,0B10100011,0B00000010};
uint32_t ms, ms1 = 0; uint8_t blink_loop = 0;
void setup() { pinMode(13, OUTPUT); digitalWrite(13, LOW); }
void loop() { ms = millis(); // Событие срабатывающее каждые 125 мс if( ( ms – ms1 ) > 125|| ms < ms1 ){ ms1 = ms; // Выделяем сдвиг светодиода (3 бита) uint8_t n_shift = blink_loop&0x07; // Выделяем номер байта в массиве (2 байта со здвигом 3 ) uint8_t b_count = (blink_loop>>3)&0x3; if( bytes & 1<< n_shift )digitalWrite(13, HIGH); else digitalWrite(13, LOW); blink_loop++; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
bytebytes={0B00010101,0B00110011,0B10100011,0B00000010}; uint32_t ms,ms1=; uint8_t blink_loop=; voidsetup(){ pinMode(13,OUTPUT); digitalWrite(13,LOW); } voidloop(){ ms=millis(); // Событие срабатывающее каждые 125 мс if((ms-ms1)>125||ms<ms1){ ms1=ms; // Выделяем сдвиг светодиода (3 бита) uint8_t n_shift=blink_loop&0x07; // Выделяем номер байта в массиве (2 байта со здвигом 3 ) uint8_t b_count=(blink_loop>>3)&0x3; if(bytesb_count&1<<n_shift)digitalWrite(13,HIGH); elsedigitalWrite(13,LOW); blink_loop++; } } |
Получаем циклический сигнал SOS — три коротких, три длинных и снова три коротких сигнала светодиодом, повторяемый каждые 4 секунды
Для тех, кто считает, что программировать микроконтроллеры в цикле loop() это не по Фен шую Несмотря на то, что millis() использует прерывание по первому таймеру