4.7
230 röster
Skapat
2011-11-23
Senast ändrat
2015-05-14
Visningar
27 180

För några år sen byggde jag en ljusstake att ta med till Dreamhack, den gick ut på att jag bytte ut de vanliga glödlamporna i en klassisk sjuarmad ljusstake till blåa lysdioder och fixade så att varje ljus gick att styra individuellt för att på så sätt skapa intressanta mönster.

Den gamla hade blåa lysdioder och styrningen till den satt på ett separat kort utanför vilket gjorde det lite osmidigt och fult då det krävdes att nio kablar (spänning, jord och styrning) skulle ledas ut från ljusstaken och kopplas in på en kopplingsbräda.

Min nya ljusstake är bättre på alla vis, istället för att ha enfärgade ljus bytte jag ut alla mot RGB-lysdioder och kan på så sätt skapa alla färger, inte bara en olika stark blå. Jag valde att gå all in och designa egna kretskort för att få det så proffsigt som möjligt, visst blev den säkert alltför dyr men det har varit roligt på vägen och det är det som räknas. För att få ner storleken på kretskorten valde jag att köra med enbart ytmonterade komponenter.

Ett krav på ljusstaken har alltid varit att den ska gå att köras fritt från datorn, den styr sig själv och det enda man använder datorn till är att skriva programmet. Hade man styrt ljusstaken från datorn hade man kommit undan med en "dummare" ljusstake, nu har den en inbyggd mikroprocessor som har inbyggda ljusshower och styr varje enskilt ljus.

Under åren har jag haft tre olika versioner av ljusstaken så jag kan dra lite historia för den intresserade
Bygget handlar alltså om versionen under DHW11.

DHW08: Hann precis inte klart med ljusstaken utan fick den klar efter Dreamhack, trots att jag försökte in i det sista under natten innan jag skulle åka hann jag inte klart.

DHW09: Mjukvaru-PWM från en extern ATMEGA168, denna var väldigt hastigt ihopsatt och jag hade inte satt mig in i hur man fixar hårdvaru-PWM så mycket av processortiden gick åt till att skapa de olika toningarna av ljusen, man har alltså inte så mycket tid över till att skapa avancerade program och utföra beräkningar för dessa.

DHW10: Bytte ut den lösa ATMEGA-processorn mot en Arduino Pro Mini. En Arduino består visserligen av en ATMEGA-processor så det är fortfarande samma arkitektur men Arduino har en väldigt smidig utvecklingsplattform vilket gör det snabbare att utveckla program. Arduino:n är dock större än den separata ATMEGA-kretsen så även denna höll till på ett separat kort utanför ljusstaken. Ingen hårdvara förändrades inne i själva ljusstaken. Detta åren hade jag gått över till hårdvaru-PWM vilket gjorde att jag kunde ha mer avancerade toningar på ljusen.

DHW11: Egendesignade kretskort med ett huvudkort och sju slav-kort. Huvudkortet innehåller en mikroprocessor (ATMEGA328) och jag valde att göra mitt kort Arduino-kompatibelt för att kunna använda den smidiga utvecklingsmiljön. Varje slavkort innehåller en egen IC-krets som tar hand om PWM-styrningen för just sitt ljus så huvudprocessorn behöver inte bry sig om styrningen av ljusen mer än att skicka en färg till dem. Varje slavkort har en ingång för färger och en utgång för att koppla vidare till nästa kort, alla kort sitter alltså i en lång kedja och processorn behöver bara skicka 7 x 3 (RGB) värden så skyfflas allt vidare automatiskt till nästa kort. Att koppla korten i en slinga reducerar antalet kablar som behöver kopplas in i huvudkortet och det behövs då det är väldigt trångt om utrymme inne i ljusstaken där alla kort nu får plats.

Film på resultatet: http://www.youtube.com/watch?v=LsmoE-gHsVY
Varning för skum musik, muta ljudet bara.

Gamla ljusstaken

Hade inte många bilder på den gamla ljusstaken in action så den här i dagsljus får duga. Den här ska alltså skrotas och göras om till framtidens ljusstake.

Kopplingsschema huvudkort

Det mest avancerade kretskortet är huvudkortet men det har inte så jättemånga komponenter egentligen. Eftersom jag ville göra kortet Arduino-kompatibelt kollade jag upp vad en Arduino Pro Mini innehåller, kopplingsschemat för det är open source så det är bara att kopiera de delar jag behövde.

Nere till vänster ser man strömförsörjningen med lite filterkomponenter. I mitten är själva processorn med de komponenter som behövs, dessa är en resistor för att hålla den ur reset och en resonator som skapar klockan vilket avgör hur snabbt processorn ska arbeta. Till höger syns anslutningskontakterna, en är för att programmera processorn så den blir Arduino-kompatibel, en är för att programmera den från Arduinomiljön och den sista går till ljusen.

Kopplingsschema slavkort

Detta kort är inte särskilt avancerat. En krets sköter allt i princip, den behöver bara tre motstånd för att begränsa strömmen till lysdioderna. Den har sen en ingång och en utgång som består av fyra kablar; spänning, jord, klocka och data.

Layout huvudkort

Så här blir kortet sen när man har gått över till designläget och flyttat runt alla komponenter så de sitter där man vill ha dem. Den här delen av designen tar rätt mycket tid då man måste placera komponenterna så att alla ledningsbanor får plats. Eftersom kortet skulle få plats inuti ljusstaken var bredden väldigt begränsad men eftersom man har tillgång till två sidor av kortet går det att dra ledningarna på andra sidan processorn som tar upp nästan all plats på bredden.

Layout slavkort

Slavkorten kan vara lite bredare än huvudkortet då de är designade att sitta inne i ljusen där det finns mer utrymme. Jag skulle kunna ha gjort de lika långa som ljuset men det kändes onödigt då det inte behövdes.

Korten är designade i programmet Eagle som är gratis för design av mindre kretskort. Filerna skickades sen iväg till BatchPCB.com för tillverkning.

Komponenter från Elfa

Under tiden korten tillverkas beställde jag små komponenter, Elfa är inte billigast men är smidigt då man inte måste beställa 50 komponenter minimum och andra jobbiga begränsningar.
Komponenterna är motstånd, kondensatorer, resonator och lysdioder för status- och power-indikation.

Övriga komponenter

De övriga komponenterna beställde jag från Sparkfun.com i USA, de har väldigt bra priser men säljer inte småkomponenter som de jag beställde från Elfa.
Komponenterna är diodstyrningskretsarna (WS2801), diverse kontakter med kablar samt mikroprocessorn som jag inte fick med på bilden.

Kablar

Genom jobbet fick jag tag på passande kablar som suttit i TV-apparater som blivit skrot. Den till vänster är för programmering och de högra är de som går mellan ljusen. Det går åt sju signalkablar, det går en från huvudkortet upp i första ljuset och sen ner tillbaka i ljuset för att gå vidare upp i nästa osv.

Korten är här

Då man genom BatchPCB beställer på så vis att de samlar många beställares ordrar på ett större kort och skickar de till en fabrik tar det mycket längre tid än att beställa de från en fabrik. Att beställa från en fabrik brukar dock innebära att man måste beställa minst 100 kort och det går sen på nån tusenlapp. BatchPCB var så sjysta att det skickade dubbelt så många kort som jag beställt och jag hade beställt två huvudkort samt tio slavkort så jag skulle kunna misslyckas med några, med 24 kort totalt fanns det stora utrymmen för misstag.

De båda korten

De övre kortet är då huvud- och de undre är slavkortet. Det är nog lite svårt att förstå skalan på korten men de är rätt små:
Huvudkortet är 2 × 0.5 tum (ca 5 × 1.3 mm)
Slavkortet är 1 × 0.5 tum (ca 2 × 1.3 mm)

Det jag såg när korten kom var att etiketterna för komponenterna inte syntes då jag gjort de för små, det får jag tänka på om jag beställer kort i framtiden.

Huvudkortet med komponenter

Så här ser det ut efter jag lött på alla komponenter, har man inte lött förr är det här nog inget man ska ge sig på då det handlar om enbart ytmonterade komponenter. Jag löder i mitt arbete så jag har fått in vanan.
För den intresserade är småkomponenterna av storleken 0603, det betyder att de är 1.6 × 0.79 mm så det är lite pillrigt.

Programmeringsdags

Den undre kontakten används för att programmera ATMEGA-processorn med en Arduino-bootloader så att man sen kan programmera den enkelt genom den övre kontakten. För att programmera bootloadern behöver man en AVR-programmerare, jag använder en AVRISP mkII då jag hållit på med AVR-kretsar tidigare. När man programmerat bootloadern går det att programmera processorn genom den övre kontakten som gör genom vanlig seriell kommunikation, det ger en även möjligheten att skicka eller ta emot data via en serieport på datorn vilket kan vara smidigt för debugning.

Testkörning av huvudkort

Testar så att huvudkortet funkar, det första jag gjorde var att skriva ett program som blinkar med den gröna lysdioden. Status-dioden används dock inte senare men jag tänkte den kan vara bra att ha precis som power-dioden för att se att allt står rätt till.

Slavkortet med komponenter

Inte många komponenter på det här kortet så det tog inte lika lång tid som huvudkortet. Jag valde att ha utgångarna för lysdioderna i form av lödytor då jag inte var säker på vilken typ av diod jag skulle använda.

Alla slavkort färdiga

Tyvärr är det ju dock väldigt många slavkort så tillsammans tar det ett bra tag att fixa alla. Hemma håller jag dessutom till på spisen under köksfläkten vilket inte är den mest ergonomiska arbetsställningen.

Test av slavkort

Då de små dioderna jag tänkt använda är just små och inte har några ben testade jag med andra dioder först för att se så allt funkar. Ett enkelt program som tonar mellan röd, grön och blå används för att se så alla färger funkar.

Test med två kort

Testar så vidareskickningen av datan funkar och kollar även hur det skulle se ut med glaset på runt ljuset. Jag var här inte säker på vilken typ av diod jag skulle använda och för stunden lutade det mot de här större dioderna då de var lättare att hantera.

Glaset kommer av originallamporna där jag brutit av sockeln, mer om det lite senare.

Lysdioder

RGB-lysdioder, man kan se de tre olika dioderna som de består av. Svårt att se storleken på bilden men dioderna är endast 3 × 3 mm.

Den slutgiltiga lysdioden

Till slut bestämde jag mig dock för att använda de små lysdioderna ändå och här har jag lött på de fyra kablarna som behövs, en för alla anoder (positiv pol) och tre för varje katod (negativ pol). En klick smältliv på lysdiodens baksida stabiliserade sen det hela efter bilden togs.

Tillverkning av glas

På min förra version av ljusstaken fixade jag glasen genom att försiktigt försöka bryta bort sockeln från glaset för att sen ännu försiktigare såga i glaset så att man får in en lysdiod. En glödlampa är inte öppen i botten utan är sluten. Det här var dock väldigt svårt och krävde många försök och slutresultatet bestod sen till viss del av fula glas som var fastlimmade på ljusstaken. Här är ett misslyckat försök där hela glaset sprack.

Nytt försök

Jag såg att det nu för tiden fanns LED-lampor att köpa och eftersom de inte kräver vakuum tänkte jag att de kanske dels är gjorda av plast så de inte är lika ömtåliga men även att de förhoppningsvis var öppna i botten.

Här går jag in från botten för att förhoppningsvis kunna få bort sockeln utan att glaset spricker.

Lyckat försök

Enligt metoden i föregående bild lyckades jag böja bort bitar av sockeln och till slut kom kan åt att enkelt dra ut den ursprungliga lysdioden då de lyckligtvis var öppna i botten som jag hoppats på.

Färdiga ljus med kretskort

Så här sitter sen kretskortet fast i ljushållarens insida, det är fastsatt med smältlim för att inte skramla runt inne i ljuset. Lysdioden sitter inte fast med något mer än kablarnas styvhet.

Montering av glas

Jag kom på att jag även kunde spara en bit av socken för att få en snyggare montering, nu kunde jag använda den ursprungliga gängningen i lamphållaren för ett mycket snyggt resultat, det var inget jag planerat utan en glad överraskning.

Huvudkortet monterat

Här sitter huvudkortet monterat i ljusstakens bas, det få precis plats och inte ens programmeringskabeln kan sitta ansluten när hålet är övertäckt så jag gjorde ett litet hål för programmeringskabeln senare.

Ena täckpappen

En av sidorna täckta, skar ut passande bitar av kartong då originalbitarna var av nått konstigt sprött material som inte gick att göra hål i.

Strömförsörjning

En USB-kabel monterades för att strömförsörja ljusstaken när den körs i fritt läge. USB-kabeln används enbart för strömförsörjning så ingen programmering är möjlig med denna även om det hade varit smidigt men det hade inneburit att jag skulle behövt klämma in fler kretsar för USB -> RS-232-konvertering.

Kod

En bit av koden som visar två av effekterna. Jag använder ett bibliotek som heter fastspi som skickar seriell data till ljusen över mikroprocessorns hårdvaruport vilket belastar processorn betydligt mindre än så kallad bit-banging.

Mikroprocessorn är som tidigare nämnt helt fristående från datorn och kan köras med exempelvis en mobiltelefonladdare med USB-kontakt. Efter man skrivit all kod kompileras den och sparas i processorns flash-minne för att kunna utföras så fort mikroprocessorn får ström.

Sluttest

Här har vi ett sluttest där jag kodat en regnbågseffekt som flyter över ljusen. För tillfället har jag 11 olika effekter, bland annat eld, åska och polis-ljus.

Film på hur effekterna ser ut en efter en, programmet jag kör sen slumpar istället mellan de 11 olika effekterna.
http://www.youtube.com/watch?v=LsmoE-gHsVY
Varning för skum musik, muta ljudet bara.