Accoup servo lors de l'init

Bonjour,

Lors du demarrage du programme servomoteur et il se produit des à coups des servomoteurs lors de leur initialisation.
Comment ralentir ce mouvement ?

J'ai ici un risque de casse de mon mécanisme.
Je veux simplement ralentir ce mouvement d'initialisation.

Quelqu'un a t-il une solution ?

Merci

Bonjour

Peut etre

Mais sans voir le programme, le schéma, et sans rien connaître du mécanisme et comment il est arrêté puis redémarré c est boule de cristal.

Salut.
Si j'ai bien compris ton problème ...

Si tu cherches à positionner le servomoteur au démarrage, et que celui-ci est dans une position très différente de celle recherchée, le servomoteur se positionne brutalement.
La seule solution est d'adopter un servomoteur avec un fil supplémentaire permettant de lire sa position.
On peut modifier un servomoteur en soudant un fil sur le point milieu de son potentiomètre :

Ici je l'ai fait sur un MG996R. Il suffit de relier ce fil à une entrée analogique, et de calculer la position par rapport à la tension lue.
En connaissant la position du servomoteur, tu peux le positionner doucement, par pas de 1 ou plusieurs degrés, avec un petit délai entre chaque pas.

Pour soigner le mal il faut commencer par le comprendre.

C'est quoi ces à-coups ?
Comment fonctionne un servo ?
Quel est le rôle du potentiomètre à l'intérieur du servo ?
Pourquoi dès sa mise en route, le servo ne se trouve pas dans sa position d'équilibre ?

Un point d'accès très didactique :

Il sera plus aisé de voir si, dans ton application que nous ne connaissons pas, il est possible de proposer une solution.

Je ne comprends pas

C simplement il me semble un sujet récurent, avant d'être piloté (controlé par l'arduino) le servomoteur va chercher son Zéro en grande vitesse.
et c'est cette vitesse que je veux ralentir.

veux tu dires que si on connait sa position au démarrage le servomoteur va s'initialiser en douceur?!

Pour ma part il ne peux être que sur Zero ou un autre angle defini ici 85

peux tu STP développer ta solution je ne comprend pas comment exploiter cela?

Merci

veux tu dire?
Brancher ce fil blanc sur une entrée analogique.
Interpréter la valeur analogique lue en une valeur de position du servo
Injecter cette valeur dans la variable pos de position du servomoteur
et enchainer avec le programme pour lentement positionner le servo dans la position souhaitée?

mettre tout cela en setup bien sur.

Je ne maitrise pas tout mais si c'est cela je pourrais essayer!

Oui c'est bien cela.
Tu pourrais dans un premier temps positionner le servomoteur à ZÉRO, puis augmenter par pas de quelques degrés jusqu'au maximum, et afficher pour chaque angle le résultat lu sur l'entrée analogique. Place un petit délai entre le positionnement et la lecture de la valeur, la mécanique est lente.
Ainsi tu auras une bonne idée de la linéarité de la chose si tu traces une courbe angle / valeur lue.
Si c'est assez linéaire, tu peux te contenter d'utiliser la fonction map().

int valeur = analogRead(A0);
int position = map(valeur, valeurMin, valeurMax, 0, 180);

valeurMin et valeurMax étant les valeur min/max relevées auparavant.
0 et 180 étant la course du servomoteur, je suppose 180°.
Tu obtiendras donc une valeur en degrés que tu pourras utiliser dans une boucle :

if (i < positionVoulue) {
  for (int i = position ; i < positionVoulue ; i++) {
    servo.write(i);
    delai(100);
  }
}
else {
  for (int i = position ; i > positionVoulue ; i--) {
    servo.write(i);
    delai(100);
}

Mais auparavant il va falloir souder un fil.

Ça me semble jouable pour moi.

sinon tout fonctionne bien.
ma réalisation est la suivante:
C'est un passage a niveau(2 voies possible) , avec une détection RFID du type de loco pour lancer la fermeture/ouverture de barrière avec la bande son; sonnette et corne correspondant à la loco.
Pour le moment tout fonctionne bien seul cette initialisation m’inquiète car je vais aussi rajouter un garde barrière qui tourne la manivelle lors de l'ouverture. et cette vitesse excessive au démarrage m’inquiète cela va affoler le garde barrière qui risque de voler en "éclat." :slight_smile:

Bon la rotation de la manivelle est entrainé par une mini courroie, il doit y avoir un glissement si cela va trop vite, mais je doute quand même et je voudrais absolument ralentir cette phase de démarrage.

Beaucoup de travail et d'essais à venir.

Merci pour le tuyau.

Bonjour

Est-ce que tu pourrais nous transmettre des photographies pour qu'on puisse voir le mécanisme.

Merci :slight_smile:

Pour le moment c'est du dessin 3D Il faudra attendre que ce soit un peu plus travaillé.
Mais je pourrais mettre le schéma général, qui évoluera forcément après les premiers essais.
En général, Je passe plus de temps en mise au point que sur la conception initiale.
Il faudra attendre un peu, mes idées se précise.

Pas de problème.
J'ai aussi des projets comme ça qui traînent dans ma tête pendant longtemps avant que je ne commence quoi que ce soit. Parfois ça prends du temps de rechercher ce qui existe déjà (histoire de ne pas ré-inventer la roue), puis on découvre des solutions (ou des problèmes) auxquelles on n'avait pas du tout pensé et qui font reprendre le projet à zéro pour quelque chose de bien plus efficace ou/et fiable.

Mais, si tu peux, même un dessin crayonné à la va-vite pourrait aider à comprendre comment le moteur est (dans ton projet) mécaniquement lié à la barrière (et/ou au garde barrière).

Pour t'expliquer pourquoi j'ai utilisé cette solution.
Mon application commande une porte de poulailler à guillotine, qui est reliée au servomoteur par une simple ficelle. Le palonnier est équipé d'un bras de levier de 16cm. La fermeture et l'ouverture sont commandées par rapport aux heures de lever et coucher du soleil.
Si je recharge le logiciel en pleine nuit alors que la porte est ouverte à la suite d'une commande manuelle, la porte se referme au démarrage, très brutalement, la ficelle ne suit pas le mouvement, et peut s'emmêler.
Dans mon cas je n'ai pas besoin de lire la position précise. Une simple valeur OUI/NON me suffit. Si la valeur lue sur A3 est supérieure à 400, je considère que la porte est ouverte.
Peut être que cela suffira dans ton cas, puisque l'organe à commander, une barrière, est assez similaire.



Voici une esquisse.

outre le problème du démarrage des servos, j'ai deux autres défis.
1/ le mouvement par tringle, qui ne supportera pas de jeux, mais avec la D résine je suis relativement confiant.
2/ l'entrainement de la manivelle que j'imagine en utilisant l'entrainement du servo, en allant chercher un engrenage intermédiaire interne par contact avec une roue interne du servo et un O-ring et en renvoyant le mouvement vers la manivelle avec une courroie élastique.
Je vais avoir ici pas mal de contact/glissement qui éventuellement pourrait amortir le mouvement du démarrage des servos.

Je sais que les résultats d'essais devraient m'amener beaucoup de modifications de la mécanique.

Au niveau Arduino, j'ai les solutions je crois.
Au niveau du démarrage, Si je suis contraint à utiliser la solution be Hbachetti je vais devoir revoir mon circuit imprimé et le boitier et connecteur3D que j'avais fini et qui est très sympa RRRR...
Je n'en suis pas là j’espère, car mes barrières s'arretent et redémarrent en position haute, donc je devrais être capable de limiter les brusques démarrages, et le mécanisme manivelle devrait permettre un peu de glissement. je croise les doigts.

Beaucoup de travail devant moi. (J'adore)

Oui, à la base c'est le même problème au redémarrage, pour ma part c'est bien plus petit et il y a risque de détérioration de la mécanique, le ou la garde barrière sur la manivelle va tourner comme un dératé et voler dans les airs. (Bon c'est peu être marrant, mais ce sera une fois mais pas deux)!
(quand la barrière va faire 1/4 de tour le Garde barrière en fera 6!!! houla houla on se calme...)

Je crois que sur le long terme ta solution est la seule viable que nous voyons, mais je la mettrais en dernier recours, car dans un mode "normale " le système doit toujours démarrer barrière ouverte.
(sauf que si j’arrête tout barrière fermée, car j'ai un mode manuel, alors la!!!! je testerais)

Merci

Merci pour ton très beau dessin. :slight_smile:

Au sujet de la position du levier du servomoteur quand la barrière est fermée :

Plutôt que de partir de l'horizontale pour finir à la verticale,
tu devrais partir d'au moins 60° plus bas (voire plus bas encore) => en supposant la vitesse de rotation constante, le déplacement vertical résultant sera plus lent au début de l'ouverture et à la fin de la fermeture de la barrière.

Oui j'avais pensé à cela pour avoir un mouvement homocinétique.
c'est juste une ébauche le schéma final sera différent, il y a beaucoup d'améliorations a faire, ça cogite fort.

Merci.

Certains servos ne sont pas asservis en position mais le sont en vitesse de rotation. On les appelle "servo 360°" ou "à rotation continue". Tu peux les utiliser avec des fins de course vu que tu n'as que 2 positions utiles : `ouvert et fermé.

Edit : ... et donc, au démarrage, tu mets une vitesse lente jusqu'à ce que le fin de course correspondant soit actionné.

Merci pour l'info,

j'ai trouvé la solution, les servos position sont mieux adaptés pour cette application.
J'ai aussi des servos 360 en commande mais je les utiliserais pour d'autres applications, mes idées d'application s'accumulent.

Merci