Offline
Full Member
Karma: 0
Posts: 137
|
 |
« on: January 11, 2013, 08:50:33 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
france
Offline
Sr. Member
Karma: 4
Posts: 272
|
 |
« Reply #1 on: January 11, 2013, 09:30:42 am » |
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
Edison Member
Karma: 6
Posts: 2415
|
 |
« Reply #2 on: January 11, 2013, 10:42:11 am » |
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
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #3 on: January 11, 2013, 12:29:46 pm » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #4 on: January 12, 2013, 05:50:14 am » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2415
|
 |
« Reply #5 on: January 12, 2013, 06:08:03 am » |
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é  ç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°
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #6 on: January 12, 2013, 06:14:48 am » |
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°?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2415
|
 |
« Reply #7 on: January 12, 2013, 06:32:41 am » |
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 :  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
Sr. Member
Karma: 4
Posts: 272
|
 |
« Reply #8 on: January 12, 2013, 06:34:23 am » |
|
|
|
|
|
Logged
|
Christian
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #9 on: January 12, 2013, 07:07:22 am » |
Merci Artouste et Christian_R, je vais regarder.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #10 on: January 12, 2013, 07:46:23 am » |
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 }
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2415
|
 |
« Reply #11 on: January 12, 2013, 07:56:05 am » |
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);
}
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #12 on: January 12, 2013, 07:58:26 am » |
NB testé compil OK , pas testé en reel C'est à dire, je le mets quand même sur la carte?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2415
|
 |
« Reply #13 on: January 12, 2013, 08:03:13 am » |
NB testé compil OK , pas testé en reel C'est à dire, je le mets quand même sur la carte?  oui , parce que si tu le mets ailleurs cela risque d’être inefficace  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
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #14 on: January 12, 2013, 08:09:16 am » |
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
|
|
|
|
|
|