МОДЕЛЬ ИНТЕГРАЦИИ ИНЖЕНЕРНО-ТЕХНОЛОГИЧЕСКОГО ОБРАЗОВАНИЯ В ШКОЛЬНУЮ СРЕДУ НА ОСНОВЕ ДЕЯТЕЛЬНОСТИ МЕТАПРЕДМЕТНЫХ ЛАБОРАТОРИЙ
Организация: Муниципальное бюджетное общеобразовательное учреждение средняя общеобразовательная школа № 4 с углубленным изучением отдельных предметов им. Г.К. Жукова городского округа Краснознаменск Московской области
Регион: Московская область
Уровень образования: Общее образование
Цель: создание развивающей, технологичной среды, направленной на развитие инженерно-технологического образования в школе на основе деятельности метапредметных лабораторий
Участники методической сети: 231
Основы адресной светодиодной ленты
2011
Обычная светодиодная лента представляет собой ленту с напаянными светодиодами и резисторами, на питание имеет два провода: плюс и минус. Напряжение бывает разное: 5 и 12 вольт постоянки и 220 переменки. Да, в розетку. Для 5 и 12 вольтовых лент нужно использовать блоки питания. Светит такая лента одним цветом, которой зависит от светодиодов.
RGB светодиодная лента. На этой ленте стоят RGB (читай эргэбэ – Рэд Грин Блю) светодиоды. Такой светодиод имеет уже 4 выхода, один общий +12 (анод), и три минуса (катода) на каждый цвет, т.е. внутри одного светодиода находится три светодиода разных цветов. Соответственно такие же выходы имеет и лента: 12, G, R, B. Подавая питание на общий 12 и любой из цветов, мы включаем этот цвет. Подадим на все три – получим белый, зелёный и красный дадут жёлтый, и так далее. Для таких лент существуют контроллеры с пультами, типичный контроллер представляет собой три полевых транзистора на каждый цвет и микроконтроллер, который управляет транзисторами, таким образом давая возможность включить любой цвет. И, как вы уже поняли, да, управлять такой лентой с ардуино очень просто. Берем три полевика, и ШИМим их analogWrit’ом.
Адресная светодиодная лента, вершина эволюции лент. Представляет собой ленту из адресных диодов, один такой светодиод состоит из RGB светодиода и контроллера. Да, внутри светодиода уже находится контроллер с тремя транзисторными выходами! Внутри каждого!! Благодаря такой начинке у нас есть возможность управлять цветом (то бишь яркостью r g b) любого светодиода в ленте и создавать потрясающие эффекты. Адресная лента может иметь 3-4 контакта для подключения, два из них всегда питание (5V и GND например), и остальные (один или два) – логические, для управления.
Лента “умная” и управляется по специальному цифровому протоколу. Это означает, что если просто воткнуть в ленту питание не произойдет ровным счётом ничего, то есть проверить ленту без управляющего контроллера нельзя. Если вы потрогаете цифровой вход ленты, то скорее всего несколько светодиодов загорятся случайными цветами, потому что вы вносите случайные помехи, которые воспринимаются контроллерами диодов как команды. Для управления лентой используются готовые контроллеры, но гораздо интереснее рулить лентой вручную, используя, например, платформу ардуино, для чего ленту нужно правильно подключить. И вот тут есть несколько критических моментов:
1) Команды в ленте передаются от диода к диоду, паровозиком. У ленты есть начало и конец, направление движение команд на некоторых моделях указано стрелочками. Для примера рассмотрим ws2812b, у нее три контакта. Два на питание, а вот третий в начале ленты называется DI (digital input), а в конце – DO (digital output). Лента принимает команды в контакт DI! Контакт DO нужен для подключения дополнительных кусков ленты или соединения матриц.
2) Цифровой вход ленты идёт напрямую на «сырой» вход микроконтроллера внутри диода, поэтому между ним и управляющим пином ардуино нужен токоограничиваюший резистор с номиналом 100-500 ом, он ограничит ток, и управляющий пин ардуино не будет перегружаться. С чего ему грузиться? Закон ома. Точность резистора? Любая. Мощность резистора? Любая. Да, даже 1/4.
2.1) Если между лентой и контроллером (Arduino) большое расстояние, т.е. длинные провода (длиннее 10-15 см), то сигнальный провод и землю нужно скрутить в косичку для защиты от наводок, так как протокол связи у ленты достаточно скоростной (800 кГц), на него сильно влияют внешние наводки, экранирование земляной скруткой поможет этого избежать. Без этого может наблюдаться такая картина: лента не работает до тех пор, пока не коснёшься рукой сигнального провода
3) Самый важный пункт: цифровой сигнал ходит по двум проводам, поэтому для его передачи одного провода от ардуины мало. Какой второй? Земля GND. Как? Контакт ленты GND и пин ардуино GND (любой из имеющихся) должны быть соединены.
4) Питание. Один цвет одного светодиода при максимальной яркости кушает 20 миллиампер. В одном светодиоде три цвета, итого 60 мА на диод. Пусть у вас есть метр ленты с плотностью 60 диод/метр, тогда 60*60 = 3.6 Ампера при максимальной яркости (белый цвет), соответственно нужно брать БП, который с этим справится, но заранее подумать, в каком режиме будет работать лента. Если это режимы типа «радуга», то мощность можно принять как половину от максимальной.
5) Продолжая тему питания, хочу отметить важность качества пайки силовых точек (подключение провода к ленте, подключение этого же провода к БП), а также толщину проводов. Как показывает мой опыт, брать нужно провод сечением минимум 1.5 квадрата, если нужна полная яркость. Пример: на проводе 0.75 кв.мм. на длине 1.5 метра при токе 2 Ампера падает 0.8 вольта, что критично для 5 вольт питания. Первый признак просадки напряжения: заданный программно белый цвет светит не белым, а отдаёт в жёлтый/красный. Чем краснее, тем сильнее просело напряжение!
6) Мигающая лента создаёт помехи на линию питания, а если лента и контроллер питаются от одного источника – помехи идут на микроконтроллер и могут стать причиной нестабильной работы, глюков и даже перезагрузки (если БП слабый). Для сглаживания таких помех рекомендуется ставить электролитический конденсатор 6.3В ёмкостью 470 мкФ (ставить более ёмкий нет смысла) по питанию микроконтроллера, а также более “жирный” конденсатор (1000 или 2200 мкФ) на питание ленты. Ставить их необязательно, но очень желательно. Если вы заметите зависания и глюки в работе системы (Ардуино + лента + другое железо), то причиной в 50% является как раз питание.
7) Слой меди на ленте не очень толстый, поэтому от точки подключения питания вдоль ленты напряжение начинает падать, чем больше яркость, тем больше просадка. Если нужно сделать большой и яркий кусок ленты, то питание нужно дублировать медным проводом 1.5 (или больше, надо экспериментировать) квадрата через каждый метр.
ПОЧЕМУ НЕ РАБОТАЕТ?!
- Убедись, что земля ленты соединена с землёй ардуино КАК НА СХЕМЕ
- Убедись, что сигнальный провод идёт в начало ленты (контакт DI) КАК НА СХЕМЕ
- Убедись, что не перепутал 5в и GND. КАК НА СХЕМЕ
- Цвет отдаёт в красный? У тебя слабый БП, некачественная пайка линии питания или слишком тонкие провода питания
- Подключил без резистора и теперь не работает даже с резистором? Пин ардуино отбросил ласты, подключай в другой
WS2811 и WS2812b
Сейчас популярны два вида ленты: на чипах WS2812b и WS2811. В чём же разница? Чип WS2812 размещён внутри светодиода, таким образом один чип управляет цветом одного диода, а питание ленты – 5 Вольт. Чип WS2811 размещён отдельно, и от него питаются сразу 3 светодиода, таком образом можно управлять цветом сегментов по 3 диода в каждом. А вот питание у ленты на WS2811 составляет 12 вольт!
УПРАВЛЕНИЕ С ARDUINO
×
ВНИМАНИЕ! ВО ВРЕМЯ ЗАГРУЗКИ И ВЫПОЛНЕНИЯ ЭТОГО ПРИМЕРА ДОЛЖНО БЫТЬ ПОДКЛЮЧЕНО ВНЕШНЕЕ ПИТАНИЕ! ИНАЧЕ ВЫГОРИТ ЗАЩИТА ПО ТОКУ (ДИОД) НА ПЛАТЕ АРДУИНО!
Для управления лентой можно выделить три библиотеки: FastLED, Adafruit NeoPixel и LightWS2812, из всех трёх рекомендую либу от Adafruit. Ниже привожу пример кода, который сначала показывает 3 цвета ленты на одном куске, плавно включая диоды. А потом ещё 3 цвета. Ну и ещё что-то, смотрите скетч.
- #define PIN 13 // пин DI
- #define NUM_LEDS 16 // число диодов
- #include "Adafruit_NeoPixel.h"
- Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
- void setup() {
- strip.begin();
- strip.setBrightness(50); // яркость, от 0 до 255
- strip.clear(); // очистить
- strip.show(); // отправить на ленту
- }
- void loop() {
- // заливаем трёмя цветами плавно
- for (int i = 0; i < NUM_LEDS / 3; i++ ) { // от 0 до первой трети
- strip.setPixelColor(i, 0xff0000); // залить красным
- strip.show(); // отправить на ленту
- delay(100);
- }
- for (int i = NUM_LEDS / 3; i < NUM_LEDS * 2 / 3; i++ ) { // от 1/3 до 2/3
- strip.setPixelColor(i, 0x00ff00); // залить зелёным
- strip.show(); // отправить на ленту
- delay(100);
- }
- for (int i = NUM_LEDS * 2 / 3; i < NUM_LEDS; i++ ) { // от 2/3 до конца
- strip.setPixelColor(i, 0x0000ff); // залить синим
- strip.show(); // отправить на ленту
- delay(100);
- }
- delay(1000);
- // заливаем белым
- for (int i = 0; i < NUM_LEDS; i++ ) { // всю ленту
- strip.setPixelColor(i, 0xffffff); // залить белым
- strip.show(); // отправить на ленту
- delay(10);
- }
- delay(1000);
- // заливаем чёрным
- for (int i = 0; i < NUM_LEDS; i++ ) { // всю ленту
- strip.setPixelColor(i, 0x000000); // залить чёрным
- strip.show(); // отправить на ленту
- delay(10);
- }
- delay(1000);
- // включаем случайные диоды жёлтым
- for (int i = 0; i < 50; i++ ) { // 50 раз
- strip.setPixelColor(random(0, NUM_LEDS), 0xffff00); // залить жёлтым
- strip.show(); // отправить на ленту
- delay(500);
- }
- }
Пример с бегущей радугой
- // пример с "бегущей радугой" для библиотеки FastLED
- #define NUM_LEDS 144
- #include "FastLED.h"
- #define PIN 6
- CRGB leds[NUM_LEDS];
- byte counter;
- void setup() {
- FastLED.addLeds<WS2811, PIN, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
- FastLED.setBrightness(50);
- pinMode(13, OUTPUT);
- }
- void loop() {
- for (int i = 0; i < NUM_LEDS; i++ ) { // от 0 до первой трети
- leds[i] = CHSV(counter + i * 2, 255, 255); // HSV. Увеличивать HUE (цвет)
- // умножение i уменьшает шаг радуги
- }
- counter++; // counter меняется от 0 до 255 (тип данных byte)
- FastLED.show();
- delay(5); // скорость движения радуги
- }
Дополнительная информация
Цвет кодируется 3-мя байтами, значит глубина его составляет 24 бита. У нас есть три цвета, каждый кодируется число от 0 до 255, итого имеем 255*255*255 = 16 581 375 цветов, 16.6 миллионов оттенков может принимать КАЖДЫЙ светодиод в ленте. Цвета при программировании задаются в шестнадцатеричной кодировке вида 0xFFFFFF. Сам цвет здесь задаётся тремя байтами: красный зелёный синий, красный будет FF0000, синий 0000FF, зелёный 00FF00, то есть у каждого цвета есть яркость, которая задаётся шестнадцатеричным числом от 00 до FF. Например бледно жёлтый будет вот так 555500.
Найти коды цветов можно здесь http://getcolor.ru/