Sadržaj:

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

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

Video: LED spiralno stablo: 4 koraka (sa slikama)
Video: Меня вычислили. Поход в дождь. Рыбалка у землянки. Батл. Фонарь KilNex. 2024, Srpanj
Anonim
LED spiralno stablo
LED spiralno stablo
LED spiralno stablo
LED spiralno stablo
LED spiralno stablo
LED spiralno stablo

Volim sve vrste LED traka. S njima sam napravio lijepo svjetlo duge. Korisne su čak i one koje se ne mogu adresirati. Napravio sam sjajno vanjsko svjetlo na tržištu, tako što sam ih pričvrstio na rebra unbrella, pa kad je moje spiralno stablo izletjelo, odlučio sam omotati duljinu LED trake oko njega.

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đer znači da će biti potreban kontroler. Mogao sam koristiti arduino uno i napraviti prve testove pomoću RGB štita, ali na kraju sam koristio prilagođenu pojedinačnu ploču s golim čipom Atmega328. Trebalo je samo promijeniti ciljnog programera i izravno 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 stablo.

/** Kôd za 3 LED-a, crveno, zeleno i plavo (RGB) s 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 bi izblijedjele * * OPIS BOJE: * Boja je samo niz od tri posto, 0-100, * kontrolira crvenu, zelenu i plavu LED diodu * * Crvena je crvena LED punim svjetlom, 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 navedene su u nastavku, ili ih napravite sami * * NAVEDITE NARUDŽBA: * U glavnom dijelu programa morate navesti redoslijed * u kojem želite da se boje pojavljuju, npr. * crossFade (crveno); * crossFade (zeleno); * crossFade (plavo); * * Te će se boje pojavljivati tim redoslijedom, blijedeći iz * jedne boje u sljedeću * * Osim toga, postoji 5 izbornih 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. Unutarnja petlja radi za 1020 interacija; varijabla "čekanja" * postavlja približno trajanje jednog unakrsnog fadea. U teoriji, * 'čekanje' od 10 ms trebalo bi napraviti crossFade od ~ 10 sekundi. U * praksi, ostale funkcije koje kod obavlja sporo * do ~ 11 sekundi na mojoj ploči. YMMV. * 3. Ako je 'repeat' postavljeno na 0, program će se ponavljati u nedogled. * ako je postavljeno na broj, to će se ponavljati toliko puta, * a zatim se zaustaviti na posljednjoj boji u nizu. (Postavite 'return' na 1, * i učinite posljednju boju crnom ako želite da na kraju izblijedi.) * 4. Postoji izborna 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 ispravljanje pogrešaka * pošalje na serijski monitor. * * Unutrašnjost programa nije komplicirana, ali je * pomalo nemirna - unutarnji rad objašnjen je * ispod glavne petlje. * * Travanj 2007, Clay Shirky *

/ Izlaz

int grnPin = 9; // Zelena LED, 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 crveno [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 čekanje = 3; // 10 ms interno kašnjenje crossFade; povećati za sporije blijeđenje

int hold = 0; // Izborno držanje kad je boja potpuna, prije sljedećeg crossFade int DEBUG = 0; // DEBUG brojač; ako je postavljeno na 1, vratit će vrijednosti natrag putem serijskog int loopCount = 60; // Koliko često bi DEBUG trebao izvještavati? int ponavljanje = 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 unakrsnih uzoraka

void loop () {crossFade (crveno); crossFade (zeleno); crossFade (plavo); crossFade (žuto);

if (ponavljanje) {// Petljamo li konačan broj puta?

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

/* ISPOD OVOG LINIJA JE MATEMATIKA - NE TREBATE TO MJENJATI OSNOVNO

* * Program radi na sljedeći način: * Zamislite unakrsni prelaz koji pomiče crvenu LED 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 - * jednako snižavanju. 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 se pretvaraju u vrijednosti * 0-255, a postoji 1020 koraka (255 * 4). * * Da bismo shvatili koliki bi trebao biti korak između jedne gore ili * dolje kvačice jedne od LED vrijednosti, zovemo CalcuStep (), * koji izračunava apsolutni jaz između početne i krajnje vrijednosti, * a zatim dijeli taj razmak s 1020 kako bi odredio veličinu koraka * između prilagodbi vrijednosti. */

int CalculateStep (int prevValue, int endValue) {

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

/* Sljedeća funkcija je CalcuVal. Kad vrijednost petlje, i, * dostigne veličinu koraka prikladnu 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 ((step) && 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

* Raspon 0-255, zatim petlja 1020 puta, provjeravajući je li * vrijednost potrebno ažurirati svaki put, a 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 korakR = izračunatiKorak (prevR, R);

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

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

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

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

odgoda (č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: #"); Serijski.ispis (i); Serial.print ("|"); Serijski.ispis (redVal); Serial.print (" /"); Serijski.ispis (grnVal); Serial.print (" /"); Serial.println (bluVal); } DEBUG += 1; }} // Ažuriranje trenutnih vrijednosti za sljedeću petlju prevR = redVal; prevG = grnVal; prevB = bluVal; odgoda (zadržavanje); // Pauziraj za opcionalno 'čekanje' milisekundi prije nastavka petlje}

Korak 2: Omotajte drvo

Omotavanje stabla
Omotavanje stabla
Omotavanje stabla
Omotavanje stabla
Omotavanje stabla
Omotavanje stabla
Omotavanje stabla
Omotavanje stabla

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 zvijezdu na vrhu
Ne zaboravite zvijezdu na vrhu
Ne zaboravite zvijezdu na vrhu
Ne zaboravite zvijezdu na vrhu
Ne zaboravite zvijezdu na vrhu
Ne zaboravite zvijezdu na vrhu
Ne zaboravite zvijezdu na vrhu
Ne zaboravite zvijezdu na vrhu

Za zvijezdu sam upotrijebio par čipova od 10 W kako bih privukao pozornost. Lemio sam ih na bakreni lim kao hladnjak. Mogao sam upotrijebiti više trake budući da je ostalo malo.

Korak 4: Isprobajte

Image
Image

U prvom pokušaju brzina je bila prebrza …

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

Preporučeni: