Leçon 92 : Contrôler plusieurs servos, chacun avec un potentiomètre | Cours Arduino étape par étape
Dans ce projet, vous apprendrez à construire un contrôleur de servo indépendant et multi-canaux en utilisant un Arduino Uno et deux potentiomètres. Au lieu d'un seul servo suivant un seul bouton, ce guide vous montre comment donner à chaque servo sa propre entrée analogique dédiée, vous permettant de contrôler de deux à six moteurs servos de manière indépendante et simultanée. C'est un élément fondamental pour tout projet nécessitant un contrôle manuel précis de plusieurs pièces mobiles.

Cette configuration est incroyablement polyvalente. Voici quelques façons pratiques de l'utiliser :
- Robotique :Contrôler le panoramique et l'inclinaison d'un stabilisateur de caméra ou les joints de base et de bras d'un petit robot.
- Animatroniques :Créer des mouvements réalistes pour une marionnette ou un personnage animatronique en contrôlant indépendamment sa tête et ses yeux.
- Contrôle du modèle :Construire un contrôleur personnalisé pour des véhicules radiocommandés ou des avions modèles afin d'ajuster précisément les volets et les ailerons.
- Automatisation :Création d'une station de dérivation manuelle pour un suiveur solaire ou un gabarit de positionnement multi-axes.
Matériel requis
- Arduino Uno (ou toute carte compatible)
- 2 moteurs servo (des servos standard à 180 degrés sont utilisés ici)
- 2x potentiomètres (10kΩ est un choix courant)
- Planche à pain et fils de jonction
- Alimentation externe 5V (recommandée pour plusieurs servos)
Guide de câblage
Ce projet nécessite un peu plus de câblage qu'une configuration à servomotor unique, principalement parce que vous devez distribuer l'alimentation et la masse à plusieurs composants. La clé est d'utiliser les barres d'alimentation de la planche à pain pour créer un bus commun de 5V et de GND. Un schéma de câblage est essentiel pour cette construction.

Décomposons les connexions, comme expliqué dans la vidéo (dans la vidéo à 02:23). Tout d'abord, configurez vos rails d'alimentation : connectez l'Arduino.5Vfixez au rail positif de la plaque de montage et leGNDpincez au rail négatif. Cela vous donne un accès facile à l'alimentation pour tous vos composants.
Potentiomètres :Chaque potentiomètre agit comme un diviseur de tension. Connectez la broche droite de chaque pot à le5Vrail et la broche gauche auGNDrail. La broche du milieu est le "balai" et fournit une tension variable. Connectez la broche du milieu du premier potentiomètre à l'entrée analogique.A0, et la broche du milieu du second àA1(in vidéo à 03:22).
Moteurs à courant alternatif :Chaque servomoteur a trois fils. Connectez le fil de couleur foncée (généralement noir ou marron) auGNDrail. Connectez le fil du milieu (généralement rouge) à le5Vrails. Enfin, connectez le fil de signal (généralement orange ou jaune) à une broche compatible PWM sur l'Arduino. Le fil de signal du premier servo va à la broche3, et le fil de signal du deuxième servomoteur va à la broche5(nota en la vidéo à 04:01). N'oubliez pas que vous devez utiliser des broches compatibles PWM (marquées d'un tilde "~" sur l'Uno) pour le contrôle des servomoteurs.
Explication du code
Le code est basé sur l'exemple standard "Knob" de l'IDE Arduino, mais il est modifié pour gérer deux servomoteurs. La logique est simple : lire la valeur analogique d'un potentiomètre, la mapper à un angle et commander le servomoteur pour qu'il se déplace à cet angle. La section de configuration en haut du code est l'endroit où vous ferez tous vos ajustements.
Voici la section configurable par l'utilisateur qui définit les broches et crée les objets servo :
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin = A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin = A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
C'est le cœur de la configuration. Pour ajouter un troisième servo, vous devez copier le bloc "réglages du servo 2", changer tous les "2" en "3", assigner une nouvelle broche analogique (par exemple,A2) et un nouveau pin PWM (par exemple,9. LeServola classe est intégrée dans l'IDE Arduino, donc aucune bibliothèque supplémentaire n'est nécessaire.
Dans lesetup()la fonctionservo.attach(pin)La commande indique à l'Arduino quel pin est connecté à chaque fil de signal du servo. Vous devez avoir une ligne pour chaque servo que vous utilisez.
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
Dans leloop()le code lit la valeur du potentiomètre, la mappe à une plage de 0 à 180 degrés et écrit cet angle dans le servo. Ledelay(5)à la fin est un paramètre de réglage. Comme démontré dans la vidéo, réduire cette valeur de 15 à 5 millisecondes rend le mouvement du servo beaucoup plus fluide et élimine les vibrations (dans la vidéo à 12:00).
Démonstration de projet en direct
Une fois que vous avez câblé le circuit et téléchargé le code, la démonstration est immédiate. Lorsque vous alimentez l'Arduino, chaque servo se déplacera vers une position déterminée par le réglage actuel de son potentiomètre correspondant. Lorsque vous tournez un bouton, son servo suivra le mouvement de manière fluide. La vidéo montre que les deux servos fonctionnent entièrement de manière indépendante, permettant des mouvements complexes et simultanés. Si vous remarquez des tremblements ou des vibrations, ajuster ledelay()La valeur dans la boucle est la première chose à essayer.
Chapitres
- [00:00] Introduction et aperçu du projet
- [00:56] Comprendre les servomoteurs
- Diagramme de câblage pour deux servomoteurs et des potentiomètres
- [04:15] Explication détaillée du câblage
- [06:49] Explication du code : Configuration et mise en place
- [09:15] Explication du code : Logique de contrôle et cartographie
- [11:15] Démonstration en direct et réglage
/*
* Control two or more servo motors
* using potentiometers.
* Modified by Ahmad Shamshiri on Oct 17, 2019 at 20:13
* in Ajax, Ontario, Canada . www.Robojax.com
* This code on robojax https://robojax.com/RJT766
*
* Original code from Arduino IDE: File->Examples->Servo->knob
*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
* Get this code and other Arduino codes from Robojax.com
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
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
(at your option) 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 <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin =A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin =A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
void loop() {
//Robojax.com multiple servo
servo1Value = analogRead(servo1PotPin);
servo1Value = map(servo1Value, 0, 1023, 0, 180);
servo1.write(servo1Value);
servo2Value = analogRead(servo2PotPin);
servo2Value = map(servo2Value, 0, 1023, 0, 180);
servo2.write(servo2Value);
delay(5);
//Robojax.com multiple servo
}// loop end
Ce dont vous pourriez avoir besoin
-
Amazon
-
Amazon
-
eBay
-
AliExpressAchetez le moteur servo SG90 180 ou 360 sur AliExpress.s.click.aliexpress.com
Ressources et références
Aucune ressource pour le moment.
Fichiers📁
Autres fichiers
-
Fiche technique du moteur SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB