BeneluxSpoor.net forum
Wat zijn we aan het bouwen? => Baanplannen => Topic gestart door: 72sonett op 27 september 2016, 23:28:43
-
Mijn meerjarenplan, inmiddels al 30 jaar...
Getekend met SCARM (http://www.scarm.info/index.php).
(https://images.beneluxspoor.net/bnls/snapshot6.jpg)
(https://images.beneluxspoor.net/bnls/snapshot7.jpg)
Niet helemaal precies zoals gebouwd, meer een design as you go. Afmeting ca. 3,40 x 2,40 m.
(https://images.beneluxspoor.net/bnls/DSCI2554.jpg)
(https://images.beneluxspoor.net/bnls/DSCI2557.jpg)
(https://images.beneluxspoor.net/bnls/DSCI2566.jpg)
(https://images.beneluxspoor.net/bnls/Photo0168.jpg)
(https://images.beneluxspoor.net/bnls/scouts2.jpg)
-
En als ik dit zo zie, ook al 30 jaar plezier van neem ik aan. ;D
-
8) filmpjes;
https://www.youtube.com/v/JB91Qlc-WU4
https://www.youtube.com/v/0e0jT8e-Tnk
-
De hard- en software;
(https://images.beneluxspoor.net/bnls/Trein-8255ppi.jpg)
In de computer zitten twee I/O kaarten met een 8255 PPI (https://en.wikipedia.org/wiki/Intel_8255) volgens een ontwerp van Elektuur (uit 1989). De ene kaart is geconfigureerd voor invoer, de andere voor uitvoer, ieder 3 bytes breed. Aan de invoerkant is daarmee ruimte voor 24 bezetmelders met reedschakelaars, aan de uitvoerkant is ruimte voor 24 relais voor stopsecties en wissels.
Het programma op de computer leest constant de 3 adressen van de 24 bezetmelders. Aan de hand van een melding wordt de status van de blokken bijgewerkt en op het scherm getoond, de stopsecties worden met de relais in/uitgeschakeld en wissels worden omgezet.
Op de baan staat een constante 12 V voor de 'snelle' delen, vóór en na iedere stopsectie zit ca 1 m spoor waar 10 V op staat, zodat de loc daar langzamer rijdt. Ook de stopsecties worden met 10 V geschakeld.
Het programma is geschreven in Pascal met een Lazarus IDE (http://www.lazarus-ide.org/), maatwerk specifiek voor deze baan.
-
(y) Wijs, nog met de echte oude Faller autowegen (y).
-
Bij toeval stuit ik op dit draadje, en zie daar zo'n oude faller overweg, met messing middelrail. Goede herinneringen uit m'n jeugd. De autootjes deden het allang niet meer, de trafo had ik in mijn jeugd misbruikt voor electrolyse proefjes, maar die baandelen zouden nog ergens op zolder kunnen slingeren.
Bij gelegenheid maar eens kijken ...
Daarna zie ik een schema uit elektuur (1989). Met plek voor 24 reedcontacten en 24 relais op 24-bit format, en vooral dat laatste verbaasde me. Vandaag de dag zou je dat anders aanpakken, maar voor 1989 is dat buitengewoon efficiënt. Betekent 1 bit (pin?) per apparaat, dus monostabiele relais. Klasse dus. Leuke link naar Lazarus, erbij. Ken ik niet, omdat ik in de C++ wereld leefde, en pascal iets is van lang geleden voor mij (<1987).
Kortom, een leuk draadje, bedankt.
-
...... een schema uit elektuur (1989). ... buitengewoon efficiënt..
In 1985/86 deed ik HTS informatica en toen was Pascal de standaard programmeertaal. Ik ben toen ook met Borland's Turbo Pascal begonnen, in DOS uiteraard - Windows ... ???
Die Elektuur I/O-kaart zit in een ISA connector van een 386 PC. Door de beperkte grafische mogelijkheden van Turbo Pascal onder DOS draait het op een PC met Windows 95 maar wel in een DOS box. OK voor toen, maar alles bij elkaar nu behoorlijk achterhaalde techniek, noem het maar remmende voorsprong... ISA connectoren zijn er niet meer, Windows staat niet meer toe dat een programma rechtstreeks I/O adressen leest of schrijft (moet via DLLs of API's) en alleen heel oude versies van Lazarus/FP compileren nog voor W95.
Ik heb er wel eens aan gedacht om opnieuw te beginnen, Lazarus IDE met Free Pascal, Windows XP en 2x een USB I/O kaart (https://nl.aliexpress.com/item/From-intelligent-household-USB-I-0-Data-acquisition-card-Control-module-MCU-IO-pin-16-road/32324935299.html?spm=2114.48010508.4.2.Yt06b4) met ieder 16 pennen.
(https://ae01.alicdn.com/kf/HTB1nTYjLpXXXXXOapXXq6xXFXXXn/Gratis-drive-intelligente-Ik-0-USB-data-acquisitie-kaart-controle-module-16-MCU-IO-pin.jpg_640x640.jpg)
Op het WWW zijn wel voorbeelden te vinden hoe deze kaart aan de praat te krijgen is maar dat is allemaal in C/++. Voor de Arduino ben ik daar wel mee begonnen maar ik vind het een hopeloos cryptische programmeertaal vergeleken met Pascal, zeker als er nog OOP bij komt ook, ik ben meer 'procedureel', de vertaalslag van C naar Pascal is me nu nog te vaag.
... Lazarus .... Ken ik niet, omdat ik in de C++ wereld leefde, en pascal iets is van lang geleden voor mij (<1987).
Ik heb 2 van die USB kaarten besteld, worden hopelijk half december geleverd. Misschien pb ik je nog wel met vragen over het vertalen van C naar Pascal... :)
-
De afgelopen maanden heb ik o.a. de hard- en software omgebouwd naar gebruik voor Windows XP met 4 USB I/O sticks. Het zou nu ook op latere Windowsversies moeten werken, maar dat moet ik nog uitproberen.
(https://images.beneluxspoor.net/bnls/IOboard.jpg) (https://images.beneluxspoor.net/bnls/IOboard.jpg)
In het midden zit een USB hub met 4 aansluitingen, deze hub zit met een kabeltje aan de computer (laptop).
Aan de hub zitten de 4 USB I/O sticks, 2 voor invoer (onder en boven), 2 voor uitvoer (links en rechts). De invoer komt van bezetmelders (reedschakelaars), die via in de I/O kaart ingebouwde optrekweerstanden even naar massa schakelen als er een loc met een magneetje er onder een blok inrijdt.
De uitvoer gaat via twee relaiskaarten die de stopsecties en wissels schakelen. De linker kaart heeft 16 relais, de rechter 10 relais + 6 open collector transitorschakelaars.
Een aantal wissels zonder eindafschakeling wil ik nog gaan schakelen met servo's, ook ipv te vertrouwen op afschakeling van wissels die dat wel hebben.
Op de achterkant van het paneel zit de voeding, 12 V en 5 V uit een oude computervoeding, en nog twee voedingen, één om 10 V uit de 12 V te halen voor de afremsecties, en één aparte met meerdere spanningen voor ledverlichting en andere grappen.
Die 10 V wil ik nog vervangen door een instelbare 12 V PWM regeling.
(https://images.beneluxspoor.net/bnls/voedingen.jpg) (https://images.beneluxspoor.net/bnls/voedingen.jpg)
De reedschakelaars zitten aan het begin van ieder blok tussen de rails.
(https://images.beneluxspoor.net/bnls/reed2.jpg) (https://images.beneluxspoor.net/bnls/reed2.jpg)
Eenmaal aangevuld met ballast en wat bijgeverfd vallen ze niet meer op.
Het programma op de laptop is herschreven in (Free) Pascal in de Lazarus IDE, bijna 2000 regels code, voor gebruik van de USB sticks ipv die Elektuur I/O kaart. De twee eerder gekochte USB sticks heb ik na veel www-zoeken aan de praat gekregen en vervolgens nog twee bijgekocht.
Bij de USB sticks werd een .DLL meegeleverd en programmavoorbeelden in C++, die heb ik herschreven in Pascal. In het Pascalprogramma kan ik procedures en functies in die .DLL als extern definieren en aanroepen alsof ze een deel van het Pascalprogramma zijn. Zo is iedere individuele pen van de stick als invoer of uitvoer te definieren en je kunt ze uitlezen c.q. een waarde geven.
Geinspireerd door andere zelfbouwtopics op dit forum heb ik me ook nog gewaagd aan deze kruising, bij gebrek aan een bestaand iets met een bocht er in. De rails zijn gesoldeerd op een stukje dubbelzijdig printplaat. Het is nog niet perfect maar de meeste treinen gaan er overheen zonder ontsporen...
(https://images.beneluxspoor.net/bnls/kruising_6.jpg) (https://images.beneluxspoor.net/bnls/kruising_6.jpg)
-
Wat ik in je kruising mis zijn de contrarails om te zorgen dat je wielen niet de verkeerde kant op gaan. :) Verder een interessant project zo, zeker met die zelfbouw elektronica allemaal erbij.
-
Er zitten bielzen tussen als contrarails, is op de foto niet zo goed te zien.
Mijn interesse gaat meer uit naar elektronica en besturing dan naar scenery en tijdperkcorrecte treinstellen, bij mij rijdt vanalles door elkaar...
-
Zo ziet het er uit op het computerscherm:
(https://images.beneluxspoor.net/bnls/scherm1.jpg) (https://images.beneluxspoor.net/bnls/scherm1.jpg)
De 4 opstelsporen rechts zijn er in werkelijkheid nog niet, komt later.
Rode lijn is bezet blok, groen is vrij. De seinen worden aangegeven met een dikke rode of groene stip.
De lijst midden in het scherm geeft de treinen die beschikbaar zijn op de witte sporen aan de linkerkant, dat deel is handbediend. Een geselecteerde trein kan ik het gecontroleerde deel in laten rijden, en er weer uit.
De blauwe stippen zijn bezetmelders (reedschakelaars), door ze op het scherm aan te klikken kan ik een trein simuleren.
-
De meeste elektrische wissels worden rechtstreeks bediend door een relais op de uitvoerkaart waarbij ik vertrouw op de eindafschakeling, maar nog niet alle wissels zijn elektrisch en de klassieke Roco of Fleischmann wisselaandrijvingen zijn me te duur.
Door goedkope servo's en een omgebouwde servotester te gebruiken worden die wissels nu omgezet door een servo:
- goedkope Chinese servotester, ca 1 euro
(https://images.beneluxspoor.net/bnls/wisselservo-01.jpg)
- potmeter (10k) lossolderen:
(https://images.beneluxspoor.net/bnls/wisselservo-02.jpg)
- connector en draadbrug er op:
(https://images.beneluxspoor.net/bnls/wisselservo-03.jpg)
- 2 potmeters (10k) parallel en 2 connectoren op apart stukje gaatjesboard:
(https://images.beneluxspoor.net/bnls/wisselservo-04.jpg) (https://images.beneluxspoor.net/bnls/wisselservo-05.jpg)
- gaatjesboard op testerprintje geprikt
(https://images.beneluxspoor.net/bnls/wisselservo-06.jpg)
-SG92 servo (ca 1 euro) aangesloten en connector met 3 lange draden naar relais op uitvoerkaart
(https://images.beneluxspoor.net/bnls/wisselservo-07.jpg)
Het common relaiscontact komt aan het oude lopercontact van de tester. De NC en NO relaiscontacten komen aan de lopers van de 2 potmeters. Met het schakelen van het relais wordt steeds één van de 2 potmeters gekozen. Hiermee zijn de eindstanden van de servo in te stellen.
Zie ook deze pagina in de encyclopedie (https://encyclopedie.beneluxspoor.net/index.php/Servo-aansturing#Aangepaste fabrieks-servotester).
Wisselaandrijving voor ca 2,50 euro, een fractie van de fabrieksaandrijving...
-
Leuke baan met veel zelfbouw. Bijvoorbeeld je wisselaandrijving, dat geeft te denken.
Filmpjes ook leuk, lekker puur techniek el carrilet y el coche.
Mag ook wat muziek eronder, van de animals bijvoorbeeld, of jouw voice-over met uitleg. (y)
-
Het 1e schema is het ge-"reverse engineerde" schema van een servotester, rond het IC niet helemaal correct maar het gaat vooral om hoe de potmeter aan het IC zit.
Het 2e schema geeft het principe van 2 potmeters en een schakelaar.
Het 3e schema is zoals ik het gemaakt heb, met een piggy back printplaatje met connectoren en 2 potmeters op de plaats van de ene potmeter.
Een wisseldecoder werkt ook met een relais toch? Dit is dan ook voor een digitale baan te gebruiken.
(https://images.beneluxspoor.net/bnls/wisselservo-08_1.jpg)
Die filmpjes heb ik ooit even snel gemaakt met mijn telefoon, met slechte belichting. Teveel moeite om ze mooier te maken met een muziekje er bij...
-
Dit weekeind een draadloos camera'tje ingebouwd in een lange "DIGITAL is cool" wagon:
(https://images.beneluxspoor.net/bnls/camera-1.jpg)
(https://images.beneluxspoor.net/bnls/camera-2.jpg) (https://images.beneluxspoor.net/bnls/camera-3.jpg)
Ontvanger, aangesloten op video ingang van TV:
(https://images.beneluxspoor.net/bnls/camera-5.jpg)
Beeld op TV:
(https://images.beneluxspoor.net/bnls/camera-6.jpg)
Nu nog uitzoeken hoe ik er een filmpje van kan maken.
-
Oh wow, dat ziet er stukken handiger en netter uit dan mijn klein-cameraatje-met-ducttape-op-rongenwagen experiment! Tijd om een oud rijtuig bij de kladden te vatten.
Om het naar je pc te kijken zou je een goedkope "video grabber" (voorbeeld (https://www.conrad.nl/nl/basetech-br116-video-grabber-incl-videobewerkingssoftware-plug-play-1168633.html?sc.ref=Search%20Results)) kunnen gebruiken.
Reinout
-
... "video grabber"
Nu je het zegt... ik heb nog ergens zo een ding liggen, ooit gebruikt om videotape op DVD te zetten. Dat wordt even zoeken...
-
Zojuist dit topic gevonden via de link in je signature.
Geinig project. Ik sta er niet altijd bij stil dat het digitaliseren van de baan iets is wat bijvoorbeeld al in de jaren 80 werd gedaan.
Ook leuk om generatieverschillen te zien qua programmeren ::)
Zelf een beetje gerommeld met Delphi rond 1999, dat was zo rond mijn 13e, maar nooit meer iets meegedaan.
Dit ga ik wel volgen :)
-
... "video grabber"
Ik heb mijn oude video grabber weer opgezocht en aangesloten op de ontvanger en de computer. Vervolgens MS Movie Maker (https://www.microsoft.com/nl-nl/store/p/movie-creator-free-video-editor/9nblggh4wwjr) gedownload en uitgeprobeerd. Nu krijg ik alleen maar een zwart/wit beeld op de computer terwijl ik met de ontvanger op de TV wel een kleurenbeeld krijg... rara??
Ik heb de camera overigens weer uit de 'Cool' wagon gehaald en ingebouwd in een oude Jouef 1306, zonder motor, zodat hij door een andere loc opgeduwd kan worden ipv getrokken. Ik werd wat duizelig van het achteruitrijden...
(https://images.beneluxspoor.net/bnls/camera1306-1.jpg)
Ik heb alle assen van de 1306 voorzien van stroomafnemers, een brugcel en een buffer-elco toegevoegd en een 7809 spanningsregelaar. De camera werkt nu zonder batterijtje, scheelt een hoop ruimte:
(https://images.beneluxspoor.net/bnls/camera1306-5.jpg)
De camera zit achter het kleine gaatje onder de middenstijl, zit vast met twee M2 boutjes waarvan de koppen te zien zijn. Er zitten ook nog twee witte leds in die genoeg licht geven om ook in tunnels beeld te hebben.
(https://images.beneluxspoor.net/bnls/camera1306-3.jpg)
... Ik sta er niet altijd bij stil dat het digitaliseren van de baan iets is wat bijvoorbeeld al in de jaren 80 werd gedaan.
Ja, ik ben er begin jaren '80 mee begonnen, toen was jij nog niet geboren... :) Je bent net zo oud als mijn zoon.
Dit ga ik wel volgen
Leuk, maar ik post niet zoveel, je moet wel geduld hebben. ;D
-
Hoi,
Zit even te neuzen in je bouwdraadje (Dankzij je signature). Qua leeftijd en opleiding en programma afkomst redelijk op hetzelfde niveau.
Ben in de jaren 80/90 bezig geweest met automatiseren met het HCC!m systeem. Dus kon ook hun software gebruiken.
Daarnaast in die tijd Delphi gebruikt om mijn eerste stapjes in OO te zetten. Later veel aan gehad.
Nu is Visual Studio de ontwikkel omgeving voor de normale zaken. Verder zoveel mogelijk de bijbehorende IDE.
Groet,
Gerard van der Sel.
-
Ik ben inmiddels gepensioneerd dus ik heb alle tijd voor modelspoor en ander hobbies.
Ik heb in het verleden ook veel programmeerwerk gedaan maar hoofdzakelijk voor relationele databases, niets in procesbesturing e.d., daar ben ik pas mee begonnen met deze modelbaan, de overstap van procedureel naar OOP heb ik ook nooit echt gemaakt, ben er wel mee begonnen, ook in Delphi maar het was me teveel gedoe en het ging me niet snel genoeg. Ik kan nu met Pascal alles doen wat ik wil dus ik begin ook niet meer aan OOP.
Wat ik nog wel doe is werken met een Basic Stamp microcontroller, o.a. de traverse op mijn baan wordt bestuurd door een BS2 en het een mechanisme uit een oude matrixprinter en er ligt ook nog ergens een Arduino waar ik wat mee stoei in C++ (wat een gedoe) en waar nu een DCC++ centrale op staat, maar Pascal blijft mijn favoriete programmeertaal. Die Arduino centrale met JMRI is nog een project voor later...
Mijn modelbaan is inmiddels uitgebreid met een (soort van) schaduwstation met 4 sporen, dat vereiste weer wat extra programmeerwerk...
gr M.
(https://images.beneluxspoor.net/bnls/schaduw01.jpg)
-
Vandaag maar eens een softwarematige aanpak bedacht voor een PWM snelheidsregeling omdat de vorige niet werkte... (zie hier (https://forum.beneluxspoor.net/index.php?topic=78506.msg3221828456#msg3221828456)).
Arduino Uno gekocht en een dubbele H brug. Een printje met 3 potmeters had ik nog liggen, uit een oude TV. Voeding gemaakt van de onderdelen uit een defecte spaarlamp + een ledje. Faller AMS trafo van 16 V had ik ook nog.
Programma'tje geschreven voor de Arduino. Het idee was om een positieve puls te maken met een variabele lengte van 0.. 10ms gevolgd door een negatieve puls van 0..10 ms, op soortgelijke manier als het originele Faller AMS systeem dat doet met een halve sinus, waarvan dan de amplitude geregeld wordt door een variabele weerstand, totale vaste lengte 20 ms (= 50 Hz). Met PWM regel je de pulsbreedte, niet de pulshoogte (die blijft constant).
Mijn idee was om tzt een parallelle LCD aan te sluiten om de snelheid te laten zien op een schaal van 0..100, dus die code zit ook al in het programma, maar het wordt dan waarschijnlijk te traag om nog op tijd pulsen te maken. Met een seriële terminal lukt het in ieder geval niet.
// AMSregelaar.ino
// regelt 2 auto's mbv een halve L298N dual H bridge module en 2 potmeters
//
// ================================= [include libraries ] ==========================================
#include <LiquidCrystal.h> // Hitachi HD44780 LCD library
// ================================= [global variables ] ==========================================
const byte LCDRSpin = 12; // LCD pinnen
const byte LCDEnpin = 11;
const byte LCDD4pin = 4; // data
const byte LCDD5pin = 5;
const byte LCDD6pin = 6;
const byte LCDD7pin = 7;
LiquidCrystal lcd(LCDRSpin, LCDEnpin, LCDD4pin, LCDD5pin, LCDD6pin, LCDD7pin);
//
// input pins met potmeter
const byte speed1pin = A1; // snelheid auto 1 ++/-- met potmeter
const byte speed2pin = A2; // snelheid auto 2 ++/-- met potmeter
// output pins motor control H-bridge
const byte auto1pin = 8; // auto 1 op rijstrook A, '0' = stop, '1' = rijden
const byte auto2pin = 9; // auto 2 op rijstrook A
const byte pulstijd = 10; // pulslengte bij 50 Hz = 1/50 = 20/1000 = 20 ms = 10 msec +puls + 10 msec -puls
//word snelheid;
word rijtijd;
// +5 V|--------| |-----| |---|
// | | | | | | |
// 0 -| |--| |--------| |-----| |--------| |-------| |-------|
// | | | | | | | | |
// -5 V |--| | |--| | |---| |
// | | | | | |
// PWM deel msec | 8 | 2| 2| 8 | 5 | 5 | 2| 8 | 3 | 7 | 3 | 7 |
// hoog/laag freq msec | 10 | 10 | 10 | 10 | 10 | 10 |
// hoog + laag msec | 20 | 20 | 20 |
// ==============================================================================================================
void disp(word s, byte r){ // regel 1 = 0 Subroutine om tekst op LCD te laten zien
lcd.setCursor(0, r-1); // laat s zien op regel r van display
lcd.print("snelheid ");
lcd.print(r,DEC);
lcd.print(": ");
lcd.print(s, DEC);
lcd.print(" ");
}
// ========================== [set up ] ========================================================================
//
void setup() {
lcd.begin(16, 2); // set up LCD 16 karakters, 2 regels
lcd.clear();
pinMode(LED_BUILTIN, OUTPUT);
pinMode(speed1pin,INPUT); // joystick potmeter snelheid auto 1
pinMode(speed2pin,INPUT); // joystick potmeter snelheid auto 2
pinMode(auto1pin,OUTPUT); // aansturing H brug
pinMode(auto2pin,OUTPUT);
digitalWrite(auto1pin,LOW); // auto 1 uit
digitalWrite(auto2pin,LOW); // auto 2 uit
//Serial.begin(9600); // open serial port 9600 bps:
}
// ========================= [ main ] ============================================================================
void loop() {
digitalWrite (auto1pin,HIGH); // laat auto 1 rijden, kijk ondertussen naar +/- joystick
digitalWrite(LED_BUILTIN, HIGH); // ingebouwde LED loopt mee met auto 1
//snelheid = analogRead(speed1pin)/10; // potmeter; waarde 0..1023/10 = 0..102
//disp(snelheid,1); // laat snelheid 1 zien op regel 1 van lcd
//Serial.print("snelheid 1: "); // test
//Serial.println(snelheid); // test
//rijtijd = snelheid/10; // waarde 0..102/10 ==> puls 0..10 msec
rijtijd = analogRead(speed1pin)/100; // waarde 0..1023/100 ==> puls 0..10 msec
delay (rijtijd); // laat auto 1 rijden gedurende 'rijtijd1' = 0..10 msec
digitalWrite(auto1pin,LOW); // stop auto 1
digitalWrite(LED_BUILTIN, LOW); // ingebouwde LED loopt mee met auto 1
delay (pulstijd - rijtijd); // gedurende rest pulstijd, totaal 10 msec
digitalWrite(auto2pin,HIGH); // laat auto 2 rijden, kijk ondertussen naar joystick
//snelheid = analogRead(speed2pin)/10; // potmeter; waarde 0..1023/10 = 0..102
//disp(snelheid,2); // laat snelheid 2 zien op regel 2 van lcd
//Serial.print("Snelheid 2: ");
//Serial.println(snelheid);
//rijtijd = snelheid/10; // waarde 0..102/10 ==> puls 0..10 msec
rijtijd = analogRead(speed2pin)/100; // waarde 0..1023/100 ==> puls 0..10 msec
delay (rijtijd); // laat auto 2 rijden gedurende 'rijtijd2' = 0..10 msec
digitalWrite(auto2pin,LOW); // stop auto 2
delay (pulstijd - rijtijd); // gedurende rest pulsijd
// LOOP // voor altijd
}
// ==========================[ end main ] ========================================================================
De Arduino verbonden met de potmeters en de stuuringang van de motorregelaar. De Arduino zit op een 12 V adapter.
De motorregelaar krijgt een gelijkspanning van ca 20 V uit de trafo en de voeding, de uitgang van de regelaar gaat naar de baan.
Foto's volgen...
-
Dat ziet er dan zo uit:
Potmeters
(https://images.beneluxspoor.net/bnls/potmeters.jpg) (https://images.beneluxspoor.net/bnls/potmeters.jpg)
Arduino, H-brug motorregelaar
(https://images.beneluxspoor.net/bnls/ArduinoUno.jpg) (https://images.beneluxspoor.net/bnls/ArduinoUno.jpg)
Trafo, voeding
(https://images.beneluxspoor.net/bnls/regelaarHbrug-2.jpg) (https://images.beneluxspoor.net/bnls/regelaarHbrug-2.jpg)
Pulsen zichtbaar op DSO
+puls
(https://images.beneluxspoor.net/bnls/pluspuls.jpg) (https://images.beneluxspoor.net/bnls/pluspuls.jpg)
-puls
(https://images.beneluxspoor.net/bnls/minpuls.jpg) (https://images.beneluxspoor.net/bnls/minpuls.jpg)
beide
(https://images.beneluxspoor.net/bnls/helepuls.jpg) (https://images.beneluxspoor.net/bnls/helepuls.jpg)
Puls met rijdende auto
(https://images.beneluxspoor.net/bnls/viezepuls.jpg) (https://images.beneluxspoor.net/bnls/viezepuls.jpg)
Video van pulsen bij verdraaien van potmeters, eerst + puls van 0-- -> 10 ms, dan -puls 0 ---> 10 ms
en weer terug naar 0 ms
https://www.youtube.com/v/eeQ7wKJ8dOA
Pulsen met rijdende auto
https://www.youtube.com/v/cYd4oS7vSTA
-
Dit weekeind nog wat verder nagedacht...
Een Arduino heeft 6 analoge ingangen en 6 PWM uitgangen. Door die te gebruiken, met een dubbele H-brug motorregelaar, is het mogelijk om 4 auto's onafhankelijk van elkaar te laten rijden.
Schema:
(https://images.beneluxspoor.net/bnls/AMSregelaar4xPWM.jpg)
Regelaar:
(https://images.beneluxspoor.net/bnls/regelaarNanox4-1.jpg)
(https://images.beneluxspoor.net/bnls/regelaarNanox4-2.jpg)
Maar dan blijven er van de Arduino nog 2 in- en uitgangen ongebruikt, dat is jammer...
Door nog 2 potmeters toe te voegen en een 2e motorregelaar, zijn er dus 6 auto's te regelen, en met 2 Arduino's en 3 regelaars dus 12 auto's (de 2e motorregelaar wordt met 2 Arduino's gestuurd).
De code is voor dit laatste, 6 auto's per Arduino:
Code:
// AMScontrollerPWM.ino
//
// controls 2x 2 Faller AMS cars in same lane
// using L298N dual H bridge module and 4 (slide) potmeters
//
// ================================= [include libraries ] ==========================================
// none
// ================================= [global variables ] ==========================================
//
// input pins potmeters
const byte speed6pin = A0; // speed car 6 ++/-- potmeter
const byte speed1pin = A1; // speed car 1 ++/-- potmeter
const byte speed2pin = A2; // speed car 2 ++/-- potmeter
const byte speed3pin = A3; // speed car 3 ++/-- potmeter
const byte speed4pin = A4; // speed car 4 ++/-- potmeter
const byte speed5pin = A5; // speed car 5 ++/-- potmeter
//
// output pins H-bridge 1 (PWM)
const byte car1pin = 11; // lane A, cars 1 & 2
const byte car2pin = 10;
const byte car3pin = 6; // lane B, cars 3 & 4
const byte car4pin = 5;
// output pins H-bridge 2 (PWM)
const byte car5pin = 4; // lane C, cars 5 & 6
const byte car6pin = 9;
//
const byte pulsetime = 10; // pulse length at 50 Hz = 1/50 sec = 0.002 sec = 20 ms = 10 msec +puls + 10 msec -puls
//
// =========================== [ set up ]=========================================================================
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite (LED_BUILTIN, HIGH); // built-in LED on
pinMode(speed1pin,INPUT); // potmeter speed car 1
pinMode(speed2pin,INPUT); // potmeter speed car 2
pinMode(speed3pin,INPUT); // potmeter speed car 3
pinMode(speed4pin,INPUT); // potmeter speed car 4
pinMode(speed5pin,INPUT); // potmeter speed car 5
pinMode(speed6pin,INPUT); // potmeter speed car 6
pinMode(car1pin,OUTPUT); // control of H bridge 1, cars 1..4
pinMode(car2pin,OUTPUT); // all pins output
pinMode(car3pin,OUTPUT);
pinMode(car4pin,OUTPUT);
pinMode(car5pin,OUTPUT); // control of H bridge 2, cars 5,6
pinMode(car6pin,OUTPUT);
digitalWrite(car1pin,LOW); // all cars stop
digitalWrite(car2pin,LOW);
digitalWrite(car3pin,LOW);
digitalWrite(car4pin,LOW);
digitalWrite(car5pin,LOW);
digitalWrite(car6pin,LOW);
delay (1000); // wait 1 sec
digitalWrite (LED_BUILTIN, LOW); // built-in LED off
}
// =========================== [ main ] ==========================================================================
void loop() {
// ADC value on potmeter speed pin = 0..1023
// divide by 4 to convert to pulse 0..255 ==> 0..100% duty cycle
//
// for '+' cars in lane A, B & C (cars 1, 3 & 5)
digitalWrite (car1pin,LOW);
analogWrite (car2pin,analogRead(speed1pin)/4); // + car 1 in lane A
digitalWrite (car3pin,LOW);
analogWrite (car4pin,analogRead(speed3pin)/4); // + car 1 in lane B
digitalWrite (car5pin,LOW);
analogWrite (car6pin,analogRead(speed5pin)/4); // + car 1 in lane C
delay (pulsetime); // wait positive halfwave
// for '-' cars in lane A B & C (cars 2, 4 & 6)
digitalWrite (car2pin,LOW);
analogWrite (car1pin,analogRead(speed2pin)/4); // - car 2 in lane A
digitalWrite (car4pin,LOW);
analogWrite (car3pin,analogRead(speed4pin)/4); // - car 2 in lane B
digitalWrite (car6pin,LOW);
analogWrite (car5pin,analogRead(speed6pin)/4); // - car 2 in lane C
delay (pulsetime); // wait negative halfwave
} // repeat forever
// ==========================[ end main ] ========================================================================
Deze week nog maar wat bijbouwen.
-
(y) (y) (y)
-
Ik heb alle assen van de 1306 voorzien van stroomafnemers, een brugcel en een buffer-elco toegevoegd en een 7809 spanningsregelaar. De camera werkt nu zonder batterijtje, scheelt een hoop ruimte
Martin, ik heb een Wifi camera (SQ13) om in een lok in te bouwen en ik wil ook zoiets erom heen bouwen, zodat de camera stroom afneemt van het spoor en een stroombuffer heeft. Weet je misschien waar ik ergens een overzicht/schema hiervan kan vinden hoe ik dat in elkaar zet? Het lijkt me een redelijk eenvoudige opstelling en ik ben wel handig met solderen, maar niet met het bedenken van elektronische schakelingen.
-
Antwoord ontvangen via PM. Camera heeft batterij, da's z'n stroombuffer. 5V DC converter erop, klaar. Ik zal er in mijn draadje over de SQ13 verder over schrijven als ik zover ben.
-
Werk je nog aan deze baan?
-
Jazeker!!
Ik heb alleen wat pech gehad met een computer die stuk ging en waar het besturingsprogramma op stond. Ik heb inmiddels een nieuwe computer en ik heb een backup terug gezet etc, maar er is ook een groter scherm bij de nieuwe computer dus ik moest het display deel van het programma herschrijven...
Het kost allemaal wat tijd...
-
Ah mooi (y)
-
Dit is mijn meest recente bouwsel; een traverse, gemaakt met met het loopwerk van een oude matrixprinter met stappenmotor. Op de plaats van de printkop zit de bak van de traverse. Besturing met een Arduino. Met een draaiknop wordt het spoor gekozen en na indrukken van een knopje schuift de bak naar het gekozen spoor.
De sporen zijn nog niet aangesloten op een regelaar, dat wordt de volgende stap.
https://www.youtube.com/v/BaNMoxOLXKg
Als het filmpje niet start, dit is de link (https://www.youtube.com/watch?v=BaNMoxOLXKg).
-
Prachtig (y)
Ik hou van bewegende dingen op de baan.
Welk land en welke periode heb je als thema?
-
Hoofdzakelijk NL materieel, maar ik heb ook een Duitse stoomlok, en een USA Burlington Northern loc en een Canadese CN, gewoon omdat ik die mooi vond en er tijdens een vakantie toevallig tegenaan liep.
Wat tijdperken betreft doe ik niet moeilijk, ik rij met wat ik mooi vind. Het gaat mij meer om de besturing en de elektronica. Ik lig er ook niet wakker van dat er gelijke wagennummers in dezelfde trein zitten... ;)
-
Wagennummers; je hebt van die fundamentalisten die eisen dat die allemaal verschillen :D
Ik heb ook D en NL en net als jij een paar USA locs die ik mooi vind: Die EMD DDA40X moest ik natuurlijk wel hebben :)
-
Hallo,
Geweldig die traverse :):):) (y) (y) (y) (y) (y)
Goed idee met die stappenmotor van een matrix printer.
-
Goed idee met die stappenmotor van een matrix printer.
Mocht het je interesseren, dit is het principeschema:
(https://images.beneluxspoor.net/bnls/traverse-schema-arduino.jpg) (https://images.beneluxspoor.net/bnls/traverse-schema-arduino.jpg)
-
Hallo,
Bedankt voor het schema. Kan dit ook worden uitgevoerd met een Arduino Uno ? Daar heb ik er nog een paar van liggen :)
-
Misschien, in dit schema zijn A6 en A7 gebruikt en een UNO heeft die niet. Echter A2 is nog vrij om te gebruiken en je kan ook nog pin 0 en 1 gebruiken, maar let op dat je die weer makkelijk los kan maken omdat iets aansluiten op die pinnen het upload process zou kunnen verstoren. Ik weet verder niets af van die BCD<->7 segment omzetter.
@Sonnet, ik weet niet wat je precies doet met A6 en A7, ik had ooit gelezen dat je die alleen als analoge input kon gebruiken ???
Bas
-
A6 en A7 zijn eigenlijk poort C pin 6 en pin 7 en zijn mits uitgevoerd gewoon als dogitale input/output te gebruiken, net als A0 tot A5.
Groet,
Gerard van der Sel.
-
Hm ik heb het gegoogled en A6 en A7 kun je niet als digitale pinnen inzetten. Ze zijn alleen aangesloten op een interne multiplexer op de ADC.
https://forum.arduino.cc/index.php?topic=568116.0 (https://forum.arduino.cc/index.php?topic=568116.0)
Bas
-
Kan dit ook worden uitgevoerd met een Arduino Uno ?
Ja. Als het om pins A3 t/m A7 gaat: de Uno heeft genoeg vrije digitale I/O-pins, nl. 2 t/m 13 (*) en A0 t/m A5. Alleen is van die laatste reeks A1 in 72sonett's schema al in gebruik als analoge input, en die heb je op de Uno natuurlijk ook weer nodig.
*: Ook nog 0 en 1, maar die kun je beter vrij houden, zijn nl. voor de seriepoort, en die heb je nodig om een sketch te kunnen uploaden.
-
Dat van A6 en A7 wist ik van de Arduino reference (https://www.arduino.cc/reference/en/language/functions/digital-io/digitalwrite/), maar ik gebruik ze als digitale uitvoer en blijkbaar gaat dat goed. Eventueel kun je de LT op A5 weglaten en dan A2 en A5 gebruiken ipv A6 en A7.
De draaischakelaar geeft met een weerstandsladder een analoge waarde aan de Nano, die waarde wordt verschaald naar een getal 0..5 voor het spoornummer. Dit nummer wilde ik zichtbaar maken op een grote 7-segmentdisplay opgebouwd uit rechthoekige leds, maar omdat er op de Nano geen 7 I/O lijnen meer vrij waren heb ik dat met een BCD naar 7segment decoder gedaan door het spoornummer per bit naar de (4) A, B, C en D ingangen van de decoder te schrijven. Toen was er nog weer een I/O voor de lamptest (LT) beschikbaar dus die heb ik ook maar gebruikt, hoewel je voor die LT ook een 8 naar de display kan sturen. Je kunt dat hele 7segmentdeel ook weglaten, ik heb het ook nog niet aangesloten.
(https://images.beneluxspoor.net/bnls/7SegSpoorDisp.jpg)
Het aantal stappen tussen de sporen heb ik experimenteel vastgesteld en de waarde als constante in het programma gezet, zo ook het stukje tussen de parkeerstand helemaal links en spoor 0.
Bij inschakelen is de stand van de stappenmotor en de traverse niet bekend, er moet dus eerst een nulstand worden bepaald. Dat gebeurt door de traverse langzaam naar links te schuiven totdat een schakelaartje wordt ingedrukt (het klikken van het schakelaartje is te horen in het filmpje). Vanuit die 'parkeerstand' schuift de traverse dan naar spoor 0.
In het filmpje is te zien dat de traverse soms blijft haken achter een aansluitend spoor en de motor een paar stappen overslaat, dan is de nulstand ook weg en dan lijnen de sporen niet meer op met de traverse. Daarom wordt iedere keer als spoor 0 gekozen wordt de parkeerstand weer even opgezocht en dan klopt het weer.
In het filmpje is ook te zien dat na inschakelen de LCD niet altijd goed de tekst weergeeft, maar als ik dan de resetknop op de Nano indruk is het weer ok.
De traverse is overigens een Märklin brugdeel.
Voor de liefhebbers, dit is het programma;
// ULN2803/4 controller board, Matsushita 42SIM-24D8YB/24D8A stepper motor
// I/O pin1 = 4 rood ---> pin 4 stepper motor
// I/O pin2 = 5 bruin ---> pin 2 ,,
// I/O pin3 = 6 geel ---> pin 1 ,,
// I/O pin4 = 7 blauw ---> pin 3 ,,
// wit ---> pin 5 (VCC)
// volgorde; 6 -> 6+5 -> 5 -> 5+7 -> 7 -> 7+4 -> 4 -> 4+6
//
//--------------------- [global variables ]------------------------------------------------------
const byte maxspoor = 6; // aantal sporen
const byte parkpause = 2; // minimum pause in msec = max. snelheid
const byte schuifpause = 1; // max. pause in msec = min. snelheid
const word stappenperspoor = 130; // aantal stappen tussen 6 sporen 0..5
const word stappennaarnul = 30; // aantal stappen van parkeerpositie naar spoor 0
char messVersie[]="Traverse 1.0 "; // 18 posities
byte doelspoor; // 6 sporen, om doelspoor 0..5 aan te geven
byte actspoor; // om actuele spoor aan te geven
byte rotorpos[9]; // fases 00000000 .. 00001010
byte index; // begin fasepositie na parkeren
int stappen; // totaal te nemen stappen vooruit (+) of achteruit (-)
bool parkstand; // om aan te geven of in parkeerstand of niet
//
// bit D76543210
const byte LCDcls = B00000001; // clear LCD
const byte autoinc = B00000110; // Set Auto-Increment on
// B00001100; // Display on/off control: Display on, cursor off, blink off
const byte cursoron = B00001110; // Turn On Cursor
const byte twoline4b5x8= B00101000; // Function Set: 4 bits, 2-Line Mode, 5x8 font
// Function set B001LNF-- Sets interface data length (L), number of display lines (N), and character font (F). 37 ms
// 1 : 8 bits,
// 0 : 4 bits
// 1 : 2 lines,
// 0 : 1 line
// 1 : 5 x 10 dots,
// 0 : 5 x 8 dots
// B00110100; // Function Set: 8-bit, 1 line, font 5x10
const byte cursorleft = B00010000; // move cursor 1 pos to left
const byte cursorright = B00010100; // move cursor 1 pos to right
// B0001 S/C R/L — — // Cursor or display shift without changing DDRAM contents. 37 ms
// 1 = Display shift
// 0 = Cursor move
// 1 = to the right
// 0 = to the left
// -----[ I/O pin definitions ]-------------------------------------------------
const byte draaiswpin = A1; // invoer voor doelspoor 0..6
const byte parkswpin = 5; // invoer parkeerschakelaar
const byte stepB4pin = 10; // naar stappenmotor via ULN2003 pin B1..B4
const byte stepB3pin = 11;
const byte stepB2pin = 12;
const byte stepB1pin = 13;
//
const byte BCDpinA = A3; // BCD naar 7 seg display
const byte BCDpinB = A7;
const byte BCDpinC = A6;
const byte BCDpinD = A4;
const byte lamptestpin = A5;
const byte ledroodpin = 6; // naar rode led op lcdboard
const byte ledgroenpin = 4; // naar groene led op lcdboard
const byte LCDd4pin = A0; // naar LCD datapin D4
const byte LCDd5pin = 9; // naar LCD datapin D5
const byte LCDd6pin = 2; // naar LCD datapin D6
const byte LCDd7pin = 8; // naar LCD datapin D7
const byte ENpin = 7; // naar LCD pin 10 ENable read/write
const byte RSpin = 3; // naar LCD pin 9 Register SELECT; 0 = Instructie, 1 = data/text
//======================[ LCD subroutines ] ======================================================
void ClearLCD() {
SendInst (LCDcls); // Clear display
}
// ----------------------------------
void SendInst(byte inst){
digitalWrite(RSpin,LOW); // Set instruction mode
SendChar (inst);
digitalWrite(RSpin,HIGH); // Back to text mode;
} // SendInst
// ----------------------------------
void SendChar (byte kar){
digitalWrite(LCDd4pin,bitRead(kar,4)); // kar.HIGHNIB // Send High Nibble
digitalWrite(LCDd5pin,bitRead(kar,5));
digitalWrite(LCDd6pin,bitRead(kar,6));
digitalWrite(LCDd7pin,bitRead(kar,7));
digitalWrite(ENpin,1); // puls op ENable, LCD neemt data over
delayMicroseconds(5);
digitalWrite(ENpin,0);
//
digitalWrite(LCDd4pin,bitRead(kar,0)); // kar.LOWNIB // Send Low Nibble
digitalWrite(LCDd5pin,bitRead(kar,1));
digitalWrite(LCDd6pin,bitRead(kar,2));
digitalWrite(LCDd7pin,bitRead(kar,3));
digitalWrite(ENpin,1); // puls op ENable, LCD neemt data over
delayMicroseconds(5);
digitalWrite(ENpin,0);
//delay(10);
} // SendChar
//----------------------------------------------------------------------------------
void stepperstap(byte index) { // draai steppermotor 1 stap
digitalWrite(stepB1pin,bitRead(rotorpos[index],0));
digitalWrite(stepB2pin,bitRead(rotorpos[index],1));
digitalWrite(stepB3pin,bitRead(rotorpos[index],2));
digitalWrite(stepB4pin,bitRead(rotorpos[index],3));
} // stepperstap
//----------------------------------------------------------------------------------
void motorstop () { // maak steppermotor stroomloos, leds aan/uit
stepperstap(0);
digitalWrite (ledroodpin,LOW); // rode led uit
digitalWrite (ledgroenpin,HIGH); // groene aan
} // motorstop
//----------------------------------------------------------------------------------
void parkeer() { // draai langzaam terug naar positie 0 totdat schakelaar wordt ingedrukt
char messPark1[15] = "Parkeren... ";
char messPark2[15] = "Geparkeerd. ";
digitalWrite (ledroodpin,HIGH); // rode led aan, groene uit
digitalWrite (ledgroenpin,LOW);
ClearLCD;
delay(50);
for (int t = 0; t<= 11; t++) { SendChar (messPark1[t]); } // laat "Parkeren... " boodschap zien
index = 9; // begin ergens
parkstand = digitalRead(parkswpin); // kijk naar eindschakelaar op traverse (= ook op LCD module)
while (parkstand == false) { // zolang schakelaar niet ingedrukt
index = index - 1; // draai linksom
if (index < 1) {index = 8; }; //
stepperstap(index);
delay (parkpause);
parkstand = digitalRead(parkswpin); // kijk naar eindschakelaar op traverse
} // schakelaar ingedrukt in eindstand
// schuif naar spoor 0
for (int t = 0; t == stappennaarnul; t++) { // 512 = 1 REV rotor shaft = 1/64 REV output shaft, half step
index = index + 1; // positief, rechtsom
if (index > 8) {index = 1; } // opnieuw beginnen als te groot
stepperstap(index); // uitvoer naar stappenmotor via ULN2003
delay (schuifpause*2); // langere pauze = langzamer schuiven
}
motorstop; // motor stroomloos, leds aan/uit
ClearLCD;
for (int t = 0; t<= 13; t++) { SendChar (messPark2[t]); } // laat "Geparkeerd." boodschap zien
actspoor = 0; // actuele stand van schuifbrug
doelspoor = 0;
delay (1000); // wacht om tekst te laten zien
}
//===================================================================================================
int haalstappen (int steps){ //draaischakelaar geeft spoor aan, spoor 0 = parkeerstand
char messWacht[8]= "Wacht: ";
char messNaar[8] = " ---> ?";
char messSpoor[8]= "Spoor ";
byte tmpspoor;
tmpspoor = actspoor;
do { // wachten tot schakelaar is ingedrukt, dan parkswpin == high
doelspoor = map(analogRead(draaiswpin),0,1023,0,5); // kijk naar draaischakelaar
if (tmpspoor != doelspoor) { // laat stand draaischakelaar zien op LCD en 7 seg als veranderd is
tmpspoor = doelspoor;
SendInst(cursorleft); // zet cursor 1 pos naar links
SendChar(48 + doelspoor); // laat nieuwe 'naar' spoornr zien op LCD
//
digitalWrite(BCDpinA,!bitRead(doelspoor,0)); // laat doelspoor zien op 7 seg display, 'laag' ís aan
digitalWrite(BCDpinB,!bitRead(doelspoor,1));
digitalWrite(BCDpinC,!bitRead(doelspoor,2));
digitalWrite(BCDpinD,!bitRead(doelspoor,3));
}
}
while (digitalRead(parkswpin) == LOW); // niets doen zolang schakelaar op LCD module niet is ingedrukt
//
if (doelspoor > maxspoor) { doelspoor = maxspoor; }
//DEBUG CRSRXY, 1,2, BIN dipsw, " doelspoor = ", DEC doelspoor, " "
steps = (doelspoor-actspoor) * stappenperspoor; // kan negatief zijn
//DEBUG CRSRXY, 1,3, "haalstappen; spoor ", DEC actspoor, " --> ", DEC doelspoor, " stappen = ", SDEC steps," ", CR
ClearLCD;
for (int t = 0; t<=5; t++) { SendChar(messSpoor[t]); } //lookup t, ["Spoor "], char
SendChar (48 + actspoor); // laat 'van' spoornr zien op LCD
for (int t = 0; t<=5; t++) { SendChar(messNaar[t]); } //lookup t, [" ---> "], char
SendChar (48 + doelspoor); // laat 'naar' spoornr zien op LCD
return steps; // haalstappen
}
// =======================================================================================0
void setup() {
pinMode(draaiswpin,INPUT); // invoer draaischakelaar
pinMode(parkswpin,INPUT); // invoer parkeerschakelaar = ook schakelaar op LCD module
pinMode(stepB1pin,OUTPUT); // uitvoer naar stappenmotor via ULN2003
pinMode(stepB2pin,OUTPUT);
pinMode(stepB3pin,OUTPUT);
pinMode(stepB4pin,OUTPUT);
pinMode(BCDpinA,OUTPUT); // BCD naar 7 seg display
pinMode(BCDpinB,OUTPUT);
pinMode(BCDpinC,OUTPUT);
pinMode(BCDpinD,OUTPUT);
pinMode(lamptestpin,OUTPUT);
pinMode(RSpin,OUTPUT); // = LCD PIN 9 Register Select; 0 = Instructie, 1 = data/text
pinMode(ENpin,OUTPUT); // = ENable read/write
pinMode(LCDd4pin,OUTPUT); // LCD datapin d4
pinMode(LCDd5pin,OUTPUT); // LCD datapin d5
pinMode(LCDd6pin,OUTPUT); // LCD datapin d6
pinMode(LCDd7pin,OUTPUT); // LCD datapin d7
pinMode(ledroodpin,OUTPUT); // leds op lcdboard
pinMode(ledgroenpin,OUTPUT);
rotorpos[0] = B0000000; // 0
rotorpos[1] = B0000010; // 6
rotorpos[2] = B0000110; // 6+5
rotorpos[3] = B0000100; // 5
rotorpos[4] = B0000101; // 5+7
rotorpos[5] = B0000001; // 7
rotorpos[6] = B0001001; // 7+4
rotorpos[7] = B0001000; // 4
rotorpos[8] = B0001010; // 4+6
// ------------------ Initialize LCD -------------------------------
//LOW RW ' write mode
//LOW RS ' instruction mode
//LOW LCDDB4 ' Set To 4-bit Operation
//HIGH LCDDB5
//LOW LCDDB6
//LOW LCDDB7
//PULSOUT EN,3
SendInst (twoline4b5x8); // %00101000 = 2-Line Mode, 4 bits, 5x8 font
SendInst (cursoron); // %00001110 = Turn On Cursor
SendInst (autoinc); // %00000110 = Set Auto-Increment on
ClearLCD;
//
for (int t=0; t<=18; t++) {SendChar (messVersie[t]); }
delay (3000); // laat versie zien
lamptest; // 7 segment lamptest
parkeer; // draai naar positie 0 totdat schakelaar wordt ingedrukt, dan naar spoor 0
}
// --------------------------------------------------------------------
void lamptest(){ // lamptest; 7 segment alle leds aan
char messLamptest[15] = "lamptest... ";
for (int t=0; t<=15; t++) {SendChar (messLamptest[t]); }
//
/*
t = 8;
digitalWrite(BCDpinA,bitRead(t,0)); // laat '8' zien op 7 seg display
digitalWrite(BCDpinB,bitRead(t,1));
digitalWrite(BCDpinC,bitRead(t,2));
digitalWrite(BCDpinD,bitRead(t,3));
*/
digitalWrite(lamptestpin,0); // maak lamptestpin laag, '8' gaat aan
delay (1000); // 1 seconde 7 segment lamptest
digitalWrite(lamptestpin,1); // maak lamptestpin hoog
}
// --------------------------[ main ]-----------------------------------
//
void loop() {
haalstappen (stappen); // aantal stappen aan de hand van spoornummer via draaischakelaar
// motor gaat draaien
digitalWrite (ledroodpin, HIGH); // rode leds aan
digitalWrite (ledgroenpin,LOW); // groene led uit
//
for (int stap = 0; stap == abs(stappen); stap++) { // STEP (HFstep+1) // 512 = 1 REV rotor shaft = 1/64 REV output shaft, half step
if (stappen > 0) {
index = index + 1; } // positief, rechtsom
else {
index = index - 1; } // negatief, linksom
if (index > 8) {index = 1; } // opnieuw beginnen van onder als te groot
if (index < 1) {index = 8; } // opnieuw beginnen van boven als te klein
stepperstap(index); // uitvoer naar stappenmotor via ULN2003
if ((stap < (stappenperspoor/4) ) || (stap > (abs(stappen)-stappenperspoor/4) ))
{
delay (schuifpause*2); // langzaam schuiven als dichtbij doelspoor
}
else {
delay (schuifpause); // snel schuiven
}
}
actspoor = doelspoor; // schuifbrug is verplaatst naar doelspoor
if (doelspoor == 0) { parkeer(); } // opnieuw nulstand vaststellen
motorstop; // steppermotor stroomloos, rode led uit, groen aan
}
// ======================================= [ einde prog ]==============================================================
-
De AMSregelaar werkt naar behoren bij mij. Ik heb de serial monitor de snelheid verhoogd. Het uitlezen van de schuifpotentiometer heeft alleen invloed als meer dan 10 % gewiizigd word. Hiermee heb ik vier autootjes rustig rijden. Vr gr Hans
-
Vandaag de boel na lange tijd en wat aanpassingen in het programma weer eens laten rijden:
https://YouTube.com/v/AFlBLjeHkWE
Ging vrij probleemloos met een NS2200 maar een Sik gaf veel storingen.
-
De afgelopen weken met Tinkercad (https://www.tinkercad.com/things/ciUVUQgmGlE) ons huis in 3d nagebouwd in 1:100. Vorige week de bestanden naar een Fablab gebracht hier in de buurt en het huis laten afdrukken. Het huis is in 4 delen getekend; garage, bg, 1e verdieping en dak. Het moet nog wat bijgesneden worden hier en daar, er moet nog doorzichtig plastic in de ramen en deuren, de garage moet nog grijs geverfd worden en de 4 delen moeten dan op elkaar gelijmd worden. Dan nog een plekje zoeken ergens op de modelbaan...
Misschien ook nog licht er in maken, als dat niet teveel doorschijnt.
De schaal is 1:100 ipv 1:87 dus het huis is iets te klein, maar dat valt niet op (de auto is een Wiking model in 1:87). Misschien laat ik het nog een keer drukken met een schaalfactor van 1,15 (=100/87).
(https://images.beneluxspoor.net/bnls/huis-04-61fab0afad598.jpg) (https://images.beneluxspoor.net/bnls/huis-04-61fab0afad598.jpg)
(https://images.beneluxspoor.net/bnls/huis-delen-jpg-61fab0fbc66db.jpg) (https://images.beneluxspoor.net/bnls/huis-delen-jpg-61fab0fbc66db.jpg)
-
Leuk gelukt zo, je huis. Zoiets herkenbaars op de baan lijkt me leuk.
Hoeveel kost het eigenlijk ongeveer om zoiets te laten printen? Ik heb ooit in m'n studie wel eens met dat soort CAD-pakketten moeten/mogen werken en er is best veel leuks mogelijk, maar ik heb géén idee hoe goedkoop/duur dat 3d printen tegenwoordig is.
Reinout
-
bg + garage €14,50
1e verdieping €12,50
dak €10,00
Ik heb op de bovenverdieping nog wat meubilair gemaakt, inclusief de modelbaan die daar staat. Je krijgt dan wel het 'Droste-effect (https://nl.wikipedia.org/wiki/Droste-effect)' (recursie); op die modelmodelbaan staat ook weer een model van het modelhuis, met daarin een model van de modelmodelbaan... ad infinitum.
-
Bedankt voor de info. Valt me eigenlijk best mee. Je hebt er in ieder geval iets heel leuks mee kunnen bouwen!
Reinout
-
Leuk idee om je eigen huis na te maken! Iets unieks voor op de baan (y)
Maar waarom heb je het in 1:100 laten printen i.p.v. 1:87? Zit daar een technische of praktische reden achter?
groeten,
Julien
-
Ik heb het in Tinkercad in 1:100 getekend, vanaf de bouwtekeningen, dat is handiger dan alle afmetingen te delen door 87. Het moet ook nog wel op de 3d printer passen, dus veel groter dan 25 x 25 cm kan niet. Het is nu ca 13 x 13 cm, in 1:87 wordt dat ca 15 x 15 cm.
Wat nog wel mogelijk is, is het .obj bestand met een factor 100/87 = 1,15 te vergroten. Ik heb inmiddels nog wat details veranderd, dus misschien laat ik het nog een keer afdrukken in 1:87.
-
Bedankt voor de uitleg!
groeten,
Julien
-
De prijs valt me mee.
-
Vergelijkbaar met een Faller kit van dezelfde grootte.
-
Inderdaad. Maar deze is uniek (y)
-
Vandaag huis ingebouwd...
(https://images.beneluxspoor.net/bnls/carrilet-1-62093ceb7541e.jpg) (https://images.beneluxspoor.net/bnls/carrilet-1-62093ceb7541e.jpg)
Zwembad komt nog...
(https://images.beneluxspoor.net/bnls/carrilet-pool-620944c736576.jpg) (https://www.tinkercad.com/things/lthWp932Hq9)
-
Wordt mooi (y)
-
Zwembad ingegraven:
(https://images.beneluxspoor.net/bnls/IMG-20220224-112457-6218906302886.jpg) (https://images.beneluxspoor.net/bnls/IMG-20220224-112457-6218906302886.jpg)