
Zaprezentować dziś chcę projekt lampki RGB który wykonałem na pracę zaliczeniową z systemów wbudowanych. Moim zdaniem osiągnięty efekt jest zadowalający więc może ktoś będzie zainteresowany wykonaniem urządzenia według mojego projektu.
Jako, że jest to pierwszy zrealizowany przeze mnie projekt w którym wykorzystałem mikrokontroler, proszę o wyrozumiałość a zarazem o rady co warto było by poprawić na przyszłość w kolejnych projektach.
Opis urządzenia:
Wykonana przeze mnie lampka sterowana jest przez mikrokontroler Attiny 2313, do sterowania jasnością świecenia diod wykorzystałem trzy kanały PWM pracujące w odwróconym trybie Fast PWM.
Początkowo kanały PWM pracowały w trybie Fast PWM jednak efekt nie był dla mnie zadowalający z powodu szpilek przy zerowym wypełnieniu (jeden z kolorów nie wygasał całkowicie).
Urządzenie sterowane jest za pomocą czterech przycisków. Przyciskiem 1 (PROGRAM) zmieniamy tryb świecenia, przyciskiem 2 (HOLD) ustawiamy blokadę wyświetlanego koloru, przyciski 3 (+) i 4 (-) służą w zależności od wybranego trybu albo do regulacji tempa przejść pomiędzy kolorami lub wyboru kolorów zapisanych w pamięci.
Dodatkową funkcją przycisku 2 (HOLD) jest zapisywanie aktualnie wyświetlanego koloru do pamięci eeprom mikrokontrolera. Dzięki temu gdy wylosowany zostanie kolor który nam się spodoba możemy zatrzymać na nim animację co spowoduje jego zapisanie w pamięci, dzięki temu nawet po wyłączeniu urządzenia mamy później możliwość powrócić do koloru który nam się podobał (należy go wybrać w trybie 1 w którym kolory pobierane są z pamięci). Ponowne zatrzymanie animacji nadpisuje wcześniej zapisany kolor!
Urządzenie zapamiętuje w eepromie także swoją konfigurację, dzięki temu po odłączeniu od zasilania nie musimy od nowa go ustawiać. Urządzenie uruchamia się z takimi nastawami z jakimi zostało wyłączone (wybrany program, szybkość animacji itp.).
Obsługa przycisków odbywa się w przerwaniu zewnętrznym wyzwalanym stanem niskim na wejściu. By wyzwalało je wciśnięcie każdego z przycisków zastosowałem 4 diody. W momencie naciśnięcia któregoś z przycisków, jedna z diod zostaję połączona do masy co wywołuje stan niski na pinie generującym przerwanie.
We wszystkich pinach wejściowych aktywowane zostały rezystory podciągające dlatego sprawdzanie który przycisk jest wciśnięty odbywa się poprzez sprawdzenie stanu niskiego.
Drgania styków wyeliminowałem programowo poprzez wykorzystanie przerwania zegarowego. Po wystąpieniu przerwania ustawiona na określoną wartość zostaje flaga. W przerwaniu generowanym przepełnieniem zegara wartość flagi zmniejsza się o 1, aż do ponownego osiągnięcia wartości 0. W tym czasie (gdy trwa odliczanie do 0) nie następuje obsługa sygnałów wejściowych – są one ignorowane.
Jako, że sterowanie jasnością odbywa się przez PWM, można spokojnie zastosować tranzystory do sterowania diodami. Tranzystory są praktycznie cały czas albo otwarte albo zamknięte więc nie przegrzewają się i nie generują strat mocy.
Urządzenie posiada 4 tryby pracy:
Program 1: Statyczne kolory
- W trybie tym urządzenie wyświetla 1 z 13 zapisanych w swojej pamięci kolorów. Zmiana koloru odbywa się za pomocą przycisków "+" i "-". Kolor nr 1 jest edytowalny - użytkownik może wpisać w jego miejsce dowolną inną barwę poprzez wciśnięcie przycisku "HOLD" w momencie wyświetlania pożądanego koloru (np. w trybie losowych kolorów lub trybie tęczy).
Program 2: Tęcza (przejścia pomiędzy kolorami R->G->B)
- W trybie tym następuje płynne przejście pomiędzy kolorami, poczynając od koloru czerwonego poprzez zielony do niebieskiego. Cykl ten jest ciągle powtarzany. Użytkownik może ustawić tempo animacji poprzez naciśnięcie przycisków "+" lub "-", które powodują odpowiednio zwolnienie lub przyspieszenie zmian kolorów (+ oznacza wydłużenie opóźnień).
Program 3: Losowe kolory z płynnym przejściem
- W trybie tym następuje wyświetlanie losowych kolorów. Przejście pomiędzy wylosowanymi kolorami jest płynne. Użytkownik może regulować czas wyświetlania danego koloru za pomocą przycisków "+" i "-".
Program 4: Rozjaśnianie i Ściemnianie
- W trybie tym następuje wyświetlanie kolorów zapisanych w pamięci urządzenia. Pomiędzy każdym z kolorów następuje sekwencja ściemniania i rozjaśniania tzn. obecny kolor zostaje wygaszony następnie płynnie zapala się kolejna barwa. Użytkownik może regulować czas wyświetlania danego koloru za pomocą przycisków "+" i "-". Czas animacji (przejście od jednego do drugiego koloru) jest stały.
Do realizacji urządzenia wykorzystałem ogólno dostępne i tanie podzespoły elektroniczne. Płytka drukowana została przygotowana w domowych warunkach (na żelazku) metodą termotransferu.
Program sterujący mikrokontrolerem napisany został w środowisku Atmel Studio 6.0, w języku C. Do programowania mikrokontrolera posłużył program avrdude z nakładką AVR8 Burn-O-Mat v2 oraz programator USBAsp. Schemat elektroniczny, schemat płytki drukowanej przygotowany został w programie Eagle 6.4.0.
Czekam na opinie dotyczące mojego projektu w szczególności na uwagi odnośnie programu, ponieważ do oceny urządzenie oddaje dopiero w niedziele to jeszcze może coś zdążył bym poprawić.
By nie zostać posądzonym o plagiat podpisuję się pod projektem imieniem i nazwiskiem

Mateusz Olszewski









Code: c
Cool? Ranking DIY