Spisu treści:

Ręcznie wykonana lampa nastrojowa RGB zasilana Arduino: 7 kroków
Ręcznie wykonana lampa nastrojowa RGB zasilana Arduino: 7 kroków

Wideo: Ręcznie wykonana lampa nastrojowa RGB zasilana Arduino: 7 kroków

Wideo: Ręcznie wykonana lampa nastrojowa RGB zasilana Arduino: 7 kroków
Wideo: NOWY HIT z ACTION?! Tanie satelitki RGB 2024, Lipiec
Anonim
Ręcznie wykonana lampa nastrojowa RGB zasilana przez Arduino
Ręcznie wykonana lampa nastrojowa RGB zasilana przez Arduino
Ręcznie wykonana lampa nastrojowa RGB zasilana przez Arduino
Ręcznie wykonana lampa nastrojowa RGB zasilana przez Arduino

Ta instrukcja podzielona jest na 5 części:- Planowanie budowy (Krok 1)- Ręcznie wykonany klosz (Krok 2+3)- Obwód elektroniczny do sterowania diodami LED 3W ze sterownikiem ATmega8 (Krok 4)- Kod (Krok 5)- Jak go zdobyć samodzielny (flashuj bootloader Arduino za pomocą PonyProg i wypal szkic) (krok 6) już wkrótce Vid: Some Impressions

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: Lampa nastrojowa Pic2: Potężna dioda LED 3W

Krok 1: Planowanie budowy:

Planowanie budowy
Planowanie budowy
Planowanie budowy
Planowanie budowy

Uwielbiam tworzyć koncepcję na jednym arkuszu papieru. Na pierwszym arkuszu widzisz kilka wczesnych pomysłów. Wybrałem projekt w prawym dolnym rogu. Druga strona pokazuje szczegóły dotyczące konstrukcji. Pomiary są eksperymentalne jak za każdym razem, ale dla mnie ok;-) Moje przemyślenia na temat sprzętu były następujące: - Czy poradzę sobie z materiałami? - Czy światło będzie świecić przez klosz?- Jaką powinna mieć proporcję?- Ile gałek i garnków będę potrzebować do prostego interfejsu? Moje przemyślenia dotyczące oprogramowania to: Ile różnych funkcji powinna mieć lampa? - Automatyczne zanikanie RGB ze zmienną prędkością - Ręczna regulacja kolorów -Biały z regulowaną jasnością

Krok 2: Ręcznie wykonany odcień

Ręcznie robiony cień
Ręcznie robiony cień
Ręcznie robiony cień
Ręcznie robiony cień
Ręcznie robiony cień
Ręcznie robiony cień

Zbieranie materiałów: Odcień:Znalazłem w sklepie arkusz 30-milimetrowego plastiku o wymiarach 3 stopy x 3 stopy (Zdjęcie 1-3). Wytnij go ostrym nożem. Szroniłem plastik papierem ściernym (Zdjęcie 4-6). zdobądź gładki cylinder skręciłem to wszystko po wywierceniu odpowiednich otworów (rys. 7-8). Zamontuj plastikowe klosze na gwintowanych mosiężnych wspornikach. Wygląda ładnie i jest raczej łatwy do zdobycia i obsługi. Wywierciłem i nagwintowałem otwory, aby pasowały do pręta gwintowanego 1/8 (Pic9-10). Tymczasem zrobiłem radiator, aby schłodzić diody 3W i mieć solidną podstawę. Aby uzyskać nie za dużo cieni z wału, zbudowałem małą klatkę z pręta spawalniczego z nakrętką M8 na górze (Rys.12). Na koniec zmontowałem wszystko razem. Małe śruby i nakrętki były trochę trudne, ale 30 minut później udało mi się to zrobić.

Krok 3: Ręcznie robiony odcień

Ręcznie robiony cień
Ręcznie robiony cień
Ręcznie robiony cień
Ręcznie robiony cień
Ręcznie robiony cień
Ręcznie robiony cień

Podstawa: Krążki zostały wbite w tokarkę, aby była gładka i okrągła. Następnie zabejcowałam ją bejcą do drewna mahoniowego, aby sosna wyglądała dobrze. Co dalej?!? matowy plastik jako klosz, a podświetlenie mikroLED RGB (Pic5). Pokrętła: Przycisk zrobiłem z kawałka mahoniu, a pokrętła z kawałka orzecha.

Krok 4: Obwód elektryczny:

Obwód elektryczny
Obwód elektryczny
Obwód elektryczny
Obwód elektryczny
Obwód elektryczny
Obwód elektryczny

Na pierwszym obrazku widzisz mój schemat. A oto kolejny film:https://de.youtube.com/watch?v=xkiYzQAYf_A&NR=1

Krok 5: Kodeks:

Kod
Kod
Kod
Kod
Kod
Kod

Na zdjęciach widzisz mój proces z Arduino. Najpierw wypróbowałem mój własny ProtoShield, akumulator i kilka rodzajów diod LED. Zacząłem od „Spooky Projects” i „BionicArduino” autorstwa TodEKurt kilka miesięcy temu.https://todbot.com/blog/spookyarduino/Mój kod jest tylko trudne połączenie jego kodu projektu."RGBMoodlight", "RGBPotMixer"i kilka rozszerzeń. Trzy wejścia analogowe i.jedno wejście cyfrowe jako przełącznik trybu (Dzięki Ju. za procedurę przerwania:). LEDy są podłączone do D9, D10 i D11 które obsługują PulseWithModulation. Jeżeli chcesz to mogę opublikować szkic ale to naprawdę gołe połączenie tych dwóch świetnych kodów. Oto mój oryginalny kod lampy. Wygląda trochę niechlujnie,bo to był mój bardzo wczesny etap programowania… Ale jeśli go skopiujesz, powinno działać świetnie. Są dobre opcje, takie jak „PotColorMixer”, „RGBfadingFunction” i przerwanie procedury przełączania trybu./* nejo June2008

Kod do mojego „Moodlamp”, oparty na „dimmingLED” Claya Shirky

*nejo wrzesień 2008

  • Ostateczny kod lampy nastrojowej z przełącznikiem trybu przerwania, analogowym szybkim wybieraniem do zanikania RGB i zmiany kolorów RGB.
  • Funkcja ściemniania działa tylko dla koloru białego

*nejo październik 2008

  • Rozszerzenie dźwięku do lampy nastrojowej:
  • Mikrofon pojemnościowy z małym wzmacniaczem LM368, prostownikiem i filtrem dolnoprzepustowym RC
  • z innym wejściem analogowym używam funkcji RGBPotMixer do zmiany koloru poprzez uzyskanie sygnału z mikrofonu.

* * *Kod dla cross-fadingu 3 diod LED, czerwonej, zielonej i niebieskiej lub jednej trójkolorowej diody LED, przy użyciu PWM

  • Program przechodzi powoli od czerwonego do zielonego, zielonego do niebieskiego i niebieskiego do czerwonego
  • Kod debugowania zakłada Arduino 0004, ponieważ używa nowych funkcji w stylu Serial.begin()
  • pierwotnie „ściemniające diody LED” autorstwa Claya Shirky

*

  • AnalogRead jest włączony na pinie A0, aby zmieniać prędkość zanikania RGB
  • AnalogRead jest włączony na pinie A2, aby zmieniać kolor hueRGB

* * */#include // Outputint ledPin = 13; // controlPin do debugowaniaint redPin = 9; // Czerwona dioda LED, podłączona do cyfrowego pinu 9int greenPin = 10; // Zielona dioda LED, podłączona do cyfrowego pinu 10int bluePin = 11; // Niebieska dioda LED, podłączona do cyfrowego pinu 11int dimredPin = 3; // Piny dla wartości ściemniania analogowego, podłączone do sterownika tranzystoraint dimgreenPin = 5;int dimbluePin = 6;// Inputint switchPin = 2; // przełącznik jest podłączony do pinu D2int val = 0; // zmienna do odczytu statusu pinu buttonState; // zmienna utrzymująca stan przycisku buttonPresses = 0; // 3 naciśnięcia, aby przejść!int potPin0 = 0; // Potencjometr do regulacji opóźnienia między zanikaniem w Moodlamp; int potPin2 = 2; // Wyjście potencjometru do zmiany koloru hueRGB colorint potVal = 0; // Zmienna do przechowywania danych wejściowych z potencjometru maxVal = 0; // wartość do zapisania domyślna wartość współczynnika ściemniania to 255, jeśli żaden Pot nie jest podłączonyint dimPin = 4; //Potencjometr podłączony do A4 w celu przyciemnienia jasności// Zmienne programuint redVal = 255; // Zmienne do przechowywania wartości do wysłania do pinint greenVal = 1; // Wartości początkowe to czerwony pełny, zielony i niebieski offint blueVal = 1;int i = 0; // Licznik pętli int wait;// = 15; // 50ms (0,05 sekundy) opóźnienie; skrócić dla szybszego zanikania k = 0; // wartość dla diody kontrolnej w funkcji migania w DEBUG = 0; // licznik DEBUGÓW; jeśli ustawione na 1, zapisze wartości z powrotem przez serialint LCD = 0; // Licznik LCD; jeśli ustawione na 1, zapisze wartości z powrotem przez serialvoid setup(){ pinMode(ledPin, OUTPUT); pinMode(redPin, WYJŚCIE); // ustawia piny jako wyjście pinMode(greenPin, OUTPUT); pinMode (bluePin, WYJŚCIE); pinMode(dimredPin, OUTPUT); pinMode(dimgreenPin, OUTPUT); // ustawia piny jako wyjście pinMode(dimbluePin, OUTPUT); pinMode(potPin2, INPUT); // pinMode(potPin0, INPUT); // pinMode(dimPin, INPUT); // pinMode(switchPin, INPUT); // Ustaw pin przełącznika jako input attachInterrupt(0, isr0, RISING); if (DEBUG) { // Jeśli chcemy zobaczyć wartości pinów do debugowania… Serial.begin(9600); // …ustaw wyjście szeregowe w stylu 0004 }}// Main programvoid loop(){ if (buttonPresses == 0) { Moodlamp(); // wywołuje funkcję Moodlight } if (buttonPresses == 1) { RGBPotMixer(); // wywołuje funkcję manual mix } if (buttonPresses == 2) { White(); // Tu wszystko jest białe } if (buttonPresses == 3) { } //Moodlamp(); //RGBPotMixer(); //Biały(); Monitor(); dim();}void Monitor(){ // Wyślij stan do monitora if (DEBUG) { // Jeśli chcemy odczytać dane wyjściowe DEBUG += 1; // Zwiększenie licznika DEBUG if (DEBUG > 10) { // Wydrukuj co 10 pętli DEBUG = 1; // Zresetuj licznik Serial.print(i); // Polecenia szeregowe w stylu 0004 Serial.print("\t"); // Wydrukuj kartę Serial.print("R:"); // Wskaż, że wyjście to czerwona wartość Serial.print(redVal); // Wydrukuj czerwoną wartość Serial.print("\t"); // Wydrukuj kartę Serial.print("G:"); // Powtórz dla zielonego i niebieskiego… Serial.print(greenVal); Serial.print("\t"); Serial.print("B:"); Serial.print(blueVal); // println, aby zakończyć powrót karetki Serial.print("\t"); Serial.print("dimValue:"); Serial.print(maxVal); // println, aby zakończyć powrót karetki Serial.print("\t"); Serial.print("czekaj:"); Serial.print(czekaj); // zapisuje wartość potPin0 do monitora Serial.print("\t"); Serial.print("hueRGBvalue"); Serial.print(potVal); // zapisuje wartość potPin0 do monitora Serial.print("\t"); Serial.print("stan przycisku:"); Serial.print(stan przycisku); // zapisuje wartość potPin0 do monitora Serial.print("\t"); Serial.print("PrzyciskNaciśnięcia:"); Serial.println(PrzyciskNaciśnięcia); // zapisuje wartość naciśnięcia przycisku do monitora } }} void dim() // funkcja ściemniania Biały // może później dla wszystkich trybów{ maxVal = analogRead(dimPin); maxWart /= 4; // Zakres analogowy od 0..1024 za duży do ściemniania wartości 0..255 analogWrite(dimredPin, maxVal); analogWrite(dimgreenPin, maxVal); analogWrite(dimbluePin, maxVal);}unieważnij Moodlamp(){ czekaj = analogRead(potPin0); // poszukaj wartości z potPin0; // jeśli nie podłączono żadnego Pot: czekaj 255 i += 1; // Licznik przyrostów // i = i - maxVal; if (i < 255) // Pierwsza faza zanikania { redVal -= 1; // Czerwony w dół greenVal += 1; // Zielony w górę blueVal = 1; // Niebieski niski } else if (i < 509) // Druga faza zanikania { redVal = 1; // Czerwony niski greenVal -= 1; // Zielony w dół blueVal += 1; // Blue up } else if (i < 763) // Trzecia faza zanikania { redVal += 1; // Czerwona w górę greenVal = 1; // Zielony lo2 blueVal -= 1; // Niebieski dół } else // Zresetuj licznik i ponownie rozpocznij zanikanie { i = 1; } // robimy "255-redVal" zamiast po prostu "redVal", ponieważ // diody LED są podłączone do +5V zamiast Gnd analogWrite(redPin, 255 - redVal); // Zapis aktualnych wartości na piny LED analogWrite(greenPin, 255 - greenVal); analogWrite(bluePin, 255 - blueVal); /* Wart.czerw =min(Wart.czerw - maxWart, 255); //ściemnianie dimredVal =max(redVal - maxVal, 0); dimgreenVal =min(greenVal - maxVal, 255); dimgreenVal =max(greenVal - maxVal, 0); dimblueVal =min(blueVal - maxVal, 255); dimblueVal =max(blueVal - maxVal, 0); analogWrite(redPin, 255 - dimredVal); // Zapis aktualnych wartości na piny LED analogWrite(greenPin, 255 - dimgreenVal); analogWrite(bluePin, 255 - dimblueVal); */ czekaj /=4; opóźnienie (czekaj); // Wstrzymaj na 'czekaj' milisekundy przed wznowieniem pętli}void RGBPotMixer(){ potVal = analogRead(potPin2); // odczytaj wartość potencjometru na pinie wejściowym potVal = potVal / 4; // konwertuj z 0-1023 na 0-255 hue_to_rgb(potVal); // traktuj potVal jako odcień i konwertuj na wartości rgb // "255-" to dlatego, że mamy diody LED ze wspólną anodą, a nie ze wspólną katodą analogWrite(redPin, 255-redVal); // Zapis wartości do pinów LED analogWrite(greenPin, 255-greenVal); analogWrite(bluePin, 255-blueVal); }unieważnij White(){ analogWrite(redPin, maxVal); // Zapis wartości do pinów LED analogWrite(greenPin, maxVal); zapis analogowy(bluePin, maxVal); }/*

  • Biorąc pod uwagę zmienną barwę „h”, która waha się od 0-252,
  • ustaw odpowiednio wartość koloru RGB.
  • Zakłada maksymalne nasycenie i maksymalną wartość (jasność)
  • Wykonuje czysto całkowitoliczbowe matematyki, bez zmiennoprzecinkowych.

*/void hue_to_rgb(bajtowy odcień) { if(odcień > 252) odcień = 252; // cofnij się do 252!! nejo bajt hd = odcień / 42; // 36 == 252/7, 252 == H_MAX bajt hi = hd % 6; // daje 0-5 bajtów f = barwa % 42; bajt fs = f * 6; switch(hi) { przypadek 0: redVal = 252; greenVal = fs; blueVal = 0; przerwa; przypadek 1: redVal = 252-fs; greenVal = 252; blueVal = 0; przerwa; przypadek 2: redVal = 0; greenVal = 252; blueVal = fs; przerwa; przypadek 3: redVal = 0; greenVal = 252-fs; blueVal = 252; przerwa; przypadek 4: redVal = fs; greenVal = 0; blueVal = 252; przerwa; przypadek 5: redVal = 252; greenVal = 0; blueVal = 252-fs; przerwa; } } void isr0(){ Serial.println("\n \n przerwany \n"); buttonState = digitalRead (switchPin); // odczytaj stan początkowy delayMicroseconds(100000); //if (val != buttonState) { // stan przycisku uległ zmianie! // if (buttonState == HIGH) { // sprawdź, czy przycisk jest teraz wciśnięty buttonPresses++; // } // val = stan przycisku; // zapisz nowy stan w naszej zmiennej if (buttonPresses == 3) { // zur cksetzen buttonPresses = 0; } } // }Następnym etapem były sterowniki tranzystorowe. Użyłem 3 tranzystorów PNP o maksymalnym prądzie na 3Ampere. Po wyregulowaniu prądu przewodzenia i napięcia, LEDemiter działał świetnie z pełną intensywnością.

Krok 6: Uzyskaj samodzielny program ładujący z programem PonyProg

Pobierz samodzielny program ładujący wypalony przez PonyProg
Pobierz samodzielny program ładujący wypalony przez PonyProg

Jak korzystać z portu równoległego, aby wypalić bootloader arduino na ATmega168 lub ATmega8, aby użyć taniego pustego chipa ze środowiskiem arduino. wkrótce….. może na oddzielnej instrukcji. /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Krok 7: Więc to jest moja lampa nastrojowa Arduino

Więc to jest moja lampa nastrojowa Arduino
Więc to jest moja lampa nastrojowa Arduino

Jeśli Ci się podobało, oceń mnie.

Zalecana: