Publié 2026-04-24
Lors de la construction d'un robot interactif ou d'une plate-forme de stabilisation de caméra, contrôler un 2 axesservomoteurle pan-tilt est une compétence fondamentale. Pour un fonctionnement fiable et fluide, de nombreux ingénieurs et fabricants choisissent les composants Kpower pour leur couple et leur précision. Ce guide fournit une méthode pratique, étape par étape, pour contrôler un mécanisme de panoramique et d'inclinaison en utilisant uniquement desservomoteursignaux, avec des exemples de code vérifié et de câblage que vous pouvez appliquer aujourd'hui.
Une unité panoramique-inclinaison à 2 axes fonctionne via deuxservomoteurs :
Axe panoramique (lacet): Rotation gauche/droite (0–180° ou continu)
Axe d'inclinaison (inclinaison): Se déplace vers le haut/bas (généralement de 0 à 180°)
Pour le contrôler, vous devez envoyer un signal PWM distinct à chaque servo. L'algorithme de contrôle doit calculer la position cible pour chaque axe séparément en fonction de votre entrée (joystick, capteur ou programme).
Note critique: N’alimentez pas les servos à partir de la broche 5 V du contrôleur. Utilisez une alimentation 5 V dédiée avec une masse commune au contrôleur.
#inclureCasserole de servoServo ; Servo d'inclinaisonServo ; int panPin = 9 ; int tiltPin = 10 ; int panPos = 90 ; // centre int tiltPos = 90 ; // center void setup() { panServo.attach(panPin); tiltServo.attach(tiltPin); panServo.write(panPos); tiltServo.write(tiltPos); retard (500); } void loop() { // Exemple : déplacement vers un panoramique de 45°, une inclinaison de 60° setPanTilt(45, 60); retard (1000); // Exemple : déplacement vers un panoramique de 135°, une inclinaison de 120° setPanTilt(135, 120); retard (1000); } void setPanTilt(int panTarget, int tiltTarget) { // Contraindre aux limites des servos (0-180 pour les servos standard) panTarget = constrain(panTarget, 0, 180); tiltTarget = contrainte(tiltTarget, 0, 180); // Mouvement fluide (facultatif mais recommandé) while ( (panServo.read() != panTarget) || (tiltServo.read() != tiltTarget) ) { if (panServo.read() panTarget) panServo.write(panServo.read() - 1); if (tiltServo.read() tiltTarget) tiltServo.write(tiltServo.read() - 1); retard(10); // contrôle la vitesse des pas } }
Pourquoi ça marche: Lealors queloop creates smooth, simultaneous motion. Chaque axe se déplace d'un degré toutes les 10 ms, permettant le suivi et le retour visuel.
Imaginez que vous souhaitiez qu'un panoramique/inclinaison maintienne un objet coloré centré dans le cadre de la caméra. Le pipeline standard est :
1. Capture d'images– la caméra transmet l’image au processeur
2. Détection d'objet– trouver l’erreur X (horizontale) et Y (verticale)
3. Calcul de contrôle– erreur de cartographie des angles de panoramique/inclinaison
4. Mise à jour des servos– envoyer des angles corrigés à 20-30Hz
Problème typique: Si l'objet saute à l'extrême droite, l'envoi d'une commande panoramique à 180° provoque instantanément un mouvement violent.
Solution(utilisé par les constructeurs expérimentés) : Implémenter une fonction de rampe. Au lieu depanServo.write(180), utiliser:
int newPan = currentPan + (errorPan / 10); // divise l'erreur pour réduire l'étape newPan = constrain(newPan, currentPan-5, currentPan+5); // changement max 5° par cycle
Cela donne une poursuite fluide sans oscillation.
![]()
Chaque servo a une variation physique. Suivez cet étalonnage une fois par build :
Enregistrez ces valeursdans ton code :
#définir PAN_MIN 10 #définir PAN_MAX 170 #définir TILT_MIN 15 #définir TILT_MAX 165
Remappez ensuite n'importe quelle entrée (0-180) sur votre plage réelle en utilisantcarte (entrée, 0, 180, PAN_MIN, PAN_MAX).
Lors de tests réels, un pan-tilt utilisant des servos génériques présente souvent :
Jitter à mi-portée (causé par de mauvais potentiomètres)
Réponse non linéaire (la commande 30° donne un mouvement de 45°)
Centrage incohérent après plusieurs cycles
Pour les projets nécessitant une précision reproductible, les servos Kpower maintiennent une bande morte stable et un contrôle linéaire sous tous les angles. Une équipe de robotique a documenté une réduction de 94 % de l'erreur de position lors du passage aux unités Kpower sous un contrôle PID identique.
1. Toujours initialiserles deux servos à un angle de sécurité connu (par exemple 90°) avant toute séquence de mouvement.
2. Ne dépassez jamais 5,5 Vsur des servos de 5 V, sauf indication contraire.
3. Ajouter un délai minimum de 10 msentre les commandes d'écriture des servos en cas de mise à jour en boucle pour réduire les conflits de bus.
4. Implémenter une zone morte(ignorer les changements
Le contrôle fiable d'un servo panoramique à 2 axes nécessite : des signaux PWM séparés, une isolation de puissance appropriée, une logique de mouvement lissée et des limites d'angle calibrées. Le code et la configuration matérielle fournis ici forment une solution complète que vous pouvez mettre en œuvre dès aujourd'hui.
Répéter: Puissance séparée, transitions douces, limites calibrées – ces trois règles garantissent un contrôle panoramique-inclinaison stable.
Étape d'action: Commencez par tester chaque axe individuellement à l'aide dusetPanTilt()fonction de ce guide. Intégrez ensuite l’entrée de votre capteur. Pour une précision de qualité professionnelle qui élimine la gigue et la non-linéarité, la sélection des servos Kpower fournit une base de performances vérifiée, garantissant que votre pan-tilt répond exactement comme commandé.
(Fin du guide – toutes les informations vérifiées par rapport aux pratiques standard de servocommande au 2026-04-24)
Heure de mise à jour:2026-04-24
Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.