MODELLJERNBANEFORENINGEN I NORGE (MJF) - forum

  FAQ FAQ  Søk i forum   Arrangement   Registrer ny bruker Registrer ny bruker  Logg inn Logg inn

Programmeringssporet

 Svar Svar Side  123 7>
Forfatter
  Tråd Søk Tråd Søk  Innstillinger for tråd Innstillinger for tråd
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Tråd: Programmeringssporet
    Sendt: 24 februar 2019 kl. 22:49
Etter juleferien, har FeriemoduleN hatt et fast tilhold på høyre siden av skrivebordet (Under Sidesporsmodulen).

Her har jeg god plass til 4 av modulene (totalt 44 x 79 cm).
Nå begynner også basismaskinvaren og programvaren å fungere.

I dag kjørte jeg for første gang et lokomotiv automatisk basert på et skript på modulen.  Tidligere har jeg kun benyttet JMRI på denne modulen.  Her er et som viser hvor 4 ir-sensorer er plassert (216,217,226 og 227).  For øyeblikket er kun 216 og 217 i bruk.
Jeg har også montert en Time of Flight (TOF) sensor som måler hvor på spor2 lokomotivet er.
Det er også kun sporveksel 241 som har montert motor.




Her er skriptet jeg benytter.

[QMX DEBUG OFF]
WAIT SEC 005
[QMX I2C SCAN]
WAIT SEC 005
[QMX I2C 000 VLX DISTANCE]
WAIT SEC 005
:SBFA0N90000000F1;
WAIT SEC 005
:SBFA0N91000000F1;
WAIT SEC 005
<t1 2 0 0>
[QMX]
WAIT SEC 005
[QMX DEBUG OFF]
WAIT SEC 005
<1>
WAIT SEC 005
:SBFA0N90000000F1;
WAIT SEC 005
<t1 2 50 1>
WAIT STATUS DETECTOR 216 001
:SBFA0N91000000F1;
WAIT SEC 000 250
WAIT STATUS DETECTOR 217 001
WAIT STATUS DETECTOR 216 001
WAIT STATUS DETECTOR 217 001
WAIT STATUS DETECTOR 216 001
WAIT STATUS DETECTOR 217 001
WAIT STATUS DETECTOR 216 001
WAIT STATUS DETECTOR 217 001
WAIT SEC 001 100
<t1 2 0 0>
WAIT SEC 005
<t1 2 50 0>
WAIT STATUS DETECTOR 217 001
WAIT STATUS DETECTOR 216 001
WAIT STATUS DETECTOR 217 001
WAIT STATUS DETECTOR 216 001
WAIT STATUS DETECTOR 217 001
WAIT STATUS DETECTOR 216 001
WAIT SEC 006 350
<t1 2 0 0>
WAIT SEC 005
:SBFA0N90000000F1;
WAIT SEC 005
<t1 2 50 0>
WAIT STATUS DETECTOR 216 001
WAIT SEC 006 350
<t1 2 0 0>
WAIT SEC 001
:SBFA0N91000000F1;
WAIT SEC 001
[QMX I2C 000 VLX DISTANCE]
WAIT SEC 001
[QMX I2C 000 VLX DISTANCE]
WAIT SEC 001
[QMX I2C 000 VLX DISTANCE]
WAIT SEC 001
<t1 2 0 0>
<0>
WAIT SEC 005

Dette er en blanding av DCC++ kommandoer.  De som starter med : <
mine proprietære kommandoer, som starter med : [
og kommandoer til sporveksel, som kommuniserer over CAN-Bussen, og starter med kolon.

Forklaring av de viktigste kommandoene :
WAIT SEC : Vent antall sekunder før neste steg, kan også inneholde mikrosekunder.
WAIT STATUS DETECTOR nnn 001 : Vent til sensor detektere tog.
[QMX I2C 000 VLX DISTANCE] : Sjekk posisjon (avstand fra buffer) i spor 2.
:SBFA0N91000000F1; : Legg over veksel F1 (241) til posisjon 1.
:SBFA0N90000000F1; : Legg over veksel F1 (241) til posisjon 0.
[QMX DEBUG OFF] og [QMX I2C SCAN] er for initialisering av firmware/I2C bussen.

DCC++ kommandoer :
<1> og <0> ,kjørestrøm på og av.
<t1 2 50 1> : Styr lokomotiv : Slot 1, dcc adresse 2, step 50, retning 1 - er forover.

Sekvensen på kjøringen er :
1. Lokomotivet starter fra spor 2
2. Kjører forover ut på hovedsporet.
3. Kjører tre runder før det stopper på spor 1.
4. Kjører bakover i to runder før det igjen stopper i spor 1.
5. Kjører bakover i en runde til, men stopper nå i spor 2.

En detaljert gjennomgang av scriptet :
0a : De fire første linjene er initaliering.
0b : [QMX I2C 000 VLX DISTANCE] Sjekk posisjon til lokomotiv i spor 2 - posisjonen brukes ikke, men logges.
0c : De neste linjene, frem til <1>, er for initialisering, testing av sporveksel og slå på kjørestrøm.

1a : :SBFA0N90000000F1; - Legg om sporveksel 241, til spor 2.

2a: <t1 2 50 1> Kjør fremover.
2b: Vent til toget paserer sensor 216, og legg om sporveksel 241 til spor 1 :SBFA0N91000000F1;

3a: Kjør tre runder ved å vente på sensor 216 og 217 fire ganger.
3b: vent 1,1 sekund etter siste passering av 217 før lokomotivet stoppes <t1 2 0 0> på spor 1.

4a: gjenta tilsvarende prosess for å kjøre bakover.
4b: Ved siste pasering av 216, vent 6,35 sekunder WAIT SEC 006 350 før toget stopper i spor 1.

5a: Legg om sporveksel 241 til spor 2.
5b: start lokomotivet bakover.
5c: vent på sensor 216, og fortsett i 6,35 sekunder, før toget stopper i spor 2.

6a: Legg om sporveksel til spor 1. :SBFA0N91000000F1;
6b: mål avstanden til buffer [QMX I2C 000 VLX DISTANCE] tre ganger med 1 sekunds mellomrom.
6c: slå av kjørestrømmen med <0>

Planen videre :
1. Se hva jeg kan få ut av analyser av loggene fra kjøringene.
2. Definere en virtuell modell av modelljernbanen, slik at jeg kan automatisere styringen, uten detaljerte script.




Endret av programmeringssporet - 24 februar 2019 kl. 23:27
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 24 februar 2019 kl. 22:33




Endret av programmeringssporet - 24 februar 2019 kl. 22:50
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 03 januar 2019 kl. 01:02
Det er enkelt å koble et rele til en Arduino, men det er en del detaljer å passe på.  Hver gang jeg skal koble opp et rele, må jeg derfor sjekke ganske mye dokumentasjon.  Denne gangen har jeg dokumentert hvordan det skal gjøres - slik at det blir lettere neste gang.  Her er koblingsskjemaet jeg har brukt :




Deretter er det bare å definere at den logiske utgangen 230 er koblet til Digital Pinne nr 7,  i DCC++ med denne kommandoen :


< Z 230 7 0 >

Det er også greit å lagre dette permanent med EPROM kommandoen :

< E >

Deretter styres relleet med kommandoene ( på og av)

< Z 230 1 >
< Z 230 0 >


Den Arduinobaserte Digitalsentralen DCC++ har du utganger.

Den ene utgangen er DCC signal for kjøring.  Den andre er alltid DCC signal for programmering.  Jeg kan derfor programmere CV'er på programmeringssporet samtidig som togene kjører på andre spor.  For å få til dette på en sikker måte, deler jeg anlegget i tre, og styrer dette med et 4 polet rele:

1. Programmeringssporet, som normalt er koblet til kjøresignalet, men som kobles til programmeringsutgangen når releet er aktivert.

2. Et isolatorspor som er ved siden av programmeringssporet,  Dette er normalt koblet til kjøresignalet, men blir strømfritt når releet aktiveres.

3. Resten av anlegget - dette er alltid koblet til kjøresignalet.

Her er et bilde av modulen, hvor jeg også har tegnet inn koblingene :




På bildet over, er programmeringssporet øverst til venstre ( hvit og gul ledning).  Deretter det isolerte sporet (Sporvekselen) med orange og grå ledning).  Ved å plassere to sporveksler på denne måten, får jeg en ytterligere sikring av programmeringssporet - ved programmering.


En av hovedgrunnene til å bygge dette transportable og modulbaserte anlegget, er å bruke det til utprøving av styringsprogramvaren min.  Til dette trenger jeg også en sporsløyfe.  Her er et første oppsett, hvor anlegget dekker kravene.  Jeg mangler foreløpig relestyringen, så det er et kort sporbrudd midt i bildet  - slik at jeg unngår kortslutning.





Endret av programmeringssporet - 20 januar 2019 kl. 22:53
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 22 desember 2018 kl. 01:31
Da er det Juleferie - og slik ser feriemodulen ut nå :



Lengst bort kan vi se Modul 21

Den inneholder :
  • Arduinoen som kjører DCC++.
  • En Raspberry Pi 3+, som foreløpig ikke er brukt.
  • Bak denne er det plassert et Can-Bus grensesnitt - som foreløpig ikke er koblet opp.
  • Til høyre for Arduinoen er det en 12 Volt spenningsstabilisator med en Rød Lysende Led.
  • Foran denne er det en dobbel sporbeleggsensor for blokk 213, og 214  - resten av anlegget (foreløpiig er alt koblet til 214)
  • Helt bak til høyre, kan vi se strøminngangen, som nå er koblet til Laboratoriestrømforsyningen, em den kan også kobles til en standard ROCO digitalstrømforyning.
  • Foran spenningsinntaket, er det også en DC-DC isolert spenningskonverer som leverer strøm til sporbeleggsensorene.
  • Vi kan også se de to IR sensorerene, koblet til Arduinoen sensor 211 og 212.

På denne modulen har jeg sett hvor mye plass elektronikken tar på et N-Skala anlegg.

Helt foran i bildet kan vi se 180 grader svingmodulen 22.

Elektronikken her er litt mindre, kun to IR-sensorer nr 221 og 222,  Disse er normalt koblet til Arduinoen, men ikke på dette bildet - da avstanden er lengre enn ledningene.

Til Venstre i Bildet kan vi se rettstrekningen med sidespor, modul  23.

Dene modulen skal kobles opp som programmeringsspor, men status nå er at sporene er isolert, og koblett til en sort rekkeklemme, hvor alle sporene er koblet sammen, slik at sporene kan prøvekjøres.  Neste skritt er å montere et rele, slik at programmering kan innkobles.  På modulen har jeg også plassert en 4 kanals Can-Bus basert sporvekselkontroller, men denne manger fortsatt oppkobling, og noen integrerte kretser (microkontroller, can-controller, spenningsdobler).  Vi kan også se CAN-Bus - USB kortet som jeg bruker for programmering av microkontrolleren.

Modulen er 111 mm x 3,5 Lang  (ca 40 cm).

Til Høyre i Bildet kan vi se Bakre stasjon, modul 24 - som er et speilbilde av modul 23.

Her er sporene isolert likt men, alle ledningene er koblet til en topolet rekkeklemme, fordi jeg foreløpig ikke har tenkt å legge inn programmeringsspor funksjonalitet i denne modulen.

Andre ting som er endret siden forrige ferie, er at skinneinnfestingen er endret.  Skinnene er nå løftet 3mm, slik at de kommer i samme høyde som Kato skinner.

Fokus nå er å få til sporvekselstyringen, akrivere programmeringssporet og koble til Raspberry Pi, slik at testing av programvare for automatisk styring kan påbegynnes.

Deretter skal sporbelegg kobles opp på alle modulene, og så skal jeg vurdere om jeg trenger flere IR sensorer.

Jeg har også planer om to nye moduler : en snumodul og en fotoboks modul.








Endret av programmeringssporet - 22 desember 2018 kl. 02:09
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 03 desember 2018 kl. 01:01
Da ble det en liten ekstraferie.

Jeg har nå fått koblet opp alle fire IR sensorene, men kun med en midlertidig ledning mellom modulene.  Slik ser det ut nå :



På det første forsøket oppdaget jeg at skinnene ikke var helt riktig tilpasset, slik at jeg måtte sette inn to 55 mm skinnestykker for å koble sammen modulene.

Nederst til høyre, kan man også se at jeg har  laget et lite enkelt betjeningspanel, som jeg kan bruke til å kjøre manuelt, men jeg sakl også lage funksjonalitet for å lese og skrive CV’ er, starte automatisk kjøring, og måle strømforbruk og spenning.  Bildet under er litt uskarpt, men det viser panelet med tre små trykknapper og en liten styreknapp (opp, ned, venstre, høyre og trykk):



Jeg har også forsøkt å koble til to LED displayer – men da oppdaget jeg at LCD displayet er opp ned, men det er kun en liten programvare endring som må til for å endre det :



Etter at jeg fikk tilpasset skinnene, slik at jeg kan kjøre, med kun sirkelen, slik at avstanden mellom alle sensorene er identiske har jeg gjort litt prøvekjøring.  Lokomotivet jeg brukte var en DB V100 fra startsettet.  Jeg kjøpte det for ca 3 år siden, men det var omtrent ubrukt, slik at jeg gjorde en tyve minutters innkjøring på step 36, først forover og deretter bakover.  Deretter sto lokomotivet stille i omtrent  30 minutter, før jeg gjorde en ny prøvekjøring på step 36.  Grafene under viser først innkjøringen, hvor hver runde tok mellom 7,4 og 7,2 sekunder.  Under er grafen fra den andre kjøring, og vi kan se at det virkelig hjelper å kjøre inn lokomotivet.  Det siste stolpediagrammet viser rundetider med de blå stolpene for sensor 211 og de grønne stolpene for sensor 221. (90 grader fra hverandre).  Hensiktet med dette var å få en ide om forskjellene i rundetider var reelle eller om det var litt unøyaktighet i tidtakingen.  I og med at de blå og grønne følger hverandre ganske bra – tyder det på at lokomotivet fortsatt kjører litt ujevnt.  Men her må jeg teste mere med forskjellige lokomotiver for å få noen konkrete konklusjoner.





Endret av programmeringssporet - 03 desember 2018 kl. 01:08
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 28 oktober 2018 kl. 20:45
Hei,

Takk for info.

Desverre er conrad.com ganske dyre på frakt : 45 euro (40 euro på ordre over 200 euro).
og så kommer mva og omkostninger i Norge i tillegg.  Dette er nok best for store ordre.

conrad.se med levering poste restante Strømstad er nok et bedre alternativ. Da koster Arduinoen SEK 229 (inkl svensk mva).  frakt sek 96 (fri over sek 500). Men da må den hentes på hverdager før kl 1700 på postkontoret der (men har hørt rykter om at det kan videresendes til butikk i kjøpesenter med lørdagsåprent)

For noen år siden brukte jeg firmaet https://posterestantestromstad.no/ . Der kostet det kr 80 å hente varer, men nå starter de på sek 100. - og så har de ofte stengt på lørdager. (men har opplevd at hvis man ikke følger instruksjonene, slik at pakken blir sendt i eget navn, kan de ikke hente ut pakken, slik at jeg måtte hente den på Konsum selv - og da ble det uten gebyr)
Til toppen
Johannn Se rullemeny
Medlem i MJF
Medlem i MJF


Medlem siden: 09 april 2011
Land: Norge
Status: Utlogget
Points: 139
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér Johannn Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 27 oktober 2018 kl. 11:36
For 17 euro vil du truleg ta dette uten importavgift og mva då du bør få dette langt under 350kr med frakt.
Norsk H0 2005-, Digitrax Xephyr Xtra, Z21, foreløpig lagra i skap pga oppussing, samt settrackbane sporadisk oppsatt for at junior skal få køyre tog.
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 27 oktober 2018 kl. 00:48
Konsolidering
Jeg har nå 7 jernbane moduler med Arduino styring. 4 er H0 - de tre andre N-skala.

Ti lsammen bruker jeg 15 Arduinoer, som kjører 12 forskjellige programmer. Noen av programmene er egentlig identiske, men jeg har ofte videreutviklet med ny funksjonalitet, for nye funksjoner, uten at programvaren er oppdatert på alle modulene.  Dette er et stort problem som jeg må gjøre noe med. 



Planen er å redusere til tre programmer :
1.    DCC++ - uendret
2.    RFID leser.
3.    Min nye universelle programvare.

Min universelle programvare er den jeg har laget i løpet av de siste årene.  Versjon 1 styrer testmodulen, med Likestøm.  Versjon 2.0 styrer strekningsmodulen med pulset likestrøm (PWM).  Versjon 2.11 – styrer kommunikasjonen på sidespormodulen og komuniserer bl.a med DCC++, JMRI og en Arduino som kjører versjon 3, for kommunikasjon mot CAN bussen. (bl.a. for kommunikasjon mot Hyllemodulens Can bus kontrollerte sporskifter.

Min Universelle programvare er under utvikling på den nye Utviklingsmodulen.  Status nå er at den kan kommunisere med en Raspberry Pi med min proprietære kommunikasjonsprotokoll og kommunisere med diverse sensorer via I2C grensesnittet.  Jeg har også plukket fra hverandre DCC++ programvaren, og er i ferd med å legge inn funksjonaliteten fra DCC++ for å styre et analogt lokomotiv.  Jeg kan da styre et analogt lokomotiv fra JMRI via DCC++ protokollen.  Denne minimumsversjonen er testet fra JMRI og fungerer greit.  Jeg håper å ferdigstille denne programvaren ganske raskt, og jeg planlegger at dette skal fungere på en Arduino UNO med et Adafruit I2C Motorshield. 

Denne første versjonen skal brukes på Utviklingsmodulen for å kunne styre et Analogt lokomotiv.  Deretter starter utvikling av støtte for releer og sensorer via I2C bussen.  Etter at dette er ferdig, vil jeg flytte til en større Arduino med flere serieporter og mere minne.  Den kan da etterhvert benyttes på de andre modulene også – og fungere som en front-end prosessor for DCC++, som da kjører på en annen Arduino, og kommuniserer over en serieport.  På bildet under kan man se Utviklingsmodulen med diverse arduinoer og forskjellige I2C sensorer og et I2C relekort.  Det store firkantede hullet er planlagt for en lavt montert Arduino Mega.  Foreløpig er det ingen skinner på modulen.  Jeg har bestemt med for å prøve Kato N-skala skinner denne gangen.



Arduino Mega 2560
DCC++ støtter Arduino UNO og Arduino Mega.  Foreløpig har jeg kun benyttet UNO av to grunner : pris og mulighet for å bytte prosessor uten lodding.  En original UNO koster hos Kjell & co kr 230, men de har også kloner til kr 100.  Arduino Mega selger de kun i originalversjon til kr 500.  Fra Kina kan man kjøpe mange billige kloner, men jeg syntes det er enklere å bestille fra f.eks. digikey.no.  Der har de originalen for ca kr 350 og kloner for kr 212.  De lagerfører ikke klonene så der er det 4 ukers leveringstid.

Jeg har oppdaget at conrad.com nå leverer til Norge.  Der koster en Mega klone 17 Euro, men da kommer frakt, importgebyr og mva. I tillegg.  De har også Kato skinner og mye annen modelljernbane.  Jeg skal derfor forsøke å legge inn en bestilling hos dem.  Her er en lenke som sammenligner Arduino UNO og Arduino Mega 2560.
https://www.arrow.com/en/research-and-events/articles/arduino-uno-vs-mega-vs-micro

Hovedgrunner for at jeg vurderer Arduino Mega er : minne (Sram) antall serieporter, 5 Volt logikk og støtte i DCC++, men det er også greit med 40 ekstra tilkoblinger, som kan brukes til  f.eks. sensorer.




Endret av programmeringssporet - 27 oktober 2018 kl. 00:52
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 17 oktober 2018 kl. 18:20
Sidesporet - Fase 2

Sidesporet har fungert veldig bra.  Hovedfolkusen har vært å ta i bruk nye lokomotiver. Lokomotivet plasseres på sidesporet slik at alle CV'er kan leses.  Deretter automatisk kjøring for å analysere stopp og start, samt å beregne skalahastighet i forhold til DCC hastighetsstep.

Jeg har fokusert på små og mellomstore damplokomotiver.  Neste gruppe er store damplokomotiver type Gammeltysker og Stortysker.  Skinnene på sidesporsmodulen er montert et par cm over platen, for å få den til å passe med de andre modulene.  Her har jeg brukt ROCO Line skinner og noen enkle 3D printede støtter.  Dette er en midlertidig løsning som kun fungerer med ganske lette lokomotiver.  Jeg har derfor laget et nytt mere solid skinneunderlag, og erstattet skinnene med Peco code 100.  Foreløpig bare i hovedsporet, men snart skal jeg også gjøre det tilsvarende på sidesporet.  Jeg har også lagt inn noen isolatorer, slik at jeg kan gjøre noen skinnestykker strømløse, både for Analog kjøring, og for å teste strømopptak og stay-alive kondensatorer.  For å styre dette trenger jeg noen releer.  Jeg fant noen kort med 4 releer og I2C grensesnitt til ca kr 80 (20 pr. rele).  Helt grei pris, med hovedgrunnen til at jeg valgte disse kortene er I2C grensesnittet.  I2C har jeg nevnt tidlligere, så kort fortalt : det er en enkel buss med kun 4 ledere mellom kortet og Arduinoen som styrer det.  Alle kortene må ha forskjellige I2C adresser, slik at Arduinoen kan styre mange kort med de samme 4 lederene.  Det er ikke noe iveien for å koble opp f.eks. 100 kort til en Arduino, slik at man totalt får styring av 400 releer fra en Arduino.  Her er et bilde av to kort som jeg har koblet opp mot skinnestykkene :


I denne modulen styres flere ting fra den samme I2C bussen.  I bildet under har jeg montert relekortene, men enda ikke koblet opp I2C bussen i de hvite kontaktene.  Vi kan imidlertid se I2C bussen som kommer ned fra Arduinoen øverst til høyre i bildet, og går ned til et relestyringskort, og deretter videre til en Strøm og Spenningsmåler.  Spenningsmåleren er montert på et gult 3d printet feste, som jeg måtte flytte for å få plass til relekortene.  Den skal også erstattes av de fire målerene som ligger foran modulen.



Det siste bildet viser status nå.  Releene er ikke koblet til I2C bussen, men det haster ikke fordi jeg har koblet det slik at skinnene får strøm når releet ikke er aktivert (NC utgangen).



Vi kan også se at jeg har montert en spenningsstabilisator (rød Led) som leverer 12 Volt tiil elektronikken og noen av releene.  Helt til venstre kan vi se Laboratoriestrømforsyningen som leveres strøm til DCC++ og spenningsstablisatoren.  5 Volt komponentene får imidlertid fortsatt spenningen via Raspberry Pi'ens USB inn / Utganger.

Modulen er nå tilbake på plass.  Neste skritt er programvareutvikling, og da kommer den store utfordringen med denne modulen, og det er at elektronikken ikke er tilgjengelig under drift, fordi den er plassert på baksiden av modulen, som står inn mot en vegg.   Dette og ønske om å kunne teste nye programvarevarianter på en enkel måte gjør at jeg nå er igang med å lage en dedikert modul for programvareutvikling og testing.  mere om denne neste gang.


Endret av programmeringssporet - 17 oktober 2018 kl. 18:32
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 09 oktober 2018 kl. 00:30
Da er sommeren og ferietiden over.

Ferieanlegget ble ganske funksjonelt ferdig skrudd og koblet sammen.  På bildet under kan man se den nest siste kjørekvelden.  Her er svingmodule kompletert med en modul med rettstrekninger.  På den siste kjørekvelden ble denne midtmodulen delt i to på langs og forlenget, slik at alle modulene består av 2 X 4 plater. Lenderetningen på midtmodule er dreid 90 grader i forhold til svingmodulene slik at det blir en fremre og en bakre modul.  Her plate er på 11x11 cm, slik at hver modul blir 44 x 22 cm, og passer inn i kofferten, som er nøyaktig 44cm lang innvendig.  breden er ca 30 cm.  Hele anlegget blir da 44 x 88 cm :


Det er kun svingmodulen til høyre som er ferdig sammenskredd.  Det kan vi se på forsterkningene som er skrudd fast for å stabilisere modulen.

Et lite problem med Arduino er å få til en rimelig og effektiv permanent tilkobling av ledninger.  Jeg har benyttet Screw Shield til dette.  Det fungerer greit, men tar mye plass, både i høyden og bredden.  For et par uker siden oppdaget jeg at kjell.com har en annen grei løsning på dette :


med tilhørende ledninger :


PÅ bildet under kan man se at jeg har byttet ut den ene (grønne) Screw Shielden med Quici-Click kontaktene.


Hva gjenstår ?
  1. Anlegget mangler landskap
  2. En effektiv måte å skru sammen de fire modulene - denne jobber jeg med.
  3. Jeg mangler programmeringsspor,  jeg måtte derfor ta i bruk Multimausen for å omprogrammere,  da jeg oppdaget alle tre lokomotivene jeg hadde med meg hadde adresse 3.
  4. Raspberry Pi er ikke konfigurert - jeg kjører derfor JMRI på Laptoppen.
  5. En IR-Sensor er tilkoblet, men ikke konfigurert i DCC++.
  6. Automatisert kjøring er ikke ferdig
  7. Pensen har ikke motor
Erfaringen med manuell kjøring var også interessant.  I forhold til H0 var kjøreegenskapene på Fleischmann V100 lokomotivet litt skuffende.  Lokomotivet kommer fra Digitalt startsett.  Hovedproblemet virker å være liten vekt.  Det var også litt problemer/rykking ved kjøring over pensen.  Denne pensen har hjertestykke av plast - Jeg håper de nye Fleishmann pensene fungerer bedre. 

Jeg har også med meg to store amerikanske diesellokomotiver fra Atlas, med innebygget dekoder.  Dette er faktisk de to første DCC lokomotivene jeg kjøpte for over 20 år siden.  De kjører mye bedre, selv om de er litt vanskelig å styre, (de mangler BEMF).




Endret av programmeringssporet - 09 oktober 2018 kl. 00:47
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 08 september 2018 kl. 22:25
Ferieerfaringer

I dag var det regn, så da ble det videre sammenskruing av feriesporet.  To av tre deler er nå kjørbare.  Her er et bilde av hvordan de ser ut når de kommer ut av kofferten :

Og her er de satt sammen forprøvekjøring.  Foreløpig er det Roco Multimaus som gjelder, men vi kan også se huset hvor det bor en Arduino UNO med Motor Shield, som skal kjøre DCC++.  Jeg har også en Raspberry Pi for JMRI og annen programvare.  Vi kan også se en av IR-sensorene i et hjørne.  Det gjenstår å skru opp tre til, i hvert sitt hjørne, og koble dem til Arduinoen :


Den siste delen er enda ikke skrudd sammen.  Den er like stor som de andre, med to rette spor og et sidespor, slik at det blir en oval med sidespor når jeg tar den er klar.


Endret av programmeringssporet - 08 september 2018 kl. 22:27
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 30 august 2018 kl. 01:46
Ferieplanen

Inspirert av de mange Z-Skala koffertanleggene, bestemte jeg meg for å lage noe tilsvarende i N-Skala.
Jeg tok skinnene fra et startsett, printet en del 3D profiler og puttet alt i en Aluminiumskoffert fra Biltema. (Det er vel kun biltema som selger aluminiumskofferter i plast?).

Biltema har også noen fine bokser som passer veldig bra til N-Skala materiell.  Slik ser kofferten ut :



Hvis vi tar ut boksene med lok og vogner, kan vi se hvordan jeg har festet skinnene til 3D profilene.  Når jeg har fått skrudd alt sammen, vil hele anlegget være i tre deler som det er plass til i kofferten, sammen med materiell og styring - og som det tar ca. 1. munutt å sette opp.

Styringen er basert på en Raspberry Pi og en Arduino med Motorshield og DCC++.


Endret av programmeringssporet - 30 august 2018 kl. 01:48
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 20 juni 2018 kl. 18:45
Test av DCC++ uten motorshield.

Hvis man ønsker tilbakemeldinger / sensorer som skal brukes i RocRail eller JMRI kan DCC++ på Arduino være et rimelig alternativ.  Jeg har nå testet å bruke en Arduino UNO uten motorshiled, hvor jeg har installert DCC++.

Etter at DCC++ er latet opp i Arduinoen, kan man gå inn i Arduino terminalen,  sette denne til 115200 Baud, nederst til høyre.

Sjekk om man får kontakt med kommandoen :
< s > - (liten, omsluttet av mindre enn og større enn paranteser,  du får da en statuslinje tilbake.
< S 411 13 1 > - definerer  sensor 411 på pinne 13,( den med led).  hvis du nå kobler en ledning mellom 13 og gnd, vil du få meldingen < Q411 > , samtidig som LED slukker.  Når du fjerner ledningen vil du få meldingen < q411 >  samtidig som LED tennes.  Det er greit å bruke pinne 13 siden man får tilbakemelding med LED'en, men det er viktig å huske på at pinne 13 ikke kan brukes hvis man installerer Arduino Motor Shield.

Her er en liste over de forskjellige pinnen som kan benyttes :

2

4

6

7

16 – A2 - Navnet i DCC++ er 16, men den fysiske pinnen er merket A2

17 - A3

18- A4

19- A5

Med et endret Motorshield, eller uten Motorshield kan også disse pinnene benyttes
8
9

Uten Motorshield kan også disse pinnene benyttes :

12
13
14 – A0
16 . A1

Jeg har testet alle disse pinnene, og de fungerer, slik at man kan koble til opp til 14 sensorer på en Arduino UNO,  Ganske rimelig kr 100 + en USB kabel.

Noen andre kommandoer som man trenger :

< e >- liten e ,  slett alle definisjoner,
< E > - stor E, lagre sensordefinisjonene permanent
< S > - Liste opp alle sensordefinisjoner
< Q  >- deteksjonsstatus på alle sensorer





Endret av programmeringssporet - 20 juni 2018 kl. 19:01
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 14 juni 2018 kl. 14:33
Fase 1 – Denne var ganske enkel å få til.  Jeg måtte lage et program som kan koble seg opp mot Arduinoen via USB serieport, og lese en fil med et skript.  Denne skriptfilen inneholder kun to typer kommandoer :
1.    DCC++ kommandoer. F.eks. strøm på fjernet større/mindre tegn, virker dårlig i html side)  :1  eller kjør tog: t1 3 20 1 .  Oversikt over DCC++ kommandoer finner man her : https://github.com/DccPlusPlus/BaseStation/wiki/Commands-for-DCCpp-BaseStation
2.    En pausekommand.  Her bruker jeg min gamle kommando som jeg har brukt i scriptene mine i mange år, feks : WAIT SEC 003, som medfører at skriptet venter tre sekunder før neste kommando.
Her er et enkelt eksempel  på et script som skrur på strømmen,  benytte DCC adresse 3 for å : skrur på lyset, starter toget, som kjører i et minutt, før det stopper, tar en pause, og kjører bakover i 15 sekunder før det stopper, og tilslutt skrur av strømmen :



Programvaren er også veldig enkel:  for hver linje I scripted, blir det enten sendt videre over serieporten, hvis kommandoen starter  med ‘<’, eller hvis linjen starter med ‘WAIT SEC ‘ vil programmet vente det oppgitte antall sekunder før det fortsetter med neste linje i scriptet.

Jeg vet ikke om dette var interessant å lese om – men planlegger å komme ut med mere informasjon utover, og tenker også å legge ut deler av styringsprogramvaren (Men da bør den vel kanskje støtte bla. Roco Z21 / z21 /start for å ha interesse for flere ?)  -  Argumentet for en slik enkel styring istedenfor f.eks. JMRI og Rocrail, er veldig lav terskel for å komme igang med enkle autmatiseringsscript.  Jeg tenker også å senere skrive litt om erfaringer med DCC++,  både positive og nesten katastrofale begrensninger. (f.eks. max 12 lokomotiver med JMRI, uten å restarte JMRI)

Litt av elektronikken i modulen :





Endret av programmeringssporet - 14 juni 2018 kl. 14:37
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 14 juni 2018 kl. 14:01

DCC++, LaserMåler, Raspberry Camera og Automatisering

'Her ser det ut som om det har hendt lite det siste året.

Neida, det er kun oppdatering av bloggen som har manglet.  Utover høsten 2017 var sidesporet såpass ferdig at jeg kunne starte testing med Automatisk kjøring med DCC++.  Her deles styringen mellom en Arduino og en Raspberry Pi, med kommunikasjon over USB porten.  Denne kommunikasjonen må fungere 100 prosent hele tiden.  Hvis man f.eks. mister en oppdatering av en sensor, vil modellen i Raspberry Pi være feil, slik at hele systemet blir ustabilt helt til det evt. Kommer en ny statusmelding for denne sensoren.  Etter en del testing, fant jeg ut at min styringsprogramvare ikke var stabil nok.  Jeg startet derfor på nytt, med å lage et nytt USB grensesnitt i programvaren, og utover den bygget jeg funksjonaliteten på nytt, delvis ved å benytte eksisterende programkode – men veldig mye er nytt.

En annen grunn til å bygge på nytt – var ønsket om å lage et system, som er lett å sette opp for enkle automatiseringer – og som kan utvides etterhvert.  Jeg har derfor laget en fasedelt implementering :

 

1.      1. Enkle Scripts som kun sender meldinger til Digitalsystemet – ingen tilbakemelding benyttes.

2.       2. Scriptbasert men også Støtte for tilbakemelding – slik at man kan  lage både enkle og avanserte kjøremønstre.

3.      3. Multitasking – flere scripts/tog  kan kjøre samtidig.

4.       4.Interlocker – hvert skript/tog må be om resurser (f.eks. blokker før de kan starte)

5.      5. Automatisk kjøring til et bestemt sted på anlegget, uten at det må defineres skript for dette.  Dette forutsetter at styreprogramvaren, har en funksjon for å ta vare på definisjonen av hele anlegget, med alle spor, og hvordan de er koblet sammen.  Det må også være en funksjon hvor systemet kan lære hvordan hvert enkelt lokomotiv oppfører seg, og hvordan det bør styres.  En annen viktig funksjon er at systemet hele tiden vet med størst mulig nøyaktighet hvor hvert enkelt lokomotiv og vogner befinner seg.  Fase 5 vil være inndelt i underfaser, hvor det sansynligvis vil komme flere faser etterhvert.

6.       6.Automatisk optimalisering av CV’er for motorstyring.  Dette er en fase som går i parallell med de andre, og som også kan deles inn i underfaser.  Første underfaser kan f.eks. være :

a.       Lese inn CV verdier.

b.       Bestemme dekodertype.

c.       Forstå dekodertyper.

d.       Analysere prøvekjøringer, og endre CV’er etter ønskede egenskaper.

e.       Generere prøvekjøringer.

 

Status på sidesporet i dag er at fase 1,2 og 3 er ferdig og uttestet til å fungere stabilt.  Fase 4 er implementert – og testet litt.  Ikke funnet noen feil eller begrensninger enda.  5 er litt implementer ved at jeg har laget en kommando, f.eks. : STOP AT BLOCK 702 000 METER 020 , som betyr at toget skal stoppe i BLOCK 702, 0 meter og 20 milimeter fra blokkens startpunkt, men jeg er fortsatt avhengig av et skript for å starte lokomotivet.  Funksjonen er også avhengig av å vite hvor langt toget kjører i løpet av et sekund på de aktuelle hastighetstrinnene.  Dette begynner å fungere, men for øyeblikket stopper lokomotivet opp til 2 centimeter feil.


Bildet inder viser Sidesporsmodulen med noen ekstra skinner, 6 IR-sensorer, en Laser avstandsmåler for selve sidesporet, og et Raspberry Pi camera - som skal brukes til posisjonsbestemming v.h.a. bildeanalyse.


Første forsøk på bildeanalyse.  Den første sorle linjen traff ganske bra,  den under fant noe rødfarge i fjellveggen istedenfor.


fortsetter under : (forumproblem med lange innlegg?)





Endret av programmeringssporet - 14 juni 2018 kl. 14:32
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 04 juli 2017 kl. 17:46
Basisfunksjonaliteten i MultiTouch Controlleren min fungerer ok, men jeg har ikke implementert  bremsefunksjonene enda.  Det er to grunner til det:
  1. lite minne i Arduino prosessoren.  For å implementere ny funksjonalitet, må jeg optimalisere bl.a. minneforbruket i eksisterende kode.
  2. Det er litt ustabilitet, sansynligvis fordi prøveledningene, som jeg har brukt til å koble til Potensiometrene har litt ustabile plugger.
P.G.A. dette og ønsket om å også ha et fastmontert betjeningspanel  på Sidesporsmodulen, har jeg begynt å lage en ny :


Som man ser av bildet er den basert på et likt betjeningspanel og LCD panel.  På bildet kan man også se Arduinokortet (Adafruit Feather M0), og et hvitt lite kort som er en I2C basert IO ekspander som jeg holder på å bygge – for å styre releer på Sidesporsmodulen.
På bildet under, kan man se hvor forskjellig den nye controlleren er :


Her kan vi se at antall ledninger er sterkt redusert.  En av grunnene er at den lille røde Arduinoen (Sparkfun Pro Micro) er erstattet med en Adafruit Feather som er plugget inn i LCD modulen – uten ledninger.   I tillegg til enklere oppkobling, har en langt raskere og kraftigere prosessor.  Istedenfor en liten 8 Bits prosessor, er det en 32 bits ARM M0 – riktignok, en av de aller minste ARM prosessorene, men mye mere kapasitet i forhold til en tradisjonell Arduino :

” At the Feather M0's heart is an ATSAMD21G18 ARM Cortex M0 processor, clocked at 48 MHz and at 3.3V logic, the same one used in the new Arduino Zero. This chip has a whopping 256K of FLASH (8x more than the Atmega328 or 32u4) and 32K of RAM (16x as much)!”
https://learn.adafruit.com/adafruit-feather-m0-basic-proto

Og så finnes det et Adafruit Feather kort med samme prosessor, men med innebygget WI-Fi.   Dette kombinert med innebygget LI-PO lading (Som det er i alle Adafruit Feather) gjør dette til en ideell plattformen for å lage en alternativ controller – istedenfor å kjøpe en ny ROCO WI-FI Multimaus.

Mellom LCD modulen og Arduinoen, har jeg også satt inn et ekspansjonskort , hvor jeg har loddet inn en seks pins plug:

Funksjonen til ledningene er :
1.    Rød      : +3.3 Volt, koblet direkte til hovedpotensiometer, og via motstander til de andre.
2.    Sort      : gnd. , koblet direkte til hovedpotensiometer, og via motstander til de andre.
3.    Hvit      :  koblet rett til Hoved-Potensiomenter (Throttle)
4.    Blå        :  Venstre Brems
5.    Grønn  :   Høyre Brems
6.    Lilla      :  Damplokreguleringen (Forover / Bakover)
De fire trykknappene er også koblet til potensiometrene med noen motstander, som gjør at jeg også kan detektere dem, med de samme tilkoblingene – slik at jeg sparer ledninger og antall innganger på Arduinoen.



Styringen av Sidesporsmodulen fungere bra, men jeg må koble ledningene mere permanent.  Første skrittet er relestryringen, som jeg skal styre via I2C bussen med en I2C IO Expander (MCP23008) og en 8 veis reledriver (ULN2803).  På bildet under kan man se at jeg har koblet I2C bussen fra Arduino Teensy til Expanderkortet, og videre til en INA219 Strømmåler. (grønn og Gul ledning for  I2C signalene, Rød og Sort  for strøm og jord).  Statusen på denne er at jeg har lagt inn funksjonalitet i koden på Teensy kortet til å sjekke om den får kontakt på adress 32 (IO Expanderen) og 64 (Strømmåleren), men jeg mangler fortsatt funksjonalitet i koden til å styre releene og lese av strømforbruket, og så må jeg også koble til releer og strømkilde.  Planen er å koble dette opp med mere permanente ledninger, istedenfor disse midlertidige prøveledningene – når jeg flytter elektronikken inn i bakveggen.


Men planen nå er å ta med meg den nye kontrolleren på ferie – så får vi se om jeg får tid til ny programvarefunksjonalitet på denne.



Endret av programmeringssporet - 04 juli 2017 kl. 17:53
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 23 juni 2017 kl. 00:58
Programvare

For å komme videre med programvaren, var det nødvendig med noen flere knapper i TouchControlleren min.  Jeg har begynt å lage en ny versjon av programvaren, som støtter dynamisk oppsett av inntil 6 knapper i bredden.  Dette er ikke helt ferdig enda.  I mellomtiden har jeg laget et nytt midlertidig kjøredisplay for uttesting av sidespormodulen:



Funksjonen til knappene er :

<1> og <0> for å koble til/fra DCC kjørestrøm.
ADR for å gå inn i meny for å velge lokomotivadresse
T1+ og T1- for å legge om Turnout 1
F0 F1 +/- for å styre Lys og Funksjon 1 på Lokomotivet

Alt dette er som sagt midlertidig - den mangler f.eks. feedback i form av posisjon på sporveksel og Funksjoner

Jeg har oppdaget en stor svakhet med Sidespormodulens testelektronikk.  Det å plassere den på en egen plate, med mange ledninger mellom elektronikkplaten og selve modulen,  gjør det vanskelig å flytte den.  Jeg har derfor prioritert å endre dette :

Først har jeg laget 7 3D-printede rammer som skal dekke hele fronten av modulen.  Rammene er mellom 4 og 8 cm høye, og der skal det være plass til overvåknings LED og Displayer, samt input kontrollere.  Ved at jeg har delt dette opp i 7, kan jeg lage nye paneler når jeg får behov - uten å måtte printe ut alt på nytt.

jeg har også laget noen vinkelprofiler - som jeg bruker til midlertidig å skru fast Raspberry Pi og Arduinoer til fronten av modulen.

Modulen er nå flyttbar igjen - og jeg har full tilgang til elektronikken, for feilsøking, og endringer i programvaren .



Til høyre rett foran BR64 Lokomotivet, kan man også se en Lasermåler som er montert.  Denne står i 90 graders vinkel på sporet, og hensikten er å detektere tog og telle vogner.  På testmodulen har jeg brukt en vanlig IR reflekssensor, men jeg hadde ingen ekstra som fungerte godt, så da ble det en lasermåler - litt dur (ca kr 120) men det ser ut til at den fungerer utmerket til å detektere, og måle lengde på lokomotiver og vogner.  Under Lasermåleren har jeg plassert RFID sensoren som jeg måtte fjerne fra testmodulen, p.g.a. Aluminiumsprofilene.  Når programvaren blir ferdig vil jeg da kunne lese ut DCC adresser og identifisere vogner med RFID brikker. 


Når programvaren blir mere stabil, og koblingene blir mere faste, skal jeg flytte all elektronikken inn i bakveggen til modulen.  Jeg har derfor laget tilsvarende rammer i bakveggen, med samme festeskruehullavstand - men høyere rammer - slik at det blir plass til mere elektronikk (Rammene til høyre står i 90 graders vinkel  - slik av standardbredden på rammene - nå blir vertikalt istedenfor



Endret av programmeringssporet - 23 juni 2017 kl. 01:16
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 04 juni 2017 kl. 16:18
Den eneste grunnen til at jeg ville bruke sporvekslen med innebygget Digitalmotor var fordi jeg trodde jeg skulle spare tid – men der tok jeg feil :

Jeg fikk ikke DCC++ til å kommunisere med min Roco Digital Turnout Driver.  Med Roco Multimaus hadde jeg programmert adressen til 1.  Etter å ha lest alt jeg fant om forholdet mellom Roco / ExpressNet nummerering i forhold til JMRI, og forsøket med å legge til 4, og tilslutt prøve alle adresser mellom 1 og 5, koblet jeg den til en Roco z21.  Da fungerte den igjen med Multimausen på adresse 1.  Neste skritt var JMRI.  Der fungerte den også via z21 – og da så jeg det, i Turnout tabellen.  Den ble oppfattet som adresse 0, og da jeg leste manualen til DCC++, så jeg også at den opererer med adresser fra 0 og oppover.  En rask tilbakekobling til DCC++ og jeg hadde kontroll med kommandoene <a 0 0 0> og <a 0 0 1>.
Forklaringen fant jeg også : http://www.dccwiki.com/Accessory_Address

DCC operer med  Decoder Addresser og Output Addresser.
Decoder adresser benyttes normalt.  Det er en 9-bits adresse til dekoderen.  En dekoder kan støtte opp til 4 sporveksler på denne adressen. I kommandoen <a 0 0 1>, er første nullen Decoder Addresse, den neste sier hvilken sporveksel, innenfor dekoderen, 1 tallet er posisjonen som sporveksel skal legges over til.  Når man benytter Decoder Adresser skal man da legge til 4 i Roco / XpressNet.

Roco’s Digitale Sporvekselmotor benytter ikke Decoder Addresser, men Output Addresser.  Da er det en 11-bits adresse for hver sporvekselmotor.  Så istedenfor å legge til 4, skal man nå legge til 1.  JMRI eller DCC++ adresse 0 blir da 1.

Nå som jeg vet hvilken kommando som skal sendes, er det bare å jobbe videre med programvaren til Multicontrolleren, slik at den både kan styre DCC veksler og Servo med Arduino styring.



Endret av programmeringssporet - 04 juni 2017 kl. 16:19
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 26 mai 2017 kl. 23:35
Fordelen med å lage ting selv er at det virker !

Ulempen med å lage ting selv er at man tror at det ikke virker.  Dette er ihverfall konklusjonen min etter dagens tester :

1.    Jeg koblet opp 4 Pols releet til å koble programmeringssporet mellom Kjøre og Program utgangen til DCC++.  Til dette bruker jeg to poler.  Polene 3 og 4 benytter jeg til å bryte strømmen på en egen blokk, slik at jeg sikrer at ingen tog kommer inn på programmeringssporet når programmering er igang.  Etter denne oppkoblingen virket CV skriv, men ikke les.  Les virket kun på den skinnen som var koblet rett i DCC++ programmeringsutgangen.  Jeg byttet ut ledningene med tykkere ledninger.  Det hjalp ikke.  Deretter koblet jeg ut releet.  Det hjalp ikke.  Jeg tok skinnene fra hverandre.  Det hjalp ikke.  Jeg koblet den løse programmeringskinnen til programmeringssporet.  Da sluttet også det å virke.  Det var først da at jeg fikk misstanke om at det var noe feil med strømskinnen til ROCO (Skinne fra startsett med strøminnkobling).  Da denne ble fjernet fungerte alt.  Kan det være en Analog Strømskinne ?  Det bør det ikke være,  fordi jeg tror at jeg kun har 4 strøminnkoblingsskinner i gammel RocoLine utførelse – og alle kommer fra 4 forskjellige Digitale startset.  Dette tyder jo på at det er en kondensator i skinnen, som tillater CV skriv, men ikke les.  Konklusjon : Mine koblinger virker, men feil på en Roco skinne.

2.    Neste skritt var å sette opp Serieport konsentratoren.  Denne Arduino Teensy kan vi se midt i bildet.  Den er koblet til Raspberry’en via den hvite USB kabelen.  Denne forbindelsen bruker jeg til min styringsprogramvare.  Det går også en  hvit og en grå tynn ledning fra Teensyen til Raspberry GPIO.  Over disse kjører kommunikasjonen mellom JMRI (/dev/ttyAMA0) og teensy (Serial1).  Videre går det en Grå ledning fra Teensy til Arduino UNO med DCC++ og motorshieldet, for å sende kommandoene som kommer fra en av ingangene koblet til Rasberry’en.  Det går også en blå returmeldingsledning fra UNO’en til Teensy’en via en spenningsdeler (10K og 20K) for å redusere signalet fra 5Volt  (UNO) til 3Volt (Teensy)

3.    For å styre releet satt jeg først opp et Tinkerkit relekort (Orange) og koblet dette opp mot Teensyen (Utgangen driver spolen på det store releet).  Dette fungerte, bortsatt fra at Teensyen ofte gikk i heng når releet koblet fra.  Jeg flyttet derfor denne funksjonen til UNO’en og definerte dette som en Utgang i DCC++.  Det fungerte greit, men hadde noen tilfeller med at Teensyen fortsatt gikk i heng – selv om den ikke lenger var koblet til.  Det er sansynligvis støy på 5 Volt forsyningsspenningen som ødelegger.  Løsningen ser ut til å være å forsyne releet med en egen strømforsyning.  Jeg får 12 Volt fra en separat Laboratoriestrømforsyning som forsyner det store releet direkte, og det lille via 5 Volt spenningsforsyningen (Orange på et hvitt breadboard).  Denne oppkoblingen ser ut til å fungere stabilt.  Bildet under viser JMRI Decoderpro, som leser CV’er.  Vinduet under er Arduino Seriekonsoll,  hvor jeg ser alle meldingene fra og til JMRI, samtidig som jeg kan gi inn egne kommandoer i input feltet.


4.    Første forsøket på å styre den Digitale ROCO  Sporvekselen fra DCC++ fungerte ikke.  Den virker i Multimausen på adresse 1.  Jeg husket at det er noe offset ved bruk av JMRI, men fikk det ikke til å fungere med adressene 1,2, 3 og 4.  Jeg har googlet litt å funnet ut at offset skal være 4, slik at Multimaus adresse 1 – tilsvarer adresse 5 i andre DCC systemer.  Skal prøve dette neste gang.

5.    Neste skritt er å teste ut min programvare for styring, og utvide denne slik at den logger alle lesing som JMRI gjør – slik at den lærer hvordan hver enkel Digitaldekodertype bør leses. (Hvilke CV’er som er aktuelle).  



Endret av programmeringssporet - 26 mai 2017 kl. 23:38
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 22 mai 2017 kl. 01:10
På sidesporet - eller rettere sagt, på elektronikkdelen av sidesporet er det fremgang :



Til høyre kan vi se en ny versjon av programvaren i Multicontrolleren.  Den har fått tre nye knapper i displayet:
<0> og <1>,  er for å slå strømmen av og på i sporet.  Jeg har foreløpig valgt å merke knappen med selve DCC++ kommandoene for dette. (<0>, <1>).
Den siste knappen merket ADR, er for å velge DCC adresse. Denne midlertidige versjonen, kommer opp med en keypad hvor man kan velge adresser fra 1 til 9.

Det er ganske upraktisk å utvikle nye versjoner av programvaren - samtidig som jeg bruker kontrolleren.  Jeg har derfor laget en ramme som jeg skal skru fast i forkant av Sidesporsmodulen.  I denne kan jeg sette inn forskjellige prototyper, for testing.  Dette gjør det mye enklere å teste nye oppkoblinger og nye versjoner av programvaren.  Jeg tror jeg skal sette opp to eller tre rammer på Sidesporsmodulen.  Senere planlegger jeg å printe ut en kombinert ramme og frontpanel til modulen.

Helt øverst til høyre, man man se det 4 polete releet ¨med sokkel, som skal koble sidesporet over i programmeringsmodus.  Jeg har valgt 4 poler for også å isolere programmeringssporet, med en egen 20 cm langt spor som jeg gjør strømløst under programmering - for å unngå kortslutning hvis et tog kommer inn på sporet.  Jeg mangler 12 Volt strømforsyning i modulen før jeg kan gjøre dette ferdig.

Midt i bildet på en balsaplate gjør jeg en prøveoppkobling.  På større moduler får jeg en utfordring med avstander.  Servoledninger bør være korte max 30 cm.  Det samme gjelder I2C bussen.  Maksimum avstand meller sporveksler som kan drives av en Arduino, blir da 30 + 30 + 30 + 30 = 120 Centimeter.  Dette kan løses enkelt ved å koble to eller flere Arduinoer til Raspberryen, med opp til 5 meter lange USB ledninger.  Ulempen med det er klumpete kabler og mange connections fra f.eks. JMRI.  Jeg tester derfor ut god gammeldags RS232.  Jeg har fått tak i noen rimelige RS232 drivere med DB9 plugg.  Jeg har valgt å taste vanlig Ethernet (CAT5) kabel, med egne plugger istedenfor standard RS232 - DB9 ledninger.  Med en Arduino UNO, som i bildet kan ikke USB og RS232 brukes samtidig.  Da er en Arduino Leonardo grei å ha (rett nedenfor displayet), fordi denne kan kommunisere uavhengig med USB (Serial0) og RS232 (Serial1). Det samme gjelder Arduino Pro Micro.  Jeg har imidlertid bestemt med for å teste ut Teensy LC (Low Cost) istedenfor.  Denne kan dere se i det hvite Breadboardet nederst i midten.  Kretskortet rett over, er under utvikling.  Der skal det være tilkoblinger til tre serieporter og I2C buss, og noen andre tilkoblinger.  Planen er at Raspberryen skal kobles til USB porten på Teensy, og at serieporten på Raspberryen (GPIO header) skal kobles til en av serieportene på Teensy.  Begge to går på 3.3 Volt - slik at de kan kobles direkte sammen.  Jeg kan da ha JMRI kjørende og min egen programvare på den samme Raspberry'en.  Programvare i Teensy skal ta imot og sende kommandoer fra begge, og sende de videre til Arduinoen som kjører DCC++ via serieport. (Her må jeg lage en spenningsdeler på signalet fra Arduinoen (5V) til Teensy (10 KOhm på inngang, og 20KOhm til jord?).


Bildet under viser oppkoblingen av RS232 : RØD er 5 Volt (Dette blir også overført i kabelen - pinne tre), Brun og Sort er Jord, Orange er Transmit og Gul er Receive.



Endret av programmeringssporet - 22 mai 2017 kl. 01:30
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 14 mai 2017 kl. 20:58
Hei,

En av de geniale tingene med DCC++ er den enkle protokollen i forhold til andre DCC systemer.  Dette ilustrerer nok også at de kommersielle DCC sentralene er utviklet for flere tiår siden. Da embedded utvikling var tungt og controllerene hadde lite ytelse.  Selv som f.eks. Roco  z21 er ganske nyutviklet, baserer den seg på den gamle Lenz ExpressNet protokollen fra DCC'ens tidligste år.  (Jeg har også problemer med å få JMRI til å fungere bra sammen med z21)

Hvis du har bestilt originalt Arduino Motorshield må du huske på bryte v-in koblinngen, som beskrevet i denne lenken :
https://github.com/DccPlusPlus/Documentation/blob/master/Motor%20Shield%20Pin%20Mappings.pdf

Jeg gjorde ikke det.  Det kostet meg en Arduino og brent strømføler på MotorShield, slik at jeg ikke kunne lese ut CV'er i en uke, mens jeg ventet på nytt MotorShield.

Til toppen
Laurenz Se rullemeny
Medlem i MJF
Medlem i MJF


Medlem siden: 03 november 2004
Land: Norway
Status: Utlogget
Points: 580
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér Laurenz Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 14 mai 2017 kl. 14:51
Veldig spennende. Jeg har akkurat bestilt meg et motorshield for å kunne leke litt og bli kjent med DCC++ 
En ting som gjør det veldig fristende er muligheten til å kunne bygge sine egne kontrollere.
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 14 mai 2017 kl. 01:19
Sidesporet med Raspberry og tre Arduinoer

I dag byttet jeg ut Roco Multimaus og MERG DCC sentralen (for programmering) med DCC++.
På bildet har leg lagt bakplaten ned foran modulen.  På denne platen er det montert en Raspberry Pi 2 B som kjører min styringsprogramvare og JMRI Decoderpro.  Det er også montert en Arduino UNO med et Arduino Motorshield på toppen.  Denne kjører DCC++.  Skinnene som ligger til høyre, er et midlertidig programmeringsspor.  Jeg skal sette opp noen releer som skal koble sidesporet (det midtereste sporet i bildet) opp mot Programmeringsutgangen fra Motorshield/DCC++.


Til høyre ligger MultiControlleren.   Den er nå istand til å kjøre både Analog styring, og DCC++, men foreløpig kun med adresse 3 og hastighestssteppene 0,5,6,7,8,9,10 og 12.  Det fungerer greit sammen med DCC++ for prøvekjøring, selv om hastighetsstep 12 i 128 steps modus, som er det som støttes av DCC++ er ganske sakte.  Dette er selvfølgelig en ganske grei sak å endre.  På displayet kan vi se tre linjer:
1. Statuslinje - inneholder foreløpig ikke mye informasjon.
2. Informasjon om lokomotivet som styres.
3. Hastighet og bremseinformasjon: tre felt :
  a.  Posisjon på motorpotensiometer
  b.  Posisjon på bremsepotensiometer - skal nok endres til å vise trykk i bremseledning.
  c.  Simulert hastighet - her er det noe feil for øyeblikket - ved at gammel verdi ikke blir slettet.

Nederst i displayet er det 4 knapper for sporveksler.  De skal være grønne når sporveksel ligger rett.  Når man trykker på knappen blir den rød, inntil sporveksel rapporterer tilbake at den er lagt om, da blir knappen gul.  For øyeblikket viser den de servodrevne sprovekslene på hyllemodulen (401,402,403 og 404).  Den støtter foreløpig ikke DCC baserte sporveksler, men dette er også en enkel sak å implementere i programvaren, slik at selve sporveksel til sidesporet (701), som er en gammel RocoLine med Digital Pensemotor, fra et startsett - kan styres.

Retning styres med de sorte runde trykknappene.

Viktige funksjoner som mangler i denne versjonen av multicontrolleren er :
1.  Skjermbilde for å velge Lokomotiv.
2.  Skjermbilde for å styre Modulen, strøm av / på , Analog / Digital.
3.  Lys og Lydfunksjoner i lokomotivene.
4.  Porgrammering av CV.
5.  Vise spenning og strømforbruk.
6.  Vise sensorverdier.
7.  Implementere Akselerasjon og Bremsefunksjonen, også avhengig av togstørrelser og lokomotivtype

Øverst til venstre i bildet,  har jeg prøvemontert en Lasermåler og en Arduino UNO.  Denne rapporter avstanden til toget med 1 mm nøyaktighet i en avstand opp til ca 15 cm.  Den har også en lysmåler som er istand til å oppdage et svakt frontlys i et ROCO lokomotiv på ca 50 cm avstand i mørket.

Tidligere (i starten av bloggen) har jeg forsøkt med en ultralydmåler å automatisere instillingen av CV verdiene for motorstyring, men jeg tror dette blir enklere med Lasermåleren fordi den ser ut til å være mere nøyaktig.  For øyeblikket rapporteren den endringer av avstander på 2 eller flere milimeter opp til 10 ganger pr. sekund. 

Det som kan være litt interessant er at det med DCC++, er mulig å få et komplett digitalsystem for ca kr 300.  (kr 100 for en Arduino UNO fra kjell.com og ca kr 200 for et originalt Arduino Motorshield fra f.eks. digikey.no).  I tillegg trenger man en PC eller en Raspberry og evt et nettbrett eller en smarttelefon).  All programvaren er gratis, DCC++ og JMRI.  Oppsettet tar bare noen minutter med en liten endring på Motorshieldet og to ledninger som må kobles opp - alt dette uten lodding)


Endret av programmeringssporet - 14 mai 2017 kl. 01:59
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 10 april 2017 kl. 21:33
Påskeprosjekt.

Jeg hadde planer om å jobbe videre med n-skala strekningsmodulen i påsken. pg.a. plassmangel ble det to andre små prosjekter :


For en stund siden fikk jeg tak i et Fleischmann digitalt startset med Multimaus.  Veldig godt egnet til å komme igang med digital n-skala.  Med dette skal jeg begynne å teste ut pc-styringen i forhold til bl.a.akselerasjon.

Hovedfokus blir imidlertid programvare for servostyring.  På bildet over, kan man se en komplett servostyring koblet til en Peco H0 veksel.  Styringen består av en Arduino Uno, med en strømmåler på toppen.  Over servoen har jeg festet en temperaturføler, og over denne et rele som styres fra Arduinoen, og kobler til strøm til servoen.

Når jeg tester dette får jeg tilbakemeldinger over USB porten, om hvordan servoen har det.  Her et eksempel :

V1:F: 0000086446 0086447040 :T 35 S 20 :MAMP  1.20 AVG 104.29 500.60 -0.20 :BUSV 4.16 AVG 4.71 MAX 5.01 MIN 3.84 :LOAV 4.16 AVG 4.72 MAX 5.04 MIN 3.84 :SHMV -0.01 AVG 13.19 MAX 59.45 MIN -0.01

forklaring :
V1 - Meldingsversjon
F: - full format, alle data, jeg har også et enklere format.  Dette formatet bruker for lang tid over serieporten.

Det neste 10 sifrede tallet er hvor lenge siden Arduinoen ble startet i millisekunder.
Det neste 10 sifrede tallet er hvor lenge siden Ardunoen ble startet i microsekunder.

Disse to tallene, kombinert med klokken på en Raspberry vil kunne fortelle meg nøyaktig når ting skjer.  Grunnen til at jeg har ganske mange sifres overlapp mellom millisekunder og microsekunder, er at microsekunder er ganske unøyaktig på Arduino UNO.

:T 35 - Er temperaturen på Servoen.
S 20 - Antall samplinger som ligger til grunn for denne statuslinjen
:MAMP 1.20 - er strømforbruket på servoen akkurat når meldingen ble sendt.
AVG 104.29 - er snittstrømforbruk for de siste 20 samplingene.
500 - er høyeste målte for de siste 20 samplingene
-0,20 - er laveste målte for de siste 20 samplingene.

:Busv 4.16 - Er input spenningen for øyeblikket - deretter kommer snitt, max og min.
(de neste spenningen er ikke så interessante)

Et interessant tall her er minimumsspenning på 3.84 Volt.  Dette har nok sammenheng med at jeg driver alt fra en USB port på PC'en for øyeblikket.  En annen ting jeg ser er at Servoen har veldig høyt strømforbruk i hvileposisjon.  Dette skyldes sansynligvis for mye treghet i mekanismen.

Input kommandoene er :
0 -posisjon 0 grader
9- posisjon 180 grader
1 - 8 : relativ posisjon mellom 0 og 180 grader (5 er omtrent i midten)

a    Servo no 1
b    2
c    3
d    4
e    5
f    6
g    7
h    8
i    9
j    10
k    11
l    12
m    13
n    14
o    15
p    16
q    query - statusinformasjon (linjen over)
r    sleep 25ms
s    sleep 100ms
t    sleep 500ms
u    power on - releet
v    power off - releet
w    precision move, fulgt av to hex sifre for å angi nøyaktig posisjon i hele grader.
x    Xtended Address 1
y    Xtended Address 2
z    Xtended Address 3
 
En enkel kommand kan da være :
a9 - flytt servo no 1 (a) til 160 grader.

En mere kompleks kommando :
uttqssa0ssqv   (spenningsrele på, vent 0,5 sekunder, to ganger, print statuslinje, vent 0,2 sekunder, velg servo 1, gå til posisjon 0 grader, vent 0,2 sekunder, print status, spenningsrele av)

Et annet eksempel :
xcw20 - :   x:Velg servo for tilleggskort no 1,c: servo nr 3 på dette kortet, w20: Sett servo i posisjon 32 grader (20HEX=32 desimalt)

Dette er et enkelt grensesnitt som kan styres fra en hvilken som helst terminalemulator, f.eks. den innebygde i Arduino IDE, for testing.  Jeg skal nå gå igang med å lage et program for Raspberryen, som først skal forsøke å optimalisere posisjonene, og deretter kunne styre servoen fra f.eks. JMRI ved å simulere DCC++, xPressNet e..l.




Endret av programmeringssporet - 10 april 2017 kl. 22:25
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 18 mars 2017 kl. 17:19
Jeg begynner omtrent å bli ferdig med RFID på G3, G10 og Gr20 vognene mine.  Den eneste jeg sliter litt med er en Fleischmann G10 hvor vognbunnen av metall er en sentral del av konstruksjonen.  Jeg har bestemt meg for å vente med denne foreløpig fordi jeg bare har en av dem.  Neste vogntype er Dresden.  Jeg har 3 stk Fleischmann.  Dette er en gammel Dresden.  Det ser vi bl.a. på at den ikke har noen skråforsterkninger.  Dørene kan åpnes - jeg valgt derfor å plassere vektene i enden av vognen.  3D profilen med muttere skyves ned i hver vognende og blir festet mellom vognende og den første loddrette forsterkningen.  Alt er satt sammen uten lim.

Jeg tror jeg også har funnet ut av hvordan jeg gjør det med åpne vogner.  Her er første prototype :

Jeg har erstattet vekten med en 3d printet profil, med plass til RFID brikke og to små skiver i hver ende.  Planen er å lage last med innebygget magneter, som gjør at de blir sittende fast mot skivene.  Jeg har ikke testet enda - hvordan magnetene påvirker RFID signalet.  Denne første prototypen ble ganske rå i utførselse. bl.a. fordi to av hullene ble feilplassert slik at jeg måtte forstørre dem med Dremelen.  Den ble også litt for tykk, slik at jeg har redusert tykkelsen med 0.25 mm på de andre.

I dag fikk jeg for første gang montert sammen en komplett prototype av MultiControlleren med Touch display.  Det manger fortsatt noen paneler, men funksjonelt er den mekanisk ferdig med  (fra toppen):

1. Et lite Touch display.
2. Fire trykknapper.
3. Retningsomstiller for Damplok.
4. Tre potensiometere : i Mitten Hastighetsregulator.  De på siden skal være bremser.


Selv om den er komplett, og alle ledningen er koblet til - gjenstår det mye.  JEg må videreutvikle programmet, slik at den bruker Touch displayet.  I første omgang vil det nok kun inneholde samme funksjonalitet som LED displayene.  Senere kommer grafikken og Touch input.

Som man kan se på bildet, ble det ganske mange ledninger å koble sammen.  Feilsøking må nok gjøres ved å demontere alt.  Jeg har imidlertid funnet et nytt Display som kobles direkte oppå en Arduino Feather.  På bildet under, ser vi at det er det samme displayet.


Men innmaten blir dramatisk mye enklere.  Alle koblingene mellom Display og Arduino er ferdig, slik at jeg kun trenger seks ledninger til å koble til Potesiometere og fire trykknapper.

På bildet kan vi også se til venstre den sorte kontakten til  koble til et Li-Po batteri.  Nederst til venstre er Micro USB, som benyttes til programmering, seriekommunikasjon og lading av Li-Po batteriet (Arduinoen har innebygget Lading for Li-Po).  Til høyre, kan vi også se den blanke SD-Kort leseren som jeg en gang i fremtiden skal benytte til å lagre bilder, for visning på displayet.

Ved å sette inn en Arduino Feather med Wi-Fi, kan jeg derfor enkelt lage en kontroller, som kan kobles trådløst til JMRI eller direkte til en z21.  Eksempelprogramvare for Arduino finnes på Internett.


Endret av programmeringssporet - 18 mars 2017 kl. 17:31
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 02 mars 2017 kl. 23:32
Serieproduksjon av servofester og NFC for G3.

Den største fordelen med 3D printing for meg, er når det skal lages mange like deler.  Den første tar noen timer i et tegneprogram.  Senere er det bare å sette igang printeren - samtidig som man kan gjøre andre ting.  Jeg har brukt ganske mange timer på å designe servofestet mitt, men nå er jeg igang med serieproduksjonen - hvis man kan kalle det, printeren klarer nok ikke mere enn et komplett servofeste på en kveld :



Her er først et bilde av en som er nesten ferdig :


Til vestre for tannhjulet kan vi se stangen som driver sporvekselen.  Denne er koblet til en kort pianotråd (over tannhjulet) som er koblet fjærende til en annen stang som drives av tannhjulet.

Til høyre for servoen, kan vi se den hvite mikrobryteren for hjertestykkepolarisering.  Det skal også være en på venstre side.  Her kan vi se enden av de to stengene.  Den ytterste på hver side styrer microbryteren.  Årsaken til at jeg har separate stenger for mikrobryterene, er at jeg ønsker at disse skal bevege seg lengre.

Her er en oversikt over hvordan rammen og hoveddrevet er konstruert (Servoen skal monteres på høyre side):




Tannhjullet er trippel:  Nederst er det største hjulet som drives av tannhjulet på servoen.  Over denne et litt mindre tannhjul som driver stengene som styrer mikrobryterne for hjertesykkepolarisering.  Øverst er det lille tannhjulet som driver selve sporvekselen.

Det å  få G3 vognene brukbare med NFC identifisering og Fleischmann profikobling har vært en lang prosess.  Her er par bilder.  Det første bildet viser et enkelt 3p printet løsning på koblingsproblemet.  og til høyre første prototypen av NFC feste (under sylinderen) med innbygget vekt.  Vekten ble litt for liten.




Dette ble løst ved å lage profilen litt større - slik at vekten kommer opp i 49 gram.  Her et bilde av de 5 siste vognene jeg modifiserte :


For å få en effektiv identifisering og pakking av vogner, har jeg nå bestemt meg for å også sette på NFC brikker på eskene til vognene.

For å få dette registrert på en rask måte har jeg bygget ut funksjonaliteten i NFC identifikasjonssystemet mitt.  Programmet er laget slik at hvis jeg plasserer en ukjent eske med RFID brikke over sensoren, vil den anta at dette er en eske og koble esken til den siste vognen som har passert sensoren, når jeg bruker det hvite RFID kortet, som jeg da bruker for å bekrefte at  jeg skal koble esken til vognen.  Det fungerer greit, men forutsetter at jeg kjører en og en vogn over detektoren.  Fremgangsmåten blir da :

1. Detekter vogn
2. Detekter ny eske
3. Bekreft med det hvite kortet.

Ganske effektivt - Alle 10 G3 vognene ble registrert i løpet av 30 minutter.
På bildet under kan vi se at jeg har montert RFID brikken utenpå eskene.  På bl.a. Fleischmann plastesker, har jeg festet dem på innsiden



Endret av programmeringssporet - 02 mars 2017 kl. 23:57
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 13 februar 2017 kl. 22:23
Trøbbel med Raspberry Pi og Arduinoer.

En Arduino og en Raspberry fungerer veldig bra sammen via USB kabel.  På Testmodulen min har jeg hatt problemer med å koble opp flere Arduinoer til en Raspberry.  Jeg har derfor endt opp med flere Raspberry'er, slik at å starte opp modulen, er en ganske omstendelig prosess.

Problemet med flere Arduinoer koblet opp mot en Raspberry, er at de ofte bytter navn, slik at jeg måtte omkonfigurerer programvaren min - etter en reboot.  I dag fant jeg løsningen.

1. Plugg inn den første Arduinoen i USB porten.
2. Finn navnet den bruker nå på Raspberryen med kommandoen :
dmesg | grep ttyACM

Normalt vil navnet komme opp som ttyACM0 - hvis du bare har et tilkoblet USB device./ Arduino

3.
cd /etc/udev/rules.d
sudo vi 99-usb-serial.rules


legg inn en linje for hvert usb device ( i mitt eksempel to Arduino Uno og en Adafruit Feather):
SUBSYSTEM=="tty", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0043", ATTRS{serial}=="9543731393435120C0E1", SYMLINK+="ttyUSB-ARD01"
SUBSYSTEM=="tty", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0043", ATTRS{serial}=="95530343335351D0A1A2", SYMLINK+="ttyUSB-ARD02"
SUBSYSTEM=="tty", ATTRS{idVendor}=="239a", ATTRS{idProduct}==="800c", SYMLINK+="ttyUSB-HH0"


4. I mitt tilfelle, hvor jeg har to stk Arduino UNO må jeg identifisere dem med serienummeret.  Dette finner jeg med kommandoen :

udevadm info --attribute-walk -n /dev/ttyACM0 | grep serial

Jeg får da opp to linjer.  Den første er et serienummer uten teksten ".usb".  Dette serienummeret legger jeg inn i første linje i filen over.
Deretter gjentar jeg dette for de neste Arduino UNO'ene.  (plugg inn og finn serienummer)
På Adafruit Feather fikk jeg ikke opp noe serienummer - så da  fjernet jeg serienummeret i filen, og la inn riktig idvendir og idproduct.  Dette finner jeg i andre avsnitt av outputten fra kommandoen :
udevadm info --attribute-walk -n /dev/ttyACM2

5.  sudo reboot

6. Jeg kan nå aksessere Arduinoen med navnet jeg la inn som alias i filen : /dev/ttyUSB-ARD01 istedenfor /dev/ttyACM0.  Navnet i filen er nå koblet til serienummeret til Arduinoen slik at det vil forbli uendret - selv om nummeringen av arduinoen endrer seg (/dev/ttyACM0, /dev/ttyACM1)

Tilsvarende problemstilling kan man også få f.eks. med JMRI (eller annen programvare)  og Loconet, Lenz Interface,  DCC++ etc..  Man kan da følge oppskriften, og endre oppsettet i JMRI til å benytte det nye serieportnavnet. (Andre interface bruker ofte /dev/ttyUSB istedenfor /dev/ttyACM)









Endret av programmeringssporet - 13 februar 2017 kl. 22:51
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 06 februar 2017 kl. 03:43
Status Servo

Ting tar tid, men nå begynner jeg å føle at jeg har kommet frem til en prototype av den endelige versjonen.

I verkstedet mitt er det skråtak ved den ene kortveggen.  Der har jeg satt opp en hylleplate som er 25 cm bred.  Denne er i forbindelse med  benken med testmodulen.  Jeg har da fått et sidespor som skal gå fra testmodulen  til sidesporsmodulen som nå står mere eller mindre permanent montert 25 cm over arbeidsbordet.  Foreløpig er sporet ferdig fra testmodulen til hyllen.  Her legger jeg opp til 5 sidespor, som kan benyttes til oppstilling av lokomotiver, eller være utgangstasjon for et lite lokalt godstog som kan gå til Inglenooken på testmodulen.  Til dette trenger jeg 5 sporveksler med servostyring.


 
På bildet over  kan man se den gule første prototypen (0 versjonen) i midtten denne er koblet til sporveksel med en tradisjonell pianotråd som også gir fjæring.   For å belaste overføringen, har jeg valgt å ikke fjerne fjæren i Peco vekselen.

Til høyre for denne, er det en Arduino Uno som skal styre disse 5 sprovekslene.  Til Arduinoen har jeg laget en monteringsplate med dimensjon omtrent 95 x 65 mm.

Til høyre for Arduinoen er prototype 1.  Her er det et ekstra tanhjul.  Erfaringen med denne er at utvekslingen kanskje blir litt for høy – det blir for lite fjørpress på vekseltungene.  Hvis dette blir et stort problem bytter jeg ut det store tannhjulet med et mindre senere.  Dette er den første hvor hele mekanismen er printet i 3d-printeren inkludert festet til sporveksel.  Selve fjæringen, er en kort rett pianlotråd mellom glideskinnene.

Den neste jeg laget er nr 2 fra Venstre.  Her var målet å lage den liten.  95 x 65 mm og i underkant av 40 mm høy.  Den ble ok, men ganske kronglete å montere sammen.  Ved fullføring av prototype 1, kom jeg på ideen å plassere servoen på langs mellom glideskinnene – Denne versjonen har jeg derfor ikke planlagt å gå videre med, men planlegger å bruke denne ene jeg har laget, ved å montere den oprinnelige gule armen fra protoype 0.  Tannhjulet mangler for øyeblikket.  Det er utlånt til neste prototype.
Den neste var den som er helt til høyre.  Denne er stort sett skrudd sammen med deler som ble til overs fra de andre.  Jeg tror ikke jeg kommer  til å fullføre denne.  Hensikten var å teste ut servoplasserigen  mellom skinnene, og en forenklet ramme.

Til venstre er den nyeste, som egentlig kun er er forenkling og forminskning av den forrige, for å få den inn i min standardstørrelse på 95 x 65 mm.  Rammen er skrudd sammen av to deler.  Den underste som fester det store tannhjulet, og den øverste som består av sporene til glideskinnene. Servoen er også skrudd fast i denne.  I denne versjonen har jeg også optimalisert girutvekslingen.  Tannhjulet rundt servohalsen er så   liten jeg får den, og tannhjulet som driver armene er også forminsket.  Armen beveger seg nå ca 6 milimeter når servo beveger seg 180 grader.  Det som gjenstår nå på denne er pianotråden for fjæring og overføringsmekanismen til sporveksel.  Jeg skal også begynne forsøkene med montering av microbrytere for hjertestykkepolarisering på denne.   Jeg planlegger også en variant av denne, hvor armen går på tvers istedenfor, slik at den kan monteres som prototypen med gul arm, eller direkt under sporveksel.



Endret av programmeringssporet - 06 februar 2017 kl. 04:02
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 20 januar 2017 kl. 00:32
Den første prototypen (versjon 0) av servofestet er montert.  Den fungerer utmerket foreløpig men jeg har ikke testet den mye enda.  Foreløpig har jeg beholdt fjæren i Peco vekselen for å belaste servofestet maksimalt under utttestingen.  Som man kan se av bildet under, har jeg laget en ny litt lengre arm og laget fester for armen. 

Tre umidelbare svakheter med denne :

1. Størrelse på hele mekanismen - men dette var ikke fokus på denne første.
2. Lav utveksling og ingen fjæring, jeg må derfor benytte pianotråd mellom armen og sprovekselfor å få fjæring.
3. Mange skruer for å løsne armen for å gjøre justeringer.

Versjon 1, er forbedret på noen områder :
1.  Et ekstra tannhjul for høyere utveksling.
2. To skinner for glidemekanismen.  Planen er å koble armene sammen med pianotråd for å oppnå fjæring inne i mekanismen.

Denne versjonen er ikke helt ferdig enda, men jeg har prøvemontert den :

Her har jeg også laget en vinkelprofil som skal skrues fast til mekanismen og til sporveksel.  På denne måten kan jeg printe ferdig mekanisme med overføringsarm, og montere dette uten justeringer.

I perioden september - desember 2016, har jeg innkjørt tanklokomotiver, først to akslede, deretter treakslede uten løpeaksler.  Deretter  med tre drivaksler og løpeaksler, og i desember tanklokomotiver med 5 drivaksler.  Jeg kjører fremdeles prøvemodulen analog.  Den har 5 sidespor for hennsetting.  For å kunne ha flere analoge lokomotiver på sporet, laget jeg en hylle som koblet sammen prøvesporet, med sidesporet.  Foreløpig er det bygget med løse gamle rocoline skinner.  Det er på denne hyllen jeg nå tester ut servofestene, og da får jeg også noen nye sidespor, som jeg trenger nå som jeg i Januar starter inkjøring av tenderlokomotiver med tre drivaksler.

Jeg har også begynt å lage den versjonen av servofeste som jeg skal printe mange av.  Utfordringen jeg har hatt med å kombinere servo med tannhjul er plassbehov.  Jeg tror ikke jeg klarer å printe tannhjul som kan montereres direkte på servoakselen/tannhjulet.  Jeg har derfor montert tannhjulet på et servohorn.  Dette gir da stor omkrets og derved mange tenner på tannhjulet, som igjen gir lav utveksling.  Jeg har derfor montert tannhjulet over servohornet, og fått en alt for høy konstruksjon.  En løsning som jeg nå har valgt, er å montere tannhjulet under servohornet.  Jeg får derfor lavere høyde, og et relativt lite tannhjul, men kan ikke lage det så lite som ønskelig, fordi den nå ligger over deler av halsen til servoen.  Her er tegningen av konstruksjonen:


Og her er en uferdig versjon 2 :


Med denne får jeg en mye lavere konstruksjon, og jeg kan få samme nedveksling som prototypen, men mye mindre tannhjul :



En annen stor forbeding er at hele mekanismen skrues sammen uten bruk av balsaplate - som i de andre versjonene.  Hele mekanismen med sammenkobling til sporvekslel blir da laget med en servo, noen 3d printede deler, noen skruer og en kort rett pianotråd for fjæring.

Forskjellige versjoner av armen, kan da også gi forskellige plasseringer av mekanismen i forhold til sporveksel, under, eller på siden.




Endret av programmeringssporet - 20 januar 2017 kl. 00:47
Til toppen
programmeringssporet Se rullemeny
Veteran
Veteran


Medlem siden: 12 desember 2013
Status: Utlogget
Points: 405
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér programmeringssporet Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 12 januar 2017 kl. 23:00
Sitat: HelgeBe HelgeBe skrev:

Skal servoen og resten av mekanismen plasseres under sporveksleren?

Helge B.


Primære tenker jeg å felle mekanismen med Servo inn i grunnplaten ved siden av sprovekselen.  Hensikten er å kunne montere dette fra oversiden.  Senere når jeg har dekket den med landskapsdetaljer, gjør jeg service og utskiftninger fra undersiden, men først må jeg lage en mindre mekanisme.
Til toppen
 Svar Svar Side  123 7>
  Del innlegg   

Forum: Forumtillatelser Se rullemeny

Forum Software by Web Wiz Forums® version 11.06
Copyright ©2001-2016 Web Wiz Ltd.

Denne siden ble generert på 0,109 sekunder.