Position initiale d'un servomoteur

Bonjour à tous !

Ca fait un bail que je ne suis pas passé par ici, j’espère que vous allez tous bien ! :slight_smile:

J’ai une toute petite question pour vous concernant la librairie Servo : j’aide quelqu’un à faire son code donc je n’ai pas testé moi-même de mon côté (honte à moi, mais c’est faute de temps… :-[ ). Il semblerait que la fonction attach réinitialise son servomoteur à une position initiale et ce, même si on écrit juste après (write()) la position initiale qu’on lui souhaite vraiment… C’est un comportement normal ou j’ai loupé quelque chose ? (ou ca dépend peut-être du modèle de servomoteur ??)

Merci d’avance pour vos réponses !
Z

Bonjour,

A partir du moment ou on fait le attache, le micro envoie périodiquement la commande au servo.
Par défaut, au démarrage cette commande remet le servo au milieu (à peu près).
Si tu veux positionner le servo à une autre valeur, tu peux faire un myservo.write() avant le attach().

Merci beaucoup kamill !
Je ne pensais pas qu'on pouvait faire un write avant le attach ! On va tester ça !

Re !

Petit retour après test, visiblement il n'est plus initialisé à 0 mais il y a tout de même une init avec une sorte de décalage, avant de revenir à la bonne position (?).

En gros, il est à 15° (consigne + stabilisé) ; on coupe le jus ; on remet le jus et dans le setup la consigne est de remettre à 15° (donc write() avant attach()) : il se met à 10° puis revient à 15°...

Ca reste mieux que "retour à 0°", mais je n'arrive pas à comprendre le pourquoi de ce "saut d'init", ni comment l'éviter... (?)

J'ai essayé. Apparemment ceci se produit quand on coupe la tension du servo.
Quand on fait un reset, pas de problème. Si on met hors/sous tension il y a un accoup sur le servo.
Quand on met uniquement le servo hors tension on a le même accoup, donc apparemment ça vient du servo. J'ai bien peur qu'il n'y ai pas de solution.

Merci beaucoup kamill !
On dirait une sorte "d'init interne" du servo si je comprends bien, ou alors une histoire de tension au branchement... Enfin bon, pas de solution simple, on va laisser comme ça pour le moment.
Encore merci !

il faut se rapeller qu'un "servo-moteur" est un asservissement électronique même si maintenant les commandes sont numériques.
L'électronique de controle reçoit d'une part une consigne à respecter et d'autre part un "retour d'information" provenant d'un potentiomètre.
Voir l'article sur les servos du tuto d'Eskimon. Il date un peu technologiquement parlant mais le principe est toujours le même.

A la mise sous tension de l'électronique du "servo-moteur" la valeur de consigne est celle imposée par la RAZ (RAZ = remise à zéro = Reset).
Il n'est pas du tout anormal que le servo démarre systématiquement à la même position de RAZ.

merci 68tjs, mais là on est un peu "entre les deux" : ca ne revient pas tout à fait à 0, mais ca fait un saut quand même...
Je comprends bien le principe que tu décris, je cherche surtout un moyen de le contourner... :confused:
Il y aurait des servos, peut-être plus chers, qui n'ont pas ce comportement ?

Je pense que cela dépend de la position du servo au moment où son alimentation a été coupée.
Il y a aussi la possibilité que ce soit un défaut de l'asservissement pendant la phase d'extinction.

Dans le premier cas probablement que s'il était "garé proprement a sa position de repos" avant la coupure de son alimentation le saut ne se produirait pas.
Dans le deuxième cas effectivement ce serait un défaut de conception et il faudrait taper dans du plus haut de gamme.
Je n'ai pas de servo sous la main pour essayer, de toute façon je n'ai que des servo bas de gamme.

La coupure de l'alimentation s'est faite à chaque fois après que le servo ait atteint sa consigne.
Je n'ai pas de servomoteur "haut de gamme" non plus, celui qui est utilisé dans le test a été acheté dans la boutique officielle arduino par la personne à qui je donne un coup de main.

Enfin bon, merci pour vos retours, visiblement il n'y a pas de solution simple... On ne va pas trop se prendre la tête non plus.