Doel:€250.00
Donaties:€107.50

Per saldo:€-142.50

Steun ons nu!
Actie: steun €2.50 via de Wim Vink kalender 2021!

Laatst bijgewerkt
op 23-11-2020
Algemeen

De stichting

Recente berichten

Seinen en wissel koppelen in DR4018 door VvKan
Vandaag om 09:18:36
2200 multitractie, correct programmeren verlichting voor- en achterzijde? door Kaptein Koek
Vandaag om 09:17:28
Baanbouw Frycio; eindelijk ruimte door Wim Vink
Vandaag om 09:13:04
Model rijdt niet op analoge baan. door john 56
Vandaag om 09:12:37
Digitale koppelingen, ervaringen (2020)? door Frank 123
Vandaag om 09:09:57
DKM NS2400 openmaken? door VAM65
Vandaag om 08:59:37
Bruggen-IG: de Hef in N schaal... door jowi
Vandaag om 08:49:42
"Union Pacific's Power Shop", een nieuwe baan in H0 door Petertrein81
Vandaag om 08:27:58
EifelBurgenBahn door puntenglijder
Vandaag om 07:23:59
Piko Br 150 (51641), Plux22 en de CS3 door Martijn de Kuiper
Vandaag om 07:22:34
Fleischmann Profi wissel met servoaandrijving door W. Thomas
Vandaag om 07:08:35
Ergensnergens in H0e door MarcNL
Vandaag om 06:42:54
Nieuwe Noorse baan : Nordlandsbanen: Hell Stasjon - Polarsirkelen door Lolke Bijlsma
Vandaag om 05:52:17
Frontseinen feller krijgen, andere gloeilampjes? door borotof
Vandaag om 00:26:01
Meerdere Digikeijs DR4024 - voeding opgeblazen. Advies gevraagd. door Debvd
Vandaag om 00:21:54
RTM in 0m door roadster36
26 november 2020, 23:21:26
Spoorhumor door St00mboy
26 november 2020, 23:15:32
Motorschild Fleischmann dubbel isoleren door zuylen
26 november 2020, 23:13:27
Onlangs gespot - gefotografeerd, de foto's door Remco vM
26 november 2020, 22:51:12
Kellerstein; een nieuwe baan in H0 door Romavami
26 november 2020, 22:23:16
LTM-51 Garratt in messing, Spoor-0 door FritsT
26 november 2020, 22:20:40
Projekt 083-338 door tuurtje
26 november 2020, 21:48:16
Belgische torpedowagens van Cockeril Sambre Chertal door Ronet-1981
26 november 2020, 20:45:50
Bouw Hunsrückbaan door Reinout van Rees
26 november 2020, 20:44:17
Bouw "Bahnhofsvorfeld" door charp
26 november 2020, 20:00:25
Rondom Charlois door Alewijn
26 november 2020, 19:55:07
Dönsdorfer Bauberichte door Basilicum
26 november 2020, 19:52:47
"Litter Bin" voor Brits spoor en Britse modelspoorprojecten door St00mboy
26 november 2020, 19:36:34
MB-module: Hielan Ware door Basmans
26 november 2020, 19:30:48
Oude tijden, nieuwe tijden, Duitsland TP II, tijdperk 2e wereldoorlog. door GORILLUS
26 november 2020, 19:25:28
  

Auteur Topic: Arduino analoge(!) modelbaan sturing  (gelezen 109959 keer)

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
    • Modelspoor web
Arduino analoge(!) modelbaan sturing
« Gepost op: 13 maart 2014, 23:55:09 »
Hoi forumleden

Inleiding.

In deze topic wil ik een beschrijving geven, van het ontwerpen testen en bouwen van een analoge modelbaan sturing met een Arduino.

Het is niet de bedoeling om hier allerlei discussies te gaan voeren wat beter is analoog of digitaal of een
pic processor beter is als een Atmel processor, in deze topic gaat het over het ontwerpen testen en bouwen van een analoge modelbaan sturing met een Arduino.

Mochten er mensen zijn die toch een discussie willen voeren over wat beter is zijn er genoeg andere topics waar dat wel kan.

Ik hoop dat de mensen er begrip voor hebben.

Aanvullingen met betrekking tot schema's, programma's, fouten in programma's en schema's, tips en truuks om het geheel eenvoudiger te maken enz. zijn altijd welkom.


Waarom wil ik analoog blijven rijden 

Ik heb een twintigtal analoge locomotieven die ook nog zo'n tien a twintig jaar oud zijn, nieuwe locomotieven zijn duur, tweede hands locomotieven zijn nog betaalbaar maar zijn meestal analoog en hebben geen voorzieningen voor een decoder ingebouwd.
 
Ik wil geen geld stoppen in decoders, die kosten al gauw vijfentwintig a dertig euro per stuk( n-spoor decoders), dat heb ik er niet voor over.

Ook de voordelen van digitaal rijden zie ik niet direct, om geld te gaan steken in decoders en aanverwante elektronica.

Er zijn wel zeker een aantal voordelen als je digitaal rijd, front/sluit verlichting inschakelen, twee kanten op het zelfde baanvak rijden onafhankelijk van de rijrichting meerdere locomotieven tegelijk en onafhankelijk van elkaar rijden.
Maar voor mij rechtvaardigt het niet om daar veel geld aan te besteden, modelspoor blijft een dure hobby, ik investeer liever in scenery dan in decoders.

Hetzelfde geld voor Dinamo sturing, dat kost zomaar even 1000 euro om er alleen een basis pakket voor te kopen.

Ok,  je kan dan digitaal en analoog op een baan rijden maar voor mij weegt dat niet op, om er zoveel geld in te steken.
Voor dat geld heb ik bijna de voledige modelspoor elektronica om mijn baan analoog te automatiseren.

Ik hoor meteen al zeggen dat de electronica om een Arduino modelbaan sturing te bouwen ook veel geld kost dan kan je beter meteen een aantal decoders of dinamo voor kopen.

Dat kost inderdaat ook geld,  alleen koop ik voor dertig euro genoeg onderdelen om mijn baan al voor een klein gedeelte te automatiseren.

Arduino uno rv3 (kloon)  8,00  euro per stuk
Protoshield Arduino        3,50 euro per stuk
Relais kaart 4 voudige      5,00  euro per stuk
Relais kaart 2 voudige      2,50  euro per stuk
Reed relais klein model  5,00  euro per 10 stuks (soms kan het nog goedkoper)

Dit zijn gemiddelde prijzen vaak kun je er goedkoper aankomen.

Met deze onderdelen kan ik al een eenvoudige 6 voudige bloksturing bouwen.

Basis Arduino modelbaan sturing,



Foto boven : Uitgangspunt voor het verder ontwikkelen van een Arduino analoge modelbaan sturing.

De wissels worden voorlopig  nog met de hand (elektrische) omgezet. (kan overigens prima met een Arduino gestuurd worden.)

Later wil ik pwm, voor het rijden gaan gebruiken.

Voor een pwm sturing voor de arduino betaal ik gemmiddeld 5,00 euro per stuk, vaak minder.

Om een lang verhaal kort te maken zijn dat de argumenten om analoog gestuurde modelspoorbaan met een arduino te maken.

Analoge modelbaan sturing met een Arduino.

Wat is een Arduino.

Arduino is een opensource-computerplatform dat is opgebouwd rond de ATmega168-microcontroller van Atmel (de nieuwe generatie gebruikt een ATmega 328 pu-microcontroller).

Er is een arduino mega verkrijgbaar, meer gegeugen en meer I/O poorten.

Arduino uno



Arduino mega



Wat kan je er mee:

Ik zou zeggen heel veel je fantasie is je limmid.

Arduino dcc decoder

Op het forum is er al een topic Arduino dcc decoder, in deze topic word uitgelegd hoe je dcc codes uitleest met een Arduino, in deze topic ga ik het niet hebben over een Arduino dcc sturing.


Ontwerpen testen en bouwen van een analoge modelbaan sturing met een arduino

In het onderstaande flowchart laat ik zien hoe ik een Arduino modelbaan sturing wil gaan maken.




Mvg Paul
« Laatst bewerkt op: 14 maart 2014, 17:36:27 door smits66. Reden: De tekst wat aangepast. »
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

Sacull

  • Nieuwe gebruiker
  • Offline Offline
  • Berichten: 5
Re: Arduino analoge(!) modelbaan sturing
« Reactie #1 Gepost op: 14 maart 2014, 10:11:22 »
Zeer interessant !
Ik lees dit met veel belangstelling.

Sacull.

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Arduino analoge(!) modelbaan sturing
« Reactie #2 Gepost op: 14 maart 2014, 15:58:28 »
Ik vraag me alleen nu af wat je precies wilt gaan sturen... Zonder wissel sturing kom je niet veel verder dan een pendel. En wat is je doel voor de interface? Wil je dit analoog houden, soort cab controle ofzo? Of wil je zelf ook een programma maken?


Timo
Verzonden vanaf mijn desktop met Firefox

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
    • Modelspoor web
Re: Arduino analoge(!) modelbaan sturing
« Reactie #3 Gepost op: 14 maart 2014, 17:18:21 »
Hoi,

@ Sacull

Bedankt voor je reactie.

Ik hoop dat ik jou belangstelling kan vasthouden :).
Ik ben geen expert op Arduino gebied ::), meer een hobbyist met wat elektronica ervaring, ik moet zelf ook nog veel leren en proberen met een Arduino.
Ik zie dit project dan ook als een grote uitdaging.

@Timo

Bedankt voor je reactie.

Citaat
Ik vraag me alleen nu af wat je precies wilt gaan sturen...

Ik wil mijn modelbaan met de Arduino gaan besturen, via een bloksysteem, de wissels worden ook gestuurd door de Arduino alleen niet direct, dat geld ook voor de pwm sturing en allerlei andere sturingen (mijn fantasie is mijn limit ), de pwm sturing word later vervangen door faseaansnijding (beter voor oude loc motoren), maar een stuk moeilijker om te ontwerpen en te programmeren.

Citaat
De wissels worden voorlopig  nog met de hand (elektrische) omgezet. (kan overigens prima met een Arduino gestuurd worden.)
Later wil ik pwm, voor het rijden gaan gebruiken.

Citaat
Of wil je zelf ook een programma maken?
Een Arduino kan alleen werken als er een programma in zit.  ;)

Citaat
soort cab controle ofzo?
kun je me uitleggen wat dat is. :o

@allen

Ik ben geen expert op Arduino gebied en moet nog veel uitzoeken en veel proberen, vandaar dat ik eenvoudig begin om zo meer ervaring in het ontwikkelen programmeren en bouwen met de Arduino. ::)

Het hoeft gisteren ;D niet af, ik neem er de tijd voor.

Ik begin simpel en bouw het systeem er verder mee uit.

Als de mensen dit interessant vinden vind ik alleen maar mooi. ;D


mvg Paul  (y)
 
 
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

Tukker

  • Offline Offline
  • Berichten: 11
    • BliksemSnel
Re: Arduino analoge(!) modelbaan sturing
« Reactie #4 Gepost op: 14 maart 2014, 20:20:04 »
Ga dit draadje zekers volgen net zoals de andere arduino draadjes  overigens ::)
Veel succes
Groetjes Tukker

Een dag niet gehobbyd is een dag niet geleefd!

Darkwing Duck

  • Offline Offline
  • Berichten: 168
Re: Arduino analoge(!) modelbaan sturing
« Reactie #5 Gepost op: 14 maart 2014, 20:33:19 »
Waarom wil je I2C tussen de master en slaves gebruiken? Hier zijn mooiere protcollen voor  ;)
Waarom zou je alle bezetmeldingen naar direct naar de master sturen als je toch met slaves gaat werken?

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
    • Modelspoor web
Re: Arduino analoge(!) modelbaan sturing
« Reactie #6 Gepost op: 14 maart 2014, 22:05:18 »
Hoi,

@ Tukker

Bedankt voor je reactie.

Ik word een beetje nieuwsgierig waarom je alle Arduino topics volgt, heb je interesse om ook iets met de Arduino te gaan doen?  ;)

@ Darkwing Duck

Bedankt voor je reactie.

Het I2C protocol zit hardwarematig op de ATmega 328 processor  en binnen de programmeer omgeving(Arduino) is daar een  library voor (Wire) waardoor het niet zo moeilijk is om het I2C protocol te gebruiken en voor deze sturing is geen snelle communicatie nodig tussen de master en de slave.

Waarom moeilijk doen als het makkelijk kan.  ;D

Maar ik ben dan wel benieuwd naar de mooiere protocols voor de Arduino ::) zoals jij schrijft.

Ik wil twee soorten meldingen hebben analoog(stroom detectie) en digitaal (reed relais).
Op de Arduino mega zitten 16 analoge ingangen op de Arduino uno maar 6 waarvan er al twee geserveerd zijn voor I2C bus, op de Arduino uno wil ik de digitale melding gaan gebruiken en op de Arduino mega, de analoge bezet melding.

Voor ik zover ben, gaat daar wel een tijdje overheen.
Ik ga eerst met de basis aan de slag. (zie foto 6 posten terug)

Mvg Paul
« Laatst bewerkt op: 16 maart 2014, 23:09:09 door smits66 »
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
    • Modelspoor web
Re: Arduino analoge(!) modelbaan sturing
« Reactie #7 Gepost op: 15 maart 2014, 00:56:14 »
Uitleg flowchart

Het hart van de "analoge modelbaan sturing met een Arduino" is de Arduino mega, deze Arduino heeft veel I/O onboard en heeft een hardware matige I2C bus onboard.
waardoor deze Arduino perfect is als het hart van de modelbaan sturing.

Analoge modelbaan sturing met een arduino in het kort.

Boven aan zien we de schematische weergave van de Arduino mega en hoe de modelbaan sturing bedacht is (of het uteindelijk zo gaat werken weet ik niet)

Links zien we de I2C bus waarop zes Arduino uno's aanzitten, deze Arduino werken geheel zelfstandig maar wisselen data uit met de Arduino mega via de I2C bus.

De Arduino mega verwerk deze data en stuurt de data naar de pc waar je de data in realtime op het scherm getoond word (niet het verloop van de treinen alleen puur de data)
Het is ook mogelijk om via de pc commando's te sturen naar de Arduino mega die vervolgens de commando's doorstuurt naar de desbetreffende Arduino slave (dat is uiteindelijk de bedoeling).

Voorlopig ga ik daar nog niet aan beginnen hou ik me alleen bezig met de Arduino mega als commandopost voor de modeltrein sturing.

Als tweede taak heeft de Arduino mega, het sturen van de baan verlichting (huizen, gebouwen, lantaarnpalen)

Als derde heeft de Arduino mega de taak om de communicatie tussen de pc en Arduino te regelen, of met een usb kabel of via een bluetooth verbinding (data van en naar de pc sturen, commando's van de pc naar de Arduino sturen).

Als vierde taak heeft de Arduino mega om een realtime clock en temperatuur regeling (elektronica)  te sturen (deze gegevens worden getoond op het lcd display en later op het scherm van de pc).

Als vijfde taak heeft de Arduino mega , om de analoge bezetmelding te registreren, daarmee de modelspoor baan in de gate te houden en deze gegevens te tonen op het pc beeldscherm ( ook daar ben in nog niet mee bezig).

Als zesde taak heeft de Arduino mega, de data, temperatuur elektronica, tijd enz. te tonen op het lcd scherm, in een later stadium zullen deze gegevens op het pc beeldscherm te zien zijn.

Om het kort samen te vatten wil ik met "analoge modelbaan sturing met een Arduino"  via de Arduino mega of via de pc te sturen of allebij tegelijk (dat ga ik pas proberen als het allemaal goed werkt).

Het is nu wachten op de bestelde onderdelen voor ik verder kan gaan ontwerpen/programeren met de Arduino mega.
Ik hoop dat één dezer dagen de bestelde onderdelen aankomen.

De tweede flowchart



De Tweede flowchat laat een uitvergroting zien van twee Arduino uno slave modules, de functies die deze Arduino's  moeten gaan vervullen staan erbij.

Arduino slave 1

Slave 1 ,  is voor het regelen van de verschillende blokken en voor het omzetten van drie wissels (per paar geschakeld zes wissels).

Blok 1 tot en met 6, zijn er voor om een blok bezet melding (digitale bezet melding met reed relais) te geven ik kan zes blokken sturen met deze sturing (blok bezet melding),
Wissel 1 tot en met 3  (heb totaal 6 poorten nodig voor drie wissel sturingen rechtdoor en afbuigend) als ik ze per paar schakel kan ik zes wissels schakelen.

Arduino slave 2

Slave 2, is voor het regelen van de snelheid via pwm en een sein regeling

De Arduino uno heeft 6 pwm kanalen, per kanaal kan er in één blok de snelheid geregeld worden, het nadeel kan zijn dat de treinen maar één kant kunnen oprijden (hondenbot ontwerp)
Wil je zowel vooruit als achteruit en de snelheid in een blok regelen kun je maximaal 2 pwm sturingen gebruiken (per blok heb je dan drie poorten nodig,  in1, in2 en en.)
Sein 1 tot en met 3 (heb totaal 6 porten nodig sein stand rood en groen) als je ze per paar schakel 6 seinen (anti parallel of één op één of voorsein hoofdsein)  uitgaande van een eenvoudig bloksein.

Er blijven per slave unit nog één digitale I/O en vier analoge in kanalen die je dan nog kunt gebruiken.

tot zover

mvg Paul
« Laatst bewerkt op: 16 maart 2014, 23:09:31 door smits66 »
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
    • Modelspoor web
Re: Arduino analoge(!) modelbaan sturing
« Reactie #8 Gepost op: 16 maart 2014, 22:46:00 »
Hoi,

We gaan weer verder met de beschrijving.

Motorsturing



Er zal gedacht worden weer een flowchart, ik gebruik veel flowchart het maakt het ontwikkelproces zichtbaar en begrijpelijk, voor het programmeren maak ik ook vaak gebruik van flowchart.

Op mijn modelspoor baan wil ik de treinen kunnen regelen snelheid en richting ik heb daarvoor een motorsturing nodig.
Voor de Arduino zijn verschillende motorsturingen verkrijgbaar (motorshields) op een motorshield zitten of twee motorstuur ic (L293D) of één motorstuur ic (L298D)



Met deze motorshields kan je motoren sturen via pwm, dat is net wat ik nodig heb, in een later stadium wil ik de treinen sturen via het zaagtand principe, daarover later.

Met pwm kun je de motoren langzaam laten optrekken en langzaam laten afremmen perfect voor de Analoge modelbaan sturing met een Arduino.

Ik ga eerst wat experimenteren met de motoshield met twee motor stuur ic's, dit is een opzet shield voor de Arduino



Als ik met deze motorshield 4 motoren linksom en rechtsom kan sturen en de snelheid kan regelen, dan kan ik op mijn modelbaan er 4 blokken mee aansturen. :)

Met reed relais kan ik registreren of er een trein een blok inrijd , op dat moment kan ik het bloksein van het vorige blok op rood zetten en de achterliggende trein laten afremmen.

De reed relais kan ik via de analoge poort inlezen, met één analoge poort kan ik 4 reed relais detecteren (of meer).

Later wil ik dat doen met stroom detectie, ik wil eerst de basis beheersen om van daaruit verder te ontwerpen.

Op de digitale poort 2 kan ik een drukknop aansluiten die als noodstop werkt, als het dreigt fout te gaan.

Schema blok detectie en drukknop volgt nog.

Dit is puur theorie ik moet het nog gaan uitproberen.

Deze motorsturing met de Arduino communiceert met de Arduino master via de I2C bus.

Het onderstaande programma laat de motor 5 seconden linksom draaien dan 4 seconden stoppen en dan 5 seconden rechtsom draaien en dat de motor voor 1 seconde stopen.

#include <AFMotor.h>
 
AF_DCMotor motor(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
 
void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Motor test!");
 
  motor.setSpeed(100);     // set the speed to 100/255
}
 
void loop() {
  Serial.print("motor linksom");
 
  motor.run(FORWARD);      // turn it on going forward
  delay(5000);
 
 Serial.print("Stop motor");
  motor.run(RELEASE);      // stopped
  delay(4000);
 
  Serial.print("motor rechtsom");
  motor.run(BACKWARD);     // the other way
  delay(5000);
 
  Serial.print("Stop motor");
  motor.run(RELEASE);      // stopped
  delay(1000);
}

Mvg Paul
« Laatst bewerkt op: 16 maart 2014, 23:02:33 door smits66 »
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Arduino analoge(!) modelbaan sturing
« Reactie #9 Gepost op: 17 maart 2014, 20:27:28 »
Hoi Paul!

Erg leuk idee als je het zelf ook leuk vindt om te doen :) Zelf ben ik een student elektrotechniek en mag ook graag hobbien :) Toch ga ik je nu best wat opmerkingen geven. Zie deze niet als kritiek, ik vind het super leuk, maar het zijn punten van aandacht.

Een Arduino kan alleen werken als er een programma in zit.  ;)
Dat snap ik. 8) Maar ik doelde vooral op een programma op een PC die het denkwerk gaat doen.

Cab controle
Cab controle is vooral in Amerika gebruikt. Ipv dat je met een rijregelaar een blok stuurt kies je met schakelaars welk blok met welke rijregelaar verbonden is. Door het volgende blok op dezelfde regelaar te schakelen als het huidige blok volg je de loc met dezelfde regelaar. Net alsof je in de cabine (cab) de boel bestuurd (controle).

Natuurlijk hoef jij niet met schakelaars de boel op dezelfde regelaar te schakelen. Jij hebt de kracht van een uC  ;D Jij kan de regeling van het volgende blok exact gelijk maken aan het huidge blok en zo doorrijden. Maar je zou nog wel een regelaar (gewoon een potmeter) aan de Arduino kunnen hangen voor de snelheid. Omdat je weet wanneer een trein het volgende blok in rijdt kan je deze regelaar de trein ook gewoon laten volgen. Op deze manier heb je weer een echte regelaar per blok  ;D

I2C
Je zegt I2C als bus te willen gebruiken. Dit is mogelijk maar I2C is niet zo goed met lengtes. Dus als de Arduino's niet naast elkaar liggen zou ik het niet gebruiken. Zelf zou ik alleen gekozen hebben voor serial uart netwerk. Dit zit namelijk ook al als hardware op een Arduino, op de Mega zelfs 4 keer. En als je de slave Arduino's verspreid onder de baan wilt hebben zou ik zelfs gaan voor RS485. Hiermee ben je verzekerd van een goede en snelle communicatie.

Reed relais
Waarom wil je deze lezen met een analoge pin? De uitgang van een reedrelais is gewoon digitaal en daarmee gewoon uit te lezen. Vergeet niet om een redelijk stevige pull-up te gebruiken en bouw een debounce in. Of ben je van plan om meerdere reedrelais uit te lezen met behulp van een weerstandsladder? Dit kan wel maar ik weet niet of het handig is. Ook hier wil je een vorm van debounce hebben en een analoge lezen is erg traag vergeleken van een digitale lezing. Denk je dat je te weinig input hebt (let wel, de PWM poorten en de analoge poorten zijn ook gewoon digitaal te lezen), dan kan je misschien nog makkelijker een shift register gebruiken icm de shiftIn functie.

Stroomdetectie
Je zegt dat je later stroomdetectie wilt gebruiken. Let wel dat je geen detectie hebt als je spanningsloos bent, bijvoorbeeld als de trein stil staat. Maar ook als je precies kijkt op het moment dat de PWM sturing uit is. Dit kun je oplossen door een condensator op te nemen in de uitgang van de stroomdetectie. Veel ontwerpen hebben ook wel zoiets. Er zijn iig tig ontwerpen bruikbaar.

Ook hier meld je dat je een analoge pin wilt gebruiken, weer via een weerstandsladder?

Zaqagtand sturing
Ik snap ook niet helemaal waarom je dit wilt doen. Met PWM is een betere sturing te maken dan met een zaagtand. Zeker niet als je een relatief trage zaagtand gebruikt. In het verleden heb ik ook wel eens een loc met PWM aangestuurd en  had ik wat last van kleef. Zeker vanuit stilstand wilde de loc niet soepel beginnen met rijden. Ik heb toen, boven op de normale PWM sturing van 32kHz nog een soort softwarematige trage PWM puls gelegd van 80Hz en 9% duty cycle. Dit door 80 keer per seconde de PWM output voor 9% (2/22 van de tijd) van die 80Hz op 100% te zetten. Dit geeft net een extra kick en is er heerlijk mee te rijden. Het signaal ziet er dan schematisch zo uit:
  _        _        _        _        ________        _        _
_| |______| |______| |______| |______|        |______| |______| |
De lange pulsen zijn de 80Hz 9% pulsen tegen kleef en de korte pulsen zijn de te regelen PWM pulsen voor de snelheid. Het is wel wat lastig uit te leggen zo. Ik zou een voorbeeld kunnen schrijven door de arduino als het moet maar ik heb nog weinig gewerkt met de timers op een Arduino  ::)

Eventueel is het natuurlijk mogelijk meerdere profielen voor de sturing aan te maken zodat je per loc een andere kunt gebruiken die beter werkt. Deze kan je dan, net als de snelheid bij cab controle, ook doorsturen naar het volgende blok. Je zou zelfs dingen als optrek en afrem vertraging, cab controle stijl, door kunnen laten sturen om een goederentrein eerder te laten remmen. Of een rangeer stand met halve snelheid regeling op hele bereik van de rijregelaar enzo. Maar dit gaat misschien wat ver.

Motor sturing H-brug
Verder zeg je de blokken te willen sturen met een H-brug. Dit is goed mogelijk. Je geeft alleen aan dan 2 inputs  met PWM te moeten sturen en een enable voor 1 blok. Nu kan je de enable lijn al last leggen en deze altijd hoog maken (gewoon aan de 5V, niet via een output van de Arduino). Dit scheelt al een pin. Nu heb je nog twee inputs op je motor driver. Nu hoef je deze niet beide met een PWM te voeden. Je zou input1 aan een PWM kunnen hangen en input2 aan een gewone output. Als de digitale uitgang LOW is dan rij je linksom (ligt er natuurlijk net aan hoe je kijkt  ;D ) door met PWM te sturen op de PWM pin. Maak je de uitgang HIGH dan rij je rechtsom en stuur je met PWM. Enige is alleen, je PWM signaal is verkeerd om bij rechts om rijden. analogWrite(pwmPin, 0) levert volle snelheid op en analogWrite(pwmPin, 255) is stilstand.

Wat je ook zou kunnen doen is met 1 driver 4 blokken aansturen met ieder een halve H-brug. Per blok heb je dan een input pin om te PWMen voor de snelheid. Nu hoor ik je denken, en de andere kant dan op? Hiervoor kun je gewoon met een relais de boel omkeren. Voordeel: veel blokken per driver, PWM staat voor de snelheid in beide richtingen, je hebt echt een richtings bit (de pin naar het relais). Nadeel, je hebt weer relais nodig.

motor sturing met vrijloop
Iets wat je in de voorgaande stukken ook niet doet is gebruik maken van de vrijloop van de loc. Het vliegwiel in de loc wordt te niet gedaan. Met PWM en een H-brug stuur je het spoor HIGH of LOW. HIGH dan wil de motor draaien maar bij LOW sluit je als het ware de motor kort (kan geen kwaad  ;) ) maar zo rem je hem wel af. Vandaar dat er in de datasheet dan ook gesproken wordt van "Fast motor stop". Dit is leuk voor een motor die je nauwkeurig wilt regelen of als je een noodstop wilt maken maar voor de rest eigenlijk vervelend. Er zit niet voor niets een vliegwiel in veel loc's! Beter is om, wanneer de motor geen PWM puls krijgt, niet te remmen maar om te gaan voor "Free running motor stop" zoals ze dat in de datasheet noemen. Je laat dan de uitgangen van de H-brug zweven en je sluit de motor niet kort, deze kan dus in de tussentijd vrij blijven draaien maar zal niet versnellen. (Nu staat er een fout in de datasheet, in de tabel op pagina 9 bij figuur 5 moet op de onderste regel bij L X X ook  "Free running motor stop" staan ipv "Fast motor stop".) Voor deze manier zet je het PWM signaal op de enable ingang. De 2 inputs sluit je aan op digitale outputs van je arduino. Door de inputs HIGH en LOW te maken draai je rechts om en maak je ze L en H (andersom dus) dan draai je links om. Maak je ze beide H of beide L en enable is H, dan doe je als nog een "Fast motor stop", een noodrem.

De oplossing met een relais werkt nu niet omdat je maar per 2 uitgangen van de motor driver een enable pin hebt. Hierdoor zouden 2 uitgangen altijd dezelfde snelheid hebben. Wel zou je de motor driver kunnen laten vallen en vervangen door een NMOS-FET of een ULN2003 als driver. (Als je twee uitgangen samen neemt kan je met 1 IC 4 blokken sturen van elk 1A.) Wel heb je dan een relais nodig om de rijrichting te wisselen.

De ULN2003 is dus ook erg geschikt om je wissel (en sein) bediening mee te maken :) De Arduino kan niet zo veel leveren op de uitgang en natuurlijk ook maar 5V.

Oef, dat was het wel weer, hele bevalling. Ik hoop dat je er wat aan hebt :) Als je het zo lees bedenk ik het snel maar het even uitschrijven duurde toch zeker 1,5 uur  ::) Veel succes! Ik blijf het volgen en als er nog vragen zijn hoor ik het wel.


Timo
Verzonden vanaf mijn desktop met Firefox

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
    • Modelspoor web
Re: Arduino analoge(!) modelbaan sturing
« Reactie #10 Gepost op: 17 maart 2014, 22:15:48 »
Hoi Timo

Bedankt voor je reactie.

1,5 uur  :o :P

Opmerkingen zie ik niet als kritiek, ik kan er nog wat van leren.

Dat is een heel verhaal waar ik de helft nog niet van snap ::), ik ben wel werkzaam als elektromonteur, maar mijn kennis van de Arduino en elektronica  is net hobby kennis, ik zal hier wel even op moeten studeren, ik vind het in ieder geval fijn dat er mee gedacht word (y).

Mijn eerste idee was om een aantal relais te gebruiken om sporen spanningsloos te maken zodat de treinen zouden stoppen, hiervoor wilde ik de Arduino gebruiken, dit om eens te experimenteren met de Arduino (heb er vier ;D)

Ik kwam later nog een motorshield tegen in mijn elektronica bak, zodoende ben ik daar eens mee gaan stoeien en kwam tot de conclusie dat een motorshield prima toe te passen is voor bloksturing.

Wat ik begrepen heb, is een zaagtand sturing beter voor de elektromotor dan pwm, minder slijtage.

Mijn uiteindelijke doel is om een Arduino bloksturing te maken naar het voorbeeld van het van Meekeren bloksystem alleen dan de Arduino gestuurde.

Het is de bedoeling dat de diverse arduino's in een centrale kast zitten en met de baan verbonden worden met sub-d 9 polige of 24 polige connectoren.

Het is niet de bedoeling om op de pc een programma te hebben draaien om de Arduino's aan te sturen, alleen word er data zoals sein standen, wisselstanden, blok bezet meldingen enz en misschien wat comando's  naar de pc gestuurd het denkwerk doet de Arduino mega in combinatie met de Arduino uno's.

De meeste van mijn locomotieven hebben geen vliegwiel.

Voor de overige opmerkingen moet ik deze tekst nog even bestuderen.

Mvg Paul



Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

Falkenberg

  • Offline Offline
  • Berichten: 3326
Re: Arduino analoge(!) modelbaan sturing
« Reactie #11 Gepost op: 17 maart 2014, 22:21:16 »
Deze opzet lijkt heel erg op CMRI uit de 80er jaren (alle goede ideeën zijn al bedacht  ;)
Centrale aansturing van blokken met een stuk VB als logica erachter. Werkte toen, dus kan nu ook werken.

dirkjan

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Arduino analoge(!) modelbaan sturing
« Reactie #12 Gepost op: 17 maart 2014, 23:15:24 »
@Dirkjan, dat systeem nooit gezien. Dus hoe dat verder moet. Maar leuke van uC tegenwoordig is dat je voor relatief weinig veel rekenkracht hebt.

1,5 uur  :o :P
Tja, je wilt toch een beetje een begrijpelijk verhaal neerzetten...

Mijn eerste idee was om een aantal relais te gebruiken om sporen spanningsloos te maken zodat de treinen zouden stoppen, hiervoor wilde ik de Arduino gebruiken, dit om eens te experimenteren met de Arduino (heb er vier ;D)
Dit kan natuurlijk prima. Maar de mogelijkheden zijn dan natuurlijk beperkt.

Ik kwam later nog een motorshield tegen in mijn elektronica bak, zodoende ben ik daar eens mee gaan stoeien en kwam tot de conclusie dat een motorshield prima toe te passen is voor bloksturing.
En toen werd het leuk  ;D Daarmee heb je wel een heel stuk meer mogelijkheden. Maar automatisch natuurlijk een stuk meer uitdagingen  ;D Ik zou gewoon lekker die motor drivers gebruiken in full H-brug en dan PWM sturen op de enable. Heb je geen relais nodig en free running is mogelijk.

Het is de bedoeling dat de diverse arduino's in een centrale kast zitten en met de baan verbonden worden met sub-d 9 polige of 24 polige connectoren.
Zelf ben ik wel fan van een gedecentraliseerde opstelling (modules op de plek waar het nodig is, niet in een centrale kast). In een centrale kast lijkt erg overzichtelijk, je hebt immers alles bij elkaar. De hoeveelheid draden die je vervolgens alleen naar die kast moet gaan trekken  ::) Vroeger wat het een voordeel. Zo konden verschillende modules onderdelen delen om kosten te besparen. Maar met de komst van betaalbare uC's is dat voordeel een beetje verdwenen. Kijk ook maar naar de telefoon. Vroeger had een stad één grote telefooncentrale waar alle kabels van alle losse telefoons bij elkaar kwamen. Maar met de komst van digitale techniek en vooral goedkopere techniek wordt die juist uit elkaar getrokken. De kabels komen nu in de wijk bij elkaar waar een soort mini centrale staat. Vanaf daar gaat het dan verder als (digitaal) netwerk. Bespaard een hele hoop kabels en doordat alles digitaal is kan het makkelijk aangepast worden. Ik zeg dus niet dat het niet kan of slecht is, maar ik weet niet of het systeem daarmee zo simpel/overzichtelijk mogelijk blijft.

Wat ik begrepen heb, is een zaagtand sturing beter voor de elektromotor dan pwm, minder slijtage.
Ik zou niet weten waarom. Slijtage aan het elektronische deel van de motor bestaat eigenlijk niet. En de motor zelf is een beste spoel die als laag doorlaat filter werkt voor het signaal. De motor kan dus niet echt onderscheid maken tussen hele snelle PWM en een gelijkspanning. De regeling wordt er wel een stuk makkelijker van  ;D PWM sturing wordt dan ook breed toegepast in de wereld.

De meeste van mijn locomotieven hebben geen vliegwiel.
Ondanks dat ze geen vliegwiel hebben zetten ze wel massa in beweging. En het is best zonde om dat echt te gaan remmen als het ons eignelijk niet uitmaakt, zolang het niet versneld. Zie het als het gas los laten of de koppeling indrukken. (Okay, niet op een te moderne auto, die past namelijk ook allemaal trucjes toe. Denk even aan een oud diesel busje  ;D) Als je het gas even los gaat zal de auto gaan afremmen op de motor. Terwijl als je de koppeling even indruk en het gas los laat de boel prima even lekker kan rollen. Omdat je dit met PWM eigenlijk heel veel keer per seconde doet is het zonde om steeds te remmen.

Het is niet de bedoeling om op de pc een programma te hebben draaien om de Arduino's aan te sturen, alleen word er data zoals sein standen, wisselstanden, blok bezet meldingen enz en misschien wat comando's  naar de pc gestuurd het denkwerk doet de Arduino mega in combinatie met de Arduino uno's.
Dit kan met een uC super leuk, maar hoe modulair tegen hoe baan specifiek maakt ligt wel hoe bruikbaar het is op een andere baan. Modulairder is eigenlijk altijd complexer=lastiger, je moet dan rekening houden met alle mogelijke toepassingen. Ik denk dat het voor jou vooral leuk is hoe je jou baan zo leuk mogelijk kunt aansturen.

Als je verder nog vragen hebt moet je ze maar stellen. (pseudo) Code voor een Arduino kan ik wel schrijven (ook al heb ik even geen Arduino laat staan shields liggen). Ook het schrijven van libraries voor de Arduino heb ik genoeg ervaring mee. Heb alleen nog nooit zo veel gespeeld met de timers op de Arduino  ::) Voor alles een eerste keer.


Timo
Verzonden vanaf mijn desktop met Firefox

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
    • Modelspoor web
Re: Arduino analoge(!) modelbaan sturing
« Reactie #13 Gepost op: 26 maart 2014, 22:54:07 »
Hoi Timo

Bedank voor je reactie.

Hoewel ik al een aantal dagen niets gepost heb ben ik wel verder gegaan.

Ik heb ondertussen een werkende, nog wel beperkte modelbaan sturing met een Arduino geprogrammeerd en een visual basic programma om met de Arduino te communiceren en het werk goed.
Hoewel de code niet compact is werk het programma zowel in de Arduino als in Visual Basic goed.

Met het Visual Basic programma kun je de wissels omzetten, handmatig een blok bezet melding geven, noodstop geven zodat alle treinen meteen stil staan, baanspanning aanzetten baan verlichting in en uitschakelen in meerde groepen, tekst meldingen ontvangen van de Arduino en commando's aan de Arduino sturen.

Ik heb het getest met Led's op de poorten van de arduino, dat werkt goed, als ik de Led's vervang door bv relais werk het nog steeds.

Nog even een vraagje je schreef dat je  libraries voor de Arduino kon schrijven, hoe doe je dat ::)
Om het Arduino programma wat overzichtelijk te houden wil ik graag het onderstaand stukje programma in libraries zetten, of werk dat niet ?
Er zullen wel meer "const int" en andere variablen er bij gezet worden als ik verder ben met dit project.

const int Stijd = 10 * 1000;  // Stoptijd stopblok
 const int Wtijd = 10 * 1000;  // Wachttijd wachtblok
 //const int Noodstop = 1;       // Noodstop actief hoog
 //const int Sda = 20;           // I2C bus serial data
 // const int Scl = 21;           // I2C bus serial clock
 
 // initialisatie noodstop
 
 const int LED = 52;      // Stoppen Arduino Mega modelspoor sturing.
 const int LED1 = 53;     // Vrijgave Arduino Mega modelspoor sturing.
 const int LEDN = 50;    // Noodstop geactiveerd
 const int LEDV = 51;    // Noodstop Opgeheven

// initialisatie poorten blokken


 const int Blok1 = 22;   // Inkomende spoor
 const int Blok2 = 23;   // Uitgaande spoor
 const int Blok3 = 24;   // Schaduwstation spoor 1
 const int Blok4 = 44;   // Schaduwstation spoor 2
 const int Blok5 = 26;   // Stationspoor spoor 1
 const int Blok6 = 27;   // Stationspoor spoor 2
 const int Blok7 = 28;   // Wachtspoor
 const int Blok8 = 29;   // Goederenspoor
 const int Blok9 =  5;   // Wisselblok 1
 const int Blok10 = 6;  // Wisselblok 2

// initialisatie poorten voor wissel sturing

 const int Wis1 = 30;  // wissel 1
 const int Wis2 = 31;  // wissel 2
 const int Wis3 = 32;  // wissel 3
 const int Wis4 = 33;  // wissel 4
 const int Wis5 = 34;  // wissel 5
 const int Wis6 = 35;  // wissel 6
 const int Wis7 = 36;  // wissel 7
 const int Wis8 = 37;  // wissel 8
 const int Wis9 = 38;  // wissel 9
 const int Wis10 = 39; // wissel 10
 const int Wis11 = 40; // wissel 11
 const int Wis12 = 41; // wissel 12

Zijn er programma's waarmee je libraries kunt schrijven.  ::)

Mvg Paul
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
    • Modelspoor web
Re: Arduino analoge(!) modelbaan sturing
« Reactie #14 Gepost op: 27 maart 2014, 22:04:27 »
We gaan weer verder met de sturing

Jawel  ;D daar is i weer een Flowchart.



Op de Flowchart kun je zien dat de Arduino Mega (werk ook met een arduino uno)  modelbaan sturing via een terminal programma Of via een visual basic programma gestuurd kan worden, voor nu nog handmatig.

In principe moet de gehele Arduino modelbaan sturing zelfstandig gaan werken, maar ik wil ook de baan handmatig blijven kunnen sturen.

Als de baan in automatische mode staat kun je de status van de sturing aflezen op het Lcd display, deze werk ook als de baan in hand mode staat.

Met zelfstandig bedoel ik dat de treinen een blok in rijden en het achterliggende blok automatische bezet melden, ook moeten de treinen zelfstandig (automatische mode) de wissels kunnen omzetten, ook het schaduw station moet automatische gestuurd worden.

IK heb nu de proef opstelling klaar en getest, voor zo ver ik het kan zien werk het programma goed in handmatige mode (automatische mode moet nog geprogrammeerd worden) , ik wil eerst de handmatige sturing werkend hebben, als proef opstelling werk het goed, ga de led's vervangen door relais en testen of het nog steeds goed werkt.

Proefopstelling met led's en het LCD display.



Nog even een drietal screenshots van de terminal bediening en van het Visual Basic programma.

Terminal weergave



Visual Basic weergave



Hoewel het Visual Basic programma goed werk zijn er zeker in het scherm interface verbeteringen nodig, hierbij moet je denken aan de plaatsing van de knoppen beginscherm scherm interface (nu staan de sporen standaard op vrij, dat willen we eigenlijk niet hebben), grotere scherm afmeting, misschien een ander soort bediening. Voor het testen van de sturing voldoen de bedienings- knoppen prima.

Het volgende wat er dan in het programma gebouwd moet worden is een snelheid regeling, dit word met een arduino Uno gedaan die via het I2C protocol met de Arduino Mega communiceert.

Dat was het weer.

Op of aanmerkingen, suggesties, verbeteringen zijn altijd welkom.  ::)

Mvg Paul  ;D

 



 
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"