Digg StumbleUpon LinkedIn YouTube Flickr Facebook Twitter RSS Reset

Новогодняя светодиодная гирлянда

Проект ёлочной гирлянды с питанием от 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