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

Rangeren met een pec door barry1972
Vandaag om 00:43:32
Materieel verzameling van Michiel(NDS) door neudalhausenstadbahn
Vandaag om 00:38:22
Diorama Oelde Mittelweg Hp door neudalhausenstadbahn
Vandaag om 00:33:11
Stalen D 4 deurs spoor 0 door roadster36
Vandaag om 00:22:24
Big Scale Trains - NS SLT in H0 door Remco vM
Vandaag om 00:10:32
ICR-rijtuigen, voor welk merk ga je? LSmodels, PBmodels, Exact Train of Piko? door Chiel
29 October 2025, 23:02:54
De overeenkomst tussen een Ovaalramer en een Motorpost. door FritsT
29 October 2025, 22:52:03
PPM kranen van Strukton door edwin1974
29 October 2025, 22:32:16
Piko NS 5/600 Hippel 2025 door Ronald A.
29 October 2025, 22:30:31
Hulp gezocht omgeving Drachten door Reinout van Rees
29 October 2025, 21:57:13
Bouw van tijdperk 1 HSM en SS rijtuigen door MathynK
29 October 2025, 21:32:56
Bruggen-IG - brug over de Poldervaart Schiedam/Kethel door Forever Rocofan
29 October 2025, 21:30:55
PB Models, ICR-rijtuigen door Mcn1986
29 October 2025, 21:11:57
diorama, voor lange treinen. door Mark D.
29 October 2025, 20:52:52
mDDM, waarom 3 draaistellen? door Jeroen Water
29 October 2025, 20:51:24
Rondom Charlois door Alewijn
29 October 2025, 20:46:52
De IJmuider spoorlijn - korte geschiedenis en plaatjes door Rick
29 October 2025, 20:40:23
Schroefkoppeling voor H0. door Scratchbuilt
29 October 2025, 19:58:28
De bouw van mijn modelbaan in Thailand door Eric B
29 October 2025, 19:51:55
Vollmer ringloods deuren door Freddy
29 October 2025, 19:51:38
Minstens 5 jaar geen treinverkeer Groningen-Leer [D] door saskia
29 October 2025, 19:49:54
Ombouw/Pimpen Bolle neuzen door bollen neus
29 October 2025, 19:44:15
Arnold N 2543 rookgenerator door Gabriël Bergsma
29 October 2025, 19:30:32
Toon hier je nieuwe (model-) spooraanwinst(en)... door RobbertJan
29 October 2025, 19:30:19
BNLS-Module: "Rvbr-Btk, Ringvaartbrug Haarlemmermeer nabij Buitenkaag" NS H0 door NS264
29 October 2025, 19:26:55
Seinen programeren met de Pro-Link naar de 10837 dec. door n-driver
29 October 2025, 19:25:37
Bentheimer Eisenbahn, gisteren, vandaag en morgen. door Hans Reints
29 October 2025, 19:10:14
Scandinavië-IG: Skandinavisk bangården. Voor op Scandinavië gerichte spoorzaken door RikM
29 October 2025, 18:42:49
Onlangs gespot - gefotografeerd, de links door Silvolde
29 October 2025, 17:25:10
Ervaringen met veilingsites enzo (Marktplaats, Ebay, Catawiki, etc). door Michiel2
29 October 2025, 16:50:22
  

Auteur Topic: Arduino sketch voor aansturen servo  (gelezen 7722 keer)

Hans Mol

  • Offline Offline
  • Berichten: 259
    • Echaztalbahn 2.0
Re: Arduino sketch voor aansturen servo
« Reactie #15 Gepost op: 28 July 2017, 10:50:41 »
Neen. Als je de snelheid waarmee de servo beweegt wilt beïnvloeden wordt het en stuk complexer.
Om dat toe te passen moet je de materie goed begrijpen en dat is lastig via dit medium...

Begrijpen we elkaar goed! Met het instellen van de snelheid bedoel ik de notatie in de sketch (dus eenmalig bepalen van de snelheid) en niet dat je de snelheid van de servo tijdens het proces nog aan kan passen. Dus delay(15) wordt bijvoorbeeld delay(100). Dit werkt in de sweep sketch van Arduino wel.
« Laatst bewerkt op: 28 July 2017, 10:54:05 door Hans Mol »

HansQ

  • Offline Offline
  • Berichten: 2040
  • Daar waar de rook is, is de kortsluiting...
Re: Arduino sketch voor aansturen servo
« Reactie #16 Gepost op: 28 July 2017, 12:38:17 »
Ehh. Nee. Zo werkt het niet... Zonder maatregelen wordt de snelheid van de servo bepaald door de mechanische eigenschappen van de servo zelf.
HansQ, RailClub Utrecht
spoor N modulebouw, electronica, Selectrix

MOVisser

  • Offline Offline
  • Berichten: 7389
    • Modelbouw in't algemeen. 3D printen etc..
Re: Arduino sketch voor aansturen servo
« Reactie #17 Gepost op: 28 July 2017, 12:53:10 »
Het aanbrengen van een extra vertraging (rondsels/tandwieletje etc.) is ook een oplossing.
Ja, dat is dan wel een mechaniekje.

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 sketch voor aansturen servo
« Reactie #18 Gepost op: 28 July 2017, 13:54:10 »
  ...
  servo.write(hoek); // update de servo hoek
  if (hoek == 180) {
    digitalWrite(led, 1); // LED aan
  }
  else {
    digitalWrite(led, 0); // LED uit
  }

  // toevoegen
  delay (1000);    // geef servo 1 sec om te verdraaien voordat indrukken knop weer effect heeft
  //
}
El Carrilet
"te dom om te poepen"
MH

HansQ

  • Offline Offline
  • Berichten: 2040
  • Daar waar de rook is, is de kortsluiting...
Re: Arduino sketch voor aansturen servo
« Reactie #19 Gepost op: 28 July 2017, 15:47:44 »
Dit heeft geen zin... de servo wacht nergens op, het enige wat je hiermee bereikt is dat de knop slecht reageert.
HansQ, RailClub Utrecht
spoor N modulebouw, electronica, Selectrix

Hans Mol

  • Offline Offline
  • Berichten: 259
    • Echaztalbahn 2.0
Re: Arduino sketch voor aansturen servo
« Reactie #20 Gepost op: 28 July 2017, 19:53:25 »
Het is opgelost. Ik heb een prima sketch en uitleg gevonden op Fritzing.org dat precies doet wat ik wilde. Heb er even een filmpje van gemaakt en op YT geplaatst.

https://youtu.be/9UekVBVndJg

De sketch met uitleg vind je hier:

http://fritzing.org/projects/arduino-servo-motor-control-with-pushbutton

Het enige wat ik nog moet uitvogelen is hoe ik de stand van de servo kan bewaren wanneer de stroom er af is geweest. Moet iets zijn met een functie EEPROM.
Mogelijk iemand daar nog een advies in?

Voor zover iedereen bedankt voor jullie adviezen.

Hans

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Arduino sketch voor aansturen servo
« Reactie #21 Gepost op: 28 July 2017, 20:14:44 »
Citaat van: HansQ
Dit heeft geen zin... de servo wacht nergens op, het enige wat je hiermee bereikt is dat de knop slecht reageert.
Als de knop langer dan 30 msec ingedrukt wordt, laat het programma de servo draaien, die heeft tijd nodig om naar de andere stand te draaien, maar het programma is zo snel dat er direct al weer naar de knop gekeken wordt en als die nog steeds ingedrukt is, wordt de servo alweer terug gedraaid.
De servo moet dus even tijd krijgen om te verdraaien, b.v. 1000 msec,  en er moet even gewacht worden tot de knop losgelaten is, tenzij de  servo.write(hoek)   routine het programma al genoeg vertraagt.

Maar het is een non-probleem, de OP heeft blijkbaar al wat beters gevonden...
« Laatst bewerkt op: 28 July 2017, 20:20:28 door 72sonett »
El Carrilet
"te dom om te poepen"
MH

Tjalling

  • Offline Offline
  • Berichten: 3490
    • modulebaan.nl
Re: Arduino sketch voor aansturen servo
« Reactie #22 Gepost op: 28 July 2017, 21:02:55 »
Hallo allemaal,

Of de gevonden oplossing beter is, kan ik niet beoordelen. In de gevonden oplossing wordt de servo afgeremd door deze per stap aan te sturen, en iedere stap een vertraging mee te geven.
Ik ben benieuwd of het daarmee mogelijk wordt de servo ook soepel te laten draaien, op lage snelheden, of dat het geheel toch schokkerig wordt.

Groet,
Tjalling
modulebaan.nl

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Arduino sketch voor aansturen servo
« Reactie #23 Gepost op: 28 July 2017, 22:31:38 »
Ja, ik denk dat het schokkerig wordt hoewel het er in het filmpje wel goed uitziet.
De for .. lus wordt in 180 stappen doorlopen en in iedere stap wordt 15 msec gepauzeerd.
De hele beweging is dan tenminste 15 * 180 = 2700 msec, plus wat overhead  = +/- 3000 msec = 3 seconden.
« Laatst bewerkt op: 28 July 2017, 22:34:39 door 72sonett »
El Carrilet
"te dom om te poepen"
MH

Hans Mol

  • Offline Offline
  • Berichten: 259
    • Echaztalbahn 2.0
Re: Arduino sketch voor aansturen servo
« Reactie #24 Gepost op: 29 July 2017, 08:23:16 »
en in iedere stap wordt 15 msec gepauzeerd.

Hoi 72sonett.  In de download van het script staat een delay van 15ms. Ik heb deze aangepast naar 100ms. Dat is wat je ziet op mijn filmpje. Misschien is het schokkerig maar dat is voor mij niet zichtbaar. Ik ben voor zover blij met het resultaat.  Nu nog iets verzinnen dat de stand van de servo onthouden wordt bij een stroomonderbreking.

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Arduino sketch voor aansturen servo
« Reactie #25 Gepost op: 29 July 2017, 12:12:58 »
Citaat
... Nu nog iets verzinnen dat de stand van de servo onthouden wordt bij een stroomonderbreking.
Zoiets?
(Compileert OK maar ongetest.)

#include <Servo.h>
#include <EEPROM.h>
const int servoPin  = 8;   // Servo pin
const int buttonPin = 9;   // Pushbutton pin
const int LEDpin    = 13;  // LED pin op Arduino pcb
const byte del = 100;      // vertraging servo
int directionState = 0;
Servo myservo;
byte pos;

// -------------------------------------------------
void draaiservo (byte hoek) {
  myservo.write(hoek);
  EEPROM.write(1,hoek); // schrijf servopositie naar adres 1 van de eeprom
  delay(del);           // wacht op servo
}
// -------------------------------------------------
void setup() {
   myservo.attach(servoPin);
   pinMode (buttonPin,INPUT);
   pos = constrain (EEPROM.read(1), 0, 180); // lees oude servopositie uit adres 1 van de eeprom
   draaiservo(pos);    // draai naar oude positie binnen bereik 0..180°
 }
// -------------------------------------------------
void loop(){
  digitalWrite (LEDpin, directionState);    // LED aan of uit
  if (digitalRead (buttonPin) == HIGH)      // alleen als knop ingedrukt
    if (directionState == 0) {              // stand is 0, draai servo naar 180°
       for (pos = 0; pos < 180; pos += 1)
         draaiservo(pos);
       directionState = 1;                  // stand is nu 1 (180°), volgende keer naar 0° draaien
     }
    else { //(directionState == 1)          // stand is 1 (=180°), draai servo naar 0°
      for (pos = 180; pos>=1; pos -=1)
        draaiservo(pos);
      directionState = 0;                   // stand is nu 0, volgende keer naar 180° draaien 
    }
}

Maar eigenlijk hoef je de stand niet op te slaan want de servo blijft bij onderbreking gewoon in de oude stand staan en draait bij de eerstvolgende druk op de knop altijd naar 0°.
« Laatst bewerkt op: 29 July 2017, 13:39:12 door 72sonett »
El Carrilet
"te dom om te poepen"
MH

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4655
Re: Arduino sketch voor aansturen servo
« Reactie #26 Gepost op: 29 July 2017, 13:08:32 »
@Hans Mol, je weet dat ik je reactie 6 ook al naar een prima werkende sketch had aangedragen? ;) Werkt voor 4 servo's. Toegegeven, ik had het makkelijker kunnen maken met een linkje (en beschrijving). Niet dat ik per se mijn software wil pushen maar dan was de discussie dan afgelopen geweest  ;D


Timo
« Laatst bewerkt op: 29 July 2017, 13:17:25 door Timo »
Verzonden vanaf mijn desktop met Firefox

Hans Mol

  • Offline Offline
  • Berichten: 259
    • Echaztalbahn 2.0
Re: Arduino sketch voor aansturen servo
« Reactie #27 Gepost op: 29 July 2017, 13:58:03 »
Hoi 72sonett,

Ik heb je sketch zojuist ingevoerd. Het werkt prima maar inderdaad 1 kant op . In de 180 graden stand gaat hij na een contactherstel bij een druk op een knop snel naar de 0 stand. Vanuit de 0-stand werkt het prima na een contactherstel.
Bedankt voor alle moeite die je er voor doet. Ik ben er nu al erg blij mee.
Is het misschien ook te regelen dat hij ook in de 180 graden stand na een contactherstel en een druk op de knop langzaam naar de 0 gaat? Misschien vraag ik teveel maar weet dat je mij inmiddels al heel blij gemaakt hebt.
Het is in ieder geval voor mij een prima werkbare situatie.

PS: wanneer de stroom er weer op komt zie je de servoarm wel even op en neer gaan. Is dat wat men noemt het denderen??
Is daar iets aan te doen??

Groeten,

Hans
« Laatst bewerkt op: 29 July 2017, 14:11:32 door Hans Mol »

MOVisser

  • Offline Offline
  • Berichten: 7389
    • Modelbouw in't algemeen. 3D printen etc..
Re: Arduino sketch voor aansturen servo
« Reactie #28 Gepost op: 29 July 2017, 14:02:52 »
Wel "ouderwets" >>> een vertragings mechaniekje  ??

Ronald
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 sketch voor aansturen servo
« Reactie #29 Gepost op: 29 July 2017, 14:59:46 »
Citaat
... Is het misschien ook te regelen dat hij ook in de 180 graden stand na een contactherstel en een druk op de knop langzaam naar de 0 gaat?

Probeer deze eens:

#include <Servo.h>
#include <EEPROM.h>
const int servoPin  = 8;   // Servo pin
const int buttonPin = 9;   // Pushbutton pin
const int LEDpin    = 13;  // LED pin op Arduino pcb
const byte del = 100;      // vertraging servo
int directionState;
Servo myservo;
byte pos;

// -----------------------------------[ subroutines ]--------------
void draaiservo (byte hoek) {
  myservo.write(hoek);         // draai servo naar opgegeven hoek
  EEPROM.write(1,hoek);        // schrijf servohoek naar adres 1 van de eeprom
  delay(del);                  // wacht op servo
}
// -----------------------------------[ init ]--------------
void setup() {
byte oudestand;
   pinMode (servoPin,OUTPUT);
   pinMode (buttonPin,INPUT);
   pinMode (LEDpin,OUTPUT);
   myservo.attach(servoPin);
   oudestand = constrain(EEPROM.read(1), 0, 180);    // lees oude servopositie uit adres 1 van eeprom
   for (pos = oudestand; pos = 0; pos--)       // draai servo langzaam naar 0°
     draaiservo(pos);
   directionState = 0;
 }
// ------------------------------------[ hoofdprog ]-------------
void loop(){
  digitalWrite (LEDpin, directionState);    // LED aan of uit
  if (digitalRead (buttonPin) == HIGH)      // alleen als knop ingedrukt
    if (directionState == 0) {              // stand is 0, draai servo naar 180°
       for (pos = 0; pos = 180; pos++)
         draaiservo(pos);
       directionState = 1;                  // stand is nu 1 (180°), volgende keer naar 0° draaien
     }
    else { //(directionState == 1)          // stand is 1 (=180°), draai servo naar 0°
      for (pos = 180; pos = 0; pos--)
        draaiservo(pos);
      directionState = 0;                   // stand is nu 0, volgende keer naar 180° draaien 
    }
}
// -------------------------------------- [ einde ] ------------

Contactdender van de schakelaar maakt hier niet uit, bij de eerste keer 'hoog' van de schakelaar gaat de servo draaien, tegen de tijd dat de servo klaar is, is de schakelaar al losgelaten of uitgedenderd.

Het bewegen van de servo bij inschakelen ligt aan de servo, zie ook de discussie hierover in het Mardec topic.
El Carrilet
"te dom om te poepen"
MH