Lysstyring med Arduino 1

Jeg har nu efterhånden fået puslet mig frem til noget, jeg opfatter som en rigtig god måde at styre lys i bygningerne på min modelbane. Som så meget andet startede jeg i det små, men ambitionsniveauet voksede og voksede, og jeg har nu nået et niveau, man vist kun kan være rigtigt godt tilfreds med. Det er ihvertfald langt fra min barndoms huse, hvor man satte en enkelt glødelampe i bunden af hver bygning, der så kunne lyse opdad i stedet for nedad; de allermest avancerede malede væggene sorte indvendige, så lyset kun kunne ses gennem vinduerne og ikke gennem væggene...

Jeg har tidligere arbejdet en del med teaterlys, så jeg er vant til at tænke i scener, lysfald og kreative effekter. Af samme grund har jeg længe lavet ruminddeling i mine bygninger: Det ser efter min mening helt forkert ud, når man har en flot bygning, men kan se lige igennem den, fordi den ikke har nogen indre vægge. Det kan delvist klares ved at klæbe gardinpapir for vinduerne, så man slet ikke kan se ind - men jeg foretrækker nu at lade vinduerne så, så man kan se helt ind ad dem, og så nøjes med at klæbe farvet karton på til at simulere gardiner. Gør man det, bliver det ret vigtigt med såvel rum- som etagedeling, så man får nogle ordentlige lysfald.

Nået så langt bliver næste problem naturligvis, at man godt kan sætte en lysdiode ind til belysningen - men når der er ruminddeling, vil den kun lyse i et enkelt rum. Løsningen er naturligvis mange dioder, og med de priser, hvide dioder efterhånden er kommet ned i, er det økonomisk heller ikke noget problem - som jeg tidligere har omtalt, kan man få dem til 20 øre stykket på eBay. Det ser også ualmindeligt godt ud, når man har individuel belysning i hvert rum.

Men mer vil jo have mer - og det ser til gengæld ikke så godt ud, hvis man har en større by, og lyset i alle husene tænder på een gang: Så stille og roligt opstod ideen om at styre dioderne indiviuelt, så de kan tændes lidt ad gangen og ikke blot i et stort tænd/sluk hug.

Min første plan - som jeg i en vis forstand holder fast i - var, at dele belysningen op i fire tidsperioder:

  • Lys, der altid er tændt, når det er mørkt - gadebelysning og lignende.
  • Lys, der er tændt i normal arbejdstid: Virksomheder, butikker mm.
  • Lys, der er tændt først/midt på aftenen: Køkken, stuer mm.
  • Lys, der er tændt for natteravne: Soveværelser, loftskamre mm.

Så langt, så godt: Jeg fik lavet nogle få bygninger med et 5-polet stik - en pol til hver forsyning, og så en fælles stel retur. Hver bygning fik et lille stykke universalprint med formodstande og somme tider en mindre diodematrix, så den samme lysdiode f.eks. kunne tændes både i arbejdstiden og først på aftenen. Da jeg også kan finde på at blande varmt- og koldthvide dioder for at simulere såvel glødelamper som neonrør, blev det også noget af et puslespil at få justeret formodstandene ind, så der var balance i de forskellige lyskilder. Alt i alt en absolut brugbar løsning - men lidt bøvlet.

Arduino rykker ind

Jeg begyndte at spekulere på, hvordan jeg skulle strømforsyne alle mine huse. Jeg går ikke af vejen for at lave en strømforsyning selv, så jeg begyndte at spekulere i at lave nogle små bokse med indbygget transformator og fire udgange til de fire scenarier ovenfor. Ultimativt ville jeg lade dem tænde og slukke med en DCC funktionsdekoder - og her var det så, jeg begyndte at spekulere på, om jeg mon ikke kunne lave noget smart med en Arduino. Da jeg også begyndte at lege med OpenLCB/NMRAnet, skyndte jeg mig at bestille en Io:duino for at kombinere det hele.

Jeg vil i dette og nogle kommende indlæg prøve at beskrive fra bunden, hvordan jeg har eksperimenteret mig frem og er nået til en løsning, der i mine øjne vist ikke kan være meget bedre. Undervejs vil jeg prøve at komme med detaljerede forklaringer, så de fleste burde have en chance for at følge med og bruge løsningen selv.

Breakout boards

Som jeg har skrevet i min introduktion til Arduino, er en af de smarte ting ved Arduinoen de mange shields, man kan få; men man behøver ikke holde sig til det - i branchen findes der også et andet begreb, der kaldes et breakout board. Når man har rodet med elektronik længe nok, har man også prøvet at blive frustreret et utal af gange, når man finder frem til en eller anden smart IC, der kan noget, man lige står og har brug for - men er så kompakt, at den kun kan bruges fornuftigt med en mere eller mindre kompleks printplade, som det vil koste en mindre formue at få fremstillet. Og uden printpladen kan man godt glemme at bruge den smarte IC.

I starten var det vist mest elektronikproducenterne selv, der begyndte at lave små print, hvor den interessante komponent var monteret - evt. sammen med en stribe andre komponenter, der er nødvendige for at få den til at køre - men uden at der på nogen måde er tale om et færdigt produkt. Et breakout board er beregnet til at lave eksperimenter med chippen - det er ikke beregnet til at skulle indgå i et færdigt produkt.

Ideen har imidlertid vist sig at være så god, at der nu også er kommet en hel industri for breakout boards - Sparkfun Electronics laver rigtigt mange foruden deres mange Arduino varianter.

TLC5940

I den uoverskuelige mængde af gode tilbud faldt jeg over kredsløbet TLC5940 fra Texas Instruments: Et godt eksempel på en dejlig IC, der vil være næsten komplet umulig at bruge som glad amatør, hvis man ikke adgang til at lave relativt komplekse print. Hvis det altså ikke lige var fordi, Sparkfun har lavet et fint breakout board, der kan købes for en ganske rimelig penge. Dette board går meget fint hånd i hånd med en Arduino, så der er nogen, der har lavet et Arduino bibliotek til formålet. Som med så megen anden software kan man dog også skrue forventningerne for langt op - biblioteket virker fint med en standard Arduino, men vil ikke umiddelbart fungere med en Io:duino. Det skal jeg dog nok få knækket. Smile

Hvorfor er netop denne kreds så spændende? Jo, på en rå Arduino har man maksimalt 14 udgange, og hvis man blot sætter lysdioderne direkte på, kan man altså kun styre 14 dioder. Det var heller ikke min plan at sætte dioderne direkte på - min plan var at bruge en Arduino til at tænde og slukke for de fire udgange på de strømforsyninger, jeg havde planlagt at bygge.

Men i mellemtiden var jeg begyndt at finde ud af, at det var ret bøvlet at skulle eksperimentere med formodstande, når først dioderne var proppet ind i bygningerne; jeg skulle jo helst ikke have alt for lange ledninger - det ville give andre problemer - men på den anden side kunne jeg ikke så godt vurdere virkningen af lyset, før huset var færdigbygget. Det virkede derfor meget mere tiltalende blot at trække et par ledninger ud for hver diode og så finde en løsning, hvor jeg kunne lave alt det efterfølgende uden for bygningen. Da jeg fandt ud af, at det kunne kombineres med en TLC5940, var jeg solgt.

Men hvad er det, der er så smart? Jo, TLC kredsen er skabt til at styre lysdioder i f.eks. fladskærms-TV, og den har langt flere komplekse styringsmuligheder på dette område, end vi som modelbyggere nogen sinde får brug for. Men selvom vi kun kommer til at bruge nogle få af mulighederne, er det stadig en meget anvendelig løsning. TLC kredsens udgange er for det første konstantstrømsudgange, så man behøver ikke formodstande til dioderne: Lyset i dioderne bestemmes udelukkende af den strøm, der går gennem dem, de er ligeglade med spændingen. Så med en konstant strøm på udgangen er dioderne i deres es, og vi kan spare en modstand. Lysstyrken sættes til gengæld med software - og det er jo godt, for så kan man let rette den: Jeg kan have en hel karré med lys i og blot sidde med en computer og justere dioderne ind, indtil lyset ser overbevisende ud.

Dernæst kan en TLC styre 16 dioder - men man kan koble op til 14 TLCer sammen via daisy chaining (et flot udtryk, der betyder, at man sætter et fladkabel fra kreds til kreds) og på den måde komme op på 224 dioder. Det hele styret fra een Arduino. 16 dioder pr. breakout board er passende til en lille gruppe bygninger eller et højhus, og det passer faktisk rigtig fint, at man kan sætte det næste board op nær de næste bygninger og blot forbinde de to med en stump fladkabel. Selv med min bedste vilje kan jeg ikke komme på nogen bedre måde at løse problemet. Og med en Arduino og en håndfuld breakout boards bliver det også en løsning, der er overkommelig rent økonomisk.

Det må være nok som indledning til projektet: Jeg har fundet noget nær den perfekte løsning - nu mangler jeg "bare" at få det til at virke. Det er ikke helt så let, som det måske lyder, men i de næste indlæg vil jeg beskrive skridt for skridt, hvordan man kommer i gang og når frem til en løsning, der rent faktisk virker.

__________________

MVH
Lars

Like 1 kan lide
Top

Picture

Lukas A

Folkeskoleelev

Indlæg: 328

PB  Blog

Hej Lars.

Med det TLC5940 Board kan man så styre alle 224 dioder enkeltvis eller er de delt op 14 grupper?

Mvh Lukas

__________________

Mvh Lukas


Epoke IV/V - AC Märklin - Digital - C-skinner - Märklin MY 1119,  - Hobbytrade DSB ME 1536, DSB DD 4-vognssæt ABS 7904,  Hobbytrade Olsen Banden Franz Jäger vogn, Märklin BK, B og B - Heljan IC3 - HK-Modeller(Heljan) WSD, WSB, Bc, Bc-t

Like 0 kan lide
Top

Picture

Lars Skjærlund

Rødovre

Webmaster

Indlæg: 3.595

PB  Blog  Hjemmeside

Da' Lukas.

De 224 dioder styres fuldstændigt individuelt.

__________________

MVH
Lars

Like 0 kan lide
Top

Picture

Lukas A

Folkeskoleelev

Indlæg: 328

PB  Blog

Tak Lars,

Og det er så der at jeg ikke fatter det men lad nu det ligge.

Mvh Lukas Laughing out loud

__________________

Mvh Lukas


Epoke IV/V - AC Märklin - Digital - C-skinner - Märklin MY 1119,  - Hobbytrade DSB ME 1536, DSB DD 4-vognssæt ABS 7904,  Hobbytrade Olsen Banden Franz Jäger vogn, Märklin BK, B og B - Heljan IC3 - HK-Modeller(Heljan) WSD, WSB, Bc, Bc-t

Like 0 kan lide
Top

Picture

Skott

Ingeniør

Indlæg: 1.733

PB

Der er en rigtig god video her, der viser, hvordan det fungerer:

http://www.youtube.com/watch?v=FehBLNHMlfo&feature=g-high-rec

__________________

Med venlig hilsen

Skott

Like 0 kan lide
Top

Kommentarvisning

Vælg din foretrukne kommentarvisning og klik på "Gem indstillinger" for at aktivere dit valg.