Inhaltsverzeichnis:

Objektverfolgungs-Kamera-Schieberegler mit Drehachse. 3D gedruckt und auf dem RoboClaw DC-Motorcontroller und Arduino gebaut - Gunook
Objektverfolgungs-Kamera-Schieberegler mit Drehachse. 3D gedruckt und auf dem RoboClaw DC-Motorcontroller und Arduino gebaut - Gunook

Video: Objektverfolgungs-Kamera-Schieberegler mit Drehachse. 3D gedruckt und auf dem RoboClaw DC-Motorcontroller und Arduino gebaut - Gunook

Video: Objektverfolgungs-Kamera-Schieberegler mit Drehachse. 3D gedruckt und auf dem RoboClaw DC-Motorcontroller und Arduino gebaut - Gunook
Video: DIY Camera Slider, motorized, Arduino controlled 2024, Juli
Anonim
Image
Image
Hardware-Design + Build + 3D-Druck
Hardware-Design + Build + 3D-Druck

Fusion 360-Projekte »

Dieses Projekt ist eines meiner Lieblingsprojekte, seit ich mein Interesse am Videomachen mit DIY verbinden konnte. Ich habe mir immer diese filmischen Aufnahmen in Filmen angesehen und wollte sie nachahmen, bei denen sich eine Kamera über einen Bildschirm bewegt, während sie schwenkt, um das Objekt zu verfolgen. Dies fügt einem ansonsten 2D-Video einen sehr interessanten Tiefeneffekt hinzu. Um dies zu replizieren, ohne Tausende von Dollar für Hollywood-Ausrüstung auszugeben, beschloss ich, selbst einen solchen Kamera-Slider zu bauen.

Das gesamte Projekt basiert auf Teilen, die Sie in 3D drucken können, und der Code läuft auf dem beliebten Arduino-Board. Alle Projektdateien wie die CAD-Dateien und der Code stehen unten zum Download bereit.

CAD/ 3D-Druckdateien hier verfügbar

Arduino-Code-Datei hier verfügbar

Das Projekt dreht sich um die 2 bürstenbehafteten DC-Getriebemotoren und den Basic Micro Roboclaw Motor Controller. Dieser Motorcontroller kann bürstenbehaftete Gleichstrommotoren in einen überlegenen Servotyp mit unglaublicher Positionsgenauigkeit, Tonnen von Drehmoment und einer vollen 360-Grad-Drehung verwandeln. Dazu später mehr.

Bevor wir fortfahren, sehen Sie sich zuerst das hier verlinkte Video-Tutorial an. Dieses Tutorial gibt Ihnen einen Überblick darüber, wie Sie dieses Projekt erstellen, und dieses Instructables-Handbuch wird ausführlicher darauf eingehen, wie ich dieses Projekt erstellt habe.

Materialien-

  • 2x 1 Meter lange M10 Gewindestangen zum Verbinden aller Teile
  • 8x M10 Muttern zur Befestigung der Teile an den Gewindestangen
  • 2x 95 cm lange 8mm glatte Stahlstangen zum Aufschieben des Sliders
  • 4x lm8uu-Lager für den Slider, um sanft auf den Stahlstangen zu gleiten
  • 4x 10mm lange m3 Muttern zur Befestigung des Motors
  • 2 x Skateboardlager (22mm Außendurchmesser, 8mm Innendurchmesser) für die Drehachse
  • 1x 15mm Lager für die Leitradseite
  • 1x 4cm lange M4 Schraube mit M4 Kontermutter zur Montage des Spannrollenlagers am Spannrollen 3D gedruckten Teil.
  • 20 Zähne Zahnrad mit 4mm Innendurchmesser für den Slidermotor. Die genaue Riemenscheibe ist nicht sehr wichtig, da Ihr Gleichstrommotor auf genügend Drehmoment ausgelegt sein sollte. Stellen Sie nur sicher, dass es die gleiche Steigung wie Ihr Riemen hat
  • 2 Meter langer GT2 Gürtel. Auch hier können Sie jeden Riemen verwenden, solange er der Zahnteilung Ihrer Riemenscheibe entspricht.

