Doel:€250.00
Donaties:€88.00

Per saldo:€-162.00

Steun ons nu!

Laatst bijgewerkt
op 03-06-2025

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Piko 1136 van AC naar DC door Mug
22 June 2025, 23:49:35
20 jaar BNLS door Huup
22 June 2025, 23:34:58
Bahnstrecke 5867 door Frank 123
22 June 2025, 23:17:18
La vie...Sud-Est; zolderbaan met thema zuidoost Frankrijk door Paulus
22 June 2025, 22:40:08
Toon hier je nieuwe (model-) spooraanwinst(en)... door Ronald Halma
22 June 2025, 22:28:06
BR-18.6 Schaal-0. door FritsT
22 June 2025, 22:14:08
Mooi weer om buiten te spelen door sncf231e
22 June 2025, 21:57:18
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Schachbrett
22 June 2025, 21:46:28
Mijn eerste H0-modeltreinbaan in aanbouw door Ronald69
22 June 2025, 21:01:37
Toon hier je (model)TRAM foto's. door Twinkie
22 June 2025, 20:59:44
Modules van Kees Gorter (vervolg) door ca.gorter
22 June 2025, 20:19:11
IJken van locomotieven door spartaan
22 June 2025, 20:12:23
Railcom zender bouwen door piksov
22 June 2025, 19:26:45
Mitteldorf, baan in H0, DR tp III door Frank 123
22 June 2025, 18:43:08
Lichtprintjes NS2400 door Hans Gvz
22 June 2025, 18:33:11
Zaagsel? door Prutsert
22 June 2025, 17:56:51
"Kolenbakken" voor achter Railion 6400-en? door MOVisser
22 June 2025, 17:53:52
't Boemeltje door RobVille
22 June 2025, 17:19:52
EifelBurgenBahn door Reinout van Rees
22 June 2025, 17:00:19
Station Roodeschool door Torikoos
22 June 2025, 16:57:17
Piko NS1100, materieelbespreking door Mug
22 June 2025, 16:51:38
TEE Erasmus (nav gelijknamige set van Roco) door grossraumwagen
22 June 2025, 16:41:18
US diorama in H0 door Frank 123
22 June 2025, 14:27:43
Raadplaatje door Modellbahnwagen
22 June 2025, 12:48:55
Reactiveren van de 0N30 Mumby Lumber baan (ex-JD) by Ronald door Ronald Halma
22 June 2025, 12:47:05
Br 38 Piko Superen. door puntenglijder
22 June 2025, 12:21:29
Tamiya kleur dak Bundesbahn door Sikko
22 June 2025, 11:49:45
Ombouw/Pimpen Bolle neuzen door bollen neus
22 June 2025, 11:48:39
Wie heeft er ervaring met een baan in een inpandige garage in een app. gebouw? door Peter Kleton
22 June 2025, 11:04:07
Stalen D 4 deurs spoor 0 door 1795
22 June 2025, 10:54:53
  

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

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #135 Gepost op: 11 January 2015, 01:12:26 »
Hoi volgers

Na het ontwerpen van de diverse printen, ben ik me nu aan het buigen over de communicatie tussen de Arduino's

Ik zit aan twee protocollen te denken I2C of RS485  beide protocollen hebben voordelen.
I2c is het makkelijkst te bouwen, het ontwerp voor de RS485 driver is wat ingewikkelder.

Ik ga eerst even wat experimenteren met I2C  en later met RS485

Om twee of meer Arduino's via I2C te verbinden gebruik ik het ontwerp wat ik gemaakt en getest hebt.



Een van de twee is als master geprogrammeerd en de ander als slave.

Het Master programma.

//i2c Master Code(UNO)
#include <Wire.h>

void setup()
{
  Wire.begin();
  delay(2000);
}
void loop()
{     
      Wire.beginTransmission(5);
      Wire.write('H');
      digitalWrite(8,HIGH);
      Wire.endTransmission();
     
      delay(3000);
     
      Wire.beginTransmission(5);
      Wire.write('L');
      digitalWrite(8,LOW);
      Wire.endTransmission();
     
      delay(3000);     
}
 


Het Slave Programma

//i2c Slave Code(UNO 2)
#include <Wire.h>

void setup()
{
  Wire.begin(5);
  Wire.onReceive(receiveEvent);
 
  pinMode(8,OUTPUT);
  digitalWrite(8,LOW);
}

void loop()
{
}

void receiveEvent(int howMany)
{
  while(Wire.available())
  {
    char c = Wire.read();
   
    if(c == 'H')
    {
      digitalWrite(8,HIGH);
    }
    else if(c == 'L')
    {
      digitalWrite(8,LOW);
    }
  }
}

Voor het gebruik van het RS 485 protocol zal je een iets ingewikkelder ontwerp moeten maken.

Het ontwerp is nog niet getest en ik heb er ook nog geen programma voor.
De max485 ic heb ik nog niet, vandaar dat dit ontwerp nog niet getest is, zou volgens de gegevens wel moeten werken? ::)

Het breadboard ontwerp van de RS 485 driver.


Ik weet niet zeker of dit ontwerp juist is.

Voor op of aanmerkingen sta ik open.

Mvg Paul
« Laatst bewerkt op: 11 January 2015, 01:15:12 door smits66 »
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

-Anton-

  • Offline Offline
  • Berichten: 293
Re: Arduino analoge(!) modelbaan sturing
« Reactie #136 Gepost op: 11 January 2015, 14:11:10 »
leuk bezig, ik heb een opmerking  ;D
I2C is eigenlijk niet bedoeld voor lange afstanden, maar meer als bus op een print om de verschillende componenten met elkaar te verbinden.
RS485 is daar in tegen juist bedoeld voor verbindingen tussen apparaten op langere afstand.


IB, Traincontroller, ESU loc programmer, Arduino, Daisy II

Papierbouwer

  • Offline Offline
  • Berichten: 841
    • sec geplot
Re: Arduino analoge(!) modelbaan sturing
« Reactie #137 Gepost op: 11 January 2015, 14:50:19 »
Xpressnet is op RS485 gebaseerd, misschien valt dat wel te gebruiken.

Erik

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #138 Gepost op: 11 January 2015, 20:21:28 »
Hoi, volgers

@ Anton

Bedankt voor je reactie.
Het is mij inderdaad bekent dat het I2C een bus is en niet werkt over langere afstanden.

Het is de bedoeling om een aantal Arduino's via I2C te sturen je hebt dan 1 master en bv 3 slave's (Bloksturing, wisselsturing, seinsturing, enz.).

Voor de lange afstand tussen twee stuurposten zal het handig kunnen zijn als de twee sturingen met elkaar konden communiceren, vandaar dat ik ook een mogelijkheid wil hebben om te communiceren over de lange afstand (The master zullen beide een Arduino mega worden.)

Ik wil het verder nog eens goed uitzoeken hoe het een en het ander werkt.

@ Erik

Bedankt voor je reactie.

Ik heb even gekeken naar het xpressnet protocol , maar voor nu is mij dat net even te ingewikkeld.

@Allen

Ik heb vandaag nog even verder gegaan met I2C, Ik heb nu een zichtbare communicatie tussen de twee Arduino's via I2C

Ik heb er een kort filmpje van de werking gemaakt, de film is van slechte kwaliteit (heb geen goede filmcamera), dus met een oud fototoestel maar even gefilmd, als we onze camera weer gevonden hebben zal ik kijken of ik een betere filmpje kan maken.

Het filmpje
http://youtu.be/6HC4CYtD5ps

Ik moet nog veel uitzoeken maar het begin is er.

Sein sturing.

Ik ben vandaag bezig geweest om een Arduino seinsturing te ontwerpen, het ontwerp is geschikt voor 6 blok seinen ( Rood, Groen), met dit soort seinen word mijn modelspoor baan uitgevoerd.

Zoals gebruikelijk heb ik weer gebruikt gemaakt van het virtuele breadboad om de seinsturing te ontwerpen.

Het breadboard ontwerp.



Het schema.



Het printontwerp



De werking van dit ontwerp is vrij simpel.

Door op bv. port 6 een HIGH te zetten zal de Groene led gaan branden, als je een LOW op port 6 zet, zal de rode led gaan branden, op deze manier kun je met 1 Arduino Uno 10 blokseinen sturen.

Mvg Paul Smits
« Laatst bewerkt op: 11 January 2015, 20:35:51 door smits66 »
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

Fritsprt

  • Offline Offline
  • Berichten: 2615
Re: Arduino analoge(!) modelbaan sturing
« Reactie #139 Gepost op: 11 January 2015, 21:30:15 »
Hallo Paul,

Zit even vlug naar het schema te kijken maar ik snap niet hoe de rode leds moeten gaan branden. Ik heb het idee dat je de transistoren verkeerd hebt getekend. Of is al te laat voor mij om helder te denken...... ???

gr. Frits

ps. Is het niet veel eenvoudiger om de twee leds incl weerstanden in serie te schakelen tussen +5V en 0V. En dan het knooppunt van anode en kathode aansluiten op de arduino........Weet niet of het werkt, zou ik ook moeten proberen.
Groet Frits

dimo1_dimo1

  • Offline Offline
  • Berichten: 3380
Re: Arduino analoge(!) modelbaan sturing
« Reactie #140 Gepost op: 11 January 2015, 22:20:48 »
ik zou alle leds achter een transistor hangen.. ik ben bang dat je als je de leds rechtstreeks vanaf de Arduino gaat voeden, je je Arduino snel opblaast bij gebruik van meerdere leds (volgens mij mag 1 led nog maar net aan de output hangen van de Arduino maar er is ook een max totaal output van de MCU die je goed in de gaten moet houden)
groeten,
Auke

Fritsprt

  • Offline Offline
  • Berichten: 2615
Re: Arduino analoge(!) modelbaan sturing
« Reactie #141 Gepost op: 11 January 2015, 22:38:07 »
Hallo Paul, even geprobeerd en het werkt. Gaat natuurlijk alleen op als je niet teveel stroom gaat gebruiken. Eén groene led en één rode led per uitgng werkt prima. Ga je er meer aansluiten dan is het zoals Auke zegt beter om wel transistoren te gebruiken.

succes, Frits
Groet Frits

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #142 Gepost op: 11 January 2015, 22:41:37 »
Hoi Volgers

@Frits

Bedankt voor je input, ik zal er eens goed naar kijken.

Ik heb even een testopstelling gemaakt, daar werkt het wel. ???
Ik moet maar eens goed kijken naar het schema om uit te zoeken waarom het schema niet klopt. :P

@ Auke

De Arduino (ATmega 328) kan best wel wat hebben op de I/O pinnen, je moet inderdaad niet overdrijven.

 max  -- DC Current per I/O Pin . . . . . . . . . . . . . . . . . . 40.0mA
 max  -- DC Current VCC and GND Pins . . . . . . . . . . 200.0mA

Even uit de datasheet overgenomen.


Mvg Paul
« Laatst bewerkt op: 11 January 2015, 22:54:26 door smits66 »
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #143 Gepost op: 11 January 2015, 23:22:01 »
Hoi, volgers

IK heb even een proefopstelling van de seinsturing gemaakt om te kijken of mijn hersenspinsels wel kloppen.
Het werkt uitstekend, zie filmpje.

Filmpje.

http://youtu.be/wIwvIFs6c44

Het testprogramma.

/* Seinsturing test programma.

*/

int sein1 = 9;
int sein2 = 10;

void setup(){

  pinMode(sein1,OUTPUT);
  pinMode(sein2,OUTPUT);
 
  Serial.begin(9600);
  Serial.println("Arduino analoge modelbaan sturing : Sein beelden");
}
 
void loop(){

  digitalWrite(sein1, LOW);
  digitalWrite(sein2, HIGH);
 
  Serial.println("Blok2 vrij -> Blok1 bezet");
 
  delay(2000);
 
  digitalWrite(sein1, HIGH);
  digitalWrite(sein2, LOW);
 
  Serial.println("Blok1 vrij -> Blok2 bezet");
 
  delay(2000);
}
   

Mvg Paul
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Arduino analoge(!) modelbaan sturing
« Reactie #144 Gepost op: 12 January 2015, 00:01:08 »
Hoi Paul,

Ik had al veeeel eerder willen reageren. Nu staat er al zo veel tussen... Ik ga dus al lezend me reacties typen.

Okay, ik wilde chronologisch reageren maar laat ik eerst nog terugkomen op de ULN2803. Deze moet echt prima geschikt zijn voor wissels. Zeker als je twee uitgangen per wissel gebruikt. De OpenDCC decoder maakt er ook gebruik van en laten we eerlijk zijn, voor gros van de aandrijvingen is 1A meer dan genoeg. Wel moet je er op letten dat je dus de com aansluiting wel maakt om de free wheeling diodes. Naast de OpenDCC decoder maakt de LDT decoders er ook gebruik van de ULN chips. En denk (nooit open gemaakt, dus weet het echt niet zeker) dat een Digikeijs decoder ook wel eens ervan gebruik maakt. Per wissel twee transistoren tikt al wel snel aan anders.

Goed, nu weer terug naar de chronologische volgorde.  ;D Het schema met de MOSFET's en de ULN's lijkt me op zich prima. Alleen mis ik eigenlijk steeds een pin in de aansluiting naar de Arduino, de GND! Zeker omdat je printen met een barrel jack hebt getekend. Je zal niet de eerste zijn die rare verschijnselen krijgt doordat er geen common GND is. Nu kan je wel zeggen, ik voed de Arduino en de wissels uit dezelfde bron, maar ga je dat voor alles wissels doen? Is niet veel makkelijker één voeding te pakken voor alle Arduino's en een losse voor wissels? Zo blijft de voeding van de Arduino tenminste beetje schoon. En voor het blauwe ledje heb je dus geen 2 pinnen nodig, de kathode gaat gewoon aan de common GND.

En dan nog over je printjes op zich, ja ze gaan werken. Maar de layout is wel heel ruim opgezet, zonde van alle vrij ruimte. Ook heb je een dubbelzijdig ontwerp gemaakt. Ik snap dat het geen moer uitmaakt als je ze laat maken in China maar zoiets simpels krijg je denk ik ook nog wel op een zijde. Zou de print ook makkelijk zelf etsbaar maken.

ULN2803 uitgangen parallel schakelen klinkt leuk, maar de Common pen kan maar 1.5A totaal voeren.
Ik heb net weer erg me best gedaan en de datasheet doorgekeken maar kan dit niet vinden. Kan je me er op wijzen? Enige wat ik kan vinden is dat de chip in totaal 2,25W mag verstoken. Dit beperkt het wel aangezien je (per poort) een Vce hebt van 1,75V bij 500mA. Dit krijg je al bijna niet weg per poort. Maar dat is wel bijna de volle last en continue! Ik denk dat het voeding technisch ook erg verstandig is wissels na elkaar te schakelen. Op die manier hoeft de voeding niet idioot hoog, ga je niet over de power dissipation en ga je ook niet over de 1,5A. Alleen maar voordelen dus  8)

Busdiode over een MOSFET kan geen kwaad maar zoals je kunt zien zit er ook al iets in de IRF510 zelf. Ook zou ik er geen 1N4007 voor pakken, deze is te traag. Pak dan de aloude 1N4148, nog goedkoper ook. En dan weer, waarom MOSFET's? Deze zijn nog steeds een stuk duurder dan (BJT) transistors. En het is niet dat ze continue schakelen en dat de hitteproductie zo'n grote rol gaat spelen.

Toch weer its afwijken van de volgorde om elektronica bij elkaar te houden. De seinsturing. Ik moet zeggen, werkt wel maar lijkt me onnodig complex. Allereerst over hoe je de seinen aanstuurt. Als je zelf blokseinen maakt (en dus zelf de aansluiting kies) is het niet zo'n probleem. Maar hou er rekening mee dat de meeste commercieel verkrijgbare seinen een common anode hebben (en niet common kathode zoals jij hebt getekend. Maar ga je ze zelf maken is het geen probleem MAAR! Het kan dan VEEEEEEEEEL simpeler! Hang de groene led (+ weerstand) met de kathode aan de GND en de anode aan de Arduino pin. Hang nu de rode led (+weerstand) met de kathode aan de Arduino pin en met de anode aan de 5V. Maak je nu de pin HIGH brandt groen, maak je de pin LOW brandt rood, klaaaar. Geen transistors, niets  ;D

Wat betreft maximale stroom kan de Arduino best wel wat hebben. Maar 200mA klinkt veel maar dit zijn maar 10 ledjes (@20mA)! En dan mag je voor de rest niets voeden, zelfs niet een paar mA voor een transistor. En ik zie dat je een 100ohm weerstand voor de ledjes hebt, dit vind ik echt heel weinig. Je knalt dan zo'n 30mA door het ledje! En als je echt 200mA wilt gaan gebruiken uit de Arduino zorg dan voor een niet te hoge spanning naar de Arduino toe. Alle extra spanning moet door de voltage regulator opgestookt worden en die op de Arduino kan niet zo veel vermogen verstoken. Maar voeden met 5V is ook weer niet handig want dan zakt bij het minst of geringste de voedingsspanning onder de 5V.

Ik zit aan twee protocollen te denken I2C of RS485  beide protocollen hebben voordelen.
Dit zijn absoluut geen protocollen! Het zijn bussen. Het protocol moet jij verzinnen.

Als je twee Arduino's elektrisch wilt koppelen hang dan niet de 5V aan de Vin. Hang gewoon Vin aan Vin  ;) Laat je beide voltage regulators normaal hun werk doen. Zoals je nu hebt heeft de onderste Arduino de extra drop over de regulator te verwerken (de voedingsspanning zal dan ook lager zijn, +- 4,85V, als je de 5V lijn zal meten).

Je ontwerp van de RS485 lijkt ook wel te kloppen. Inderdaad iets meer hardware maar werkt mooi over afstand. Je weet overigens dat je ook gewoon TTL serail tussen de Arduino's kunt gebruiken?

Overigens denk ik dat je met één enkele Arduino al echt heel veel kunt doen. Je schrijft namelijk "verbinding tussen stuurposten". Dus je wilt per stuurpost een cluster aan Arduino's? Het kan wel maar ik denk dat een enkele Arduino met gemak een blok of 4 aan kan sturen. Enige beperking is misschien aantal pinnen voor seinsturing. Zou je shiftregisters voor kunnen gebruiken maar aan de andere kant, een pro mini kost ook geen drol  ::)


Goed, denk dat ik nu wel weer alles even langsgelopen ben  ::) Ik hoop dat je wat kunt met me lap tekst  ;)


Timo
Verzonden vanaf mijn desktop met Firefox

Karst Drenth

  • Offline Offline
  • Berichten: 10473
  • NS blauw, groen, rood, bruin, grijs en standgroen
    • Plan U op Sleutelspoor
Re: Arduino analoge(!) modelbaan sturing
« Reactie #145 Gepost op: 12 January 2015, 08:39:30 »
Citaat van: Timo
....En denk (nooit open gemaakt, dus weet het echt niet zeker) dat een Digikeijs decoder ook wel eens ervan gebruik maakt. Per wissel twee transistoren tikt al wel snel aan anders....

Nope, 5 Amp dual N-Channel MOSFETS in SOIC-8 ;) :P

Citaat van: Timo
... En ik zie dat je een 100ohm weerstand voor de ledjes hebt, dit vind ik echt heel weinig. Je knalt dan zo'n 30mA door het ledje!...

Zag ik ook... ik 'jaag' tegenwoordig nooit meer dan 2mA door een high-efficiency LEDje, meeeeeeer dan genoeg ;)

Grtzz,

Karst

Peter Korsten

  • Offline Offline
  • Berichten: 8571
Re: Arduino analoge(!) modelbaan sturing
« Reactie #146 Gepost op: 12 January 2015, 09:09:28 »
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.  ::)

Een library is niets anders dan herbruikbare code. Het bovenstaande is geen code, dat zijn slechts declaraties.

Het verschilt tussen verschillende ontwikkelingsplatforms, maar over het algemeen is ene library een stukje code dat je kunt linken aan andere code. Bijvoorbeeld, om een dialoogvenster op het scherm te zetten ("weet u zeker dat u de C-schijf wil formatteren?"), dat zet je in een library. Daar ga je niet iedere keer het venster tekenen met alle knoppen en tekst.

Voor je project zou je moeten kijken welke code hergebruikt zou kunnen worden. Ik heb niet het hele draadje doorgelezen, maar als je een master en een stuk of wat slaves hebt, neem ik aan dat die slaves allemaal hetzelfde werken. Als je een slave dan een bepaald iets wil laten uitvoeren door een opdracht op de bus te zetten, dan kun je dat één keer schrijven (in een library dus) en kun je het nummer van de slave als parameter meegeven.

Op die manier voorkom je dat je steeds dezelfde reeks opdrachten in je code hebt staan. Dat is namelijk niet goed voor onderhoudbaarheid van de code. Maar het moet dus wel code zijn die door verschillende onderdelen van je programma gebruikt kunnen worden. Als alles een monolithisch blok is, dan heeft een library ook niet zoveel zin. Dan zet je zoiets gewoon in een procedure/functie, het liefst in een apart bronbestand.

Overigens denk ik dat je een belangrijk voordeel van digitaal bent vergeten te benoemen: alles is al door andere mensen uitgevonden en getest. Jij zult alles zelf moeten doen en dat is geen sinecure. Aan de andere kant, als je er lol aan beleeft, waarom ook niet?

- Peter
***** ***** ***** ***** ***** ***** ***** ***** 40

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Arduino analoge(!) modelbaan sturing
« Reactie #147 Gepost op: 12 January 2015, 15:21:02 »
Thnx Karst voor de aanvulling  :) Iets meer beefy maar iig geen 10A+ losse torren.

@Paul, misschien eens een wisseltje meten? Weet niet wat voor aandrijvingen jij gebruikt. Blijkt het toch hoog misschien op zoek naar een andere minder beefy MOSFET? Misschien iets als de IRF7103?

Wat betreft librabies. Aan zich is een library alleen een stuk code wat je invoegt. Maar in jou geval heb je denk ik meer aan een libray met een classe. In een klasse breng je dan alles onder wat je vaker wilt gebruiken. Een blok is hier een mooi voorbeeld van. Dan kan je een classe maken voor een blok. Voor ieder blok maak je een instantie van het blok en je bent klaar. De classe bevat dan dingen als
blok.drive(int speed) voor het aansturen van de motordrivers (maar mss wil je deze los omdat niet ieder blok een motordriver krijgt, dan heb je meer aan blok.enable() en blok.disable() )
blok.occupied() Om blok bezet te maken en sein aan het begin op onveilig te zetten.
blok.free() Om blok vrij te geven en sein veilig te zetten

En buiten een library/classe om zou ik eens beginne met alles waar je er meer van hebt in een array te stoppen. Die hele waslijst met wisels is nu nogal onhandelbaar. En om iedere wissel om te zetten met een randvoorwaarde heb je nogal een berg ifjes (of een switch statement) nodig en dat is helemaal niet nodig. Gewoon
const byte turnouts[] = {30, 31, 32, 33, 34, enz };

void setTurnout(byte turnout, byte state){
   digitalWrite(turnouts[turnout], state);
}
Onderste is dan genoeg om elke wissel te zetten. Wel beetje eenvoudig gemaakt, doe nu net even of AAN en UIT een richting vormen voor een wissel. Komt omdat je maar één poort per wissel definieert...

Iets meer over libraries en hoe ze te maken binnen Arduino: Writing a Library for Arduino


Timo

En voor dingen waa

« Laatst bewerkt op: 13 January 2015, 12:28:55 door Timo »
Verzonden vanaf mijn desktop met Firefox

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #148 Gepost op: 12 January 2015, 23:07:07 »
Hoi, Volgers

@Timo 

Bedankt voor je input. (y)

Dat was een lap tekst om te lezen. ;D ,ik ben net zo erg  ;)

Ik maak gebruik van minitrix afneembare wissel spoelen, deze zouden volgens de fabrikant max 1A gebruiken, zijn ze wat ouder misschien 1.5 A.
Ik heb het zelf niet gemeten.

Ik heb wat gesurft om het een en het ander uit te zoeken over verschillende mosfet 's , er zijn mij twee types opgevallen die mij geschikt lijken (IRF 720 en IRF 820) de max stroom continu van de IRF 720 is 3.3 A en van de IRF 820  2.5 A, deze mosfet's  lijken mij geschikt voor mijn wissels.

Ik ga de ULN2803 niet gebruiken, liever iets meer geld kwijt aan onderdelen dan een wisselsturing die misschien te licht is.

De IRF 720, IRF 820 kosten ongeveer $0.50 per stuk in dat geval speel ik liever op save.

Citaat
En dan nog over je printjes op zich, ja ze gaan werken. Maar de layout is wel heel ruim opgezet, zonde van alle vrij ruimte. Ook heb je een dubbelzijdig ontwerp gemaakt. Ik snap dat het geen moer uitmaakt als je ze laat maken in China maar zoiets simpels krijg je denk ik ook nog wel op een zijde. Zou de print ook makkelijk zelf etsbaar maken.

Ik heb deze printjes juist  ruimer gemaakt, dat maak het solderen van de printjes een stuk makkelijker, ook als er een onderdeel kapot gaat is het makkelijk te vervangen.

Het lijkt tegenwoordig mode te zijn om de printen zo compact mogelijk te ontwerpen.  ???

Vroeger toen ik nog op school zat  8) werden printen die we ontwierpen ook al ruim van opzet gemaakt, dat doe ik nu nog. ;D

Ik ga thuis niet zitten kliederen met chemische stoffen om printjes te maken, de printjes in China laten maken is een stuk goedkoper( ik hoef geen aparte kamer met exotische apparaten, lichtbak, etsbak, spoelbak enz., te kopen) en een stuk schoner. ;D

Sorry, maar ik begrijp de code niet helemaal, als je nu het comando "digitalWrite(turnout, state)" , geeft zullen alle wissels toch omgaan, of zie ik dat verkeerd, ik heb ondertussen wel enige ervaring met de Arduino programmeertaal, maar dit begrijp ik even niet, heb je misschien wat psudo code voor mij om het wat duidelijker te maken hoe het werkt.  ::)

Het is mij ook niet helemaal duidelijk hoe ik een libray met een klasse moet maken, heb je misschien een klein voorbeeld voor mij, om het wat begrijpelijker te maken.  ::)

Ik maak  soms gebruik van bestaande code en pas die aan aan mijn eigen eisen, op deze manier heb ik de basisopzet van de modelbaan sturing ontworpen.

@Peter

Bedankt voor je input. (y)

Dat is een oude quote, ;D ,ondertussen heb ik een totaal ander programma gemaakt, dit programma werk voor nu naar behoren, het lag in de planning om ook deze functies in het programma te zetten.

Ik denk dat je het verhaal een beetje verkeerd hebt begrepen, het is absoluut niet de bedoeling om een nieuw digitaal systeem te ontwerpen, het is de bedoeling dat ik de Arduino ga gebruiken, om een Arduino blok gestuurde modelbaan te maken, die ik met de computer kan bedienen.

Al mijn locomotieven zijn analoog (ongeveer 30 stuks),

Dinamo is mij veel te duur, als ik zie wat het de treinenclub heeft gekost om de clubbaan om te bouwen naar Dinamo en de clubbaan is nog niet rij vaardig, laat dan maar.

@ Kartz

Bedank voor je input.  (y)

@ Allen

Na een partij ontwerpen gemaakt te hebben, kom ik tot de conclusie dat ik te ver ben doorgeschoten, het is allemaal te ingewikkeld  en het was ook niet de bedoeling om het onnodig ingewikkeld te maken, het moest een eenvoudige Arduino blok gestuurd systeem worden en geen nieuwe digitale sturing  ::).

Ik ben tot de conclusie gekomen dat het anders moet, dat wil niet zeggen dat ik er mee stop, ik vind het te leuk, maar het moet anders, dat wil zeggen naar het eerste idee dat ik had.

Wat nu, ik ga de sturing zoals die nu is opnieuw ontwerpen, dat wil zeggen terug naar het begin van de eerste ontwerpen.

Het wat ooit de bedoeling om per blok 1 Arduino te gebruiken, ik had toen al zoiets, dat het goed mogelijk moest zijn, om de functies van 1 blok met 1 Arduino te sturen, alleen wissels worden wat lastiger, daar zou een aparte Arduino voor nodig zijn.

Wat wil ik per blok sturen allereerst de rijrichting en snelheid, blok vrij/bezet melding, blokseinen, wissel (max 2 wissels parallel), verlichting (extra), ga uitzoeken of dat mogelijk is om met 1 Arduino te sturen.

Het stations gedeelte zou dan een Arduino mega moeten worden omdat er in de buurt van een station meerdere blokken zullen samenkomen.

Voor het stations gedeelte ga ik een Arduino mega gebruiken, dat is nu al zeker, voor de kleinere blokken ga ik een Arduino Nano met shield gebruiken, dit werkt makkelijker dan een standaard Arduino Uno, deze Arduino's zijn niet erg duur een complete set is al te koop voor 5 a 6 euro.

Het programma wat ik gemaakt heb blijf ik gebruiken en ga het verder verbeteren en uitbreiden.

Ook wil ik een dag/nacht simulatie maken met led strips, de elektronica daar voor is al zover klaar en het programma ook, ik ga voor de rgb driver de Arduino Pro mini gebruiken (heb ik al in mijn bezit).
De rgb driver is een onafhankelijk systeem en word niet gekoppeld aan de Arduino blok sturing.

De communicatie tussen de Arduino's is een andere uitdaging om te ontwerpen, er zijn namelijk meerdere opties, I2C -bus, RS485 -bus, de rx/tx -bus functie op de Arduino.

Het systeem moet ook makkelijk uitbreidbaar blijven.

De indeling van de Arduino, zoals ik in gedachte heb.

Port nr         Functie

  0               TX
  1               RX

  2               Blok 1
  3               Blok 2


  4               Sein kleur Rood
  5               Sein kleur Groen

  6               Wissel Rechtdoor
  7               Wissel Afbuigend

  8               Vrij
  9               Vrij

  10              ------------------------------
  11              Rij richting en snelheid
  12              -------------------------------

  13              Controle of het programma nog loopt

Op port 8 en 9 kan ik eventueel nog een extra bloksein aansluiten.

De Analoge porten worden nog even niet gebruikt, dat komt later als ik wat verder ben met het ontwerp.

Dat was het voor nu ;D

mvg Paul. :D
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

Peter Korsten

  • Offline Offline
  • Berichten: 8571
Re: Arduino analoge(!) modelbaan sturing
« Reactie #149 Gepost op: 13 January 2015, 00:52:20 »
Het is mij ook niet helemaal duidelijk hoe ik een libray met een klasse moet maken, heb je misschien een klein voorbeeld voor mij, om het wat begrijpelijker te maken.  ::)

Een klasse is een soort "zwarte doos" in software. Het is een verzameling van data en code die bij elkaar horen. Wanneer je een klasse in het leven roept, is het een object. Dit alles bij elkaar heet objectgeoriënteerd programmeren.

Het is een zwarte doos omdat het jou als gebruiker van die klasse het je geen moer uitmaakt wat er zich binnenin die klasse afspeelt. Het enige waar je geïnteresseerd in bent zijn de procedures/functies ("methoden" geheten bij objectgeoriënteerd programmeren) en de variabelen ("leden" geheten) die die klasse aan je laat zien. Maar een klasse gebruikt ook interne variabelen en functies die voor niemand anders zichtbaar zijn: die heten privé.

In jouw geval zou een klasse een blok kunnen voorstellen, om maar een voorbeeld te noemen. Zo'n blok heeft een aantal eigenschappen, zoals de snelheid (aantal pulsen, voltage, dat idee), of er een trein aanwezig is (ja of nee) en meer van dat soort zaken.

In een digitaal systeem zou een klasse een loc kunnen voorstellen. Die heeft dan een snelheid, de status van de verlichting, of wat je dan maar ook kunt verzinnen dat bij die loc hoort.

Maar het moet wel bij elkaar horen. De baanverlichting hoort dus niet bij een loc. Maar seinbeelden horen weer wel bij een blok.

Dan heb je overerving. Een subklasse, afgeleid van een andere klasse, heeft alle zichtbare eigenschappen van die klasse, plus wat je er nog aan toevoegt. Stel je voor dat je een algemene klasse "elektrisch apparaat" hebt. Een eigenschap daarvan is hoeveel stroom het op dat moment gebruikt. Maar je hebt verschillende elektrische apparaten: lampen, wasmachines, koelkasten, etc. Voor een koelkast heeft het geen zin om te zeggen hoeveel toeren per minuut hij maakt (dat hoort immers bij de wasmachine), maar bij beide is wel de temperatuur van belang.

Dus dan zou koelkast een subklasse van elektrisch apparaat zijn en wasmachine een subklasse van koelkast. Immers, de koelkast voegt de temperatuur toe en de wasmachine ook nog eens het aantal toeren per minuut. Alleen is dat geen goed idee, want een wasmachine is niet een speciaal geval van een koelkast. Een koelkast moet je af en toe ontdooien; dat zul je bij een wasmachine niet zo gauw hoeven.

Wat je dan wel zou kunnen doen is om een nieuwe klasse te maken van "elektrisch apparaat met temperatuurinstelling" en zowel de koelkast en de wasmachine daarvan af te leiden.

Dan krijg je dit:
Klasse "elektrisch apparaat"
* void zetAan()
* void zetUit()
* int leesVerbruik()

Klasse "elektrisch apparaat met temperatuurinstelling": afgeleid van klasse "elektrisch apparaat"
* void stelTemperatuurIn( int temperatuur )
* int leesTemperatuur

Klasse "wasmachine": afgeleid van klasse "elektrisch apparaat met temperatuurinstelling"
* void stelAantalToerenIn( int aantalToeren )
* int leesAantalToeren()

Klasse "koelkast": afgeleid van klasse "elektrisch apparaat met temperatuurinstelling"
* void ontdooi()

Hiermee kun je ieder elektrisch apparaat aan- en uitzetten. Je kunt bij een elektrisch apparaat met temperatuurinstelling de temperatuur instellen (d'oh!), bij de wasmachine kun je het aantal toeren zowel instellen als uitlezen en een koelkast kun je ontdooien. Maar je kunt een wasmachine dus niet ontdooien en een bij algemeen elektrisch apparaat kun je niet de temperatuur instellen (het zou immers een televisie kunnen zijn).

Als dit ingewikkeld klinkt, dat klopt. Programmeren is allerminst simpel en objectgeoriënteerd programmeren vraagt een bepaalde manier van denken die heel anders is dan bij procedureel programmeren (wat je op dit moment doet).

Citaat
Ik denk dat je het verhaal een beetje verkeerd hebt begrepen, het is absoluut niet de bedoeling om een nieuw digitaal systeem te ontwerpen, het is de bedoeling dat ik de Arduino ga gebruiken, om een Arduino blok gestuurde modelbaan te maken, die ik met de computer kan bedienen.

Al mijn locomotieven zijn analoog (ongeveer 30 stuks),

Dinamo is mij veel te duur, als ik zie wat het de treinenclub heeft gekost om de clubbaan om te bouwen naar Dinamo en de clubbaan is nog niet rij vaardig, laat dan maar.

Nee hoor, ik had het prima begrepen. Mijn punt was dat een belangrijk voorbeeld van digitaal is dat het allemaal al is uitgevonden. Je vindt kant-en-klare schema's voor centrales, boosters, al dat soort gerei. Of je koopt meteen een eindproduct. Inderdaad zullen de initiële kosten al gauw boven de €1500 liggen (€750 om de locs digitaal te maken, €400 voor een centrale, nog een stel wisseldecoders en detectie erbij). Maar bij jouw systeem moet je alles helemaal zelf uitvinden, testen, fouten eruit halen en dat steeds opnieuw. Vooral de programmatuur zal niet meevallen: programmeren is niet simpel.

- Peter
***** ***** ***** ***** ***** ***** ***** ***** 40