Analoog Servo's Schakelen met Arduino - K.I.S.S.

Hier kunnen we onze mededelingen kwijt en algemene onderwerpen plaatsen.
Gebruikersavatar

Onderwerp starter
Paul_DMV
Kleinserie/Commercieel
Berichten: 739
Lid geworden op: 30 nov 2009 15:03

Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Paul_DMV »

Onder het motto Keep it simple, stupid

Een servo schakelen zonder PC of DCC dingen. Enkel afhankelijk van je voeding die aan of uit staat...weg met crashende PC's, koploper programma's die niet geconfigureerd zijn etc..

Wat heb je nodig?

1. Een arduino nano - kost ongeveer 3 euro (per 6 tot 7 wissels)
im120411003_8.jpg
im120411003_8.jpg (14.78 KiB) 11757 keer bekeken
2. Een nano shield - kost ongeveer 3 euro (per 6 tot 7 wissels)
1380902-1.jpg
1380902-1.jpg (24.07 KiB) 11757 keer bekeken
3. een digitale servo - Emax ES08DE - kost ongeveer 4 euro per wissel
download.jpg
download.jpg (5.82 KiB) 11762 keer bekeken
4. een tuimelschakelaar of relais - kost ongeveer 0,5 tot 3 euro per wissel

Uiteindelijk bij 6 wissels dus 5 a 6 euro voor de aandrijving excl. montage beugeltje, schroeven en verenstaal.

Hoe werkt het?

1. Installeer de arduino software op je pc om de code in te laden met USB. http://arduino.cc/en/main/software en installeer ook de VarSpeedServo.h library via link of op aanvraag https://github.com/netlabtoolkit/VarSpeedServo.
[sketch=>bibliotheek importeren=>etc]
arduino.png
arduino.png (41.51 KiB) 11756 keer bekeken
2. Verbind de juiste nummer digitale ingang met de common van het relais of tuimelschakelaar. Dus pin 1 naar relais 1 voor servo 1 etc.

3. Verbind de GND, oftewel 0 Volt met de NC of één van buitenste pinnen van de schakelaar. Je kunt later nog de NC of NO omwisselen indien gewenst.

4. Verbind de 5V met 10kOhm naar de NO of andere poot van de schakelaar. (zonder weerstand loopt er te veel stroom door de arduino, je maakt dan sluiting)

5. Laad de code in op de aruino. Code volgt, of op aanvraag.

6. Steek de servo in op 7/tm13. Voor servo 1 gebruik je pin 7 etc [dus servo n= pin n+6]. Servo 0 op 13 (dit is de 7e servo indien gebruikt)

7. Stel de middenstand van de servo goed af. Standaard staat de code op Low= 85 graden High is 95 graden. Dit kun je aanpassen maar hou 90 graden altijd in het bereik omdat dit de 0 stand is bij opstart, doe je dit niet heb je kans op schade.

8. Ga nu de High en Low fine tunen zodat de servo net ver genoeg komt.

9. klaar!

Belangrijk! Bij uploaden van de software kun je het beste de arduino even uit de shield trekken of alle servo's ontkoppelen om gekke sweeps te voorkomen. Dit gebeurd niet altijd, maar kan voorkomen en dan buigt je pen krom.

Code volgt in volgende bericht.

Zie afbeelding voor schakeling.

Afbeelding
Untitled by Paul's treinfoto
Laatst gewijzigd door Paul_DMV op 16 feb 2015 12:16, 8 keer totaal gewijzigd.


Kijk ook eens op:
http://www.facebook.com/3dprintN/

Wil je de bestellijst /catalogus van 3dprintN magneetkoppelingen mail naar:
contact.3dprintn@gmail.com

N-spoor in regio Delft? =>www.d-mv.nl of www.facebook.com/delftsemodelbouwvereniging
Gebruikersavatar

Onderwerp starter
Paul_DMV
Kleinserie/Commercieel
Berichten: 739
Lid geworden op: 30 nov 2009 15:03

Re: Analoog Servo schakelen met Arduino - K.I.S.S.

Bericht door Paul_DMV »

Dit is de standaard code, per arduino kun je de uiteindelijke configuratie apart opslaan en later op elke vervangede arduino inladen

Lijkt allemaal heel ingewikkeld, maar gewoon nergens aan komen, alleen de eerste stukjes zijn per servo nummer en daar kan je dan alleen de * en ** aanpassen. Succes!
#include <VarSpeedServo.h>
// Copyright2015 - SERVO SWITCH CONTROL - SSC - PaulDMV
// a maximum of seven servo objects can be installed on the nano
// a maximum of eight servo objects can be created
// only change ** lines (speedx, range_x_low and range_x_high)
// install the VarSpeedServo.h Library before use!

VarSpeedServo myservo0; // create servo object to control a servo, connected to pin 13
int pos0 = 0; // variable to store the servo position
int button0 = 0; // The button will be on Pin 0
int speed0= 2; // **variable to store the servo speed
int delay0= 50; // sets the delay time to reach position
int range_0_low= 85; // **sets the lower limit
int range_0_high= 95 ; // **sets the uper limit
int range_0_diff= range_0_high - range_0_low; //diffence to go to position

VarSpeedServo myservo1; // create servo object to control a servo, connected to pin 7
int pos1 = 0; // variable to store the servo position
int button1 = 1; // The button will be on Pin 1
int speed1= 2; // **variable to store the servo speed
int delay1= 50; // sets the delay time to reach position
int range_1_low= 85; // **sets the lower limit
int range_1_high= 95 ; // **sets the uper limit
int range_1_diff= range_1_high - range_1_low; //diffence to go to position

VarSpeedServo myservo2; // create servo object to control a servo, connected to pin 8
int pos2 = 0; // variable to store the servo position
int button2 = 2; // The button will be on Pin 2
int speed2= 2; // **variable to store the servo speed
int delay2= 50; // sets the delay time to reach position
int range_2_low= 85; // **sets the lower limit
int range_2_high= 95; //**sets the uper limit
int range_2_diff= range_2_high - range_2_low; //diffence to go to position

VarSpeedServo myservo3; // create servo object to control a servo, connected to pin 9
int pos3 = 0; // variable to store the servo position
int button3 = 3; // The button will be on Pin 3
int speed3= 2; // **variable to store the servo speed
int delay3= 50; // **sets the delay time to reach position
int range_3_low= 85; // **sets the lower limit
int range_3_high= 95; //**sets the uper limit
int range_3_diff= range_3_high - range_3_low; //diffence to go to position

VarSpeedServo myservo4; // create servo object to control a servo, connected to pin 10
int pos4 = 0; // variable to store the servo position
int button4 = 4; // The button will be on Pin 4
int speed4= 2; // **variable to store the servo speed
int delay4= 50; // sets the delay time to reach position
int range_4_low= 85; // **sets the lower limit
int range_4_high= 95; //**sets the uper limit
int range_4_diff= range_4_high - range_4_low; //diffence to go to position

VarSpeedServo myservo5; // create servo object to control a servo, connected to pin 11
int pos5 = 0; // variable to store the servo position
int button5 = 5; // The button will be on Pin 5
int speed5= 2; // **variable to store the servo speed
int delay5= 50; // sets the delay time to reach position
int range_5_low= 85; // **sets the lower limit
int range_5_high= 95; //**sets the uper limit
int range_5_diff= range_5_high - range_5_low; //diffence to go to position

VarSpeedServo myservo6; // create servo object to control a servo, connected to pin 12
int pos6 = 0; // variable to store the servo position
int button6 = 6; // The button will be on Pin 6
int speed6= 2; // **variable to store the servo speed
int delay6= 50; // sets the delay time to reach position
int range_6_low= 85; // **sets the lower limit
int range_6_high= 95; //**sets the uper limit
int range_6_diff= range_6_high - range_6_low; //diffence to go to position

void setup()
{
myservo1.attach(7); // attaches the servo on pin 7 to the servo object
pinMode(pos1, OUTPUT);
pinMode(button1, INPUT);
digitalWrite (button1, LOW);

myservo2.attach(8); // attaches the servo on pin 8 to the servo object
pinMode(pos2, OUTPUT);
pinMode(button2, INPUT);
digitalWrite (button2, LOW);

myservo3.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(pos3, OUTPUT);
pinMode(button3, INPUT);
digitalWrite (button3, LOW);

myservo4.attach(10); // attaches the servo on pin 10 to the servo object
pinMode(pos4, OUTPUT);
pinMode(button4, INPUT);
digitalWrite (button4, LOW);

myservo5.attach(11); // attaches the servo on pin 11 to the servo object
pinMode(pos5, OUTPUT);
pinMode(button5, INPUT);
digitalWrite (button5, LOW);

myservo6.attach(12); // attaches the servo on pin 12 to the servo object
pinMode(pos6, OUTPUT);
pinMode(button6, INPUT);
digitalWrite (button6, LOW);

myservo0.attach(13); // attaches the servo on pin 13 to the servo object
pinMode(pos0, OUTPUT);
pinMode(button0, INPUT);
digitalWrite (button0, LOW);
}
void loop()
{
if (digitalRead(button0) == LOW)
for(pos0 = range_0_low; pos0 < range_0_high; pos0 += range_0_diff) // goes from 85 degrees to 95 degrees in steps of 1 degree
{
myservo0.slowmove(pos0,speed0); // tell servo to go to position in variable 'pos'
delay(delay0); // waits x ms for the servo to reach the position
}
if (digitalRead(button0) == HIGH)
for(pos0 = range_0_high; pos0>=range_0_high; pos0-=range_0_diff) // goes from 95 degrees to 85 degrees in steps of 1 degree
{
myservo0.slowmove(pos0,speed0); // tell servo to go to position in variable 'pos'
delay(delay0); // waits x ms for the servo to reach the position
}
{
if (digitalRead(button1) == LOW)
for(pos1 = range_1_low; pos1 < range_1_high; pos1 += range_1_diff) // goes from 85 degrees to 95 degrees in steps of 1 degree
{
myservo1.slowmove(pos1,speed1); // tell servo to go to position in variable 'pos'
delay(delay1); // waits x ms for the servo to reach the position
}
if (digitalRead(button1) == HIGH)
for(pos1 = range_1_high; pos1>=range_1_high; pos1-=range_1_diff) // goes from 95 degrees to 85 degrees in steps of 1 degree
{
myservo1.slowmove(pos1,speed1); // tell servo to go to position in variable 'pos'
delay(delay1); // waits x ms for the servo to reach the position
}
{
if (digitalRead(button2) == LOW)
for(pos2 = range_2_low; pos2 < range_2_high; pos2 += range_2_diff) // goes from 85 degrees to 95 degrees in steps of 1 degree
{
myservo2.slowmove(pos2,speed2); // tell servo to go to position in variable 'pos'
delay(delay2); // waits x ms for the servo to reach the position
}
if (digitalRead(button2) == HIGH)
for(pos2 = range_2_high; pos2>=range_2_high; pos2-=range_2_diff) // goes from 95 degrees to 85 degrees in steps of 1 degree
{ myservo2.slowmove(pos2,speed2); // tell servo to go to position in variable 'pos'
delay(delay2); // waits x ms for the servo to reach the position
}
{
if (digitalRead(button3) == LOW)
for(pos3 = range_3_low; pos3 < range_3_high; pos3 += range_3_diff) // goes from 85 degrees to 95 degrees in steps of 1 degree
{
myservo3.slowmove(pos3,speed3); // tell servo to go to position in variable 'pos'
delay(delay3); // waits x ms for the servo to reach the position
}
if (digitalRead(button3) == HIGH)
for(pos3 = range_3_high; pos3>=range_3_high; pos3-=range_3_diff) // goes from 95 degrees to 85 degrees in steps of 1 degree
{
myservo3.slowmove(pos3,speed3); // tell servo to go to position in variable 'pos'
delay(delay3); // waits x ms for the servo to reach the position
}
{
if (digitalRead(button4) == LOW)
for(pos4 = range_4_low; pos4 < range_4_high; pos4 += range_4_diff) // goes from 85 degrees to 95 degrees in steps of 1 degree
{
myservo4.slowmove(pos4,speed4); // tell servo to go to position in variable 'pos'
delay(delay4); // waits x ms for the servo to reach the position
}
if (digitalRead(button4) == HIGH)
for(pos4 = range_4_high; pos4>=range_4_high; pos4-=range_4_diff) // goes from 95 degrees to 85 degrees in steps of 1 degree
{
myservo4.slowmove(pos4,speed4); // tell servo to go to position in variable 'pos'
delay(delay4); // waits x ms for the servo to reach the position
}
{
if (digitalRead(button5) == LOW)
for(pos5 = range_5_low; pos5 < range_5_high; pos5 += range_5_diff) // goes from 85 degrees to 95 degrees in steps of 1 degree
{
myservo5.slowmove(pos5,speed5); // tell servo to go to position in variable 'pos'
delay(delay5); // waits x ms for the servo to reach the position
}
if (digitalRead(button5) == HIGH)
for(pos5 = range_5_high; pos5>=range_5_high; pos5-=range_5_diff) // goes from 95 degrees to 85 degrees in steps of 1 degree
{
myservo5.slowmove(pos5,speed5); // tell servo to go to position in variable 'pos'
delay(delay5); // waits x ms for the servo to reach the position
}
{
if (digitalRead(button6) == LOW)
for(pos6 = range_6_low; pos6 < range_6_high; pos6 += range_6_diff) // goes from 85 degrees to 95 degrees in steps of 1 degree
{
myservo6.slowmove(pos6,speed6); // tell servo to go to position in variable 'pos'
delay(delay6); // waits x ms for the servo to reach the position
}
if (digitalRead(button6) == HIGH)
for(pos6 = range_6_high; pos6>=range_6_high; pos6-=range_6_diff) // goes from 95 degrees to 85 degrees in steps of 1 degree
{
myservo6.slowmove(pos6,speed6); // tell servo to go to position in variable 'pos'
delay(delay6); // waits x ms for the servo to reach the position

}}}}}}} // 7x close bracket, one for each servo

}




Laatst gewijzigd door Paul_DMV op 16 feb 2015 12:10, 2 keer totaal gewijzigd.


Kijk ook eens op:
http://www.facebook.com/3dprintN/

Wil je de bestellijst /catalogus van 3dprintN magneetkoppelingen mail naar:
contact.3dprintn@gmail.com

N-spoor in regio Delft? =>www.d-mv.nl of www.facebook.com/delftsemodelbouwvereniging

Peter
Berichten: 913
Lid geworden op: 01 jan 2010 20:07
Locatie: Zuid-Limburg

Re: Analoog Servo schakelen met Arduino - K.I.S.S.

Bericht door Peter »

Zo Paul, je laat er geen gras over groeien :D

Overzichtelijk zo, helemaal top!

Nu nog wissels via DCC ;)

Grtz.
Peter


Mijn baan: http://n-spoorforum.nl/phpbb3/viewtopic.php?f=14&t=9458

Digitaal (DCC), iTrain, Peco 55
Gebruikersavatar

shoven
Berichten: 6103
Lid geworden op: 14 dec 2008 21:06
Locatie: Walcheren

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door shoven »

Dat kan ook, zie dit artikel.
Deze man heeft een hele serie artikelen waarin hij met de Aruino aan de gang gaat.


Steven

Hier is mijn baan op het forum
Hier is mijn vorige baan op het forum
Hier is mijn voor-vorige baan op het forum
>>> Filmpjes van de baan

Peter
Berichten: 913
Lid geworden op: 01 jan 2010 20:07
Locatie: Zuid-Limburg

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Peter »

Steven, bedankt voor de link.

Eens kijken wanneer ik de tijd heb om er eens voor te gaan zitten en e.e.a. uit te zoeken, testen enz.

Grtz.
Peter


Mijn baan: http://n-spoorforum.nl/phpbb3/viewtopic.php?f=14&t=9458

Digitaal (DCC), iTrain, Peco 55
Gebruikersavatar

shoven
Berichten: 6103
Lid geworden op: 14 dec 2008 21:06
Locatie: Walcheren

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door shoven »

Ja, tijd... Dat is hier ook het probleem. Eerst even mijn huis afbouwen.


Steven

Hier is mijn baan op het forum
Hier is mijn vorige baan op het forum
Hier is mijn voor-vorige baan op het forum
>>> Filmpjes van de baan
Gebruikersavatar

evo
Berichten: 1469
Lid geworden op: 05 okt 2009 02:20
Locatie: Land van Maas & Waal

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door evo »

Erg interessant dit Arduino spul, wanneer ik wat meer tijd heb, wil ik daar ook mee gaan spelen.
shoven schreef:Ja, tijd... Dat is hier ook het probleem. Eerst even mijn huis afbouwen.
LOL hoe herkenbaar... Hoe ver ben jij?


Groeten,

Edwin

Huidig project (met Bob): Altenatief

Voorgaand project: een kleine N baan

Dit is mijn eerste N baan
Gebruikersavatar

shoven
Berichten: 6103
Lid geworden op: 14 dec 2008 21:06
Locatie: Walcheren

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door shoven »

We zijn redelijk ver. Buitenkant is nagenoeg klaar, morgen daken dichtbranden, volgende week glas erin. In maart is het meeste binnen ook gedaan, stukadoor, vloeren, verwarming, water, elektra. Met een beetje geluk eind april/begin mei oplevering.
IJs en weder dienende.


Steven

Hier is mijn baan op het forum
Hier is mijn vorige baan op het forum
Hier is mijn voor-vorige baan op het forum
>>> Filmpjes van de baan
Gebruikersavatar

evo
Berichten: 1469
Lid geworden op: 05 okt 2009 02:20
Locatie: Land van Maas & Waal

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door evo »

Zo, jullie gaan snel! Wij hopen er ook in april in te kunnen, maar ik ben al een maand of 2 binnen aan de gang. Ben nu met de badkamer bezig.
(sorry voor de hijack..)


Groeten,

Edwin

Huidig project (met Bob): Altenatief

Voorgaand project: een kleine N baan

Dit is mijn eerste N baan
Gebruikersavatar

Frank_N
Berichten: 916
Lid geworden op: 30 jan 2012 00:14

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Frank_N »

Hoi Paul,

Good job! 8-)

Vraagje's:
Werkt dit ook met analoge servo's? (Tower Pro 9g)
Of is er een speciale reden om digitale servo's te gebruiken :?:
Werkt het (voor een 1e experiment) ook met de Arduino UNO :?:

Alvast dank voor reactie.


Groet van Frank
Gebruikersavatar

Onderwerp starter
Paul_DMV
Kleinserie/Commercieel
Berichten: 739
Lid geworden op: 30 nov 2009 15:03

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Paul_DMV »

Met analoge servo's werkt het niet. Die sweepen buiten het bereik door als je de stroom er op zet of nieuwe code upload. Je pen verbuigt dan en dan is je wissel ontregeld. Bovendien is een digitale servo veel preciezer omdat hij tot het laatste eindje volle kracht heeft. Bij een analoge neemt de kracht af naarmate het eindpunt dichterbij komt en zal bij een beetje weerstand dan zijn eindstand niet zo nauwkeurig kunnen benaderen.

Maakt niet uit welke arduino je gebruikt. Alleen de combinatie van een arduino met shield is makkelijker omdat je de arduino kunt vervangen zonder draden los te maken. Ook is het kleiner en goedkoper om een nano te gebruiken.


Kijk ook eens op:
http://www.facebook.com/3dprintN/

Wil je de bestellijst /catalogus van 3dprintN magneetkoppelingen mail naar:
contact.3dprintn@gmail.com

N-spoor in regio Delft? =>www.d-mv.nl of www.facebook.com/delftsemodelbouwvereniging
Gebruikersavatar

Frank_N
Berichten: 916
Lid geworden op: 30 jan 2012 00:14

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Frank_N »

Duidelijke uitleg Paul, waarvoor dank ;)
Jammer dat er niet zo eenvoudig aan die digitale servo's ( :arrow: Emax ES08DE) te komen is voor iedereen. :roll:


Groet van Frank

FidOo
Berichten: 5936
Lid geworden op: 05 jan 2010 16:27

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door FidOo »

Www.Hobbyking.com €2.63 stuk


M.v.g. Joost van Dijk

Lid van: MC Lima Bravo
Bouwt momenteel: Modulebaan (Kiel-Nordhafen)"
Gebruikersavatar

Onderwerp starter
Paul_DMV
Kleinserie/Commercieel
Berichten: 739
Lid geworden op: 30 nov 2009 15:03

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Paul_DMV »

Emax es08de koop ik op http://www.banggood.com


Kijk ook eens op:
http://www.facebook.com/3dprintN/

Wil je de bestellijst /catalogus van 3dprintN magneetkoppelingen mail naar:
contact.3dprintn@gmail.com

N-spoor in regio Delft? =>www.d-mv.nl of www.facebook.com/delftsemodelbouwvereniging
Gebruikersavatar

Frank_N
Berichten: 916
Lid geworden op: 30 jan 2012 00:14

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Frank_N »

Gelukt! Thnx Paul ;)
Nu nog montage beugeltjes en verenstaaldraad.
Kan ondertussen uitproberen of het werkt met de Arduino :)
Doel is die dingen te gaan gebruiken in plaats van de originele Minitrix aandrijving.
Doel 2 is mogelijk de Minitrix ontkoppelaars (lijkt nu meer op soort lanceer inrichting :lol: ) ermee uit te rusten.


Groet van Frank
Gebruikersavatar

martindomburg
Elektronica/Commercieel
Berichten: 4945
Lid geworden op: 01 mei 2010 14:59
Locatie: Ermelo

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door martindomburg »

Is enorm interessant. Ga ik ook zeker eens mee stoeien.zover ik begrijp zijn de mogelijkheden om zelf iets te bedenken met arduino eindeloos.

Groetjes


Gebruikersavatar

Frank_N
Berichten: 916
Lid geworden op: 30 jan 2012 00:14

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Frank_N »

martindomburg schreef:Is enorm interessant. Ga ik ook zeker eens mee stoeien.zover ik begrijp zijn de mogelijkheden om zelf iets te bedenken met arduino eindeloos.

Groetjes
Zelf iets bedenken met de Arduino is niet zo moeilijk. Het uitvoeren :roll:
Zelf een sketch schrijven is een ander verhaal, Martin :?
Op andere fora lopen verschillende draadjes over Arduino en modeltreinen.
Een van mijn ideeen is bijvoorbeeld de Weistra (analoge-variabele-pulsbreedte) regelaar na te bootsen....
Kom je toch wat hindernissen tegen :o


Groet van Frank
Gebruikersavatar

Onderwerp starter
Paul_DMV
Kleinserie/Commercieel
Berichten: 739
Lid geworden op: 30 nov 2009 15:03

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Paul_DMV »

Frank, Waarom zou een puls regelaar met arduino moeilijk zijn?

De analoge uitgang van een arduino is al een pulsgeregelde spanning. Met een motor L298N H-Bridge Stepper Motor Driver http://www.dx.com/p/l298n-h-bridge-step ... RVdEvmG8k0 kun je gewoon een trein regelen. Enige wat je dan nog nodig hebt is een potmeter om de snelheid aan te geven in je arduino. Deze kan 2x 2A leveren. Deze ln298n zitten ook in het Dinamo systeem verwerkt.

zie projectje http://modelrail.otenko.com/arduino/con ... an-arduino


Kijk ook eens op:
http://www.facebook.com/3dprintN/

Wil je de bestellijst /catalogus van 3dprintN magneetkoppelingen mail naar:
contact.3dprintn@gmail.com

N-spoor in regio Delft? =>www.d-mv.nl of www.facebook.com/delftsemodelbouwvereniging
Gebruikersavatar

Ratticus
Berichten: 224
Lid geworden op: 10 jan 2015 19:37
Locatie: Beerse

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Ratticus »

Leuke hardware.
Lijkt geprogrammeerd in C#.


Mvg,

Davy aka Ratticus

-----------------
There are no stupid questions, only stupid answers.
Gebruikersavatar

Frank_N
Berichten: 916
Lid geworden op: 30 jan 2012 00:14

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Frank_N »

"""""Waarom zou een puls regelaar met arduino moeilijk zijn?""""""

Dat is niet moeilijk, PWM is een standaard optie voor de Arduino met 1 frequentie (als ik het goed snap), Paul.
De Weistra regelaar maakt echter een variabele blokpuls.
Dus bij een laag toerental is de blokpuls 20 Hz, naarmate je de regelaar verder opendraait word de puls korter (bv. 120 Hz).
Om te voorkomen dat de trein stil komt te staan (regelaar linksom) met 12V/20Hz (Dat vinden de meeste motortjes NIET LEUK :mrgreen: ) heeft Weistra er voor gezorgd dat op dat moment de puls wegvalt. Dus de 12V voeding naar 0V regelt.
Op deze manier heeft het motortje vanaf stilstand de maximale trekkracht.
Voor de meeste N lokjes is de maximale benodigde spanning ongeveer 9 Volt, zodat je regelaar/ potmeter fijn over het volle bereik werkt ;)
Je zou voor iedere locomotief deze instelling apart moeten uitvoeren.

Dank voor de link :)


Groet van Frank
Gebruikersavatar

Frank_N
Berichten: 916
Lid geworden op: 30 jan 2012 00:14

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Frank_N »

Test uitgevoerd:

"""""Met analoge servo's werkt het niet. Die sweepen buiten het bereik door als je de stroom er op zet of nieuwe code upload.""""

Klopt, maar de digitale servo op pin 13 sweept wel door buiten het ingestelde bereik, Paul.
Servo's verwisselen maakt weinig uit.... :?
De andere 6 werken wel goed ;)
Wel vind ik ze wat schokkerig bewegen. Een analoge servo "loopt" iets fraaier maar is om door jou gemelde redenen niet bruikbaar.

Als ik een nieuwe code upload moet eerst alles van de Arduino losgemaakt worden, anders werkt het uploaden niet :x

Doe ik iets niet goed :?:


Groet van Frank
Gebruikersavatar

Onderwerp starter
Paul_DMV
Kleinserie/Commercieel
Berichten: 739
Lid geworden op: 30 nov 2009 15:03

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Paul_DMV »

heb eerlijk gezegd nog geen goede test gedaan met servo op pin 13.

het klopt dat als je de servo programmeert, het beste is om de arduino even uit de shield te trekken. soms werkt het wel maar als er veel servo's aangesloten zijn gaat het niet goed.

wat bedoel je met schokkerig? bij mij loopt het redelijk vloeiend, dat wil zeggen, aan de wisseltong zie je niks stotterend.


Kijk ook eens op:
http://www.facebook.com/3dprintN/

Wil je de bestellijst /catalogus van 3dprintN magneetkoppelingen mail naar:
contact.3dprintn@gmail.com

N-spoor in regio Delft? =>www.d-mv.nl of www.facebook.com/delftsemodelbouwvereniging
Gebruikersavatar

Frank_N
Berichten: 916
Lid geworden op: 30 jan 2012 00:14

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Frank_N »

De meeste servo's gaan wat schokkerig heen en weer, met kleine sprongetjes. Het klinkt ook "krakerig"
Sommige doen dat ook bij de ingestelde stand. Belast of niet. Op een wissel heb ik het nog niet uitgeprobeerd.
Eentje en dan precies die op pin 0/13 gaat eerst helemaal naar de uiterste stand na het inschakelen van de voeding.
Verwisselen met een ander exemplaar maakt daarbij niet uit.
Vervolgens gaat die netjes op het ingestelde bereik 85 dan wel 95 staan (of welke waarde je daaraan hebt gegeven), daar waar het schakelaartje staat. Die schakelaars had ik aangesloten met midden naar stuurpin, een aansluiting naar 0 voeding de andere aansluiting met een serie weerstandje 10k naar 5V.
Het is me bekend dat pen 0/13 bij de Arduino (Uno of Nano) ook voor andere toepassingen gebruikt word. Welke :?:
Niet dat dat ook uitmaakt bij andere sketches....Ik bedoel dat de digitale servo's ook stroom trekken in stilstand, blijkbaar.
Het zou kunnen dat er een feedback ontstaat terug naar de output pin, waardoor het laden van een nieuwe of aangepaste code belemmert word. Zoiets, denk ik Paul. Maar weet het ook niet zo :roll:

Mijn probeerseltje deed ik met een Uno.

Link: http://arduino.cc/en/Tutorial/DigitalPins


Groet van Frank
Gebruikersavatar

Onderwerp starter
Paul_DMV
Kleinserie/Commercieel
Berichten: 739
Lid geworden op: 30 nov 2009 15:03

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Paul_DMV »

klinkt vreemd, ik heb niet, dat schokkerige wat jij beschrijft Frank, sommige pruttelen wel een beetje maar alleen als hij in de eindstand nog veerkracht van de pen moet opvangen.

Welke type servo heb je gebruikt?

zelf gebruik ik de Uno met servo shield, misschien kan het zijn dat de voeding dan iets verschilt met de uno?

had pin 13 ook in eerste instantie niet meegerekend, vandaar dat ik input pin 1t/m6 heb gekozen voor output 7t/m12 etc.


Kijk ook eens op:
http://www.facebook.com/3dprintN/

Wil je de bestellijst /catalogus van 3dprintN magneetkoppelingen mail naar:
contact.3dprintn@gmail.com

N-spoor in regio Delft? =>www.d-mv.nl of www.facebook.com/delftsemodelbouwvereniging
Gebruikersavatar

Frank_N
Berichten: 916
Lid geworden op: 30 jan 2012 00:14

Re: Analoog Servo's Schakelen met Arduino - K.I.S.S.

Bericht door Frank_N »

De EMAX ES08D, Paul.

Iets gevonden wat een verklaring zou kunnen zijn: http://forum.arduino.cc/index.php?topic=139432.0
Gaat over een Arduino Micro, maar de pinnen doen (dacht ik :roll: ) hetzelfde als bij de Uno en de Nano.
Pin 1 blijkt ook meerdere functies te hebben maar daar werkt bij mij de servo goed op.
Tijdens inschakelen "miept" hij een beetje meer dan de rest maar blijft daarbij binnen het ingestelde bereik.
Het lijkt erop dat pin 0/13 beter niet gebruikt kan worden voor servo's :|

Verder had ik nog iets gevonden waarbij men een condensator van 470 uF over de voedingslijn plaatst
om problemen bij inschakelen te ondervangen.
Dat had hier geen resultaat bij het pin-0/13-gezwiep.
Voor de schokkerige beweging maakte dat (naar verwachting) ook niet uit.

Een (hopelijk niet domme) vraag nog over je sketch: Bovenaan staat: #include <VarSpeedServo.h>
5 regels lager staat dit: // install the VarSpeedServo.h Library before use!

Ik neem aan dat dat library er al aan toegevoegd werd :?:


Groet van Frank
Plaats reactie