Chciałem wam przedstawić mój najnowszy ukończony projekt jakim jest kostka LED 4x4x4. Niestety na forum jest mało takich projektów, a ja usilnie chciałem mieć taką kostkę, aby była bezpośrednio połączona z płytką. (bez plątaniny przewodów na płytce uniwersalnej). Trafiłem na stronę http://www.instructables.com/id/LED-Cube-4x4x4/, z której udało mi się zdobyć wiedzę, materiały i ogólną ideę do stworzenia takiej kostki.
OGÓLNIE: LED CUBE został wykonany według scheamtu:
Schemat ten różni się od oryginału, jest przystosowany do moich potrzeb,a mianowicie:
- zmieniłem złączę programowania na listwę 7 goldpinową
- dodałem nowe 3 przyciski (stop/start , switch i check)
- dodałem włącznik on/off
- usunąłem komunikację rs 232, ponieważ nie potrafię jej jeszcze używać (w przyszłości są plany na 8x8x8 i wtedy będzie już standard rs232 a także są plany na sterowanie pilotem w kodzie rc5)
ZASADA DZIAŁANIA: Projekt składa się z 64 diod LED, połączonych w 4 warstwy po 16 diod, tworząc w ten sposób kostkę w 3 wymiarach. Diody w projekcie specjalnie zostały wybrane dyfuzyjne tak, aby rozpraszały jak najwięcej światła.
Sercem układu jest mikroprocesor ATmega16, taktowany z zewnętrznego kwarcu o częstotliwości 14.7456 MHz. Steruje on przyciskami, tranzystorami, złączem programowym oraz diodami.
ATmega 16 może w jednym momencie wypuścić prąd wielkości 200mA (nota katalogowa), z czego wynika wybór rezystorów o wartości 220Ω, co z kolei daje:
200mA/16 diod = 12,5 mA na diodę. Powstał w ten sposób zadowalający efekt, szczególnie w nocy.
Układ posiada 4 przyciski do komunikacji z użytkownikiem:
~ reset (resetowanie układu)
~ stop/start (zatrzymanie/uruchomienie wybranej sekwencji)
~ switch [wybór sekwencji]
~ sprawdzenie poprawnie wgranego kodu
Anody diod doprowadzone są do nóżek mikroprocesora (8 nóżek na port A i 8 nóżek na port C]. W każdym punkcie lutowniczym 4 diody połączone są w pionie anodami. Katody natomiast są doprowadzone do 4 tranzystorów. Tranzystory sterują całymi warstwami (16 nóżek od każdej katody połączonych jest razem na warstwie). Poprzez zastosowanie "multipleksacji", za pomocą jednego przewodu (z tranzystora), mamy możliwość sterowania aż 16 diodami. Pozwala to nam na kontrole nad pojedyncza dioda bez konieczności stosowania aż 64 indywidualnych połączeń. Teraz już tylko za pomocą kodu możemy wymyślać i tworzyć dowolne sekwencje, jakie tylko możemy sobie wyobrazić
Po uruchomieniu układu włącza się sekwencja startowa, ale zanim się aktywuje, 2 diody kontrolne (zielona i czerwona] sprawdzają czy program został poprawnie wgrany do mikroprocesora. Jeśli nie jesteśmy pewni poprawnej pracy procesora mamy mośliwosc jeszcze raz sprawdzić poprawność wgranego kodu przyciskiem „CHECK”. Gdy kostka się już świeci, możemy przejść do trybu wyboru sekwencji, w tym celu wciskami przycisk „STOP/START”. Przez chwile włącza się sekwencja „czyszczenia kostki” i teraz za pomocą przycisków SWITCH wybieramy dowolna sekwencje. W celu ułatwienia wyboru przy każdorazowym wciśnięciu zapala się dioda sygnalizując numer wybranej sekwencji.
Spośród dostępnych (napisanych sekwencji) najbardziej funkcjonalna jest imitacja lampki nocnej (zapalone wszystkie diody).
WYKONANIE: Jeżeli chodzi o płytkę to została ona zaprojektowana w programie Eagle i wyfrezowana dzięki uprzejmości mojej uczelni na profesjonalnej frezarce. W tym miejscu podziękowania dla Christophorus'a, Macias'a86 za pomoc w projektowaniu płytki, wiadomości można przeczytać na : http://www.elektroda.pl/rtvforum/viewtopic.php?t=2122466&highlight=)
SCHEMAT PŁYTKI W EAGLE
WIZUALIZACJA PŁYTKI W NAKŁADCE GRAFICZNEJ 3D (POV-Ray) PRZOD / TYŁ
Matryca stanowiła kolejny problem, jednak sposób przedstawiony na stronie bazowej projektu spisał się w 100%, należy mieć płytę (np. drewnianą) o zaplanowanych wymiarach i wywiercić w niej otwory (ja skorzystałem z wiertła 5mm i odległości między diodami 2,5 cm, ponieważ nie chciałem się bawić w przycinanie każdej diody, co w sumie i tak nie udało by się do końca zrobić idealnie a dwa, że chciałem zastosować diody o średnicy 5mm). Lutowanie raczej nie sprawiało kłopotów, jedna warstwa to jakieś 15min spokojnej pracy, jednak gdy mamy już całość trzeba się trochę wygimnastykować aby lutować jedną warstwę na drugiej)
PROGRAMOWANIE: Kolejna zaletą układu jest to, że posiada listwę programującą. Możemy wiec w każdej chwili podłączyć programator i zmienić istniejący kod według własnych potrzeb. Programator jaki użyłem do projektu to USBasp. Program napisany w języku C i skompilowany w środowisku Eclipse + Avrdude + WinAvr.
ZASILANIE: Układ został zaprojektowany tak, ze można go zasilić napięciem zmiennym w przedziale od 0-35V, ponieważ posiada stabilizator napięcia +5V zbudowany na układzie 7805.
Muszę przyznać, że elegancko to koledze wyszło oraz samo wykonanie na 5+.
Same sekwencje też są niczego sobie. Już od dawna zbierałem się do zaprojektowania takiej kosteczki lecz chyba sobie odpuszczę i po prostu zrealizuje ten właśnie projekt:)
P.S. PCB zabezpieczone przed utlenianiem? Bo nie bardzo widać to na zdjęciach.
Projekt bardzo ciekawy, wykonanie na wysokim poziomie.
Brakuje jedynie zabezpieczenia płytki przed utlenianiem i jakiejś obudowy np. z plexi.
Można by pomyśleć nad ledcube RGB 16x16x16, ale to już inny temat.
Witam :)
xtreme69 Miło widzieć kogoś z okolicy :) Fakt diody RGB wyglądały by ślicznie i do tego ta paleta kolorów ale jak sb pomyślę ile to czasu i jak bardzo był by rozbudowany projekt to głowa boli :)
Dla autora:bardzo fajne kombinacje,estetyka i wykonanie powalające na kolana :)
Szkoda tylko że nie potrafię programować bo marzy mi się coś takiego
Pozdrawiam :)
Witam bardzo ladna konstrukcja nie to co moja :P też sie do tego przymierzałem ale jednak zrobiłem rgb. Djnatan jeżeli jest wsad to kup sobie na portalu ... programator nie jest drogi i sobie poradzisz.
Wykonanie ładne - podobne do naszego zaprezentowanego Tu z tym że nasze jest w RGB :) przez co plątanina troszkę wiesza.
Zainspirował mnie kolega do zajrzenia w kod i dopisania jakichś animacji :)
Nie bardzo widzę i rozumie potrzebę weryfikacji kodu... Z czym go porównuje?
Sterownie bezpośredni z portu ma pewne ograniczenia - dajesz na diodę (220R) co ogranicza prąd do ok 7mA - nie jest to wiele...
Efekt fajny - szczególnie animacje :)
Djnatan jak masz problemy z programowaniem i nie chciałbyś specjalnie kupować programatora to mogę Ci zaprogramować kość (jak by co to na PV).
Do autora, czym kolega to zasila i ile to zjada prądu?
O ile mnie wzrok nie myli czy płytka nie wyła czasem robiona na CNC ?
Dosyć ciekawą opcją było by dołożenie gniazda USB i wrzucenia do megi Bootloader-a, wykluczyło by to potrzebę korzystania z programatora.
1. Ładne, staranne wykonanie, podoba mi się.
2. Autor pisze o "wytrawianiu na frezarce" - chodzi chyba o wyfrezowanie na frezarce cnc, co z trawieniem nie ma nic wspólnego...
3. Jaki jest sens i zasada działania tego sprawdzania wsadu? Do weryfikacji używa się chyba programatora.
4. Moim zdaniem niepotrzebnie usunąłeś rs232 i mogłeś dać już odbiornik ir - jakbyś się nauczył programować takie rzeczy miałbyś tajną płytkę rozwojową, a nie tylko fajny, ale zamknięty projekt.
Podobno trudno jest zrobić równy sześcian ale tobie się udało. :D
Jestem ciekaw jak by wyglądała kostka 16x16x16 na żarówkach z odległości kilkudziesięciu lub kilkuset metrów
Bardzo świetny projekt dający niesamowite efekty trójwymiarowe.
Wydaje mi się, że w przyszłości dobrze byłoby zrobić jeszcze bardziej rozbudowany i z diodami RGB, trójwymiarowy wyświetlacz, którym można by tworzyć coś na wzór obrazów holograficznych, albo wyświetlać różne modele trójwymiarowe, np modele struktur chemicznych.
Wydaje mi się, że w przyszłości dobrze byłoby zrobić jeszcze bardziej rozbudowany i z diodami RGB, trójwymiarowy wyświetlacz, którym można by tworzyć coś na wzór obrazów holograficznych, albo wyświetlać różne modele trójwymiarowe, np modele struktur chemicznych.
I jeszcze frytki do tego :D
Jeśli coś takiego dałoby się zrobić (żeby można było wyświetlać jakiś sensowny obraz o dobrej rozdzielczości) na tego typu konstrukcji to takie urządzenia by już masowo powstawały, zatem dlaczego nie powstają?
1. Koszty diod - dla kostki 4*4*4 diody RGB kosztują tylko ok. 100 zł a wyświetlić się na tym nic nie da. Nawet jakby zrobić 16*16*16 (co daje zaledwie 4096 diod i cenę ponad 6000 zł za same ledy) to i tak jaką strukturę chemiczną wyświetlisz na takim maleństwie? Metan albo etan? Taniej wyjdzie kupić za 1000 zł 2 komplety modeli chemicznych z prawie 400 elementami - dodatkowo można macać, łatwo obracać i szybko zmieniać struktury lub przeprowadzać "w rękach" reakcje...
2. Przejrzystość - załóżmy że gdzieś znajdziemy diody RGB po 0,50 zł w ofercie hurtowej i damy za nie ~1000 zł (dalej to tylko 16*16*16) - jak zatem będzie widać Ledy w środku przy większym zagęszczeniu? Przecież nieświecące Ledy nie znikają w powietrzu
3. Sterowanie, wgrywanie modeli - multipleksowanie 4096 diod RGB ze zmianami koloru (PWM dla każdej diody) to coś o parę poprzeczek wyżej niż zwykłą kostka LED. Dodatkowo trzeba jakoś wgrywać modele, mieć dużo pamięci RAM...
Da się zrobić, ale lepiej (i chyba taniej) kupić dedykowany ekran 3D lub specjalny projektor z wirującym ekranem (swego czasu widziałem właśnie do wyświetlania modeli chemicznych i innych np. biologicznych - całość składała się z okrągłego wirującego w kuli ekranu i odpowiedniego projektora poniżej - efekt bardzo fajny)
Dziękuję wszystkim za opinie ;) Już odpowiadam na pytania:
łuki_mar44 - > PCB zabezpieczone przed utlenianiem, jednak nie wiem czy wystarczająco, posmarowałem tylko raz obie strony rozpuszczoną kalafonią w alkoholu. Z tego co widać na płytce boki zaczynają mi lekko "czernieć" więc będę musiał coś wymyślić.
xtreme69 -> Obudowa z plexi nie była brana pod uwagę, ale teraz już wiem że jednak by się przydała, strach przy tym że upadnie na bok, albo ktoś zrzuci :cry: jest wielki. 16x16x16 rgb to cudowny temat, jednak trzeba dużo pracy i na pewno pieniędzy żeby ruszyć z takim projektem.
Póki co mam w planach powiększyć nieco rozmiary i zabrać się za 8x8x8 rgb, i na pewno będzie już w plexi.
kataniak1994 -> Jasne, proszę bardzo, najistotniejszym elementem jest wyłączenie bitu JTAG na porcie C. Ustawienia wyglądają przy założeniu, że mikroprocesor pracuje na rezonatorze zewnętrznym 3-16MHz. Do ustawień fuse bitów używam nakładki na avr-dude, AVR Burn-O-Mat, bardzo przyjemna i prosta w obsłudze, więc też Tobie ją polecam:
Ustawienia: (1=zaznaczone)
SPIEN=1 CKOPT=1 BOOTSZ1=1 BOTSZ0=1 reszta bitów na 0 , można jeszcze sprawdzić czy na pewno ustawiły się bity hfuse=C9 i lfuse=FF. Jeśli będziesz miał jaki problem pisz, postaram się pomoc ;)
djnatan -> jak już pisałem wyżej efekt rgb faktycznie byłby cudowny przy założeniu kostki 16x16x16 jednak jest to jak na moje warunki, mało "realne", ale jak najbardziej 8x8x8 rgb będzie już ślicznie wyglądać lub nawet 4x4x4 tyle że w rgb. djnatan nie przejmuj się jak nie umiesz programować, nauczysz się z czasem, a póki co jeśli tylko będziesz chciał zrobić taki projekt również mogę pomoc w zaprogramowaniu mikroprocesora i wysłać go do Ciebie ;)
Jeżeli chodzi i programatory to osobiście polecam USBasp, wygodny, uniwersalny i tani (na allegro wersja smd kosztuje już około 30zł)
mlassota -> jak najbardziej kojarzę Wasz projekt, gdy szukałem informacji to dłużej zatrzymałem się przy tej kostce, jednak stwierdziłem, że na początku nie rzucam się na głęboką wodę (czyt. rgb). Gratuluję wykonania waszej kostki, jest rownież imponująca.
Co do przycisku "CHECK" jest on trochę niepraktyczny, jednakże przy projektowaniu miałem pomysł żeby w sytuacji gdy nie napiszę jeszcze żadnych animacji i nic się nie będzie wyświetlać to sprawdzę to na diodach czy wsad został poprawnie wgrany. Jednak przyznam się że było to dosyć "głupie" posunięcie, ponieważ jak wiemy już przy wgrywaniu wsadu z komputera, wyskoczy komunikat. Pomyślę jeszcze jakie mogę dodać inne działanie tego przycisku.
Co do sterowania z portu, wiem że są ograniczenia i że w moim projekcie "ciągnę" prąd wielkości 7mA i jest to wystarczające. Gdy testowałem diody na płytce testowej między 7mA a 12mA nie ma zbyt dużej "wizualnej" różnicy, a posiadałem w domu akurat rezystory rzędu (220R). Oczywiście można to zmienić i zastosować nawet rezystory (120R) wtedy będziemy mieć prąd maksymalny jaki możemy uzyskać z portów (12,5 mA)
Macias86 -> Plastik w sprayu? Nie słyszałem o takim. Jak pisałem wcześniej pokryłem płytkę rozpuszczoną kalafonią, jednak to za mało?! Jeśli chodzi o ten plastik- to ile to kosztuje i czy mogę teraz spryskać taką gotową płytkę bez odlutowania elementów ?
prosim -> Pewnie, że da radę, widziałem takie projekty na youtube i właśnie pod muzykę, jednak nie znalazłem jeszcze schematu do takiego urządzenia. Na pewno jest w jakimś stopniu trudniejszy od przedstawionego.
xtreme69 -> zasilam to zasilaczem stabilizowanym 12V 1,5 A, bo taki mam w domu jednak układ spokojnie pójdzie na 500mA. Układ jest mało "prądożerny". Płytka wyfrezowana na maszynie CNC. Jeśli chodzi o USB/rs232/rc5/bootloader to wszystko będzie wykorzystane przy kolejnym projekcie, mianowicie 8x8x8, ten projekt był "testowy" chciałem sprawdzić czy będę w stanie go uruchomić i czy będą z nim jakieś problemy, chciałem się ograniczyć do przycisków,matrycy i gniazda programowania, więc założenia zostały spełnione. Oczywiście kolejny projekt będzie już rozbudowany, dzięki za propozycję ;)
damian00771 - > niestety w tym przypadku "jest ryzyko, jest przyjemność", jeśli okazałoby się że spaliła się jedna dioda, będziemy mieli problem z pozostałymi połączeniami, trzeba wtedy kostkę budować od nowa. Jednak diody tak szybko się nie palą, mimo wszystko warto jest każdą po kolei sprawdzić przed lutowaniem.
syntetyczn dran -> nie mam takich informacji, jednak jeśli bardzo Cię to interesuje to napisz, wtedy porozmawiam z moim prowadzącym na uczelni i dowiem się szczegółów.
piotrva -> Dokładnie, chodziło o wyfrezowanie na CNC, wkradł się błąd z pośpiechu (już poprawione). Pytanie odnośnie sprawdzania wytłumaczyłem wyżej (pytanie mlessot'y). Co do zamkniętego projektu masz rację, jednak jak już pisałem wyżej założenia były proste - stworzyć prototyp kostki, ewaluacja przewidziana w przyszłości. Oczywiście mam na myśli: USB, rs232, rc5, bootloader.
galica7 -> Moim zdaniem kostka 16x16x16 zrobiona na żarówkach jest trudna do realizacji, jednak pomysł wydaję się ciekawy ;)
^Rachel -> tak jak napisałeś, można a nawet trzeba zastosować mniejsze rezystory (1/8W) ponieważ aż tak bardzo się nie grzeją, jednak w domowych zapasach miałem tylko (1/4W)
kasamiko -> Of course that can change the XTAL to a different value, but you must then update the code. This is due to interrupt the microprocessor:
Every 1024th cycle cpu, and the counter is incremented, counter every time that reaches 15, it is reset to 0, and the interrupt routine is executed.
14745600/1024/15 = 960 times per second, there are 4 layers to update .. 14745600/1024/15/4 = 240 FPS == flicker free:)
Please substitute the appropriate value and calculate the rest that there is no flicker.
// Every 1024th cpu cycle, a counter is incremented. // Every time that counter reaches 15, it is reset to 0, // and the interrupt routine is executed. // 14745600/1024/15 = 960 times per second // There are 4 layers to update.. // 14745600/1024/15/4 = 240 FPS // == flicker free :) OCR2 =15;// interrupt at counter = 15 TCCR2 =0x05;// prescaler = 1024 TCCR2 |=(1<< WGM01);// Clear Timer on Compare Match (CTC) mode
But I really don't know which part I'm going to change..let say I'll be using a 16Mhz xtal, 16000000/1024/15?
Według mnie autor wybrał najgorszy kolor z możliwych. Do tego zbyt duża jasność, przez co tak naprawdę nie widać, że jest to 3D. Gdyby diody były innego koloru, bądź mniejszej jasności efekt byłby o niebo lepszy.
// Every 1024th cpu cycle, a counter is incremented. // Every time that counter reaches 15, it is reset to 0, // and the interrupt routine is executed. // 14745600/1024/15 = 960 times per second // There are 4 layers to update.. // 14745600/1024/15/4 = 240 FPS // == flicker free :) OCR2 =15;// interrupt at counter = 15 TCCR2 =0x05;// prescaler = 1024 TCCR2 |=(1<< WGM01);// Clear Timer on Compare Match (CTC) mode
But I really don't know which part I'm going to change..let say I'll be using a 16Mhz xtal, 16000000/1024/15?
:(
16000000/1024/15/4 = 260 FPS so will be fine, no flickering.
The system will shine a little faster than mine.
In the code you just change the line
Code:
# define FOSC 14745600
The value of BAUD and MYUBRR can be or can be removed because they are for communication or RS232 USART and I do not use it.
Yours
Dodano po 16 [minuty]:
Sabre wrote:
Według mnie autor wybrał najgorszy kolor z możliwych. Do tego zbyt duża jasność, przez co tak naprawdę nie widać, że jest to 3D. Gdyby diody były innego koloru, bądź mniejszej jasności efekt byłby o niebo lepszy.
Niestety, nie zgodzę się z tobą, jasność diod jest dobrana specjalnie (około 7mA przy diodzie LED Dyfuzyjnej Blue daje wystarczający efekt, na pewno lepszy niż diody przeźroczystej). Nie ma sensu jeszcze zmniejszać jasności. Efekt naprawdę jest zadowalający, ale niestety nie da się tego uchwycić zwykłą kamerą albo na zdjęciach, tylko i wyłącznie wchodzi w grę zobaczenie "tego" na żywo ;). Efekt 3D jest widoczny dopiero przy odpowiednim kącie patrzenia na kostkę, na filmiku faktycznie jest słabo widoczne, ale kostkę mam tak ustawioną na półce że każdy kto na nią patrzy nie ma problemu z widokiem 3D.
Co do koloru diod to raczej sprawa indywidualna, kwestia gustu a o tym się nie dyskutuje ;)
Co do koloru diod to raczej sprawa indywidualna, kwestia gustu a o tym się nie dyskutuje :wink:
Nie chodzi o gust tylko o postrzeganie światła niebieskiego przez ludzkie oko. Nie pamiętam o co dokładnie chodzi, ale oko widzi światło niebieskie jako rozmazane i chyba nieostre, ale nie będę się wypowiadał. Ogólnie jestem pod wrażeniem konstrukcji i jeśli rzeczywiście przez diody płynie tylko 7mA to mogłeś w sumie jeszcze mniejszy prąd puścić przez nie bo świecą bardzo jasno :).
// Define USART stuff // CPU speed and baud rate: #define FOSC 16000000 #define BAUD 9600 // Are used to calculate the correct USART timings //#define MYUBRR (((((FOSC * 10) / (16L * BAUD)) + 5) / 10) - 1)
Set the FOSC to used 16Mhz XTAL and disable MYUBRR.
BR
FOSC is well but MYUBRR line must be active for this variable is later used in the code and will compile error. Better to leave this line unless you remove the code, all variables MYUBRR.
Yours
Dodano po 22 [minuty]:
Modecom601 wrote:
Chciałbym tylko spytać, czy sterowanie taką kostką jest skomplikowane?
Sterowanie kostką nie jest aż tak trudne, mamy 3 zmienne które odpowiadają 3 płaszczyznom.
Jest napisany plik draw.c w ktorych napisane są proste podstawowe funkcje ktore zapalają np. 1 diode, calą linijke (4diody), całą warstwe. Nastepnie w pliku effect.c sa pisane efekty ktore bazują już na tych funkcjach. Przykładowo zapalenie jednej diody to linijka:
Code:
void setvoxel(int x, int y, int z)
gdzie x,y,z, to odpowiednie płaszczyzny, dajemy tam liczbe od 0 do 3 i pali nam się wskazana dioda ;) i tak dalej aż po funkcję które są naprawdę skompliownane np. efekt śruby ;)
Witam.
jestem początkujący, mam pytanie co do wsadu do atmegi.
Programuję w Bascomie, przeglądając kody źródłowe widziałem że pliki się "zazębiają" gdzie mam je skopiować żeby wszystkie poprawnie się wgrały do układu?
Witaj
Dzięki za odp.
Źle zrobiłem tą przykładową kostkę 3x3. PRzeglądając dokładniej zdjęcia schematu i boardu już wiem jaka jest zasada sterowania diodami ;)
Jeszcze raz gratulację za wykonanie ;)
Pozdrawiam
Programuję w Bascomie, przeglądając kody źródłowe widziałem że pliki się "zazębiają" gdzie mam je skopiować żeby wszystkie poprawnie się wgrały do układu?
Pliki należy umieścić w jednym folderze, i w głównym pliku main należy je "dodać" dyrektywą
Code:
$include
Dając polecenie
Code:
$include
Bascom przeszukuje katalog z kompilowanym plikiem. Jeśli chcesz aby szukał w innym katalogu (np. katalogu wewnątrz katalogu z kompilowanym plikiem) to wpisujesz np.: