4.8
830 röster
Skapat
2011-01-18
Senast ändrat
2011-01-19
Visningar
55 291

Jag ska nu försöka beskriva ett projekt som pågått under mer än två års tid.
Sommaren 2008 undrade min sambo om vi inte skulle skaffa en stereo. Min mindre genomtänkta kommentar var ungefär "Äh, jag kan väl bygga en istället." Så, nu snart två och ett halvt år senare så är projektet äntligen klart!

Det mesta av arbetet har handlat om saker jag tidigare inte haft några direkta kunskaper om. Jag hade väldigt begränsade kunskaper i elektronik (jag har väl kopplat ihop någon lampa nån gång, men jag kunde egentligen ingenting om elektronik). Jag hade bara kommit i kontakt med Linux en gång (en kompis fixade en webbserver åt mig för många år sen), än mindre hade jag försökt mig på att programmera något såhär stort. Så i mångt om mycket har det varit ett projekt där jag varit tvungen att lära mig nya saker hela tiden, vilket är en stor anledning till att det tagit så lång tid...

Jag vill också passa på att ge ett jättestort tack till AMD_Rulez här på SweC. Han har mer eller mindre bokstavligen lärt mig allt jag kan om elektronik och är den som programmerat PIC-processorn åt mig. Så kort sagt, utan honom hade jag inte ens kommit i närheten av att få ett såhär bra slutresultat!

Hoppas ni gillar det!

Lite info om Retrostereo:

Hårdvara:
Gigabyte GA-GC230D (mini-ATX, atom)
picoPSU-90 12V PSU
Kingston 1024MB DDR2 PC4200 533MHz
Seagate Barracuda 7200.10 80GB
Samsung DVDRW 8X Slim Slot-in (SN-T083A/BEBE)
D-link DWA-140
Sweex BT remote (MM001)
Elektronik från Elfa och Kjell&Co

Mjukvara:
Debian Linux (sid, 2.6.31-1-386)
XMMS2 0.7 Dr.No
LCDproc 0.5.3
Python 2.6.6
och såklart, massa med egen Python-kod!

UPDATE:
Det är många av er som frågat om ni kan få kod och annat smått och gott kring projektet. Här kommer lite godis. Det är helt ok att använda materialet om ni har egna projekt, typ creative commons eller gnu eller nåt sånt! =P

Hör gärna av er om ni gör det, vore jättekul att veta om den fått fler användningsområden, och jag hjälper gärna till om ni har frågor eller så!

Mask för PCB-etsning: http://retrostereo.shareholder.se/pcb-mask.png
Källkod för PIC-processorn: http://retrostereo.shareholder.se/pic-kod.7z
Kopplingsschema: http://retrostereo.shareholder.se/kopplingsschema.sch (Kräver Eagle http://www.cadsoftusa.com/)

Backlight

Såhär ser alltså LCD-skärmen ut utan glasskärmen. Det som finns kvar är alltså TN-backlight'en.

Invertering

Men, en grön LCD-skärm ser ju inte särskilt retro ut (eller ja, typ 80-tals retro möjligtvis). Men under tiden jag läste om LCD-skärmar på nätet för att kunna koppla ihop den så råkade jag också se att man kan invertera skärmen genom att rotera polariseringsfilmen på den.

Så, för att inte förstöra min fungerande LCD (som dessutom gick på nästan 500kr) så fixade jag en enklare 20x2 för nån hundring att testa med. Polariseringsfilmen var fastklistrad på glaset, men med lite våld så fick jag loss den. Klistret på glaset lossnade lätt med lite Isopropyl, men satt stenhårt på filmen.

Testet lyckades

Såhär blev alltså testskärmen. Tyvärr ville den bara invertera om man vred den 90 grader (eller vände, men då blev det fult pga klistret som var kvar), så jag klippte sönder polariseringsfilmen.

Baksidan

Startskottet går

Eftersom båda jag och sambon gillar "saker från den gamla goda tiden", så bestämde vi oss för denna fina stereo, en Sanyo DC-70 (på utseendet gissar vi att den är från 50-talet). Köptes på Blocket för 350kr i fullt fungerande skick.

Undersidan

Galler både över och under, så ventilationen var inget problem.

Innanmätet

Mycket gammal och dammig elektronik på insidan, långt före digital teknik och micrprocessorer med andra ord. Notera den totalt monstruöst stora vridkondensatorn för radiomottagaren nere till höger.

Extra säkringar

Snällt att inkludera lite extra säkringar, verkar dock som att de aldrig behövdes.

Framsidan borta

Det tog att ta att få loss all elektronik, jag fick vara systematisk eftersom alla skruvar, muttrar och annat skulle återanvändas. Här ser man också hur tunern fungerar; ett snöre...

Ny färg

Var tvungen att öppna den och måla dit lite ny röd färg, den andra höll på att falla av.

Gigabyte GA GC-230D

Efter lite mätande bestämde jag mig för vilken hårdvara jag ville ha. Moderkortet, kanske lite omodernt nu, var det senaste när jag köpte det!

Viktigt var också att jag behövde en seriell- och en parallell-port. Då var tanken att jag förmodligen kommer använda någon eller båda för att kontrollera knapparna och potentiometrarna.

picoPSU, världens minsta nätagg (fortfarande?)

Ju mindre desto bättre. Detta är på 90W, och hade framförallt en adapter som kunde placeras utanför stereon, för att slippa den extra värmen.

A new computer is born.

Ungefär här slutade mina kunskaper för projektet. Jag har nog plockat ihop 6-8 stycken datorer genom åren, och varit inne och rotat i tio gånger så många säkert. Men den delen av projektet var klar i och med detta.

Så det är här som min mentor i elektroniklära kliver in.
Jag slängde ut en fråga i forumet om hur i helsike jag skulle kunna få till vridkontrollerna på stereon. AMD_Rulez svarade och föreslog att jag skulle göra ett eget kretskort med en PIC-processor som kunde sköta alla knappar (jag antog såklart att det var ett skämt).

Men när jag började diskutera mer med AMD_Rulez visade han sig vara så extremt hjälpsam (och dumdristig?) så han kunde tänka sig att inte bara programmera en PIC till mig, utan även hjälpa mig att göra hela kretskortet.

De första trevande försöken

Hade inte den blekaste aning om hur jag skulle få knapparna att fungera. Men hittade en tutorial på nätet för hur man kunde koppla knappar via seriell porten och få dem att funka med ett Winamp-plugin (http://www.danielandrade.net/2005/11/17/howto-external-winamp...).

När jag lärt mig lite mer om seriell porten så började jag laborera lite, detta är det första försöket. Det jag gjorde var helt enkelt att koppla in den i datorn, och genom ett Java-program se när jag kortslöt vissa kablar. Testet gick utmärkt, så nu visste jag i alla fall att knapparna inte skulle vara omöjligt att fixa, potentiometrarna (de man vrider på) var fortfarande ett problem.

Slimline SATA

Ett av "kraven" med bygget var att stereon skulle kunna spela upp CD-skivor (jag sa ju att vi gillar gamla saker). Efter mycket funderande kom jag fram till att det måste vara en slot-in spelare (dvs. utan kaffekoppsstället, utan en där man skjuter in skivan genom en springa), och pga. placeringen så fick det bli en slimline.

DVD-spelaren var inte så svårt att hitta, däremot var det ingen som sålde slimline SATA-kontakter. Denna fick beställas via eBay från Hongkong. Fick den dock för under hundralappen inkl. frakt.

Första starten

Kände att jag ville testa så alla delar fungerade som de skulle.

High tech!

Köpte ett blankt kretskort på Kjell&Co eftersom det hade precis rätt storlek, sen slet jag bort kopparytan (Kunde inte används plexi eftersom det behövde tåla lödning). Var mäta upp alla hålen med linjal, hade ju redan ett facit på det gamla kortet.

Vippkontroller

De fyra vippkontrollerna som satt på framsidan fick jag återvinna, eftersom det var lite svårt att hitta ersättare till dem. Såhär såg de ut när jag lött bort dem från det gamla kretskortet.

Leverens från Elfa

Ungefär samtidigt gjorde jag mitt första besök på Elfa för att köpa alla delar. Som synes hade jag under tiden vi arbetat också kommit fram till att jag ville ha en LCD-skärm till stereon, så den köpte jag samtidigt. (Jag tänkte att om jag lyckas med kretskortet måste ju en LCD-skärm vara rena barnleken!)

Som ett brev på posten

Eftersom jag ville förstå hur det hela fungerade så ville jag vara så delaktig som möjligt. Jag vet inte hur länge jag och AMD_Rulez satt på MSN och pratade om hur elektronik fungerar, men jag läste utan problem igenom Electronics for Dummies under den perioden.

Säg att det tog 1-2 månader totalt kanske, sen hade vi kommit fram till en färdig design i Eagle för kretskortet (och jag förstod faktiskt hur det fungerade). Så, en tid senare kom ett brev på posten! Ett kretskort och en PIC från min läraromästare.

Pilligt värre

Så, det var bara att sätta igång och borra många små hål och sedan löda fast komponenterna på kortet. Lagom pilligt var det.

Färdigt kretskort

Såhär blev alltså kretskortet, lite av kärnan i projektet (lite som modermodemet i datorn ni vet).

Det består av en PIC16F690 (den större processorn) som kan läsa av läget av sex knappar (av/på) samt fem vridpotentiometrar (0-255) som kopplas in på de två raderna av pins. Till höger är en MAX232 processor som sköter kommunikationen över seriell-porten till datorn.

Kretsen drivs med 5V spänning från en molex, den har "spänningsskydd" i form av motståndet och kondensatorn uppe i vänstra hörnet och har inbyggd on/off switch via transistorn där bredvid. On/off kan togglas via en pin på seriell-porten.

Monterat och klart

Första testet av kretskortet

Så, allt ikopplat började jag testa kretskortet. Första problemet visade sig vara att jag inte visste hur jag skulle få det att fungera i mjukvaran. Det ville helt enkelt inte i Java. Vår misstanke var att Java inte skickade rådatan utan gjorde något med den. Jag bestämde mig för att låta det ligga ett tag.

4-läges vridströmställare

Denna var till för att växla mellan fyra olika lägen på originalstereon. Jag kopplade den så informationen förs över "binärt" med två bits till kretskortet, så lägena är 00, 01, 10 eller 11. På det sättet behövde jag bara använda två knapp-platser på kretskortet för denna istället för fyra.

Mute

Sen var det dags för mute-knappen från framsidan.

Knapparna löddes på plats

Fäste dem genom att löda fast dem. Det gick inte att böja fötterna på dem och det var tvugna att sitta rätt bra. Även lött på sladdar för testning.

Potentiometrar

Så dessa var tänkta att kontrollera volym, balans, bas, diskant och tunern. Till skillnad från knapparna, som jag kunde återanvända så var jag tvungen att byta potentiometrarna eftersom två av dem var ganska oxiderade. Så dessa köptes nya på Elfa.

Slot-in

Efter mycket mätning som kom jag fram till var på fronten min slot-in CD skulle sitta. Det mest diskreta blev under kontrollerna.

100% handborrad!

Så, dels eftersom jag inte äger någon borrmaskin, och dels för att jag ville ha full kontroll, så handborrade jag alla hål för CD-springan.

Det börjar likna en springa

Efter hålen så sågade jag ut mellanrummen med en figursåg. Sedan tog en lång tids fräsande med min dremel vid för att jämna ut det hela.

Nästan klart

En fin springa. Arbetade vidare ett tag efter detta med våtslippapper så kanterna blev helt jämna. Man vill ju inte att CD-skivan ska bli repig när man skjuter in den!

Stereon klar!

Såhär blev den!

Retrostereo kan spela upp filer lokalt eller över nätverket (t.ex. från min NAS-server), den streamar internet-radio, och kan spela CD-skivor för vilka den själv söker upp låtnamn, artist osv. från Musicbrainz webbservice. Det finns en huvudmeny som kontrolleras via fjärrkontrollen för att göra förändringar i spellistan, lägga till mappar eller filer, byta låt eller ställa in vilken equalizer-kurva man vill använda. Tunern fungerar precis som förut men söker istället av en spellista med internet-radiokanaler.

Kontrollerna:
On/off uppe till vänster.
Bas, diskant, balans och volym i kontrollerna ovanför CD-springan.
De fyra vipp-kontrollerna styr just nu sortering av spellistan samt om spelad eller återstående tid ska visas (två av dem har jag inte kommit på vad de ska vara till än... några förslag?).
Näst intill hårddiskindikatorn sitter tunern samt en mute-knapp.
Nedre högra hörnet har vi till sist 4-läges strömställaren som växlar mellan CD-uppspelning, filer, streams eller "viloläge".

Nystartad retrostereo

Såhär ser det ut när stereon är startas.

Menysystemet

Spelaren har ett menysystem där man kan lägga till och ta bort filer i spellistan, ändra ordningen, byta låt eller equalizer-inställningar.

Uppspelning igång

Notera t.ex. att tiden kan visas både som spela tid samt återstående tid (ställs in via en av knapparna). Nere till vänster visas också status for uppspelningen (play/pause/stop)

Equalizern

Man kan justera equalizern via menysystemet. Såhär ser det ut när man valt en ny kurva.

Tuner in action

Uppspelningen växlar automatiskt till den nya radiokanalen när man låtit sökaren vara stilla i 3 sekunder, för att slippa att ljudet hoppar.

Justering av basen

De övriga ljudinställningarna visas på första raden under tiden man ändrar på en av dem.

The end?

I framtiden ligger bl.a. att jag tänkt fixa ett bra webb-interface så man kan sköta spellistor direkt via en annan dator, eftersom de kan bli lite jobbigt att göra allt sånt via fjärrkontrollen.

ps. ja, som några kommenterat, högtalarna passar verkligen inte in. De är högst tillfälliga och ska när tillfälle ges bytas ut mot mer tidstrogna högtalare. Lider tyvärr av platsbrist just nu bara =P Men om ni känner till några som skulle passa så säg till! ds.

Hoppas ni orkat med alla bilder och all text!
Glöm inte betygsätta, och kommentera gärna!

Tack för att ni tog er tid!

Hårdvaran helt klar!

Vackert

Så stänger vi för sista gången (på ett tag)...

Närbild

Plexiglas FTW

Plexiglas är ett underbart material när det kommer till byggen kom jag fram till. Det är stabilt, lätt att kapa och skitsmidigt att jobba med eftersom det är genomskinligt. Här mätte jag upp var moderkortet och kretskortet skulle sitta någonstans.

Hårddisk-upphängning

Jag byggde även en upphängning för hårddisken. Hade över ett par skruvar med gummibussningar från bygget av min stationära dator, så dessa fick gå till att dämpa vibrationer i stereon.

Gör plats!

Fick kapa lite att fronten på chassit för att kunna få in CD-spelaren där.

Klart

Upphängningen till CD-spelaren

Eftersom det skulle varit totalt omöjligt att mäta sig till exakt var CD-spelaren skulle sitta baserat på springan jag gjorde i fronten, så byggde jag en liten "hållare" till den i Plexi. Med hjälp av denna kan man sedan justera positionen både i sidled och höjdled, samt justera vinkeln.

Undersidan av upphängningen

Gummiknopparna hjälper till att hålla spelaren på plats.

Målning

Så, när alla delar var klara så var det bara att göra chassit lite snyggare, så det målades svart.

Monteringen kan börja

Så, äntligen kan man börja montera på delarna ordentligt. Detta är i runda slängar hösten 2009, dvs. ett år in i bygget.

Hårddisk-upphängningen på plats

Hårddisken isatt

Upphängningen för CD-spelaren

Som ni kan se så kan den justeras i höjdled med skruvarna på framsidan. med de bakre fästena (som inte syns) kan även vinkeln ställas in.

Pot'arna sätts fast

Mute knappen och 4-stegs strömställaren på plats.

Justering av CD-spelaren

Tunern

Detta är då potentiometern för radio-tunern. Självklart skulle ju stereon ha kvar denna funktion, det finns ju internet-radio för sjutton! Det gick inte att koppla potentiometern direkt till kontrollen på fronten eftersom man inte skulle kunna rotera den flera varv. Med originallösningen kan man vrida säkert tio varv när man söker efter kanal, så man kan ha fler kanaler utan att göra det svårt att hitta rätt.

Det fungerar!

LCD-skärmens montering

Så då var det dags att försöka så dit LCD-skärmen. Sån tur var hade jag gott om plexi över. Eftersom jag sedan skulle passa in skärmen i springan där radiosökaren tidigare varit så var jag tvungen att göra även denna upphängning justerbar.

Justering av LCD-skärmens position

Utöver detta så behövde jag också göra själva hålet på fronten större eftersom bara första raden av LCD-skärmen var synlig genom tuner-springan. Så jag polerade bort AM-bandet.

Mer lödning

Jag fokuserade istället på att försöka få till LCD-skärmen, en 40x2 teckens alfanumerisk LCD-display med grön backlight och HD44780 controller. Vilken tur att moderkortet hade en parallell-port! Kopplingschema hitta ni här: http://lcdsmartie.sourceforge.net/lcd44780.gif

Reglering

Här är då molex-pins, den drivs på 5V precis som kretskortet. De två potentiometrarna är till för att kontrollera kontrast och ljusstyrka på skärmen. Och till min stora förvåning så fungerade LCD-skärmen på första försöket!

Monterat och klart

Moderkortet

Strömkontakten

Lägligt nog var originalhålet för strömsladden lagom stort för att få plats med kontakten till nätaggregatet (det drivs ju med en extern adapter).

Undersidan

Hela snöret

Varför ändra något som fungerar?

Hjulet var för fult, så det målades om svart. Lösningen med ett snöre fick vara kvar. Detta är persienn-snöre, starkt och bra.

Volymmätare

Denna lilla rackaren skulle vi göra något med också. Kollade lite på vad som skulle krävas för att få den att reagera på musiken, vilket skulle inneburit ett kretskort till i princip (någon som har en bättre lösning?). Så jag gick över till att istället låta den visa hårddisk-aktivitet eftersom det är långt mycket lättare.

Friktion

Det nya snöret var för glatt för att vilja följa med när man vred på kontrollen, så jag satte dit en bit krympslang för att öka friktionen.

Works like a charm!

Kopplad och klar

Så, först mätte jag upp motståndet som behövdes för att 100% aktivitet skulle nå precis upp till max på mätaren, det gjordes med en potentiometer.

Hårddiskindikatorn på moderkortet är ju binär, dvs. antingen används hårddisken eller inte, så om man kopplade mätaren direkt så fladdrade bara pinnen fram och tillbaka. Så jag kopplade en kondensator över för att jämna ut strömmen. Med en kondensator över den så jämnas signalen ut och pinnen rör sig lagom snabbt.

On/off lampa

En enkel handvändning med lödkolven så var en on/off lampa fixad.

Sladdhärva

Nu fungerar kretskortet som det ska, vilken lättnad!

Åter till kretskortet

Under våren och tidiga sommaren så försökte jag lära mig C++ eftersom det visat sig att Java inte ville fungera med seriell-porten. Jag lyckades lära mig tillräckligt mycket C++ för att lyckas göra ett litet program som kunde kommunicera med PIC-processorn. Tyvärr visade det sig att den inte fungerade som den skulle, potentiometrarnas värden påverkades av varandra (AMD_Rulez förklarade varför, jag kan inte säga att jag förstod exakt vad som var fel, men det var sån tur var fel i koden i PIC'en och inte på kretskortet).

Ljudet

Man får inte glömma ljudet på en stereo. För att inte förändra baksidan på stereon (för det är ju viktigt?) så använde jag samma RCA kontakter som redan fanns på stereon. Detta är båda in- och ut-signal. De kopplades till varsin 3,5mm audio kontakt som kopplades in på moderkortets baksida.

Hörlurskontakt

På fronten av stereon finns en kontakt för hörlurar. Jag läste mig till att för att koppla in en kontakt direkt på F_AUDIO kontakterna som finns på moderkortet skulle man komplettera med lite grejer. Såhär blev resultatet. Funkar fint!

Polariseringsfilm

Så, eftersom jag behövde ny polariseringsfilm till den stora LCD-skärmen beställde jag det från polarization.com

Sen gjordes alltså processen om på den stora LCD-skärmen. Jag klippte till filmen lite utsvängt för att kunna finjustera vinkeln senare.

Skärmen

Som av en ren slump så var tuner-fönstret precis på milimetern lika bred som min LCD-skärm, så jag behöver inte justera något i bredd.

Fjärrkontollen

För att modernisera stereon lite så ville jag ha en fjärrkontroll. Jag hittade denna lilla kontroll från Sweex. Den går dessutom på Bluetooth så man kan vara var som helst i lägenheten och ändå styra stereon som man vill.

Bluetooth-mottagare

Här är Bluetooth mottagaren till fjärren, ihop med en kär gammal vän som ni säkert sett tidigare här på SweC, mitt Glasminne.

Det är nu sen vår 2010. Linux är installerat och jag började fnula på hur mjukvaran skulle lösas.

Nätverkskortet fungerade också (Jag tror jag jobbade med att få nätverkskortet att fungera i ungefär 3 veckor, Linux och drivrutiner...), så vid det här laget kunde jag ställa stereon på sin rätta plats. Allt kunde skötas via Putty och FTP.

Ljus för FM-raden

FM-bandet fick vara kvar. För att FM-radio raden skulle se ut som tidigare så fick jag sätta på en rad med gula lysdioder. (En sista diod går också vidare till att lysa upp bakom hårddiskindikatorn. De är satta i serie på för att passa in på 12V linan.

Felsökning

Så, jag gjorde vad vilken normal människa som helst skulle gjort. Jag vallfärdade till Jönköping... (Där AMD_Rulez hade tillgång till ett lab.)

Detta är i slutet av oktober 2009.

Vad säger PIC'en?

Hjärntvätt pågår

Efter lite felsökning identifierades felet och koden skrevs om.

Testbedd

När den var omprogrammerad kopplade vi in den på en testbedd för att se att allt såg schysst ut.

Nu talar vi samma språk!

Nu säger PIC'en det den ska. Totalt 6 bytes skickas varje runda, första byte'n innehållande läget på alla knappar och de andra fem för läget på varje potentiometer. Vackert!

All hårdvara igång i alla fall...

Under sommaren 2010 kom jag till insikt om att jag aldrig skulle klara av att skriva koden i C++. Jag kunde få ihop små enkla program, men detta projekt var för stort för att skriva i C++ för mig. Så istället började jag lära mig Python (fantastiskt enkelt språk!).

XMMS2 fick utgöra grunden till spelaren, eftersom den klarar av CD-skivor och hade kompletta Python bindings. LCDproc fick ta hand om LCD-skärmen, även fast jag egentligen inte gillade idéen med Telnet-interface. Fjärrkontrollens kommandon gick att läsa direkt från /dev/rawinput0, så med det var alla problem lösta och bara koden återstod. Jag jobbade med det under kvällarna på hösten och, det hela började bli klart lite innan jul.

Sleeves

Nu vet ju jag att ni gillar sleeves här på SweC. Så jag kände mig tvungen att köpa skaffa ett par meter och snygga till insidan också. Som ni kan se i tidigare bilder var det rätt mycket sladdar, som dessutom var bra mycket längre än vad som behövdes.

Sleeving pågår

Det tar längre tid än man tror, detta var tredje kvällen jag satt med det.

Rensat

Såhär mycket bättre blev det när alla sladdar var avkortade och sleeve'ade.

LCD-skärmen blev inte sleeve'ad, den kändes lite för känslig. Så jag nöjde mig med att korta ner längden lite.

Sleeving klart

En riktig ansiktslyftning för insidan kan man säga!

Närbild

Närbild