Taula de continguts:

Arbre espiral LED: 4 passos (amb imatges)
Arbre espiral LED: 4 passos (amb imatges)

Vídeo: Arbre espiral LED: 4 passos (amb imatges)

Vídeo: Arbre espiral LED: 4 passos (amb imatges)
Vídeo: Аномально вкусно‼️ ЧЕХОСЛОВАЦКИЙ СУП ИЗ ФАРША. Жена Липована в шоке. 2024, Juliol
Anonim
Arbre espiral LED
Arbre espiral LED
Arbre espiral LED
Arbre espiral LED
Arbre espiral LED
Arbre espiral LED

M'encanten tot tipus de tires LED. Vaig fer una bona llum arc de Sant Martí amb ells. Fins i tot els no adreçables són útils. He creat una llum exterior de paraigües de mercat lligant-les a les costelles del parabrisa, de manera que quan va esclatar el meu arbre en espiral vaig decidir embolicar-hi una tira de led.

Pas 1: controlador

Controlador
Controlador
Controlador
Controlador
Controlador
Controlador

Vaig decidir utilitzar leds RGB no adreçables. Això significa que puc tenir un efecte programat, però tots els leds canvien de color simultàniament. Això també significa que es necessitarà un controlador. Podria haver utilitzat un arduino uno i fer-ho per fer les proves inicials amb un escut RGB, però vaig acabar fent servir una sola placa personalitzada amb un xip Atmega328 nu. Només calia canviar de programador de destinació i programar el xip directament.

Em quedaven moltes d'aquestes taules d'altres projectes de làmpades. Si us plau, no dubteu a utilitzar un controlador preprogramat en línia, com el que he fet al paraigua.

Vaig acabar fent servir una demostració de crossfade lent com a base de l'arbre.

/ ** Codi per a la creuada de 3 LEDs, vermell, verd i blau (RGB) * Per crear fades, heu de fer dues coses: * 1. Descriviu els colors que voleu que es mostrin * 2. Enumereu l'ordre que desitgeu per descolorir * * DESCRIPCIÓ DEL COLOR: * Un color és només una matriu de tres percentatges, 0-100, * controlant els LED vermells, verds i blaus * * El vermell és el LED vermell complet, blau i verd apagat * int vermell = {100, 0, 0} * El blanc atenuat són els tres LED al 30% * int dimWhite = {30, 30, 30} * etc. * * A continuació, es proporcionen alguns colors habituals o feu el vostre propi * * LLISTAT DE COMANDA: * A la part principal del programa, heu d’enumerar l’ordre * en què voleu que apareguin els colors, per exemple * crossFade (vermell); * crossFade (verd); * crossFade (blau); * * Aquests colors apareixeran en aquest ordre, desapareixent d'un * color i passant al següent * * A més, hi ha 5 opcions opcionals que podeu ajustar: * 1. El color inicial es defineix en negre (de manera que el primer color s'esvaeix) a), però * podeu establir que el color inicial sigui qualsevol altre color * 2. El bucle intern funciona per 1020 interaccions; la variable "espera" * estableix la durada aproximada d'un únic esvaïment creuat. En teoria, * una "espera" de 10 ms hauria de fer un crossFade de ~ 10 segons. A la * pràctica, les altres funcions que realitza el codi fan que aquest * baixi fins a ~ 11 segons al meu tauler. YMMV. * 3. Si "Repeteix" s'estableix a 0, el programa farà un bucle indefinidament. * si s'estableix en un número, repetirà el nombre de vegades, * i s'aturarà en l'últim color de la seqüència. (Establiu "retorna" a 1, * i feu l'últim color negre si voleu que s'esvaeixi al final.) * 4. Hi ha una variable "retenir" opcional, que enganxa el programa * per "retenir" mil·lisegons quan un color està complet, * però abans que comenci el color següent. * 5. Establiu el senyal DEBUG a 1 si voleu que s'enviï la sortida de depuració al monitor sèrie. * * Les funcions internes del programa no són complicades, però * són una mica exigents: el funcionament intern s’explica * a sota del bucle principal. * * Abril de 2007, Clay Shirky *

/ Sortida

int grnPin = 9; // LED verd, connectat al pin digital 10 int redPin = 10; // LED vermell, connectat al pin digital 9 int bluPin = 11; // LED blau, connectat al pin digital 11

// Matrius de colors

int negre [3] = {0, 0, 0}; int blanc [3] = {100, 100, 100}; int red [3] = {100, 0, 0}; int green [3] = {0, 100, 0}; blau int [3] = {0, 0, 100}; int groc [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // etc.

// Estableix el color inicial

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

int espera = 3; // 10 ms de retard creuament intern; augmenta per esvaits més lents

int hold = 0; // Mantenir opcional quan es completa un color, abans del següent crossFade int DEBUG = 0; // comptador DEBUG; si s'estableix a 1, tornarà a escriure els valors mitjançant la sèrie int loopCount = 60; // Amb quina freqüència s’ha d’informar DEBUG? int repeteix = 0; // Quantes vegades hauríem de fer un bucle abans d’aturar-nos? (0 per a cap parada) int j = 0; // Comptador de bucles per repetir

// Inicialitzar variables de color

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

// Configureu les sortides LED

void setup () {pinMode (redPin, OUTPUT); // estableix els pins com a sortida pinMode (grnPin, OUTPUT); pinMode (bluPin, OUTPUT);

if (DEBUG) {// Si volem veure valors per a la depuració …

Serial.begin (9600); // … configureu la sortida de sèrie}}

// Programa principal: llista de l'ordre dels esvaits creuats

bucle buit () {crossFade (vermell); crossFade (verd); crossFade (blau); crossFade (groc);

if (repetir) {// Fem un bucle un nombre finit de vegades?

j + = 1; if (j> = repetir) {// Ja hi som? sortida (j); // Si és així, atureu-vos. }}}

/ * A CONTINUACIÓ AQUESTA LÍNIA ÉS LA MATÈNIA: NO HI HAURIA DE CANVIAR-HO PER ELS BÀSICS

* * El programa funciona així: * Imagineu un atenuament creuat que mou el LED vermell de 0-10, * el verd de 0-5 i el blau de 10 a 7, en * deu passos. * Voldríem comptar els 10 passos i augmentar o * disminuir els valors de color en increments de gradualitat. * Imagineu que un + indica augmentar un valor en 1, i un - * equival a baixar-lo. El nostre fade de 10 passos seria el següent: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + + * G + + + + + + * B - - - * * El vermell surt de De 0 a 10 en deu passos, el verd de * 0-5 en 5 passos i el blau cau de 10 a 7 en tres passos. * * Al programa real, els percentatges de color es converteixen en valors * 0-255 i hi ha 1020 passos (255 * 4). * * Per esbrinar el grau de pas que hi hauria d’haver entre una marca amunt o avall d’un dels valors del LED, anomenem calculateStep (), * que calcula l’espai absolut entre els valors inicial i final, * i després divideix aquest buit per 1020 per determinar la mida del pas * entre els ajustos del valor. * /

int calculateStep (intValor previ, intValor final) {

int step = EndValue - PreValor; // Quina és la bretxa general? if (pas) {// Si no és nul, pas = 1020 / pas; // divideix per 1020} pas de retorn; }

/ * La següent funció és calculateVal. Quan el valor del bucle, i, * arriba a la mida de pas adequada per a un dels * colors, augmenta o disminueix el valor d’aquest color en 1. * (R, G i B es calculen cadascun per separat.) * /

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

if ((pas) && i% step == 0) {// Si el pas és diferent de zero i és hora de canviar un valor, if (pas> 0) {// incrementar el valor si el pas és positiu … val + = 1; } else if (pas 255) {val = 255; } else if (val <0) {val = 0; } retorn val; }

/ * crossFade () converteix el percentatge de colors a

* Interval de 0-255, després fa 1020 vegades, comprova si * cal actualitzar el valor cada vegada i escrivint * els valors de color als pins correctes. * /

void crossFade (color int [3]) {

// Converteix a 0-255 int R = (color [0] * 255) / 100; int G = (color [1] * 255) / 100; int B = (color [2] * 255) / 100;

int stepR = calculateStep (prevR, R);

int stepG = calculateStep (prevG, G); int pas B = calculateStep (prevB, B);

for (int i = 0; i <= 1020; i ++) {redVal = calculateVal (stepR, redVal, i); grnVal = calculateVal (stepG, grnVal, i); bluVal = calculateVal (stepB, bluVal, i);

analogWrite (redPin, redVal); // Escriviu els valors actuals als pins LED

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

retard (esperar); // Pausa durant "milersegons" d'espera abans de reprendre el bucle

if (DEBUG) {// Si volem una sortida en sèrie, imprimiu-la al fitxer

if (i == 0 o i% loopCount == 0) {// inici, i cada loopCount vegades Serial.print ("bucle / RGB: #"); Serial.print (i); Serial.print ("|"); Serial.print (redVal); Serial.print ("/"); Serial.print (grnVal); Serial.print ("/"); Serial.println (bluVal); } DEBUG + = 1; }} // Actualitza els valors actuals del següent bucle prevR = redVal; prevG = grnVal; prevB = bluVal; retard (retenció); // Posa en pausa els mil·lisegons "espera" opcionals abans de reprendre el bucle}

Pas 2: embolicar l'arbre

Embolicant l'arbre
Embolicant l'arbre
Embolicant l'arbre
Embolicant l'arbre
Embolicant l'arbre
Embolicant l'arbre
Embolicant l'arbre
Embolicant l'arbre

He utilitzat tires impermeables, ja que seran a l’aire lliure. Es van quedar sols, però vaig seguir ràpidament amb llaços per assegurar-me que es quedessin. Hack fàcil i senzill. La capacitat d’alimentació de la tira va facilitar l’alimentació de la font d’energia cap a la part inferior i la sortida d’energia cap a l’estrella.

Pas 3: no oblideu l'estrella a la part superior

No oblideu l’estrella a la part superior
No oblideu l’estrella a la part superior
No oblideu l’estrella a la part superior
No oblideu l’estrella a la part superior
No oblideu l’estrella a la part superior
No oblideu l’estrella a la part superior
No oblideu l’estrella a la part superior
No oblideu l’estrella a la part superior

Per a l'estrella he utilitzat un parell de xips de 10W per cridar l'atenció. Els vaig soldar a una làmina de coure com a dissipador de calor. Podria haver utilitzat més tires ja que en sobrava una mica.

Pas 4: provar-ho

Image
Image

El primer intent va ser massa ràpid …

Un cop el vaig calmar va quedar força bé.

Recomanat: