Hoe Servo begin hoek instellen bij start van programma?

IDE gerelateerde berichten
Berichten: 1
Geregistreerd: 26 Okt 2018, 14:17

Hoe Servo begin hoek instellen bij start van programma?

Berichtdoor G_Korenblik » 26 Okt 2018, 14:35

Ik ben een beginner, dus excusses alvast als dit een domme vraag is.

Ik ben met een projectje bezig waarbij ik een servo aanstuur. Het doel is uiteindelijk dat ik een klep wil bedienen via een servo met een IR-remote. Ik heb de software klaar en alles lijkt te werken zoals ik het bedoeld had.
Echter bij de voorbereidingen van de testopstelling viel het mij op dat de servo die ik nu gebruik bij het opstarten van het programma naar een begin hoek draait die ik niet kan beïnvloeden met de software. Natuurlijk kan ik direct daarna de hoek aanpassen, maar dat is eigenlijk niet de bedoeling.
Weet iemand hoe ik de begin hoek kan instellen? Ik neem aan dat dit toch gewoon moet kunnen.

Ben benieuwd naar jullie reacties.

Advertisement

Gebruikers-avatar
Berichten: 4895
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Hoe Servo begin hoek instellen bij start van programma?

Berichtdoor nicoverduin » 26 Okt 2018, 15:08

G_Korenblik schreef:
Ik neem aan dat dit toch gewoon moet kunnen.

Niet direct. Op het moment dat de Arduino aangaat is de pwm uitgang 0. Immers die wordt nog niet aangestuurd terwijl de Arduino nog aan het ontdekken is of er een bootprogramma aankomt (dat knipperen van het ledje ff). In die tussentijd gaat hij naar de 0 stand. En pas daarna NA het opstarten wordt jouw code uitgevoerd.
Als je dat wil voorkomen, zou je eerst de PWM uitgang aan moeten sturen en pas daarna de voedingsspanning op de servo moeten gooien (mosfet of relais of zo). Je gaat dan dus vertraagd de servo inschakelen.
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 1893
Geregistreerd: 06 Aug 2016, 01:03

Re: Hoe Servo begin hoek instellen bij start van programma?

Berichtdoor Koepel » 26 Okt 2018, 15:50

Het creëren van het object 'myservo' vult alvast de middenstand in. Pas bij 'myservo.attach(pin)' wordt de interrupt aangezet. Er is dus een mogelijkheid om eerst de positie te schrijven met 'myservo.write()' en daarna pas 'servo.attach()' te doen.

cpp code
#include <Servo.h>

Servo myservo;
int pos;
const int pinServo = 9;

void setup()
{
pos = 0; // start and end with 0
myservo.write( pos); // write before starting the servo signal

delay( 1000);

myservo.attach( pinServo);

delay( 1000);

for( ; pos<= 180; pos++)
{
myservo.write( pos); // slow to 180
delay( 30);
}

delay( 1000);

for( ; pos>= 0; pos--)
{
myservo.write( pos); // slow to 0
delay( 30);
}

delay( 1000);

myservo.detach();

// turn off the Arduino, and turn it on again or press the reset button.
}

void loop()
{
}


Dit werkt goed als op de reset-knop van het Arduino board wordt gedrukt. Als de stroom er even helemaal af is geweest, dan geeft de servo daarna toch even een kleine draai. Dat komt door de servo motor zelf.

@nico, weet jij of dat dit ook zo bedoeld is? Ik kreeg een ingeving en ik keek in de library en het was mogelijk.

Gebruikers-avatar
Berichten: 4895
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Hoe Servo begin hoek instellen bij start van programma?

Berichtdoor nicoverduin » 26 Okt 2018, 17:06

Je bent zo een seconde verder voordat je aan setup() begint.
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 1893
Geregistreerd: 06 Aug 2016, 01:03

Re: Hoe Servo begin hoek instellen bij start van programma?

Berichtdoor Koepel » 26 Okt 2018, 17:59

Alle delay() deed ik om eventuele hickups te zien, het gaat om de myservo.write() voor een myservo.attach().

Berichten: 2491
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Hoe Servo begin hoek instellen bij start van programma?

Berichtdoor shooter » 26 Okt 2018, 18:25

Dit is een hele goede vraag, en zowel nico, koepel en ik zeggen dat het niet zo direct gaat.
je hebt bij servos altijd last van het feit dat het met een timing werkt en dus zodra je spanning op de servo zet zal de schakeling in de servo zich gaan bewegen in een rare manier, zodra de eerste tijdpuls binnen is zal de motor gaan bewegen, maar niemand weet in welke richting.
dus helaas met een simpele servo blijf je dit houden.
Het wordt anders als je een motortje en een potmeter gaat gebruiken, dan stuur je de motor zelf aan, en dan kun je zelf bepalen wat er gebeurt.
ook mogelijk is een stappenmotor die kan ook met een potmeter een stand innemen.
Ik gebruik dit laatste op grote regelkleppen op 24 Volt.
paul deelen
shooter@home.nl

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast