Obsah:

LED spirálový strom: 4 kroky (s obrázky)
LED spirálový strom: 4 kroky (s obrázky)

Video: LED spirálový strom: 4 kroky (s obrázky)

Video: LED spirálový strom: 4 kroky (s obrázky)
Video: Запомните отличную хитрость и никогда не выкидывайте старый бур от перфоратора 2024, Červenec
Anonim
LED spirálový strom
LED spirálový strom
LED spirálový strom
LED spirálový strom
LED spirálový strom
LED spirálový strom

Miluji všechny druhy LED pásků. Udělal jsem s nimi pěkné duhové světlo. Užitečné jsou i ty neadresné. Vytvořil jsem jasný tržní slunečník venkovní světlo tím, že jsem je připevnil k žebrům unbrella, takže když můj spirálový strom vyfoukl, rozhodl jsem se omotat kolem něj dlouhý LED pás.

Krok 1: Ovladač

Ovladač
Ovladač
Ovladač
Ovladač
Ovladač
Ovladač

Rozhodl jsem se použít neadresovatelné LED diody RGB. To znamená, že mohu mít naprogramovaný efekt, ale všechny LED diody mění barvu současně. To také znamená, že bude potřeba ovladač. Mohl jsem použít arduino uno a provést počáteční testy pomocí RGB štítu, ale nakonec jsem použil vlastní desku s holým čipem Atmega328. Stačilo přepnout cílový programátor a naprogramovat čip přímo.

Měl jsem spoustu těchto desek, které zbyly z jiných projektů lamp. Nebojte se místo toho použít levný řadový předprogramovaný ovladač, jako jsem to udělal na svém deštníku.

Nakonec jsem použil jako základ stromu pomalé crossfade demo.

/** Kód pro křížové blednutí 3 LED diod, červená, zelená a modrá (RGB) * Chcete-li vytvořit vyblednutí, musíte udělat dvě věci: * 1. Popište barvy, které chcete zobrazit * 2. Vytvořte seznam požadovaného pořadí aby vybledly * * POPIS BARVY: * Barva je jen pole tří procent, 0-100, * ovládání červené, zelené a modré LED diody * * Červená je červená LED při plném, modrá a zelená vypnutá * int červená = {100, 0, 0} * Ztlumit bílou jsou všechny tři LED při 30% * int dimWhite = {30, 30, 30} * atd. * * Některé běžné barvy jsou uvedeny níže, nebo si vytvořte vlastní * * SEZNAM OBJEDNÁVKA: * V hlavní části programu musíte uvést pořadí *, ve kterém se mají barvy zobrazovat, např. * crossFade (červená); * crossFade (zelená); * crossFade (modrá); * * Tyto barvy se objeví v uvedeném pořadí, vyblednou z * jedné barvy do další * * Kromě toho je k dispozici 5 volitelných nastavení, která můžete upravit: * 1. Počáteční barva je nastavena na černou (takže první barva vybledne in), ale * můžete nastavit počáteční barvu na jakoukoli jinou barvu * 2. Vnitřní smyčka běží na 1020 interací; proměnná 'wait' * nastavuje přibližnou dobu trvání jednoho crossfade. Teoreticky * při „čekání“10 ms by mělo dojít ke zkřížení ~ 10 sekund. V * praxi ostatní funkce, které kód provádí, zpomalí toto * až na ~ 11 sekund na mé desce. YMMV. * 3. Pokud je 'opakování' nastaveno na 0, program se bude opakovat neomezeně dlouho. * pokud je nastaveno na číslo, bude se to opakovat, * pak se zastaví na poslední barvě v sekvenci. (Nastavte 'návrat' na 1, * a udělejte poslední barvu černou, pokud chcete, aby na konci zmizela.) * 4. K dispozici je volitelná proměnná 'hold', která pasuje program * pro 'hold' milisekundy, když barva je úplná, * ale než začne další barva. * 5. Nastavte příznak DEBUG na 1, pokud chcete, aby byl výstup ladění * odeslán na sériový monitor. * * Vnitřnosti programu nejsou složité, ale * jsou trochu rozporuplné - vnitřní fungování je vysvětleno * pod hlavní smyčkou. * * Duben 2007, Clay Shirky *

/ Výstup

int grnPin = 9; // Zelená LED, připojená k digitálnímu pinu 10 int redPin = 10; // Červená LED, připojeno k digitálnímu pinu 9 int bluPin = 11; // Modrá LED, připojená k digitálnímu pinu 11

// Barevná pole

int černá [3] = {0, 0, 0}; int bílá [3] = {100, 100, 100}; int červená [3] = {100, 0, 0}; int zelená [3] = {0, 100, 0}; int modrá [3] = {0, 0, 100}; int žlutá [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // atd.

// Nastavit počáteční barvu

int redVal = černý [0]; int grnVal = černý [1]; int bluVal = černý [2];

int čekat = 3; // 10ms interní crossFade zpoždění; zvýšení pro pomalejší vyblednutí

int hold = 0; // Volitelné podržení po dokončení barvy, před dalším crossFade int DEBUG = 0; // počitadlo DEBUG; pokud je nastaveno na 1, zapíše hodnoty zpět přes serial int loopCount = 60; // Jak často by se měl DEBUG hlásit? int opakování = 0; // Kolikrát bychom se měli zastavit, než zastavíme? (0 bez zastavení) int j = 0; // Počitadlo smyček pro opakování

// Inicializace barevných proměnných

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

// Nastavte výstupy LED

void setup () {pinMode (redPin, OUTPUT); // nastaví piny jako výstupní pinMode (grnPin, OUTPUT); pinMode (bluPin, OUTPUT);

if (DEBUG) {// Pokud chceme vidět hodnoty pro ladění…

Serial.begin (9600); //… nastavit sériový výstup}}

// Hlavní program: seznam pořadí crossfade

void loop () {crossFade (červená); crossFade (zelená); crossFade (modrá); crossFade (žlutá);

if (opakovat) {// Smyčkujeme konečný počet opakování?

j += 1; if (j> = opakovat) {// Už jsme tam? exit (j); // Pokud ano, přestaň. }}}

/* NÍŽE TATO ŘADA JE MATH - TOTO NEMUSÍTE ZMĚNIT ZA ZÁKLADY

* * Program funguje takto: * Představte si crossfade, který posouvá červenou LED od 0-10, * zelenou od 0-5 a modrou od 10 do 7, v * deseti krocích. * Chtěli bychom spočítat 10 kroků a zvýšit nebo * snížit hodnoty barev v rovnoměrně odstupňovaných krocích. * Představte si, že + znamená zvýšení hodnoty o 1 a a - * se rovná snížení. Naše 10 stupňové vyblednutí by vypadalo takto: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + + * G + + + + + * B - - - * * Červená stoupá od 0 až 10 v deseti krocích, zelená od * 0-5 v 5 krocích a modrá klesá od 10 do 7 ve třech krocích. * * Ve skutečném programu jsou procenta barev převedena na hodnoty * 0-255 a existuje 1020 kroků (255 * 4). * * Abychom zjistili, jak velký krok by měl být mezi jedním vzestupným nebo * zatržítkem jedné z hodnot LED, říkáme CalcStep (), * který vypočítá absolutní mezeru mezi počáteční a koncovou hodnotou, * a poté rozdělí tuto mezeru o 1020, aby určil velikost kroku * mezi úpravami hodnoty. */

int countStep (int prevValue, int endValue) {

int step = endValue - prevValue; // Jaká je celková mezera? if (step) {// Pokud je nenulové, step = 1020/krok; // děleno 1020} návratový krok; }

/* Další funkcí je countVal. Když hodnota smyčky, i, * dosáhne velikosti kroku vhodné pro jednu z * barev, zvýší nebo sníží hodnotu této barvy o 1. * (R, G a B se vypočítávají každý zvlášť.) */

int CalcVal (int krok, int val, int i) {

if ((krok) && i % krok == 0) {// Pokud krok není nenulový a je čas na změnu hodnoty, if (step> 0) {// zvýší hodnotu, pokud je krok kladný… val += 1; } else if (krok 255) {val = 255; } else if (val <0) {val = 0; } návrat val; }

/* crossFade () převede procentní barvy na a

* Rozsah 0-255, poté smyčky 1020krát, kontrola, zda * je třeba hodnotu pokaždé aktualizovat, poté zápis * hodnot barev na správné piny. */

void crossFade (int color [3]) {

// Převést na 0-255 int R = (barva [0] * 255) / 100; int G = (barva [1] * 255) / 100; int B = (barva [2] * 255) / 100;

int krokR = countStep (prevR, R);

int stepG = countStep (předchozí G, G); int krokB = countStep (prevB, B);

pro (int i = 0; i <= 1020; i ++) {redVal = vypočítatVal (stepR, redVal, i); grnVal = countVal (stepG, grnVal, i); bluVal = countVal (stepB, bluVal, i);

analogWrite (redPin, redVal); // Zapisujte aktuální hodnoty na LED piny

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

zpoždění (čekání); // Před obnovením smyčky počkejte milisekundy „počkejte“

if (DEBUG) {// Pokud chceme sériový výstup, vytiskněte jej na

if (i == 0 nebo i % loopCount == 0) {// začátek a každý loopCount krát Serial.print ("Loop/RGB: #"); Serial.print (i); Serial.print ("|"); Serial.print (redVal); Serial.print (" /"); Serial.print (grnVal); Serial.print (" /"); Serial.println (bluVal); } DEBUG += 1; }} // Aktualizace aktuálních hodnot pro další smyčku prevR = redVal; prevG = grnVal; prevB = bluVal; zpoždění (podržet); // Pozastavení volitelných milisekund „čekání“před obnovením smyčky}

Krok 2: Zabalení stromu

Balení stromu
Balení stromu
Balení stromu
Balení stromu
Balení stromu
Balení stromu
Balení stromu
Balení stromu

Použil jsem vodotěsné pásy, protože ty budou venku. Drželi se sami, ale rychle jsem je sledoval drátěnými stahovacími páskami, abych se ujistil, že zůstanou na místě. Jednoduchý a snadný hack. Průchodná schopnost proužku usnadnila přívod napájecího zdroje na dno a získání energie z vrcholu ke hvězdě.

Krok 3: Nezapomeňte na hvězdu nahoře

Nezapomeňte na hvězdu nahoře
Nezapomeňte na hvězdu nahoře
Nezapomeňte na hvězdu nahoře
Nezapomeňte na hvězdu nahoře
Nezapomeňte na hvězdu nahoře
Nezapomeňte na hvězdu nahoře
Nezapomeňte na hvězdu nahoře
Nezapomeňte na hvězdu nahoře

Pro hvězdu jsem použil pár 10W čipů, abych upoutal pozornost. Pájel jsem je na měděný plech jako chladič. Mohl jsem použít více proužků, protože tam trochu zbylo.

Krok 4: Vyzkoušejte to

Image
Image

První pokus měl rychlost příliš vysokou …

Jakmile jsem to uklidnil, vypadalo to docela dobře.

Doporučuje: