BeneluxSpoor.net forum
Vraag en antwoord => Digitaal => Topic gestart door: MichMich op 30 June 2018, 20:59:53
-
Exact een jaar geleden vroeg ik een aantal van jullie om informatie (https://forum.beneluxspoor.net/index.php?topic=74627.0) omtrent het aansturen van een digitale (Roco MultiMaus gestuurde) baan, om het leven van paps (https://forum.beneluxspoor.net/index.php?action=profile;u=450) wat eenvoudiger te maken.
Nu we een jaar verder zijn, wordt het eindelijk wel eens tijd de eerste resultaten van mijn plannen te laten zien. Op mijn blog heb ik de eerste stappen van de uitvoering beschreven: het maken van het prototype:
http://michaelteeuw.nl/post/175411369682/the-train-automator-part-1-prototyping
Komende weken plaats ik een aantal updates, dus mocht je het interessant vinden, abonneer je dan even op dit topic. Zodra er een update beschikbaar is, plaats ik hier een berichtje.
(https://78.media.tumblr.com/2a864967dfcc536caf112173d7626042/tumblr_inline_pavny3Ay2T1s95p1z_500.jpg)
-
(y)
Toch fijn dat ik nu kan lezen wat je destijds aan het doen was. 8)
Groet Jaap
(niet dat ik het nu snap hoor)
-
(niet dat ik het nu snap hoor)
Ikweet het zeker dat je meer snapt dan je laat merken ...
JP
-
Ik ben bang dat ik je teleur moet stellen, JP... ;D
-
We zijn weer een stapje verder! De PCB foor de Arduinogestuurde Digitale Baan is af:
(https://78.media.tumblr.com/888c0c2dc8fee7407148f1330ab86090/tumblr_inline_pbuuduEBft1s95p1z_500.jpg)
Meer info op mijn blog: http://michaelteeuw.nl/post/175878845682/the-train-automator-part-2-designing-the-pcb
-
Nog even en er kan gependeld worden op mijn baan "Enzo-Ost"! (y)
https://forum.beneluxspoor.net/index.php?topic=78002.0
Groet Paps
-
Electronica is af, dus tijd voor de software voor de Arduinogestuurde pendelbaan:
http://michaelteeuw.nl/post/176414888097/the-train-automator-part-3-writing-the-software
Hierbij een sneak preview van het uiteindelijke resultaat (klik voor filmpje):
(https://i.imgur.com/UvDNPOn.png) (https://www.youtube.com/watch?v=hRP-b4K2FJI)
-
Ik krijg toch wel uitleg hè als je hem komt monteren! (y)
Groet paps
-
Die uitleg wil ik ook, ik heb ook nog een pendel besturing geplant. ;D (y)
-
Ziet er weer goed uit! (y) (y)
The acceleration and deceleration of the train is something that is programmed into the train. It is not something you can control on the fly.
Op de meeste decoders is dat wel mogelijk ;) Bij ESU is standaard F4 voor het uitschakelen van de optrekvertraging. Ik programmeer mijn decoders dus ook gewoon met vertraging (om met de hand te rijden) maar zet altijd F4 aan als de computer aan zet is.
The speed is a one byte value (0-255). Everything below 128 is forward driving, 128 and up is backwards driving.
Ik weet niet of XpressNet dat af handelt maar DCC kent maar 126 normale rijstappen en daarnaast STOP en E-STOP. Maar misschien dat XpressNet de E-STOP niet zomaar door stuurt, dat weet ik niet.
Wat betreft de PCB foutjes (http://michaelteeuw.nl/post/175878845682/the-train-automator-part-2-designing-the-pcb):
2a) Bij een Nano mag je gewoon USB aansluiten terwijl de Nano extern 5V heeft. Een diode (D1 in het originele schema (https://www.arduino.cc/en/uploads/Main/Arduino_Nano-Rev3.2-SCH.pdf)) zorgt voor de scheiding
2b) Je hoef ook geen jumper voor de MAX toe te voegen. Deze kent namelijk ook een HIGH Z mode. Gewoon !RE en DE ook aan de Arduino hangen. En dan wel !RE met een pull up en DE met een pull down. Op die manier is de MAX is HIGH Z na een Arduino reset en kan je gewoon programmeren. (y)
Overigens heb ik no nooit iemand zo de !RE en DE zien aansluiten via een weerstand en een condensator in serie... Wat is daar de gedachten achter? ???
En zelf ben ik een enorme fan van een Arduino met headers op een board te zetten ipv zelf te klooien met een ATmega. Wel de Pro Mini dan altijd. Voor de kosten kan ik het niet zelf bouwen en ik krijg er gratis 2 extra PCB layers bij ;D Win-win!
En klein puntje voor de software :angel: We leven in 2018 en de compiler is C++. Een macro (#define) voor het definiëren van pinnen en constanten is niet meer van deze tijd ;)
Timo
-
Leuke voor mij onbegrijpelijke reactie Timo. (y)
Groet Jaap
-
Is het te duidelijk dat vooral het technische aspect van de hobby mij trekt? :angel: ;D
Timo
-
Was ons nog niet opgevallen........ ;D :)
-
Leuke voor mij onbegrijpelijke reactie Timo. (y)
Groet Jaap
+1 ;D
Ik kan er ook helemaal niks mee, maar vind het wel knap dat je het weet en goed dat je je kennis deelt. (y)
Gr.
Edsko
-
Michael had een mooie disclaimer in zijn artikel staan
only to make my code look more professional. Why? because I have no idea what i’m doing (https://t.umblr.com/redirect?z=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FImpostor_syndrome&t=YTUxYmMzMTJhN2E1MTkzNTEyY2UyMTg2MzM4ODdmZTI4MGQzNGQ0MyxpVndjZzg1eg%3D%3D&b=t%3AFggP_J3ggxfSa4Y2riGiPw&p=http%3A%2F%2Fmichaelteeuw.nl%2Fpost%2F176414888097%2Fthe-train-automator-part-3-writing-the-software&m=0).
Ik herken mijzelf daar ook wel in. Ik acht me prima in staat om code te lezen, en kopieer en plak van alles bij elkaar om tot mijn doel te komen. Maar aan de diverse tutorials/voorbeeldcode kun je vaak niet zien hoe gedateerd ze zijn, waardoor een soort van allegaartje ontstaat.
@Timo: heb je misschien een tip wat als goed (en simpel) voorbeeld kan dienen voor de opbouw van een programma voor een Arduino?
-
Een leuk device! Komt ie ook in productie voor anderen Micha en Jaap? ;D
-
But now you know (how it's made) ;D Maar kan me prima vinden in de disclaimer. Ik heb het ook mezelf geleerd.
Mijn grootste punt tegen macro's hiervoor is dat de foutmeldingen die je kunt krijgen zo veel cryptischer zijn dan wanneer je type-correcte variabelen gebruikt.
@Hennik, pff, niet echt. Maar denk dat een paar belangrijke punten zijn:- Vermeid delay()! Zie het voorbeeld Blink without delay.
- Laat de loop() zo snel mogelijk rond gaan. Houdt hem nergens op, ook niet als je wacht. Kom gewoon de volgende rondgang van loop() weer terug.
- Gebruik duidelijke namen (en niet juist korte) voor functies en variabelen. Ze moeten beschrijvend zijn voor wat ze doen / betekenen. Dit zodat snel duidelijk is wat er gebeurd voor zowel anderen maar ook voor jezelf voer een jaar. Uitzondering is als je het alleen super lokaal gebruikt (bijvoorbeeld 'i' in een for-lus).
- Probeer een functie zo kort en universeel mogelijk te houden. Met andere woorden, knip het project op in zo veel mogelijk kleine behapbare brokken. En die brokken kan je dan weer aanroepen in nieuwe brokken die op die manier ook weer kort en overzichtelijk blijven. Komt dus neer op je project een beetje plannen.
- Wees consistent. Probeer dus onder andere overal dezelfde style van code te gebruiken maar ook dezelfde style van namen.
- Commentaar bij je code is goed! Maar herhaal jezelf niet in het commentaar. Details kan je prima in de code lezen.
Ik denk dat je dan al een heel eind bent (y)
@MichMich, sorry voor het vervuilen van het draadje! Als je het vervelend vind (of het verder uit de hand loopt) zal ik vragen het af te laten splitsen.
Timo
-
Dat vindt hij vast niet erg Timo!
Groet Jaap
-
Ik weet niet of XpressNet dat af handelt maar DCC kent maar 126 normale rijstappen en daarnaast STOP en E-STOP. Maar misschien dat XpressNet de E-STOP niet zomaar door stuurt, dat weet ik niet.
Bij mij wel, bij een verbinding met de z21(wit). ;D
(https://images.beneluxspoor.net/bnls/BNLS20180730.jpg) (https://images.beneluxspoor.net/bnls/BNLS20180730.jpg)
Marius.
-
Ik ga eens effe wat dingen aanschaffe. Leuk projectje.
-
@Timo bedankt. Ik heb gezien dat je op andere plekken in dit forum ook al veel opbouwende tips over dit onderwerp hebt gegeven, dus die pluis ik ook allemaal nog na.
@Michael, veel respect hoe je dit gedaan hebt! Ik ben recent ook door dit forum aangestoken om met arduino's te prutsen en jouw uitleg helpt daar ook enorm bij. Bedankt!
-
@Hennik, dank je! :) Dat probeer ik altijd wel :)
Nu zelf mijn "lab" wat meer op orde maken en kan ik ook weer fijn prutsen :)
Timo
-
Wat betreft de PCB foutjes (http://michaelteeuw.nl/post/175878845682/the-train-automator-part-2-designing-the-pcb):
2a) Bij een Nano mag je gewoon USB aansluiten terwijl de Nano extern 5V heeft. Een diode (D1 in het originele schema (https://www.arduino.cc/en/uploads/Main/Arduino_Nano-Rev3.2-SCH.pdf)) zorgt voor de scheiding
Ik ben in een eerder project een keer tegen een issue aangelopen waar het goed mis ging toen beide voedingsbronnen aangesloten zaten. Ondanks dat ik "magic smoke" heerlijk vind ruiken, probeer ik het zo veel mogelijk te vermijden. ;D Het is dus inmiddels een beetje automatisme geworden deze jumper toe te voegen, al maak ik er zelden gebruik van. (Ik heb overigen het vermoeden dat het beschreven probleem geval meer iets te maken had met met een slechte Chinese batch ...)
2b) Je hoef ook geen jumper voor de MAX toe te voegen. Deze kent namelijk ook een HIGH Z mode. Gewoon !RE en DE ook aan de Arduino hangen. En dan wel !RE met een pull up en DE met een pull down. Op die manier is de MAX is HIGH Z na een Arduino reset en kan je gewoon programmeren. (y)
Overigens heb ik no nooit iemand zo de !RE en DE zien aansluiten via een weerstand en een condensator in serie... Wat is daar de gedachten achter? ???
Ik heb de MAX485 verder nooit gebruikt. Zoals beschreven heb ik het prototype geboekt op basis van de Waveshare 485 breakout. Aangezien deze werkte heb ik het circuit exact overgenomen. Ik wilde het risico voorkomen dat ik een revisie twee moest maken omdat in dit schema een probleem zat. Mijn opdrachtgever is namelijk nogal van de strakke deadlines ... ;) Maar bedankt voor de goeie suggesties! Goed om in gedachten te houden als ik de MAX485 nogeens inzet. (En die kans is groot!)
En zelf ben ik een enorme fan van een Arduino met headers op een board te zetten ipv zelf te klooien met een ATmega. Wel de Pro Mini dan altijd. Voor de kosten kan ik het niet zelf bouwen en ik krijg er gratis 2 extra PCB layers bij ;D Win-win!
Dat doe ik ook voor de meeste projecten, maar ik moet zeggen dat ik het ontwerpen van een SMD pcb met alles on board meer voldoening geeft. Bijkomend voordeel is dat je dan meteen een hoop leert over het gebruikte schema. Voor de kosten hoeven we het niet te laten.
En klein puntje voor de software :angel: We leven in 2018 en de compiler is C++. Een macro (#define) voor het definiëren van pinnen en constanten is niet meer van deze tijd ;)
Haha... je hebt helemaal gelijk! Old habits die hard. Net als dat ik er in javascript niet aan kan wennen om `const` en `let` te gebruiken ipv `var`. Maar de eerst volgende keer dat ik gedachteloos #define ipv `const int` typ, weet ik zeker dat ik even aan je denk! ;D
Commentaar bij je code is goed! Maar herhaal jezelf niet in het commentaar. Details kan je prima in de code lezen.
Dat is inderdaad een enorme valkuil voor veel developers. Wanneer ik commentaar moet toevoegen om iets toe te lichten is dat voor mij vaak een reden om te kijken of het niet simpeler kan. (Al voeg ik voor mijn blog-code vaak toch extra commentaar toe om het nog eens te verduidelijken. Zou niet nodig moeten zijn ...)
Naast wat Timo al genoemd heeft (hele goeie punten: vooral het Delay-stuk is een valkeil waar veel starters intrappen), nog wat suggesties die mij te binnen schieten:
- Ga niet "prematuur optimaliseren". Zorg eerst dat de code doet wat je wil dat het doet. Optimaliseren kan altijd nog.
- Net als bij de treinen hobby geldt bij het programmeren: KISS. Keep it simple, stupid. XKCD heeft er een relevant stripje (https://xkcd.com/974/) over gemaakt.
- Voor je zelf uren aan de slag gaat, zoek dan eerst even of er niet al een schitterende open source oplossing voor is. Lees hier (http://michaelteeuw.nl/post/111186411007/anonymous-reinventors-of-the-wheel) waarom. ;D
@MichMich, sorry voor het vervuilen van het draadje! Als je het vervelend vind (of het verder uit de hand loopt) zal ik vragen het af te laten splitsen.
Nee hoor, absoluut niet. Dit is precies waar dit draadje voor is.
@Michael, veel respect hoe je dit gedaan hebt! Ik ben recent ook door dit forum aangestoken om met arduino's te prutsen en jouw uitleg helpt daar ook enorm bij. Bedankt!
Graag gedaan. Een project als deze is een stuk leuke wanneer ook anderen er profijt van hebben.
Nu zelf mijn "lab" wat meer op orde maken en kan ik ook weer fijn prutsen :)
Ik denk dat dit nog de grootste uitdaging is voor de meeste hobbyisten... ;D
-
Over de voedingen, was dat een Uno (of Mega etc)? Want een Uno kan er stom genoeg niet tegen omdat ze daar voor een complexer circuit zijn gegaan. Wat zei je ook al weer over KISS? ;D
Maar als het een Nano was dan was het misschien inderdaad een Chinese clone waarbij ze hadden uitgevonden dat ze een halve cent konden besparen door de diode er af te laten ::) Ik hou van (goedkoop) dingen in China bestellen maar af en toe is het ook wel fijn dat ik op het werk gewoon onderdelen met volledige specificaties (en bijbehorende prijskaartje ::)) kan moet bestellen.
maar ik moet zeggen dat ik het ontwerpen van een SMD pcb met alles on board meer voldoening geeft. Bijkomend voordeel is dat je dan meteen een hoop leert over het gebruikte schema. Voor de kosten hoeven we het niet te laten.
Dat is wel waar ;D
Haha... je hebt helemaal gelijk! Old habits die hard. Net als dat ik er in javascript niet aan kan wennen om `const` en `let` te gebruiken ipv `var`. Maar de eerst volgende keer dat ik gedachteloos #define ipv `const int` typ, weet ik zeker dat ik even aan je denk! ;D
(y) ;D
Dat is inderdaad een enorme valkuil voor veel developers. Wanneer ik commentaar moet toevoegen om iets toe te lichten is dat voor mij vaak een reden om te kijken of het niet simpeler kan. (Al voeg ik voor mijn blog-code vaak toch extra commentaar toe om het nog eens te verduidelijken. Zou niet nodig moeten zijn ...)
Ook dat. Ook al kan een goed doordachte manier er soms wat lastig uit zien, dan is commentaar handig. Maar als je duidelijke code maakt (overzichtelijke blokjes, duidelijke namen etc) dan leest de code gewoon weg als commentaar.
Aanvulling, met jezelf herhalen bedoel ik dingen als
//loop 5 times
for(byte i = 0; i < 10; i++{
//...
}
Waarbij iemand later dacht, nee, ik wil 10 keer! En natuurlijk nooit meer de code aan past... (Naast dat de code al exact hetzelfde zegt).
Meeste van mij commentaar is dan ook te vinden in de interface. Bijvoorbeeld bij een classe, wat doet elke methode? Wat verwacht iedere methode? En zijn er valkuilen? Zie bijvoorbeeld de documentatie van FadeLed (https://github.com/septillion-git/FadeLed). Ook ik spiek er nog wel eens in als ik het een tijdje niet gebruikt heb.
- Ga niet "prematuur optimaliseren". Zorg eerst dat de code doet wat je wil dat het doet. Optimaliseren kan altijd nog.
Correct! Maar let wel op, als je jezelf betrapt op het 10 keer schrijven van bijna dezelfde functie of er niet een slimmere manier is. (Soms (<5%) niet / heeft dat nadelen maar dan heb je er in ieder geval aan gedacht ;D
En xkcd(y) ZIjn genoeg relevantie stripjes (https://xkcd.com/1319/) te vinden daar ;D
Nee hoor, absoluut niet. Dit is precies waar dit draadje voor is.
Gelukkig! (y)
Ik denk dat dit nog de grootste uitdaging is voor de meeste hobbyisten... ;D
Hehe, zeker. Alleen zit ik er vooral nog steeds mee hoe ik me nieuwe "lab" (lees: gedeelde werkkamer) wil inrichten :angel: Ik weet wel, met 90% van alle componenten in (verhuis)dozen en de scopes/voedingen/etc in de hoek van de kamer op de grond werkt niet zo productief... ::)
Nu rest mij alleen nog één ding, het een keer in het echt zien ;D :angel:
Timo
-
Nu rest mij alleen nog één ding, het een keer in het echt zien ;D :angel:
Als alles doorgaat sta ik op 8 december in "Houten digitaal".
Groet Jaap
-
Oeww, top! (y) Tegen die tijd eens kijken of ik tijd heb.
Timo
-
@Timo,
Een man van jouw postuur (figuurlijk, want ik ken je niet persoonlijk) moet die jaarlijkse zaterdag gewoon permanent in zijn agenda vrij houden. Sinds ik er naar toe ga heerlijk.
Groet,
Gerard van der Sel.
-
@gvandersel, Haha, mja, ik heb de datum in ieder geval in de agenda gezet ;D
Timo
-
Voor de geinteresseerden:
De laatste post in deze serie staat op mijn blog: http://michaelteeuw.nl/post/176885713097/the-train-automator-part-4-wrapping-it-up
Deze week knutsel ik een ombouw voor de controller ...
(https://78.media.tumblr.com/96126d1b1fb7409a7b29d3db2f0bff8b/tumblr_inline_pd7jgvOmXh1s95p1z_500.jpg)
-
Ik zou hem best willen hebben.... ;)
-
Leuk gedaan! (y) Interessant project. Zeker omdat je nu dus gewoon digitaal kan pendelen.
Groet Ronald.