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 :
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
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.
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
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