Sisällysluettelo:

LED -kierrepuu: 4 vaihetta (kuvilla)
LED -kierrepuu: 4 vaihetta (kuvilla)

Video: LED -kierrepuu: 4 vaihetta (kuvilla)

Video: LED -kierrepuu: 4 vaihetta (kuvilla)
Video: Электрика в квартире своими руками. Финал. Переделка хрущевки от А до Я. #11 2024, Heinäkuu
Anonim
LED -spiraalipuu
LED -spiraalipuu
LED -spiraalipuu
LED -spiraalipuu
LED -spiraalipuu
LED -spiraalipuu

Rakastan kaikenlaisia LED -nauhoja. Tein mukavan sateenkaaren valon heidän kanssaan. Jopa osoitteettomat ovat hyödyllisiä. Olen tehnyt kirkkaan markkinoiden sateenvarjo -ulkovalaistuksen kiinnittämällä ne unbrella -kylkiluisiin, joten kun kierrepuuni puhalsi ulos, päätin kietoa sen ympärille pitkän led -nauhan.

Vaihe 1: Ohjain

Ohjain
Ohjain
Ohjain
Ohjain
Ohjain
Ohjain

Päätin käyttää osoitteettomia RGB-ledejä. Tämä tarkoittaa, että minulla voi olla ohjelmoitu vaikutus, mutta kaikki ledit vaihtavat väriä samanaikaisesti. Tämä tarkoittaa myös sitä, että ohjainta tarvitaan. Olisin voinut käyttää arduino unoa ja tehdä ensimmäiset testit RGB -suojalla, mutta päädyin käyttämään mukautettua yksittäistä levyä paljaalla Atmega328 -sirulla. Piti vain vaihtaa ohjelmoija ja ohjelmoida siru suoraan.

Minulla oli paljon näitä levyjä jäljellä muista lamppuhankkeista. Voit vapaasti käyttää halpaa sisäänrakennettua esiohjelmoitua ohjainta kuten sateenvarjossani.

Päädyin käyttämään hidasta crossfade -demoa puun pohjana.

/** Koodin häivytys 3 LEDiä, punainen, vihreä ja sininen (RGB) * Häivytysten luomiseksi sinun on tehtävä kaksi asiaa: * 1. Kuvaile näytettävät värit * 2. Listaa haluamasi järjestys Ne haalistuvat punainen = {100, 0, 0} * himmeä valkoinen on kaikki kolme LEDiä 30% * int dimWhite = {30, 30, 30} * jne. * * Alla on joitakin yleisimpiä värejä tai tee oma * * TILAUS: * Ohjelman pääosassa sinun on lueteltava järjestys *, jossa haluat värien esiintyvän, esim. * crossFade (punainen); * crossFade (vihreä); * crossFade (sininen); * * Nämä värit näkyvät tässä järjestyksessä ja häviävät * yhdestä väristä seuraavaan * * Lisäksi on 5 valinnaista asetusta, joita voit säätää: * 1. Alkuperäinen väri on asetettu mustaksi (joten ensimmäinen väri haalistuu) in), mutta * voit asettaa alkuväriksi minkä tahansa muun värin * 2. Sisäinen silmukka kestää 1020 vuorovaikutusta; odotusmuuttuja * asettaa yksittäisen ristikytkimen likimääräisen keston. Teoriassa * 10 ms: n "odottamisen" pitäisi tehdä ~ 10 sekunnin crossFade. * Käytännössä muut toiminnot, joita koodi suorittaa hitaasti, tämä * alas ~ 11 sekunniksi. YMMV. * 3. Jos 'toista' on asetettu arvoon 0, ohjelma toistaa silmukan loputtomiin. * jos se on asetettu numeroksi, se toistaa silmukan sen monta kertaa, * pysähtyy sitten sarjan viimeiseen väriin. (Aseta "return" arvoon 1, * ja tee viimeinen väri mustaksi, jos haluat sen haalistuvan lopussa.) * 4. On valinnainen "hold" -muuttuja, joka liittää * ohjelman "hold" millisekunteihin, kun väri on valmis, * mutta ennen seuraavan värin alkamista. * 5. Aseta DEBUG -lippu arvoon 1, jos haluat, että virheenkorjauslähtö * lähetetään sarjamonitorille. * * Ohjelman sisäosat eivät ole monimutkaisia, mutta ne * ovat hieman hankalia - sisäinen toiminta selitetään * pääsilmukan alla. * * Huhtikuu 2007, Clay Shirky *

/ Lähtö

int grnPin = 9; // Vihreä LED, kytketty digitaaliseen nastaan 10 int redPin = 10; // Punainen LED, kytketty digitaaliseen nastaan 9 int bluPin = 11; // Sininen LED, kytketty digitaaliseen nastaan 11

// Väritaulukot

int musta [3] = {0, 0, 0}; int valkoinen [3] = {100, 100, 100}; int punainen [3] = {100, 0, 0}; int vihreä [3] = {0, 100, 0}; int sininen [3] = {0, 0, 100}; int keltainen [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // jne.

// Aseta alkuperäinen väri

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

int odota = 3; // 10 ms sisäinen crossFade delay; lisäys hitaammalle häipymiselle

int pito = 0; // Valinnainen pito, kun väri on valmis, ennen seuraavaa crossFade int DEBUG = 0; // DEBUG -laskuri; jos asetettu arvoon 1, kirjoittaa arvot takaisin sarjaliikenteen int loopCount = 60; // Kuinka usein DEBUG -raportin pitäisi tehdä? int toisto = 0; // Kuinka monta kertaa meidän pitäisi silmukoida ennen pysähtymistä? (0 ei pysähdystä) int j = 0; // Silmukkalaskuri toistoa varten

// Alusta värimuuttujat

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

// Määritä LED -lähdöt

void setup () {pinMode (redPin, OUTPUT); // asettaa nastat lähtö pinMode (grnPin, OUTPUT); pinMode (bluPin, OUTPUT);

if (DEBUG) {// Jos haluamme nähdä virheenkorjauksen arvot…

Sarja.alku (9600); //… määritä sarjalähtö}}

// Pääohjelma: luettele ristiviivojen järjestys

void loop () {crossFade (punainen); crossFade (vihreä); crossFade (sininen); crossFade (keltainen);

if (toista) {// Silmukataanko äärellinen määrä kertoja?

j += 1; jos (j> = toista) {// Olemmeko jo perillä? poistuminen (j); // Jos on, lopeta. }}}

/* TÄMÄN Rivin alla on matematiikka - sinun ei tarvitse muuttaa tätä perusasioihin

* * Ohjelma toimii seuraavasti: * Kuvittele crossfade, joka siirtää punaisen LEDin 0-10, * vihreän 0-5 ja sinisen 10-7: een * kymmenessä vaiheessa. * Haluamme laskea 10 askelta ja lisätä tai vähentää väriarvoja tasaisesti. * Kuvittele, että + merkitsee arvon nostamista yhdellä ja a - * tarkoittaa sen alentamista. Kymmenen askeleen häipymme näyttäisi tältä: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + + + * G + + + + + + * B - - - * * Punainen nousee 0–10 kymmenessä vaiheessa, vihreä * 0–5 viidessä vaiheessa ja sininen laskee 10–7 kolmessa vaiheessa. * * Todellisessa ohjelmassa väriprosentit muunnetaan * 0-255 arvoiksi, ja vaiheita on 1020 (255 * 4). * * Selvittääksesi kuinka suuri askel yhden LED-arvon yhden ylös- tai * alas-rastin välillä pitäisi olla, kutsumme calcStep (), * joka laskee aloitus- ja loppuarvojen välisen absoluuttisen aukon, ja sitten jakaa tämän aukon 1020: lla määrittämään askeleen * arvon arvon muutosten välillä. */

int calcStep (int prevValue, int endValue) {

int askel = endValue - prevValue; // Mikä on yleinen ero? if (vaihe) {// Jos se ei ole nolla, askel = 1020/askel; // jaa 1020} paluuvaihe; }

/* Seuraava funktio on calcVal. Kun silmukan arvo, i, * saavuttaa jollekin * väristä sopivan askelkoon, lisää tai pienentää kyseisen värin arvoa yhdellä. * (R, G ja B lasketaan erikseen.) */

int calcVal (int askel, int val, int i) {

if ((vaihe) && i % step == 0) {// Jos vaihe ei ole nolla ja sen aika muuttaa arvoa, if (vaihe> 0) {// lisää arvoa, jos askel on positiivinen… val += 1; } muu jos (vaihe 255) {val = 255; } muu jos (val <0) {val = 0; } paluu val; }

/* crossFade () muuntaa prosenttiluvut väreiksi a

* 0-255, sitten silmukat 1020 kertaa ja tarkistavat, onko * arvo päivitettävä joka kerta, ja kirjoittamalla sitten * väriarvot oikeisiin nastoihin. */

void crossFade (int väri [3]) {

// Muunna 0-255 int R = (väri [0] * 255) / 100; int G = (väri [1] * 255) / 100; int B = (väri [2] * 255) / 100;

int stepR = laske vaihe (prevR, R);

int stepG = calcStep (prevG, G); int stepB = calcStep (prevB, B);

for (int i = 0; i <= 1020; i ++) {redVal = laskeVal (vaiheR, redVal, i); grnVal = laskeVal (stepG, grnVal, i); bluVal = laskeVal (vaiheB, bluVal, i);

analogWrite (redPin, redVal); // Kirjoita nykyiset arvot LED -nastoihin

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

viive (odota); // Tauko odottamaan millisekuntia ennen silmukan jatkamista

if (DEBUG) {// Jos haluamme sarjalähdön, tulosta se

if (i == 0 tai i % loopCount == 0) {// alku ja jokainen loopCount kertaa Serial.print ("Loop/RGB: #"); Sarjanjälki (i); Serial.print ("|"); Serial.print (redVal); Serial.print (" /"); Serial.print (grnVal); Serial.print (" /"); Sarja.println (bluVal); } DEBUG += 1; }} // Päivitä seuraavan silmukan nykyiset arvot prevR = redVal; prevG = grnVal; prevB = bluVal; viive (pito); // Tauko valinnaiselle odotus millisekunnille ennen silmukan jatkamista}

Vaihe 2: Puun kääriminen

Puun kääriminen
Puun kääriminen
Puun kääriminen
Puun kääriminen
Puun kääriminen
Puun kääriminen
Puun kääriminen
Puun kääriminen

Käytin vedenpitäviä nauhoja, koska ne ovat ulkona. He pysyivät kiinni itsestään, mutta seurasin nopeasti langasideitä varmistaakseni, että ne pysyvät paikallaan. Yksinkertainen ja helppo hakata. Nauhan läpivirtauskyky helpotti virtalähteen syöttämistä pohjaan ja virran saamista ylhäältä tähdelle.

Vaihe 3: Älä unohda päätä

Älä unohda tähtiä ylhäällä
Älä unohda tähtiä ylhäällä
Älä unohda tähtiä ylhäällä
Älä unohda tähtiä ylhäällä
Älä unohda tähtiä ylhäällä
Älä unohda tähtiä ylhäällä
Älä unohda tähtiä ylhäällä
Älä unohda tähtiä ylhäällä

Tähtiä varten käytin paria 10 W: n siruja saadakseni huomiota. Juotin ne kuparilevyyn jäähdytyselementiksi. Olisin voinut käyttää enemmän nauhaa, koska sitä oli vähän jäljellä.

Vaihe 4: Kokeile sitä

Image
Image

Ensimmäisellä yrityksellä nopeus oli liian nopea….

Kun olin rauhoittunut, se näytti aika hyvältä.

Suositeltava: