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

Roco modellen op aliexpress door Dirk
Vandaag om 22:42:04
Rondom Charlois door 741230
Vandaag om 22:33:40
Schroefkoppeling voor H0. door Bahn-AG
Vandaag om 22:33:36
Had de NS4903 rangeerlicht? door ruudns
Vandaag om 22:07:06
viessmann 4500 door Kees van der knijff
Vandaag om 21:46:44
mDDM, waarom 3 draaistellen? door Edwin2121992
Vandaag om 21:21:33
Die Sauerlandbahn - Tijdperk III door basjuh1981
Vandaag om 20:44:22
De bouw van station Laarbeek H0 door cor_b
Vandaag om 20:42:04
Ervaringen met veilingsites enzo (Marktplaats, Ebay, Catawiki, etc). door bask185
Vandaag om 20:27:24
TAMS PZS-2.2 door Ronald Halma
Vandaag om 20:24:29
Bouw NTM Stationsgebouw Lemmer door orientexpress
Vandaag om 20:19:40
Diorama Oelde Mittelweg Hp door neudalhausenstadbahn
Vandaag om 19:58:42
Eurostar in brand door Arjan6511
Vandaag om 19:29:41
Project seaside Germany door Ronald Halma
Vandaag om 19:26:57
Raadplaatje door grossraumwagen
Vandaag om 19:08:37
Bouw van tijdperk 1 HSM en SS rijtuigen door orientexpress
Vandaag om 19:08:30
Tips voor een natuurgetrouwe modelbaan door GerardvV
Vandaag om 18:58:42
Toon hier je nieuwe (model-) spooraanwinst(en)... door Rob Ellerman
Vandaag om 18:23:28
De overeenkomst tussen een Ovaalramer en een Motorpost. door Kees-Jan
Vandaag om 18:13:22
0n30 diorama: Sedona Verde River Canyon door Hans1963
Vandaag om 17:45:49
1865/68 aanleg kreekrakdam Bergen op Zoom / goes. door Mar-Cas
Vandaag om 17:43:54
Randstadrail viaduct Prins Bernhardlaan door Miniature Holland
Vandaag om 17:25:26
Randstadrail halte Voorburg ‘t Loo door Miniature Holland
Vandaag om 17:19:21
sein decoder Z21 10837 programeren door kar
Vandaag om 16:15:32
Bahnstrecke 5867 door Frank 123
Vandaag om 15:50:54
Da's Daz 2 door Huup
Vandaag om 15:33:01
Z21 Pro Link en Wifi door n-driver
Vandaag om 14:40:38
Duits transport, waar in NL? door grossraumwagen
Vandaag om 14:30:44
Mijn eerste H0-modeltreinbaan in aanbouw door Jelmer
Vandaag om 13:21:35
Korneschans. Een fictief Duits Nederlands grensstation. door Jelmer
Vandaag om 13:13:20
  

Auteur Topic: Arduino, aansturen servo’s voor deuren lokloods werkt niet.  (gelezen 7950 keer)

Fritsprt

  • Offline Offline
  • Berichten: 2611
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #15 Gepost op: 24 May 2021, 22:34:10 »
Hoi Jerry,

Volgens mij begrijpen we elkaar niet. Als jij mij een sketch het niet doet dan upload ik de blinksketch op de Arduino. En dan kijk ik of het ledje op D13 knippert. M.a.w. ik kijk of de sketch werkt. Zo ja, dan is de Arduino in orde.

Hoe is het met je massa verbinding tussen Arduino en servo?
Groet Frits

Menno

  • Offline Offline
  • Berichten: 3455
    • Mijn van-alles website
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #16 Gepost op: 24 May 2021, 22:41:28 »
Ik heb de potmeters op een stroken prin gesoldeert
de middelste baan door gekrabt
Krabben doe ik zelf niet meer aan. Dat heeft bij mij te vaak voor gelazer gezorgd omdat er dan een minuscule verbinding bleek te zijn door een kopersnipper of net niet geheel doorgekraste baan.
Een 4 mm boortje even met de hand over een gaatje halen om de boel van elkaar te scheiden werkt veel beter.
Controleer dit dus als eerste eens. Je zal de eerste niet zijn die het op het oog goedkeurt, maar in werkelijkheid last heeft van een doorverbinding die je praktisch niet kunt zien.

Ook de massa is van de arduino en de potmeters door verbonden
GOED lezen wat Fritsprt schrijft:

Heb je de massa van de servo en die van de arduino met elkaar verbonden?

Dit is een belangrijke, want de massa van de servo moet de massa van de Arduino niet 'zien': dit betekent simpelweg dat je niet de massa van je Arduino-print moet gebruiken, maar deze buiten de controller om moet leiden. Op deze manier voorkom je dat stoorpulsen je controller in de war sturen. En die kans is met servo's erg groot.

jerrytrein

  • Offline Offline
  • Berichten: 5935
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #17 Gepost op: 25 May 2021, 21:03:04 »
Heb het werkend (deels)
Eerst bleek een voeding de geest te hebben gegeven.
Nog een voeding naar de hemelen (waren telefoonladers)
Nu 1 voeding werkend voor de servo's
En een powerpack voor het board
Heb alles nu op een bread board gemonteerd

Volgende
er werkt maar een servo(op d9)
Dit is de schets die geladen is
op de bovenste val heb ik de getallen anders gezet
deze servo beweegt,maar niet naar 0 en dan 180 (deur open,dicht)

#include <Servo.h>

Servo myservo3;

Servo myservo5;

Servo myservo6;


int potpin = 0;
int potpin2 = 1;

int potpin3 = 2;

int val = 0;
int val2 = 0;

int val3 = 0;

void setup()
{

myservo3.attach(9);
myservo5.attach(10);

myservo6.attach(11);

}

void loop()
{

val = analogRead(potpin);
val = map(val, 0, 180, 0 , 176);

myservo3.write(val);

delay(25);

val2 = analogRead(potpin2);
val2 = map(val2, 0, 360, 0, 176);

myservo5.write(val2);

delay(25);

val3 = analogRead(potpin3);
val3 = map(val3, 3, 1023, 0, 175);

myservo6.write(val3);

delay(25);

}

NL-modelspoor

  • Offline Offline
  • Berichten: 1127
    • Windhoven
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #18 Gepost op: 25 May 2021, 21:45:06 »
Snap je wel wat de map functie doet? De analogeRead geeft een waarde tussen 3 en 1023 welke door de map functie wordt omgezet naar 0 tot 176 graden van de servo.
Wat probeerde je te bereiken met het aanpassen van de waardes?
Johan

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #19 Gepost op: 25 May 2021, 22:46:20 »
Zet de code tussen [ code]... [ /code] tags, dan is het beter leesbaar.
Gebruik const voor 'potpin', niet int.
Waarom 3 variabelen voor 'val'? 1 kan ook, het kan zelfs zonder, in 1 myservo.write(....) regel.
Waarom die 'delay(25)'?

Een deur draait maar 90°, waarom moet een servo dan 180° draaien?
« Laatst bewerkt op: 25 May 2021, 23:25:00 door 72sonett »
El Carrilet
"te dom om te poepen"
MH

jerrytrein

  • Offline Offline
  • Berichten: 5935
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #20 Gepost op: 25 May 2021, 23:10:10 »
Johan
ik ben een leek met deze materie,en heb zoals in het begin aangegeven de schets gewoon overgenomen
Sonett
Kan je bij de eerste tussen + aangeven wat je waar bedoelt+
de ene servo bewoog heen en weer,en nu is de slag groter
ik probeer enkel de servo met de pot meter van 0 naar 90 graden te draaien

moet snachts werken dus welterusten
reageer morgen weer

RobGood

  • Offline Offline
  • Berichten: 158
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #21 Gepost op: 25 May 2021, 23:12:29 »
delay?? Een delay in de loop? Dat kan gewoon never nooit niet....

MOVisser

  • Offline Offline
  • Berichten: 7386
    • Modelbouw in't algemeen. 3D printen etc..
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #22 Gepost op: 25 May 2021, 23:44:39 »
Volgens mij zijn de getallen die bij de servo hoek zijn opgenomen niet juist/verdienen aanpassing

Een delay is inderdaad in dit geval niet nodig.
Tenzij je de draai-snelheid van de servo wil beïnvloeden, maar dan staan ze niet op de juiste plaats en niet goed gedefinieerd.

Ronald Visser
Je kunt me vinden op diverse treinenbeurzen. Zaterdag 15 november ben ik weer in Houten.

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #23 Gepost op: 25 May 2021, 23:45:25 »
Zoiets:
#include <Servo.h>
Servo myservo3;
Servo myservo5;
Servo myservo6;

const int potpin1 = A1;    // analoge invoerpinnen voor potmeters
const int potpin2 = A2;
const int potpin3 = A3;

const int servopin3 = 9;  // digitale uitvoerpinnen voor servo's
const int servopin5 = 10;
const int servopin6 = 11;

int val;
// ---------------------------------
void setup() {
  pinMode(potpin1,INPUT);       // maak invoer voor potmeters
  pinMode(potpin2,INPUT);
  pinMode(potpin3,INPUT);
  pinMode(servopin3,OUTPUT); // maak uitvoer voor servo's
  pinMode(servopin5,OUTPUT);
  pinMode(servopin6,OUTPUT);

  myservo3.attach(servopin3);
  myservo5.attach(servopin5);
  myservo6.attach(servopin6);
}
// ---------------------------------
void loop() {
  val = analogRead(potpin1);          // val = 0..1023
  val = map(val, 0, 1023, 0 , 180);   // val = 0..180
  myservo3.write(val);   // draai servo naar hoek 'val'
  delay(25);

  val = analogRead(potpin2);
  val = map(val, 0, 1023, 0, 180);
  myservo5.write(val);
  delay(25);

  val = analogRead(potpin3);
  val = map(val, 0, 1023, 0, 180);
  myservo6.write(val);
  delay(25);

// of in één regel per servo
  myservo3.write(map(analogRead(potpin1), 0,1023,0,180));
  myservo5.write(map(analogRead(potpin2), 0,1023,0,180));
  myservo6.write(map(analogRead(potpin3), 0,1023,0,180));
// delay is niet nodig
}
« Laatst bewerkt op: 26 May 2021, 11:31:14 door 72sonett »
El Carrilet
"te dom om te poepen"
MH

spock

  • Offline Offline
  • Berichten: 769
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #24 Gepost op: 25 May 2021, 23:57:06 »

Dit is een belangrijke, want de massa van de servo moet de massa van de Arduino niet 'zien': dit betekent simpelweg dat je niet de massa van je Arduino-print moet gebruiken, maar deze buiten de controller om moet leiden. Op deze manier voorkom je dat stoorpulsen je controller in de war sturen. En die kans is met servo's erg groot.

Bedoel je echt dat je zwevende nullen wilt introduceren om storingen te voorkomen?
Ik zit pas 40 jaar in de electronica, maar dit is een nieuw gegeven.

mvg spock


Fritsprt

  • Offline Offline
  • Berichten: 2611
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #25 Gepost op: 26 May 2021, 01:14:59 »
Ik bedoelde juist te zeggen dat de massa's aan elkaar moeten omdat de stuurpuls anders zweeft en de servo nooit zal gaan draaien. Maar dat heeft TS inmiddels begrepen.
Groet Frits

bask185

  • Online Online
  • Berichten: 5105
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #26 Gepost op: 26 May 2021, 08:42:46 »
delay?? Een delay in de loop? Dat kan gewoon never nooit niet....
Het enige wat never nooit niet kan, is beklaag doen zonder ook met een alternatief te komen. Jerry heeft al tig keer aangegeven dat dit allemaal nieuw is voor hem. Dus om dan alleen maar te zeggen: "delay is fout" daar is hij niet bij geholpen.

+ een delay in de loop kan hartstikke prima maar dat hangt van de applicatie af. Als je arduino niks meer en niks minder hoeft te doen dan 1 enkel lampje te laten knipperen dan is delay() een prima oplossing. Het is immers minder tik werk dan die hele millis() constructie.

Citaat
ik probeer enkel de servo met de pot meter van 0 naar 90 graden te draaien
Omdat te doen, moet je de waardes in je map functie aanpassen je doet namelijk een waarde van 0-1023 om'map'pen naar 0-90. Dat is hoe de functie werkt.
val = map( val, 0, 1023, 0, 90) ;

Citaat
Gebruik const voor 'potpin', niet int.
Leg dan ook even uit waarom...

Citaat
Waarom 3 variabelen voor 'val'? 1 kan ook, het kan zelfs zonder, in 1 myservo.write(....) regel.
Waarom die 'delay(25)'?

Een deur draait maar 90°, waarom moet een servo dan 180° draaien?
Omdat hij niet beter weet. Je kan dit ook anders verwoorden. Je hebt het waarschijnlijk niet door, maar de manier waarop je je vragen stelt, suggereert eigenlijk maar een ding en dat is: 'je doet het niet goed, punt'. Je kan ook uitleggen waarom een delay() niet nodig is en je kan ook nog uitleggen waarom je normaliter geen delay zou moeten gebruiken en wat je in plaats van een delay wel kan gebruiken.

@Jerry.
Ik heb een library gemaakt voor precies dit soort use-cases. Wat je nu nog misschien niet weet, is dat je straks de deuren langzamer wilt laten bewegen en dat je het servo signaal wilt uitschakelen nadat de deuren goed gaan om zo schuddende en jitterende deurtjes te voorkomen.

Mijn library doet precies die 2 dingen voor je toevoegen. Dan hoef je zelf niet aan te klooien.
Ik heb ook een simpele debounce library gemaakt, om je te helpen bij het inlezen van een schakelaar. Een schakelaar kan tijdens het schakelen gaan denderen, de library lost dat op. Deze library zorgt er ook voor dat je je programma kan laten reageren op de momenten dat je je schakelaar beweegt.

Ik heb overigens een alternatief voor je delay gemaakt. Een delay wordt normaliter als 'kwaadaardig' beschouwd omdat je feitelijk je arduino forceert om helemaal niks te doen. Als je arduino niks anders te doen heb, maakt het niet uit. Moet je Arduino nog meer taken doen, dan pas vormt het een probleem. Om dat probleem op te lossen, gebruikt men vaak de millis() functie. Daar kan je meer over lezen hier. Ik heb zelf 2 macro's gemaakt die gebruik maken van millis().

De sketch met deze libraries ziet er dan zo uit.
#include "servoSweep.h"
#include "Debounce.h"


// alle code wat je tussen REPEAT_MS() en END_REPEAT zet wordt om de x ms uitgevoerd zonder programma te blokkeren.
#define REPEAT_MS(x)    {
                            static uint32_t previousTime ;
                            uint32_t currentTime = millis() ; \
                            if( currentTime - previousTime >= x ) \
                            {   \
                                previousTime = currentTime ;
                         
#define END_REPEAT          } \
                        }


const int swPin1 = 3 ;
const int servoPin1 = 5 ;
const int servoPin2 = 6 ;

Debounce sw1( swPin1 ) ;
//                   servoPin,min,max,off,speed (grotere speed = langzamere beweging)
ServoSweep myServo1( servoPin1, 0 , 90, 1, 30 ) ;
ServoSweep myServo2( servoPin2, 0 , 90, 1, 30 ) ;


void setup()
{
    myServo.begin() ;
}

void loop()
{
    REPEAT_MS( 20 ) ;
    sw1.debounceInputs() ;                      // doe dit elke 20ms, ont'dentert de schakelaar.
    END_REPEAT
   
    byte buttonState = sw1.readInput() ;        // doe dit continu, lees knopje in
   
    if( buttonState == RISING )
    {
        myServo1.setState( 1 ) ;                // stuur naar 90 graden
        myServo2.setState( 1 ) ;
    }
    if( buttonState == FALLING )
    {
        myServo1.setState( 0 ) ;                // stuur naar 0 graden
        myServo2.setState( 0 ) ;
    }
    //N.B. je zou de deuren ook kunnen laten toggelen met een drukknopje
   
    myServo1.sweep() ;                          // stuurt de servo's aan met opgegeven snelheid en..
    myServo2.sweep() ;                          // .. schakelt ze af als ze hun eindposities bereikt hebben.
}

Voordat je dit kan compileren, moet je eerst m'n libraries downloaden. Je vindt ze hier. Je moet de servoSweep.cpp, ServoSweep.h, debounceClass.cpp en debounceClass.h downloaden en in dezelfde folder plaatsenals waar je .ino staat.

Deze sketch gebruikt 1 schakelaar als input om 2 servo's mee aan te sturen. Nogmaals, de servo's kan je hierbij regelen in snelheid. En ze worden keurig afgeschakeld nadat ze hun positie bereikt hebben.

Mvg,

Bas



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

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #27 Gepost op: 26 May 2021, 10:14:22 »
... de manier waarop je je vragen stelt, suggereert eigenlijk maar een ding en dat is: 'je doet het niet goed, punt'.
Ik weet niet wat de overwegingen waren om het te doen zoals het gedaan is, daarom vraag ik waarom.

Als je iemand iets duidelijk wil maken is het beter om vragen te stellen dan om hem te vertellen wat/hoe het gedaan moet worden.
El Carrilet
"te dom om te poepen"
MH

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #28 Gepost op: 26 May 2021, 10:42:19 »
... ik merk net dat het voor een analogRead niet uitmaakt of je pin 0 of pin A0 invult.
Weet je dat zeker?  Pin 0 is een andere dan A0, voor het compileren maakt het niet uit, een analogRead van een digitale pin geeft geen compileerfout, maar bij uitvoeren van het programma zal het niet goed gaan, pinnen 0 en 1 zijn RX en TX.

De snelheid waarmee de servo's en daarmee de deuren bewegen, bepaal je zelf door de snelheid waarmee je aan de potmeters draait, daar is geen delay voor nodig. De servo's/deuren bewegen synchroon met de potmeters. Ik zou daarom ook helemaal geen Arduino gebruiken maar servotesters.

Een locloods heeft doorgaans twee deuren per spoor, die deuren zullen tegelijk open/dicht gaan, je hebt dus ook twee servo's per spoor nodig. Voor het programma maakt dat niet uit, je kunt twee servo's parallel op één uitgang aansluiten en die verdraaien dan tegelijkertijd.
« Laatst bewerkt op: 26 May 2021, 15:12:53 door 72sonett »
El Carrilet
"te dom om te poepen"
MH

Hennik

  • Offline Offline
  • Berichten: 155
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #29 Gepost op: 26 May 2021, 12:28:31 »
Zeker weten deed ik het ook niet, maar het stond zo in de tutorial uit de eerste post en heb empirisch vastgesteld dat het kan (in mijn geval met 4 en A4)
En hier vind ik er een artikeltje over: https://electronics.stackexchange.com/questions/67087/analogread0-or-analogreada0
Ik zou ook adviseren om gewoon A0 te gebruiken. Veel duidelijker.
« Laatst bewerkt op: 26 May 2021, 12:34:16 door Hennik »