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

Onlangs gespot - gefotografeerd, de foto's door Rick
Vandaag om 20:43:00
roco maus 2 door henk
Vandaag om 20:31:33
De IJmuider spoorlijn - korte geschiedenis en plaatjes door IJmc
Vandaag om 20:20:33
Welke winkel voert deze merken? door haes
Vandaag om 20:10:44
44 Roco vs 44 Brawa door wob
Vandaag om 19:56:04
Rookgenerator wil niet werken, van piko 50652 = BR 93 in Rocrail door jack is back
Vandaag om 19:46:41
The R & J Colliery Ltd. 1:76 Brits. door Ronald69
Vandaag om 19:41:12
Veevervoer ss/ ns door Huup
Vandaag om 19:36:17
Tandwiel 13 tands tbv aandrijfasje door Hasenwald
Vandaag om 19:29:47
Mijn eerste H0-modeltreinbaan in aanbouw door Vroeger
Vandaag om 19:14:07
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door william_2
Vandaag om 18:35:47
Koppelingsmechanisme klemt? door Robert vh Prutsert
Vandaag om 18:06:07
Lenz 66 001 (artnr 30200) zit vast door Silvolde
Vandaag om 18:04:53
Ombouw/Pimpen Bolle neuzen door bollen neus
Vandaag om 17:43:08
Centraal Zwitserland: Trein, tram, kabelbaan en gondels. door MOVisser
Vandaag om 17:01:40
Mijnbouw Indonesië door MOVisser
Vandaag om 16:52:55
roco br24 door H0_trainiac
Vandaag om 16:14:18
Raadplaatje door grossraumwagen
Vandaag om 15:47:09
Toon hier je pas gereed gekomen (model-)spoorbouwsels ... door TonM
Vandaag om 15:22:02
De bouw van mijn modelbaan in Thailand door cor_b
Vandaag om 14:52:31
Digitale kraan Roco 46801 door Herb73
Vandaag om 11:30:48
Toon hier je nieuwe (model-) spooraanwinst(en)... door Besselspoor
Vandaag om 11:04:37
Da's Daz 2 door Huup
Vandaag om 10:56:45
Sfeer op je modelbaan door Hans Reints
Vandaag om 10:25:45
Au bord de la Cèze door Wim Vink
Vandaag om 10:10:40
Baanbouw Rehausen2 door Wim Vink
Vandaag om 08:50:08
Ovaalramer in messing. Schaal 0 door FritsT
Vandaag om 07:40:28
Modelspoorbaan van Einte door Lobomotion69
Vandaag om 02:31:41
Haandrecht materieel door orientexpress
08 September 2025, 22:15:31
NS 6000 (in schaal 0) door FritsT
08 September 2025, 22:00:26
  

Auteur Topic: Servo's aansturen met Arduino uno en PCA9685.  (gelezen 2797 keer)

haes

  • Offline Offline
  • Berichten: 836
  • Hellendoorn en NAM Schoonebeek in FiNe
Servo's aansturen met Arduino uno en PCA9685.
« Gepost op: 23 May 2021, 18:44:17 »
Hallo,

Ik ben bezig om mijn wissels en seinen via arduino en de PCA9685 te laten bewegen. Ik zie filmpjes op U tube om via JMRI en soortgelijke de seinen te verbinden en de wissels om te zetten. Maar, ik wil op mijn fremo modules de wissels en seinen omzetten met een schakelaar. Kan dat maw zijn er misschien bibliotheken voor ergens(adafruit of arduino). Wie o wie heeft ervaring hiermee en weet raad

Groet, Hans
Hellendoorn station en Schoonebeek Olieverlading in FiNescale/Fremo N normen

Ronaldk

  • Offline Offline
  • Berichten: 8843
    • Bouw Endstation der Linie: Bahnhof Poggendam
Re: Servo's aansturen met Arduino uno en PCA9685.
« Reactie #1 Gepost op: 23 May 2021, 19:35:56 »
Ja, waarom zou dat niet mogelijk zijn? Je kan de knopjes op de arduino aansluiten en deze als input gebruiken voor de opdrachten.

Groet Ronald.
Zijn we aan het bouwen? Ja! We zijn aan het bouwen: Ronald’s nieuwe project: Endstation der Linie: Bahnhof Poggendam!

haes

  • Offline Offline
  • Berichten: 836
  • Hellendoorn en NAM Schoonebeek in FiNe
Re: Servo's aansturen met Arduino uno en PCA9685.
« Reactie #2 Gepost op: 23 May 2021, 20:07:08 »
Ronald, je kan idd tot 3 servo's aansluiten met knoppen op de arduino, maar ik gebruik de PCA9685 erbij(daarmee krijgen de servo's een aparte 5 volt aansluiting) en kan ik er meer verbinden. De knoppen moet ik die dan op de analoge kant van de arduino aansluiten of op de PCA 9685?
Ik kan het nergens vinden helaas. Een schema zou welkom zijn

Gr Hans
Hellendoorn station en Schoonebeek Olieverlading in FiNescale/Fremo N normen

PaulRoman

  • Offline Offline
  • Berichten: 170
Re: Servo's aansturen met Arduino uno en PCA9685.
« Reactie #3 Gepost op: 23 May 2021, 21:21:20 »
Hallo Hans,

Als ik me goed herinner kun je op een PCA9685 16 servo's aansluiten. Communicatie via I2C: SDA (A4) en SCL (A5). Je hebt dan op een Arduino Uno nog 4 analoge ingangen over. Hier kun je tig schakelaars op aansluiten. Zie dit draadje: https://forum.beneluxspoor.net/index.php?topic=93603.msg3222130131#msg3222130131

Groet,

Paul
Schäßburg an der Kokel

Overet

  • Offline Offline
  • Berichten: 868
Re: Servo's aansturen met Arduino uno en PCA9685.
« Reactie #4 Gepost op: 23 May 2021, 21:23:37 »
Misschien heb je er gewoon plezier in om dit uit te zoeken, maar anderen hebben dat ook al gedaan en bieden een werkende oplossing aan tegen een vriendenprijs. Zoek eens naar Arcomora of Mardec. Niet bedoelt om je iets op te dringen, gewoon een tip.

Tom
Plannen voor baan tijdperk III naar DB-voorbeeld. Roco Multi-maus/Maus2/MausR3, Z21, Mardec, Koploper of Rocrail?

Hans1963

  • Offline Offline
  • Berichten: 467
  • Spoor 0, dat wordt wel wat!
Re: Servo's aansturen met Arduino uno en PCA9685.
« Reactie #5 Gepost op: 23 May 2021, 23:42:04 »
Hallo naamgenoot,

bekijk onderstaand filmpje van Tom Kvichak eens.
dit is denk ik wat je bedoeld, de servo's aansturen met drukknop of schakelaar. (incl arduino code)

https://www.youtube.com/watch?v=EUd4Fqot1Mc


vr. groet,  Hans

bask185

  • Offline Offline
  • Berichten: 5029
Re: Servo's aansturen met Arduino uno en PCA9685.
« Reactie #6 Gepost op: 24 May 2021, 08:36:09 »
Ronald, je kan idd tot 3 servo's aansluiten met knoppen op de arduino,
Nee, je kan tot wel 12 servo's aansturen met arduino's servo library, maar dan heb je geen genoeg ingangen meer voor alle schakelaars. Je hebt wel genoeg pinnen om op een Uno of Nano 10 servo's aan te sturen en om de schakelaars op aan te sluiten.


De knoppen moet ik die dan op de analoge kant van de arduino
Nee, maar het mag wel. De analoge pinnen kunnen ook als digitale pinnen fungeren. Je mag in principe elke pin gebruiken. Alleen A4 en A5 zijn nodig voor de PCA9685 zoal Paul opmerkte

aansluiten of op de PCA 9685?
Nee dit is niet mogelijk. De PCA9685 is alleen voor voor outputs zoals servomotors of leds bestemd.

Citaat
..maar anderen hebben dat ook al gedaan en bieden een werkende oplossing...
En precies daarom is de PCA een goede oplossing. Het aansluiten is makkelijk en adafruit heeft een goede library er voor geschreven.

Je hebt dan op een Arduino Uno nog 4 analoge ingangen over. Hier kun je tig schakelaars op aansluiten. Zie dit draadje: https://forum.beneluxspoor.net/index.php?topic=93603.msg3222130131#msg3222130131
Ja en nee. Dat hangt van je implentatie af. Sonnets schema is alleen bruikbaar voor moment schakelaars. Als je blijvende wipwap schakelaars wilt gebruiken kan je dat niet gebruiken. Je kan dus wel iets laten toggelen met een momentschakelaars, een push button oid. Wat je wel kan doen, is om de schakelaars te gaan multiplexen. Voor 12 schakelaars heb je dan 4 + 3 = 7 pinnen nodig. Maar persoonlijk vind ik dat moeilijk doen daar het simpelweg niet nodig is.

@Haes.
Nu je weet dat je tot 12 servo's op een arduino kan aansluiten. Heb je nu nog steeds behoefte om de PCA9685 te gebruiken? Het is geenzins een slechte keuze maar je moet even nagaan of je alle servo's op 1 centraal punt wilt aansluiten of dat je simpelweg meerdere arduino's gebruik. Ik heb namelijk nog nooit gezien dat iemand daadwerkelijk 16 servo's heeft aangesloten op 1 PCA voor praktisch gebruik.

Ik heb er thuis 1 gebruikt voor deze baan. Ik heb 7 wissels en ze liggen allemaal op elkaar gepropt. Ik heb dus nog 9 servo locaties beschikbaar. Achteraf gezien had ik de servo's ook direct met de nano kunnen aansturen.


Dan heb ik nog een vraagje. Is een schakelaar per wissel een vereiste? Je kan namelijk ook drukknopjes gebruiken om hele wisselstraten mee te leggen. Dan kan je met 1 knopje meerdere servo's tegelijk bedienen.  Je kan ook aan een NX manier van bediening denken waarbij je werkt met start en stop knopjes. En je kan ook seinen bijvoorbeeld automatisch op rood laten springen als een wissel verkeerd ligt. En je kan bijvoorbeeld ook nog iets doen met een bezetmelder die dan via de arduino een sein op rood kan zetten.

Voor een arduino Nano kan je dit base shield kopen waar je ook direct servo's op kan aansluiten. ( ff googlen op nano servo base oid)


We kunnen je nog beter advies geven als je je layout kan tonen met wissels en alle seinlocaties ed. Als je code vragen ben je bij mij igg bij het goede adres maar ik ben natuurlijk niet de enige  :P

Mvg,

Bas
Train-Science.com
Train-Science github
It ain't rocket science ;-)

haes

  • Offline Offline
  • Berichten: 836
  • Hellendoorn en NAM Schoonebeek in FiNe
Re: Servo's aansturen met Arduino uno en PCA9685.
« Reactie #7 Gepost op: 24 May 2021, 09:17:34 »


Hierbij mijn modulaire opzet. A en b zijn uitrij vleugelseinen en de 8 wissels die alle met servo's bediend moeten gaan worden. Op de zijkanten van de modules zou ik graag knoppen hebben om de wissels mee te bedienen

Gr Hans
Hellendoorn station en Schoonebeek Olieverlading in FiNescale/Fremo N normen

bask185

  • Offline Offline
  • Berichten: 5029
Re: Servo's aansturen met Arduino uno en PCA9685.
« Reactie #8 Gepost op: 24 May 2021, 12:06:04 »
Ik zou hier 2 arduino's gebruiken. Maar dat kan natuurlijk op meer dan 1 manier. De servo van module 1 zou ik met een verlengkabel doortrekken naar module 2. Module 2 en 3 krijgen dan elk hun eigen arduino. En wat ik hier dan gedaan heb, is dat ik module 2 en 3 heb verbonden via de Rx/Tx lijnen. Zo kunnen ze met elkaar informatie uitwisselen en in Arduino gaat dat heel makkelijk. Het schakelpaneel zou je dan alleen op module 2 aan kunnen sluiten. Dat is 1 manier. De andere manier is dat je je schakelpaneel naar beide bakken bekabeld. Maar het is lood om oud ijzer..



Wat ook van belang is, is hoe je je schakelpaneel voor ogen heb? Wil je een paneel(en) in je bakken bouwen? Of wil je een externe bouwen die je kan aansluiten met bijvoorbeeld een Rj45 of Rj12 kabeltje of zo'n veel-polige sub-D kabel?

En wil je ook nog ledjes in je schakelpaneel inbouwen.. niet omdat het moet maar omdat het kan  ;)

Mvg,

Bas
Train-Science.com
Train-Science github
It ain't rocket science ;-)

haes

  • Offline Offline
  • Berichten: 836
  • Hellendoorn en NAM Schoonebeek in FiNe
Re: Servo's aansturen met Arduino uno en PCA9685.
« Reactie #9 Gepost op: 24 May 2021, 16:41:05 »
Ja dat zou zeker kunnen, maar ik wil geen bedieningspaneel voor de bakken. Ik wil slechts een schakelaar die de wissels schakelt(aan de zijkant van de bakken) Dus W 1 heeft een schakelaar en op de middenbak zijn er 4. Naast een arduino heb ik ook van DTS een analoge servo aansturing. Die werkt wel met schakelaars, dus waarschijnlijk ga ik die gebruiken, als het met de arduino niet lukt

Bedankt voor het meedenken
Groet, Hans
Hellendoorn station en Schoonebeek Olieverlading in FiNescale/Fremo N normen

spock

  • Offline Offline
  • Berichten: 766
Re: Servo's aansturen met Arduino uno en PCA9685.
« Reactie #10 Gepost op: 24 May 2021, 17:24:39 »
Als je servo's met de PCA9685 wilt aansturen kun je de servo easing library gebruiken

https://github.com/ArminJo/ServoEasing

mvg spock

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Servo's aansturen met Arduino uno en PCA9685.
« Reactie #11 Gepost op: 24 May 2021, 18:30:55 »
Als je servo's met een schakelaar wilt aansturen, kun je een aangepaste servotester gebruiken.
« Laatst bewerkt op: 24 May 2021, 18:42:34 door 72sonett »
El Carrilet
"te dom om te poepen"
MH

bask185

  • Offline Offline
  • Berichten: 5029
Re: Servo's aansturen met Arduino uno en PCA9685.
« Reactie #12 Gepost op: 24 May 2021, 18:58:52 »
Citaat
Die werkt wel met schakelaars, dus waarschijnlijk ga ik die gebruiken, als het met de arduino niet lukt
Het zijn simpele programma's voor die arduino's. Stelt niet veel voor, kan ik ook zo voor je in elkaar flansen. Ik heb ook prima library gemaakt om servo's langzaam te laten bewegen.

Je kan om te beginnen deze sketch proberen.
#include <Servo.h>

//#define module2     // nu doen we module 2, als je module 3 wilt flashen, moet je de // tekens verplaatsen van 3 naar 2
#define module3

#if defined module2                                                           // deze lijsten worden gebruikt voor module 2
const int nServo = 4 ;                                                        // of hoeveel je er ook hebt.   
Servo point[nServo] ;                                                         // array met servo objecten
const int servoPin[nServo]          = { 3,4,5,6 } ;                           // pinnen voor de servo motors
const int inputPin[nServo]          = { A0, A1, A2, A3 } ;                    // pinnen voor de schakelaars
const int servoMinPositions[nServo] = {  80,  80,  80,  80 } ;                // mininum posities
const int servoMaxPositions[nServo] = { 100, 100, 100, 100 } ;                // maximum posities


#elif defined module3                                                         // deze lijsten worden gebruikt voor module 3
const int nServo = 6 ;                                                        // of hoeveel je er ook hebt.
Servo point[nServo] ;                                                         // array met servo objecten
const int servoPin[nServo]          = { 3,4,5,6,7,8 } ;                       // pinnen voor de servo motors
const int inputPin[nServo]          = { A0, A1, A2, A3, A4, A5 } ;            // pinnen voor de schakelaars
const int servoMinPositions[nServo] = {  80,  80,  80,  80,  80,  80 } ;      // mininum posities
const int servoMaxPositions[nServo] = { 100, 100, 100, 100, 100, 100 } ;      // maximum posities
#endif


void setup()
{
    for( int i ; i < nServo ; i ++ )
    {
        pinMode( inputPin[i], INPUT_PULLUP ) ;                                // initialiseer input pinnen
        point[i].attach( servoPin[i] ) ;                                      // initialiseer servomotors
    }
}

void loop()
{
    for( int i ; i < nServo ; i ++ )
    {
        byte minPos = servoMinPositions[ i ] ;
        byte maxPos = servoMaxPositions[ i ] ;
       
        if( digitalRead( inputPin[i] ) ) point[i].write( minPos ) ;           // input hoog -> servo min positie
        else                             point[i].write( maxPos ) ;           // input laag -> servo max positie
    }

    delay( 100 );
}

Het is geen eindproduct, maar deze sketch heeft geen externe libraries nodig en werkt verder 100%. Deze code kan je zo in de arduino IDE kopieren plakken en dan kan je met schakelaars servo's aansturen. Als je dan de posities of pinnen wilt aanpassen, hoef je alleen maar een getalletje in de lijsten aan te passen. De schakelaars kan je tussen input pin en ground verbinden. Je hebt geen extra weerstanden oid nodig.

Deze code is tevens geschikt voor zowel module 2 als module 3.

Mvg,

Bas

Train-Science.com
Train-Science github
It ain't rocket science ;-)