Doel:€250.00
Donaties:€128.00

Per saldo:€-122.00

Steun ons nu!

Laatst bijgewerkt
op 16-04-2024

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Openen Lima Hondekop door Pauldg
Vandaag om 13:08:22
Einde Koemo ballast ??? door Boertje
Vandaag om 12:50:24
"Nederlandse" modellen door Hans Reints
Vandaag om 12:39:20
Decals voor een Roco 64892 DSG Speisewagen door frits959
Vandaag om 12:01:05
Een stukje Odsherreds Jernbane (OHJ) door tothebeach
Vandaag om 11:11:37
Stationsplein Baden Baden door Dion
Vandaag om 10:52:24
Piko 2200 (52686)+ uhlenbrock 76420(?) door Jeroen Trainz
Vandaag om 10:49:27
Van Biervliet/B Models 2019, nieuws van de fabrikant door JeroenM.
Vandaag om 10:24:06
US diorama in H0 door Wim Vink
Vandaag om 10:18:14
Oude metalen trafo's gebruiken....... door Klaas Zondervan
Vandaag om 10:02:44
25 jaar geleden door Willem1951
Vandaag om 09:43:30
Ronald en Wanda's "Southern Comfort" swamp layout! door Frans
Vandaag om 09:27:24
Baan in Los Angeles door Jelmer
Vandaag om 08:56:38
Pfarrerwinkel bahn door Jelmer
Vandaag om 08:55:03
Aachenau West door Jelmer
Vandaag om 08:49:14
Bouw van materieel 40 treinstellen door Jelmer
Vandaag om 08:48:06
LS Models 2024 door Martijn193
Vandaag om 08:02:33
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Modellbahnwagen
Vandaag om 00:35:59
NS 8400 van Werps door Huup
18 april 2024, 23:17:50
EifelBurgenBahn door Reinout van Rees
18 april 2024, 23:17:45
Bisonkit verdunner door Deetrein
18 april 2024, 23:16:25
Traintastic - modelbaan besturingssoftware (gratis en open source) door reinderlf
18 april 2024, 23:02:30
Vergelijkings-/conversietabel modelverven door Rob Ellerman
18 april 2024, 22:37:44
Onlangs gespot - gefotografeerd, de foto's door Thom
18 april 2024, 21:24:49
Bouw NS C 8605, BC 6012 en C 6820 door prutser
18 april 2024, 21:09:01
BMB-Module: “Corfe Castle Station” door MichielB
18 april 2024, 20:24:46
Mijn eerste H0-modeltreinbaan in aanbouw door MichielB
18 april 2024, 20:05:30
20 en 21 april MobExpo door renenstimpie
18 april 2024, 18:53:42
Ervaringen met bezorgdiensten (PostNL, DHL, etc) door roco
18 april 2024, 17:54:18
Ombouw/Pimpen Bolle neuzen door bollen neus
18 april 2024, 17:48:50
  

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

De Stoker

  • Offline Offline
  • Berichten: 783
  • H0 - TC - Digirails - KL 8.2 1920-1950
Re: Arduino analoge(!) modelbaan sturing
« Reactie #30 Gepost op: 03 april 2014, 12:57:46 »
Mooi draadje, goede uitleg waar je mee bezig bent, Ga je volgen ik heb geïnvesteerd in een PIC maar de "basis gedachte" is wel gelijk. Ik heb best wel veel interesse in het programmeren dus ben erg benieuw. Misschien stap ik ook nog wel over op een Arduino maar voorlopig eerst andere zaken te doen (kinder kamer inrichten) dus er zal er van bouwen en dergelijke voorlopig wel niet veel terecht komen. Maar meelezen wil wel, succes met de ontwikkeling

gvandersel

  • HCC!m maar toch Selectrix (RMX)
  • Offline Offline
  • Berichten: 3602
  • Als het maar elektrisch is.
    • Homepage Gerard van der Sel
Re: Arduino analoge(!) modelbaan sturing
« Reactie #31 Gepost op: 03 april 2014, 15:24:56 »
Moet je niet ergens in oktober iets hebben werken?

Groet,

Gerard van der Sel.
Holzburg (IIIb/IVa) schaal N.
Kijk ook eens bij de bouw en lees de avonturen.

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #32 Gepost op: 03 april 2014, 21:59:43 »
Hoi

@Tukker

Bedankt voor je reactie en voor je link naar je website.

Ik ben op je website geweest, en heb je Arduino programma's bekeken, en heb de
Rijsnelheid en richting met behulp van een L293D en arduino
gedownload.

Ik zie dat je deze speciaal voor de Arduino mega hebt geschreven, ik ga het aanpassen aan de Arduino Uno (die gebruik ik, voor de snelheidsregeling van de treinen)  ik heb er even mee geëxperimenteerd (Arduino mega), wat instellingen veranderd en er een I2C lcd display routine er in geprogrammeerd.

Ik wil dit programma verder gaan gebruiken en ook aanpassen voor eigen gebruik.

De L293 chip heb ik vervangen voor een L298 dubbele motordriver, deze heeft een maximale stroom van 2A per motor continu.

Voor N locomotief met verlichte rijtuigen zal dat voldoende moeten zijn.

@De Stoker

Bedankt voor je reactie.

Dank je, ik zal mijn best blijven doen om het duidelijk te blijven.

In grote lijnen kun je de Arduino code relatief makkelijk vertalen naar een pic code (Pic Basic, oid), ook is de code, denk ik goed te vertalen via een terminal verbinding of Visual Basic naar een constructie voor de pic processor.

Andere programmeer talen voor de pc ken ik niet.

@ Gerard

Dat klopt, maar ook voor de Bnls n-spoor modulebaan wil ik een arduino modelbaan sturing maken (alleen eigen baan, niet de doorgaande sporen).

[off topic]
Ik heb moeite om de doorgaande sporen goed te leggen op de bak overgangen.
Volgende week neem ik de modulebak mee naar de modelspoor club om er daar met mensen die dit vaker gedaan hebben de doorgaande sporen te leggen en de modulebak verder af te bouwen.
[on topic]

@allen

Voor de mensen die geïnteresseerd zijn zal ik de Arduino code voor de Arduino modelbaan sturing op het forum zetten.

Let op! Verwacht geen hoge programeercode maar simpele programeercode.
De code in nog lang niet compleet en zeker niet compact geprogrammeerd en er zullen vast nog fouten in zitten.

Je kunt naar eigen idee het programma aanpassen.

Het idee achter dit programma is om via een terminal of een Visual Basic programma de modelbaan te sturen.
Het werk alleen nog via handbediening met een automatische bediening ben ik nog bezig.

De programma code.

/* Modelbaan sturing met een Arduino Mega processorboard.
    station en schaduwstation sturing modelbaan.
   
    Programma ontwikkeld door Paul Smits.
    Deze software mag vrij aangepast worden alleen als er een bron vermelding in de kop staat
   
    Deze sofrware word gebruikt om met een Arduino Mega een modelspoorbaan aan te sturen,
    dit is de eerste versie van de software.
   
    Dit programma is copyright by Paul Smits.
   */
 
 #include <Wire.h>
 //#include <AFMotor.h>
 #include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
 
 char incomingByte;
 // char BZ = "Bezet";                  // String Bezet
 //char VR = Vrij;                      // String Vrij
 //char RD = Rechtdoor;                 // wissel rechtdoor
 //char AF = Afbuigend;                 // wissel afbuigend
 
 // initialisatie poort defenieties
 
 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 = 27;      // Stoppen Arduino Mega modelspoor sturing.
 const int LED1 = 24;     // Vrijgave Arduino Mega modelspoor sturing.
 const int LEDV = 25;    // Noodstop geactiveerd
//const int LEDN = 31;    // Noodstop Opgeheven

// initialisatie poorten blokken


 const int Blok1 = 41;   // Inkomende spoor
 const int Blok2 = 42;   // Uitgaande spoor
 const int Blok3 = 43;   // Schaduwstation spoor 1
 const int Blok4 = 44;   // Schaduwstation spoor 2
 const int Blok5 = 45;   // Stationspoor spoor 1
 const int Blok6 = 46;   // Stationspoor spoor 2
 const int Blok7 = 47;   // Wachtspoor
 const int Blok8 = 48;   // Goederenspoor
 const int Blok9 =  49;   // Wisselblok 1
 const int Blok10 = 50;  // Wisselblok 2

// initialisatie poorten voor wissel sturing

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

 void setup(){
 
   Serial.begin(9600);
   Serial.println(" Arduino modelbaan sturing.");
   Serial.println(" Station / schaduwstation sturing");
   lcd.begin(16,2);         // initialize the lcd for 16 chars 2 lines and turn on backlight
   lcd.backlight(); // finish with backlight on 
   
    lcd.setCursor(2,0); //Start at character 0 on line 0
    lcd.print("Arduino Mega");
    lcd.setCursor(0,1);
    lcd.print("modelbaan sturing");
 
  // Zet de poorten bloksturing als output
   
   pinMode(Blok1, OUTPUT);  // Inkomende spoor
   pinMode(Blok2, OUTPUT);  // Uitgaande spoor
   pinMode(Blok3, OUTPUT);  // schaduwstation spoor 1
   pinMode(Blok4, OUTPUT);  // schaduwstation spoor 2
   pinMode(Blok5, OUTPUT);  // Stationspoor spoor 1
   pinMode(Blok6, OUTPUT);  // Stationspoor spoor 2
   pinMode(Blok7, OUTPUT);  // Wachtspoor
   pinMode(Blok8, OUTPUT);  // Goederenspoor
   
   // Poorten wissel sturing (test modes)
   
   pinMode(Wis1, OUTPUT);   // Wissel 1
   pinMode(Wis2, OUTPUT);   // Wissel 2
   pinMode(Wis3, OUTPUT);   // Wissel 3
   pinMode(Wis4, OUTPUT);   // Wissel 4
   pinMode(Wis5, OUTPUT);   // Wissel 5
   pinMode(Wis6, OUTPUT);   // Wissel 6
   pinMode(Wis7, OUTPUT);   // Wissel 7
   pinMode(Wis8, OUTPUT);   // Wissel 8
   pinMode(Wis9, OUTPUT);   // Wissel 9
   pinMode(Wis10, OUTPUT);  // Wissel 10
   pinMode(Wis11, OUTPUT);  // Wissel 11
   pinMode(Wis12, OUTPUT);  // Wissel 12 
 }

   void loop()
   {
       // Print a message to the LCD.
     
    if (Serial.available() > 0) {  // kijk of de seriele verbinding beschikbaar is.
        incomingByte = Serial.read(); // Lees een 'byte'.
   
   // Vrijgave of stop comando, Arduino Mega modelspoor sturing.
   
    if(incomingByte == 'V') {
        digitalWrite(LED1,LOW);  // Stop led uit.
       //digitalWrite(LED, HIGH); // Vrijgave Arduino Mega modelspoor sturing.
        Serial.println("Vrijgave Arduino Mega modelspoor sturing");
        lcd.setCursor(0,1);
        lcd.println("Vrijgave sturing"); 
       }
       
    if(incomingByte =='v'){
        //digitalWrite (LED, LOW);  // Vrijgave led uit.
        digitalWrite(LED1, HIGH); // Stoppen Arduino Mega modelspoor sturing.
        Serial.println("Stoppen Arduino Mega modelspoor sturing");
        lcd.setCursor(0,1);
        lcd.println("Stoppen  sturing");
      }
    // Bloksturing Arduino Mega   
       
    if(incomingByte == 'a') {
        digitalWrite(Blok1, HIGH); // inkomend spoor vrij
        Serial.println("Inkomend spoor : Vrij");
        lcd.setCursor(0,1);
        lcd.println("Inkomend    Vrij");
       }
    if(incomingByte == 'A'){
        digitalWrite(Blok1, LOW); // Inkomend spoor bezet
        Serial.println("Inkomend spoor : Bezet");
        lcd.setCursor(0,1);
        lcd.println("Inkomend   Bezet");
       }
   
    if(incomingByte == 'b') {
       digitalWrite(Blok2, HIGH); // Uitgaande spoor vrij
       Serial.println("Uitgaande spoor : Vrij");
       lcd.setCursor(0,1);
        lcd.println("Uitgaande   Vrij");
      }
   
    if(incomingByte == 'B'){
        digitalWrite(Blok2, LOW); // Uitgaande spoor bezet
        Serial.println("Uitgaande spoor : Bezet");
        lcd.setCursor(0,1);
        lcd.println("Uitgaande  Bezet");
       }
   
    if(incomingByte == 'c') {
        digitalWrite(Blok3, HIGH); // Schaduw station spoor 1 vrij
        Serial.println("Schaduw station spoor 1  : Vrij");
        lcd.setCursor(0,1);
        lcd.println("Ss spoor 1  Vrij");
      }
       
    if(incomingByte == 'C'){
        digitalWrite(Blok3, LOW); // Schaduw station spoor 1 bezet
        Serial.println("Schaduw station spoor 1  : Bezet");
        lcd.setCursor(0,1);
        lcd.println("Ss spoor 1 Bezet");
       }

    if(incomingByte == 'd') {
        digitalWrite(Blok4, HIGH); // Schaduw station spoor 2 vrij
        Serial.println("Schaduw station spoor 2 : Vrij");
        lcd.setCursor(0,1);
        lcd.println("Ss spoor 2  Vrij");
      }
       
    if(incomingByte == 'D'){
       digitalWrite(Blok4, LOW); // Schaduw station spoor 2 bezet
       Serial.println("Schaduw station spoor 2 : Bezet");
       lcd.setCursor(0,1);
       lcd.println("Ss spoor 2 Bezet");
      }
     
    if(incomingByte == 'e') {
        digitalWrite(Blok5, HIGH); // Station spoor 1 vrij
        Serial.println("Station spoor 1 : Vrij");
        lcd.setCursor(0,1);
        lcd.println("S spoor 1   Vrij");
      }
     
   if(incomingByte == 'E'){
       digitalWrite(Blok5, LOW); // Station spoor 1 bezet
       Serial.println("Station spoor 1 : Bezet");
        lcd.setCursor(0,1);
        lcd.println("S spoor 1  Bezet");
      }
   
    if(incomingByte == 'f') {
        digitalWrite(Blok6, HIGH); // Station spoor 2 vrij
        Serial.println("Station spoor 2 : Vrij");
        lcd.setCursor(0,1);
        lcd.println("S spoor 2   Vrij");
       }
   
   if(incomingByte == 'F'){
       digitalWrite(Blok6, LOW); // Station spoor 2 bezet
       Serial.println("Station spoor 2 : Bezet");
       lcd.setCursor(0,1);
       lcd.println("S spoor 2  Bezet");
      }
   
   if(incomingByte == 'g') {
       digitalWrite(Blok7, HIGH); // Wacht spoor vrij
       Serial.println("Wacht spoor : Vrij");
        lcd.setCursor(0,1);
        lcd.println("Wachtspoor  Vrij");
     }
       
   if(incomingByte == 'G'){
       digitalWrite(Blok7, LOW); // Wacht spoor bezet
       Serial.println("Wacht spoor : Bezet");
       lcd.setCursor(0,1);
       lcd.println("Wachtspoor Bezet");
     }

   if(incomingByte == 'h') {
       digitalWrite(Blok8, HIGH); // Goederen spoor vrij
       Serial.println("Goederen spoor : Vrij");
       lcd.setCursor(0,1);
       lcd.println("G spoor    Bezet");
     }
    if(incomingByte == 'H'){
        digitalWrite(Blok8, LOW); // Goederen spoor bezet
        Serial.println("Goederen spoor : Bezet");
         lcd.setCursor(0,1);
        lcd.println("G spoor   Vrij");
       }
       
     // Wisselsturing Arduino Mega
     
    if(incomingByte == '1') {
        digitalWrite(Wis1, HIGH); // wissel 1 afbuigend
        Serial.println("Wissel 1 : Afbuigend");
       }
    if(incomingByte == '!'){
        digitalWrite(Wis1, LOW); // Wissel 1 rechtdoor
        Serial.println("Wissel 1 : Rechtdoor");
       }
   
    if(incomingByte == '2') {
       digitalWrite(Wis2, HIGH); // Wissel 2 afbuigend
       Serial.println("Wissel 2 : Afbuigend");
      }
   
    if(incomingByte == '@'){
        digitalWrite(Wis2, LOW); // Wissel 2 rechtdoor
        Serial.println("Wissel 2 : Rechtdoor");
       }
   
    if(incomingByte == '3') {
        digitalWrite(Wis3, HIGH); // Wissel 3 afbuigend
        Serial.println("Wissel 3  : Afbuigend");
      }
       
    if(incomingByte == '#'){
        digitalWrite(Wis3, LOW); // Wissel 3 rechtdoor
        Serial.println("Wissel 3 : Rechtdoor");
       }
 if(incomingByte == '4') {
        digitalWrite(Wis4, HIGH); // wissel 4 afbuigend
        Serial.println("Wissel 4 : Afbuigend");
       }
    if(incomingByte == '$'){
        digitalWrite(Wis4, LOW); // Wissel 4 rechtdoor
        Serial.println("Wissel 4 : Rechtdoor");
       }
   
    if(incomingByte == '5') {
       digitalWrite(Wis5, HIGH); // Wissel 5 afbuigend
       Serial.println("Wissel 5 : Afbuigend");
      }
   
    if(incomingByte == '%'){
        digitalWrite(Wis5, LOW); // Wissel 5 rechtdoor
        Serial.println("Wissel 5 : Rechtdoor");
       }
   
    if(incomingByte == '6') {
        digitalWrite(Wis6, HIGH); // Wissel 6 afbuigend
        Serial.println("Wissel 6  : Afbuigend");
      }
       
    if(incomingByte == '^'){
        digitalWrite(Wis6, LOW); // Wissel 6 rechtdoor
        Serial.println("Wissel 6 : Rechtdoor");
       }
 if(incomingByte == '7') {
        digitalWrite(Wis7, HIGH); // wissel 7 afbuigend
        Serial.println("wissel 7 : Afbuigend");
       }
    if(incomingByte == '&'){
        digitalWrite(Wis7, LOW); // Wissel 7 rechtdoor
        Serial.println("Wissel 7 : Rechtdoor");
       }
   
    if(incomingByte == '8') {
       digitalWrite(Wis8, HIGH); // Wissel 8 afbuigend
       Serial.println("Wissel 8 : Afbuigend");
      }
   
    if(incomingByte == '*'){
        digitalWrite(Wis8, LOW); // Wissel 8 rechtdoor
        Serial.println("Wissel 8 : Rechtdoor");
       }
   
    if(incomingByte == '9') {
        digitalWrite(Wis9, HIGH); // Wissel 9 afbuigend
        Serial.println("Wissel 9  : Afbuigend");
      }
       
    if(incomingByte == '('){
        digitalWrite(Wis9, LOW); // Wissel 3 rechtdoor
        Serial.println("Wissel 9 : Rechtdoor");
       }
       
     if(incomingByte == '0') {
        digitalWrite(Wis10, HIGH); // Wissel 10 afbuigend
        Serial.println("Wissel 10  : Afbuigend");
      }
       
    if(incomingByte == ')'){
        digitalWrite(Wis10, LOW); // Wissel 3 rechtdoor
        Serial.println("Wissel 10 : Rechtdoor");
       }
       
   // Noodstop of vrijgave Arduino Mega modelspoor sturing.
   
   if(incomingByte == 'N') {
       digitalWrite(LEDV, HIGH);
       Serial.println("Noodstop alle treinen stoppen !");
       lcd.setCursor(0,1);
       lcd.println("Noodstop in     ");
      } 
     
  if(incomingByte == 'n') {
      digitalWrite(LEDV, LOW);
      Serial.println("Noodstop alle treinen opgeheven !");
      lcd.setCursor(0,1);
      lcd.println("Noodstop vrij   ");
     }     
  }
 

Als er er mensen zijn, die de Visual Basic code willen zien hoor ik het wel, dan zet ik deze code ook op het forum in dit topic.

Mvg Paul  ;D
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

tuurtje

  • Offline Offline
  • Berichten: 4519
Re: Arduino analoge(!) modelbaan sturing
« Reactie #33 Gepost op: 03 april 2014, 22:58:58 »
Hoi Paul

Bedankt voor de code, hier ga ik over een tijdje eens lekker mee stoeien,
En de VB code heb ik ook wel interesse in

Groetjes

Arthur
A live performance so the whole world will see
I'm aligning the stars
Universal in art
See the god in me

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #34 Gepost op: 03 april 2014, 23:14:22 »
Hoi,

@Arthur

Bedankt voor de reactie en succes met de code.

Hier is de Visual Basic code  (Visual basic 2010 express editie)
Het formulier moet je zelf maken ik heb daar geen code van.

Ik weet ook even niet hoe ik het "form1" op het forum zet, een aantal reacties terug zie je een screenshot van dit formulier.

Mochten er vragen zijn hoor ik het wel.

Visual Basic code:

Imports System.IO
Imports System.IO.Ports
Imports System.Threading

Public Class Form1

    Shared _continue As Boolean
    Shared _serialPort As SerialPort

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        SerialPort1.Close()
        SerialPort1.PortName = "com7" 'change com port to match your Arduino port
        SerialPort1.BaudRate = 9600
        SerialPort1.DataBits = 8
        SerialPort1.Parity = Parity.None
        SerialPort1.StopBits = StopBits.One
        SerialPort1.Handshake = Handshake.None
        SerialPort1.Encoding = System.Text.Encoding.Default 'very important!

    End Sub

    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)

        'This sub gets called automatically when the com port recieves some data
        'Pause while all data is read
        'Move recieved data into the buffer

        If SerialPort1.IsOpen = True Then
            Read()
        End If

    End Sub

    Private Sub Read()

        If SerialPort1.IsOpen Then
            Dim data As String = SerialPort1.ReadLine()
            TextBox1.Text = data
        End If

    End Sub

    Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged

        blok1On.Visible = True
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("a")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged

        blok1On.Visible = False
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("A")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged

        blok2On.Visible = True
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("b")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged

        blok2On.Visible = False
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("B")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton5.CheckedChanged

        blok3On.Visible = True
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("c")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton6.CheckedChanged

        blok3On.Visible = False
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("C")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton7_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton7.CheckedChanged

        blok4On.Visible = True
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("d")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton8_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton8.CheckedChanged

        blok4On.Visible = False
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("D")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton9_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton12.CheckedChanged

        blok5On.Visible = True
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("e")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton10_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton13.CheckedChanged

        blok5On.Visible = False
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("E")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton11_CheckedChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton10.CheckedChanged

        blok6On.Visible = True
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("f")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton12_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton11.CheckedChanged

        blok6On.Visible = False
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("F")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton14_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton14.CheckedChanged

        blok7On.Visible = True
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("g")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton15_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton15.CheckedChanged

        blok7On.Visible = False
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("G")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton16_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton16.CheckedChanged

        blok8On.Visible = True
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("h")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton17_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton17.CheckedChanged

        blok8On.Visible = False
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("H")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Close()
    End Sub

    Private Sub RadioButton20_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton20.CheckedChanged

        wis1On.Visible = True
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("!")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton19_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton19.CheckedChanged

        wis1On.Visible = False
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("1")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton18_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton18.CheckedChanged

    End Sub

    Private Sub RadioButton21_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton21.CheckedChanged

        wis7On.Visible = True
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("&")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub RadioButton22_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton22.CheckedChanged

        wis7On.Visible = False
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("7")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()
    End Sub

   
    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        SerialPort1.ReadByte()
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        stopOn.Visible = True
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("N")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        stopOn.Visible = True
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("v")

        If SerialPort1.IsOpen = True Then
            Read()

        End If

        SerialPort1.Close()

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        stopOn.Visible = False
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("V")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub

    Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        stopOn.Visible = False
        SerialPort1.Open()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write("n")

        If SerialPort1.IsOpen = True Then
            Read()
        End If

        SerialPort1.Close()

    End Sub


   
End Class

Mvg Paul  ;D
« Laatst bewerkt op: 03 april 2014, 23:17:40 door smits66 »
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

gvandersel

  • HCC!m maar toch Selectrix (RMX)
  • Offline Offline
  • Berichten: 3602
  • Als het maar elektrisch is.
    • Homepage Gerard van der Sel
Re: Arduino analoge(!) modelbaan sturing
« Reactie #35 Gepost op: 04 april 2014, 12:42:18 »
Paul,

Formulieren bestaan uit meerdere files. Iedere file opzig is in tekst formaat, dus kan gewoon gecopieerd worden. Voor een formulier dus uit de directorie alle bestanden die met de formnaam beginnen selecteren en plaatsen.
Een vraag/opmerking: Waarom heb je alle controls niet hernoemd dat werkt makelijker.
BV. ipv button21 gebruik je noodstop

Groet,

Gerard avn der Sel.
Holzburg (IIIb/IVa) schaal N.
Kijk ook eens bij de bouw en lees de avonturen.

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #36 Gepost op: 04 april 2014, 18:43:45 »
Gerard,

Ik zal eens kijken of het lukt.

Ik heb de controls nog geen definitieve naam gegeven omdat het programma nog in ontwikkeling is, en de controls nog wel eens veranderen.

In de definitieve versie worden de controls wel benoemd.

Ik heb nu ook een traploze snelheids regeling beschikbaar dankzij Tukker, ik ga deze regeling iets aanpassen, er word een I2C lcd display sturing ingebouwd, en een seriële communicatie, in het Arduino analoge modelbaan sturing programma.

Vanavond ga ik de laatste draden van de eerste module aansluiten zodat de baan gebruikt kan worden om het Arduino analoge modelbaan sturing te gaan testen.

Mvg Paul  ;D




Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #37 Gepost op: 13 april 2014, 20:32:10 »
Hoi

[off topic]

Het staat hier even stil hier, mijn computer is gecrasht en ik ben al mijn documenten, schema's foto's enz kwijt, ook windows werkt niet meer, helaas heb ik al een paar jaar geen backup gemaakt  ::) (dvd writer kapot)  ondertussen heb ik Linux op de computer gezet.
Ik kan nu in ieder geval computeren en het internet weer op.

Ik heb ondertussen de programma's die  ik gebruik kunnen vinden in een linux uitvoering, Arduino, Fritzing, Processing en een alternatief programmeer taal die lijkt op Visual Basic (linux - gambas3), ik moet me deze programmeertaal mester maken.

Ik begin ondertussen een beetje thuis te raken in Linux (werk anders dan windows).

[on topic]

Ik heb in de Arduino nu een programma zitten om de trein mee te sturen, ik zal kijken of ik vanavond nog een filmpje  kan maken van de werking van deze sturing.

Mvg Paul  ;D
« Laatst bewerkt op: 13 april 2014, 20:39:23 door smits66 »
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #38 Gepost op: 28 april 2014, 20:39:02 »
Hoi,

Het is niet gelukt om een bruikbaar filmpje te maken, als ik niet film gaat het goed, zodra ik ga filmen gaat het iedere keer fout. ???

Door het testen van de motorsturing (bloksturing) ben ik er achter gekomen dat het baanplan wat ik had ontworpen had, niet goed werkt.
In het ontwerp zitten te veel wissels (12  stuks), op de wissels lopen de locomotieven vast, dat gebeurd eigenlijk altijd als de loc optrekt of afremt in de buurt van de wissels, de loc's rijden dan nog te zacht om over de wissels te komen, met name de bochtwissels hebben dat probleem.

Met het berekenen van het aantal poorten dat je nodig hebt om de module te sturen, worden het wel erg veel poorten. ???

Om 12 wissels te sturen heb ik 2x12 =  24 poorten nodig, dat zijn best veel poorten, omdat de wissels via een rijweg databank (rijweg sturing)  gestuurd worden heb je zo veel poorten nodig.
Als je de wissel per paar stuurt heb je minder poorten nodig 2x6 = 12 poorten, alleen heb je dan minder rijwegen ter beschikking.

Voor de bloksturing heb je per sturing 6 poorten nodig  IN1, IN2, ENa en IN3, IN4, ENb = 6 poorten per motorsturing waarvan er al twee een pwm poort nodig hebben, voor deze module heb ik 5 motorsturingen nodig = 10 blokken (zowel linksom als rechts om) totaal 5x6  = 30 poorten voor de bloksturing waarvan 10 pwm poorten.

Voor het sturen van de seinen (bloksein) heb je per blok 2 poorten nodig, op deze module komen 10 blokken, voor de seinsturing heb je dan 2x10 = 20 poorten  nodig.
Als je de seinen gaat sturen via 2 kanten trein linksom en trein rechtsom heb je dan 4x10 = 40 poorten nodig of je moet de seinen anti-parallel aansluiten dan kan je met 20 poorten het geheel sturen.

Voor het detecteren van een blok bezet heb je 20 reed-contacten nodig dat zijn dan 2x10 = 20 poorten,  per rij richting heb je twee reed-contacten nodig.

Om deze module te sturen mat een arduino heb je dus :
  • 2x12 = 24 poorten voor het sturen van wissels
  • 5x6   = 30 poorten voor het sturen van blokken
  • 2x10 = 20 poorten voor het sturen van seinen
  • 2x10 = 20 poorten voor de blok bezet melding
  •               ----
  •                94 poorten voor het sturen van deze module  ???


De Arduino mega heeft 55 digitale poorten om deze module te sturen heb je minimaal 2 Arduino mega's nodig, afgezien van de complexe elektronica en het complexe programmeer werk, word de sturing veel te complex en onoverzichtelijk.  ::)

We gaan de sturing opnieuw ontwerpen zodanig dat ik per module maar een Arduino mega/uno nodig heb.

Ik ga het sporenplan vereenvoudigen minder wissels en minder blokken, als ik het sporenplan bekijk kan ik al minimaal 4 wissels en minimaal 4 blokken weglaten.

Mvg Paul  ;D
« Laatst bewerkt op: 28 april 2014, 20:42:06 door smits66 »
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

HansQ

  • Offline Offline
  • Berichten: 2032
  • Daar waar de rook is, is de kortsluiting...
Re: Arduino analoge(!) modelbaan sturing
« Reactie #39 Gepost op: 29 april 2014, 14:57:46 »
...heb je wel es van multiplexen gehoord? Het is sowieso niet handig als je wissels tegelijk om te zetten, qua voeding is het beter dat sequentieel te doen. Om 30 wissels aan te sturen heb je dan slechts 6 uitgangen nodig (2^6 = 64 minus 1 voor "neutraal" dus genoeg voor 30 wissels met 2 toestanden).
Hetzelfde geldt voor blokdetectie. De ad-hoc standaard is S88, daar zijn veel goedkope oplossingen voor te vinden, ook zelfbouw. Voor S88 heb je data+clock+reset dus 3 in/uitgangen nodig...
HansQ, RailClub Utrecht
spoor N modulebouw, electronica, Selectrix

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #40 Gepost op: 29 april 2014, 20:00:23 »
Hoi, Hans

Bedankt voor je reactie.

Ik heb wel es ;) van multiplexen gehoord en ben er enigszins mee bekent, ik heb er echter nog niet mee gewerkt komt nog wel een keer.

Ik zou de wissels niet in een keer laten omgaan, dan had ik het wel met een relais gedaan, in het arduino programma zit een kleine vertraging van 0,5 sec per wissel om de rijweg te schakelen.

De blok detectie word door reed-contacten gedaan, als de trein over het reed-contact rijd gaat er een timer lopen die naar een aantal seconden, de sectie stroomloos maakt en het bloksein op rood zet,  nadat de trein over het reed-contact rijd van het volgende blok word het voorgaande blok via een timer het bloksein op groen gezet en het blok weer van spanning voorzien.

Of dat mogelijk is via de S88 weet ik niet,  ik dacht dat  S88 een speciaal protocol voor de dcc sturing was, mijn baan word volledig analoog gestuurd (heb geen digitale locs, nu ja ::) twee locomotieven met selectrix decoders " n-spoor" , staan te koop of te ruil, evenals mijn selextrix componenten.)

Wat een ad-hoc is weet ik niet kan er niets van vinden op internet. ::)

Mvg Paul  ;D
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

Klaas Zondervan

  • Offline Offline
  • Berichten: 25273
    • Pagina van klaas
Re: Arduino analoge(!) modelbaan sturing
« Reactie #41 Gepost op: 29 april 2014, 23:15:41 »
ik dacht dat  S88 een speciaal protocol voor de dcc sturing was,
s88 is onafhankelijk van het systeem. Het is "gewoon" een schuifregister waarmee de bezetmeldingen worden opgehaald.

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #42 Gepost op: 04 mei 2014, 22:35:32 »
Hoi,

@klaas

Bedankt voor je reactie  (y)

Dat weet ik ook weer, ga uitzoeken of ik S88 kan gebruiken met de Arduino analoge modelbaan sturing.

@Allen

Nadat ik tot de conclusie ben gekomen dat mijn eerste ontwerp nodeloos ingewikkeld was, om 1 module te sturen had ik twee arduino mega's nodig, dit moet simpeler kunnen, ik ben weer opnieuw begonnen met het ontwerpen en ben tot een nieuw ontwerp gekomen , gebaseerd op het oude ontwerp.
Het sporenplan word gewijzigd, daar zaten te veel wissels in 12 stuks dat is verlaagt naar 8 stuks, en het aantal blokken is verlaagt van 10 blokken naar  6 blokken en de snelheid regeling is verlaagt van 10 stuks naar 2 stuks.

In het nieuwe sporenplan(1e module modelspoorbaan) word gebruik gemaakt  van twee stroomkringen vandaar dat het aantal is verlaagt naar 2 snelheid regelingen.
De twee stroomkringen zijn de hoofdbaan en zijlijn, worden wel aan elkaar gekoppeld maar volledig gescheiden door een wachtspoor.
Dit is mijn idee of het zo word als ik denk weet ik niet.

De flowchart van het nieuwe ontwerp.



Aan de hand van deze flowchart heb ik de oude sturing aangepast aan het nieuwe ontwerp.



Het ontwerp:

Links boven zit de Arduino Uno master met een Arduino-shield erop waar aan de onderkant draden zijn gesoldeerd voor de sturingen deze witte draden gaan naar een strookje gaatjes board waar ze op gesoldeerd zijn, aan de andere kant worden de draden van de relais en motorsturing gesoldeerd.

Rechts en midden boven zitten de relais van de bloksturing daar onder zit het relais van de noodstop rechts daarvan zit de motorsturing.
De schakelcontacten van de relais worden naar de kroonsteen onderaan de sturing gebracht.

Om de diverse componenten te kunnen blijven gebruiken voor test doeleinden heb ik onder de print draadjes gesoldeerd.

Dit ontwerp ga ik uittesten op een proefbaantje die ik ga maken

Deze sturing is voor de BNLS N-Spoor modulebaan en voor nu voor test doeleinden.

Voor mijn modelbaan thuis ga ik een Arduino Mega als master gebruiken en een Arduino Uno als slave.

Helaas kan ik Anyrails niet meer gebruiken om sporenplannen te tekenen omdat ik geen Windows meer op mijn computer heb staan.

Dat was het weer, volgende keer meer.

Mvg Paul  ;D
Üdvözlet Paul Smits.


bouw draadje "Laubenstein"

Bart Sanders

  • Offline Offline
  • Berichten: 109
Re: Arduino analoge(!) modelbaan sturing
« Reactie #43 Gepost op: 10 mei 2014, 12:46:44 »
Hallo!

Citaat
Waarom wil ik analoog blijven rijden

Ik heb een twintigtal analoge locomotieven die ook nog zo'n tien a twintig jaar.......

Precies, ik denk er zelf net zo over. Ik heb in dit forum een draadje rond de besturing van een modelbaan o.b.v. een PC-XT uit de jaren tabak. En er komt een ATmega8 besturing van een Fleischmann 1780 draaischijf uit de tijd dat het woord microprocessor nog lang niet bestond. Maar, e.e.a. werkt wel perfect met dit soort moderne besturingen.

En, zoals je schrijft, de kosten blijven heel erg laag. Schitterende locs krijg je als gloednieuwe winkeldochter ruim onder de € 100,- en ze werken met PWM en een goede software besturing praktisch net zo realistisch als peperdure decoder bestuurde locs.

Op dit moment is de modelbaan na de testbaan van het vorig jaar in een mooi werkende staat. Ik ga een videootje ervan maken en dat zet ik in dit forum. Het werkt allemaal schitterend.

Dus, veel succes met je Aduino besturing, ik blijf het volgen!

Groet,

Bart

smits66

  • Offline Offline
  • Berichten: 543
  • Schaal 1:160, Arduino
Re: Arduino analoge(!) modelbaan sturing
« Reactie #44 Gepost op: 23 juni 2014, 00:12:00 »
Hoi, mensen.

Doordat mijn vader ongeneselijk ziek is, heb ik al een tijd niets meer gedaan aan de modelspoor hobby.

Om mijn gedachten te verzetten ben ik weer met de Arduino analoge modelbaan sturing bezig geweest.

Omdat al mijn ontwerpen te complex waren heb ik een totaal nieuw ontwerp gemaakt, die een stuk simpeler is.

Het werk als volgt , dit ontwerp is gebaseerd (voor nu op twee blokken per Arduino Uno) als ik het blok handmatig vrij geef kan de trein vertrekken, het commando voor het vrijgeven van het blok en het vertrekken van de trein gaat via een terminal programma.
Als ik de trein een vertrek commando geef en ik heb het blok nog niet vrij gegeven zal de trein ook niet vertrekken.
Ik moet eerst een blok vrij commando geven en daarna pas het vertrek commando voor de trein geven, omdat het programma nog in een test fase zit is de optrek en rem vertraging stapsgewijs : Low speed, half speed en full speed. 
Voor test doeleinden heb ik twee elektromotoren van 5 volt gebruikt.

De communicatie en sturing met de Arduino gaat met een rs232 verbinding en de aflezing van de opdrachten is te zien op een I2C lcd display.

Het stroom diagram van de sturing.


De foto van de sturing, gebouwd op een sigarenkistje  ::), Nee, ik rook niet ;D , blijf nu beter liggen zonder dat de sturing alle kanten op schuift.



Het bijbehorende programma zal ik in een volgende post zetten.

De Arduino is een prima platform om bekent te worden met microcontroller sturingen voor de modelspoor toepassingen.

Mvg Paul Smits



Üdvözlet Paul Smits.


bouw draadje "Laubenstein"