Inhaltsverzeichnis:

Winkelpositionssteuerung des Schrittmotors 28BYJ-48 mit Arduino und analogem Joystick - Gunook
Winkelpositionssteuerung des Schrittmotors 28BYJ-48 mit Arduino und analogem Joystick - Gunook

Video: Winkelpositionssteuerung des Schrittmotors 28BYJ-48 mit Arduino und analogem Joystick - Gunook

Video: Winkelpositionssteuerung des Schrittmotors 28BYJ-48 mit Arduino und analogem Joystick - Gunook
Video: ♣ Camera Slider на шаговых двигателях 28BYJ-48 Вариант # 1 ♣ 2024, Juli
Anonim
Winkelpositionssteuerung des Schrittmotors 28BYJ-48 mit Arduino und analogem Joystick
Winkelpositionssteuerung des Schrittmotors 28BYJ-48 mit Arduino und analogem Joystick

Dies ist ein Steuerschema für den 28BYJ-48-Schrittmotor, den ich im Rahmen meines Dissertationsprojekts im letzten Jahr entwickelt habe. Ich habe dies noch nie zuvor gesehen, also dachte ich, ich würde hochladen, was ich entdeckt habe. Hoffentlich hilft das jemand anderen da draußen!

Der Code erlaubt einem Schrittmotor grundsätzlich, die Winkelposition eines analogen Joysticks zu „kopieren“, d.h. wenn man den Joystick nach vorne drückt, zeigt der Motor in Richtung „Norden“. Drücken Sie den Joystick nach Westen, der Motor dreht sich in die gleiche Richtung.

Für meine Umsetzung habe ich gefordert, dass wenn der Joystick losgelassen wird, also keine Winkelstellung hat, der Motor in die "Home"-Richtung zurückkehrt. Die Ausgangsrichtung zeigt nach Osten, und der Motor (oder zumindest der Zeiger / das Gerät, das Sie an der Abtriebswelle befestigt haben!) muss auch beim Einschalten in diese Richtung zeigen.

Lieferungen

Arduino Uno oder ähnlich

Steckbrett & Auswahl an Überbrückungsdrähten (männlich zu männlich, männlich zu weiblich)

5V Netzteil

Analoges Joystick-Modul (idealerweise mit Tasterfunktion, dies erleichtert das Ausruhen der "Home"-Position

28BYJ-48 Schrittmotor und ULN2003 Schritttreiber

Stift, Papier und Blu-Tac (oder jedes andere Zeigegerät zum Anbringen am Motor!)

Schritt 1: Schritt 1: Einrichten

Verbinden Sie den Schrittmotor mit dem Schritttreiber und verbinden Sie die Pins wie folgt:

IN1 - Arduino-Pin 8

IN2 - Arduino-Pin 9

IN3 - Arduino-Pin 10

IN4 - Arduino-Pin 11

Verbinden Sie Ihr 5-V-Netzteil mit den Versorgungsschienen auf Ihrem Steckbrett und verbinden Sie die ULN2003-5-V-Eingänge mit den Versorgungsschienen. Verbinden Sie die Erdungsschiene mit dem Boden Ihres Arduino.

für den Joystick wie folgt anschließen:

Schaltstift - Arduino-Pin 2

X-Achse - Arduino A0 (Analog in 0)

Y-Achse - Arduino A1

+5V - Arduino 5V-Ausgang

Masse - Arduino Masse

Verbinden Sie schließlich die Masse Ihres Steckbretts mit dem anderen Arduino GND-Pin

Schritt 2: Schritt 2: Erklären des Codes

Ich habe den vollständigen Arduino-Code zum Herunterladen und Verwenden beigefügt. Aber ich werde mein Bestes tun, um die relevanten Teile hier zu erklären.

Die Theorie hinter diesem Code ist, dass der vom Joystick eingenommene Platz in eine Grafik mit 0, 0 in der Mitte aufgeteilt wird. Die Joystick-Eingänge ruhen jedoch bei (ungefähr) 512 in der Mitte, so dass zur Überwindung dieser zwei Funktionen verwendet werden, um den von der X- und Y-Achse gelesenen Wert "auf Null zu setzen". Je nach verwendeter Stromversorgung müssen Sie ggf. die Werte in den Funktionen ZeroX und ZeroY ändern, damit Ihr Joystick im Ruhezustand zuverlässig 0 anzeigt.

Wenn die X-, Y-Werte gelesen werden, werden sie zuerst mit der Funktion atan2() in der Bibliothek math.h in Bogenmaß umgewandelt. Das Erklären dieser Funktion liegt außerhalb des Rahmens dieser Anleitung, aber bitte schauen Sie nach - es ist ein ziemlich einfacher Trick der Geometrie!

Um denjenigen von uns, die früher mit Grad statt mit Rad gearbeitet haben, das Leben zu erleichtern, wird der von atan2() berechnete Rad-Wert in Grad umgewandelt.

Oben in der Schleife befindet sich ein kleiner Codeausschnitt, mit dem Sie auf die momentane Schaltfläche des Joysticks klicken können, um die "Ausgangsposition" zu verschieben. Dies war beim Testen des Codes unglaublich nützlich, aber ich habe es belassen, da ich sehen kann, wie es in einigen Fällen nützlich sein könnte.

Nun zum Hauptteil des Codes! Wir beginnen damit, dass wir die X-, Y-Koordinaten des Joysticks zweimal mit einer Verzögerung von 10 ms getrennt lesen und dann prüfen, ob sie gleich sind. Die Verzögerung ist auch kurz genug, um beabsichtigte Eingaben nicht zu stören.

Der Rest des Codes ist ziemlich selbsterklärend und ich habe mein Bestes getan, um ihn zu dokumentieren; Eine Reihe von IF-Anweisungen vergleichen den aktuellen Joystick-Winkel mit dem Motorwinkel und bewegen den Motor in diesen Winkel. Der 28BYJ-48 hat 5,689 Schritte pro Grad, deshalb multiplizieren wir die erforderliche Bewegung mit dieser scheinbar ungeraden Zahl!

Der Teil des Codes, der am meisten erklärt werden muss, ist das, was ich den "Wraparound-Fall" genannt habe. Auch wenn Joystick & Motor z. B. +175°, und der Joystick anschließend auf -175° bewegt (eine Bewegung von nur 10° auf dem Joystick, von knapp nordwestlich bis knapp südwestlich), würde sich der Motor um 350° IN DIE FALSCHE RICHTUNG bewegen! um dies zu erklären, wurde der Sonderfall geschrieben.

Der Wraparound-Fall beginnt damit, dass überprüft wird, ob Motor und Joystick entgegengesetzte Vorzeichen haben, d. h. der Motor ist positiv und der Joystick negativ oder umgekehrt. Es prüft auch, ob die Summe der absoluten (d. h. positiven Werte) von Joystick und Motor über 180° liegt.

Wenn beide Aussagen zutreffen, prüft die Funktion, ob der Motor im Uhrzeigersinn (bei negativem Motorwert) oder gegen den Uhrzeigersinn (bei positivem Motorwert) bewegt werden muss.

Die absoluten Werte des Motorwinkels und des Joystickwinkels werden addiert und von 360° subtrahiert, um die zu bewegende Distanz zu bestimmen. Schließlich wird der Motorwinkel (der jetzt den Joystickwinkel widerspiegelt) als solcher aktualisiert.

Schritt 3: FERTIG

Sie müssen also nur noch den Code auf Ihr Arduino hochladen und ausführen! Sehen Sie sich das Video oben an, um eine gute Vorstellung davon zu erhalten, wie das Projekt funktioniert. Dies wäre nützlich für Kamera-Gimbals, Roboterarme und viele andere Anwendungen!

Wenn Sie den Code verwenden, teilen Sie mir dies bitte mit. Wenn Sie feststellen, dass der Code verbessert werden kann, würde ich mich über Ihr Feedback freuen.

Empfohlen: