Servomoteurs

Bonjour, j'ai le programme suivant:

#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

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 ?

edwinre:
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°

Merci Artouste, que veux tu dire par:

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

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

#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.

edwinre:
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é :grin:
ç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

angle_servo=80
mon_servo.write(angle_servo); // positionne le servo à l'angle defini par la valeur angle_servo

ou

mon_servo.write(80); // positionne le servo à 80°

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

int angle_servo=80; //angle pour position

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

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

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 : :grin:

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

Il fonctionnera de 0 à 180° : servo motoren - Mikrocontroller.net

Merci Artouste et Christian_R, je vais regarder.

Le code test est-ce comme ça?

#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
}

edwinre:
Le code test est-ce comme ça?

plus simple si juste pour test d'amplitude
NB testé compil OK , pas testé en reel

#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);

}

NB testé compil OK , pas testé en reel

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

edwinre:

NB testé compil OK , pas testé en reel

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

:grin:
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" ?

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?

Salut !
Carte <=B-Mâle:USB:A-Mâle=> Ordi

Servo:Jaune <=> Pin de commande PWM Arduino (nommée "broche_servo" dans l'exemple d'Artouste)
Servo:Noir <=> GND Arduino
Servo:Rouge <=> 5V Arduino

P. S. : Je n'aurais pas mis

pinMode(broche_servo, OUTPUT);

car il n'est pas dans les exemples de la librarie.

donc:
fils jaune sur <=> Pin de commande PWM Arduino (nommée "broche_servo" dans l'exemple d'Artouste)
fils noir sur <=> GND Arduino
fils rouge sur <=> 5V Arduino

Salut !
Carte <=B-Mâle:USB:A-Mâle=> Ordi*

P. S. : Je n'aurais pas mis
Code:
pinMode(broche_servo, OUTPUT);
car il n'est pas dans les exemples de la librarie.

Comment ça?

Et pour l'alimentation?

La carte est relié au PC par le fil USB, qui sert à transférer le programme et à alimenter la carte.
File/Upload pour charger le programme dans la carte.

On peut alimenter un petit servomoteur directement par la carte mais seulement s'il ne consomme pas trop.
En principe il est préférable de découpler les deux.

Ok et sinon, je l'alimente comment?

et comment faire pour:

pinMode(broche_servo, OUTPUT);