Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Präzise Servo-Kalibrierung mit Arduino UNO & Adafruit PWM Shield

Komponenten und Zubehör

Arduino UNO × 1
Adafruit PWM Servo Driver Shield × 1
M3 Schraube × 8
M3 Unterlegscheibe × 8
LM2596 DC-DC Step-Down Spannungswandler × 1
Rotes PLA-Filament × 1
Weißes PLA-Filament × 1
180° Geodreieck (transparent) × 1
Drehpotentiometer (allgemein) × 1
9g Servomotor × 1

Benötigte Werkzeuge und Maschinen

Apps und Online-Dienste

Über dieses Projekt

In einem früheren Hackster-Beitrag verglich ich, wie verschiedene Servos derselben Charge auf identische PWM-Signale reagieren – sie zeigen deutliche Unterschiede. Das Bild zeigt Servos, die alle im äußersten gegen den Uhrzeigersinn starteten und das gleiche PWM-Signal erhielten; alle verhalten sich leicht anders.

Präzise Servo-Kalibrierung mit Arduino UNO & Adafruit PWM Shield

Warum nicht bestehende Arduino-Servo-Bibliotheken?

Ich nutze den Adafruit PWM Servo Driver, um viele Servos über nur zwei Pins (I2C) anzusteuern, statt jedem Servo einen eigenen Arduino-Pin zu widmen. Zudem habe ich erlebt, dass die Standard-Servo-Bibliothek beim Ansteuern der 0-Grad-Position manchmal den Servo bis zum mechanischen Anschlag fährt und die Getriebe knirschen lässt. Die billigen 9g-Servos sind nicht für Präzision ausgelegt, aber für meinen Laufroboter brauche ich vorhersehbareres Verhalten.

Wie kann ich Hobby-Servos präziser steuern?

Ich baute ein Kalibriergerät, das zwei einfache Konzepte kombiniert:

Für diese Version lasse ich den PWM-Wert im Serial Monitor der Arduino IDE anzeigen und notiere ihn manuell.

Ich entwarf in Autodesk 123D eine Halterung für Potentiometer, Geodreieck, Servo, Arduino, Adafruit Shield und Netzteil.

Präzise Servo-Kalibrierung mit Arduino UNO & Adafruit PWM Shield

Aufbau des Geräts

Alle Teile wurden gedruckt und mit M3-Schrauben und Unterlegscheiben verschraubt. Die Montagelöcher sind auf meine Komponenten angepasst; bei anderen Bauteilen können Abweichungen nötig sein.

Elektronik: Mittlerer Pin des Potentiometers an Arduino A0, äußere Pins an 0V und 5V. Adafruit Shield auf Arduino gesteckt. DC-DC-Wandler (9V auf 5V eingestellt) angeschlossen. 9g-Servo an ersten Slot des Shields. Sketch hochladen.

Das Ergebnis: Durch Drehen am Potentiometer-Knopf wird der Servo bewegt; der Serial Monitor zeigt den PWM-Wert für jeden Winkel.

Präzise Servo-Kalibrierung mit Arduino UNO & Adafruit PWM Shield
Präzise Servo-Kalibrierung mit Arduino UNO & Adafruit PWM Shield

Was verrät das Gerät?

Ich drehte den Servo zum äußersten Uhrzeigersinn-Anschlag und setzte den Hebel so, dass er knapp über 180° am Geodreieck zeigte. Dann justierte ich den Potentiometer, bis der Hebel auf 0° zeigte, und notierte den PWM-Wert. Dies wiederholte ich alle 10° bis 180°.

Präzise Servo-Kalibrierung mit Arduino UNO & Adafruit PWM Shield

Ein Diagramm zeigt den stark linearen Zusammenhang zwischen PWM und Winkel.

Präzise Servo-Kalibrierung mit Arduino UNO & Adafruit PWM Shield

Jetzt habe ich charakteristische PWM-Winkel-Paare für diesen Servo. Andere Servos ähneln sich, sind aber nicht identisch.

Zwei Optionen für präzisere Steuerung:

Beide Methoden ermöglichen präzisere und sicherere Steuerung. Der Kalibrieraufwand pro Servo lohnt sich für mein Projekt.

Wichtig: Beim Ausbau des Servos muss der Hebel in der kalibrierten Position verbleiben, da die Messungen auf dieser Montage basieren.

Verbesserungen für die nächste Version

Fazit

Billige Hobby-Servos sind für viele Anwendungen okay. Mit diesem Kalibriergerät hole ich mehr Genauigkeit und Wiederholbarkeit heraus.

Code

Sketch für Servo-Kalibriergerät (C/C++)
#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
  // Servo min/max PWM typischerweise 100-612
  int pwmValue = (int)(100 + (inputValue / 2));
  pwm.setPWM(0, 0, pwmValue);
  if (pwmValue != tmpPwmValue) {
    Serial.print("Potentiometer Input = ");
    Serial.print(inputValue);
    Serial.print(", PWM = ");
    Serial.println(pwmValue);
  }
  tmpPwmValue = pwmValue;
  delay(15);
}

Eigene Teile und Gehäuse

Repo für Servo-Kalibriergerät-Teile

GitHub Repository

Herstellungsprozess

  1. PLA 3D-Druck: Der umfassende Leitfaden für Profis
  2. Echtzeit Pan/Tilt Gesichtstracking auf Raspberry Pi – Praktischer Leitfaden
  3. PLA vs. ABS vs. Nylon: Das richtige 3D-Druck-Filament wählen
  4. Walbi: Stabiler zweibeiniger Roboter mit Arduino und LX-16A Servos
  5. Arduino Yun 5-DOF Roboterarm mit IoT & Blynk-Steuerung
  6. PLA vs. ABS im 3D-Druck: Unterschiede, Eigenschaften & Entscheidungshilfe
  7. Umstieg auf DC-Antriebe: Zuverlässige Alternative zu AC-Servos in der industriellen Motion Control
  8. PLA: Wirklich recycelbar und biologisch abbaubar?
  9. Löst sich PLA in Wasser auf? Bedingungen & Tipps zur Wasserdichtigkeit
  10. Leitet PLA-Filament Strom? Leitfähige Varianten & Druckherausforderungen