Sadržaj:

LED spiralno drvo: 4 koraka (sa slikama)
LED spiralno drvo: 4 koraka (sa slikama)

Video: LED spiralno drvo: 4 koraka (sa slikama)

Video: LED spiralno drvo: 4 koraka (sa slikama)
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Novembar
Anonim
LED spiralno drvo
LED spiralno drvo
LED spiralno drvo
LED spiralno drvo
LED spiralno drvo
LED spiralno drvo

Obožavam sve vrste LED traka. Napravio sam lepo svetlo duge sa njima. Čak su i one koje se ne mogu adresirati korisne. Napravio sam sjajan tržnički kišobran za vanjsko svjetlo tako što sam ih pričvrstio na rebra unbrella, pa kad je moje spiralno drvo izletjelo, odlučio sam omotati oko njega dugačku LED traku.

Korak 1: Kontroler

Kontroler
Kontroler
Kontroler
Kontroler
Kontroler
Kontroler

Odlučio sam koristiti RGB LED diode koje se ne mogu adresirati. To znači da mogu imati programirani učinak, ali sve LED diode mijenjaju boju istovremeno. To takođe znači da će biti potreban kontroler. Mogao sam koristiti arduino uno i napraviti prve testove koristeći RGB štit, ali na kraju sam koristio prilagođenu pojedinačnu ploču s golim čipom Atmega328. Trebalo je samo promijeniti ciljnog programera i direktno programirati čip.

Ostalo mi je dosta ovih ploča od drugih projekata svjetiljki. Umjesto toga, slobodno upotrijebite jeftini ugrađeni unaprijed programirani kontroler kao što sam ja to učinio na svom kišobranu.

Na kraju sam upotrijebio polagani crossfade demo kao bazu za drvo.

/** Kôd za 3 LED-a, crveno, zeleno i plavo (RGB) sa unakrsnim blijeđenjem * Da biste stvorili blijeđenje, morate učiniti dvije stvari: * 1. Opišite boje koje želite prikazati * 2. Navedite redoslijed koji želite da izblede * * OPIS BOJE: * Boja je samo niz od tri procenta, 0-100, * kontrola crvene, zelene i plave LED diode * * Crvena je crvena LED puna, plava i zelena isključena * int crvena = {100, 0, 0} * Zagasito bijela su sve tri LED diode pri 30% * int dimWhite = {30, 30, 30} * itd. * * Neke uobičajene boje date su ispod, ili ih napravite sami * * NARUDŽBA: * U glavnom dijelu programa morate navesti redoslijed * u kojem želite da se boje pojavljuju, npr. * crossFade (crveno); * crossFade (zelena); * crossFade (plavo); * * Te će se boje pojavljivati tim redoslijedom, blijedeći iz * jedne boje u sljedeću * * Osim toga, postoji 5 opcionalnih postavki koje možete prilagoditi: * 1. Početna boja je postavljena na crnu (tako da prva boja blijedi in), ali * možete postaviti početnu boju kao bilo koju drugu boju * 2. Interna petlja radi za 1020 interacija; promenljiva 'wait' * postavlja približno trajanje jednog unakrsnog fadea. U teoriji, * 'čekanje' od 10 ms bi trebalo napraviti crossFade od ~ 10 sekundi. U * praksi, ostale funkcije koje kod izvršava sporo * sve do ~ 11 sekundi na mojoj ploči. YMMV. * 3. Ako je 'repeat' postavljeno na 0, program će se petljati u nedogled. * ako je postavljeno na broj, to će se ponavljati taj broj puta, * a zatim će se zaustaviti na posljednjoj boji u nizu. (Postavite 'return' na 1, * i učinite da posljednja boja bude crna ako želite da na kraju izblijedi.) * 4. Postoji opcionalna varijabla 'hold' koja pasivira * program za 'hold' milisekunde kada boja je potpuna, * ali prije nego počne sljedeća boja. * 5. Postavite zastavicu DEBUG na 1 ako želite da se izlaz za otklanjanje grešaka * pošalje na serijski monitor. * * Unutrašnjost programa nije komplikovana, ali je * malo nemirna - unutrašnji rad je objašnjen * ispod glavne petlje. * * April 2007, Clay Shirky *

/ Izlaz

int grnPin = 9; // Zelena LED dioda, spojena na digitalni pin 10 int redPin = 10; // Crvena LED, spojena na digitalni pin 9 int bluPin = 11; // Plava LED, spojena na digitalni pin 11

// Nizovi boja

int crna [3] = {0, 0, 0}; int bijela [3] = {100, 100, 100}; int red [3] = {100, 0, 0}; int zelena [3] = {0, 100, 0}; int plava [3] = {0, 0, 100}; int žuta [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // itd.

// Postavljanje početne boje

int redVal = crno [0]; int grnVal = crno [1]; int bluVal = crno [2];

int wait = 3; // 10ms interno kašnjenje crossFade; povećati za sporije blijeđenje

int hold = 0; // Opcionalno zadržavanje kada je boja potpuna, prije sljedećeg crossFade int DEBUG = 0; // DEBUG brojač; ako je postavljeno na 1, upisat će vrijednosti nazad putem serijskog int loopCount = 60; // Koliko često bi DEBUG trebao izvještavati? int repeat = 0; // Koliko puta trebamo proći petlju prije zaustavljanja? (0 bez zaustavljanja) int j = 0; // Brojač petlji za ponavljanje

// Pokretanje varijabli boja

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

// Postavljanje LED izlaza

void setup () {pinMode (redPin, OUTPUT); // postavlja pinove kao izlazni pinMode (grnPin, OUTPUT); pinMode (bluPin, OUTPUT);

if (DEBUG) {// Ako želimo vidjeti vrijednosti za ispravljanje pogrešaka …

Serial.begin (9600); //… postavljanje serijskog izlaza}}

// Glavni program: popis redoslijeda ukrštanja

void loop () {crossFade (crveno); crossFade (zelena); crossFade (plava); crossFade (žuto);

if (repeat) {// Da li petlju ponavljamo konačan broj puta?

j += 1; if (j> = repeat) {// Jesmo li već stigli? izlaz (j); // Ako je tako, zaustavite se. }}}

/* ISPOD OVOG LINIJA JE MATEMATIKA - NE TREBATE OVO PROMIJENITI OSNOVNO

* * Program funkcionira ovako: * Zamislite unakrsni prelaz koji pomiče crvenu LED diodu od 0-10, * zelenu od 0-5, a plavu od 10 do 7, u * deset koraka. * Željeli bismo izbrojati 10 koraka i povećati ili * smanjiti vrijednosti boje u ravnomjerno povećanim koracima. * Zamislite da + označava povećanje vrijednosti za 1, a a - * je jednako smanjenju. Naše blijeđenje u 10 koraka izgledalo bi ovako: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + * G + + + + + + B - - - * * Crvena se diže od 0 do 10 u deset koraka, zelena od * 0-5 u 5 koraka, a plava pada s 10 do 7 u tri koraka. * * U stvarnom programu, postoci boja su pretvoreni u vrijednosti * 0-255, a postoji 1020 koraka (255 * 4). * * Da bismo shvatili koliki bi trebao biti korak između jedne gore ili * donje oznake jedne od LED vrijednosti, zovemo CalcuStep (), * koji izračunava apsolutni jaz između početne i krajnje vrijednosti, * a zatim dijeli taj jaz s 1020 kako bi odredio veličinu koraka * između podešavanja vrijednosti. */

int CalculateStep (int prevValue, int endValue) {

int step = endValue - prevValue; // Koliki je ukupni jaz? if (korak) {// Ako nije nula, korak = 1020/korak; // podijeljeno sa 1020} return step; }

/* Sljedeća funkcija je CalcuVal. Kada je vrijednost petlje, i, * dostigne veličinu koraka odgovarajuću za jednu od * boja, povećava ili smanjuje vrijednost te boje za 1. * (R, G i B se računaju zasebno.) */

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

if ((korak) && i % step == 0) {// Ako korak nije nula i vrijeme je za promjenu vrijednosti, if (korak> 0) {// uvećava vrijednost ako je korak pozitivan … val += 1; } else if (korak 255) {val = 255; } else if (val <0) {val = 0; } povratni val; }

/* crossFade () pretvara postotne boje u a

* Opseg 0-255, zatim petlja 1020 puta, provjeravajući da li * vrijednost treba ažurirati svaki put, zatim upisuje * vrijednosti boje na ispravne pinove. */

void crossFade (int boja [3]) {

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

int stepR = CalculateStep (prevR, R);

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

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

analogWrite (redPin, redVal); // Zapis trenutnih vrijednosti na LED pinove

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

kašnjenje (čekanje); // Pauza za 'čekanje' milisekundi prije nastavka petlje

if (DEBUG) {// Ako želimo serijski izlaz, ispišite ga na

if (i == 0 ili i % loopCount == 0) {// početak, i svaki loopCount puta Serial.print ("Petlja/RGB: #"); Serial.print (i); Serial.print ("|"); Serial.print (redVal); Serial.print (" /"); Serial.print (grnVal); Serial.print (" /"); Serial.println (bluVal); } DEBUG += 1; }} // Ažuriranje trenutnih vrijednosti za sljedeću petlju prevR = redVal; prevG = grnVal; prevB = bluVal; kašnjenje (zadržavanje); // Pauziranje za opcionalno 'čekanje' milisekundi prije nastavka petlje}

Korak 2: Omotajte drvo

Omotavanje drveta
Omotavanje drveta
Omotavanje drveta
Omotavanje drveta
Omotavanje drveta
Omotavanje drveta
Omotavanje drveta
Omotavanje drveta

Koristio sam vodootporne trake jer će biti na otvorenom. Zaista su se držali sami, ali brzo sam se nadovezao žičanim vezama kako bih bio siguran da ostaju na mjestu. Jednostavno i lako hakiranje. Sposobnost napajanja trake olakšala je napajanje izvora napajanja dolje i izvlačenje struje s vrha do zvijezde.

Korak 3: Ne zaboravite zvijezdu na vrhu

Ne zaboravite zvezdu na vrhu
Ne zaboravite zvezdu na vrhu
Ne zaboravite zvezdu na vrhu
Ne zaboravite zvezdu na vrhu
Ne zaboravite zvezdu na vrhu
Ne zaboravite zvezdu na vrhu
Ne zaboravite zvezdu na vrhu
Ne zaboravite zvezdu na vrhu

Za zvijezdu sam koristio par čipova od 10 W kako bih privukao pažnju. Lemio sam ih na bakreni lim kao hladnjak. Mogao sam upotrijebiti više trake jer je ostalo malo.

Korak 4: Isprobajte

Image
Image

U prvom pokušaju brzina je bila prevelika …

Kad sam se smirio, izgledalo je prilično dobro.

Preporučuje se: