Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Calibrage précis de servomoteurs avec Arduino UNO et shield PWM Adafruit

Composants et fournitures

Arduino UNO ×1
Shield pilote PWM pour servomoteurs Adafruit ×1
Boulons M3 ×8
Rondelles M3 ×8
Convertisseur abaisseur de tension LM2596 DC-DC ×1
Filament PLA rouge ×1
Filament PLA blanc ×1
Équerre de 180° transparente ×1
Potentiomètre rotatif (générique) ×1
Servomoteur 9g ×1

Outils et machines nécessaires

Applications et services en ligne

À propos du projet

Dans un précédent article sur Hackster, j'ai présenté un dispositif pour comparer la rotation de différents servomoteurs d'un même lot, montrant qu'un même signal PWM produit des comportements significativement différents. L'image ci-dessous illustre des servomoteurs tous partis de leur position extrême anti-horaire et recevant le même signal PWM — tous ont un comportement légèrement différent.

Pourquoi ne pas utiliser les bibliothèques servo existantes pour Arduino ?

J'utilise le pilote de servomoteurs PWM Adafruit pour commander plusieurs servos, ce qui permet d'envoyer un signal PWM différent à chaque servo. Je pourrais utiliser la bibliothèque Servo intégrée à Arduino, mais plusieurs raisons m'en empêchent :

Bien sûr, les servos 9g que j'utilise sont bon marché et ne sont pas conçus pour la précision — mais je pense pouvoir en tirer plus de valeur. Je veux les utiliser pour un robot marcheur et ai besoin que leur comportement soit plus précis et prévisible.

Comment contrôler mes servos de modélisme plus précisément ?

Le constat que mes servos se comportent tous différemment m'a poussé à construire un dispositif de calibration : quelles valeurs PWM envoyer pour atteindre 0° ? Le point central à 90° ? Comment éviter d'envoyer une valeur PWM qui claque le servo en butée avec grincement d'engrenages ?

J'ai combiné deux concepts simples :

Pour cette version, j'utilise le moniteur série de l'IDE Arduino pour lire la valeur du signal PWM, que je note manuellement.

J'ai utilisé Autodesk 123D pour concevoir un support simple maintenant le potentiomètre, le rapporteur, un servo unique, l'Arduino, le pilote PWM Adafruit et une alimentation.

Je veux continuer d'utiliser le pilote PWM Adafruit pour la calibration, car c'est ce que j'utiliserai dans mon projet final. Si je devais commander le servo directement depuis une broche Arduino, je reproduirais cela dans le dispositif pour calibrer contre le PWM de l'Arduino.

Construction du dispositif

J'ai imprimé chaque pièce et les ai assemblées avec les boulons et rondelles M3.

Les trous de fixation sont ajustés à mes composants — d'autres composants peuvent avoir des variations de diamètres et positions.

Côté électronique : la broche centrale du potentiomètre est reliée à la broche A0 de l'Arduino, les deux autres au 0V et 5V. Le pilote PWM est emboîté sur l'Arduino, puis j'ai connecté le convertisseur abaisseur (réglé pour convertir 9V en 5V). Le servo 9g est connecté au premier slot du shield, puis j'ai téléversé le programme sur l'Arduino.

Le résultat final est visible sur les photos. En tournant le bouton en haut à gauche, je contrôle la position du servo, et via le moniteur série de l'IDE Arduino, je lis la valeur PWM envoyée pour tout angle donné.

Ce que m'apprend le dispositif

Pour mon servo, je l'ai tourné à sa limite horaire maximale, et placé le palonnier juste au-delà du repère 180° du rapporteur.

J'ai alimenté le dispositif, puis tourné le potentiomètre jusqu'à aligner l'aiguille du servo sur 0°, et noté la valeur PWM sur le moniteur série. Puis j'ai tourné jusqu'à 10°, noté la valeur, et ainsi de suite par pas de 10° jusqu'à 180°. Les résultats sont dans le tableau ci-dessous.

J'ai tracé un graphique des résultats (ci-dessous), montrant une relation fortement linéaire entre PWM et angle, comme prévu.

J'ai maintenant des paires valeurs PWM/angle caractéristiques de ce servo précis — d'autres servos auront des caractéristiques similaires mais non identiques.

Deux options s'offrent à moi pour une meilleure précision :

Dans les deux cas, je contrôle ce servo avec plus de précision et de confiance. C'est plus d'effort pour calibrer chaque servo précisément, mais pour mon projet, cela en vaut la peine pour la précision accrue.

Bien sûr, quand je retire le servo du dispositif, je dois conserver le palonnier attaché, car les mesures correspondent à la façon dont le palonnier était fixé pendant la calibration.

Améliorations pour la prochaine version

Après avoir calibré plusieurs servos, voici les améliorations prévues :

Conclusion

Voilà — mes servos de modélisme sont bon marché et pas conçus pour la précision — et pour beaucoup d'applications, ils suffisent. Cependant, je veux en tirer un peu plus de précision et de répétabilité, et ce dispositif m'y aide.

Code

Programme pour dispositif de calibration de servo
#include <Adafruit_PWMServoDriver.h>
#define analogIn A0
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
int inputValue = 0;
int tmpPwmValue = 0;

void setup() {
  Serial.begin(9600);
  pwm.begin();
  pwm.setPWMFreq(60);
}

void loop() {
  inputValue = analogRead(analogIn); // 0 à 1024
  // Par observation, valeurs PWM min/max servo généralement entre 100 et 612
  int pwmValue = (int)(100 + (inputValue / 2));
  pwm.setPWM(0, 0, pwmValue);
  
  // Éviter d'afficher des données dupliquées
  if (pwmValue != tmpPwmValue) {
    Serial.print("Potentiometer Input = ");
    Serial.print(inputValue);
    Serial.print(", PWM = ");
    Serial.println(pwmValue);
  }
  tmpPwmValue = pwmValue;
  delay(15);
}

Pièces personnalisées et boîtiers

Dépôt des pièces pour le calibrateur de servo :
https://github.com/jeremylindsayni/ServoCalibrator

Processus de fabrication

  1. Impression 3D avec l'acide polylactique (PLA) : Guide complet pour les professionnels
  2. Suivi de visage Pan/Tilt temps réel sur Raspberry Pi – Guide pratique
  3. PLA vs ABS vs Nylon : Choisir le bon filament pour l'impression 3D
  4. Walbi : Un robot bipède stable construit avec Arduino et servos LX-16A
  5. Bras robotique 5 DoF piloté par Arduino Yun et contrôlé via Blynk
  6. PLA vs ABS en Impression 3D : Différences Clés et Quand les Utiliser
  7. Passage aux entraînements DC : alternative fiable aux servos AC pour contrôle mouvement industriel
  8. PLA : Est-il vraiment recyclable et biodégradable ?
  9. Le PLA se dissout-il ou se décompose-t-il dans l'eau ? Conditions et astuces d'étanchéité