Съдържание:

LED спирално дърво: 4 стъпки (със снимки)
LED спирално дърво: 4 стъпки (със снимки)

Видео: LED спирално дърво: 4 стъпки (със снимки)

Видео: LED спирално дърво: 4 стъпки (със снимки)
Видео: РАЗПРОСТРАНЯВАНЕ НА WIFI НАБЛЮДЕНИЕ ЛИЦЕ 4G камера за наблюдение 2024, Юли
Anonim
LED спирално дърво
LED спирално дърво
LED спирално дърво
LED спирално дърво
LED спирално дърво
LED спирално дърво

Обичам всякакви LED ленти. Направих хубава дъгова светлина с тях. Дори необратимите са полезни. Направих ярка пазарна чадърна външна светлина, като ги прикрепих към ребрата на unbrella, така че, когато моето спирално дърво избухна, реших да увия около него дължина от LED лента.

Стъпка 1: Контролер

Контролер
Контролер
Контролер
Контролер
Контролер
Контролер

Реших да използвам неадресируеми RGB светодиоди. Това означава, че мога да имам програмиран ефект, но всички светодиоди променят цвета едновременно. Това също означава, че ще е необходим контролер. Можех да използвам arduino uno и да направя първоначалните тестове с помощта на RGB щит, но в крайна сметка използвах персонализирана единична платка с гол чип Atmega328. Просто трябваше да превключвам целевия програмист и да програмирам чипа директно.

Имах много от тези дъски, останали от други проекти за лампи. Чувствайте се свободни да използвате евтин вграден предварително програмиран контролер, както направих на моя чадър.

В крайна сметка използвах бавно кръстосано демонстрационно демо като основа за дървото.

/** Код за кръстосано избледняване на 3 светодиода, червен, зелен и син (RGB) * За да създадете избледняване, трябва да направите две неща: * 1. Опишете цветовете, които искате да се показват * 2. Избройте желания от вас ред те да избледняват * * ОПИСАНИЕ НА ЦВЯТ: * Цветът е само масив от три процента, 0-100, * контролиране на червения, зеления и синия светодиоди * * Червеният е червеният светодиод при пълно, синьо и зелено изключено * int червено = {100, 0, 0} * Тъмно бяло е и трите светодиода при 30% * int dimWhite = {30, 30, 30} * и т.н. * * Някои често срещани цветове са предоставени по -долу, или направете свой собствен * * СПИСЪК НА ПОРЪЧКА: * В основната част на програмата трябва да изброите реда *, в който искате да се появяват цветове, напр. * crossFade (червено); * crossFade (зелено); * crossFade (синьо); * * Тези цветове ще се появят в този ред, избледнявайки от * един цвят и в следващия * * В допълнение, има 5 незадължителни настройки, които можете да регулирате: * 1. Първоначалният цвят е зададен на черен (така че първият цвят избледнява in), но * можете да зададете началния цвят да бъде всеки друг цвят * 2. Вътрешният цикъл работи за 1020 интеграции; променливата „чакане“* задава приблизителната продължителност на едно кръстосване. На теория * „изчакване“от 10 ms трябва да направи crossFade от ~ 10 секунди. На практика другите функции, които кодът изпълнява, забавят това * до ~ 11 секунди на дъската ми. YMMV. * 3. Ако 'повтаряне' е зададено на 0, програмата ще се върти за неопределено време. * ако е зададено на число, то ще циклира този брой пъти, * след което ще спре на последния цвят в поредицата. (Задайте „return“на 1, * и направете последния цвят черен, ако искате той да избледнее в края.) * 4. Има опционална променлива „hold“, която поставя програмата * за „hold“милисекунди, когато цвят е пълен, * но преди да започне следващият цвят. * 5. Задайте флага на DEBUG на 1, ако искате изходът за отстраняване на грешки да бъде * изпратен на серийния монитор. * * Вътрешните части на програмата не са сложни, но те са малко придирчиви - вътрешната работа е обяснена * под основния цикъл. * * Април 2007 г., Клей Ширки *

/ Изход

int grnPin = 9; // Зелен светодиод, свързан към цифров извод 10 int redPin = 10; // Червен светодиод, свързан към цифров извод 9 int bluPin = 11; // Син светодиод, свързан към цифров извод 11

// Цветни масиви

int черно [3] = {0, 0, 0}; int бяло [3] = {100, 100, 100}; int red [3] = {100, 0, 0}; int зелено [3] = {0, 100, 0}; int синьо [3] = {0, 0, 100}; int жълто [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // и т.н.

// Задайте начален цвят

int redVal = черно [0]; int grnVal = черно [1]; int bluVal = черно [2];

int чакане = 3; // 10ms вътрешно закъснение crossFade; увеличаване за по -бавно избледняване

int hold = 0; // Незадължително задържане, когато цветът е завършен, преди следващото crossFade int DEBUG = 0; // DEBUG брояч; ако е зададено на 1, ще запише стойности обратно чрез сериен int loopCount = 60; // Колко често трябва да докладва DEBUG? int повторение = 0; // Колко пъти трябва да се въртим, преди да спрем? (0 за без спиране) int j = 0; // Цикъл на цикъл за повторение

// Инициализиране на цветови променливи

int prevR = redVal; int prevG = grnVal; int prevB = bluVal;

// Настройка на LED изходите

void setup () {pinMode (redPin, OUTPUT); // задава изводите като изход pinMode (grnPin, OUTPUT); pinMode (bluPin, OUTPUT);

if (DEBUG) {// Ако искаме да видим стойности за отстраняване на грешки …

Serial.begin (9600); //… настройте серийния изход}}

// Основна програма: изброяване на реда на кръстосани фасове

void loop () {crossFade (червено); crossFade (зелено); crossFade (синьо); crossFade (жълто);

if (repeat) {// Обвързваме ли краен брой пъти?

j += 1; if (j> = repeat) {// Още ли сме там? изход (j); // Ако е така, спрете. }}}

/* ПО -ТОЗИ РЕД е МАТЕМАТИКАТА - НЕ ТРЯБВА ДА ИЗМЕНЯТЕ ТОВА ЗА ОСНОВНИТЕ

* * Програмата работи така: * Представете си кръстосано затихване, което премества червения светодиод от 0-10, * зеления от 0-5 и синия от 10 до 7, в * десет стъпки. * Бихме искали да преброим 10 -те стъпки и да увеличим или * намалим стойностите на цветовете на равномерно стъпаловидни стъпки. * Представете си, че + означава повишаване на стойност с 1, а а - * е равно на понижаването му. Нашето 10 стъпково избледняване ще изглежда така: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + * G + + + + + * B - - - * * Червеното се издига от 0 до 10 на десет стъпки, зеленото от * 0-5 на 5 стъпки, а синьото пада от 10 на 7 на три стъпки. * * В реалната програма процентите на цветовете се преобразуват в * 0-255 стойности и има 1020 стъпки (255 * 4). * * За да разберем колко голяма стъпка трябва да има между една нагоре или * надолу отметка на една от стойностите на LED, ние наричаме CalcuStep (), * която изчислява абсолютната разлика между началните и крайните стойности, * и след това разделя тази празнина на 1020, за да определи размера на стъпката * между корекциите в стойността. */