Elektronik

  • 2 * DC-Getriebemotoren mit Encodern (einer steuert die seitliche Bewegung, während der andere die Drehachse steuert). Hier ist der, den ich verwendet habe. Mehr dazu im Elektronikteil des Guides
  • RoboClaw DC-Motorsteuerung. (Ich habe den dualen 15Amp-Controller verwendet, da ich damit beide Motoren mit einem Controller steuern konnte)
  • Irgendein Arduino. Ich habe das Arduino UNO verwendet
  • Batterie/ Stromquelle. (Ich habe einen 7,4 V 2-Zellen LiPo-Akku verwendet)
  • Bildschirm (Zur Anzeige des Menüs. Jeder U8G-kompatible Bildschirm funktioniert, ich habe diesen 1,3-Zoll-OLED-Bildschirm verwendet)
  • Drehgeber (zum Navigieren und Konfigurieren von Optionen im Menü)
  • Physischer Druckknopf (Zum Auslösen der Schieberbewegung)

Schritt 1: Hardware-Design + Build + 3D-Druck

Elektronik
Elektronik

Kommen wir als nächstes zur Elektronik. Die Elektronik ist, wo dieses Projekt viel Flexibilität hat.

Beginnen wir mit dem Kern dieses Projekts - den 2 bürstenbehafteten Gleichstrommotoren.

Ich habe mich aus mehreren Gründen für bürstenbehaftete Gleichstrommotoren entschieden.

  1. Bürstenmotoren sind im Vergleich zu Schrittmotoren viel einfacher zu verdrahten und zu bedienen
  2. Gleichstrommotoren mit Bürsten sind viel leichter als Gleichstrommotoren, was für den Drehachsenmotor besonders wichtig ist, da sich dieser Motor physisch mit der Kamera seitlich bewegt und es so leicht wie möglich ist, um eine übermäßige Belastung des primären Kameraschiebermotors zu vermeiden.

Ich habe mich für diesen speziellen Gleichstrommotor entschieden. Dieser Motor gab mir ein extrem hohes Drehmoment, das notwendig war, um eine so schwere Kameralast zu bewegen. Darüber hinaus bedeutete das hohe Getriebe, dass die Spitzendrehzahl langsam war, was bedeutete, dass ich langsamere Bewegungen filmen konnte, und das hohe Getriebe führte auch zu einer höheren Positionsgenauigkeit, da eine 360-Grad-Drehung der Abtriebswelle 341,2 Zählungen des Encoders des Motors bedeutete.

Dies bringt uns zum RoboClaw Motion Controller. Der Roboclaw-Motor-Dual-DC-Motorcontroller nimmt einfache Anweisungen von Ihrem Arduino über einfache Codebefehle auf und übernimmt die gesamte schwere Verarbeitung und Leistungsabgabe, damit Ihr Motor wie vorgesehen funktioniert. Der Arduino kann Signale über PWM, Analogspannung, einfach seriell oder paketseriell an den Roboclaw senden. Packet Serial ist der beste Weg, da Sie damit Informationen von der Roboclaw zurückholen können, die für die Positionsverfolgung erforderlich sind. Ich werde im nächsten Schritt (Programmierung) tiefer in den Software-/Programmierungsteil der Roboclaw eintauchen.

Im Wesentlichen kann der Roboclaw einen DC-Bürstenmotor mit einem Encoder dank der Positionssteuerung des RoboClaw in einen Servo verwandeln. Im Gegensatz zu einem herkömmlichen Servo hat Ihr gebürsteter Gleichstrommotor jetzt jedoch viel mehr Drehmoment, eine viel höhere Positionsgenauigkeit aufgrund des hohen Motorgetriebes und vor allem kann sich Ihr Gleichstrommotor kontinuierlich um 360 Grad drehen, was kein herkömmliches Servo nicht kann.

Der nächste elektronische Teil ist der Bildschirm. Für meinen Bildschirm habe ich dieses OLED-Panel aufgrund seiner Größe und des hohen Kontrasts gewählt. Dieser hohe Kontrast ist unglaublich und macht den Bildschirm bei direkter Sonneneinstrahlung sehr einfach zu bedienen, ohne zu viel Licht abzugeben, das eine potenzielle dunkle Kameraaufnahme stören könnte. Dieser Bildschirm kann leicht gegen einen anderen U8G-kompatiblen Bildschirm ausgetauscht werden. Die vollständige Liste der kompatiblen Bildschirme finden Sie hier. Tatsächlich wurde dieses Projekt absichtlich um die U8G-Bibliothek herum codiert, damit Heimwerker wie Sie mehr Flexibilität in ihren Teilen hatten

Die letzten Elektronikteile für dieses Projekt waren der Drehgeber und der Druckknopf zum Starten der Schieberbewegung. Der Encoder ermöglicht es Ihnen, durch das Menü des Bildschirms zu navigieren und alle Menüs des Schiebereglers mit nur einem Drehknopf zu konfigurieren. Der Drehgeber hat keine Endposition wie ein herkömmliches Potentiometer, und dies ist besonders nützlich, um die x- und y-Koordinaten der Objektverfolgung auf dem Bildschirm zu optimieren. Der Taster dient ausschließlich dazu, die Bewegung des Sliders zu starten, ohne am Drehgeber herumfummeln zu müssen.

Schritt 3: Programmieren des Kameraschiebereglers

Programmieren des Kamera-Sliders
Programmieren des Kamera-Sliders
Programmieren des Kamera-Sliders
Programmieren des Kamera-Sliders

Die Codierung war bei weitem die härteste Herausforderung dieses Projekts. Sie sehen, ich wollte von Anfang an, dass der Schieberegler von einem Bildschirm aus steuerbar ist. Um dieses Projekt mit so vielen Bildschirmen wie möglich kompatibel zu machen, musste ich die U8Glib-Bibliothek für das Arduino verwenden. Diese Bibliothek unterstützt über 32 Bildschirme. Die U8Glib-Bibliothek verwendete jedoch eine Bildschleife, um das Menü auf dem Bildschirm zu zeichnen, und dies stand in Konflikt mit der Fähigkeit des Arduino, gleichzeitig Informationen über die Kameraposition zu sammeln, die für die Funktion zur Berechnung des Kamerawinkels erforderlich waren (Dies wird in den nächsten Absätzen behandelt).). Die U8Glib2 hat eine Alternative zur Bildschleife, indem sie eine sogenannte Full-Page-Puffer-Option verwendet, aber die Bibliothek verbrauchte zu viel Speicher und machte es angesichts der Speicherbeschränkungen des Arduino Uno schwierig, den Rest des Codes anzupassen. Dies bedeutete, dass ich bei U8G feststeckte und das Problem umgehen musste, indem ich verhinderte, dass der Bildschirm aktualisiert wurde, wenn der Schieberegler in Bewegung war und der Arduino Positionsdaten von der Roboclaw sammeln musste. Ich war auch gezwungen, den Schieberegler so auszulösen, dass er sich außerhalb der Menüschleife bewegt, da ich mich nach dem Aufrufen der Untermenüs innerhalb der Bildschleife befinden würde und der Schieberegler nicht wie beabsichtigt funktioniert. Ich habe dieses Problem auch umgangen, indem ich eine separate physische Taste habe, die die Bewegung des Schiebereglers auslöst.

Lassen Sie uns als Nächstes über das Rotationsverfolgungselement sprechen. Dieser Teil scheint sehr komplex zu integrieren, ist aber eigentlich ziemlich einfach. Die Implementierung dafür befindet sich unter der Funktion „motor()“in meinem Arduino-Code. Der erste Schritt besteht darin, ein zweidimensionales Raster zu erstellen und zu entscheiden, wo das Objekt, das Sie verfolgen möchten, platziert wird. Darauf basierend können Sie ein Dreieck zu Ihrem aktuellen Standort zeichnen. Ihren aktuellen Standort können Sie dem Geberwert des Motors entnehmen. Wenn Sie die Position des verfolgten Objekts in cm/mm konfigurieren möchten, müssen Sie Ihren Encoderwert in einen cm/mm-Wert umwandeln. Dies kann einfach durch Verschieben des Kameraschiebers um 1 cm und Messen des Anstiegs des Encoderwertes erfolgen. Sie können diesen Wert oben im Code unter der Variablen encoder_mm eingeben.

Im weiteren Verlauf werden wir nun die inverse Tangentenfunktion verwenden, um den Winkel zu ermitteln, in den die Kamera zeigen muss, um auf Ihr Objekt zu zeigen. Die inverse Tangente nimmt die gegenüberliegende und benachbarte Seite des Dreiecks ein. Die gegenüberliegende Seite des Dreiecks ändert sich nie, da es sich um den y-Abstand von Ihrem Schieberegler zum Objekt handelt. Die angrenzende Seite des Kameraschiebers ändert sich jedoch. Diese angrenzende Seite kann berechnet werden, indem Sie die x-Position des Objekts nehmen und Ihre aktuelle Position davon subtrahieren. Während sich der Schieberegler durch seinen Bewegungsbereich bewegt, aktualisiert er den Arduino weiterhin auf dem Encoder-Wert. Der Arduino wandelt diesen Encoder-Wert wiederholt in einen cm / mm x Positionswert um und berechnet dann die angrenzende Seitenlänge und berechnet schließlich den Winkel, den die Kamera jederzeit zeigen muss, um auf das Objekt zu zeigen.

Da unser Arduino nun den Kamerawinkel dynamisch verarbeitet, können wir diesen Winkel in einen Positionswert umwandeln, zu dem sich der Rotationsmotor bewegen kann. Dies bringt uns zum größten Feature des RoboClaw für dieses Projekt. Indem Sie der Roboclaw einen Positionswert geben, kann sich ein DC-Bürstenmotor im Wesentlichen wie ein Servo verhalten. Außer im Gegensatz zu einem Servo hat unser Motor viel mehr Drehmoment, eine viel höhere Genauigkeit und kann sich auch um 360 Grad drehen.

Der Arduino-Code zum Bewegen der Roboclaw an eine bestimmte Position lautet wie folgt:

roboclaw. SpeedAccelDeccelPositionM1(Adresse, ‚Geschwindigkeit‘, ‚Beschleunigung‘, ‚Verzögerung‘, ‚Position, die Sie anfahren möchten‘, 1);

Um den Positionswert des Motors an Ihren Kamerawinkel anzupassen, müssen Sie die Kameraplatte manuell um 180 Grad bewegen. Als nächstes sehen Sie, wie stark sich der Encoderwert durch die Bewegung der Kameraplatte von 0 Grad auf 180 Grad geändert hat. Dadurch erhalten Sie Ihren Encoder-Bereich. Sie können diesen Bereich in die Motorfunktion eingeben, die den Kamerawinkel des Arduino auf einen Positionswert abbildet. Dies wird auch im Code kommentiert, damit es leicht zu finden sein sollte *****

Der RoboClaw gab mir auch die Möglichkeit, andere Faktoren wie Beschleunigung, Verzögerung und PID-Werte abzustimmen. Dadurch konnte ich die Rotationsachsenbewegung weiter glätten, insbesondere wenn die Winkeländerungen winzig waren und Ruckel ohne hohen D-PID-Wert hinzugefügt wurden. Sie können Ihre PID-Werte auch über die Desktop-App des Roboclaw automatisch abstimmen.

Schritt 4: Bedienung des Kameraschiebereglers

Bedienung des Kameraschiebereglers
Bedienung des Kameraschiebereglers

Kommen wir nun zum spaßigen Teil, der Bedienung des Schiebereglers. Das Menü hat 4 Hauptregisterkarten. Die obere Registerkarte ist der Geschwindigkeitsregelung gewidmet. Die mittlere Zeile des Menüs enthält Registerkarten, um die X- und Y-Position des verfolgten Objekts in mm zu konfigurieren und auch zu konfigurieren, ob der Schieberegler sich drehen und unser Objekt verfolgen oder nur eine einfache Schiebebewegung ohne Drehung ausführen soll. Durch Drehen des Drehgebers können wir durch die verschiedenen Optionen der Menüs navigieren. Um eine der Optionen zu konfigurieren, navigieren Sie zu der Option und drücken Sie den Drehgeber. Nach dem Drücken ändert das Drehen des Drehgebers den Wert des markierten Untermenüs, anstatt durch das Menü zu blättern. Wenn Sie Ihren gewünschten Wert erreicht haben, können Sie den Drehgeber erneut anklicken. Nun befinden Sie sich wieder im Hauptmenü und können zwischen den verschiedenen Reitern navigieren. Wenn Sie fertig sind, drücken Sie einfach die Go-Taste neben dem Bildschirm und der Schieberegler macht seine Arbeit!

