Doel:€250.00
Donaties:€90.00

Per saldo:€-160.00

Steun ons nu!

Laatst bijgewerkt
op 18-11-2019
Algemeen

De stichting

Recente berichten

Intellibox II en WLAN door Falkenberg
Vandaag om 08:13:40
De CanBus komt naar Kranenberg, Arduino's en de CanBus door bask185
Vandaag om 08:06:34
Dwergsein met vrijgave rangeren lamp door fissy
Vandaag om 07:25:51
Philotrain HSM 726, de grote verbouwing door Dave.......
Vandaag om 06:33:38
Zoutkamp 1921 - 1942 door Zilte
Vandaag om 06:00:08
Condensator werkt niet door henk
Vandaag om 05:42:57
Mijn eerste H0-modeltreinbaan in aanbouw door bosje77
Vandaag om 03:24:25
Lima antislipbanden, welke passen op NS1200? door Joost O
Vandaag om 02:19:30
Rondom Charlois door Modellbahnwagen
Vandaag om 01:52:11
Fleischmann BR220 (4235) door saskia
Vandaag om 01:11:51
"Litter Bin" voor Brits spoor en Britse modelspoorprojecten door jandejager
Vandaag om 00:13:29
Oersik in schaal 1 door MB6400
Vandaag om 00:03:59
Onlangs gespot - gefotografeerd, de foto's door Sander.
18 november 2019, 23:55:53
Fleischmann 1306 probeersels door roadster36
18 november 2019, 23:51:02
NCS 7/8 tot NS 61 62 Maffei lok in spoor 0 door FritsT
18 november 2019, 23:27:49
Gezocht: decals NOC NSF logo Koploper 4241 door Chris2412
18 november 2019, 22:49:47
Falkensteiner bockerl door Reinout van Rees
18 november 2019, 22:41:27
Weten we dat ook weer. door Thom
18 november 2019, 22:34:33
Projekt 083-338 door Ruud K
18 november 2019, 22:31:55
Roco NS2400, bouw van een dummy door Duikeend
18 november 2019, 22:30:41
Bemo 1269 103, RhB Bernina Triebwagen, openen, en decoderinbouw? door RhB-Mikey
18 november 2019, 22:11:51
Gezocht: iemand die decoder kan inbouwen, en onderhoud. door Marcel112
18 november 2019, 21:59:27
Albulisch H0m en EPIII in H0 door martijn v m
18 november 2019, 21:56:55
Uit Smalspoorcompagnies werkplaats. door St00mboy
18 november 2019, 21:22:48
Big Boy 4014 - The Great Race to Ogden door Duikeend
18 november 2019, 21:09:18
NS modelbaan Hoekdam H0 door Stootjuk
18 november 2019, 21:08:28
Franse treinen en scenery door Marty
18 november 2019, 21:05:46
Ervaringen met veilingsites en webshops (Marktplaats, Ebay, Catawiki, etc). door Gerrit F
18 november 2019, 20:52:39
Baanplan voor herbeginner met een Fleischman H0 door erikkral
18 november 2019, 20:44:14
's-Heer Heinkenspolder door Reinier Z.
18 november 2019, 20:43:28
  

Auteur Topic: Haarsem aan Zee H0  (gelezen 3456 keer)

meino

  • Offline Offline
  • Berichten: 551
Re: Haarsem aan Zee H0
« Reactie #15 Gepost op: 12 oktober 2019, 00:41:59 »
Dat was mij niet bekend, weer wat geleerd. Je spreekt beter C dan ik, met Nederlands is het kennelijk net andersom...  ;-p

Sorry voor het gebruik van al die termen  ;), maar dat krijg je na 36 jaar C/C++ programmeren. Meestal probeer ik dat te vermijden, maar nu dacht ik dat deze termen wel gebruikt konden worden omdat het tot een soort basis kennis voor deze groep programmeer talen behoort.

Groet Meino

« Laatst bewerkt op: 12 oktober 2019, 10:14:45 door meino »
A clean desk is a sign of an empty mind

Kranenberg

bask185

  • Online Online
  • Berichten: 215
Re: Haarsem aan Zee H0
« Reactie #16 Gepost op: 20 oktober 2019, 11:28:24 »
Ik heb deze week wat tijd besteed aan mijn handregelaar. Ik had er eerder 1 half gemaakt en ik had een slechte start gemaakt:

Ik had ooit een digitale wekker voor mezelf gemaakt van hout. Die was erg goed gelukt maar het was veel werk om de behuizing te maken. Dus nu dacht ik dat doe ik weer effetjes... Ik had me zodoende een beetje verkeken op het werk en ik had niet meer de motivatie het ding af te maken.

Er zat ook nog een miniscuul ontwerp foutje. Zoals jullie kunnen zien had ik zelf een print gemaakt met een atmega 328 chippie er op. Het idee was dat ik hem via een andere arduino kon programmeren via ICSP. Voor onverklaarbare redenen wilde dat deze keer maar niet lukken. Het lukte me wel om de atmega te voorzien van een bootloader (althans dat zei de arduino IDE tegen me). Nu kon ik hem programmeren met een USB TTL converter. Daarbij waren er al 2 problemen. De bluetooth module zat al direct op de Rx/Tx pinnen gesoldeerd, hetgeen waarschijnlijk zou verhinderen dat ik hem met usb zou kunnen programmeren en ik had geen breakout pinnen voor de aansluitingen gemaakt. Op dit punt was ik er helemaal klaar mee met dit ding.

Toen kwam ik het Hoekdam draadje een mooie behuizing tegen van Conrad wat er wel netjes uitzag. Toen dacht, dat moet ik ook! Dus ik ben gaan bestellen en heb nu gemaakt:

Een knappere uitziende handcontroller die ik wel kan programmeren  ;)

De binnenkant.

Ik heb geprobeerd (en ben redelijk geslaagd) om het ding ergonomisch te maken. Ik wilde dat ik hem met 1 hand kan bedienen en dat hij draadloos is. Er zit een batterij in en een bluetooth module. Bluetooth is ontzettend simpel in het gebruik. Als je bekend ben met Serial.print(); dan kan je ook bluetooth.

De bediening is heel simpel. Als ik een toets indruk of aan de potmeter draai, dan en dan alleen dan stuurt de controller de wijziging naar m'n zelf gemaakte DCC centrale via bluetooth. De DCC centrale stuurt daarop feedback terug van de wijziging, deze feedback zorgt er alleen voor dat het LCD van nieuwe informatie wordt voorzien.

Met de getallen toetsen kan ik in een nummer opsturen. De DCC centrale maakt daar een adres van. Als ik een 3 opstuur, dan kan ik per direct adres 3 aansturen. Loc op adres 3 krijgt echter pas een instructie als ik de snelheid of een functie wijzig. Er zit dan ook geen dode tijd in de responsie. Ik kan meteen de loc aansturen. Als ik binnen 2.5 seconde nog een getal stuur dan wordt het adres aangepast. Als ik dus een 3 en een 2 in tik, wordt adres 32 gevormd en opgestuurd. Als ik langer wacht dan die 2.5 seconde, wordt het nieuwe adres 2.

Met het rode knopje kan ik de baanspanning  toggelen.

Ik kan ook adressen inleren, maar ik moet hiervoor nog een extra knopje inbouwen (of ik kan langer de baanspanning knop ingedrukt houden). Ik kan tot heden alleen DCC adressen doen met 14 of 28 snelheidsstapjes.

De potmeter werkt 2 richtingen op. Ik kan kan hem van -90 tot +90 graden draaien en zo zet ik de snelheid van -28 tot +28 stapjes (eigenlijk is het bereik 0 - 56 waarbij 28 eigenlijk 0 is). De potmeter kan verder dan 90 graden draaien, maar dat leek me oncomfortabeler aansturen en daarom heb ik 2 dode gebiedjes gecreëerd.

Met * kan in de koplampen aan/uit zetten. Met A-D kan ik de loc functies toggelen en met # kan ik kiezen tussen F1-F4 of F5-F8.

De bluetooth module zit op de pinnen A0 en A1 en wordt via arduino's SoftwareSerial library aangestuurd. Ik had voor het soldeer gemak namelijk 8 pinnen nodig die naast elkaar zitten en op een uno vind je die maar op 1 plek. Pin 0 t/m 7.

Ik kan de DCC centrale ook nog aansturen met mijn telefoon

Dit is een standaard en gratis app die je in de playstore kan vinden. De app kan verbinding maken met een bluetooth module. Je kan instellen welke knoppen je wilt hebben, hoe de knoppen heten en wat de knoppen moeten versturen.
Dit kan een character zijn of een hele zin.

De app werkt hetzelfde als de handcontroller muv de potmeter. Daarvoor in de plaats heb 4 pijltjes gemaakt, 2 voor stapjes van 3 en 2 voor stapjes van 1. Ook deze app krijgt feedback teksten van de DCC centrale. De centrale kan ook een instructie sturen om het scherm te wissen (functionaliteit van de app). Zo staat alleen de laatste opdracht in het scherm.

Ik heb nog een probleempje met de batterij voeding die ik nog moet oplossen, maar het programma is zo goed als af.

Het lijkt me ook leuk om misschien ooit voor de club een nieuwe DCC centrale te maken maar dan wil ik het met WiFi of zigBee modules uitvoeren ipv BT. Dan kan ik meerdere handregelaars op 1 DCC centrale laten werken.

Tot de volgende update

bask185

  • Online Online
  • Berichten: 215
Re: Haarsem aan Zee H0
« Reactie #17 Gepost op: 26 oktober 2019, 18:51:36 »
Deze week een beetje elektronica kunnen doen.

Zo zie ik graag mijn elektronica, geordend met weinig draden  :police:

Rechts boven zie je een printje met een arduino nano, max485 boardje en hij heeft 3 connectors die allemaal dezelfde verbindingen hebben. Ik heb er 2 voor een flatcable en 1 om direct een IO extender tegen aan te prikken. Verder heeft het printje 2x dubbele kroonstenen voor de baanspanning/massa en voor de Rs485 bus. Helemaal rechts onderin, zie je het bordje om alle servo motors voor de wissels aan te sturen. Ik moet hier nog een verloopje maken zodat ik deze aan de andere print kan prikken

Links van de hoofdcontroller hangt een schakelende voeding die de baan spanning omzet in 5VDC. Ik had nog bijna een probleem met deze. Ik wilde eerste de baanspanning gelijkrichten en dan in de converter stoppen. Dat kon helaas niet omdat ik baan massa met de massa van het 5V moet verbinden. Dat zou er toe leiden dat ik kortsluiting zou maken over 1 van de diodes. De enige oplossing was om de baanspanning met 1 diode enkelzijdig gelijk te richten en er een elco achter hangen.

Het printje rechts onder heeft 2 dubbele 8 pins IO poorten. Op deze zal ik dmv een 5v relais een ontkoppelrails aansluiten en de rest wordt voor terugmelders gebruikt. Ik heb meer van deze printjes gemaakt en ik kan ze direct aan elkaar prikken of via de flatcable. Ik kan ook meer dan 2 apparaten aan dezelfde flat cable hangen. Het schakelbord heeft 2 van dezelfde IO extenders.

Ik probeer altijd zo veel mogelijk met ijzerdraad te solderen. Ik gebruik vaak ook kopertape.

Onderkant van de IO extender.

De hoofdcontroller van onder.


Ik moet bij de IO extender print allen nog 2 pinnetjes om solderen. Ik had een klein denk foutje gemaakt met de flatcable connectoren. De SDA en SCL zijn nu omgewisseld  ::)

Ik moet zeggen dat ik erg gelukkig ben met de flat cables. Ik kan de connectoren er zo op prikken. Dat heeft geen soldeer werk meer nodig. Ik heb ze niet te lang gemaakt omdat ze voor de I2C bus zijn.


Ik heb ook nog wat software werk moeten verrichten. Ik had aanvankelijk bepaalde gebieden in mn EEPROM gereserveerd voor verschillende objecten. Ik had voor o.a. 64 geheugen cellen en 64 terugmelders plaats gemaakt. Nu kan ik geen 128 items hebben, zoveel IO heb ik niet. Omdat ik ook nog lichtseinen, ontkoppelaars en  spoorwegovergangen dynamisch wil kunnen maken, heb ik nu een ander plan bedacht. Elk item heeft nu 8 bytes gereserveerd en het begin adres is nu gelinkt aan de IO waar deze aan hangt.  Dit maakte de software veel makkelijker en korter. Ik kon hele functies of weggooien of halveren.

De ledjes van het schakel paneel zaten tegenover de knopjes voor de geheugen cellen. In software was dit ook gefixeerd, maar kan ik dus op elke willekeurige IO het ledje zetten. Mocht ik ooit iets fout solderen, kan ik met SW oplossen.

Om het inleren te regelen, heb ik besloten om dat niet via de arduino monitor te doen. Dat ding herkent veel van de eerste 31 ascii instructies niet. Ik heb daarom nu putty gedownload om dit een beetje knap te kunnen doen. Naar Putty kan ik het scherm wissen en getallen op dezelfde plek aanmaken.

Ik heb een simpele state diagram gemaakt zodat ik de software goed kon orderen om de verscheidene objecten in te leren. Zo kan ik 3 verschillende wisselaansturingen invoeren (servo, relais, 2x spoel), seinen met en zonder servo voor een arm, 2 of 3 lichten. Het zit er allemaal in.


Ik heb ook een idee bedacht om een functionele spoorweg overgang te maken met 2 servo's en 2 knipperende leds. Het idee is dat ik via Putty tegen de arduino vertel, hoeveel sporen de overgang heeft (1 of 2) , op welke IO zijn bezetmelders komen en op welke IO de servo motors en leds zitten. Vervolgens wil ik met een state machine de overgang gaan aansturen. Het leuke is dat deze geen dependencies heeft met de rest van het systeem. De overgang draait volkomen parallel aan de andere processen. Als ik hier voor een goede class maak, kan elke arduino meer dan 1 overgang aansturen.


Ik heb voor de software liefhebber nog een beetje code.
De terminal code bestaats zoals al mn state machines uit 2 delen. De states en state machine.

De bollendiagram is erg makkelijk te vertalen naar de volgende code. Op werk doe ik dit ook en dan gebruik ik scripts om dit te genereren.
#define terminalCommand(x) break; case x: if(x##F())
extern byte menuF() { // called from main
switch(subCommand){
default: {
nextCommand(getType); }

terminalCommand(getType) {
nextCommand(getID); }

terminalCommand(getID) {
nextCommand(getIO); }

terminalCommand(getIO) {
if (type == turnout) nextCommand(getSwitchType);
else if (type == decouplerObject) nextCommand(getDecouplerIO);
else nextCommand(hasLed); }

terminalCommand(curvedOrStraight) {
nextCommand(storeObject); }

terminalCommand(hasLed) {
if(hasLedIO == YES) nextCommand(getLedIO);
else nextCommand(storeObject); }

terminalCommand(getLedIO) {
nextCommand(storeObject); }

terminalCommand(getSwitchType) {
if(switchType == COILS
|| switchType == RELAY) nextCommand(curvedOrStraight);
else nextCommand(adjustCurvedPosition); }

terminalCommand(adjustCurvedPosition) {
nextCommand(adjustStraightPosition); }

terminalCommand(adjustStraightPosition) {
nextCommand(storeObject); }

terminalCommand(storeObject) {
nextCommand(0);
return 1; }
break; }
return 0; }
#undef terminalCommand
De uitlijning klopt niet helemaal, bij mij staat alles perfect uitgelijnd :police:. Ik zie ook mijn code graag zoals de electronica, duidelijk en geordend.

Een van de states uitgelicht:
terminalCommand(getIO) {
if(firstEntry) { firstEntry = 0;
Serial.println("select IO 0-63, press ENTER when ready"); }
if(serialByte && makeNumber(&IO,serialByte,0,63,'\n')) {
return 1; }
return 0;}

Alle states zien er zo uit.
Er wordt 1 malig text geprint en de functie 'makeNumber()' zorgt er voor dat je de getallen goed kan invoeren. Als argumenten moet je adres van de te wijzigen variabele opgeven, de minimale en maximale waardes en de character waardoor makeNumber 'true' returnt en daarmee de state beëindigt.