Pages: [1] 2 3 4   Go Down
Author Topic: Servomoteurs  (Read 2172 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 147
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour, j'ai le programme suivant:

Code:
#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
Logged

france
Offline Offline
God Member
*****
Karma: 8
Posts: 688
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

Christian

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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°
« Last Edit: January 11, 2013, 10:55:20 am by Artouste » Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 147
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 147
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
#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.
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
angle_servo=80
mon_servo.write(angle_servo); // positionne le servo à l'angle defini par la valeur angle_servo

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

Offline Offline
Full Member
***
Karma: 0
Posts: 147
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
int angle_servo=80; //angle pour position

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

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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:
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
« Last Edit: January 12, 2013, 06:34:22 am by Artouste » Logged

france
Offline Offline
God Member
*****
Karma: 8
Posts: 688
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Christian

Offline Offline
Full Member
***
Karma: 0
Posts: 147
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci Artouste et Christian_R, je vais regarder.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 147
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le code test est-ce comme ça?
 
Code:
#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
}
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le code test est-ce comme ça?
 
plus simple si juste pour test d'amplitude
NB testé compil OK , pas testé en reel
Code:
#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);

}
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 147
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-cool
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" ?
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 147
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: January 12, 2013, 08:36:11 am by edwinre » Logged

Pages: [1] 2 3 4   Go Up
Jump to: