Проект ёлочной гирлянды с питанием от Power Bank` а на 5В.
В этом 2017 году мы собираемся ехать встречать новый год на 2 ночи в лес.
Для того чтобы создать новогоднее настроение и поддерживать его в течение 2 вечеров нужно нарядить ёлку в лесу.
И непросто нарядить, а повесить на неё светодиодную гирлянду.
Так как питание будет автономное, то гирлянда должна быть экономичной.
Для экспериментов у меня была куплена светодиодная лента с попиксельной адресацией на светодиодах WS2812B со степенью защиты IP67. Степень обеспечивается силиконовой трубкой прямоугольного профиля. Такая лента защищена от любых атмосферных осадков и даже погружения в воду.
Здесь эта лента подошла как раз кстати. Так как позволяет зажигать любой светодиод независимо от других любым цветом в пределах RGB пространства с интенсивностью свечения каждого цвета от 0 до 255. Итого 255*255*255=16777216 цветов.
По даташиту на WS2812B было выяснено потребление одного светодиода 60 мА (3 кристалла по 20 мА).
Чтобы обеспечить длительную работу гирлянды от аккумулятора было принято решение использовать только 5 одновременно горящих кристаллов светодиодов на полную яркость.
Таким образом общий ток с учётом потребления Arduino Nano 3.0 на Atmega 328P оказался в итоге 339 мА.
Программа работы:
#include <Adafruit_NeoPixel.h> #define PIN 6 // Параметр 1 = Количество пикселей (светодиодов) в ленте // Параметр 2 = номер контакта к которому подключена шина данных (через резистор 150 Ом) // Параметр 3 = флаг типа пикселя, выбираются исходя из: // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) -> в моём случае // NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) -> в моём случае, регистры цвета выстроены как GreenRedBlue // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) Adafruit_NeoPixel strip = Adafruit_NeoPixel(300, PIN, NEO_GRB + NEO_KHZ800); void setup() { strip.begin(); // "Запустим" ленту strip.setBrightness(255); // Здесь можно установить яркость свечения всей ленты, интенсивность свечения отдельных светодиодов будет пересчитываться до этой // величины абсолютного максимума. strip.show(); // Инициализация ленты переводящая светодиоды в состояние "Отключено" } void loop() { for (int n=60; n >= 0; n--) { // У меня 5 метров ленты по 60 светодиодов //, поэтому для того чтобы огоньки были разных цветов я разделил ленту на сегменты по 1 метру, итого 300 светодиодов с порядковыми номерами // от 0 до 299 // Нумерация начинается со стороны подачи данных, т.е. блок управления и питания будет снизу, а на макушке ёлки будет светодиод №299 // Огоньки будут бежать сверху вниз на расстоянии 1 метра между ними. // За запись данных в пиксели отвечает функция strip.setPixelColor(n, red, green, blue);, где n - это номер светодиода, и интенсивности свечения // цветов от 0 до 255 в порядке Красный-Зелёный-Синий for (int i=0; i <= 299; i++){ strip.setPixelColor(i, 0, 0, 0); } // Сначала погасим все светодиоды, а затем зажжём светодиоды в каждом сегменте strip.setPixelColor((n+240), 255, 0, 127); // Лиловый цвет strip.setPixelColor((n+180), 0, 0, 127); // Синий strip.setPixelColor((n+120), 0, 127, 0); // Зелёный strip.setPixelColor((n+60), 127, 127, 0); // Жёлтый strip.setPixelColor(n, 127, 0, 0); // Красный strip.show(); // После того как мы присвоили всем пикселям нужный цвет, нужно записать эти значения в ленту и зажечь светодиоды delay (33); // Сделаем задержку 33 миллисекунды между вспышками светодиодов, это даст скорость движения огонька примерно 1 метр в 2,5 секунды } }
Видео работы https://youtu.be/PLL0Qe8U_Lo