Testeur de servo Arduino

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 :