Logo Mon Club Elec

Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.

Le servomoteur à rotation continue est un moteur électrique qui peut être utilisé pour contrôler la vitesse et le sens de rotation d’un objet. Il est très utile pour les applications qui nécessitent une précision et une flexibilité dans le contrôle de la vitesse et du sens de rotation. Dans cet article, nous allons examiner un test simple qui peut être utilisé pour contrôler la vitesse et le sens de rotation d’un servomoteur à rotation continue à l’aide d’une résistance variable. Nous allons voir comment cette méthode peut être utilisée pour contrôler la vitesse et le sens de rotation d’un servomoteur à rotation continue.

Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.

Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.

(cliquer sur l’image pour agrandir)

1.  Présentation

  • Une résistance variable est connectée sur A0
  • Le servomoteur est connecté sur une broche E/S en sortie
  • La position médiane de la résistance met le servomoteur à l’arrêt
  • La rotation vers la droite/gauche de la résistance fait tourner le moteur dans l’un ou l’autre sens à des vitesses variables.
  • La largeur d’impulsion courante est affichée sur le port série pour permettre d’étalonner le servomoteur à rotation continue.

Ce programme utilise les fonctionnalités suivantes :

  • Utilise la connexion série vers le PC
  • Utilise la conversion analogique numérique 10 bits
  • Utilise un servomoteur

Ressources utiles associées à ce programme :

2.  Matériel Nécessaire

2.1  L’espace de développement Arduino

  • … pour éditer, compiler le programme et programmer la carte Arduino.
Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.

2.2  Le matériel suivant pour réaliser le montage associé

  • une plaque d’essai pour montage sans soudures,
Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.
  • des straps,
Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.
  • une résistance variable linéaire de 10 KOhms,
Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.
  • un servomoteur à rotation continue
Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.

3.  Instructions de montage

  • La connexion série vers le PC utilise les broches 0 et 1 (via le câble USB)
  • Connecter un servomoteur sur la broche 2

ATTENTION : il est possible de connecter directement 2 ou 3 servomoteurs sur la carte Arduino
Au-delà : utiliser une interface de puissance, par exemple le circuit intégré ULN 2803 octuple driver de puissance.

4.  Le schéma théorique du montage

Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.

Le schéma théorique du montage (cliquer pour agrandir)

5.  Le circuit du montage

Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.

Le schéma du montage à réaliser (cliquer pour agrandir)

6.  Fonctionnement du programme

6.1  Structure globale du programme

Ce programme simple comprend :

  • une entête déclarative
  • une partie « configuration » qui ne sera exécutée qu’une fois (fonction setup( ) )
  • une partie constituée d’une boucle sans fin que le programme répètera à l’infini ( fonction loop( ) ) : c’est le coeur du programme.

6.2  Déroulement du programme

Le programme se déroule de la façon suivante :

  • Après avoir pris en compte les instructions de la partie déclarative,
  • puis après avoir exécuté la partie configuration ( fonction setup( ) ),
  • le programme bouclera sans fin ( fonction loop ( ) ), exécutant de façon répétée le code compris dans la boucle sans fin.
Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.
Le déroulement du programme

7.  Explication du programme

  • Une mesure de la tension analogique en sortie de la résistance variable est réalisée en boucle.
  • L’impulsion du servomoteur est modifiée en conséquence, à l’aide de l’instruction map() qui rééchelonne la valeur
  • Lorsque la tension est médiane, le servomoteur est arrêté.
  • La valeur de l’impulsion est affichée dans le Terminal Série.

8.  Mise en oeuvre du programme

8.1  Préparation du montage et programmation de la carte Arduino :

  • Commencer par réaliser le montage indiqué sur plaque d’expérimentation
  • Ensuite, programmer la carte Arduino avec ce programme (en bas de page) selon la procédure habituelle

8.2  Préparation du Terminal côté PC dans le logiciel Arduino

  • Côté PC, il faut ouvrir la fenêtre terminal de l’IDE Arduino : pour ce faire, un simple clic sur le bouton « Sérial Monitor ».
Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.
  • La fenêtre « Terminal » s’ouvre alors :
Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.
  • Il faut alors régler le débit de communication sur la même valeur que celle utilisée par le programme avec lequel nous allons programmer la carte Arduino :
Test simple d’un servomoteur à rotation continue : contrôle de la vitesse et du sens de rotation à l’aide d’une résistance variable.

8.3  Fonctionnement

  • Faire varier la résistance dans un sens puis dans l’autre : la vitesse et le sens du moteur se modifient en conséquence.

9.  Le programme complet en langage Arduino

A copier/coller directement dans l’éditeur Arduino

// — Programme Arduino —
// Trame de code générée par le générateur de code Arduino
// du site www.mon-club-elec.fr

// Auteur du Programme : X. HINAULT – Tous droits réservés
// Programme écrit le : 21/3/2012.

// ——- Licence du code de ce programme —–
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License,
//  or any later version.
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.

// ////////////////////  PRESENTATION DU PROGRAMME ////////////////////

// ——– Que fait ce programme ? ———
 /* Une résistance variable est connectée sur A0
Le servomoteur est connecté sur une broche E/S en sortie
La position médiane de la résistance met le servomoteur à l’arrêt
La rotation vers la droite/gauche de la résistance fait tourner le moteur dans l’un ou l’autre sens à des vitesses variables.
La largeur d’impulsion courante est affichée sur le port série pour permettre d’étalonner le servomoteur à rotation continue.
*/

// — Fonctionnalités utilisées —

// Utilise la connexion série matérielle vers le PC
// Utilise la conversion analogique numérique 10 bits
// Utilise un servomoteur

// ——– Circuit à réaliser ———

// ******* ATTENTION : il est possible de connecter directement 3 ou 4 servomoteurs standards sur la carte Arduino
// Au-delà : utiliser une alimentation externe
// Connecter un servomoteur sur la broche 2

// /////////////////////////////// 1. Entête déclarative ///////////////////////
// A ce niveau sont déclarées les librairies incluses, les constantes, les variables, les objets utiles…

// — Déclaration des constantes —

// — Inclusion des librairies —

#include <Servo.h> // librairie pour servomoteur

// — Déclaration des constantes utiles —

//— Constantes utilisées avec le servomoteur
const int MAX_ARRIERE=800; // largeur impulsion pour position ANGLE_MIN degrés du servomoteur
const int ARRET=1490; // largeur impulsion pour position ANGLE_MEDIANE degrés du servomoteur
const int MAX_AVANT=2200; // largeur impulsion pour position ANGLE_MAX degrés du servomoteur

// classiquement : centrage sur 1500 – maxi sens 1 = 1000 et maxi sens 2 = 2000
// laisser valeur larges ici pour étalonner… 800-2200

// — Déclaration des constantes des broches E/S numériques —

const int broche_servo=2; // Constante pour la broche 2

// — Déclaration des constantes des broches analogiques —

//const int Voie[6]={0,1,2,3,4,5}; //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 impulsion=0.0; // variable pour impulsion servomoteur en microsecondes

// — Déclaration des objets utiles pour les fonctionnalités utilisées —

//— Création objet servomoteur
Servo servo;  // crée un objet servo pour contrôler le servomoteur

// ////////////////////////// 2. 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 1 seule fois au démarrage du programme —

// ——- Initialisation fonctionnalités utilisées ——-  

Serial.begin(115200); // initialise connexion série matérielle à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission

//— Initialisation Servomoteur
servo.attach(broche_servo);  // attache l’objet servo à la broche de commande du servomoteur
// lorsque le servomoteur est attaché à la broche, l’impulsion de commande sera mise sur la broche

// ——- Broches en sorties numériques ——-  
 pinMode (broche_servo,OUTPUT); // Broche broche_servo configurée en sortie

// ——- Broches en entrées numériques ——-  

// ——- Activation si besoin du rappel au + (pullup) des broches en entrées numériques ——-  

// ——- Initialisation des variables utilisées ——-  

// ——- Codes d’initialisation utile ——-  

digitalWrite(broche_servo,HIGH); // met la broche à 1 = arrete le servomoteur

} // fin de la fonction setup()
// ********************************************************************************

////////////////////////////////// 3. 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 —

mesure_brute= analogRead(A0) ; // acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée

impulsion=map(mesure_brute, 0,1023, MAX_ARRIERE, MAX_AVANT);

Serial.print(« Largeur impulsion = »);
Serial.print(impulsion);
Serial.println( » microsecondes »);

servo.writeMicroseconds(impulsion); // crée impulsion à partir valeur angle – plus précis que write()

delay(100); // entre 2 mesures

} // fin de la fonction loop() – le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

 

Noter cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Archive Mon Club Elec

Articles populaires

Newsletter

Inscrivez-vous maintenant et bénéficiez d'un soutien continu pour réaliser vos travaux électriques en toute sécurité.