J’ai réalisé un testeur de servo avec un Arduino. Les puristes diront que c’est surdimensionné mais c’est rapide à mettre en oeuvre grâce à la polyvalence de l’Arduino.

Matériel nécessaire :

  • Un Arduino. Un mini fera très bien l’affaire.
  • Un potentiomètre de 10kΩ. 47kΩ dans mon cas mais 10kΩ est plus conseillé.
  • Un interrupteur deux positions.
  • Des fils de liaison.
  • Un boîtier de 4 piles pour l’alimentation 5V.

Pour le branchement suivez les instructions dans la déclaration de variable en haut du code source.
Le point particulier est de réaliser un câble « Y » pour relier l’alimentation du servo directement au boîtier de pile. En effet l’Arduino mini ne fournit pas assez de courant pour faire tourner un servo, même un micro-servo.
Pour limiter le câblage j’utilise des broches digitales comme alimentation ou masse en les plaçant à l’état haut ou bas.

// Testeur de servo par Benoît COURTY
// Inspiré de l'exemple de Michal Rinott : http://arduino.cc/en/Tutorial/Knob
#include  

Servo myservo;  // Librairie servo

int pinPot = 0;  // Broche du milieu du potentiometer sur A0
int potGND = 4; // Broche "-" du potentiometer sur D4
int val;    // Valeur du potentiometre
int pinInter = 9; // Broche du signal de l'inter sur D9
int pinAlimInter = 8; // 5V de l'inter sur la broche D8
int pinMasseInter = 7; // Masse de l'inter sur la broche D7
int pinSignalServo = 3; // Signal du servo : fil blanc/orange sur la broche D3.

void setup() 
{
  pinMode(pinInter, INPUT);
  pinMode(pinAlimInter, OUTPUT);
  pinMode(pinMasseInter, OUTPUT);
  pinMode(potGND, OUTPUT);
  digitalWrite(pinMasseInter, LOW);
  digitalWrite(potGND, LOW);
  digitalWrite(pinAlimInter, HIGH);
  myservo.attach(pinSignalServo);  // Indique la broche du servo à la librairie.
  //Serial.begin(9600);
} 

void loop() 
{
  //Serial.println(analogRead(pinPot));
  if(digitalRead(pinInter))              // Lecture de la position de l'interrupteur
  {
    val = analogRead(pinPot);            // reads the value of the potentiometer (value between 0 and 1023) 
    val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
    myservo.write(val);                  // sets the servo position according to the scaled value 
    delay(15);                           // waits for the servo to get there 
  }
  else  {
    myservo.write(0);                  // Servo en position minimum
    delay(1500);
    if(!digitalRead(pinInter)) // Lecture de la position de l'interrupteur des fois que ça change...
    {
      myservo.write(90);                 // Servo en position médiane
      delay(1500);
    }
    if(!digitalRead(pinInter)) // Lecture de la position de l'interrupteur des fois que ça change...
    {
      myservo.write(180);                  // Servo en position maximale 
      delay(1500);
    }
  }
}

Photos du montage :
ArduinoTesteurServos00937

ArduinoTesteurServos00938

Vidéo de démonstration :


Categories: DIY, Drone


4 Responses so far.


  1. claude Ufo dit :

    Bonjour, je pense qu’il y a une erreur :
    ne faut il pas lire « interupteur » au lieu de « potentiométre »

    int pinInter = 9; // Broche du milieu de l’interupteur sur D9

    la photo represente le potard avec 3 fils
    D4 = la masse
    A0 = La valeur à lire
    Et le 3eme fils ? Irait il au 5Volts ?

    Merci pour ce schéma que je vais tester aujourd’hui.
    Claude

    • Benoît Courty dit :

      Désolé, votre message c’était perdu au milieu des spams…

      Absolument, c’est une erreur ce copier-coller, j’ai corrigé !
      Le 3° fil est effectivement le 5V.

  2. Pasteau Claude dit :

    Bonjour
    j’ai réalisé le testeur et mes servos fonctionnent,par contre je ne connais rien en programmation,je me contente pour le moment de faire du copié collé.
    j’ai téléversé le programme sur un arduino uno avec la version 1.0.6 et 1.8.1 et j’ai un probleme avec le moniteur serie qui n’affiche rien,j’ai bien mis en 9600 bds est-ce normal ?
    merci de me venir en aide.
    Cordialement

    • Benoît Courty dit :

      Bonjour,
      Bravo, c’est déjà bien que ça fonctionne !
      Si vous avez fait un copié-collé c’est normal qu’il n’y ait rien d’affiché car les lignes d’écritures sur le port série sont en commentaires : le // devant la ligne fait qu’elle est ignorée.
      Il faut donc les retirer devant « Serial.begin(9600); » et « Serial.println(analogRead(pinPot)); » et vous devriez voir la valeur lue s’afficher.
      Bonne continuation