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

18 t/m 21 april Intermodellbau '24 Dortmund door FritsT
Vandaag om 13:56:40
BMB 00-Modulebaan, BMB-Rijdagen en BMB-Deelname aan Beurzen & Evenementen door Biessendorf
Vandaag om 13:51:11
Efteling spoorweg gaat elektrisch door sncf231e
Vandaag om 13:44:34
Lantaarns Crafftiq op Roco Sik door C_Jabaaij
Vandaag om 13:31:51
Bauarbeiten im gange door 741230
Vandaag om 13:29:14
Bouw NTM Stationsgebouw Lemmer door Sven
Vandaag om 13:26:16
Locatie van foto gezocht door Arjan6511
Vandaag om 13:18:17
Mijn eerste H0-modeltreinbaan in aanbouw door 741230
Vandaag om 13:11:00
RhB modelbaan in Aanbouw die Scalettabahn Davos-Dürrboden door RhB-Mikey
Vandaag om 12:52:00
MB-module: Hielan Ware door Hendrik Jan
Vandaag om 12:47:14
Toon hier je nieuwe (model-) spooraanwinst(en)... door Martijn HITV
Vandaag om 12:40:37
DR4024 door Bert_Apd
Vandaag om 12:13:45
Mijn eerste baan, Hexental in ho. 380x 120cm door Paul1969
Vandaag om 12:11:20
Pools diorama H0 door spoorijzer
Vandaag om 12:08:20
Alt Wutachbahn - Sau-Schwänzle-bahn Weizen - Zollhaus - Blumberg door Eric v C
Vandaag om 11:56:11
Ronald en Wanda's "Southern Comfort" swamp layout! door Teun
Vandaag om 11:15:06
ÖBB Smalspoor minibaantje in H0e door RhB-Mikey
Vandaag om 11:05:17
Toon hier je (model)TRAM foto's. door Teun
Vandaag om 11:00:26
Treinreizen met m'n vader door Arjan6511
Vandaag om 10:58:20
Onlangs gespot - gefotografeerd, de foto's door Teun
Vandaag om 10:54:54
Dubbelom, een boekenplankspoorbaan in H0 door Klaas Zondervan
Vandaag om 10:31:47
ABLOAD gaat stoppen door Bor de Wolf
Vandaag om 10:25:16
NS 8400 van Werps door FritsT
Vandaag om 09:58:13
US figuren in 1:48 tijdsperiode 1930-1950 door Ronald Halma
Vandaag om 09:43:35
Een stukje Odsherreds Jernbane (OHJ) door Simplex
Vandaag om 09:06:30
Decals Star TE-5933 door spoorijzer
Vandaag om 08:08:42
Een kantoorbaan in schaal N door spoorijzer
Vandaag om 08:01:56
weerstandje en relais door Hans van Kampen
Vandaag om 00:37:21
Traintastic - modelbaan besturingssoftware (gratis en open source) door reinderlf
Vandaag om 00:13:44
Bouw NS C 8605, BC 6012 en C 6820 door prutser
22 april 2024, 23:12:32
  

Auteur Topic: Rangeerpuzzel (Inglenook) met Arduino besturing  (gelezen 40418 keer)

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #15 Gepost op: 31 augustus 2015, 15:36:52 »
Verder gebruik ik principieel waar mogelijk Nederlandse benamingen voor variabelen en dergelijke, om te voorkomen dat ik een "keyword" van IDE of library gebruik.
Zoveel keyword heeft de IDE niet hoor ;) En die van een library gebruiken is ook niet zo erg omdat het vaak dan toch om een object gaat. Niet dat Nederlandse variabele niet mogen maar de reden ervoor (afgezien van dat Nederlands de moedertaal is) zijn niet echt geldig.

Ik zie alleen ook hier weer veel "dubbel werk" omdat je bijvoorbeeld alles voor wissel 1 en wissel 2 los uit schrijft. Kijk even naar mijn post in het topic van Dick, daar stip ik dat ook aan. Nu heb je maar 2 wissels maar het schaalt zo lastig als je er misschien later toch meer wilt. Maar bijvoorbeeld bij de knoppen zou het je al heeeeel veel code schelen....

Debounce van de knoppen gaat zonder library.
Het lijkt bijna wel of je dit met trots zegt  ::) ;D Maar waarom niet gewoon een library pakken? Deze zijn juist bedacht om jou veel werk uit handen te namen en bijvoorbeeld de Bounce2 library zou je code een heeeeeeel stuk makkelijker maken. Een stuk als
// - - - - - zet wissel 1 gebogen met knop
  if ((millis() - lastDebounceTimeGebogen_1) > debounceDelay)
  {
  // if the button state has changed:
    if (readingKnopG1 != knopG_1State)
    {
    knopG_1State = readingKnopG1;
      if (knopG_1State == LOW)
      {
        digitalWrite(relaisG_1, LOW);            // relais valt af, hartstuk stroomloos
        digitalWrite(relaisR_1, LOW);            // relais valt af, hartstuk stroomloos
        wisselServos.gotoEndPos(0,0);                // zet servo om
      }
    }
  }
Is dan te herschrijven tot:
knopGebogen1.update();
if(knopGebogen1.fell()){
  digitalWrite(relaisG_1, LOW);            // relais valt af, hartstuk stroomloos
  digitalWrite(relaisR_1, LOW);            // relais valt af, hartstuk stroomloos
  wisselServos.gotoEndPos(0,0);                // zet servo om
}

Maak je van alle knoppen nog een array van 2 bij 2 zou je het hele stuk tussen regel 205 en 369 kunnen herschrijven in ik denk 15 regels.... En dan is het nog in 10 seconde op te schalen tot 8 wissels als je wilt ook... Maar again, zeg niet dat het moet, ik geef het je alleen als tip  ;) Als je tips krijgen niet erg vind zou ik je aanraden het geweldige tips and traps stuk van Nick Gammon door te lezen.


Timo
Verzonden vanaf mijn desktop met Firefox

Cees Baarda

  • Offline Offline
  • Berichten: 167
  • hcc!m-IG
    • hcc!m
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #16 Gepost op: 04 september 2015, 16:53:41 »
@Timo
Je hebt met je opmerking:
Citaat
Ik zie alleen ook hier weer veel "dubbel werk" omdat je bijvoorbeeld alles voor wissel 1 en wissel 2 los uit schrijft.
helemaal gelijk, echter ik ben niet voornemens om de firmware uit te breiden voor meer dan die 2 wissels. En dan heb ik de keus 1 x kopiëren en plakken met wat wijzigingen of extra code toevoegen.

Citaat
Citaat van: Cees Baarda op 24 augustus 2015, 12:21:37
Debounce van de knoppen gaat zonder library.
Het lijkt bijna wel of je dit met trots zegt 
Ik heb het geschreven als constatering en om aan te geven, dat er hiervoor geen library hoeft te worden bijgevoegd. Ik heb denk ik wel bewezen libraries te gebruiken. Zeker als het gaat om het uitvinden van een wiel, zoals met je eigen libraries, zal ik er dankbaar gebruik van maken. Ik ben overigens nog niet zo ver dat ik me wil wagen aan array's om e.e.a. te vereenvoudigen. Mijn ervaring is dat dan je eigen code cryptischer wordt, waardoor zeker ik de weg dreig kwijt te raken. Ik verwacht op een later moment je tips ter harte te nemen en alsnog de code anders op te bouwen. Plezierig gevolg wordt dan natuurlijk de vereenvoudiging richting meer te bedienen wissels.

groet Cees.
Webmaster hcc!m - Microcontrollers (Atmel) : Arduino
Bezig met het maken van een apart ijkspoor t.b.v. Koploper of iTrain.

gvandersel

  • HCC!m maar toch Selectrix (RMX)
  • Offline Offline
  • Berichten: 3602
  • Als het maar elektrisch is.
    • Homepage Gerard van der Sel
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #17 Gepost op: 05 september 2015, 00:40:54 »
Cees,

Als je het wissel als object (class of library) gaat inzetten, zal bij een fout deze 'automatisch' voor het tweede wissel gerepareerd worden. Dan hoeft niet opnieuw met knippen en plakken gedaan, met kans op nog meer fouten.

Groet,

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

ivanzon

  • Offline Offline
  • Berichten: 1595
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #18 Gepost op: 05 september 2015, 07:49:22 »
Mijn advies is: Gebruik die knop detectie Library, dat verkleint de kans op fouten enorm door het knop status gebeuren in één functie te stoppen.

Cees Baarda

  • Offline Offline
  • Berichten: 167
  • hcc!m-IG
    • hcc!m
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #19 Gepost op: 06 september 2015, 12:56:12 »
@Gerard;
ik gebruik de libraries van de adServo. Je opmerking betekent dus dat ik de "ServoControl class", die Timo gemaakt heeft moet uitbreiden met twee relais, door:

1- bij de variabelen van de class ; 2 pins toe te voegen en een boolean relaisAvailable

2- bij ServoControl::init(...) ; e.e.a. mee te initialiseren
Dat wordt dus een tweede init(...) maken om de library universeel te houden

2- bij ServoControl::gotoEndPos ; beide relais-pins LOW te maken
Krijg je zoiets als
if(this->servoInfo[i].relaisAvailable)
{
  //laat relais afvallen
}

3- bij ServoControl::update ; op het juiste moment, het juiste relais weer te laten opkomen
   //time to detach
   else if(this->servoInfo[i].speed.intervalCount == 1)
   {
      this->servoInfo[i].speed.intervalCount--;
      this->servoList[i].detach();
      if(this->servoInfo.relaisAvailable)
      {
         // laat het juiste relais opkomen
      }
   }

Daar zal ik wel even mee bezig zijn. Ik ga het wel proberen.

Als ik het goed begrepen heb, kun je bij object georiënteerd programmeren een tweede init maken. Die is anders door het aantal variabele.

groet Cees
Webmaster hcc!m - Microcontrollers (Atmel) : Arduino
Bezig met het maken van een apart ijkspoor t.b.v. Koploper of iTrain.

Cees Baarda

  • Offline Offline
  • Berichten: 167
  • hcc!m-IG
    • hcc!m
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #20 Gepost op: 06 september 2015, 14:17:13 »
Ik was nog niet klaar met mijn vorige post. Lunchtijd brak e.e.a. even af.

@ivanzon
Die library gaat er zeker weer inkomen.
Ik vond het wel aardig om te laten zien hoe ik begonnen ben. In die bounce2 library kon ik niet boven water halen of er nog een interrupt gebruikt word naast de timer t.b.v. "millies()". Ergens in de toekomst wil ik meer met Wire (i2c) en DCC. Dat zou tot conflicten kunnen leiden.

groet Cees
Webmaster hcc!m - Microcontrollers (Atmel) : Arduino
Bezig met het maken van een apart ijkspoor t.b.v. Koploper of iTrain.

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #21 Gepost op: 07 september 2015, 16:35:38 »
En dan heb ik de keus 1 x kopiëren en plakken met wat wijzigingen of extra code toevoegen.
3x, want eigenlijk doe je voor zowel rechtdoor als afbuigen al hetzelfde. En dan is het echt al de moeite waard om het anders te doen.

Ik heb het geschreven als constatering en om aan te geven, dat er hiervoor geen library hoeft te worden bijgevoegd. Ik heb denk ik wel bewezen libraries te gebruiken.
Dat heb je zeker! Maar doelde er meer op de de Bounce library zo makkelijk en simpel is dat ik eigenlijk vind dat hij een standaard Arduino library zou moeten zijn. Gebruik ervan maakt de code ook zoveel leesbaarder.

Ik ben overigens nog niet zo ver dat ik me wil wagen aan array's om e.e.a. te vereenvoudigen. Mijn ervaring is dat dan je eigen code cryptischer wordt, waardoor zeker ik de weg dreig kwijt te raken.
Nouwja, cryptischer. Ipv een hele rij variabele zoals knop1, knop2, knop 3 te definiëren doe je gewoon knop[3] en gebruik je het als knop[0], knop[1] en knop[2]. Lastiger is het eigenlijk niet...

Ik heb even snel de code herschreven en is daarmee half zo lang geworden om je een idee te geven van array's en functies ipv copy past  ;D Natuurlijk niet verplicht om te gebruiken maar geeft je een idee hoeveel het scheelt en hoeveel leesbaarder de code is geworden.

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 S e r v o   W i s s e l S t e l l e r
   
   Testprogramma voor het omzetten van twee modelspoorwissels m.b.v.
   een modelbouw servo.
   Te testen:
   - 4 losse drukknoppen voor recht en afbuigend
   - 2 optocoupler ingangen; funtioneel als schakelaar, bedoeld
     voor besturing vanuit HCC!m-systeem of Dinamo OC32
   - 1 van de optocouplers moet later ook DCC kunnen verwerken
   Er wordt gebruik gemaakt van 2 servo's
   Ten behoeve van hartstukpolarisatie zijn er per servo 2 relais
   
   Werking per wissel:
   - na een wisselcommando vallen eerst beide relais af
   - daarna loopt het wissel om (servo)
   - dan komt het juiste relais op
   Bij opstarten gebeurt er niets. Het hartstuk van het wissel heeft
   geen spanning en de servo staat in een ongedefinieerde stand.
   
   De gebruikte Arduino is een Pro Mini, 5V met ATmega328.
   
   Gebruikte libraries en voorbeelden:
   - code uit het Debounce-voorbeeld bestand van Arduino.cc
     http://www.arduino.cc/en/Tutorial/Debounce
   - ServoExtend library van Timo Engelgeer
   - ServoControl library van Timo Engelgeer
   
   Created:   30-04-2015
   By:        Cees Baarda
              Eerste opzet met gebruikmaking van de library Servo uit de Arduino-
              omgeving.
   Modified:  15-07-2015
   By:        Cees Baarda
              Aangepast aan gebruik met de libraries van Timo Engelgeer
              De servo's starten nu op in de middenstand, ongeacht de stand van schakelaars.
              De relais blijven afgevallen tot het eerste wisselstel commando. Nadeel:
              Je moet het wissel 2 keer stellen als je het wissel in de stand van de
              schakelaar wilt hebben.
              Je kunt de drukknoppen en schakelaars door elkaar gebruiken.
   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *   
// - - - - - L i b r a r i e s   i n   g e b r u i k :
#include <ServoExtend.h>
#include <ServoControl.h>
#include <Bounce2.h>

//#include <Wire.h>
//#include <LiquidCrystal_I2C.h>

#define R 0
#define G 1



// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// - - - - - C o n s t a n t e n :
//           De pinnummers en vaste waarden een naam geven

#define AANTAL_POS 2 //Aantal posities per wissel

// - - - - - voor wissels
const byte OptoPin[]                  = {3, 2}; //Pin van de opto's in
const byte ServoPin[]                 = {9, 10};//Pin van de servo's
//eindposities sevo's {R, G} (ServoEndPos[wiselnummer][R of G])
const byte ServoEndPos[][AANTAL_POS] = {{10, 1002}, //wissel 1
                                        {10, 1002}};//wissel 2
// output; t.b.v. relais bij recht gelegd wisssel {R, G} (RelaisPin[wiselnummer][R of G])
const byte RelaisPin[][AANTAL_POS]   = {{7, 8}, //wissel 1
                                        {11, 12}}; //wissel 2
// inputs t.b.v. bediening met knoppen {R, G} (KnopPin[wiselnummer][R of G])
const byte KnopPin[][AANTAL_POS]     = {{6, 5},
                                        {A2, A0}};
#define AANTAL_SERVOS  sizeof(ServoPin)
#define AantalOptos     sizeof(OptoPin)

// - - - - - beide wissels met DCC, nog niet in gebruik
  // const int DCC_in    = 2;  // input; de DCC-railspanning gaat hier aan
  const int ServoSnelheid = 30;
  const int ServoStepInterval = 1;
  const int LedPin = A1;        // LED op de print
 
// - - - - - nog niet in gebruik, voor servo instelmodus
//           encoder: common moet aan GND, andere aan pin 5 en 6
//  const int pgmEncA   = 6;
//  const int pgmAncB   = 5;
//  const int pgmOK     = A0;  // kan losse knop of knop van de encoder zijn

// - - - - - nog niet in gebruik, zijn bedoeld voor extra print aan 8 polige
//           connector
  // const int LEDarduino   = 13; // LED op de arduino
  // const int LEDextern_1  = A2; // evt. extra LED op externe print (pin 4)
  // const int LEDextern_2  = A3; // evt. extra LED op externe print (pin 5)
  // const int externKnop_1 = A2; // evt. extra knop op externe print (pin 4)
  // const int externKnop_1 = A3; // evt. extra knop op externe print (pin 5)
 

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// - - - - - G l o b a l e   V a r i a b e l e n :
//
  ServoControl wisselServos;         // 1 object van het type ServoControl
  // - - - - - Inputs
  Bounce knop[AANTAL_SERVOS][2];  //Voor alle knoppen (knop[wisselnummer][R of G])
  Bounce opto[AantalOptos];         //Voor alle opto's (opto[wisselnummer])
 
 




// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// - - - - - prototypes
//
  void servoInstellen();
  void stelWissel(byte, byte);


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// - - - - - setup, 1 x doorlopen
//
void setup()
{
  //Doe alles voor elke servo
  for(byte servoNr = 0; servoNr < AANTAL_SERVOS; servoNr++){ //Ga alle wissels langs
    //Setup voor alle knoppen
    for(byte posNr = 0; posNr < AANTAL_POS; posNr++){ //Ga R en G langs
      pinMode(KnopPin[servoNr][posNr], INPUT_PULLUP); //Zet alle knoppen als input met pullup
      knop[servoNr][posNr].attach(KnopPin[servoNr][posNr]);     //Koppel aan Bounce object
    }
   
    //Setup alle opto's
    pinMode(OptoPin[servoNr], INPUT_PULLUP); //Zet alle opto's als input met pullup
    opto[servoNr].attach(OptoPin[servoNr]);     //Koppel aan Bounce object
   
    //Setup voor alle relais
    for(byte posNr = 0; posNr < AANTAL_POS; posNr++){
      pinMode(RelaisPin[servoNr][posNr], OUTPUT);
      digitalWrite(RelaisPin[servoNr][posNr], LOW);
    }
   
    //Setup voor alle servo's
    for(byte posNr = 0; posNr < AANTAL_POS; posNr++){
      wisselServos.setEndPos(servoNr, posNr, ServoEndPos[servoNr][posNr]); //Stel beide/alle eindposities in
    }
    wisselServos.setSpeed(servoNr, ServoSnelheid, ServoStepInterval); //stel snelheid in
    wisselServos.init(servoNr, ServoPin[servoNr]);   //Koppel aan pin enzo
   
    wisselServos.gotoPos(servoNr, 511); //Ga naar middenstand
  }
  wisselServos.update();

// - - - - - testen van werking (moet later weg?)
//  digitalWrite(LedPin, HIGH);
}

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// - - - - - eindeloos doorgaan
void loop()

  //loop alle wissels langs
  for(byte servoNr = 0; servoNr < AANTAL_SERVOS; servoNr++){
    //----De knoppen
      //Loop posities langs
      for(byte posNr = 0; posNr < AANTAL_POS; posNr++){
        knop[servoNr][posNr].update();  //Update de knop
       
        if(knop[servoNr][posNr].fell()){  //Knop is ingedrukt (gevallen) sidns vorige keer
          stelWissel(servoNr, posNr);     //Zet wissel in bijbehorende stand
        }
      }
   
    //----De opto's
      opto[servoNr].update(); //update de opto
      if(opto[servoNr].rose()){
        stelWissel(servoNr, R); //R-positie als hoog geworden
      }
      else if(opto[servoNr].fell()){ //G-positie als laag geworden
        stelWissel(servoNr, G);
      }
     
    //----De relais
      //Klaar met bewegen
      if(!wisselServos.isMoving(servoNr)){
        //Vind de eindstand waar hij is
        for(byte posNr = 0; posNr < AANTAL_POS; posNr++){
          if(wisselServos.isAtEndPos(servoNr, posNr)){
            //En zet juiste relais aan
            digitalWrite(RelaisPin[servoNr][posNr], HIGH);
          }
        }
      }
  }

  wisselServos.update(); //update alle servo's
}


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// - - - - - Servo instelmodus

void servoInstellen()
{
 

}

void stelWissel(byte wisselNr, byte pos){
  //laat relais afvallen
  for(byte j = 0; j < AANTAL_POS; j++){
    digitalWrite(RelaisPin[wisselNr][j], LOW);      // relais valt af, hartstuk stroomloos
  }
  wisselServos.gotoEndPos(wisselNr, pos);              // zet servo om
}

[edit]Zoals vaker duurde de complete reactie iets langer dus stond even in de wacht  ;D Ondertussen dus twee extra reacties geweest. Je kan inderdaad de library aanpassen voor de relais maar er is eigenlijk ook niets tegen de huidige methode. Voordeel van de library niet aanpassen is dat eventuele latere updates van de ServoControll library gewoon over genomen kunnen worden. Maar het staat je vrij om de library aan te passen.

De bounce2 library is gewoon interrupt vrij. Het is puur makkelijk verpakt hoe je nu al met millis() een knop debounct. Het is alleen dan amper schrijfwerk  ;D
« Laatst bewerkt op: 07 september 2015, 16:39:34 door Timo »
Verzonden vanaf mijn desktop met Firefox

Cees Baarda

  • Offline Offline
  • Berichten: 167
  • hcc!m-IG
    • hcc!m
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #22 Gepost op: 07 september 2015, 17:03:42 »
Eigenwijs als ik ben, heb ik toch de ServoControl library wat aangepast. Was maar een regel of 20. Ik heb dat natuurlijk wel met een kopie gedaan (je hebt daar een PB over Timo).
Door ook maar gelijk die leuke bounce2 library weer op te pakken is de code in mijn loop() gereduceerd tot 24 regels, zie hieronder

void loop()
{

// - - - - - zet wissel 1 en 2 om met knoppen

  for (byte i = 0; i < NrButtons; i++)
  {
    buttons[i].update();
    if (buttons[i].fell())
    {
      wisselServos.gotoEndPos(i / 2,i % 2);                // zet servo om
    }
  }
// - - - - - zet wissel 1 en 2 om met schakelaars
  for (byte j = 0; j < NrSwitches; j++)
  {
    switches[j].update();
    {
      if (switches[j].fell()) {wisselServos.gotoEndPos(j,0);}
      if (switches[j].rose()) wisselServos.gotoEndPos(j,1);
    }
  }
wisselServos.update();
 
}

Natuurlijk is daar bij de variabelen en in de setup() ook het e.e.a. veranderd. En zoals Timo eerder al schreef; aanpassen naar meer wissels is nu een eitje.

groet Cees
Webmaster hcc!m - Microcontrollers (Atmel) : Arduino
Bezig met het maken van een apart ijkspoor t.b.v. Koploper of iTrain.

Cees Baarda

  • Offline Offline
  • Berichten: 167
  • hcc!m-IG
    • hcc!m
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #23 Gepost op: 26 maart 2016, 12:00:13 »
Zo, na een lange periode van niet posten, dit draadje maar eens oppoetsen.

De bouw van dit project heeft een poosje behoorlijk stil gestaan. Timo Engelgeer lijkt een enorme fan van KiCad als printontwerpomgeving te zijn. Daar wilde ik toch wel eens naar kijken. Dat heb ik geweten bij de opzet van een volgend onderdeel voor de Inglenook. Ik ben zeker 3 weken bezig geweest met het verkennen van de vele mogelijkheden van dit programma en de manier van werken daarmee. En daarna nog eens een paar weken met het ontwerpen en bouwen van een printje voor een Arduino Pro mini. Ik moet zeggen dat, als je eenmaal het programma wat meer in de vingers hebt, je niet anders meer wilt.

Wat heb ik bedacht:
Een 10 x 5 cm printje voor een Arduino Pro Mini met in- en uitvoer hardware. Wat wilde ik allemaal:
Voeding m.b.v. een laptop-voeding.
DCC-in met schroefconnector en LocoNet-B aansluiting.
DCC-uit met schroefconnector t.b.v. aansluiting aan een BNLS/RCU boosterhub.
LocoNet in/uit met 2 connectoren, waarbij de LocoNet-voeding voeding alleen wordt doorgelust.
2 relais in 2 modellen door een speciale footprint te maken.
4 LED's om seinbeelden te kunnen laten zien (rechts).
1 Servo aansturing.
i2c aansluiting, o.a. om een LCD aan te sluiten.
En extra omdat de aansluitingen nog over waren:
Makkelijker bereikbare resetknop (links).
Analoge input m.b.v. een potmeter (midden).
Een rotary-encoder met drukknop (midden).
2 extra LED's voor andere doelen (midden).

Primaire doel van het printje is te oefenen met de verschillende benodigde libraries, zoals die hier al diverse keren voorbij zijn gekomen. Het printje zal er uit gaan zien zoals op onderstaande afbeelding. Het eerste zal er een DCC loksturing gaan komen.

De uitvoer naar Gerber-files en opsturen naar iTead heb ik nog niet gedaan. Daar moet nog mee geoefend worden.

Webmaster hcc!m - Microcontrollers (Atmel) : Arduino
Bezig met het maken van een apart ijkspoor t.b.v. Koploper of iTrain.

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #24 Gepost op: 26 maart 2016, 12:33:18 »
Hoi Cees,

Ziet er allemaal super uit!  (y) Het is inderdaad even verkennen maar daarna werkt het allemaal erg prettig. En ook ik ben altijd wel even bezig met een printje. Het basis ontwerp is er altijd zo, maar ben altijd zo pietluttig dat het er allemaal ook mooi en strak uit moet zien  ;D

Enige wat ik alleen nog denk als ik de print nu zie:
- De rotary lijkt me nogal dicht op de Arduino te zitten. Misschien kan deze meer naar de buitenkant?
- Weet niet wat je wilt instellen met de potmeter,  maar als je het vaak wilt aanpassen is misschien versie met as makkelijk?
- Misschien dc jack naar links laten uitkomen zodat het niet in de weg zit met eventuele heat sink?
- Ik denk dat ik 78xx zie? Je zou kunnen overwegen deze te vervangen door DC-DC converters. Maar goed,  met kleine modules zoals deze past het zelfs met dezelfde voetprint  ;D

Maar super bezig!  (y)


Timo
Verzonden vanaf mijn desktop met Firefox

Cees Baarda

  • Offline Offline
  • Berichten: 167
  • hcc!m-IG
    • hcc!m
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #25 Gepost op: 27 maart 2016, 12:47:05 »
Hoi Timo,

wat reacties en gebruik gemaakt van een tip van je uit een ander draadje.
Citaat
Enige wat ik alleen nog denk als ik de print nu zie:
- De rotary lijkt me nogal dicht op de Arduino te zitten. Misschien kan deze meer naar de buitenkant?
Dat had ik al op een eerdere versie uitgeprobeerd (zie afb.). De rotary's, die ik besteld heb, zouden ruim moeten passen.


Citaat
- Weet niet wat je wilt instellen met de potmeter,  maar als je het vaak wilt aanpassen is misschien versie met as makkelijk?
Die is een beetje extra. Voor het testen is deze goed. Ik heb altijd wel een trimschroevendraaier klaar liggen. Als ik er een met een knop zou inzetten, kies ik waarschijnlijk voor een paneelpotmeter. Die moet dan toch met draadjes aangesloten worden.
Citaat
- Misschien dc jack naar links laten uitkomen zodat het niet in de weg zit met eventuele heat link?
- Ik denk dat ik 78xx zie? Je zou kunnen overwegen deze te vervangen door DC-DC converters. Maar goed,  met kleine modules zoals deze past het zelfs met dezelfde voetprint  ;D
Ik had in eerste instantie de jack naar links wijzen. Later bedacht ik  toch de DC_DC convertors te gaan gebruiken. Er zijn een aantal van  een groter model onderweg.
Ik denk er twee staand op te zetten. Daar heb ik de maten van nodig en die heb ik nog niet gevonden. Dan kunnen de eico en 4 x 100nF condensator en de twee regelaars weg.
Webmaster hcc!m - Microcontrollers (Atmel) : Arduino
Bezig met het maken van een apart ijkspoor t.b.v. Koploper of iTrain.

Fritsprt

  • Offline Offline
  • Berichten: 2615
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #26 Gepost op: 27 maart 2016, 12:54:34 »
Cees, mooi printontwerp!  Als ik het resultaat zie moet ik ook aan Kicad. Maar ik heb Eagle niet eens volledig onder de knie. Maar jouw resultaat mag er zijn na 3 weken je er in te hebben  verdiept.
 
Gr. Frits

Verstuurd vanaf mijn SM-G920F met Tapatalk

Groet Frits

Cees Baarda

  • Offline Offline
  • Berichten: 167
  • hcc!m-IG
    • hcc!m
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #27 Gepost op: 27 maart 2016, 14:57:01 »
Nou Frits,

3 weken betekent bij mij 21 dagen met gemiddeld een uur of 4 de tijd voor die klus. Ik zou me er niet op verkijken. Achter KiCad steekt een wat andere filosofie dan Eagle. Vooral in de koppeling tussen schema- en printmodules. Dat is in KiCad duidelijk omslachtiger. Van KiCad vind ik mooi dat je tijdens het print maken af en toe naar een 3D-representatie kunt kijken hoe e.e.a. er bij benadering uit gaat zien. Dat heeft me veel geholpen met de opbouw van deze print.

@iedereen
Is er belangstelling voor het schema en/of printlayout?

groet  Cees
« Laatst bewerkt op: 27 maart 2016, 14:58:38 door Cees Baarda »
Webmaster hcc!m - Microcontrollers (Atmel) : Arduino
Bezig met het maken van een apart ijkspoor t.b.v. Koploper of iTrain.

Fritsprt

  • Offline Offline
  • Berichten: 2615
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #28 Gepost op: 27 maart 2016, 15:09:39 »
Die 3D plaatjes zijn echt super mooi. Ik zelf blijf nog wel even met Eagle stoeien. ik ben wel nieuwsgierig naar het schema om te zien welke features je er in gebouwd hebt. Kunnen geïnteresseerden de print eventueel bij je bestellen?

Gr. Frits

Verstuurd vanaf mijn SM-G920F met Tapatalk

Groet Frits

Cees Baarda

  • Offline Offline
  • Berichten: 167
  • hcc!m-IG
    • hcc!m
Re: Rangeerpuzzel (Inglenook) met Arduino besturing
« Reactie #29 Gepost op: 27 maart 2016, 15:52:04 »
Dit is het schema. Je kunt het ook een paar posts terug lezen. Deze is wel heel erg gericht op mijn plannen met het baantje. Zoals in mijn reactie aan Timo zullen de 78xx regelaars nog vervangen worden door DC-DC converters. Dan gaat de print er nog anders uit zien.



Ga ik de printjes verkopen? Nee, want ik heb geen zin in de rompslomp er om heen. Ik ga dit project wel op mijn eigen website zetten (nog geen link beschikbaar). Daar komen dan behalve plaatjes ook de Gerber-files, die ik ga gebruiken voor iTead, te staan.

groet Cees.
Webmaster hcc!m - Microcontrollers (Atmel) : Arduino
Bezig met het maken van een apart ijkspoor t.b.v. Koploper of iTrain.