Witajcie!
Chciałbym przedstawić Wam projekt który właśnie ukończyłem, a jest nim podświetlenie Ambient Light do telewizora / monitora. W bardzo dużym skrócie – program analizuje jakie kolory przeważają w poszczególnych częściach ekranu i podświetla ścianę na podobną barwę, dając bardzo miły dla oka efekt. Można oczywiście kupić gotowy telewizor z taką funkcjonalnością za grubą kasę, ale wtedy tracimy największą przyjemność – tworzenie :) Całość została wykonana w oparciu o projekt dostępny na Amblone oraz kod którego autorem jest Rich Gilbank, rozbudowany następnie przeze mnie.
Czego potrzebujemy?
- komputer z systemem Windows, który wyświetlać będzie obraz
- Arduino Uno (lub samodzielna Atmega328P-PU, więcej info w dalszej części)
(NIE działa na Arduino Leonardo – tak przynajmniej sugeruje kilka osób w komentarzach) - taśma LED RGB – w zależności od wielkości telewizora (u mnie około 2m) (20-25 zł/ m)
- zasilacz 12V DC 2-3A (zależnie od długości użytej taśmy LED) (15-25 zł)
- tranzystor BC639 – 12 sztuk (0.50 zł/sztuka)
- rezystor 2,2 kΩ – 12 sztuk
- duuużo kabelków do łączenia
- mini-button – 4 sztuki
- rezystor 4,7kΩ – 4 sztuki
- jasna (najlepiej biała) ściana za telewizorem
Na wstępnie zaznaczam, że prezentowany projekt wymaga, aby filmy / zdjęcia wyświetlane były z komputera. Nie ma możliwości dostosowania kolorów gdy oglądamy telewizję lub filmy z odtwarzacz DVD.
Jak to działa?
Aby dopasowywać kolor podświetlenia musimy na bieżąco analizować obraz. Służy do tego specjalna aplikacja (o której później), która na podstawie aktualnego obrazu decyduje jakie kolory podświetlenia użyć w każdej z 4 stref. Przetworzone dane przesyłane są portem szeregowym (Serial) poprzez USB do Arduino, które steruje napięciem na każdym z 12 wyjść (4 strefy x 3 kolory) zmieniając podświetlenie. Myślisz sobie “moment moment, coś tu nie gra, Arduino Uno ma tylko 6 wyjść PWM!” – racja, dlatego z pomocą w tej sytuacji przychodzi nam biblioteka SoftPWM, umożliwiająca programowe symulowanie PWM (modulacja szerokości impulsów – najprościej mówiąc, dzięki temu z wyjść Arduino możemy uzyskać dowolne napięcie 0-5V i płynnie rozjaśniać kolory). Z powodu małej ilości pinów ze sprzętowym PWM w Arduino Uno, źródłowy projekt Amblone opiera się na Arduino Mega (które posiada takich wyjść aż 12, ale jest jednocześnie droższe).
Mój kod umożliwia dodatkowo uruchomienie podświetlenia w stałym kolorze , bez potrzeby podłączania komputera. Możemy więc używać tego również do podświetlenia ekranu gdy oglądamy telewizję (zapalanie dodatkowej lampki w pokoju będzie zbędne, a nasz wzrok nie będzie się tak męczył) lub traktować jako dodatkowe oświetlenie pomieszczenia. Wybór trybu pracy odbywa się przy pomocy 4 przycisków.
Jaką taśmę LED wybrać?
Teraz kilka słów o samych taśmach ledowych. Dzielą się one na jednokolorowe (białe, czerwone, zielone itd.) i RGB. My oczywiście potrzebujemy taśmy RGB, czyli takiej w której każda dioda może świecić niezależnie w każdym z kolorów: Red (czerwony) Green (zielony) Blue (niebieski). Odpowiednio regulując jasność świecenia każdego z tych z kolorów, możemy uzyskać światło o dowolnej barwie (gdy zapalimy wszystkie z pełną mocą – uzyskamy kolor biały)
Dostępne popularnie na rynku taśmy dzielimy ze względu na rozmiar diod na:
- 5050 (diody rozmiaru 5 x 5 mm)
- 3528 (diody rozmiaru 3,5 x x 2,8 mm)
oraz ze względu na gęstość punktów świetlnych:
- 150 (150 diod / 5m = 30 diod / m -> 3 diody na odcinek 10 cm)
- 300 (300 diod / 5m = 60 diod / m -> 3 diody na odcinek 5 cm)
Co chyba dość intuicyjne – taśma z większą ilością / większymi diodami świeci jaśniej, a równocześnie zwiększa się pobór mocy.
Ja, tak jak pisałem wyżej, użyłem taśmy RGB 5050 300, aby uzyskać możliwie największą jasność świecenia. Różnice w cenie pomiędzy taśmami nie są aż tak duże i warto zdecydować się na ten typ. Koszt odcinka 2m (tyle potrzebowałem na mój telewizor) to około 40 zł (allegro)
Połączenia
Poniżej schemat połączeń wykonany w Fritzing. Zamiast taśm led, symbolicznie umieściłem w ich miejscu pojedyncze diody RGB.
Oprogramowanie – komputer
Pierwszym etapem jest zainstalowanie aplikacji Amblone na komputerze (z systemem Windows) – to właśnie ona odpowiada za przetwarzanie obrazu.
Najpierw musimy pobrać i zainstalować biblioteki niezbędne do działania programu Microsoft Visual C++ 2008 SP1 Redistributable Package
Następnie ściągamy i instalujemy sam program http://www.amblone.com/download/binaries1,3
Po uruchomieniu aplikacja automatycznie chowa się do paska tray (ikonki w dolnym prawym narożniku).
Oprogramowanie – Arduino
Kolejnym krokiem jest wgranie kodu do Arduino. Zanim to jednak zrobimy, musimy najpierw zainstalować w naszym środowisku bibliotekę SoftPWM. Miałem z nią pewne problemy (wynikające z różnic pomiędzy wersjami), dlatego też załączam bezpośrednio link do wersji, która na pewno współpracuje z naszym kodem: SoftPWM Bibliotekę po pobraniu należy zainstalować. Dla Arduino od wersji 1.0.5 sprowadza się to do wybrania menu Szkic -> Importuj bibliotekę -> Add Libary i wskazania pliku ZIP (nie rozpakowujemy go). We wcześniejszych wersjach trzeba ręcznie rozpakować bibliotekę do podkatalogu /libraries/ naszego Arduino. Szczegóły, gdzie znaleźć ten katalog tutaj
Teraz wgrywamy do Arduino poniższy kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 |
#include <SoftPWM.h> #define C_SF1 0xF1 // Startflag for 1-channel mode (1 RGB channel) #define C_SF2 0xF2 // Startflag for 2-channel mode (2 RGB channels) #define C_SF3 0xF3 // Startflag for 3-channel mode (3 RGB channels) #define C_SF4 0xF4 // Startflag for 4-channel mode (4 RGB channels) #define C_END 0x33 // End flag #define C_ESC 0x99 // Escape character // States for receiving the information, see the flow chart for more info #define S_WAIT_FOR_SF 0 #define S_RECV_RGB 1 #define S_RECV_RGB_ESC 2 #define COLORS_TAB_SIZE 10 //--------------------------------------------------------------------------- //--------------------------- FUNCTION DECLARATIONS ------------------------- //--------------------------------------------------------------------------- void ReadButtons(); void SetColors(int color); // Receives bytes and returns true if a valid packet was received boolean PacketReceived(); // Uses the rgb values to set the PWMs void SetPWMs(); //--------------------------------------------------------------------------- //--------------------------- VARIABLE DECLARATIONS ------------------------- //--------------------------------------------------------------------------- int pulse = 0; // State we are in: one of the S_* defines int State = 0; // The payload of a received message int Payload[32]; // The amount of RGB values we have received int ByteCount = 0; // The character we received int Recv; // The amount of RGB channels we are using int ChannelMode; // The value for easing (lower is more) // For more easing adjust the delay in loop() int easing = 1; // PWM pins for channel 1 int r1_pin = 3; int g1_pin = 2; int b1_pin = 4; // PWM pins for channel 2 int r2_pin = 6; int g2_pin = 5; int b2_pin = 7; // PWM pins for channel 3 int r3_pin = 9; int g3_pin = 8; int b3_pin = 10; // PWM pins for channel 4 int r4_pin = 12; int g4_pin = 11; int b4_pin = 13; // Current PWM output values (as opposed to target output values) int r1_current = 0; int g1_current = 0; int b1_current = 0; int r2_current = 0; int g2_current = 0; int b2_current = 0; int r3_current = 0; int g3_current = 0; int b3_current = 0; int r4_current = 0; int g4_current = 0; int b4_current = 0; int button1_pin = A5; int button2_pin = A4; int button3_pin = A3; int button4_pin = A2; int menu_position = 0; int menu_color = COLORS_TAB_SIZE-1; int brightness = 80; // 0-100 int colors_tab[COLORS_TAB_SIZE][12]={ {255,0,0, 255,0,0, 255,0,0, 255,0,0,}, // czerwony {255,255,255, 255,255,255, 255,255,255, 255,255,255}, // bialy {0,0,255, 0,0,255, 0,0,255, 0,0,255}, // niebieski {0,255,0, 0,255,0, 0,255,0, 0,255,0}, // zielony {255,69,0, 255,69,0, 255,69,0, 255,69,0}, // pomaranczowo-czerwony {255,140,0, 255,140,0, 255,140,0, 255,140,0}, // ciemny pomaranczowy {255,180,0, 255,180,0, 255,180,0, 255,180,0}, // zolty {127,255,0, 127,255,0, 127,255,0, 127,255,0}, // jasny zielony {50,50,224, 50,50,224, 50,50,224, 50,50,224}, // granat {255,20,147, 255,20,147, 255,20,147, 255,20,147} // gleboki różowy :D }; //--------------------------------------------------------------------------- //----------------------------- IMPLEMENTATIONS ----------------------------- //--------------------------------------------------------------------------- void setup() { // initialize the serial communication Serial.begin(256000); // opens serial port, sets data rate to 256000 bps TCCR0B = TCCR0B & 0b11111000 | 0x2; TCCR1B = TCCR0B & 0b11111000 | 0x2; TCCR2B = TCCR0B & 0b11111000 | 0x2; State = S_WAIT_FOR_SF; pinMode(button1_pin, INPUT_PULLUP); pinMode(button2_pin, INPUT_PULLUP); pinMode(button3_pin, INPUT_PULLUP); pinMode(button4_pin, INPUT_PULLUP); SoftPWMBegin(); } //--------------------------------------------------------------------------- void loop() { ReadButtons(); if(menu_position == 0){ if (Serial.available() > 0) { PacketReceived(); } } else if(menu_position == 1){ SetColors(menu_color); } SetPWMs(); delay(10); } //--------------------------------------------------------------------------- void ReadButtons() { // odbieraj sygnal z komputera if(digitalRead(button1_pin)==LOW) { menu_position = 0; delay(4000); } // stale kolory -> następny kolor if(digitalRead(button2_pin)==LOW) { menu_position = 1; if(menu_color >= (COLORS_TAB_SIZE-1) ) menu_color = 0; else menu_color++; delay(4000); } // jasniej if(digitalRead(button3_pin)==LOW) { menu_position = 1; if(brightness < 20) brightness -= 5; else brightness -= 20; if(brightness < 1) brightness = 1; delay(1000); } if(digitalRead(button4_pin)==LOW) { menu_position = 1; if(brightness < 20) brightness += 5; else brightness += 20; if(brightness > 100) brightness = 100; delay(1000); } } //--------------------------------------------------------------------------- void SetColors(int color) { ChannelMode = 4; for(int i=0; i<12; i++) Payload[i] = (int)(colors_tab[color][i] * brightness / 100); } //--------------------------------------------------------------------------- boolean PacketReceived() { Recv = Serial.read(); switch (State) { case S_WAIT_FOR_SF: // =============================== Wait for start flag state switch (Recv) { case C_SF1: // Start flag for 1-channel mode ChannelMode = 1; State = S_RECV_RGB; ByteCount = 0; return false; case C_SF2: // Start flag for 2-channel mode ChannelMode = 2; State = S_RECV_RGB; ByteCount = 0; return false; case 243://C_SF3: // Start flag for 3-channel mode ChannelMode = 3; State = S_RECV_RGB; ByteCount = 0; return false; case C_SF4: // Start flag for 4-channel mode ChannelMode = 4; State = S_RECV_RGB; ByteCount = 0; return false; default: // No action for all other characters return false; } break; case S_RECV_RGB: // =============================== RGB Data reception state switch (Recv) { case C_SF1: // Start flag for 1-channel mode ChannelMode = 1; State = S_RECV_RGB; ByteCount = 0; return false; case C_SF2: // Start flag for 2-channel mode ChannelMode = 2; State = S_RECV_RGB; ByteCount = 0; return false; case C_SF3: // Start flag for 3-channel mode ChannelMode = 3; State = S_RECV_RGB; ByteCount = 0; return false; case C_SF4: // Start flag for 4-channel mode ChannelMode = 4; State = S_RECV_RGB; ByteCount = 0; return false; case C_END: // End Flag // For each channel, we should have received 3 values. If so, we have received a valid packet if (ByteCount == ChannelMode * 3) { State = S_WAIT_FOR_SF; ByteCount = 0; return true; // <------------------------ TRUE IS RETURNED } else { // Something's gone wrong: restart State = S_WAIT_FOR_SF; ByteCount = 0; return false; } case C_ESC: // Escape character State = S_RECV_RGB_ESC; return false; default: // The character received wasn't a flag, so store it as an RGB value Payload[ByteCount] = Recv; ByteCount++; return false; } case S_RECV_RGB_ESC: // =============================== RGB Escaped data reception state // Store the value in the payload, no matter what it is Payload[ByteCount] = Recv; ByteCount++; State = S_RECV_RGB; return false; } return false; } //--------------------------------------------------------------------------- void SetPWMs() { // Channel 1 r1_current = rgbStep(r1_current, Payload[0]); g1_current = rgbStep(g1_current, Payload[1]); b1_current = rgbStep(b1_current, Payload[2]); SoftPWMSet(r1_pin, r1_current); SoftPWMSet(g1_pin, g1_current); SoftPWMSet(b1_pin, b1_current); // Channel 2 if (ChannelMode > 1) { r2_current = rgbStep(r2_current, Payload[3]); g2_current = rgbStep(g2_current, Payload[4]); b2_current = rgbStep(b2_current, Payload[5]); SoftPWMSet(r2_pin, r2_current); SoftPWMSet(g2_pin, g2_current); SoftPWMSet(b2_pin, b2_current); } else { // turn the rest to 0 (black) SoftPWMSet(r2_pin, 0); SoftPWMSet(g2_pin, 0); SoftPWMSet(b2_pin, 0); SoftPWMSet(r3_pin, 0); SoftPWMSet(g3_pin, 0); SoftPWMSet(b3_pin, 0); SoftPWMSet(r4_pin, 0); SoftPWMSet(g4_pin, 0); SoftPWMSet(b4_pin, 0); } // Channel 3 if (ChannelMode > 2) { r3_current = rgbStep(r3_current, Payload[6]); g3_current = rgbStep(g3_current, Payload[7]); b3_current = rgbStep(b3_current, Payload[8]); SoftPWMSet(r3_pin, r3_current); SoftPWMSet(g3_pin, g3_current); SoftPWMSet(b3_pin, b3_current); } else { // turn the rest to 0 (black) SoftPWMSet(r3_pin, 0); SoftPWMSet(g3_pin, 0); SoftPWMSet(b3_pin, 0); SoftPWMSet(r4_pin, 0); SoftPWMSet(g4_pin, 0); SoftPWMSet(b4_pin, 0); } // Channel 4 if (ChannelMode > 3) { r4_current = rgbStep(r4_current, Payload[9]); g4_current = rgbStep(g4_current, Payload[10]); b4_current = rgbStep(b4_current, Payload[11]); SoftPWMSet(r4_pin, r4_current); SoftPWMSet(g4_pin, g4_current); SoftPWMSet(b4_pin, b4_current); } else { // turn the rest to 0 (black) SoftPWMSet(r4_pin, 0); SoftPWMSet(g4_pin, 0); SoftPWMSet(b4_pin, 0); } } //--------------------------------------------------------------------------- // rgbStep - the function for easing the colour changes int rgbStep(int from, int to){ if(to > from){ // destination colour is greater than current colour from += easing; if(from > 255){ from = 255; } return from; } else if(to < from){ // current colour is greater than destination colour from -= easing; if(from < 0){ from = 0; } return from; } else{ // values are the same...return as submitted return from; } } |
Uruchomienie
Gdy już wykonamy wszystkie wcześniejsze kroki, czas na uruchomienie. Podłączamy Arduino do komputera i uruchamiamy wcześniej zainstalowaną aplikację Amblone. Schowa się ona automatycznie w trayu – odnajdujemy ją tam, klikamy prawym przyciskiem myszy i wybieramy Configure Amblone. Teraz najważniejsza rzecz – klikamy w pierwszym okienku “Arduino COM Port:” i wybieramy możliwą opcję typu COM10, COM16 itd. Powinna być do wyboru tylko jedna. Następnie z prawej strony zaznaczamy wszystkie checkboxy.
I już wszystko powinno działać!
W programie dostępne jest jeszcze więcej różnych opcji:
- W polu RGB channels mamy możliwość wyboru, jaki sygnał będzie przesyłany na poszczególne kanały, decydując tym samym gdzie umieścimy poszczególne paski LED
- W polu Calibration możemy dostosować intensywność poszczególnych kolorów oraz jasność maksymalną
- W polu Preferences można ustawić priorytet programu, względem innych aplikacji w systemie oraz ograniczyć liczbę analizowanych klatek obrazu na sekundę (oba te parametry pozwalają na zmniejszenie obciążenia komputera przez Amblone. Ja oba te parametry ustawiłem na minimum.
Dodatkowo mamy jeszcze 4 przyciski podłączone do Arduino:
- Przycisk 2 -> przełączenie w tryb stałych kolorów / wybranie kolejnego koloru (kolory zdefiniowane są w kodzie, w tablicy, można je dowolnie zmieniać)
- Przyciski 3 i 4 -> (w trybie stałych kolorów) pozwalają zwiększyć/zmniejszyć jasność podświetlenia
- Przycisk 1 -> powrót do trybu przechwytywania sygnału z ekranu (jest to opcja domyślna)
Dedykowana płytka
Zdecydowałem się również na stworzenie dedykowanej płytki, dzięki czemu koszt projektu zmalał (samo Arduino kosztuje kilkadziesiąt złotych, natomiast Atmega328P-PU wraz z drobnymi elementami, to łącznie nie więcej jak 20 zł). Płytkę wykonałem w programie Design Spark.
Poniżej schemat wykonanego układu (powiększa się po kliknięciu). Każdy z elementów jest opisany co do typu/wartości, tak więc nie powinno być problemu ze zrozumieniem całości. Zastosowany kwarc to 16 MHz.
Schemat płytki PCB gotowej do trawienia – TUTAJ.
Na górnej warstwie trzeba wykonać dodatkowo kilka połączeń przy pomocy kawałeczków cienkiego drutu, które na kolorowym schemacie wyżej są zaznaczone na jasnoniebieski kolor.
W przypadku, gdy nie używamy płytki Arduino potrzebujemy jeszcze jednego elementu, odpowiedzialnego za komunikację szeregową przez USB.
Konwerter taki możemy dostać na ebay z darmową wysyłką z Chin za około 5 zł (to naprawdę działa, paczki dochodzą, trzeba tylko cierpliwie poczekać 2-3 tygodnie), lub na Allegro za 10-20 zł. W obu przypadkach szukamy pod nazwą “USB TTL”
Obudowa
Do całości zbudowałem jeszcze prostą, schludną obudową z plastikowych pudełek, dostępnych w chyba każdym sklepie elektronicznym:
Montaż
Ostatnim etapem jest montaż. Taśmy LED zaopatrzone są w 2-stronną taśmę klejącą, więc wystarczy nakleić je na tył monitora (taśma może zostawić brzydkie ślady, więc można ewentualnie wykonać jakąś ramkę drewnianą / z rurek i na niej nakleić diody). Trochę obawiałem się nadmiernego grzania się wzajemnie telewizora i taśm LED, ale póki co nie ma z tym problemu. “Centralkę” z arduino umieszczamy gdzieś za monitorem – ja pudełko przykręciłem śrubą do otworu z tyłu monitora, który służy do montażu na ścianie, dzięki czemu jest zupełnie ukryte.
Uwagi
- Zastosowane tranzystory BC 639 są w takim zastosowaniu w pełni wystarczające nawet dla większych telewizorów (gdzie diod będzie więcej). W przypadku tworzenia jakichś egzotycznych rozwiązań z ogromną liczbą diod, należy upewnić się, że nie przekroczymy dopuszczalnych parametrów tranzystorów
- Moc zasilacza (jego maksymalny prąd – A) należy dostosować indywidualnie do długości taśm LED. W moim przypadku (około 2m taśmy RGB 5050 300) zasilacz 12V 2 A jest na granicy (układ pobiera prawie 1,9A przy pełnej jasności), dlatego polecam zasilacz 2,5 A, o ile rozmiar telewizor nie jest jakiś przeogromny (wtedy potrzebny będzie mocniejszy zasilacz)
Efekty
Poniżej zdjęcia przedstawiające całość podczas pracy:
Niestety, ze względu na przeszkody natury technicznej nie mam możliwości nagrania sensownego filmu. Problemem jest tutaj rozsynchronizowanie częstotliwości nagrywania i częstotliwości migania diod, co powoduje bardzo dziwne efekty (kolory na nagraniach są zupełnie inne, np. kamera wychwytuje tylko jedną składową koloru)
Czekam na opinie i ewentualne pytania
“Pjona”
Bardzo fajnie opisane i wkoncu ktoś przejrzyście układa elementy i przewodu na płytkach stykowych:)
Fajne, podasz program na atmege ?
Hm.. nie bardzo rozumiem – nie ma oddzielnego kodu na Atmegę. Bez względu, czy jest ona w płytce Arduino czy też na dedykowanej płytce – jest cały czas zaprogramowana tak samo, przy użyciu interfejsu Arduino.
Czyli jak chcemy zrobić to na atmedze to robimy wszystko jak do andurino, tylko podłączamy tą płytkę którą wykonałeś?
Tak, programowanie odbywa się identycznie bez względu na to. Płytka z Arduino to tak na prawdę również Atmega, która ma dodatkowo jeszcze zasilanie, konwerter sygnału i kilka dupereli. Ale “mózg operacji” jest identyczny czy robimy to na oryginalnej płytce, czy też na naszej płytce. Atmegę programujemy normalnie umieszczoną w Arduino, po czym przekładamy do naszej płytki.
Wytrawiłem płytkę, przylutowałem wszystko teraz trzeba atmegę zaprogramować. Czyli z tego co zrozumiałem to instaluję sterowniki do kabla. Podłączam go do seriala. Uruchamiam arduino 1.0.5., importuję bibliotekę, wrzucam kod umieszczony wyżej. Co należy wybrać w Narzędzia-> urządzenia? Coś na atmedze 328 ale co? Wybieram port szeregowy i klikam wypal bootloader czy biorę plik-> załaduj? Nigdy nie programowałem takich urządzeń także proszę o poradę.
Do zaprogramowania potrzebujesz jeszcze programatora oczywiście ;) Bez niego ani rusz. Kabelek USB-TTL służy do komunikacji z komputerem podczas pracy, nie da się nim programować.
Są dwa wyjścia:
1) (droższe, ale szersze zastosowania w przyszłości) kupić oryginalne (bądź też nie) Arduino
2) (tańsze) użyć programatora USBasp, przykładowy Więckowy opis: https://majsterkowo.pl/programowanie-mikrokontrolerow-za-pomoca-programatora-usbasp/ i wiele wiele innych w internecie
Radku, świetny projekt. Złożony i działający! Jedna rzecz mnie niepokoi. Czasami ambient lubi sobie mrugnąć niebieskim kolorem tak o sam z siebie w trybie auto oczywiście. Jakieś podejrzenia czym to może być spowodowane?
@majsterkowo-2e65f2f2fdaf6c699b223c61b1b5ab89:disqus mam dokładnie ten sam problem – udało Ci się dojść co jest przyczyną? Druga sprawa to fakt, że w trybie auto diody (zwłaszcza przy niektórych kolorach) strasznie mrugają – wygląda to tak jakby odświeżanie diodek było bardzo słabe jak w starych monitorach CRT.. Ma ktoś może podobne doświadczenia z tym projektem? Z góry dziękuję za wszelkie sugestie.
niestety nie znalazłem rozwiązania naszych problemów. Słabe odświeżanie występuje również i u mnie. Może się doczekamy kiedyś na jakieś sugestie od autora projektu…. Niestety coraz rzadziej korzystam z tego ambienta bo te mruganie i słabe odświeżanie zrobiło się po kilku dniach naprawdę uciążkliwe…
@majsterkowo-2e65f2f2fdaf6c699b223c61b1b5ab89:disqus dzięki za odpowiedź. Tym razem ja mam dobre wieści – udało mi się rozwiązać problem odświeżania. Niestety wina leży po stronie Arduino Uno i biblioteki softPWM. Prędkość działania tej biblioteki jest za mała i stąd mruganie. Jak użyjesz tylko pinów które mają PWM sprzętowy nic nie mruga. Po przeszukaniu internetu znalazłem alternatywną aplikację (unolight) na Arduino Uno która działa dużo szybciej i dzięki temu problem ze słabym odświeżaniem został zminimalizowany (dalej czasami widać lekkie mruganie ale w porównaniu do poprzedniego rozwiązania jest super!). link do aplikacji: https://code.google.com/p/unolight/
A czy kolega może sie wypowiedzieć czy dorobienie do telewizora LCD dodatkowego (niezależnego) podświetlenia matrycy z tyułu w celu uzyskania jaśniejszego obrazu (przydatne w dzień , jest możliwe ? Obecne jasności wielu tv pozostawiają sporo do życzenia.
przecież jest podany
Świetne ;) Minusem na pewno jest to, że filmy muszą być odtwarzane z komputera i nie ma możliwości oglądania telewizji w ten sposób, ale nie jest to aż tak istotne i przeszkadzające. To jest jeden z tych projektów, jakie sobie cenię na Majsterkowie – jak znikomym kosztem zmajstrować sobie coś, za co byśmy zapłacili gruby hajs :D
Chyba sobie żartujesz. Chyba wole wydać parę złotych więcej niż bawić się w cos takiego.
Zainteresowanym polecam również zobaczenie Adalight. Koszt taśmy do Adalight to ok. 20 dolarów na eBayu, ale za to mamy 25 niezależnych diod, które są sterowane cyfrowo.
Świetny projekt, muszę się kiedyś za coś takiego zabrać, jednak skieruję się chyba w stronę Adalight :)
Ubiegłeś Łukasza, kiedyś pisał (w pierwszym artykule o Arduino, że będzie się brać za Ambilight :)
Oo, nawet nie widziałem wcześniej tego wpisu, teraz dopiero przeczytałem. Ale cóż, jak się czeka z realizacją projektu ponad 1,5 roku to trzeba brać pod uwagę, że ktoś może go zrealizować ;)
Niechce mi się.
Na RPi istnieje podobny projekt, chyba nawet prostszy do wykonania, ponieważ nie ma potrzeby tworzenia żadnej dodatkowej płytki. Listwę RGB podłączamy do RPi i bangla po wgraniu odpowiedniego softu: http://malinowepi.pl/post/57066739715/malinowy-ambilight-30-lipca-pojawila-sie
Znam, widziałem wcześniej ten projekt na Pi, ale tam trzeba się liczyć z 3 razy większym kosztem wykonania, ale i efekt lepszy. Równocześnie nie ma tej przyjemności robienia samemu, wystarczy podłączyć i przykleić do telewizora – to nie dla mnie :) Trzeba samemu zdecydować co się woli.
Witaj, super projekt! 5 ode mnie :)
Powiedz mi tylko jak wygląda zmiana projektu gdybym przypadkowo dostał diody rgb ze wspolna katoda a nie anoda?
Pozdrawiam
Dzięki :)
Jestem prawie pewien, że wszystkie ogólnodostępne taśmy LED są ustandaryzowane i nie trafisz na złą. Wszystkie które widziałem mają “+12V R G B”. Do tych taśm są dostępne (m.in na allegro) popularne sterowniki koloru i inne dodatki przeznaczone praktycznie dla każdego, bez wiedzy elektronicznej, więc dostępne taśmy muszą być z nimi zgodne, tak aby każdy amator mógł to złożyć.
Już się kolego dowiedziałem, że listwa której potrzebuje jest ze wspólną anodą :)
Wykonam taki projekt na pewno :)
Jeszcze raz dziękuję za ten tutorial.
Jakbyś jeszcze mógł opisać dokładniej jak to “wyarduinić”, żeby moje arduino nie przepadło tutaj :D tylko po prostu jakaś atmega była niezaleźna :)
Tutaj znajdziesz wszystkie niezbędne informacje, jak zrobić więcej niezależnych Atmeg http://blog.dulare.com/rozmnazanie-arduino-czyli-jak-zjesc-ciastko-i-miec-ciastko/
Bardzo ważne, by kupić odpowiedni układ: Atmege328P-PU (każda literka jest istotna!)
Konia z rzędem, litrę i gęś temu kto mi podpowie jak zmajsterkować coś podobnego, tyle żeby działało nie tylko z kompa, ale również z dekoderem czy konsolą.
http://docs-europe.electrocomponents.com/webdocs/0892/0900766b80892846.pdf
Kilka takich przyczepiasz na około ekranu.
Ewentualnie można bawić się przechwytywanie sygnału video hdmi, ale do tego potrzebny jest sporo większy scalaczek…
Fajnie wykonane zdjęcia, widac ze robione specjalnie na majsterkowo. Najwiekszym minusem jest to ze jest wymagany komputer do tego. Nada sie do gier albo filmow z kompa. U mnie wszystkie telewizory naja wejscia usb i zawsze filmy z pendraka sie oglada. Szkoda, ze nie pojdzie to z konsola do gier :(
Projekt wart nawet 10! Bardzo przejrzysty opis, schemat płytki gotowej do wytrawienia, zdjęcia efektu końcowego – to się chwali.
Od dawna “chodził” za mną Ambilight i chyba sobie zmontuję taki wg Twojego projektu ;)
Jeśli można, to poproszę o niezbędne materiały na maila.
Bardzo by mnie cieszyło, jakby choć jedna osoba wykonała ten projekt w oparciu o mój opis – wiedział bym że nie na darmo opisywałem szczegóły ;)
Schemat, opis elementów i gotową do trawienia płytkę umieszczę w ciągu kilku dni w treści wpisu, tak aby każdy mógł sobie pobrać :)
Szybka piłka jaki jest koszt całego projektu i czy jesteś skłonny wykonać taki komplecik P&P czyli ile cenisz sobie za robotę jeśli chciałbym zamówić u Ciebie gotowca?
Odezwij się proszę na PW
Raczej nie robię na zamówienie, strasznie dużo czasu mi to zajęło. Mogę zapewnić pomoc gdybyś miał jakieś problemy przy wykonaniu i służyć radą :)
A dałoby się zwiększyć liczbę modułów? Cztery na 4 boki monitora wyglądają nie najlepiej, przydałoby się co najmniej drugie tyle by przejścia między kolorami nie były tak ostre.
W obecnej wersji na Atmedze 328 nie da rady więcej. Albo by trzeba jakiś zewnętrzny generator PWM, albo np. Arduino Mega, które ma większą ilością wyjść (nie jestem pewien, czy SoftPWM obsłużyłby 24 wyjścia, czy nie wystąpi migotanie)
Przyłącze się do pytania Macka, chciałbym sie dowiedzieć cz mogę u CB zamówić gotowca ?
j.w.
Tutaj macie jak go “błyska” :)
http://vimeo.com/30043456#
Bardzo fajnie to wyszło, fajnie było by jednak zobaczyć jak to się zmienia na żywo, a nie tylko na statycznych zdjęciach :)
Tak jak pisałem, w tej chwili nie da rady sensownie nagrać filmu ze względu na efekt migotania na filmie. Będę starał się zwiększyć częstotliwość, może to pozwoli na czyste nagranie.
Radku – moze jednak sie skusisz ? Zawsze gdy pierwszy projekt sie robi wykonuje sie go długo, gdy zrobisz drugi trzeci to nabierzesz wprawy …. :) daj znac. Sam napisałem “raczej nie robie” wiec “na pewno” zrobisz wyjątek :)
mi się mało podoba bo poniewarz jest za mało kabli
Hej, mega świetny projekt!
Jestem zainteresowany zrobieniem czegoś takiego już od dłuższego czasu. Było by naprawdę superancko, gdybyś mógł udostępnić schemat/płytkę do druku i opis elementów do własnej, dedykowanej płytki. :)
Pozdrawiam!
W ciągu kilku dni zamieszczę schematy i opis :)
Na podanej stronce gdzie można kupić układy Arduino Uno jest kilka różnych zestawów, mianowicie: Arduino UNO R3 oraz Arduino Uno SMD R2. Obydwa się nadadzą?
lepiej bierz UNO R3 – w przypadku awarii możesz wymienić Atmegę za grosze i dalej się bawić, w SMD już tego nie zrobisz :)
Wolę jednak oryginał w postaci oryginalnego AMBILIGHTA od Philipsa. Pracują nad tym już wiele wiele lat, ale i tak gratuluję pomysłowości, widać, że idea się przyjęła i ludzie lubią ten efekt w swoim TV.
Jak możesz to zarzuć schematem i krótkim opisem tej płytki ;)
Jeżeli chciałeś to dobrowolnie dać to mogłeś ten wpis powiększyć o te informacje :]
W ciągu kilku dni zamieszczę schematy i opis :)
A jaki zasilacz trzeba kupić, żeby zasilić Atmegę 328? Albo ogólniej: jak ją zasilić? Pozdrawiam
Można zastosować bezpośrednio zasilacz 5V, lub też zasilacz 8-35 V i użyć układu 7805, kŧóry zrobi z tego stabilne 5V.
Ja w projekcie mam zasilacz 12V, który równocześnie zasila diody LED (one są na 12V) i stabilizator 7805 zasilający Atmegę
gdzie jest schemat?
W ciągu kilku dni zamieszczę schematy i opis :)
co to jest za rurka co łączy obydwie obudowy? z czego ją zrobiłeś?
Rurkę kupiłem w sklepie elektronicznym, służy właśnie do tego do czego ją zastosowałem. Do kupienia również na allegro, szukaj pod “wąż karbowany” lub “peszel”
AKTUALIZACJA
Dołączyłem schemat ideowy układu. Schemat płytki zamieszczę niedługo, jak tylko uda mi się go wygenerować do PDF.
Jak dla mnie bez sensu. Kupa kabli, konieczność włączonego komputera kompletnie dyskwalifikuje to urządzenie. Dzisiaj do odtwarzania filmów, zdjęć używa się HDD podpiętego na stałe po USB do TV. Że o oczach już nie wspomnę. To tyle ode mnie.
Kurczę. A ja nie wiedziałem, że dzisiaj ogląda się z dysku podpiętego do TV i dalej wszystko oglądam na kompie :(
A jak się ma sprawa z Linuxem ? Jest jakiś odpowiednik tej aplikacji ?
Niestety w przypadku tego projektu jesteśmy skazani na Windowsa, aplikacja jest tylko na ten system przeznaczona.
Zawsze można uruchomić poprzez “wine”?
AKTUALIZACJA
Dodałem schemat płytki PCB do wytrawienia
A powiedz jak Ci wyszło takie tanie trawienie? ;> Szukam po stronkach ile chcą za taką płytkę i mam ceny od 200 do nawet 700zł.
Dobra. Nieważne już ;) Szukałem chyba na złych stronach ;)
Radku gdy dodaje biblioteke pisze ze SOFTPWM already exist pomimo ze jej tam nie ma.. mam arduinoIDE1.0.5
ok poradziłem z programem sobie, a teraz mi powiedz jak juz chce odlaczyc ambilight od arduino, i potrzebuje kabel usb ttl to jak ten kabel podlaczyc do plytki?
Hej! Bardzo mnie cieszy, że ktoś zdecydował się wykonać projekt :)
Z tej przejściówki usb-ttl powinny wystawać 4 kabelki. Czarny podłączamy do masy (minusa) zasilania, czerwonego w ogóle nie podłączamy(!), a jeden z pozostałych (u mnie był zielony, ale nie wiem czy to standard) łączymy z pinem RXD (PD8) Atmegi. Jak jeden nie działa, to znaczy, że ten drugi powinien być ;)
A gdybyś miał inną przejściówkę, taką z opisanymi pinami, to GND łączymy z masą Atmegi, a do RXD (PD8) Atmegi podłączamy (o ile się nie mylę) pin TXD z przejściówki (jak nie będzie działać, to z RXD połącz ;) ).
Jakby jeszcze coś, to śmiało pytaj.
Czyli tu trzeba kombinacje jakieś na odwrót tak :)?
Powiedz mi bo na płytce widze 5 goldpinów na TTL : 5V GND RX TX i RESET czy muszę podłączyć reset? Większosc przejsciowek USBTTL na polskim allegro ma albo 4 wyprowadzenia bez reseta, albo jak juz ma 5 wyprowadzen to dalej nie ma reseta tylko ma dodatkowe 3.3V.
Napisz mi czy ty u siebie masz podłączone tylko 2 kabelki z USB TTL? GND i RXD?
Tak, TXD (nadajnik) przejściówki trzeba połączyć z RXD (odbiornik) Atmegi.
Od strony Atmegi podłączasz tylko RXD i GND, tak jak napisałem już wcześniej. Pozostałe piny wyprowadziłem na płytce na przyszłość, aby ułatwić sobie programowanie Atmegi. Normalnie ich nie używam.
super, w takim razie nic nie stoi na przeszkodzie aby wytrawic płytkę:)
na schemacie ideowym jest atmega168 rozumiem że wprowadzenia nozek sątakie same jak w atmedze328:)
Dodałbym jeszcze informacje ze biblioteka którą zamiesciłeś u mnie nie działała, musiałem pobrać sobie najnowszą:)
A to ciekawe, nie wiem dlaczego mogła nie działać. U mnie, na dwóch komputerach, na różnych wersjach IDE chodziło ładnie.
Wyprowadzenia 168 i 328 są takie same. U mnie w programie 328 występowało tylko w wersji z bardzo niefajnym układem pinów na schemacie ideowym, dlatego pomogłem sobie przy pomocy 168.
Widzialem to w tv Samsunga,ale tam dostosowane jest do filmow
czy dało by się zrobić coś takiego jak na obrazku ? mam monitor 24` i chciałbym zrobić takie ambient light na podróbce Arduimo Uno z allegro za 55zł czyli ok cena a paski ledowe można by było uciąć i kablami z skrętki sieciowej UTP zrobić
Ten projekt obejmuje 4 niezależne strefy. Jeśli chciałbyś więcej, to zainteresuj się na przykład http://learn.adafruit.com/adalight-diy-ambient-tv-lighting
Ale policz sobie, ile Ci za to wyjdzie, żebyś się nie zdziwił :D. Projekt wykonany przeze mnie, w tej formie kosztował około 120 (produkując własną płytkę, zamiast używania Arduino). W AdaLight licz, że na same diody z 70 zł pójdzie, jak prosto z Chin zamówisz.
Pingback: [PL] Ambilight for PC – Adalight for .NET | Marcin Dembowski
Witam, czy można użyć podróbkę andruino uno, czyli funduino, który na alledrogo kosztuje 45 zł. ?
Tak, nie różnią się one niczym w działaniu.
Świetny projekt :)
Ja właśnie zakupiłem arduino ale bez zestawu z płytkami kabelkami itp, rozrysowałem sobie schemat na płytce uniwersalnej i jutro będę składał całość tylko mam jedno pytanie, można zmienić strefy oświetlenia? Zagłębiłem się w kod programu ale nie umiem rozgryźć gdzie tam są dane dotyczące tych stref a monitor mam bardzo nisko osadzony i niepotrzebne mi podświetlenie dołu, myślałem raczej o czymś takim (obrazek), da radę coś takiego zrobić? Jakby ktoś mógł wskazać miejsce w kodzie odpowiedzialne za to lub ewentualnie go przerobić, byłbym bardzo wdzięczny :)
Właśnie zainstalowałem Amblone i już widzę, że tam się to ustawia, byłem przekonany że w kodzie wgrywanym do Arduino :) jak poskładam układ to wrzucę zdjęcia jak się prezentuje
Tak, wszystko konfigurujesz w programie Amblone. Wrzuć koniecznie zdjęcia, jak skończysz :) Jakby coś, to pytaj. Powodzenia :)
Witam !
Czy można wykorzystać bezprzewodowe zestawy do sterowania zestawem, zamiast przycisków podpiętych do arduino ?
Mam na myśli coś takiego :
http://www.aliexpress.com/item-img/LED-RF-Touch-Controller-for-LED-RGB-light/932092855.html
Hmm..teoretycznie dało by się to zrobić, ale wymagało by zmian i w kodzie i przede wszystkim w układzie. Dość sporych zmian. Więc możesz przyjąć, że nie.
Gotowe :) Coś przy lutowaniu dolnych diod mi strzeliło i nie chcą działać ale pozostałe 3 strefy działają, efekt niesamowity :) na żywo wygląda o niebo lepiej, obudowa prowizoryczna, byle trzymało się to czegoś (wygląda jak bomba :) ) przyciski również działają, są na luźnej płytce ale planuję dokupić obudowę i to jakoś estetyczniej zrobić, świetna sprawa, że można mieć włączone bez komputera na stały kolor, wielkie dzięki Radku za świetny i szczegółowy poradnik! Polecam każdemu :)
Aaa! Zrobił ktoś, zrobił w końcu! Czyli nie napracowałem się na darmo, komuś się naprawdę przydało :D Bardzo się cieszę.
Były z czymś problemy, coś niejasne w opisie? Czy poszło gładko?
Opis wręcz idealny :) Wszystko działało super do czasu jak chciałem naprawić dolne ledy, podpiąłem i… wszystko padło… cholera wie co sie stało, arduino nie odpowiada, próbuję go jakość wskrzesić od 3h i już nie wiem co zrobić…
Może (odpukać) jakoś udało Ci się ubić ATmegę (chociaż to trudne, nawet prawie zwarcia potrafi wytrzymać, sam widziałem). Bo jeśli zupełnie nie odpowiada, to tylko to mi do głowy przychodzi.
Podlaczylem pod usb i swieci sie jasno dioda on i ledwie ledwie dioda L, dostaje tu juz do glowy z tym, internet wogole nie pomaga w tej kwestii
Tzn działa tylko w trybie kolorów stałych, jest na minimalnej jasności a każda próba zwiększenia jasności przyciskiem, kończy się chwilowym jej zwiększeniem i później znów maleje do minimum
Ale odłączyłeś go od ledów i przycisków? Bo mi to wygląda (“ledwie ledwie dioda L”) na to, że robisz jakieś zwarcie. Odłączaj kabelki po kolei, w pewnym momencie powinno zacząć normalnie działać. Może ta dolna strefa zwiera?
“kończy się chwilowym jej zwiększeniem i później znów maleje do minimum” – obstawiam ciągłe resetowanie układu przez wyżej opisane zwarcie.
No właśnie wszystkie kable odłączone, tylko usb i wciąż coś takiego. Teraz zauważyłem, że dioda L jest połączona z 13 pinem więc świeci lekko dlatego, że lekko świeci kolor niebieski na tym właśnie kanale. Nawet po wgraniu innych programów, nic nie śmiga. Chyba odeśle do sprzedającego na wymianę bo nie mam pojęcia co z tym się dzieje…
Udało się, uff… za 10 razem program się wgrał, z kodu wyrzuciłem przyciemnianie ekranu przyciskiem i śmiga :) chyba faktycznie zwarcie na nim było i przyciemniał…. Ale ulga :)
Wrzucam jeszcze jedno zdjęcie z 4 panelami, nie oddaje to jednak wyglądu ‘live’, kolory na żywo są znacznie ładniejsze. Jeszcze raz dzięki za świetny poradnik ;) pozdrawiam !
Też zrobiłem. Dzięki bardzo za świetny poradnik! :) Pozdrawiam!
Te przyciski to są impulsowe czy klikam i cały czas jest zamknięty obwód
Ciągłe. Zwierają cały czas jak trzymasz.
Dzięki
Hmm zrobiłem na szybko test z 1 i 2 kanałem i okazuje się że kolory wariują, mam RGB ze wspólną anodą. Dioda reaguje na zmiany na ekranie jednak kolory zupełnie się nie zgadzają. A połączyłem na 100% dobrze. O co chodzi?
Hm… no nie wiem co mogłeś źle zrobić, trudno mi przewidzieć.
Zacznij od próby kolorów. Włącz sobie calutki ekran na komputerze na pojedyncze kolory (np. w Power Poincie zrób tło prezentacji i odpal na cały ekran, ja tak testowałem) i zobacz jak się zachowuje:
– czy diody mają jeden stabilny kolor, gdy na ekranie się nic nie zmienia?
– czy diody świecą się na taki kolor jak na ekranie? Jeśli nie, to jaki kolor powinien być, a jaki jest?
czy masz może jeszcze jakieś zdjęcia tej płytki stykowej? bo sam schemat z tym co jest na zdjęciu nie do końca się pokrywa. z góry dzięki :)
O kurczaczek, nie możliwe. Bardzo się starałem i wszystko kilka razy sprawdzałem. Gdzie widzisz jakieś niezgodności, co Ci nie pasuje?
Tu wszystkie zdjęcia jakie mam: http://imgur.com/a/DZoLj
Właściwie płytka leży cały czas w tym stanie, więc mogę jeszcze z innej perspektywy zrobić zdjęcia, jakby było poterzba.
niby taki prosty projekt a przerósł moje zdolności do posługiwania się elektroniką :/ a że mam części, to szkoda teraz to zostawić. po za tym, napracowaleś się przerabiając amerykańską technologię :)
ogólnie w schemacie vs. zdjęcia chodzi mi o to że zostały użyte inne płytki, i na zdjęciach jest jednak więcej kabelków (np zółte na 830, zworki, port VIN (sekcja POWER na arduino) jest pusty na schemacie)
z góry dzięki
1) Mała płytka jest inna użyta z racji posiadania tylko takich w tym rozmiarze, ale na to nie patrz – podłączenie jest identyczne, z powodu braku linii + i – na mojej małej płytce musiałem to inaczej sobie rozwiązać. Ale łączenie jest to samo.
2) żółte kabelki na 830 to linia zasilania +12V do wszystkich diod, na schemacie widoczna u góry jako pozioma czerwona linia.
3) Jakie zworki?!
4) Vin jest puste i na schemacie i na zdjęciu, przyjrzyj się dokładnie :) W sekcji POWER są natomiast podłączone 2 niebieskie kabelki na zdjęciu, ale oba są to GND – jeden i idzie do jednej płytki, drugi do drugiej. Na schemacie jest to minimalnie inaczej – jedno GND idzie najpierw do jednej płytki, potem do drugiej (niebieska linia na schemacie na dolnej i prawej krawędzi). To jest dokładnie to samo.
Ogólnie możesz się w pełni opierać na schemacie, jestem mocno przekonany o jego poprawności.
wielkie dzięki za pomoc!
http://prntscr.com/2pjp33 o te zworki. czy one robią coś konkretnego?
i jeszcze jedno. Jaką częścią połączyć zasilacz z płytką? oprócz kabli, oczywiście
A, to nazywasz zworkami :) Tutaj akurat nie są one potrzebne – przyjmij, że ich nie ma.
Rozumiem, że chodzi Ci o połączenie tego 12V z płytką, tak? W najbardziej brutalnej wersji, po prostu odetnij wtyczkę, jeśli takowa jest, odizoluj kawałeczek (6-8 mm) przewodu i delikatnie pocynuj, tak aby zrobić taki sztywny patyczek. I to wepnij bezpośrednio w płytkę.
Bardziej elegancko, ja tak wszystko łączę – kup sobie goldpiny i do nich się przylutuj. Goldpiny to takie metalowe patyczki http://www.dzikie.net/artykuly/podstawy_elektroniki/goldpin.jpg dostępne w każdym elektronicznym sklepie w bardzo różnych wersjach (proste/kątowe, różna długość, jedno i wielorzędowe). Są sprzedawane w takich listewkach po 40 sztuk, odrywasz ile potrzebujesz. Takie najnormalniejsze, proste 10mm, kosztują niecałe 2 zł za listewkę 40sztuk.
jeszcze raz dzięki :) na razie to wszystko ode mnie. jak mi sie uda to też się pochwalę jak inni tutaj.
trzymaj się!
Koniecznie pochwal się jak zrobisz sobie. Koniecznie! Chociaż kilka zdjęć musi być :)
Witam. Nie używam Arduino, byłby ktoś w stanie udostępnić skompilowany wsad w pliku .hex?
Patrzę patrzę i z tego co widzę, to Arduino IDE nie generuje na stałe hexa, więc nie da rady.
Zainstaluj sobie Arduino IDE, to nie boli ;) Możesz bez problemu z użyciem USBasp też wgrać, tak jak normalnie – nie potrzebujesz płytki z Arduino, sama Atmega328P-PU wystarczy.
Jedyne co, to musisz najpierw doinstalować bibliotekę Soft PWM którą tam wrzuciłem, a potem jako Programmer wybrać USBasp
Atmegi328P używałem, ale programator to PonyProg na RS232.
Znalazłem sposób na wydobycie pliku:
http://forum.arduino.cc/index.php/topic,46866.0.html
Jak się nie uda dostać pliku, to spróbuję.
Ok, to wrzucę plik, nie ma problemu :) Ale po poniedziałku dopiero, bo coś mi się całe IDE wysypało, a teraz się uczę do egzaminu :) Ostatniego w sesji :D Uff..
Trochę inną metodą, ale wydobyłem hexa. Mam nadzieję, że będzie działać :) https://majsterkowo.pl/?p=11164
Jaki kwarc dołączamy do procesora ?
O, znalazłeś niedociągnięcie z mojej strony, zaraz poprawię w opisie.
Kwarc 16 MHz.
witaj, elektroniką ostatni raz bawiłem się ładnych latek temu i zabierając się do tego niestety poległem:/ płytkę niby dobrze skonfigurowałem, ale jakbym nie kombinował to taśma nie chce nawet mrugnąć stąd też mam pytania – czy kolejność podłączanych kabelków do taśmy ma znaczenie i z której strony tranzystora wetknąć kabelki? no i zasilanie… zasilacz ma być podłączony do arduino, czy obciąć kabelek (1 żyłka, czy 2) i wetknąć w płytkę?
http://zapodaj.net/f525685967dbd.jpg.html
http://zapodaj.net/574102fbafa33.jpg.html
Hej,
kilka rzeczy wymaga poprawki.
Przede wszystkim coś, czego raczej nie mogłeś przewidzieć – z nieznanych mi przyczyn na tych płytkach uniwersalnych linie zasilania nie są ciągłe, przez co większość układu w ogóle nie dostaje napięcia teraz. Musisz wykonać dodatkowe połączenia za pomocą przewodów, tak jak zaznaczyłem tutaj na zielono https://dl.dropboxusercontent.com/u/5533706/zrzuty/14-03-25_23-00-13.png
Druga sprawa – wszystkie tranzystory są chyba odwrotnie wsadzone (przyjrzyj się dokładnie mojemu schematowi). Każda nóżka tranzystora ma inne zadanie, nie można go sobie odwrócić.
Zasilanie – również zgodnie z moim schematem powinieneś zrobić. Zasilacz 12V, wtyczkę odcinasz. Minus łączysz z GND arduino, Plus podłączasz do taśm LED.
Samo arduino również musi być zasilane, więc musi być podłączone równocześnie do USB w komputerze.
Co do podłączenia kabelków do taśm – ten podpisanie +12 MUSI być podłączony do Plusa wychodzącego z zasilacza 12V. Pozostałe 3 kabelki podłącz dowolnie do środkowych nóżek tranzystorów (jak źle podłączysz, to kolory będą pozamieniane – ale to możesz później prosto poprawić zamieniając kabelki miejscami).
Pamiętaj, że zasilacz musi mieć parametry zgodne z opisanymi w artykule, jak będzie zbyt słaby to się spalić może.
Co do tranzystorów, to wiem, że były odwrócone, po prostu kombinowałem jak koń pod górę. Nie wiedziałem jak się zabrać za podłączenie zasilania. Teraz mam przestój z powodu awarii arduino:/ a jeśli chodzi o płytkę, to byłem święcie przekonany, że na całej linii jest zasilanie, z weryfikacją chyba poczekam do zakupu nowego sprzętu. W razie problemów odezwę się, albo pochwale efektem:)
ale to rozwiązanie to raczej tylko do komputerów, a co z TV ?
zgadza się, ten projekt wymaga odtwarzania filmu z komputera (ekran może być na telewizorze, ale źródłem musi być komputer). Niestety układ klasy Arduino nie jest w stanie w czasie rzeczywistym przetwarzać samemu obrazu i dostosowywać kolorów. W internecie można trafić na projekty z Raspberry Pi, które nie wymagają komputera.
Witam. Zanim zabiorę się do wykonania tego projektu chcę sprawdzić sobie wszystko na stole przy pomocy jednej diody RGB. Ale zanim zabrałem się za podłączenia problem pojawił się przy próbie kompilacji szkicu. Pojawia mi się taki komunikat:
sketch_may20a.ino: In function ‘void setup()’:
sketch_may20a:120: error: ‘TCCR2B’ was not declared in this scope
Dodam, że korzystam z Arduino Leonardo. Jeśli przez to w jakikolwiek sposób muszę zmienić kod programu, proszę o jakieś naprowadzenie :)
Hej,
to przypisanie odpowiada, zdaje mi się, za ustawienie rejestrów sterujących PWM.
Nie znam Atmegi na której bazuje Leonardo, ale tak na szybko z tego co w internecie znalazłem, to w tym układzie nie ma tego rejestru zupełnie, ma on mniej kanałów PWM, jest po prostu wewnętrznie inny. W tej sytuacji raczej nic nie poradzimy, nie uda się tego kodu uruchomić (przynajmniej ja nie potrafię tu pomóc).
Potrzebujesz Arduino Uno, takie jak ja wykorzystałem, wtedy nie będzie problemów. “Podróbki” można kupić dość tanio, a są w pełni zgodne z oryginałem.
Dzięki za ten tutorial! Wszystko poszło sprawnie! :) Ambilight działa bez zarzutów :)
Dzięki za tutorial! Wszystko poszło sprawnie. Ambilight działa bez zarzutów. :)
Super, cieszę się że działa. Dzięki za zdjęcia :)
Mega ciekawe. Jakiś kontakt do autora jest może? =)
Link do G+ mam w profilu Disqus, tam możesz pisać, ale nie wiem w czym mógłbym pomóc osobiście.
a ja jakbym miał to budować to trochę bym to udoskonalił :D mianowicie zamiast kupowania zasilacza bym wykorzystał prąd z atx’a w pc a takie pytanko jeszcze, czy jest możliwość podłączenia większej ilości pasków (większa dokładność)?
W przypadku komputera stacjonarnego – ok, można użyć zasilacza atx. Ja robiłem to pod laptopa i nie miałem tej możliwości.
Nie ma niestety możliwości podłączenia większej ilości niezależnych pasków. Od strony sprzętowej było by to jeszcze wykonywalne (mamy jeszcze wolne 4 kanały soft pwm), ale oprogramowanie na Windowsa zapewnia obsługę do 4 stref.
Mam problem, wykonałem projekt z dedykowaną płytką, wszystko działa oprócz przycisku do przechwytywania obrazu, oraz gdy przełączam się na grę świeci się albo na biało albo na czarno zależnie od ustawień, dopiero w trybie okienkowym pojawiają się kolory, czy ktoś rozwiązał ten problem?
Co do przycisku, to sprawdź dokładnie połączenia i elementy. Nie widzę możliwości, żeby nie działał od strony programowej.
Co do gry – w ustawieniach Amblone na komputerze jako źródło obrazu spróbuj wybrać inną pozycję, gra może pojawiać się w trybie fullscreen jako osobny byt.
panie Radku właśnie przed chwilką skończyłem testować układ i wszystko ładnie chodzi tylko mam lekkie problemy z programem nie potrafię jeszcze go rozgryźć ale z tym dam se rade :)
jutro idę po resztę elementów i podeśle fotki
najbardziej mi odpowiada opcja że można wybrać jaki monitor ma być używany :)
i mam pytanko
są 4 switch’e i jeden czerwony guzik ….. za co on odpowiada ??
bo nie mogę go znaleźć na schemacie :/
wielki + za pomysłowość i poświęconą prace
Skoro nie znajdujesz na schemacie, a jest to duży czerwony przełącznik, to prawie na pewno chodzi o zasilanie ;)
Tak jak pisze Maciek – ten czerwony przełącznik to po prostu włącznik zasilania. Jest wpięty bezpośrednio za zasilaczem.
Czekam na zdjęcia ;)
A jak ja chcę załadować ten kod to pisze: TCCR2B was not declared in this scope
Pomoże ktoś?
masz wgraną bibliotekę SoftPWM
Mam. Ale już wiem co jest grane. Mam Arduino Leonardo (i megę, ale żadko korzystam). Przy Leonardo wyskakuje ten błąd, ale jak z ciekawości wziąłem na megę, program kompiluje się poprawnie.
Małe pytanie.czy do komunikacje można bezpośrednio podpiąć atmege po przez np. max232 oraz czy program ten nie obciąża procesora i nie spowalnia systemu przez to???
Co do podpięcia do rs232 przez max232 – wydaje mi się że powinno to bez problemu działać. Ten konwerter na USB symuluje w komputerze właśnie złącze szeregowe. Ale sam on wielu lat nie mam już żadnego komputera z tym złączem, więc nie odpowiem Ci czy to będzie na pewno działało, ja stosuję te przejściówki USB zawsze.
Program trochę obciąża procesor, kilka procent, musi w końcu analizować non stop cały obraz. Ale u mnie, nawet na słabszej maszynie nie zauważyłem raczej spowolnienia.
Cześć! Jestem tym bardzo zainteresowany, ale mam małe pytanko. Czy dużo byłoby roboty, gdybym chciał zrobić 3 strefy na każdy bok? [ogólnie byłoby 12 stref] Jakby trzeba było się do tego zabrać technicznie? Pozdrawiam i świetna robota!
Hej! W tym projekcie nie ma ani programowej, ani sprzętowej możliwości zrobienia tylu stref. Program Amblone na Windowsa obsługuje do 4 stref maksymalnie, a samo Arduino mogło by też co najwyżej jedną strefę więcej kontrolować (mikrokontroler na więcej nie pozwala). Osobiście wydaje mi się, że taka ilość kanałów (na każdy bok telewizora po jednym) jest wystarczająca aby uzyskać takie przyjemne tło do oglądania filmów.
Gdybyś jednak chciał koniecznie więcej kanałów, to w internecie są inne projekty pozwalające na to (na Arduino jak i na RaspberryPi, ale z wykorzystaniem taśm LED z wbudowanymi układami ws2812 przy każdej diodzie)
witam jestem w trakcie robienia tego projektu. Podczas diałania tama led czsami na chwile zamiga innym kolorem. Czy wina może leżeć w tym że zasilam to prądem z kompa cz słabą jakoscią chińskiego arduino?
U mnie czasami minimalnie mignie kolor niebieski. Nie udało mi się zlokalizować źródła problemu, ale nie jest to specjalnie uciążliwe i nie przeszkadza w oglądaniu, więc nie przejmował bym się tym.
Mam pytanie odnośnie połączenia przejśćiówki usb ttl. Robiłem płytke z atmega a ne arduino wiec podpinam zasilacz i za stabilizatorem mam 5v astępnie jak podepne przejściówkę to tam z usb też jest 5 v.Czy te napięcia i masy sie nie gryzą??Układ coś nie che działać.Działa tylko praca zadawania kolorów przyciskiem ale tez jakoś strasznie miga jak by za mała częstotliwość.Mialeś może podobne awarię?
Zasilanie się nie gryzie. Połączenie mas jest wręcz konieczne. 5V z przejściówki właściwie nie musisz podłączać zdaje mi się.
Ale jeżeli nawet stałe kolory Ci nie działają, to póki co odepnij przejściówkę i najpierw postaraj się porządnie uruchomić stałe kolory. Rozumiem, że na przyciski reaguje, ale kolory nie są stałe tylko coś dziwnego mruga, tak?
Zewnętrzny kwarc 16Mhz podłączyłeś?
Krótkie pytanie.Jakie masz ustawienia FUSEBITów ??Bo może t jest przyczyną migotania u mnie.czy na domyślnych można odpalić układ?Mi domyśle podaje że działa na wewnętrznym oscylatorze
Jadnak przyczyną były złe fuse bity.Już jest ok i układ ruszył jednak nie do końca sprawnie.
Wszystkie przyciski działają poprawnie.przechwytywanie teoretycznie też choć ciężko mi to skalibrować.Brakuje czerwonego(w zadawanych czerwony jest wiec to nie wina taśmy) oraz chyba windows 7 nie do końca chce współpraecować z tym programem.Co pewien czas strasznie muli okienka sie nie zamykają i czasem pojawia się komunikat czy zmienic schemat kolorów bo spada wydajność.Komputer mam dobry i7 i Geforce gtx660Ti.
Mam prośbę czy możesz zamieścic print screena z ustawieniami i kalibracjia Amblone.
Witam, mam problem, coś nie chce mi to działać jak należy, przyciski działają i kolory świecą na taki sam kolor jaki ustawiony jest w kodzie regulacja jasności też działa, problem pojawia się podczas przechwytywania obrazu, taśmy reagują na zmiany na ekranie lecz świecą na całkowicie inne kolory tak jakby losowe, próbowałem konfigurować amblone lecz nic nie pomaga, odpowiednie kolory podpięte są do odpowiednich pinów na arduino tak jak w kodzie, testowałem na win 7 64bit i win 8 32bit, używam klona arduino na atmega 328p ch340t, w czym może tkwić problem?
również proszę o kontakt do autora
pozdrawiam
Chciałem zapytać bo myślę kupić Arduino Uno.Czy,lepiej kupić Leonardo bo jest nowsze,ale nie ma możliwości wymiany At-megi. Oczywiście zawsze można wylutować, gdyby coś.
I czy oryginał,a może klon tylko nie wiem czy z tymi klonami nie ma problemu.
Ty masz z tym doświadczenie to może doradzisz.
Projekt fajny, ale do prawdziwego Ambient Light jeszcze troszkę daleko.
Tu przykład projektu bliższego do oryginału
https://www.youtube.com/watch?v=kf2WNVrerck
Pingback: Francis
Witam! Naprawdę spodobał mi się ten projekt, zbudowałem go na płytce prototypowej, jednak mam problem z przygotowaniem projektu PCB. Czy mógłbym prosić o plik z projektem z DesignSparka? Dzięki wielkie! :D
Pingback: dean
Pingback: Mitchell
A jak podłączyć to do telewizora ledowego?
Pingback: lewis
Pingback: brad
Jestem w trakcie robienia projektu, ale mam problem z ustawieniem kolorów. Mógłby ktoś może wstawić screen swoich ustawień w amblone.
Czy zamiast Arduino Uno mogę użyć Arduino Nano V3.0?
Pingback: casey
Pingback: harry
Jak ten układ podłączyć do telewizora led?
Ten projekt pozwala jedynie na sterowanie z Windowsa, podpinasz do komputera przez USB, do samego TV – nie ma takiej możliwości.
Mam problem diody mrugają oporowo od razu po podłączeniu .kolory też nie bardzo się zmieniają. Wina zasilacza ( z kompa) czy zle podlaczylem tranzystory? Podmieniony zasilacz miganie jest prawie niewdoczne ale kolory dalej nie chca sie zmieniac?
Witam,
Mam problem. Nie wiem czemu ambilight mi nie działa. Np. włączam filmik na youtube i nic. Przy podłączaniu arduino(Mega) do kompa miga tylko lewa strona (kanał nr 4). Czasami włączy się prawa lub lewa strona na niebiesko, ale nie wiem od czego to zależy. Kod do arduino zabrałem z amblone.com pod arduino MEGA. Jest jakaś kolejność podłączania, włączania tego ambilight ??
trafilem tu jako,ze niedawno bo jakies 2-3 tyg temu zaiteresowalem sie wlasnie elektronika oparta na mikrokontrolerach no i do zabawy kupilem klona ardruino UNO oraz Mega, na 1 rzut poszlo wlasnie Ambient light, z tym ze zrobilem cala elektronike jak i diody wewnatrz monitora(oczywiscie diody swieca na zewnatrz), diody kupilem ze wspolna anoda oraz zasilane kolory 2v, 2,5v 3v wiec uzylem dodatkowo 3xLM317T, tranzystory 2n3904. pierwsza proba poszla na UNO, jakis czas bylo dobrze czaem na kilka sekund a czasem minut zaczynaly migotac diody, tak jak niektorzy wspominali bylo to spowodowane wolnym dzialaniem biblioteki PWM a wiec proba 2 na MEGA, wszystko ladnie pieknie dziala dopoki nie wlaczy sie filmu, wtedy delikatnie zaczynaja pomrogiwac, ogladajac film nie jest to mocno widoczne ale po przyjrzeniu sie jednak widac. chyba mnie olsnilo czemu sie tak dzieje, otoz zarowno UNO jak i Mega dzialaja na 16hz czyli petla w programie wykonuje sie 16 razy na sekunde a kazdy film przynajmniej ma 24 klatki na sekunde, wiec ardruino poprostu nie nadaza, za kilka dni dotra do mnie nowe kwarce wiec zobaczymy co sie bedzie dzialo jak zwiekszymy czestotliwosc atmegi :-) a mysle ze moja teoria jest sluszna…
Raczej na 16Mhz co daje 16 milionów operacji na sekundę…
Czy posiada ktoś ustawienie fusów do tego układu ? Mam dziwny efekt, mianowicie wszystko reaguje bardzo ociężale i diody migają, mam wrażenie, że to problem z częstotliwościami.
ja też pokusiłem się o budowę projektu,niestety nie do końca się udało działa ręczne ustawianie podświetlenia(zmiana barwy,zwiększanie i zmniejszanie jasności) natomiast nie działa po podłączeniu do kompa,paski na stałe świecą po dwa paski na stałe w innych kolorach,może ktoś miał podobnie i rozwiązał problem lub może jakiś pomysł na rozwiązanie problemu
Witam też zamierzam zrobić taki projekt tylko się zastanawiam czy te tranzystory nie są za słabe na przykład u mnie najdłuższy pasek LED rgb miałby 50 cm po 6 diod na 10 cm i wydaje mi się że te tranzystory będą za słabe popraw mnie jeśli się mylę z góry dziękuje i pozdrawiam
Witam
Czy posiada ktoś ustawienia fuse bit??
Spoko projekt. 5-tka.
Witam, mam pytanie odnośnie podłączenia LED RGB. Posiadam LEDy które mają wyjścia od góry: + 12V , G, R, B. Z tego co zauważyłem po zdjęciach to nie zgadza mi się rozkład kolorów przewodów z taśmą LED. Wie ktoś jak albo jaki kolor do jakiego pinu podłączyć ? Z góry dziękuję i pozdrawiam.
Witam, mam problem a mianowicie złożyłem układ zgodnie ze schematem i układ nie działa prawidłowo. Wszystkie diody migają, nie reaguje na przyciski oraz na program. W czym może być problem? Z góry dziękuję i pozdrawiam.