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 #includeServo 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); } } }
Vidéo de démonstration :