Grundprintet - Hardwaren
En beskrivelse af Hardwaren og dets funktioner
Grundprintet består af alle de dele, der skal til for at kunne kommunikere med omverdenen:
|
|
|
|
LocoNet og den ene Arduino
LocoNet er den måde, som Möllehems Gårdsproduktion's tavlesystem kommunikerer på.
Den bruges også til at køre tog med i FREMO-regi og rundt i forskellige klubber.
Fordelen er, at man sparer en masse ledningstrækkeri, idet man i stedet sender kommandoer rundt -
ligesom i computer netværk, Ethernet og wifi.
Derfor skal man have et system til at foretage og stå for kommunikationen ind og ud
af netværket - og ind og ud af sportavle-programmet i RasPi'en.
Til dette skal man bruge et elektronisk kredsløb, vist her til højre.
Et billede af selve kredsløbet er vist lige under.
Kredsløbet skaber forbindelserne imellem (til og fra) selve netværket og Arduinoen.
Arduinoen sender og modtager data'ene og sender/modtager videre til og fra RasPi'en,
hvor alle "tavle-processerne" foregår.
Dette vil blive forklaret meget mere detaljeret under Programmet.
LocoNet bruges også til at styre togene via en Centralstation. Men man kan sagtens have to LocoNet;
et til banen og togene - og så et til tavlen. Man kan sagtens bruge det samme LocoNet. Men vi i Jernhesten
(og de fleste, vi har kendskab til) har det adskilt i to.
Den valgte Arduino er en Arduino Nano V3. Det er denne, programmet er skrevet til.
Arduinoen skal også programmeres. Dette foregår via Arduinos eget software, der kan
downloades her.
Programmet, den skal programmeres med, kan downloades her.
For en sikkerheds skyld ligger det også her. Tak til John Plocher.
Der bør også tilføjes et "delay" i coden, så den ikke starter op med det samme. Det skal sikre, at Arduinoen ikke kører, før alle Servo5 servoerne er
færdige med deres opstart.Når disse starter op, sender de data ud på Loconettet for at angive deres stilling. Dette oversvømmer Arduinoen, så den ikke
længere kører, som den bør. Ved at forsinke Arduinoens opstart, modtager den ikke alle disse data. RasPien er heller ikke startet op på dette tidspunkt,
så Arduinoen har heller ikke noget sted at aflevere disse data. Vi har valgt at indsætte "delay(10000);" som den sidste linie i løkken "void setup".
Loconet.h skal tilrettes. Der skal flyttes en funktion inde i filen. Dette gøres lettest i en text editor såsom Notesblok eller Notepad++ eller lignende:
1. Find teksten "LnBuf LnBuffer;" i Loconet.h
2. Læg mærke til, at ovenover står der "private:". Nedenunder er der en, der hedder "public:".
3. Flyt teksten "LnBuf LnBuffer;" ned under "public:".
4. Gem filen og luk.
Resultatet bør se således ud:
Bonusinfo: Hvis man vælger kontroltavlen til at have sit eget LocoNet, skal man huske at have en LocoNet-generator.
Heldigvis har Möllehems Gårdsproduktion en sådan også. Hvis du er elektroniknørd, så er kredsløbet ikke svært at finde på internettet.
|
|
|
|
Lys og det lille print
Der skal bruges lys i tavlen til at vise sporskifte-stilling og signalstilling. Princippet er også her det samme som Møllehems.
Og det bliver kaldt Neopixels. Det er egentligt en serie af LEDS, der er styret af en enkelt lille kreds, der styrer selve LEDene.
Det bliver egentligt brugt til at lave lyskæder af LEDlys, hvor man kan sætte alle mulige farver og køre alle mulige lysmønstre.
Fordelen er mest på den kredsløbsmæssige side, da der kun skal bruges en kreds, der hedder WS2811 – og lige et par modstande og kondensatorer.
Kredsene er koblet sammen i serie, så derfor er der ”kun” tre ledninger, der skal bruges: Plus, minus og data.
Styringen ligger i den software, man så skal lave.
Möllehem har egentligt lavet et sådant print, Og det vil også virke fint i denne situation.
Men vi har valgt at lave en anden version. Og dette for at få bedre styr på ledningerne.
Der er mange ledninger at holde rede på, så det gjaldt om at finde en bedre (?) måde at gøre det på. Vi valgte at lave det
på den måde, at tre ledninger bliver ført ud til sporskifte-LEDs: En til hver LED og så plussen i midten.
Disse sidder i par i forvejen, så det gør det mere overskueligt og nemmere at have alle tre ledninger siddende sammen.
Gerberfiler til printet kan
downloades her.
|
|
|
|
Lys og den anden Arduino
Kommunikationen til LED-lyskæderne sker via en TTL kreds, der hedder 74AHCT125.
Det skyldes, at Arduinoens udgange kan være sensitive, og vi derfor ønsker at beskytte dem.
TTL kredsen virker som en strømforstærker.
Vores software er opdelt i to dele. Den ene del ligger i en Arduino. Den anden del ligger i RasPi’en.
Raspi’en sender besked til Arduinoen, og Arduinoen sørger for, at rette LEDs får de rette data.
Diagrammet og printet er vist her til højre. Billederne er større end vist.
Ved at højreklikke og vælge ”Åbn i ny faneblad” kan du komme til at få vist i fuldt format.
For at gøre tingene lidt mere overskuelige, er lyset delt op i fire grupper: 2 styk sporskifterlys og 2 styk signallys.
Og hver 1 styk til hver halvdel - "nord" og "syd". Dette gør, at det ikke er lige til at overføre data fra RasPi'en til tavlen.
Alle spor, sporskifter og signaler er nummereret fortløbende uden nogen yderligere hensyn.
Og da kredsen, LED-driveren WS2811 - og i sidste ende kæden af disse, arbejder med en nummerering, der starter med nul til den første kreds,
Skal der foretages en om-nummerering og et par valg af udgang (nord eller syd) (sporskifte eller signal). Alt dette bliver ordnet i Arduinoen.
Programmet til dette er egen-produktion. Og det bliver vist her.
|
|
|
|
Knapper
På tavlen kommer alle input til RasPi'en via knapper. Og som det kan ses på billedet her til højre, er det halvstor station med mange spor.
Normalt vil man bruge et ben på RasPi’en til input eller output direkte. Men da vores tavle har ret så mange knapper, kan vi ikke gøre dette.
Løsningen er derfor en matrix. Vores matrix hedder 16x32. For at lave en sådan stor matrix, må vi ty til lidt ekstra hjælp.
Og det gøres ved at foretage indlæsningen via en seriel indlæsning, og der bruges gode, gamle CMOS til dette: 4014 og 4094.
Raspi’ens program har en separat sektion til at indlæse knapperne. Og det kan ske overraskende hurtigt.
Programmet i RasPi’en vil blive diskuteret i Software delen.
Diagrammet er vist her til højre og printene delvist herunder. Billederne er større end vist.
Ved at højreklikke og vælge ”Åbn i ny faneblad” kan du komme til at få vist i fuldt format.
|
|
|
|
I2C
Protokollen I2C bruges til at sende data imellem Arduinoerne og RasPi’en. Det er ikke en hurtig protokol, men i daglig brug af tavlen vil
man ikke lægge mærke til det. Desværre er der et lille problem: RasPi’en arbejder ved 3,3 volt på ind- og udgange,
mens Arduinoerne arbejder med 5 volt. Hvis vi kun skulle sende fra RasPi’en til Arduinoerne, så ville det ikke være et problem.
Men RasPi’ens indgange kan ikke tåle 5 volt uden at brænde af. Derfor må vi sørge for, at det ikke sker.
Det gør vi med med et simpelt kredsløb, der består af 2x MOSFET transistor og to modstande.
Diagrammet og kredsløbet er vist her til højre. Billederne er større end vist. RasPi'en er taget væk, da kredsløbet sidder under den.
Ved at højreklikke og vælge ”Åbn i ny faneblad” kan du komme til at få vist i fuldt format.
|
|
|
|
Raspberry Pi
Vi bruger en Raspberry Pi Zero til at håndtere programmet til tavlen.
RasPi’en har 40 pinne til (næsten) frit brug. Nogle af dem er dedikeret til f.eks. 5 volt, 3,3 volt og nul - blandt andet.
To pinne er dedikeret til I2C, som vi skal bruge til at kommunikere med Arduinoerne med. Nærmere beskrivelse herover.
Seks normale input output pinne er brugt til at modtage data fra knapperne – som beskrevet herover.
For at RasPi'en kan fungere, skal der installeres et operativ-system. Når det er installeret, fungerer RasPi'en - næsten - som en
almindelig Windows Computer: Der er et skrivebord, og der er ikoner og menuer - ligesom Windows.
Selve programmet er skrevet i sproget Pascal. Dette skyldes, at det er programmørens foretrukne programmeringsværktøj.
Egentligt kan man nøjes med en kompileret version af programmet, der så indeholder det hele til styringen af stationen.
Men vi vil foretrække og tilråde, at programmeringsværktøjet Lazarus også installeres. Ved at have programmeringsværktøjet
installeret, kan man også have selve programkoden liggende fuldt tilgængeligt. Og man kan derfor lave rettelser og ændringer,
uden at man skal til at flytte filer frem og tilbage imellem computere.
Styresystemet, OS, og alle filer ligger på det SD-kort, der sidder i venstre side af RasPi'en. Vi har brugt et 16GB kort,
men et 8 GB kan måske godt gå. Desværre er det ikke sådan, at man "bare" kan tage kortet ud og flytte det hen på en pc -
og så begynde at kopiere filer. Alt på kortet er zippet - og er et virvar af mapper. Vi anbefaler at bruge et USB drev
til at flytte filer. Den skal tilsluttes den mikro-USB port, der sidder til venstre på billedet. Den til højre er kun
til strøm - FYI. Man kan også installere et "remote desktop" -program, så man kan sidde med en laptop eller almindelig pc
og arbejde via denne. Vi bruger RealVPN, men der findes andre.
Det hele er lavet til, at man ikke skal have andet tilsluttet end det der er vist på billederne. Det vil sige;
ingen skærm, ingen mus eller tastatur. Vi vil dog anbefale at tilkøbe disse - eller i hvert fald sørge for,
at noget sådant kan tilsluttes. Vi anbefaler en lille USB Hub til få tilsluttet alle disse forskellige enheder -
alt efter behov. Det vil være en stor hjælp til installation og opsætning af softwaren - og evt. senere til ændringer
og fejlfinding.
|
|
|
|
Alt ialt
. . . en rimelig nem løsning, hvor hardwaren er rimelig simpel, men hvor programmeringen spiller den altdominerende rolle.
Som nævnt har vi programmeret vores program i Pascal. Men det er vores valg. Du / I har helt sikkert et andet valg.
Programmeringssprog som C++ og Python er meget mere populære, men de kunne vores programmør ikke lige finde tid til at sætte sig ind i.
Plus at de sprog er en del mere komplicerede, synes programmøren.
Gerberfiler til printet kan
downloades her.
|
|
|
DHTML Menu By Milonic JavaScript
|