Stellen Sie sicher, dass sich die Kamera in der „Ausgangsposition“befindet, sobald Sie den Kameraschieberegler verwendet haben: die Seite des Schiebereglers, auf der sie gestartet wurde. Der Grund dafür ist, dass der Motor-Encoder kein Absolut-Encoder ist, was bedeutet, dass der Roboclaw/Arduino nicht erkennen kann, wo sich der Encoder befindet. Sie können nur erkennen, wie sehr sich der Encoder seit dem letzten Einschalten verändert hat. Das bedeutet, dass der Slider beim Ausschalten des Kamera-Sliders die Position des Sliders „vergisst“und den Encoder auf 0 zurücksetzt Versuchen Sie, sich weiter als die Kante zu bewegen und prallen Sie gegen die Schieberwand. Dieses Encoder-Verhalten ist auch der Grund, warum die Kamera nach jeder Bewegung des Kameraschlittens ihren Drehwinkel zurücksetzt. Die Rotationsachse schützt sich auch selbst vor einem Absturz in das Ende ihres Bewegungsbereichs.

Sie können dies beheben, indem Sie beim Hochfahren Endanschläge und eine Referenzfahrt hinzufügen. Dies ist, was 3D-Drucker verwenden.

Schritt 5: Abschließende Gedanken + zukünftige Verbesserungen

Ich empfehle dringend, dass jeder Builder seine eigenen Versionen dieses Schiebereglers erstellt, anstatt genau den gleichen Schieberegler zu erstellen. Wenn Sie mein Design optimieren, können Sie Ihren Schieberegler nach Ihren genauen Spezifikationen bauen und gleichzeitig besser verstehen, wie die Elektronik und der Code funktionieren.

Ich habe den Code so lesbar und konfigurierbar wie möglich gemacht, damit Sie die verschiedenen Codevariablen für Ihre Slider-Spezifikationen optimieren / kalibrieren können. Der Code ist auch vollständig um Funktionen herum aufgebaut. Wenn Sie also bestimmte Verhaltensweisen des Schiebereglers kopieren / optimieren / neu schreiben möchten, müssen Sie nicht den gesamten Code zurückentwickeln und überarbeiten, sondern nur die Teile, die Sie bearbeiten möchten.

Schließlich, wenn ich eine Version 2.0 machen würde, hier sind einige Verbesserungen, die ich vornehmen würde

  1. Höheres Übersetzungsverhältnis für den Drehachsenmotor. Ein höheres Übersetzungsverhältnis bedeutet, dass ich präzisere kleine Bewegungen ausführen kann. Dies ist besonders wichtig, wenn die Kamera weit von Ihrem Objekt entfernt ist und sich Ihr Kamerawinkel sehr langsam ändert. Momentan ist mein Motor nicht zu hoch übersetzt und es kann zu leicht ruckelnden Bewegungen kommen, wenn der Kameraschieber zu langsam läuft oder wenn sich der Drehwinkel nur sehr wenig ändert. Das Hinzufügen eines hohen 'D'-PID-Werts hat mir geholfen, dies loszuwerden, ging jedoch auf Kosten einer etwas geringeren Objektverfolgungsgenauigkeit.
  2. Modulare Länge. Dies ist ein weit hergeholtes Ziel, aber ich würde es begrüßen, wenn der Kameraschieber in der Länge modular ist, was bedeutet, dass Sie problemlos größere Schienenlängen anbringen können, auf denen die Kamera gleiten kann. Dies ist ziemlich schwierig, da man beide Schienen perfekt ausrichten und herausfinden muss, wie das Bandsystem funktioniert. Trotzdem wäre es ein cooles Upgrade!
  3. Benutzerdefiniertes Bewegungs-Keyframing. Ich würde gerne das Konzept der Keyframe-Bewegungen in diesen Kameraschieberegler einführen. Keyframing ist eine Technik, die sehr häufig in der Video- und Audioproduktion verwendet wird. Es würde nichtlineare Kamerabewegungen ermöglichen, bei denen die Kamera zu einer Position fährt, wartet, sich dann mit einer anderen Geschwindigkeit zu einer anderen Position bewegt, wartet, dann zu einer dritten Position fährt usw.
  4. Bluetooth / drahtlose Telefonsteuerung. Es wäre wirklich cool, die Parameter des Kamera-Sliders drahtlos konfigurieren und den Kamera-Slider an schwer zugänglichen Orten einsetzen zu können. Die Telefon-App könnte auch Möglichkeiten eröffnen, Keyframing zu integrieren, wie im letzten Absatz erwähnt.

Das war's für dieses Tutorial. Fühlen Sie sich frei, Fragen im Kommentarbereich unten zu hinterlassen.

Weitere Tutorials zu Inhalten und Elektronik finden Sie hier auf meinem YouTube-Kanal.

Empfohlen: