Управление светодиодной лентой при помощи аrduino

Как это работает

Адресная лента WS2812B поделена на сегменты, в каждом из которых расположен светодиод и конденсатор (для повышения помехоустойчивости). Относительно напряжения питания все они между собой подключены параллельно, то есть +5 В будет присутствовать на каждом сегменте. А вот передача данных осуществляется последовательно: от предыдущего сегмента к последующему. Поэтому при выходе из строя одного из светодиодов цепи все следующие сегменты перестанут светиться. Управление готовыми устройствами и модулями на базе WS2812.

B производится с помощью специализированного контроллера, внутри которого записана программа. На радиолюбительском уровне управлять работой адресной светодиодной ленты удобней всего через Arduino, используя для этого небольшую программу – скетч. Схема подключения к Arduino

У каждой адресной ленты есть начало и конец, которые нельзя менять местами во время сборки схемы. Чтобы не запутаться, производители используют условные обозначения, например, стрелки, указывающие направление сигнала. Подключение адресной светодиодной ленты WS2812B к Arduino производится по трём проводам, как показано на рисунке.Контакты питания +5V и GND соединяют с соответствующими выводами на плате Arduino.

Если подсоединяемый отрезок насчитывает более 13-ти светодиодов, то необходимо использовать выносной блок питания. При этом общий провод (GND) Arduino и «минус» блока питания должны быть соединены между собой. Контакт DIN (digital input) предназначен для приёма данных от контроллера и электрически соединяется с любым из его цифровых портов. С другой стороны адресной ленты (и каждого сегмента тоже) размещено 3 контакта: +5V, DO (digital output) и GND, к которым можно подключить ещё несколько отрезков разной длины.

Так как каждый элемент WS2812B фактически состоит из 3 светодиодов (синего, красного, зелёного), то для управления его свечением потребуется 3 байта (по одному на каждый цвет). В свою очередь, каждый байт может принимать значение от 0 до 255, в результате чего можно задать более 16,5 млн оттенков. Размер скетча будет равен количеству светодиодных сегментов, умноженному на 3. Передача данных происходит следующим образом: ШИМ-драйвер WS2812B первого сегмента забирает из посылки первые 3 байта, пропуская остальные данные на выход DO.

Далее следует пауза длиною до 50 мкс, означающая, что второй по счёту драйвер должен принять следующие 3 байта. И так далее. Длительность паузы больше 50 мкс означает конец передачи и повторение цикла. Для работы с адресными лентами и модулями проще всего использовать библиотеки FastLED и Adafruit NeoPixel. Внутри каждой библиотеки есть готовые скетчи, на основе которых несложно научиться самостоятельно создавать новые световые эффекты. Чтобы скетч заработал с первого раза, необходимо в заголовке правильно указать количество светодиодов в ленте (NUM_LEDS) и номер порта для передачи данных (PIN).

Адресные ленты стоят дороже обычных лент, и применяются обычно там, где простые ленты по какой-то причине не применимы: полноцветные модульные сборки, декоративная подсветка с управлением «soft light», наружная реклама и т. д. Особенность таких сборок в том, что они способны изменять и цвет и яркость отдельных своих сегментов по более сложному алгоритму, нежели простые LED-ленты, даже если эти LED-ленты оснащены умными драйверами. ШИМ-сигнал управления подается со специального запрограммированного контроллера на вход ленты, и передается последовательно на вход одного чипа (digital input – DI), выходит из него (digital output – DO), затем проходит через второй чип, и т. д. Управление легко осуществить при помощи программы на ардуино.

Светодиодная лента в блоком управления.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Демо-эскиз демонстрирует некоторые из многих возможных комбинаций эффектов, которые могут быть достигнуты с помощью светодиодных лент. Наряду с тем, что они являются украшением интерьера, их также можно использовать для практических целей. Хорошим проектом будет создание вашей собственной атмосферы для медиацентра или рабочего места.
Хотя эти полосы определенно функциональнее, чем SMD5050, пока не списывайте со счетов стандартные 12-вольтовые светодиодные полосы. Они являются непревзойденными с точки зрения цены. Плюсом будет то, что существует огромное количество приложений для светодиодных лент.

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

Как подключить светодиод к Arduino Uno

Для теста нам понадобится:

  • Arduino Uno
  • макетная плата
  • светодиод
  • резистор для светодиода
  • соединительные провода

Все соединяем, согласно указанной схеме.

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

Как можно видеть, мы использовали два контакта Arduino. Первый из них pin13 будет служить для управления светодиодом, второй – минус схемы.

Следует обратить внимание на. Анод (+) светодиода нужно подключить через резистор к pin13. Катод (-) светодиода подключаем к минусу платы

После проверки правильности соединения мы можем перейти к написанию нашей первой программы

Катод (-) светодиода подключаем к минусу платы. После проверки правильности соединения мы можем перейти к написанию нашей первой программы.

Наша первая программа позволит поочередно включать и выключать светодиод. Частота мигания светодиода составит около 1Гц.

const int ledPin = 13; // номер контакта для светодиода
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH); // устанавливаем высокое состояние на pin13
delay(500); //остановка 0,5 сек (500ms)
digitalWrite(ledPin, LOW); // устанавливаем низкое состояние на pin13
delay(500); // остановка 0,5 сек (500ms)
}

Программа начинается с объявления используемого контакт (ledPin). С этого момента везде, где мы будем ссылаться на «ledPin», будет ссылка на pin13 Arduino.

Затем в функции setup() мы указываем, что наш pin13 будет использоваться как выход.

Функция pinMode(pin, mode) позволяет определить, будет ли использоваться наш контакт как вход или как выход. Первый параметр функции это номер контакта, второй предопределенное значение INPUT (вход) или OUTPUT (выход).

При написании кода вы можете использовать номера контактов напрямую, но метод, приведенный в этом примере, является гораздо лучшим решением для читаемости программы.

Функция loop() содержит непосредственно сам код программы, который выполняется в бесконечном цикле.

Функция digitalWrite(pin, value) позволяет изменять статус каждого из контактов. Цифровые выходы могут иметь низкий (LOW) или высокий (HIGH) логический уровень. LOW (лог.0) — электрически замкнут на минус, а HIGH (лог.1) — около 5 В.

Номер порта в функции digitalWrite () может быть указан непосредственно в виде числа (в нашем случае 13) или обозначен так, как мы прописали его в функции pinMode () (т.е ledPin).

Последним элементом программы является функция delay(), которая останавливает выполнение программы на определенное время. Время задается в миллисекундах. Одна секунда это 1000 мс.

Зная, для чего служат отдельные функции программы, мы можем изучить работу программного кода целиком:

Итак, pin13 Arduino устанавливается как выход. Следующим шагом идет установка высокого состояния на Pin13 и приостановка дальнейшего выполнения кода на 0,5 сек. Затем Pin13 устанавливается в низкое состояние и исполнение кода приостанавливается на 0,5 сек. Согласно философии написания программ в Arduino IDE, функция loop () выполняется в бесконечном цикле, что вызовет визуальное мигание светодиода.

После того, как вы написали программу, скомпилируйте ее и отправьте в Arduino. Если все шаги были выполнены правильно, светодиод должен начать мигать с частотой примерно в 1 Гц.

При отсутствии положительного результата необходимо еще раз проверить правильность соединений и программный код.

Шаг 6. Скетч Arduino Ambilight

Ниже вы можете скачать или скопировать  код для нашей подсветки Ардуино Эмбилайт.

#include "FastLED.h"

#define NUM_LEDS 38
#define LED_DATA_PIN 3
#define NUM_BYTES (NUM_LEDS*3) // 3 colors  

#define BRIGHTNESS 100
#define UPDATES_PER_SECOND 100

#define TIMEOUT 3000

#define MODE_ANIMATION 0
#define MODE_AMBILIGHT 1
uint8_t mode = MODE_ANIMATION;

byte MESSAGE_PREAMBLE[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 };
uint8_t PREAMBLE_LENGTH = 10;
uint8_t current_preamble_position = 0;

unsigned long last_serial_available = -1L;

uint8_t led_counter = 0;
uint8_t byte_counter = 0;

CRGB leds;
byte buffer;


// Filler animation attributes
CRGBPalette16 currentPalette = RainbowColors_p;
TBlendType    currentBlending = LINEARBLEND;
uint8_t startIndex = 0;

void setup()
{
  Serial.begin(115200);
  FastLED.clear(true);
  FastLED.addLeds<WS2811, LED_DATA_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);
}

void loop()
{
	switch (mode) {
		case MODE_ANIMATION: 
			fillLEDsFromPaletteColors();
			break;
		
		case MODE_AMBILIGHT:
			processIncomingData();
			break;
	}
	
}

void processIncomingData()
{
	if (waitForPreamble(TIMEOUT))
	{
		Serial.readBytes(buffer, NUM_BYTES);

		/* DEBUG
		for (int i = 0; i < NUM_BYTES; i++)
		{
			Serial.write((char)buffer);
		}
		*/

		while (byte_counter < NUM_BYTES)
		{
			byte green = buffer;
      byte blue = buffer;
			byte red = buffer;

			leds = CRGB(red, green, blue);
		}

		FastLED.show();

		byte_counter = 0;
		led_counter = 0;
	}
	else
	{
		mode = MODE_ANIMATION;
	}
}

bool waitForPreamble(int timeout)
{
	last_serial_available = millis();
	while (current_preamble_position < PREAMBLE_LENGTH)
	{
		if (Serial.available() > 0)
		{
			last_serial_available = millis();

			if (Serial.read() == MESSAGE_PREAMBLE)
			{
				current_preamble_position++;
			}
			else
			{
				current_preamble_position = 0;
			}
		}

		if (millis() - last_serial_available > timeout)
		{
			return false;
		}
	}
	current_preamble_position = 0;
	return true;
}

void fillLEDsFromPaletteColors()
{
	startIndex++; // speed

	uint8_t colorIndex = startIndex;
	for( int i = 0; i < NUM_LEDS; i++) {
        leds = ColorFromPalette(currentPalette, colorIndex, BRIGHTNESS, currentBlending);
		colorIndex += 3;
    }

	FastLED.delay(1000 / UPDATES_PER_SECOND);

	if (Serial.available() > 0)
	{
		mode = MODE_AMBILIGHT;
	}
}

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

Подключите плату Arduino к компьютеру через USB и откройте Arduino IDE. Убедитесь, что у вас правильный номер платы и порта, выбранный для вашей платы, в меню «Сервис»> «Сервис и инструменты»> «Порт». Откройте новый эскиз и сохраните его с соответствующим именем.
Этот эскиз затухает с одноцветными огнями, держит их в таком состоянии в течение нескольких секунд, а затем исчезает, пока они не погаснут снова.

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

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

#define RED_LED 6
#define BLUE_LED 5
#define GREEN_LED 9

Затем вам понадобятся переменные. Создайте общую переменную яркости вместе с переменной для яркости каждого цвета. Мы будем использовать только основную переменную яркости для выключения светодиодов, поэтому установите здесь максимальное значение 255.
Вам также потребуется создать переменную, чтобы контролировать скорость замирания.

int brightness = 255;
int gBright = 0;
int rBright = 0;
int bBright = 0;
int fadeSpeed = 10;

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

void setup() {
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);

TurnOn();
delay(5000);
TurnOff();
}
Теперь создайте метод TurnOn ():
void TurnOn() {
for (int i = 0; i < 256; i++) {
analogWrite(RED_LED, rBright); rBright +=1; delay(fadeSpeed); } for (int i = 0; i < 256; i++) { analogWrite(BLUE_LED, bBright); bBright += 1; delay(fadeSpeed); } for (int i = 0; i < 256; i++) { analogWrite(GREEN_LED, gBright); gBright +=1; delay(fadeSpeed); } }

Эти три цикла for полностью увеличивают яркость каждого цвета за время, указанное значением fadeSpeed.
Наконец, вам нужно создать метод TurnOff ():
void TurnOff() {
for (int i = 0; i < 256; i++) { analogWrite(GREEN_LED, brightness); analogWrite(RED_LED, brightness); analogWrite(BLUE_LED, brightness); brightness -= 1; delay(fadeSpeed); }}void loop() {} Этот метод применяет нашу переменную яркости ко всем трем цветным выводам и уменьшает их до нуля в течение определенного периода времени. Нам также нужен метод пустого цикла, чтобы избежать ошибок компиляции.

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

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

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

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

Отличие лент ws2812, ws2812b, ws2811

Наиболее распространенные модели со встроенными микросхемами имеют маркировку WS2812 или WS2812b. С внешними – WS2811.

Чем модель ws2812 отличается
от ws2812b? Первые имеют 6
контактов (PIN) для управления, а вторые, с буковкой “b” –
всего четыре.

На 2812 питание светодиода и чипа разнесены. У 2812b питание
интегрированного драйвера и светодиода вынесено на один PIN (VDD).

А в чем главные отличия между ws2812b и ws2811?

ws2812b – работает от 5v

ws2811 – питание 12v (в 2015г прекращен выпуск последних моделей на 5в)

WS2812 управляет кластерами по одному
диоду, WS2811 управляет тремя светодиодами
одновременно.

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

Признаки и симптомы ВПЧ 45 у женщин

Признаками папилломавируса 45 типа у женщин являются остроконечные генитальные бородавки. Они появляются на малых и больших половых губах, но чаще – во влагалище и шейке матки, поэтому обнаружить их может только гинеколог или дерматовенеролог во время осмотра. Дискомфорт кондиломы начинают доставлять, когда увеличиваются в размерах и сливаются в большие конгломераты.

Папилломавирус 45 не имеет характерных признаков, но заподозрить инфекцию можно по следующим симптомам:

  • зловонный запах из половых органов;
  • боль во время полового акта и при оргазме;
  • зуд и другие неприятные ощущения внутри половых органов;
  • болезненное мочеиспускание;
  • боль внизу живота, которая не проходит и в состоянии покоя.

