Turinys:

LED spiralinis medis: 4 žingsniai (su paveikslėliais)
LED spiralinis medis: 4 žingsniai (su paveikslėliais)

Video: LED spiralinis medis: 4 žingsniai (su paveikslėliais)

Video: LED spiralinis medis: 4 žingsniai (su paveikslėliais)
Video: Mano darbas – stebėti mišką ir čia vyksta kažkas keisto. 2024, Liepa
Anonim
LED spiralinis medis
LED spiralinis medis
LED spiralinis medis
LED spiralinis medis
LED spiralinis medis
LED spiralinis medis

Man patinka visų rūšių LED juostos. Aš su jais padariau gražią vaivorykštės šviesą. Net ir tie, kurie nėra adresuojami, yra naudingi. Aš padariau ryškų lauko skėčio lauko žibintą, pritvirtindamas juos prie skėtinių šonkaulių, todėl, sprogus spiraliniam medžiui, aš nusprendžiau apvynioti aplink jį ilgio šviesos diodų juostą.

1 žingsnis: valdiklis

Valdiklis
Valdiklis
Valdiklis
Valdiklis
Valdiklis
Valdiklis

Aš nusprendžiau naudoti adresus neturinčius RGB diodus. Tai reiškia, kad galiu turėti užprogramuotą efektą, tačiau visi šviesos diodai vienu metu keičia spalvą. Tai taip pat reiškia, kad reikės valdiklio. Aš galėjau naudoti „arduino uno“ir atlikti pradinius bandymus naudodami RGB skydą, bet galiausiai naudoju pasirinktinę vieną plokštę su pliku „Atmega328“lustu. Tiesiog reikėjo pakeisti tikslinį programuotoją ir tiesiogiai užprogramuoti lustą.

Aš turėjau daug šių plokščių iš kitų lempų projektų. Vietoj to naudokitės pigiu įterptu valdikliu, kaip tai dariau ant savo skėčio.

Galų gale aš panaudojau lėtą kryžminio demonstravimo demonstraciją kaip medžio pagrindą.

/** Kryžminimo 3 šviesos diodų, raudonų, žalių ir mėlynų (RGB) kodas jie išblėsta * * SPALVOS APRAŠYMAS: * Spalva yra tik trijų procentų masyvas, 0–100, * valdantis raudonus, žalius ir mėlynus šviesos diodus * * Raudonas yra raudonas šviesos diodas, visas mėlynas ir žalias * int raudona = {100, 0, 0} * Blyškiai balta yra visi trys šviesos diodai, esant 30% * int dimWhite = {30, 30, 30} * ir tt * * Kai kurios įprastos spalvos pateikiamos žemiau arba sukurkite patys * * SĄRAŠAS UŽSAKYMAS: * Pagrindinėje programos dalyje turite išvardyti tvarką *, kurioje norite rodyti spalvas, pvz. * crossFade (raudona); * crossFade (žalia); * crossFade (mėlyna); * * Tos spalvos bus rodomos tokia tvarka, išnyks iš * vienos spalvos ir į kitą * * Be to, yra 5 pasirenkami nustatymai, kuriuos galite reguliuoti: * 1. Pradinė spalva nustatyta į juodą (taigi pirmoji spalva išnyks in), bet * galite nustatyti pradinę bet kokios kitos spalvos spalvą * 2. Vidinė kilpa veikia 1020 kartų; „Wait“kintamasis * nustato apytikslę vieno kryžminimo trukmę. Teoriškai * „laukimas“10 ms turėtų padaryti ~ 10 sekundžių kryžminį išnykimą. * Praktikoje kitos funkcijos, kurias kodas atlieka lėtai, * iki mano lentos iki ~ 11 sekundžių. YMMV. * 3. Jei „pakartojimas“yra nustatytas į 0, programa tęsis neribotą laiką. * jei jis nustatytas kaip skaičius, jis pakartos tą skaičių kartų, * tada sustabdys paskutinę sekos spalvą. (Nustatykite „return“į 1, * ir paskutinę spalvą padarykite juodą, jei norite, kad ji išnyktų pabaigoje.) * 4. Yra pasirenkamas „hold“kintamasis, kuris įterpia * programą „hold“milisekundėms, kai spalva baigta, * bet prieš prasidedant kitai spalvai. * 5. Jei norite, kad derinimo išvestis būtų * siunčiama į nuoseklųjį monitorių, nustatykite DEBUG vėliavą į 1. * * Programos vidiniai elementai nėra sudėtingi, tačiau jie yra šiek tiek nerimastingi - vidinė veikla paaiškinta * žemiau pagrindinės kilpos. * * 2007 m. Balandžio mėn., Clay Shirky *

/ Išvestis

int grnPin = 9; // Žalia šviesos diodas, prijungtas prie skaitmeninio kaiščio 10 int redPin = 10; // Raudonas šviesos diodas, prijungtas prie skaitmeninio kaiščio 9 int bluPin = 11; // Mėlynas šviesos diodas, prijungtas prie skaitmeninio kaiščio 11

// Spalvų masyvai

int juoda [3] = {0, 0, 0}; int balta [3] = {100, 100, 100}; int raudona [3] = {100, 0, 0}; int žalia [3] = {0, 100, 0}; int mėlyna [3] = {0, 0, 100}; int geltona [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // ir tt

// Nustatykite pradinę spalvą

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

int laukti = 3; // 10ms vidinis crossFade delay; padidinti, kad lėčiau bluktų

int palaikymas = 0; // Pasirenkamas palaikymas, kai spalva baigta, prieš kitą kryžiųFade int DEBUG = 0; // DEBUG skaitiklis; jei nustatyta į 1, įrašys reikšmes atgal per serijinį int loopCount = 60; // Kaip dažnai turėtų pranešti DEBUG? int pakartojimas = 0; // Kiek kartų turėtume kilpoti prieš sustodami? (0 be sustojimo) int j = 0; // Kartojimo ciklo skaitiklis

// Inicijuoti spalvų kintamuosius

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

// Nustatykite LED išėjimus

void setup () {pinMode (redPin, OUTPUT); // nustato kaiščius kaip išvesties pinMode (grnPin, OUTPUT); pinMode („bluPin“, OUTPUT);

if (DEBUG) {// Jei norime matyti derinimo vertes …

Serial.begin (9600); //… nustatyti serijos išvestį}}

// Pagrindinė programa: išvardykite kryžminimo tvarką

void loop () {crossFade (raudona); crossFade (žalia); crossFade (mėlyna); crossFade (geltona);

jei (kartoti) {// Ar mes cikluojame ribotą skaičių kartų?

j += 1; if (j> = pakartoti) {// Ar mes jau ten? išėjimas (j); // Jei taip, sustok. }}}

/* Žemiau ši eilutė yra matematika - NETURĖTŲ TAI PAKEISTI PAGRINDŲ

* * Programa veikia taip: * Įsivaizduokite kryžminį užtemimą, kuris perkelia raudoną šviesos diodą nuo 0 iki 10, * žalią nuo 0 iki 5 ir mėlyną nuo 10 iki 7, atlikdamas * dešimt žingsnių. * Norėtume suskaičiuoti 10 žingsnių ir padidinti arba * sumažinti spalvų vertes tolygiai pakopomis. * Įsivaizduokite, kad + reiškia vertės padidinimą 1, o a - * sumažina. Mūsų 10 žingsnių išblukimas atrodytų taip: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + + + * G + + + + + * B - - - * * Raudona pakyla nuo Nuo 0 iki 10 per dešimt žingsnių, žalia nuo * 0-5 per 5 žingsnius, o mėlyna spalva nukrenta nuo 10 iki 7 trijų žingsnių. * * Tikrojoje programoje spalvų procentas konvertuojamas į * 0–255 reikšmes ir yra 1020 žingsnių (255 * 4). * * Norėdami išsiaiškinti, koks didelis žingsnis turėtų būti tarp vienos iš LED reikšmių aukštyn arba žemyn, pažymime calcStep (), * kuris apskaičiuoja absoliutų atotrūkį tarp pradžios ir pabaigos verčių, * ir tada padalija tą atotrūkį iš 1020, kad nustatytų žingsnio * dydį tarp vertės koregavimų. */

int calcStep (int prevValue, int endValue) {

int žingsnis = endValue - prevValue; // Koks bendras atotrūkis? if (step) {// Jei jo nulis, žingsnis = 1020/step; // padalinti iš 1020} return step; }

/* Kita funkcija yra calcVal. Kai kilpos vertė, i, * pasiekia žingsnio dydį, tinkamą vienai iš * spalvų, padidina arba sumažina tos spalvos reikšmę 1 *. (R, G ir B apskaičiuojami atskirai.) */

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

if ((žingsnis) && i % step == 0) {// Jei žingsnis yra ne nulis ir laikas keisti vertę, if (žingsnis> 0) {// padidinkite vertę, jei žingsnis teigiamas… val += 1; } else if (255 žingsnis) {val = 255; } else if (val <0) {val = 0; } return val; }

/* crossFade () konvertuoja procentines spalvas į a

* Diapazonas nuo 0 iki 255, tada ciklas 1020 kartų, tikrinant, ar * kiekvieną kartą reikia atnaujinti vertę, tada įrašykite * spalvų reikšmes į teisingus kaiščius. */

void crossFade (int spalva [3]) {

// Konvertuoti į 0-255 int R = (spalva [0] * 255) / 100; int G = (spalva [1] * 255) / 100; int B = (spalva [2] * 255) / 100;

int stepR = apskaičiuoti žingsnį (prevR, R);

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

už (int i = 0; i <= 1020; i ++) {redVal = apskaičiuotiVal (žingsnisR, redVal, i); grnVal = apskaičiuotiVal (stepG, grnVal, i); bluVal = apskaičiuotiVal (žingsnis B, bluVal, i);

analogWrite (redPin, redVal); // Įrašykite esamas reikšmes į LED kaiščius

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

atidėti (laukti); // Sustabdykite „palaukite“milisekundes prieš atnaujindami ciklą

if (DEBUG) {// Jei norime serijinės išvesties, atspausdinkite ją adresu

if (i == 0 arba i % loopCount == 0) {// pradžia ir kiekviena kilpaCount kartus Serial.print ("Loop/RGB: #"); Serijinis atspaudas (i); Serial.print ("|"); Serial.print (redVal); Serial.print (" /"); Serial.print (grnVal); Serial.print (" /"); Serial.println („bluVal“); } DEBUG += 1; }} // Atnaujinti dabartines kitos ciklo reikšmes prevR = redVal; prevG = grnVal; prevB = bluVal; atidėti (sulaikyti); // Pristabdykite pasirinktinai „palaukite“milisekundes prieš atnaujindami ciklą}

2 žingsnis: apvyniokite medį

Apvyniojant medį
Apvyniojant medį
Apvyniojant medį
Apvyniojant medį
Apvyniojant medį
Apvyniojant medį
Apvyniojant medį
Apvyniojant medį

Aš naudoju vandeniui atsparias juosteles, nes jos bus lauke. Jie laikėsi patys, bet aš greitai sekiau vielinius ryšius, kad įsitikinčiau, jog jie lieka vietoje. Paprastas ir lengvas įsilaužimas. Dėl juostos energijos tiekimo galios buvo lengva tiekti maitinimo šaltinį į apačią ir išvesti elektros energiją iš viršaus į žvaigždę.

3 žingsnis: nepamirškite žvaigždės viršuje

Nepamirškite žvaigždės viršuje
Nepamirškite žvaigždės viršuje
Nepamirškite žvaigždės viršuje
Nepamirškite žvaigždės viršuje
Nepamirškite žvaigždės viršuje
Nepamirškite žvaigždės viršuje
Nepamirškite žvaigždės viršuje
Nepamirškite žvaigždės viršuje

Dėl žvaigždės aš panaudojau 10W mikroschemų porą, kad atkreipčiau dėmesį. Lituodavau juos prie vario lakšto kaip radiatorių. Galėjau naudoti daugiau juostelių, nes liko šiek tiek.

4 žingsnis: Išbandykite

Image
Image

Pirmasis bandymas buvo per greitas …

Kai nusiraminau, atrodė gana gerai.

Rekomenduojamas: