#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?
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°
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é
ç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
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 :
#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
}
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);
}
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?
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.
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.