Servomoteur

[1/1]Bonjour, Je suis débutant. Je viens de m'acheter une carte uno et une carte shield v3 avec un servomoteur à notion continue. Mon projet est de construire un lance balle de tennis. Le servomoteur doit aller de droite à gauche ou le contraire avec un angle de 30 degrés et faire une pause de 2 secondes à chaque fois quand il arrive à une extremité avant de repartir.

Cela fait plusieurs jours que je cherche mais je n'y arrive pas. Je voudrais aussi faire tourner un moteur pas à pas en rotation continue dans le même programme. Merci de votre aide, Cordialement, Askar

Je viens de m'acheter une carte uno et une carte shield v3 avec un servomoteur à notion continue.

Avant d'aller plus loin des précisions s'imposent : "notion continue" --> je suppose que c'est à comprendre comme "rotation continue"

Si c'est vraiment cela ce n'est pas un vrai servo-moteur, c'est un moteur à rotation continue dont le sens et la vitesse se commandent avec des normes inspirées de celle des vrais servo-moteurs.

Un servo moteur n'est jamais à rotation continue et a couramment un débattement de +/- 90°. Rarement plus (+/-135°), parfois moins (+/-45°).

Question : est-ce vraiment ce que tu as ? Qu'est-ce qui se passe exactement, il faut tout dire si tu veux des réponses. Dire "je n'y arrive pas" est totalement improductif, même avec une boule de cristal on ne devine rien.

PS: si tu as lu les 3 messages épinglés qui décrivent comment utiliser ce forum tu as vu qu'il faut mettre des liens vers le matériel. Il est où le lien vers le shield ?

Je voudrais aussi faire tourner un moteur pas à pas en rotation continue dans le même programme.

Livrés avec l'IDE il y a des bibliothèques et des exemples. Il est de bon goût de commencer par s’entraîner avec les exemples avant de venir poser des questions. 1) Cela évite de déranger inutilement les bénévoles. Rabâcher tout le temps le même baba est lassant. 2) C'est aussi ton intérêt car cela tu permettra de poser des questions précises. A question vague, réponse vague ou pas de réponse. A question précise, réponse rapide et précise.

Inspire toi des exemples de l'IDE Arduino, ceux de la lib Servo et ceux de la lib Stepper.

ÉDIT: grillé par 68tjs

Bonsoir,
Merci pour la rapidité de vos réponses.
Le servomoteur: HSR 1425CR à rotation continue
Carte arduino uno avec shield v3

Ce qu’il fait:
par exemple sur ce programme que j’ai recopié:

#include <Servo.h>

Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created

int pos = 0; // variable to store the servo position

void setup()
{
myservo.attach(2); // attaches the servo on pin 9 to the servo object
}

void loop()
{
for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(15); // waits 15ms for the servo to reach the position
}
}

Le servo moteur tourne dans les deux sens à 180 degrés comme prévu mais ce que je voudrais c’est placer 30 degrés au lieu de 180 et là je ne comprends pas bien la logique.
Merci pour votre aide, je vais regarder plus attentivement les IDE.

askar:
Le servo moteur tourne dans les deux sens à 180 degrés comme prévu mais ce que je voudrais c’est placer 30 degrés au lieu de 180 et là je ne comprends pas bien la logique.

Sans être un génie en programmation lorsque qu’on voit ça:

 for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree

On se dit que le servo va de 0 à 180° par pas de 1°. Au cas ou on est pas certain d’avoir tout compris, il y a ça Arduino - ServoWrite

Merci pour votre lien. Non je ne suis pas un génie c’est aussi pourquoi je demande de l’aide.

Avec ce programme: le servo fait des rotation en continue lentement
#include <Servo.h>

Servo myservo;

void setup()
{
myservo.attach(2);
myservo.write(90); // set servo to mid-point
}

void loop() {}

Ce n’est pas ce que je souhaite.
Ce que je souhaite c’est qu’il fasse 30 degrés à droite, une pause puis 60 degrés à gauche, une pause, puis 60 degrés droite indéfiniment. Je veux faire un lance balles de tennis. Le canon doit être orienté une fois à droite puis une fois à gauche mais surtout pas faire une rotation complète.

Dans l'exemple cité plus haut, tu ne penses pas que si tu remplace les valeurs de 0 et 180 par d'autres valeurs le servo va se déplacer différemment? As-tu lu les commentaires qui pour chaque ligne expliquent ce que fait celle-ci. Soit curieux change des trucs dans le programme pour voir ce qu'il se passe. C'est comme ça que l'on apprend.

Bonsoir, je n’arrête pas de changer les valeurs . Mais j’ai l’impression qu’il n’y a que quelques valeurs: 0, 45,90, 180 après si on met d’autres valeurs le servo tourne en continue (360 degrés)

J’ai un soucis de branchement aussi avec mon moteur pas à pas bipolaire 42byg. Il n’avance pas et fait un bruit de grincement.
J’ai 4 fils : bleu, rouge, noir, vert et 4 entrées: a+, a-, b+, b-
Je ne sais pas exactement quel est le bon branchement?

Un peu de réflexion :
Recherche avec la référence que tu as donné :
Premier site : https://www.servocity.com/hsr-1425cr-servo

The HSR-1425CR is the continuous rotation version of the HS-425HB. The speed is proportional meaning that the further the PWM signal deviates from the idle signal (approximately 1500usec) the faster the servo will rotate.

Deuxième site : http://www.robotshop.com/ca/fr/servo-hsr-1425cr-hitec.html

Le Servomoteur HSR-1425CR Hitec est un servomoteur standard modifié pour une rotation continue. Comme tel, le servomoteur n’a pas de système asservi. Le servomoteur est un excellent choix en tant que remplacement des moteurs à engrenage CC pour l’entraînement de vos petits robots à roues.

Ce n’est pas un servo-moteur c’est écrit en toutes lettres IL N’A PAS DE SYSTEME ASSERVI
Le mot Servo vient d’asservissement.

Tu n’a pas le droit d’écrire :

for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  }

La variable position est un non-sens puisque tu ne peux jouer que sur le sens de rotation ou la vitesse.

  1. Sens de rotation
    Si l’impulsion est inférieure à 1,5 ms le moteur tourne dans un sens, si l’impulsion est supérieure à 1,5 ms le moteur tourne dans l’autre sens
  2. Vitesse
    Plus la largeur de l’impulsion s’éloigne de la position centrale 1,5 ms (en plus ou en moins) plus le moteur tourne vite.

Pour faire ce que tu veux avec ce type de moteur il faut ajouter des composants :

  1. soit un potentiomètre sur l’axe et faire un asservissement à partir de la valeur de retour
  2. soit positionner des contacts de fin de course à +/- 30 °

Bref changer pour un vrai servo-moteur sera plus simple.

Au passage pour le code tu es prié d’utiliser les balises code ( icône </>en haut à gauche) comme cela est demandé dans les 3 messages épinglés en tête de forum.

Merci pour les explications: je vais essayer d’échanger le servomoteur. Pour le code, il s’agit de quel code???

Il s'agit du code que tu mets dans tes réponses comme dans la #3. Regarde la différence avec la réponce de fdufnews ou la mienne. Lis le message épinglé "faire un nouveau sujet avec les balises" . Et les deux autres aussi.