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

Kalibrieren meiner Servos

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Adafruit PWM Servo Driver Shield
× 1
M3-Schraube
× 8
M3-Unterlegscheibe
× 8
LM2596 DC-DC Abwärtsspannungswandler
× 1
Rotes PLA
× 1
Weißes PLA
× 1
Durchsichtiger 180-Grad-Mathe-Winkelmesser
× 1
Drehpotentiometer (allgemein)
× 1
9g Servomotor
× 1

Notwendige Werkzeuge und Maschinen

3D-Drucker (generisch)

Apps und Onlinedienste

Arduino-IDE
Autodesk Fusion 360

Über dieses Projekt

In einem früheren Beitrag auf Hackster habe ich darüber geschrieben, wie ich ein Rig erstellt habe, um zu vergleichen, wie sich verschiedene Servos aus derselben Charge drehen, und gezeigt, dass das Senden der gleichen PWM-Signale an verschiedene Servos zu einigen signifikanten Unterschieden führt - das Bild unten zeigt Servos die alle in ihrer äußersten Position gegen den Uhrzeigersinn begannen und das gleiche PWM-Signal erhielten - sie alle haben ein leicht unterschiedliches Verhalten.

Warum nicht vorhandene Servobibliotheken für den Arduino verwenden?

Ich verwende den Adafruit PWM Servo Driver, um eine Reihe von Servos anzusteuern, und dies ermöglicht es mir, ein anderes PWM-Signal an jedes Servo zu senden. Ich könnte die Servo-Bibliothek verwenden, die in meine Arduino-Installation integriert ist - aber ich habe einige Gründe, dies nicht zu tun:

  • Mit dem PWM-Servotreiber von Adafruit kann ich meine Servos mit nur zwei Pins über I2C steuern, anstatt jedem Servo einen Pin auf meinem Arduino widmen zu müssen.
  • Ich habe manchmal mit der Arduino Servo-Bibliothek festgestellt, dass, wenn ich an ein Servo anschließe und ein Signal sende, damit es sich in die Null-Grad-Position dreht, dass es sich bis zur Bewegungsgrenze dreht und die Zahnräder im Servo schleift.

Natürlich sind die 9g-Servos, die ich verwende, billig und nicht auf Genauigkeit ausgelegt - aber ich denke, ich kann etwas mehr Wert daraus ziehen. Ich möchte sie für einen Laufroboter verwenden und ihr Verhalten muss etwas präziser und vorhersehbarer sein.

Wie kann ich meine Hobby-Servos genauer steuern?

Die Bestätigung, dass sich meine Servos alle etwas anders verhalten, hat mich dazu gebracht, ein Gerät zu bauen, mit dem ich ein Servo kalibrieren kann - welche PWM-Werte benötige ich, um ein Servo zu senden, um sich in eine 0-Grad-Position zu bewegen? Oder der 90-Grad-Mittelpunkt? Wie vermeide ich das Senden eines PWM-Werts, der das Servo mit viel Knirschen und Zahnradschleifen in eine extreme Position bringt?

Ich beschloss, ein paar einfache Konzepte zu kombinieren.

  • Richten Sie mein Servo mit der Mitte eines einfachen Winkelmessers aus, damit ich seine Position messen kann, wenn sich der Scheibenwischer des Servos dreht.
  • Schließen Sie ein Potentiometer an einen analogen Eingang des Arduino an, damit ich die Position des Wischers des Servos steuern kann, indem ich den PWM-Wert anpasse, während ich die Position der Potentiometerwelle einstelle.

Für diese Version habe ich gerne den Serial Monitor meiner Arduino IDE verwendet, um mir den Wert des PWM-Signals mitzuteilen, den ich manuell aufzeichnen kann.

Ich habe Autodesk 123D verwendet, um ein einfaches Rig zu entwerfen, das das Potentiometer, den Winkelmesser, ein einzelnes Servo, mein Arduino und den Adafruit PWM-Servotreiber zusammen mit einem Netzteil aufnehmen würde.

Ich möchte den Adafruit PWM-Servotreiber für meine Kalibrierung weiterhin verwenden, da ich ihn wahrscheinlich in meinem letzten Projekt verwenden werde. Wenn ich das Servo direkt von einem Pin auf dem Arduino steuern würde, würde ich das im Gerät replizieren und das Servo gegen PWM vom Arduino kalibrieren.

Das Gerät bauen

Ich druckte jedes der Teile aus und befestigte sie mit den M3-Schrauben und Unterlegscheiben.

Die Befestigungslöcher in meinem Gerätedesign sind an meine Komponenten angepasst - verschiedene Komponenten können Abweichungen in den Lochdurchmessern und -positionen aufweisen.

Für die Elektronik habe ich den mittleren Pin des Potentiometers an den A0-Pin des Arduino und die anderen Pins an 0v und 5v am Arduino angeschlossen. Ich habe den PWM-Servomotortreiber an den Arduino angeschlossen und dann den DC-DC-Abwärtswandler angeschlossen (ich hatte abgestimmt, um den 9-V-Stromversorgungseingang in einen 5-V-Ausgang umzuwandeln). Ich habe das 9g-Servo an den ersten Steckplatz des Servomotor-Treiberschilds angeschlossen und dann meine Skizze zum Arduino hochgeladen.

Das Endergebnis ist in den Fotos unten gezeigt. Durch Drehen des Knopfes oben links am Gerät kann ich die Position des Servos steuern und mit dem Serial Monitor in der Arduino IDE kann ich das PWM-Signal lesen, das für einen bestimmten Winkel an den Servomotor gesendet wird.

Was sagt mir das Gerät?

Für mein Servo habe ich es bis zur äußersten Grenze im Uhrzeigersinn gedreht und den Wischer so auf dem Servo platziert, dass er knapp über der 180-Grad-Markierung auf dem Winkelmesser meines Kalibrierungsgeräts positioniert ist.

Ich schloss das Gerät an die Stromversorgung an und drehte dann den Potentiometerknopf, bis die Servonadel mit der 0-Grad-Markierung am Winkelmesser ausgerichtet war, und notierte den PWM-Wert, der in den seriellen Ausgang meiner Arduino IDE geschrieben wurde. Dann drehte ich das Potentiometer, bis die Servonadel auf 10 Grad zeigte, und notierte erneut den PWM-Wert. Ich setzte diesen Vorgang alle 10 Grad fort, bis ich 180 Grad erreichte, und habe die Ergebnisse in der folgenden Tabelle geteilt.

Ich habe ein Diagramm der Ergebnisse erstellt (siehe unten), und wie zu erwarten ist, gibt es eine stark lineare Beziehung zwischen PWM und Servowinkel.

Jetzt habe ich einige PWM- und Winkelwerte, die für dieses spezielle Servo charakteristisch sind - andere Servos können ähnliche Eigenschaften haben, aber sie werden nicht identisch sein.

Ich habe jetzt ein paar Optionen für eine genauere Servoleistung:

  • Notieren Sie diese Wertepaare und halten Sie sie in einem Array in meiner Arduino-Skizze, und wenn ich den Servowischer (zum Beispiel) auf 90 Grad bewegen möchte, beziehen Sie sich einfach auf den PWM-Wert, der sich auf diesen Winkel bezieht, und senden Sie diesen PWM-Wert zum Servo. Dies hat den Nachteil, dass ich nur auf Winkel drehen kann, die Vielfache von 10 sind.
  • Oder wenn ich die vollständige Kontrolle darüber haben möchte, zu welchem ​​Winkel ich sende, kann ich die lineare Regression des Datensatzes verwenden, um herauszufinden, welche Formel Winkel und PWM-Wert in Beziehung setzt (für dieses Servo PWM =2,35 * Winkel + 159.4). Auf diese Weise kann ich den Winkel, den ich drehen möchte, als Parameter übergeben und programmgesteuert die PWM berechnen, die erforderlich ist, um dieses bestimmte Servo in diese Position zu drehen.

In jedem Fall kann ich dieses Servo mit mehr Genauigkeit und Vertrauen steuern als zuvor. Es ist zwar etwas aufwendiger jedes Servo genau zu kalibrieren, aber für mein Projekt lohnt es sich für die zusätzliche Genauigkeit.

Wenn ich das Servo vom Gerät entferne, muss ich natürlich den Servowischer befestigt lassen, da sich die Messungen darauf beziehen, wie der Wischer während der Kalibrierung befestigt ist.

Verbesserungen für die nächste Version

Nachdem ich einige Servos kalibriert habe, habe ich mir einige Verbesserungen überlegt, die ich in die nächste Version einbauen werde.

  • Das Servo muss einen Schnellspannmechanismus haben - vielleicht befestigen Sie das Servo mit einem Clip mit Neodym-Magneten, anstatt es mit M3-Schrauben zu befestigen.
  • Ich möchte dies kleiner machen - vielleicht könnte ich das Arduino und die Stromversorgung neu ausrichten, um dies zu erreichen.
  • Ich benötige einen Netzschalter zwischen der 9-V-Batterie und dem Abwärtswandler, damit ich die Batterie nicht jedes Mal vollständig trennen muss, wenn ich die Maschine ausschalten möchte.
  • Ich würde das Rig gerne in weniger Teilen drucken können.
  • Anstatt manuell Werte vom Winkelmesser abzulesen, wäre es besser, wenn ein Sensor erkennen könnte, wenn sich das Servo in bestimmten Winkelpositionen befindet, und dies an den Arduino zurückmelden - dies könnte einen Parallaxenfehler beseitigen.
  • Schließlich würde ein LCD-Display zur Anzeige aller Ergebnisse sehr hilfreich sein, da mein Computer nicht mit dem Gerät verbunden sein müsste.

Zum Abschluss

Das war's also - meine Hobbyservos sind billig und nicht auf Genauigkeit ausgelegt - und für viele Anwendungen völlig in Ordnung. Ich hätte jedoch gerne etwas mehr Genauigkeit und wiederholbare Leistung von meinem, und das Rig in diesem Beitrag hilft mir dabei, dies zu erreichen.

Code

  • Skizze für das Servokalibratorgerät
Skizze für ServokalibratorgerätC/C++
#include #define analogIn A0Adafruit_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); // inputValue liegt zwischen 0 und 1024 // Nach Beobachtung liegen die minimalen und maximalen PWM-Werte des Servos normalerweise zwischen 100 und 612 // Die folgende Formel ermöglicht es uns, den analogen Eingang einfach in PWM umzuwandeln int pwmValue =(int)(100 + ( Eingabewert / 2)); pwm.setPWM(0, 0, pwmValue); // Überprüfen Sie, ob wir unnötigerweise doppelte Daten anzeigen if (pwmValue! =tmpPwmValue) { Serial.print ("Potentiometer Input ="); Serial.print (inputValue); Serial.print (", PWM ="); Serial.println (pwmValue); } tmpPwmValue =pwmValue; Verzögerung(15);}

Kundenspezifische Teile und Gehäuse

Repo für Servokalibratorteile
https://github.com/jeremylindsayni/ServoCalibrator

Herstellungsprozess

  1. PLA-3D-Druck:Alles, was Sie wissen müssen
  2. Schwenk-/Neige-Gesichtsverfolgung mit dem Himbeer-Pi
  3. PLA vs. ABS vs. Nylon
  4. Walbi, der wandelnde Zweibeiner
  5. Arduino IoT-Roboterarm
  6. 3D-Druck mit PLA vs. ABS:Was ist der Unterschied?
  7. DC-Antriebe als Ersatz für AC-Servos
  8. Ist PLA recycelbar oder sogar biologisch abbaubar?
  9. Löst sich PLA in Wasser auf und zersetzt es sich?
  10. Ist PLA-Filament leitfähig (Sind irgendwelche Filamente leitfähig)?