Doel:€250.00
Donaties:€88.00

Per saldo:€-162.00

Steun ons nu!

Laatst bijgewerkt
op 03-06-2025

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Een Rotterdams gebouw door Keska
Vandaag om 20:14:53
Aachenau West door wob
Vandaag om 20:14:40
PB Models, ICR-rijtuigen door zweistein
Vandaag om 20:02:20
Alt-Wutachtalbahn 2025 door Bert55
Vandaag om 19:58:45
LIMA IRM Cardanassen door patrick
Vandaag om 19:57:24
De bouw van mijn modelbaan in Thailand door Eric B
Vandaag om 19:25:04
Mijn eerste H0-modeltreinbaan in aanbouw door Dave.......
Vandaag om 19:18:04
Welke winkel voert deze merken? door Jeronimos
Vandaag om 19:08:06
Toon hier je (model)TRAM foto's. door spoorzeven
Vandaag om 17:53:27
Veevervoer ss/ ns door klusser
Vandaag om 17:34:57
Alweer is de Weller soldeerbout defect door TonM
Vandaag om 17:17:43
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Schachbrett
Vandaag om 17:02:37
Microstepper motoren voor armseinpalen door Eric v C
Vandaag om 16:57:41
Ombouw/Pimpen Bolle neuzen door bollen neus
Vandaag om 16:39:04
Roco Plan T van DC digitaal sound naar AC digitaal sound door Jeroen Water
Vandaag om 15:55:23
Toon hier je nieuwe (model-) spooraanwinst(en)... door Rob Ellerman
Vandaag om 13:37:38
Treinsamenstelling vooroorlogse D treinen door janw
Vandaag om 12:52:55
Acme nieuwe ICNG door Treinbestuurder
Vandaag om 12:48:16
Module vliegveld Jan van Mourik door MOVisser
Vandaag om 12:29:05
De IJmuider spoorlijn - korte geschiedenis en plaatjes door Vislijn
Vandaag om 12:15:43
Minder wissels door H0eGenaamd
Vandaag om 11:59:07
De overeenkomst tussen een Ovaalramer en een Motorpost. door FritsT
Vandaag om 11:51:05
De modeltreinen van Spoorijzer door spoorijzer
Vandaag om 11:24:57
The Summer of 69 door Eric v C
Vandaag om 11:23:46
Update: baan in de tropen door Eric v C
Vandaag om 11:19:20
Vraag over aandrijving / tandwielen Roco Blokkendoos (oud) door meino
Vandaag om 10:07:49
NS 8800 in spoor 0 door BartvD
Vandaag om 09:53:28
Stalen D 4 deurs spoor 0 door 1795
Vandaag om 09:37:12
Mijn eerste baan, Hexental in ho. 380x 120cm door Paul1969
Vandaag om 09:14:35
Raadplaatje door V200-G2000
Vandaag om 08:38:48
  

Auteur Topic: Een sketch in Processing: zelf geschreven grafische weergave met Arduino  (gelezen 2076 keer)

bask185

  • Offline Offline
  • Berichten: 5027
Toen ik me had bedacht dat ik een volledig arduino gestuurde trein baan wilde hebben, bedacht ik me ook dat het leuk zou zijn om er een grafische laagje op een computer toe te voegen aan het geheel. Toen zei ik: "ik ga dat niet zelf maken niet, er bestaat al goede software voor, het kost veel tijd blabla "

Nu 2 weekjes later ben ik toch eventjes aan het spelen geweest op mijn computer. Ik had namelijk twee argumenten om het toch zelf te doen. Ik hoef A geen bestaand protocol uit te pluizen en te implementeren en B het is rete leuk om te maken.

Dus zo doende heb ik gemaakt in Processing:

Een zelf geschreven trein programma!!!

Processing is een op java gebasseerd taaltje waarmee je grafische dingetjes kan doen op de computer. Je kan van alles doen van beeldbewerkingssoftware tot pacman en space invader tot trein programma's. De IDE lijkt heel sterk op de Arduino IDE. Het is ook door dezelfde mensen gemaakt. Veel functies van arduino werken ook in processing zoals millis(), print(), println(), write() etc. Ik vind het zelf een erg fijne taal omdat het object georiënteerd is en niet alleen event-based is zoals meeste GUI software zoals C# of Qt. In processing kan je gemakkelijk gebruik maken van je muis en toetsenbord. Daar zijn allemaal bestaande functies voor met een makkelijke syntax.

Wat het programma kan:
Op het moment niet zo veel. Ik kan op 1 van de 5 objecten aan de rechter zijde klikken en slepen naar een locatie. Met de pijltjes toetsen kan ik het object dan draaien en met delete kan ik het object verwijderen. Eenmaal geplaatst kan ik hem nog verslepen of verwijderen. Met de wasd toetsen kan ik alle object verplaatsen met 1 vakje. Ik was ook nog bezig met het in en uit zoomen maar de objecten wilden nog niet helemaal meewerken..... ???

Wat het programma moet gaan kunnen:
Processing is in staat om onder andere serieel te communiceren met USB apparaten zoals bijvoorbeeld een arduino. Het programma zal o.a. dienen als terminal. Ik kan op een wissel klikken of op een nog te maken knop die gelinkt is aan een geheugen object en zo kan ik dan 1 wissel of een hele straat schakelen. Bezetmelders (de groene bollen) krijgen een andere kleur als arduino's informatie opsturen. Met een zelf ontworpen protocol (zo simpel als mogelijk) kan ik samengevat de baan aansturen en displayen wat er gebeurt. Als ik een wissel met de hand schakel dan zal ook dit te zien zijn in het programma.

Om niet telkens je getekende baan kwijt te raken, komt er een 'save' en een 'load' knop. Bij het starten van het programma kunnen dan alle gegevens opgehaald worden uit een tekst bestandje en je bent klaar om te rijden.

Als deze basis af is, volgen de meer geavanceerde functionaliteiten zoals een rijregelaar voor treinen, een menu om instructielijsten aan te maken waarmee je bijvoorbeeld een trein kan laten pendelen of een wagonstam kan weg rangeren en de aller grootste uitdaging iets van een route planner en trein begeleiding maken zodat treinen niet op elkaar kunnen botsen.

Het leek me leuk voor degene die dit wel interessant lijken om van de ontwikkeling van dit programma af en toe een update te geven. Doordeweeks kan ik altijd wel een paar uurtjes in de avonden vinden om er aan te werken dus ik verwacht frequente updates te posten.

Bas
« Laatst bewerkt op: 13 January 2019, 20:50:51 door Bert van Gelder »
Train-Science.com
Train-Science github
It ain't rocket science ;-)

TrixExpress

  • Digitaal
  • Offline Offline
  • Berichten: 55
    • Mijn Digitale Trix Express Baan
Re: Een sketch in Processing
« Reactie #1 Gepost op: 04 January 2019, 23:34:21 »
Hallo Bas,

Is inderdaad heel er leuk om je eigen treinbesturings programma te maken. Ik ben daar ongeveer al 12 jaar mee bezig. Af en toe de baan weer veranderen en het treinbesturings programma aanpassen.
https://forum.beneluxspoor.net/index.php?topic=87055.0

Groet, Fred

bask185

  • Offline Offline
  • Berichten: 5027
Re: Een sketch in Processing
« Reactie #2 Gepost op: 13 January 2019, 18:19:25 »
Het ziet er wel leuk wat je gemaakt heb, Fred. Ik ben programmeur van beroep maar ik heb nog nooit van clipper gehoord. Moet wel voor mijn tijd zijn  ;D


Ik ben zelf een heleboel opgeschoten met mijn programma.
Ik kan nu:
- layout opslaan en laden bij start up
- wissels toevoegen aan de (rode) geheugen cellen (wordt ook onthouden)
- wissels en geheugen cellen schakelen.
- ID's toekennen aan memory cellen, wissels en detectoren (<- deze laatste worden echter nog niet getoond)

De afbeelding is de layout van mijn baan. Ik heb de geheugen cellen dusdanig ingesteld dat alle relevante wissels altijd naar dat spoor wijzen. Omdat ik me absoluut niet ga wennen tot een route calculator en omdat ik ook niet werk met bloksystemen gebruik ik mijn memory cellen om gehele routes met 1 klik te schakelen.

De ID's van wissels, memory cellen en Detectors komen overeen met fysieke componenten van de baan. De memory cellen en detectoren zijn aanwezig op de schakel panelen die ik maak. Detectors bestaan uit een led en een memory bestaat uit een druk schakelaar. Ik kan dus in zowel programma als op schakelpanelen, hele wisselstraten schakelen en ik zie de status van de detectors. Het programma heeft als extra feature dat ik individuele wissels ook kan schakelen, maar ik verwacht dat eigenlijk nooit nodig te hebben.

Voor de treinregeling had ik bedacht om een truukje van m'n werk toe te passen. Op de HMI's hebben we op het hoofd programma een zogenaamde SSP feature. Dat staat voor serial step programming. Operators kunnen dan zelf een lijst van instructies met parameters instellen en de machine de instructies sequentieel laten uitvoeren. Op soort gelijke wijze wil ik de treinen aan sturen. Dat komt er ongeveer zo uit te zien:

     activate(M1)                         (activeer memory cel 1 en daarmee wordt een hele wissel straat geschakeled
-> trainX drive(200, forward)      (laat 'trainX' naar voren rijden met snelheid 200)
     wait(D25)                             (wacht tot Detector 25 is getriggered)
     trainX drive(100, forward)      (reduceer snelheid naar 100)
     wait(D26)                             (wacht tot detector 26 is getriggered)
     trainX stop                            (stopt 'trainX')
     trigger(C1)                           (activeert ontkoppelrail voor korte tijd)
     delay(2s)                              (wacht 2s)               
     trainX drive(reverse,50)         ( rij achteruit met snelheid 50)
     trainX stop                            (stopt 'trainX')
     trainX(F1)                             (toeter)

     delay(15s)                            (wacht 15 seconde)
     trainY drive(200, reverse)      (laat 'trainY' achteruit rijden met snelheid 200)
     ...
     ... etc
     ...
     goto line #1                          (begin opnieuw)

Ik wil dan ook de mogelijkheid inbouwen om de routine te onderbreken zodat ik zelf even een goederen trein kan verplaatsen. Alle trein functies zullen ook bedienbaar blijven. Ik wacht op het moment op mijn arduino's en onderdelen zodat ik alle componenten kan aansluiten op de baan zelf.

De volgende stap is om het Arduino programma te schrijven en de seriele communicatie op te zetten. Gelukkig is de syntax van Processing 1 op 1 met die van Arduino. De arduino's wil ik de optie geven om de componenten in te leren. Informatie over de geheugen cellen, wissels en detectoren kan ik via mijn Processing programma opsturen, maar ik dan nog extra informatie toevoegen. Ik moet weten aan welke I/O pin een component is aangesloten en of het een I2C extender I/O pin is.

De arduino's moeten slechts 2 dingen doen. Toetsaanslagen aan railbezetmeldingen doorgeven aan de centrale en ze moeten luisteren naar instructies om wissels aan te sturen. Het oorspronkelijke idee was om de wisselstraten e.d. vast te leggen in het EEPROM van de arduino's opdat ze dan zonder de centrale zelf wissels kunnen schakelen, maar omdat de centrale voor de weergave toch informatie moet hebben over alles en omdat een schakelpaneel ook invloed heeft op wissels elders in het systeem. Is het makkelijk om de centrale te laten bepalen welke wissels er geschakeld moeten worden.

Ik heb verder nog een paar kleine details af te handelen waaronder:
- Einde van rail component aan maken voor een mooiere weergave bij doodlopende sporen
- kruiswissel component maken (een normale wissel is niet nodig omdat ik per toeval 2 lijnen over elkaar kan laten tekenen)
- optionele lijntjes toe voegen aan de Memory blokken zodat ze netjes in de rails passen.
- ontkoppelrail componenten maken.

Tot zover mijn Processing sketch

Bas


Train-Science.com
Train-Science github
It ain't rocket science ;-)

TrixExpress

  • Digitaal
  • Offline Offline
  • Berichten: 55
    • Mijn Digitale Trix Express Baan
Re: Een sketch in Processing: zelf geschreven grafische weergave met Arduino
« Reactie #3 Gepost op: 13 January 2019, 22:35:29 »
Citaat
Het ziet er wel leuk wat je gemaakt heb, Fred. Ik ben programmeur van beroep maar ik heb nog nooit van clipper gehoord. Moet wel voor mijn tijd zijn  ;D

Nog nooit van Clipper gehoord? Kijk even hier http://www.alaska-software.com/products/overview.cxp
Bringing the power of native code and no-limits to the Clipper and Visual FoxPro xBase language dialects.

Groet, Fred