Go Down

Topic: Servomoteurs (Read 3361 times) previous topic - next topic

edwinre

Bonjour, j'ai le programme suivant:

Code: [Select]
#include <Servo.h> // librairie arduino pour servomoteur

const int POS_MIN=550; // mise a zero pour un servomoteur position minimale
const int POS_MAX=2330; // position maximale servomoteur

int angle_servo=0; //angle pour position minimale

const int broche_servo=2; //broche selon branchement (2)
const int Voie_0=0; //constante pour passage en analogique

int mesure_brute=0;// résultat brut
float mesuref=0.0;// résultat décimal

Servo mon_servo;  // pour le control du servomoteur

void setup()   { // debut de la fonction setup()


mon_servo.attach(broche_servo, POS_MIN, POS_MAX);  // broche commande servo


pinMode(broche_servo, OUTPUT); //met la broche en sortie
}
void loop(){ // fonction loop() sans fin

// acquisition conversion analogique numérique
//sur broche analogique indiquée - résultat 10bits (0-1023)
mesure_brute=analogRead(Voie_0);

angle_servo=map(mesure_brute,0,1023,0,180);  // conversion  en angle °

mon_servo.write(angle_servo); // positionne le servo à l'angle voulu

delay (100); // pause entre 2 mesures et modif position servomoteur
}



Comment faire pour que mon servo aille à 306° (ref: HT-5512)?
Comment faire pour que mon moteur aille à un angle donné? Quel valeur dois-je mettre dans le programme?

Merci pour vos réponses.

Edwin

Christian_R

angle_servo=map(mesure_brute,0,1023,0,180);  // conversion  en angle °

Ceci est prévu pour un servo classique qui tourne de 0° à 180°.
Tous les servo ne sont pas capables de tourner à 306°, est ce bien le cas du tien ?
Christian

Artouste

#2
Jan 11, 2013, 04:42 pm Last Edit: Jan 11, 2013, 04:55 pm by Artouste Reason: 1

Bonjour, j'ai le programme suivant:
...

Comment faire pour que mon servo aille à 306° (ref: HT-5512)?
Comment faire pour que mon moteur aille à un angle donné? Quel valeur dois-je mettre dans le programme?

Merci pour vos réponses.

Edwin

bonjour
Comme exposé par Christian , la fonction servo standard est prevue pour un angle de 180°
si ton servo à une amplitude de 306°
il faut faire la relation 306/180

ce qui implique avec le standard une résolution théorique de 1.7°

edwinre

Merci Artouste, que veux tu dire par:

Quote
i ton servo à une amplitude de 306°
il faut faire la relation 306/180

ce qui implique avec le standard une résolution théorique de 1.7°


Merci

edwinre

Et comment faire dans ce programme pour lui donner un angle par exemple de 80°:

Code: [Select]
#include <Servo.h> // librairie arduino pour servomoteur

const int POS_MIN=550; // mise a zero pour un servomoteur position minimale
const int POS_MAX=2330; // position maximale servomoteur

int angle_servo=0; //angle pour position minimale

const int broche_servo=2; //broche selon branchement (2)
const int Voie_0=0; //constante pour passage en analogique

int mesure_brute=0;// résultat brut
float mesuref=0.0;// résultat décimal

Servo mon_servo;  // pour le control du servomoteur

void setup()   { // debut de la fonction setup()


mon_servo.attach(broche_servo, POS_MIN, POS_MAX);  // broche commande servo


pinMode(broche_servo, OUTPUT); //met la broche en sortie
}
void loop(){ // fonction loop() sans fin

// acquisition conversion analogique numérique
//sur broche analogique indiquée - résultat 10bits (0-1023)
mesure_brute=analogRead(Voie_0);

angle_servo=map(mesure_brute,0,1023,0,180);  // conversion  en angle °

mon_servo.write(angle_servo); // positionne le servo à l'angle voulu

delay (100); // pause entre 2 mesures et modif position servomoteur
}


Où est ce que je dois écrire 80°.

Je ne sais pas si mon moteur peut aller au delà de 180° et aller jusqu'à 360; sa référence est un HT-5512.

Artouste


Et comment faire dans ce programme pour lui donner un angle par exemple de 80°:

...
Où est ce que je dois écrire 80°.
...
Je ne sais pas si mon moteur peut aller au delà de 180° et aller jusqu'à 360; sa référence est un HT-5512.

bonjour
A question mal posée, reponse à coté  :smiley-mr-green:
ça à l'air d'un servo parfaitement standard avec une course de 180°
pour qu'il aille dans la position 80 ° (sur 0-180°)

soit
Code: [Select]
angle_servo=80
mon_servo.write(angle_servo); // positionne le servo à l'angle defini par la valeur angle_servo


ou
Code: [Select]
mon_servo.write(80); // positionne le servo à 80°

edwinre

D'accord pour tes deux méthodes mais le mettre aussi ici marcherait dès la déclaration de variable?

Code: [Select]
int angle_servo=80; //angle pour position

Donc mon servomoteur ne pourrait pas aller au-delà de 180°?

Artouste

#7
Jan 12, 2013, 12:32 pm Last Edit: Jan 12, 2013, 12:34 pm by Artouste Reason: 1

D'accord pour tes deux méthodes mais le mettre aussi ici marcherait dès la déclaration de variable?

Code: [Select]
int angle_servo=80; //angle pour position

Donc mon servomoteur ne pourrait pas aller au-delà de 180°?

oui pour la declaration
A priori rien n'indique que ce serait autre chose qu'un servo basique avec une course basique 0/180°
mais ça c'est facile à determiner :
un petit prog avec à l'interieur dedans :  :smiley-mr-green:

Code: [Select]
mon_servo.write(0);
delay(2000);
mon_servo.write(180);
delay(2000);


et il ne reste qu'à voir physiquement si entre les positions extrêmes ton servo parcourt 180° ou un autre angle

Christian_R

Il fonctionnera de 0 à 180° : http://www.mikrocontroller.net/topic/37726
Christian

edwinre

Merci Artouste et Christian_R, je vais regarder.

edwinre

Le code test est-ce comme ça?

Code: [Select]
#include <Servo.h> // librairie arduino pour servomoteur

const int POS_MIN=550; // mise a zero pour un servomoteur position minimale
const int POS_MAX=2330; // position maximale servomoteur

int angle_servo=0; //angle pour position minimale

const int broche_servo=2; //broche selon branchement (2)
const int Voie_0=0; //constante pour passage en analogique

int mesure_brute=0;// résultat brut
float mesuref=0.0;// résultat décimal

Servo mon_servo;  // pour le control du servomoteur

void setup()   { // debut de la fonction setup()


mon_servo.attach(broche_servo, POS_MIN, POS_MAX);  // broche commande servo


pinMode(broche_servo, OUTPUT); //met la broche en sortie
}
void loop(){ // fonction loop() sans fin

// acquisition conversion analogique numérique
//sur broche analogique indiquée - résultat 10bits (0-1023)
mesure_brute=analogRead(Voie_0);

angle_servo=map(mesure_brute,0,1023,0,180);  // conversion  en angle °

mon_servo.write(0);
delay(2000);
mon_servo.write(180);
delay(2000);

delay (100); // pause entre 2 mesures et modif position servomoteur
}

Artouste


Le code test est-ce comme ça?


plus simple si juste pour test d'amplitude
NB testé compil OK , pas testé en reel
Code: [Select]
#include <Servo.h> // librairie arduino pour servomoteur
const int broche_servo=2; //broche selon branchement (2)
Servo mon_servo;  // pour le control du servomoteur
void setup()   { // debut de la fonction setup()
mon_servo.attach(broche_servo);  // broche commande servo
pinMode(broche_servo, OUTPUT); //met la broche en sortie
}
void loop(){ // fonction loop() sans fin
mon_servo.write(0);
delay(2000);
mon_servo.write(180);
delay(2000);

}

edwinre

Quote
NB testé compil OK , pas testé en reel


C'est à dire, je le mets quand même sur la carte?

Artouste


Quote
NB testé compil OK , pas testé en reel


C'est à dire, je le mets quand même sur la carte?

:smiley-mr-green:
oui , parce que si tu le mets ailleurs cela risque d'être inefficace  8)
attention à une chose avec les servo , tu alimente ton servo en puissance comment ? = le fil rouge est branché où  ?
tu branche où et comment les "trois fils" ?

edwinre

#14
Jan 12, 2013, 02:09 pm Last Edit: Jan 12, 2013, 02:36 pm by edwinre Reason: 1
Bonnes questions, je ne sais pas. Je suis débutant dans l'Arduino, il s'agit de mon premier programme, les trois fils, je les branches sur les broches entrées analogiques, celles avec des pics.

Comment mettre la carte sur l'ordinateur et transférer le programme sur la carte ainsi qu'alimenter le servomoteur?

Go Up