Mirlight (Domowy Ambilight)


9.6
Ocena: None Średnia: 9.6 (5 głosujących)

Układ ten, a w zasadzie dość duże urządzenie, jak sama nazwa wskazuje jest domowej konstrukcji Ambilight'em. Całość oparta jest o mikrokontroler jednoukładowy ATMEGA16 i zestaw trójkolorowych diod LED. Urządzenie składa się ze sterownika i połączonych z nim modułów diodowych, po trzy diody połączone równolegle. Mirlight posiada 8 niezależnych kanałów generujących barwy w zależności od średniego koloru na brzegach ekranu. Łączność z komputerem zapewnia interfejs RS-232, ale można zastosować dowolny konwerter USB<->RS-232. Oprogramowanie sterujące zostało napisane w języku Python i działa z powodzeniem pod systemem Windows i Linux (Testowane było pod Archlinux i PLD Titanium, w wersjach 64-bitowych). Program sterujący umożliwia zdefiniowanie obszarów uśredniania koloru dla każdego z kanałów, oraz konfigurację szybkości przejść kolorów, potrzebną, gdy obraz na ekranie zmienia się bardzo szybko. Dodatkowo urządzenie ma mozliwość odbioru transmisji RC5 i sterowanie odtwarzaczem filmów, a później także (jeśli zajdzie taka potrzeba) innymi programami.

Ten układ dostępny jest w nowszej wersji, odwiedź: Mirlight 2

Działanie:


Schemat ideowy sterownika znajduje się na rysunku poniżej:

Sercem układu jest mikrokontroler U1 (ATMEGA16) wraz z rezonatorem kwarcowym X1 (16MHz) i kondensatorami C1 (22pF) i C2 (22pF). Układ w zasadzie składa się z 24 takich samych bloków sterujących pojedyńczymi segmentami LED. W roli elementów sterujących pracują tranzystory T1 - T24 (BC516), a rezystory odpowiednio R1 - R24 (3,3k) ograniczają prąd bazy tych tranzystorów. Elementy sterujące zostały podzielone na 3 grupy po 8, a każda z grup podłączona jest do osobnego portu mikrokontrolera U1. Wyjściami sterownika są złącza RKolor (goldpin), GKolor (goldpin) i BKolor (goldpin), podające odpowiednio napięcie na czerwone, zielone i niebieskie struktury LED w każdym z kanałów. Do zaprogramowania mikrokontrolera służy złącze Prog, a do złącza RS/USB należy podłączyć konwerter USB<->RS-232. Do tego złącza mozliwe jest też podłączenie klasycznego portu RS-232, wymagane jest tylko zastosowanie układu dopasowującego poziomy logiczne (MAX232) do standardów zgodnych z interfejsem RS-232.

Ponieważ urządzenie w wersji podstawowej wykorzystuje tylko jednokierunkową transmisję danych, na schemacie znalazł się układ U2 (TSOP1736), wraz z elementami R25 (220R) i C7 (100uF). Dzięki temu możliwy jest odbiór transmisji RC5 z pilota i wysyłanie odpowiednich poleceń do komputera.

Złącze Z1 (ARK) to punkt podłączenia zasilania dla całego układu. Masa układu została dodatkowo wyprowadzona na złączu Z2 (ARK) aby ułatwić podłączenie masy od wszystkich bloków LED. Kondensatory C3 (100uF), C4 (100uF), C5 (100nF) i C6 (100nF) stanowią filtr zasilania dla sterownika i bloków LED.

Schemat ideowy jednego z bloków LED znajduje się na rysunku poniżej:

Każdy z kanałów składa się z trzech trójkolorowych struktur LED (Diody D1 - D3) podłączonych równolegle. Ich prąd ograniczany jest za pomocą rezystorów R1 - R9 (330R lub 180R). Czerwone struktury LED mają mniejszą rezystancję szeregową (180R) w celu dopasowania (na oko) jasności wszystkich kolorów. Złącze RGB (goldpin) zapewnia kontakt diod LED ze sterownikiem.

Budowa:


Układ sterownika z powodzeniem można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Montaż sterownika jest klasyczny, a kolejność elementów może być dowolna. Na początku dobrze jest zacząć od montażu wszystkich tranzystorów, a następnie odpowiadające im rezystory. Pod mikrokontroler dobrze jest zastosować podstawkę. W dalszej kolejności należy wlutować wszystkie pozostałe kondensatory i rezystory, a na samym końcu złącza ARK i goldpin. Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj.

Bloki LED można z powodzeniem zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Montaż płytek z diodami nie jest skomplikowany, należy go rozpocząć od wlutowania rezystorów. Przy diodach RGB należy zwrócić uwagę na prawidłową biegunowość (katoda to najdłuższa z 4 nóżek). Po zmontowaniu całego bloku należy go sprawdzić za pomocą zasilacza 5V, gdyż zarzyło się że jedna z diod nie była do końca sprawna (jeden kolor uszkodzony). Tak samo postępujemy z montażem pozostałych bloków (razem 8 sztuk). Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj.

Sterownik można umieścić w dowolnej obudowie z tworzywa. Jako obudowę diod LED wygodnie jest zastosować ramkę z rurki hydraulicznej, gdyż łatwo można ją połączyć w całość za pomocą kolanek. W rurce wycięte są duże otwory, tak aby zmieściły się całe płytki (3 kanały od góry, 2 na bokach i jeden od spodu), a wycięte fragmenty zastąpione są kalką techniczną, rozpraszającą światło z diod RGB. Do zasilania całości nie wystarczy port USB (w przypadku zastosowania przejściówki USB<->RS-232), należy wykonać dodatkowy zewnętrzny zasilacz 5V, lub podłączyć układ do zasilacza w komputerze. Połączenia bloków LED do płytki sterownika można wykonać za pomocą przewodu taśmowego, poza masą którą lepiej zrobić grubszym przewodem (lub kilkoma w taśmowymi)

Wielkości płytek z diodami LED są wyliczone dla 24 calowego monitora, można jednak skrócić trochę płytki, stosując dwie diody na kanał. Będzie można wtedy zamontować taki układ na dowolnym monitorze. Drugim rozwiązaniem jest przyklejenie płytek z diodami bezpośrednio do monitora, kanały wtedy mogą trochę na siebie zachodzić (nie sprawdzałem jaki jest efekt w takim przypadku).

Wykaz Elementów:


Sterownik:


2x Złącze śrubowe ARK2(podwójne)
1x Listwa Goldpin 1x3
1x Listwa Goldpin 1x4
1x Listwa Goldpin 1x5
3x Listwa Goldpin 1x8
24x 3,3k
1x 220R
2x 22pF
2x 100nF
3x 100uF Elektrolit
1x Rezonator Kwarcowy 16MHz
1x Odbiornik Podczerwieni TSOP1736
24x BC516
1x Mikrokontroler ATMEGA16 + Podstawka

Bloki LED:


24x 180R
48x 330R
24x Dioda LED RGB (wspólna katoda)

Programowanie:


Kod Źródłowy do sterownika został napisany w BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m16def.dat"
$crystal = 16000000
 
$baud = 9600
 
Config Porta = &B11111111 : Porta = &B11111111
Config Portb = &B11111111 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00000010 : Portd = &B11111111
 
Config Timer1 = Timer , Prescale = 8
Enable Timer1 : On Timer1 Prztimer1
 
On Int0 Przzew0 Nosave
Config Int0 = Low Level
Enable Int0
 
Config Rc5 = Pind.2
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Nazwy *******************
'***********************************************
Rd Alias Porta
Gd Alias Portb
Bd Alias Portc
'*************  Nazwy Koniec  ****************
 
'******************  Zmienne *******************
'***********************************************
Dim Licznik As Byte
Dim Rled(8) As Byte , Bled(8) As Byte , Gled(8) As Byte
Dim Flaga_przejscia As Bit
Dim Dzielnik As Byte
Dim Licz_err As Byte
 
Dim Bled_rs(8) As Byte
Dim Gled_rs(8) As Byte
Dim Rled_rs(8) As Byte
Dim Kanal As Byte
Dim W(2) As Byte
Dim D As Byte , N As Byte
Dim I As Byte , K As Byte , J As Byte
 
Dim Komenda As Byte , Adres As Byte
Dim Odebrano As Bit
 
Dim Kolor_r As Byte
Dim Kolor_g As Byte
Dim Kolor_b As Byte
 
Dim Dziel_przejscia As Byte                                 'ustawiany dzielnik
 
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Dziel_przejscia = 100
N = 1
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
 
 D = Inkey()
 If D > 0 Then
   W(n) = D
   Incr N
   If N = 3 Then
     N = 1
     '********************     dwa dajty:  [kanal,red][green,blue] po 4 bity
     Kanal = W(1)
     Shift Kanal , Right , 4
     If Kanal < 9 Then
       Rled_rs(kanal) = W(1) And &B00001111
       Gled_rs(kanal) = W(2)
       Shift Gled_rs(kanal) , Right , 4
       Bled_rs(kanal) = W(2) And &B00001111
 
       Rled_rs(kanal) = Rled_rs(kanal) - 1
       Rled_rs(kanal) = Rled_rs(kanal) * Rled_rs(kanal)
       Gled_rs(kanal) = Gled_rs(kanal) - 1
       Gled_rs(kanal) = Gled_rs(kanal) * Gled_rs(kanal)
       Bled_rs(kanal) = Bled_rs(kanal) - 1
       Bled_rs(kanal) = Bled_rs(kanal) * Bled_rs(kanal)
     Else
       'ustawienia
       If Kanal = 9 Then Dziel_przejscia = W(2)
 
     End If
     '********************
   End If
 End If
 
 If Flaga_przejscia = 1 Then                                'robi przej?cia p?ynne kolorow
   Flaga_przejscia = 0
 
   For I = 1 To 8
     If Bled(i) > Bled_rs(i) Then Decr Bled(i)
     If Bled(i) < Bled_rs(i) Then Incr Bled(i)
 
     If Rled(i) > Rled_rs(i) Then Decr Rled(i)
     If Rled(i) < Rled_rs(i) Then Incr Rled(i)
 
     If Gled(i) > Gled_rs(i) Then Decr Gled(i)
     If Gled(i) < Gled_rs(i) Then Incr Gled(i)
   Next N
 
 
   If N = 2 Then                                            'error odczytu, jak nie odebra? parzystej liczby bajtow
     Incr Licz_err
     If Licz_err >= 5 Then
       Licz_err = 0
       D = Inkey()
       D = Inkey()
       D = Inkey()
       D = 0
       N = 1
     End If
   End If
 
 End If
 
 
 If Odebrano = 1 Then
   If Adres = 0 Then                                        'pilot o adresie 0
     Bled(1) = 100 : Bled(2) = 100 : Bled(3) = 100 : Bled(4) = 100 : Bled(5) = 100 : Bled(6) = 100 : Bled(7) = 100 : Bled(8) = 100
     Rled(1) = 100 : Rled(2) = 100 : Rled(3) = 100 : Rled(4) = 100 : Rled(5) = 100 : Rled(6) = 100 : Rled(7) = 100 : Rled(8) = 100
     Gled(1) = 100 : Gled(2) = 100 : Gled(3) = 100 : Gled(4) = 100 : Gled(5) = 100 : Gled(6) = 100 : Gled(7) = 100 : Gled(8) = 100
     Printbin Komenda
   End If
   Odebrano = 0
   Enable Int0
 End If
 
 
Loop
End
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer1:
 Timer1 = 65286
 
 Incr Licznik
 If Licznik = 100 Then Licznik = 0
 
 For K = 1 To 8
   J = K - 1
   If Licznik < Rled(k) Then Set Kolor_r.j Else Reset Kolor_r.j
   If Licznik < Gled(k) Then Set Kolor_g.j Else Reset Kolor_g.j
   If Licznik < Bled(k) Then Set Kolor_b.j Else Reset Kolor_b.j
 Next K
 
 Incr Dzielnik
 If Dzielnik = Dziel_przejscia Then
   Dzielnik = 0
   Set Flaga_przejscia
 End If
 
 Rd = Not Kolor_r
 Gd = Not Kolor_g
 Bd = Not Kolor_b
 
Return
'******** Przerwanie timer 0 Koniec ************
 
'************   Inne Etykiety    ***************
'***********************************************
 
Przzew0:
  Disable Int0
  Enable Interrupts
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
  Odebrano = 1
Return

Ustawienia fusebitów mikrokontrolera ATMEGA16 przedstawione są poniżej: (zrzut z programu Burn-O-Mat)

Obsługa:

Obsługa i instalacja programu współpracującego z Mirlight, znajduje się na stronie autora: http://grizz.pl/mirlight. Tam też należy kierować pytania odnośnie działania programu.

Zdjęcia Projektu:

ZałącznikWielkość
Sterownik Schemat67.6 KB
Sterownik Płytka23.36 KB
Sterownik Płytka (odbicie lustrzane)23.36 KB
Sterownik Płytka (3 na stronie)64.86 KB
Sterownik Montowanie32.26 KB
Blok LED Schemat17.66 KB
Blok LED Płytka6.79 KB
Blok LED Płytka (odbicie lustrzane)6.84 KB
Blok LED Płytka (8 na stronie)34.48 KB
Blok LED montowanie8.39 KB
Kod Źródłowy4.86 KB
Program po Kompilacji (BIN)2.34 KB
Program po Kompilacji (HEX)6.6 KB
Kod źródłowy (Wersja 2009.11.15) Działa z nowym programem4.36 KB
Kod źródłowy (Wersja 2009.11.21) Działa z nowym programem, pilot działa4.41 KB
Kod źródłowy (Wersja 2010.03.20) Działa z nowym programem, pilot działa +autowykrywanie portu4.51 KB



Portret użytkownika mirley

Re: Mirlight

Twoje obliczenia są słuszne gdybym chciał mieć jednakowe prądy dla każdej z diod... a ja chciałem mieć jednakowe jasności każdej z diod i to jeszcze żebym swoim okiem widział jednakowe jasności. Tak więc rezystory dobrałem doświadczalnie tak aby uzyskać zamierzony efekt.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Kazik

Witam. na początku wielki

Witam. na początku wielki szacunek za projekt.
Mam pytanie odnośnie podłączenia. Zmontowałwm sterownik i planuję go podlączyć przez RS-232 za pomocą kabla od monitora, w którym jest 9 przewodów. Który przewód do którego pina? I jeszcze jeden problem związany z montażem, gdyż kupiłem diody ze wspólną anoda ponieważ w sklepie nie było innych, czy da sie zrealizować projekt przy użyciu tych diod?

Portret użytkownika mirley

Re: Mirlight

jesli jeszcze nie wykonałeś ukłądu to przejdź do projektu Mirlight2. Tutaj sa tranzystory PNP i diod ze wspólną anodą nie podłączysz. W drugim projekcie są diody ze wspólną anodą, co prawda SMD ale ze schematu wyczaisz co i jak

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Kazik

niestety już wykonałem układ,

niestety już wykonałem układ, wszystko polutowane w sterowniku tylko nadal mam problem z podłączeniem. A o te diody sie postaram ;)

Portret użytkownika mirley

Re: mirlight

W tej wersji będziesz potrzebował albo standardowego konwertera max232 i portu szeregowego w komputerze albo poprostu konwertera FTDi FT232 żeby zrobić sobie od razu port szeregowy na USB, tak jak zrobiłem to w mirlight2. Popatrz na schemat do mirlight2. Musisz dołączyć przynajmniej kilka diod aby to działało bo inaczej nie zobaczysz efektu. Nie zapomnij o skompilowaniu i wgraniu najnowszej wersji programu oraz o ustawieniu fusów

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.