Indholdsfortegnelse:

Vinklet positionskontrol af 28BYJ-48 trinmotor med Arduino og analogt joystick: 3 trin
Vinklet positionskontrol af 28BYJ-48 trinmotor med Arduino og analogt joystick: 3 trin

Video: Vinklet positionskontrol af 28BYJ-48 trinmotor med Arduino og analogt joystick: 3 trin

Video: Vinklet positionskontrol af 28BYJ-48 trinmotor med Arduino og analogt joystick: 3 trin
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, November
Anonim
Vinklet positionskontrol af 28BYJ-48 trinmotor med Arduino og analog joystick
Vinklet positionskontrol af 28BYJ-48 trinmotor med Arduino og analog joystick

Dette er en kontrolordning for steppermotoren 28BYJ-48, som jeg har udviklet til at bruge som en del af mit sidste års afhandlingsprojekt. Jeg har ikke set dette gjort før, så tænkte at jeg ville uploade det, jeg opdagede. Forhåbentlig vil dette hjælpe en anden derude!

Koden tillader grundlæggende en trinmotor at "kopiere" vinkelpositionen på et analogt joystick, det vil sige, at hvis du skubber joysticket fremad, peger motoren mod "nord". skub joysticket mod vest, motoren roterer for at pege i samme retning.

Til min implementering krævede jeg, at hvis joysticket slippes, dvs. ikke har en vinkelstilling, vender motoren tilbage til "hjem" -retningen. Hjemmeretningen vender mod øst, og motoren (eller i leasingkontrakten uanset hvilken markør / enhed du har knyttet til udgangsakslen!) Skal også vende denne retning, når den tændes.

Forbrugsvarer

Arduino Uno eller lignende

brødbræt og valg af jumperwires (han til han, han til hun)

5V strømforsyning

Analog joystick -modul (ideelt med en kortvarig trykknapfunktion, gør det lettere at hvile "hjemmepositionen")

28BYJ-48 stepper motor og ULN2003 stepper driver

Pen, papir og blu-tac (eller enhver anden markørenhed, der skal tilsluttes motoren!)

Trin 1: Trin 1: Opsætning

Tilslut trinmotoren til stepperdriveren, og tilslut stifterne som følger:

IN1 - Arduino pin 8

IN2 - Arduino pin 9

IN3 - Arduino pin 10

IN4 - Arduino pin 11

Tilslut din 5v strømforsyning til forsyningsskinnerne på dit brødbræt, og tilslut ULN2003 5v indgange til forsyningsskinnerne. tilslut jordskinnen til jorden på din Arduino.

til joysticket skal du tilslutte som følger:

Kontaktstift - Arduino pin 2

X -akse - Arduino A0 (analog i 0)

Y -akse - Arduino A1

+5V - Arduino 5V output

GND - Arduino GND

Tilslut endelig jorden på dit brødbræt til den anden Arduino GND -stift

Trin 2: Trin 2: Forklaring af koden

Jeg har inkluderet den fulde Arduino -kode, så du kan downloade og bruge den. Men vil gøre mit bedste for at forklare de relevante dele her.

Teorien bag denne kode er, at pladsen optaget af joysticket er opdelt i en graf, med 0, 0 i midten. men joystickindgange hviler på (ca.) 512 i midten, så for at overvinde disse to funktioner bruges til at "nulstille" værdien læst fra X- og Y -aksen. afhængigt af den strømforsyning, du bruger, skal du muligvis ændre værdierne i funktionerne ZeroX og ZeroY, så dit joystick giver en pålidelig aflæsning på 0, når du hviler.

Når værdierne X, Y læses, konverteres de først til radianer ved hjælp af funktionen atan2 () i math.h -biblioteket. Forklaringen af denne funktion ligger uden for denne instruks, men kig endelig forbi - det er et ret simpelt trick i geometri!

Endelig, for at gøre livet lettere for os, der plejede at arbejde i grader frem for rads, konverteres rad -værdien beregnet af atan2 () til grader.

Øverst i sløjfen er et lille stykke kode, der giver dig mulighed for at klikke på den øjeblikkelige knap på joysticket for at flytte "hjem" -placeringen. Dette var utrolig nyttigt, mens jeg testede koden, men jeg har efterladt det, da jeg kan se, hvordan det kan være nyttigt i nogle tilfælde.

Nu til hovedparten af koden! vi begynder med at læse joysticket X, Y koordinater to gange adskilt med en 10 ms forsinkelse og derefter kontrollere, om de er de samme - jeg fandt ud af, at joysticket lejlighedsvis ville udsende sporadiske aflæsninger, og denne lille forsinkelse var nok til at stoppe motorens drejning baseret på disse. Det er også en kort nok forsinkelse til, at det ikke ser ud til at forstyrre forsætlige input.

Resten af koden er temmelig selvforklarende, og jeg har gjort mit bedste for at dokumentere den; En række IF -sætninger sammenligner den aktuelle joystickvinkel med motorvinklen og flytter motoren til den vinkel. 28BYJ-48 har 5.689 trin pr. Grad, så derfor gange vi den nødvendige bevægelse med dette tilsyneladende ulige tal!

Den ene del af koden, der kræver mest forklaring, er, hvad jeg har kaldt "omviklingssagen". I selv den joystick & motor var ved f.eks. +175 °, og joysticket flyttede efterfølgende til -175 ° (en bevægelse på kun 10 ° på joysticket, fra lige nord for vest til lige syd for vest), ville motoren bevæge sig i FEJLRETNINGEN med 350 °! for at redegøre for dette blev den særlige sag skrevet.

Omviklingshuset begynder med at kontrollere, at motoren og joysticket har modsatte tegn, dvs. motoren er positiv og joysticket negativ eller omvendt. Den kontrollerer også, at summen af joystickets og motorens absolutte (det vil sige positive værdier) er over 180 °.

Hvis begge disse udsagn er sande, kontrollerer funktionen derefter, om motoren skal bevæge sig med uret (motorværdien er negativ) eller mod uret (hvis motorværdien er positiv).

De absolutte værdier for motorvinklen og joystickvinklen summeres og trækkes fra 360 ° for at bestemme afstanden, der skal flyttes. Endelig opdateres motorvinklen (som nu afspejler joystickvinklen) som sådan.

Trin 3: FÆRDIG

Så det eneste, der er tilbage at gøre, er at uploade koden til din Arduino og køre den! Se videoen ovenfor for en god idé om, hvordan projektet fungerer. Dette ville være nyttigt til kamerabeslag, robotarme og mange andre applikationer!

Hvis du bruger koden, så lad mig det vide, og hvis du ser nogen, hvor koden kan forbedres, hører jeg meget gerne din feedback.

Anbefalede: