Kazalo:

Spiralno drevo LED: 4 koraki (s slikami)
Spiralno drevo LED: 4 koraki (s slikami)

Video: Spiralno drevo LED: 4 koraki (s slikami)

Video: Spiralno drevo LED: 4 koraki (s slikami)
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, Julij
Anonim
LED spiralno drevo
LED spiralno drevo
LED spiralno drevo
LED spiralno drevo
LED spiralno drevo
LED spiralno drevo

Obožujem vse vrste LED trakov. Z njimi sem naredil lepo mavrično luč. Koristne so tudi tiste, ki jih ni mogoče nasloviti. Naredil sem svetlo tržno senčniško zunanjo luč, tako da sem jih pritrdil na rebra unbrella, tako da sem se, ko je moje spiralno drevo izpihnilo, odločil, da okoli njega zavijem dolg led trak.

1. korak: Krmilnik

Krmilnik
Krmilnik
Krmilnik
Krmilnik
Krmilnik
Krmilnik

Odločil sem se, da bom uporabil neozdravljive RGB LED diode. To pomeni, da lahko imam programiran učinek, vendar vse LED diode hkrati spreminjajo barvo. To tudi pomeni, da bo potreben krmilnik. Lahko bi uporabil arduino uno in naredil prve teste z uporabo RGB ščita, vendar sem na koncu uporabil eno ploščo po meri z golim čipom Atmega328. Moral sem samo zamenjati ciljnega programerja in neposredno programirati čip.

Veliko drugih plošč mi je ostalo od drugih projektov svetilk. Uporabite poceni vgrajen vnaprej programiran krmilnik, kot sem to storil na svojem dežniku.

Na koncu sem kot osnovo za drevo uporabil počasen demografski crossfade.

/** Koda za navzkrižno bledenje 3 LED, rdeče, zelene in modre (RGB) * Če želite ustvariti zbledelo, morate narediti dve stvari: * 1. Opišite barve, ki jih želite prikazati * 2. Navedite želeno zaporedje naj zbledijo * * OPIS BARVE: * Barva je le niz treh odstotkov, 0-100, * nadzor rdeče, zelene in modre LED * * Rdeča je rdeča LED v celoti, modra in zelena izključena * int rdeča = {100, 0, 0} * Temno bela so vse tri LED diode pri 30% * int dimWhite = {30, 30, 30} * itd. * Spodaj so navedene nekatere običajne barve ali pa jih naredite sami * * NAROČILO: * V glavnem delu programa morate navesti vrstni red *, v katerem želite prikazati barve, npr. * crossFade (rdeča); * crossFade (zelena); * crossFade (modra); * * Te barve se bodo pojavile v tem vrstnem redu, zbledijo iz * ene barve v naslednjo * * Poleg tega lahko prilagodite še 5 neobveznih nastavitev: * 1. Začetna barva je nastavljena na črno (tako da prva barva zbledi in), vendar * lahko nastavite začetno barvo na katero koli drugo barvo * 2. Notranja zanka deluje za 1020 interakcij; spremenljivka "wait" * določa približno trajanje enega samega navzkrižnega bleščanja. Teoretično bi moralo "čakanje" 10 ms narediti crossFade za ~ 10 sekund. V praksi * druge funkcije, ki jih koda opravlja, počasi * do ~ 11 sekund na moji plošči. YMMV. * 3. Če je 'repeat' nastavljeno na 0, bo program v nedogled. * če je nastavljeno na številko, se bo to število krat ponovilo, * nato pa se ustavilo pri zadnji barvi v zaporedju. (Nastavite 'return' na 1, * in naredite zadnjo barvo črno, če želite, da na koncu zbledi.) * 4. Obstaja neobvezna spremenljivka 'hold', ki program * drži za 'hold' milisekunde, ko barva je popolna *, vendar preden se začne naslednja barva. * 5. Nastavite zastavico DEBUG na 1, če želite, da se izhod za odpravljanje napak * pošlje na serijski monitor. * * Notranjosti programa niso zapletene, vendar so * nekoliko nemirne - notranje delovanje je razloženo * pod glavno zanko. * * April 2007, Clay Shirky *

/ Izhod

int grnPin = 9; // Zelena LED, povezana z digitalnim zatičem 10 int redPin = 10; // Rdeča LED, povezana z digitalnim zatičem 9 int bluPin = 11; // Modra LED, povezana z digitalnim zatičem 11

// Barvni nizi

črna črna [3] = {0, 0, 0}; int bela [3] = {100, 100, 100}; int rdeča [3] = {100, 0, 0}; int zelena [3] = {0, 100, 0}; int modra [3] = {0, 0, 100}; int rumena [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // itd.

// Nastavitev začetne barve

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

int čaka = 3; // 10ms notranja zamuda crossFade; povečanje za počasnejše bledenje

int hold = 0; // Izbirno držanje, ko je barva dokončana, pred naslednjim crossFade int DEBUG = 0; // DEBUG števec; če je nastavljeno na 1, bo vrednosti zapisalo nazaj prek zaporednega int loopCount = 60; // Kako pogosto naj poroča DEBUG? int repeat = 0; // Kolikokrat naj se ustavimo, preden se ustavimo? (0 brez ustavitve) int j = 0; // Števec zank za ponavljanje

// Inicializiraj barvne spremenljivke

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

// Nastavitev LED izhodov

void setup () {pinMode (redPin, OUTPUT); // nastavi nožice kot izhodni pinMode (grnPin, OUTPUT); pinMode (bluPin, OUTPUT);

if (DEBUG) {// Če želimo videti vrednosti za odpravljanje napak …

Serial.begin (9600); //… nastavite serijski izhod}}

// Glavni program: navedite vrstni red navzkrižnih prehodov

void loop () {crossFade (rdeča); crossFade (zelena); crossFade (modra); crossFade (rumena);

if (repeat) {// Ali zanko končamo tolikokrat?

j += 1; if (j> = repeat) {// Smo že tam? izhod (j); // Če je tako, ustavite. }}}

/* POD TA ČRTA JE MATEMA - TEGA NI TREBA MENJATI ZA OSNOVE

* * Program deluje tako: * Predstavljajte si navzkrižno bleščanje, ki premika rdečo LED od 0-10, * zeleno od 0-5 in modro od 10 do 7, v * desetih korakih. * Želeli bi šteti 10 korakov in povečati ali * zmanjšati barvne vrednosti v enakomerno stopnjevanih korakih. * Predstavljajte si, da + označuje zvišanje vrednosti za 1, a - * je enako znižanju. Naša 10 -stopenjska zbledelost bi izgledala tako: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + + G + + + + + B - - - * * Rdeča se dvigne od 0 do 10 v desetih korakih, zelena od * 0-5 v 5 korakih, modra pa pade od 10 do 7 v treh korakih. * * V resničnem programu se odstotki barv pretvorijo v vrednosti * 0-255 in obstaja 1020 korakov (255 * 4). * * Da bi ugotovili, kako velik bi moral biti korak med enim pritiskom navzgor ali * navzdol ene od vrednosti LED, pokličemo CalcuStep (), * ki izračuna absolutno vrzel med začetno in končno vrednostjo, * in nato deli to vrzel z 1020, da določi velikost koraka * med prilagoditvami vrednosti. */

int CalculateStep (int prevValue, int endValue) {

int step = endValue - prevValue; // Kakšna je skupna vrzel? if (korak) {// Če ni nič, je korak = 1020/korak; // deljeno z 1020} povratni korak; }

/* Naslednja funkcija je CalcuVal. Ko vrednost zanke, i, * doseže velikost koraka, primerno za eno od * barv, poveča ali zmanjša vrednost te barve za 1. * (R, G in B se izračunata posebej.) */

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

if ((step) && i % step == 0) {// Če korak ni nič in je čas za spremembo vrednosti, if (korak> 0) {// poveča vrednost, če je korak pozitiven… val += 1; } else if (korak 255) {val = 255; } else if (val <0) {val = 0; } povratni ventil; }

/* crossFade () pretvori odstotne barve v a

* Obseg 0-255, nato se ponovi 1020-krat in preveri, ali je treba vrednost * vsakič posodobiti, nato pa * barvne vrednosti zapiše v pravilne zatiče. */

void crossFade (int barva [3]) {

// Pretvori v 0-255 int R = (barva [0] * 255) / 100; int G = (barva [1] * 255) / 100; int B = (barva [2] * 255) / 100;

int korak R = izračunajte korak (prevR, R);

int korakG = izračunajte korak (prevG, G); int korakB = izračunajte korak (prevB, B);

for (int i = 0; i <= 1020; i ++) {redVal = izračunVal (stepR, redVal, i); grnVal = izračunVal (stepG, grnVal, i); bluVal = IzračunajVal (stepB, bluVal, i);

analogWrite (redPin, redVal); // Zapišite trenutne vrednosti na zatiče LED

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

zamuda (čakanje); // Pred nadaljevanjem zanke se ustavite za "počakajte" milisekunde

if (DEBUG) {// Če želimo serijski izhod, ga natisnemo na

if (i == 0 ali i % loopCount == 0) {// začetek in vsak loopCount krat Serial.print ("Zanka/RGB: #"); Serial.print (i); Serial.print ("|"); Serial.print (redVal); Serial.print (" /"); Serial.print (grnVal); Serial.print (" /"); Serial.println (bluVal); } DEBUG += 1; }} // Posodobi trenutne vrednosti za naslednjo zanko prevR = redVal; prevG = grnVal; prevB = bluVal; zamuda (zadrževanje); // Začasno ustavite za milisekunde "čakanja", preden nadaljujete z zanko}

2. korak: Zavijanje drevesa

Zavijanje drevesa
Zavijanje drevesa
Zavijanje drevesa
Zavijanje drevesa
Zavijanje drevesa
Zavijanje drevesa
Zavijanje drevesa
Zavijanje drevesa

Uporabil sem nepremočljive trakove, saj bodo ti na prostem. Res so se držali sami, vendar sem hitro nadaljeval z žičnimi vezmi, da sem ostal na mestu. Enostaven in enostaven kramp. Zmogljivost pretočnega napajanja traku je olajšala napajanje napajalnika na dno in napajanje z vrha do zvezde.

3. korak: Ne pozabite na zvezdo na vrhu

Ne pozabite na zvezdo na vrhu
Ne pozabite na zvezdo na vrhu
Ne pozabite na zvezdo na vrhu
Ne pozabite na zvezdo na vrhu
Ne pozabite na zvezdo na vrhu
Ne pozabite na zvezdo na vrhu
Ne pozabite na zvezdo na vrhu
Ne pozabite na zvezdo na vrhu

Za zvezdo sem uporabil par 10W čipov, da bi pritegnil nekaj pozornosti. Spajal sem jih na bakreno pločevino kot hladilnik. Lahko bi uporabil več trakov, ker je ostalo še malo.

4. korak: Preizkusite

Image
Image

Prvi poskus je bil prehiter …

Ko sem se umiril, je bilo videti zelo dobro.

Priporočena: