ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
ATELIERS Python + Qt | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | RaspberryPi |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |
Positionner un servomoteur à l'aide d'une résistance variableARDUINO - EXPERT - CAN - SERVO ![]() Sur cette page... (Masquer)
1. PrésentationCe programme Positionne un servomoteur à l'aide d'une résistance variable (potentiomètre) 10K. On remarquera toute la puissance du langage Arduino qui nous permet de caler la position du servomoteur sur la mesure issue de la résistance variable en seulement 3 instructions ! Ce programme utilise les fonctionnalités suivantes :
2. Matériel Nécessaire2.1 L'espace de développement Arduino
![]() 2.2 Le matériel suivant pour réaliser le montage associé
![]()
![]()
![]() 3. Instructions de montage
Pour plus de détails, voir : Principes d'utilisation des alimentations avec une carte Arduino et des servomoteurs 4. Le schéma théorique du montage![]() Le schéma théorique du montage 5. Le circuit du montage![]() Le schéma du montage à réaliser 6. Explication du programme6.1 Structure globale du programmeCe programme simple comprend :
6.2 Déroulement du programmeLe programme se déroule de la façon suivante :
![]() Le déroulement du programme 7. Au niveau de la partie déclarative :Inclusion des librairies utilisées
#include <Servo.h> // librairie pour servomoteur Déclaration de constantes utiles
const int POS_MIN=550; // largeur impulsion pour position 0° servomoteur
// POS_MIN=550 pour futaba S3003
const int POS_MAX=2330; // largeur impulsion pour position 180° servomoteur
// POS_MAS=2330 pour futaba s3003
Déclaration des constantes de broches
const int broche_servo=2; //declaration constante de broche const int Voie_0=0; //declaration constante de broche analogique Déclaration des variables globales
int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique float mesuref=0.0;// Variable pour calcul résultat décimal de conversion analogique numérique
int angle_servo=0; // variable pour angle du servomoteur Déclarations des objets utiles pour les fonctionnalités utilisées
Servo mon_servo; // crée un objet servo pour contrôler le servomoteur 8. Au niveau de la fonction d'initialisation setup( ) :Initialisation des fonctionnalités utilisées :
mon_servo.attach(broche_servo, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur configuration des broches utilisées :
pinMode(broche_servo, OUTPUT); //met la broche en sortie 9. Au niveau de la boucle principale, la fonction loop ( ) :
// acquisition conversion analogique numérique (100µs env.) //sur broche analogique indiquée - résultat 10bits (0-1023) mesure_brute=analogRead(Voie_0);
angle_servo=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180 // map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié
mon_servo.write(angle_servo); // positionne le servo à l'angle voulu delay (100); // pause entre 2 mesures et modif position servomoteur
Se reporter aux commentaires présents dans le programme pour plus de détails. 10. Mise en oeuvre du programme10.1 Préparation du montage et programmation de la carte Arduino :
10.2 Fonctionnement
11. Le programme complet en langage Arduino :A copier/coller directement dans l'éditeur Arduino
// --- Programme Arduino ---
// par X. HINAULT - 02/2010
// www.mon-club-elec.fr
// --- Que fait ce programme ? ---
/* Positionne un servomoteur à l'aide d'une résistance variable (potentiomètre) 10K*/
// --- Fonctionnalités utilisées ---
// Utilise la conversion analogique numérique 10bits sur les voies analogiques analog 0,
// Utilise les servomoteurs
// --- Circuit à réaliser ---
// Connecter sur la broche 2 (configurée en sortie) la broche de commande d'un servomoteur.
// Broche Analog 0 (=broche 14) en entrée Analogique :
// connecter la sortie d'une résistance variable connectée entre 0V et 5V.
//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...
// --- Inclusion des librairies utilisées ---
#include <Servo.h> // librairie pour servomoteur
// --- Déclaration des constantes ---
const int POS_MIN=550; // largeur impulsion pour position 0° servomoteur
// POS_MIN=550 pour futaba S3003
const int POS_MAX=2330; // largeur impulsion pour position 180° servomoteur
// POS_MAS=2330 pour futaba s3003
int angle_servo=0; // variable pour angle du servomoteur
// --- constantes des broches ---
const int broche_servo=2; //declaration constante de broche
const int Voie_0=0; //declaration constante de broche analogique
// --- Déclaration des variables globales ---
int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique
float mesuref=0.0;// Variable pour calcul résultat décimal de conversion analogique numérique
// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---
Servo mon_servo; // crée un objet servo pour contrôler le servomoteur
//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme
void setup() { // debut de la fonction setup()
// --- ici instructions à exécuter au démarrage ---
mon_servo.attach(broche_servo, POS_MIN, POS_MAX);
// attache l'objet servo à la broche de commande du servomoteur
// ------- Broches en sortie -------
pinMode(broche_servo, OUTPUT); //met la broche en sortie
// ------- Broches en entrée -------
// ------- Activation du rappel au + interne des broches en entrée si nécessaire -------
} // fin de la fonction setup()
// ********************************************************************************
//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
void loop(){ // debut de la fonction loop()
// --- ici instructions à exécuter par le programme principal ---
// acquisition conversion analogique numérique (100µs env.)
//sur broche analogique indiquée - résultat 10bits (0-1023)
mesure_brute=analogRead(Voie_0);
angle_servo=map(mesure_brute,0,1023,0,180);
// convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180
// map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié
mon_servo.write(angle_servo); // positionne le servo à l'angle voulu
delay (100); // pause entre 2 mesures et modif position servomoteur
} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************
// --- Fin programme ---
|