int CalculateStep (int prevValue, int endValue) {

int step = endValue - prevValue; // Каква е общата пропаст? if (стъпка) {// Ако не е нула, стъпка = 1020/стъпка; // разделяне на 1020} стъпка за връщане; }

/* Следващата функция е CalcuVal. Когато стойността на цикъла, i, * достига размера на стъпката, подходящ за един от * цветовете, увеличава или намалява стойността на този цвят с 1. * (R, G и B се изчисляват отделно.) */

int CalcuVal (int step, int val, int i) {

if ((step) && i % step == 0) {// Ако стъпката не е нула и е време да промените стойност, if (стъпка> 0) {// увеличаване на стойността, ако стъпката е положителна … val += 1; } else if (стъпка 255) {val = 255; } else if (val <0) {val = 0; } обратна клапа; }

/* crossFade () преобразува процентните цветове в a

* Диапазон 0-255, след това цикли 1020 пъти, като се проверява дали * стойността трябва да се актуализира всеки път, след което се записват * стойностите на цвета към правилните щифтове. */

void crossFade (int цвят [3]) {

// Конвертиране на 0-255 int R = (цвят [0] * 255) / 100; int G = (цвят [1] * 255) / 100; int B = (цвят [2] * 255) / 100;

int stepR = изчисляване на стъпка (prevR, R);

int stepG = изчисляване на стъпка (prevG, G); int stepB = изчисляване на стъпка (prevB, B);

for (int i = 0; i <= 1020; i ++) {redVal = изчисляваVal (stepR, redVal, i); grnVal = изчисляваVal (stepG, grnVal, i); bluVal = изчисляваVal (stepB, bluVal, i);

analogWrite (redPin, redVal); // Записване на текущи стойности в LED изводи

analogWrite (grnPin, grnVal); analogWrite (bluPin, bluVal);

забавяне (изчакване); // Пауза за „чакане“милисекунди, преди да се възобнови цикъла

if (DEBUG) {// Ако искаме сериен изход, отпечатайте го в

if (i == 0 или i % loopCount == 0) {// началото и всеки loopCount пъти Serial.print ("Loop/RGB: #"); Serial.print (i); Serial.print ("|"); Serial.print (redVal); Serial.print (" /"); Serial.print (grnVal); Serial.print (" /"); Serial.println (bluVal); } DEBUG += 1; }} // Актуализиране на текущите стойности за следващия цикъл prevR = redVal; prevG = grnVal; prevB = bluVal; забавяне (задържане); // Пауза за незадължителни милисекунди „изчакване“преди възобновяване на цикъла}

Стъпка 2: Опаковане на дървото

Опаковане на дървото
Опаковане на дървото
Опаковане на дървото
Опаковане на дървото
Опаковане на дървото
Опаковане на дървото
Опаковане на дървото
Опаковане на дървото

Използвах водоустойчиви ленти, тъй като те ще бъдат на открито. Те се придържаха сами, но аз бързо ги последвах с телени връзки, за да се уверя, че остават на мястото си. Прост и лесен хак. Възможността за захранване на лентата улеснява подаването на захранването в долната част и извеждането на захранването отгоре към звездата.

Стъпка 3: Не забравяйте звездата отгоре

Не забравяйте звездата отгоре
Не забравяйте звездата отгоре
Не забравяйте звездата отгоре
Не забравяйте звездата отгоре
Не забравяйте звездата отгоре
Не забравяйте звездата отгоре
Не забравяйте звездата отгоре
Не забравяйте звездата отгоре

За звездата използвах чип от 10W чипове, за да привлека малко внимание. Запоявах ги към меден лист като радиатор. Можех да използвам повече лента, тъй като остана малко.

Стъпка 4: Изпробвайте го

Image
Image

Първият опит беше твърде бърз.

След като го успокоих, изглеждаше доста добре.

Препоръчано: