Spisu treści:
- Krok 1: Kontroler
- Krok 2: Zawijanie drzewa
- Krok 3: Nie zapomnij o gwieździe na górze
- Krok 4: Wypróbowanie
Wideo: Drzewo spiralne LED: 4 kroki (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:28
Uwielbiam wszelkiego rodzaju taśmy LED. Zrobiłem z nich ładne tęczowe światło. Nawet te nieadresowalne są przydatne. Zrobiłem jasną zewnętrzną lampkę parasolową, mocując je do żeber unbrella, więc kiedy moje spiralne drzewo wybuchło, zdecydowałem się owinąć wokół niego pasek ledowy.
Krok 1: Kontroler
Postanowiłem zastosować nieadresowalne diody RGB. Oznacza to, że mogę mieć zaprogramowany efekt, ale wszystkie diody zmieniają kolor jednocześnie. Oznacza to również, że potrzebny będzie kontroler. Mogłem użyć arduino uno i zrobić wstępne testy przy użyciu osłony RGB, ale skończyło się na użyciu niestandardowej pojedynczej płyty z gołym chipem Atmega328. Wystarczyło przełączyć programator docelowy i bezpośrednio zaprogramować układ.
Miałem mnóstwo tych desek, które zostały z innych projektów lamp. Zamiast tego możesz użyć taniego, wstępnie zaprogramowanego kontrolera wbudowanego, tak jak zrobiłem to na moim parasolu.
Skończyło się na użyciu demo powolnego przejścia jako podstawy dla drzewa.
/** Kod dla cross-fadingu 3 diody LED, czerwony, zielony i niebieski (RGB) * Aby stworzyć zanikanie, musisz zrobić dwie rzeczy: * 1. Opisz kolory, które chcesz wyświetlić * 2. Wymień kolejność, w jakiej chcesz ich zanikanie * * OPIS KOLORU: * Kolor to tylko tablica trzech wartości procentowych, 0-100, * kontrolowanie czerwonej, zielonej i niebieskiej diody LED * * Czerwony to czerwona dioda w pełni, niebieska i zielona wyłączona * int czerwony = { 100, 0, 0 } * Przyciemniony biały to wszystkie trzy diody LED na poziomie 30% * int dimWhite = {30, 30, 30} * itd. * * Niektóre popularne kolory są podane poniżej lub stwórz własne * * WYKAZ ZAMÓWIENIE: * W głównej części programu należy podać kolejność * w jakiej kolory mają się pojawiać np. * crossFade (czerwony); * crossFade (zielony); * crossFade (niebieski); * * Te kolory pojawią się w tej kolejności, znikając z * jednego koloru do następnego * * Dodatkowo istnieje 5 opcjonalnych ustawień, które możesz dostosować: * 1. Początkowy kolor jest ustawiony na czarny (więc pierwszy kolor zanika in), ale * możesz ustawić początkowy kolor na dowolny inny kolor * 2. Wewnętrzna pętla działa na 1020 interakcjach; zmienna 'wait' * określa przybliżony czas trwania pojedynczego przejścia. Teoretycznie * 'czekanie' 10 ms powinno spowodować crossFade ~10 sekund. W praktyce * inne funkcje wykonywane przez kod spowalniają * do ~11 sekund na mojej tablicy. YMMV. * 3. Jeśli 'repeat' jest ustawione na 0, program będzie zapętlał się w nieskończoność. * jeśli jest ustawiony na liczbę, zapętli tę liczbę razy, * następnie zatrzyma się na ostatnim kolorze w sekwencji. (Ustaw 'return' na 1, * i ustaw ostatni kolor na czarny, jeśli chcesz, aby wyblakł na końcu.) * 4. Istnieje opcjonalna zmienna 'hold', która zatrzymuje * program na milisekundy 'hold', gdy kolor jest kompletny, * ale przed rozpoczęciem następnego koloru. * 5. Ustaw flagę DEBUG na 1, jeśli chcesz, aby wyjście debugowania * było wysyłane do monitora szeregowego. * * Wewnętrzne elementy programu nie są skomplikowane, ale * są trochę wybredne -- wewnętrzne działanie programu jest wyjaśnione * poniżej głównej pętli. * * Kwiecień 2007, Clay Shirky *
/ Wyjście
int grnPin = 9; // Zielona dioda LED podłączona do cyfrowego pinu 10 int redPin = 10; // Czerwona dioda LED, podłączona do cyfrowego pinu 9 int bluPin = 11; // Niebieska dioda LED, podłączona do cyfrowego pinu 11
// Tablice kolorów
int czarny [3] = { 0, 0, 0 }; int biały[3] = { 100, 100, 100 }; int czerwony[3] = { 100, 0, 0 }; int zielony[3] = { 0, 100, 0 }; int niebieski [3] = { 0, 0, 100 }; int żółty[3] = { 40, 95, 0 }; int dimWhite[3] = { 30, 30, 30 }; // itd.
// Ustaw początkowy kolor
int redVal = czarny[0]; int grnVal = czarny[1]; int bluVal = czarny[2];
int czekaj = 3; // 10ms wewnętrzne opóźnienie crossFade; wzrost dla wolniejszych zaników
int przytrzymaj = 0; // Opcjonalne wstrzymanie po zakończeniu koloru, przed następnym crossFade int DEBUG = 0; // licznik DEBUGÓW; jeśli ustawione na 1, zapisze wartości z powrotem przez port szeregowy int loopCount = 60; // Jak często należy zgłaszać DEBUG? int powtórz = 0; // Ile razy powinniśmy wykonać pętlę przed zatrzymaniem? (0 oznacza brak zatrzymania) int j = 0; // Licznik pętli do powtórzenia
// Zainicjuj zmienne kolorów
int prevR = redVal; int prevG = grnVal; int prevB = bluVal;
// Skonfiguruj wyjścia LED
void setup() { pinMode(redPin, OUTPUT); // ustawia piny jako wyjście pinMode(grnPin, OUTPUT); pinMode(bluPin, WYJŚCIE);
if (DEBUG) { // Jeśli chcemy zobaczyć wartości do debugowania…
Serial.początek(9600); // …skonfiguruj wyjście szeregowe } }
// Program główny: podaj kolejność przenikania
void loop() { crossFade(czerwony); crossFade(zielony); crossFade (niebieski); crossFade(żółty);
if (repeat) { // Czy wykonujemy pętlę skończoną liczbę razy?
j += 1; if (j >= powtórz) { // Czy już tam jesteśmy? wyjście(j); // Jeśli tak, przestań. } } }
/* PONIŻEJ TEJ LINII ZNAJDUJE SIĘ MATEMATYKA - NIE POWINIEN BYĆ TEGO ZMIENIAĆ ZE WZGLĘDU NA PODSTAWY
* * Program działa w następujący sposób: * Wyobraź sobie przejście, które przesuwa czerwoną diodę LED z 0-10, * zieloną z 0-5, a niebieską z 10 na 7, w * dziesięciu krokach. * Chcielibyśmy policzyć 10 kroków i zwiększyć lub * zmniejszyć wartości kolorów w równych krokach. * Wyobraź sobie, że + oznacza podniesienie wartości o 1, a - * oznacza jej obniżenie. Nasze 10-stopniowe zanikanie wyglądałoby następująco: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + * G + + + + + * B - - - * * Od 0 do 10 w dziesięciu krokach, zielony od * 0-5 w 5 krokach, a niebieski od 10 do 7 w trzech krokach. * * W rzeczywistym programie procenty kolorów są konwertowane na * wartości 0-255 i jest 1020 kroków (255*4). * * Aby dowiedzieć się, jak duży powinien być krok między jednym zaznaczeniem w górę lub * w dół jednej z wartości diod LED, wywołujemy metodę obliczaniaStep(), * która oblicza bezwzględną lukę między wartościami początkowymi i końcowymi, * a następnie dzieli tę lukę przez 1020, aby określić rozmiar kroku * między korektami wartości. */
int obliczKrok(int prevValue, int endValue) {
int step = endValue - prevValue; // Jaka jest ogólna luka? if (krok) { // Jeśli jest niezerowe, krok = 1020/krok; // podziel przez 1020 } return step; }
/* Następna funkcja to obliczWartość. Gdy wartość pętli, i, * osiąga wielkość kroku odpowiednią dla jednego z * kolorów, zwiększa lub zmniejsza wartość tego koloru o 1. * (R, G i B są obliczane osobno.) */
int obliczVal(int step, int val, int i) {
if ((step) && i % step == 0) { // Jeżeli step jest niezerowy i czas na zmianę wartości, if (step > 0) { // zwiększ wartość, jeśli step jest dodatni… val += 1; } else if (etap 255) {val = 255; } else if (val < 0) { val = 0; } return val; }
/* crossFade() konwertuje kolory procentowe na a
* Zakres 0-255, następnie pętla 1020 razy, sprawdzając, czy * wartość musi być aktualizowana za każdym razem, * następnie zapisz wartości kolorów do właściwych pinów. */
void crossFade(int kolor [3]) {
// Konwertuj na 0-255 int R = (color[0] * 255) / 100; int G = (kolor[1] * 255) / 100; int B = (kolor[2] * 255) / 100;
int stepR = obliczKrok(prevR, R);
int stepG = obliczKrok(prevG, G); int stepB = obliczKrok(prevB, B);
for (int i = 0; i <= 1020; i++) { redVal = obliczVal(krokR, redVal, i); grnVal = obliczVal(krokG, grnVal, i); bluVal = oblicz Val(krok B, bluVal, i);
zapis analogowy(redPin, redVal); // Zapisz aktualne wartości do pinów LED
analogWrite(grnPin, grnVal); zapis analogowy(bluPin, bluVal);
opóźnienie (czekaj); // Pauza na „czekaj” milisekundy przed wznowieniem pętli
if (DEBUG) { // Jeśli chcemy uzyskać wyjście szeregowe, wypisz je na
if (i == 0 lub i % loopCount == 0) { // początek i co loopCount razy Serial.print("Loop/RGB: #"); druk.seryjny(i); Serial.print(" | "); Serial.print(redVal); Serial.print(" / "); Serial.print(grnVal); Serial.print(" / "); Serial.println(bluVal); } DEBUGUJ += 1; } } // Aktualizacja bieżących wartości dla następnej pętli prevR = redVal; prevG = grnVal; prevB = bluVal; opóźnienie(przytrzymaj); // Pauza na opcjonalne „czekaj” milisekundy przed wznowieniem pętli }
Krok 2: Zawijanie drzewa
Użyłem wodoodpornych pasków, ponieważ będą na zewnątrz. Trzymały się same, ale szybko podążyłem za drutami, aby upewnić się, że pozostaną na swoim miejscu. Prosty i łatwy hack. Zdolność przepuszczania mocy listwy ułatwiała doprowadzenie zasilania do dołu i doprowadzenie zasilania od góry do gwiazdy.
Krok 3: Nie zapomnij o gwieździe na górze
W przypadku gwiazdy użyłem pary chipów 10W, aby zwrócić na siebie uwagę. Przylutowałem je do blachy miedzianej jako radiator. Mogłem użyć więcej paska, ponieważ trochę zostało.
Krok 4: Wypróbowanie
Pierwsza próba była zbyt szybka….
Kiedy go uspokoiłem, wyglądało to całkiem nieźle.
Zalecana:
Drzewo z drutu RGB-LED: 9 kroków (ze zdjęciami)
Drzewo z drutu RGB-LED: Chcę podzielić się z wami moim drzewem z drutu RGB-LED. Pewnego wieczoru przypomniałem sobie, jak jako dziecko budowałem drzewa z drutu. Obecnie bardzo lubię budować małe projekty elektroniczne z mikrokontrolerami podobnymi do arduino, zwłaszcza z diodami LED. Więc pomyślałem sobie
Cronómetro de Cocina. Drzewo życia: 4 kroki
Cronómetro de Cocina. Drzewo życia: El cronó metro de cocina es una herramienta que le allowe al estudiante realizar varias tareas sin perder la atención de los tiempos de la cocina. Funciona como un cronó metro midiendo intervalos de 10 min, cada lapso de tiempo s
Drzewo RGB LED Maker: 15 kroków (ze zdjęciami)
Drzewo RGB LED Maker: Nasza lokalna przestrzeń producenta sponsorowała drzewo, które będzie wyświetlane na głównej ulicy w grudniu (2018 r.). Podczas naszej burzy mózgów wpadliśmy na pomysł, aby zamiast tradycyjnego ornamentu umieścić na drzewku absurdalną ilość diod LED
DRZEWO LED: 4 kroki
DRZEWO LED: Czy masz jakieś zapasowe diody LED? Masz trochę wolnego czasu i szukasz czegoś do roboty? Dlaczego nie zrobić DRZEWA LED. To świetna zabawa, o ile postępujesz zgodnie z instrukcjami i używasz czystej lutownicy. Rezultatem jest niesamowite dzieło sztuki
Podświetlane drzewo: 3 kroki
Podświetlane drzewo: ta niesamowita rzecz jest czymś, co lubią dzieci, wiem, że jestem dzieckiem. Mój ojciec zawsze zakłada go w Boże Narodzenie, a potem zdejmuje, gdy robi się ciemno tak późno, że nie można go zobaczyć przed 22:00. W każdym razie ta instrukcja pokaże ci, jak mój ojciec