Когда инфекция, вызванная вирусом папилломы человека, переходит в 3 стадию (после которой развивается рак), у представителей обоих полов появляются головокружения, слабость, снижается аппетит, сексуальная активность.

5Подключение RGB светодиода с общим катодомк Arduino

Если вы используете RGB светодиод с общим катодом, то подключите длинный вывод светодиода к GND платы Arduino, а каналы R, G и B – к цифровым портам Arduino. При этом нужно помнить, что светодиоды загораются при подаче на каналы R, G, B высокого уровня (HIGH), в отличие от светодиода с общим анодом.

Схема подключения RGB светодиода с общим катодом к Arduino

Если не менять вышеприведённый скетч, то каждый цвет светодиода в этом случае будет гореть 0,2 секунды, а пауза между ними составит 0,1 секунду.

Полезный совет

Если вы хотите управлять яркостью светодиода, то подключайте RGB светодиод к цифровым выводам Arduino, которые имеют функцию ШИМ (PWM). Такие выводы на плате Arduino обычно помечены знаком тильда (волнистая линия), звёздочкой или обведены кружочками.

Лампа на светодиодной ленте с красивыми эффектами

Сразу скажу, что проект не мой, а является немного доработанной версией лампы от Alex Gyver, за что ему большое спасибо!

Вот ссылка на оригинальный проект: огненный светильник.

Из изменений:

  • корпус напечатан на 3D-принтере (файлы для печати ниже)
  • разъем для подключения блока питания
  • не сенсорная а обычная кнопка, размещенная сбоку внизу

Лампу делал не с целью улучшения, а в подарок, но решил все-таки добавить описание на сайт — вдруг кому-то пригодится.

Подготовка

Итак, для реализации проекта использовался все тот же плафон из Леруа-мерлен «плафон цилиндр»:

Все остальное можно заказать у китайцев:

  • Arduino Nano:   
  • Адресная RGB-лента WS2812B:   
  • Блок питания на 5 вольт (3А, но хватит и 2A):   
  • Кнопка (использовал самую большую):   
  • Резистор на 220 Ом:   
  • Разъем питания использовал такой:

Были использованы следующие инструменты:

  • Паяльник (пользуюсь таким давно, идеальный по соотношения цена/качество):   
  • 3D-принтер (закрытый корпус, можно печатать и PLA, и ABS без проблем): ,  
  • Инструмент для зачистки и обжима проводов (фирменный китайский LAOA): ,  

Сборка

Файлы для печати верхней и нижней части: lamp.zip.

При печати следует учесть, что, хоть размеры подгонялись под конкретный плафон, все же могут быть небольшие расхождения в размерах. Зависит от того, на каком 3D-принтере вы печатаете, с какими настройками и каким пластиком. Поэтому для плотного прилегания плафона к напечатанным частям может понадобится чуть подкорректировать размер моделей и перепечатать, либо применить изоленту/напильник.

Для лампы я использовал 4 куска светодиодной ленты по 10 светодиодов на каждом. У вас может быть другое количество светодиодов, в зависимости от типа ленты. Главное: лента должна быть именно адресная WS2812B.

После печати нижней части можно приступать к сборке. В модели предусмотрено гнездо для кнопки. Сажаем ее туда, приклеив на любой подходящий клей (я использовал клеевой пистолет). Предварительно нужно отломать 2 из 4 ножек, а 2 оставшиеся должны пропускать ток при нажатии (они расположены рядом). Просовываем их в отверстие сверху от углубления. И вставляем разъем питания.

Ну и наклеиваем куски ленты

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

Далее — спаиваем 4 части адресной ленты — контакты 5v, gnd и сигнальный. Как именно — подробно показано в видео на странице оригинального проекта. Если вы только учитесь паять — не следует бояться паять адресную ленту, паяется все она очень легко. Единственный совет — я использую жидкий флюс ЛТИ-120. Он в разы лучше, чем твердая канифоль. Наносить его удобнее всего кисточкой от лака для ногтей. Также он не является активным, поэтому после его применения не нужно очищать контакты.

Вся остальная сборка делается по инструкции оригинального проекта, там все подробно показано, а также есть схема, что и как спаять. Разница только в использовании механической кнопки, припаять ее нужно к разъемам gnd (земле) и любому цифровому пину платы.

Код

Код был полностью взять с оригинального проекта. Единственное изменение, которое нужно сделать, это поменять тип используемой кнопки. Для этого в основном файле прошивки (на данный момент это gyverLight_v1.4.ino) меняем строчку 39:

на

В общем то и все.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделитесь с друзьями:
Электрошок
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.