Innholdsfortegnelse:

Vinkel posisjonskontroll av 28BYJ-48 trinnmotor med Arduino og analog joystick: 3 trinn
Vinkel posisjonskontroll av 28BYJ-48 trinnmotor med Arduino og analog joystick: 3 trinn

Video: Vinkel posisjonskontroll av 28BYJ-48 trinnmotor med Arduino og analog joystick: 3 trinn

Video: Vinkel posisjonskontroll av 28BYJ-48 trinnmotor med Arduino og analog joystick: 3 trinn
Video: Использование кнопки скорости шагового двигателя 28BYJ-48 с 8 проектами: Ultimate Video Tutorial, урок 107 2024, Juli
Anonim
Vinklet posisjonskontroll av 28BYJ-48 trinnmotor med Arduino og analog joystick
Vinklet posisjonskontroll av 28BYJ-48 trinnmotor med Arduino og analog joystick

Dette er en kontrollordning for trinnmotoren 28BYJ-48 som jeg har utviklet for å bruke som en del av mitt siste års avhandlingsprosjekt. Jeg har ikke sett dette gjort før, så tenkte jeg skulle laste opp det jeg oppdaget. Forhåpentligvis vil dette hjelpe noen andre der ute!

Koden lar i utgangspunktet en trinnmotor "kopiere" vinkelposisjonen til en analog joystick, det vil si at hvis du skyver joysticken fremover, peker motoren mot "nord". skyv styrespaken mot vest, motoren roterer for å peke i samme retning.

For min implementering krevde jeg at hvis styrespaken slippes, dvs. ikke har noen vinkelposisjon, går motoren tilbake til "hjem" -retningen. Hjemmeretningen vender mot øst, og motoren (eller leiekontrakten uansett peker / enhet du har festet til utgangsakselen!) Må også vende denne retningen når den slås på.

Rekvisita

Arduino Uno eller lignende

brødbrett og utvalg av hoppetråder (mann til mann, mann til hunn)

5V strømforsyning

Analog joystick -modul (ideelt sett med en kort trykknapp -funksjon, gjør dette det lettere å hvile "hjemmeposisjonen")

28BYJ-48 trinnmotor og ULN2003 stepperdriver

Penn, papir og blu-tac (eller annen pekerenhet som skal festes til motoren!)

Trinn 1: Trinn 1: Oppsett

Koble trinnmotoren til stepperdriveren, og koble pinnene som følger:

IN1 - Arduino pin 8

IN2 - Arduino pin 9

IN3 - Arduino pin 10

IN4 - Arduino pin 11

Koble 5v -strømforsyningen til forsyningsskinnene på brødbrettet, og koble ULN2003 5v -inngangene til forsyningsskinnene. koble jordskinnen til bakken på Arduino.

for styrespaken, kobler du til som følger:

Bryterpinne - Arduino pin 2

X -akse - Arduino A0 (analog i 0)

Y -akse - Arduino A1

+5V - Arduino 5V utgang

GND - Arduino GND

Til slutt kobler du bakken på brødbrettet til den andre Arduino GND -pinnen

Trinn 2: Trinn 2: Forklare koden

Jeg har inkludert hele Arduino -koden for å laste ned og bruke. Men jeg vil gjøre mitt beste for å forklare de relevante delene her.

Teorien bak denne koden er at plassen opptatt av joysticken er delt inn i en graf, med 0, 0 i midten. men joystickinngangene hviler på (ca.) 512 i midten, så for å overvinne disse to funksjonene brukes til å "null" verdien som er lest fra X- og Y -aksen. avhengig av strømforsyningen du bruker, må du kanskje endre verdiene i funksjonene ZeroX og ZeroY slik at joysticken gir en pålitelig avlesning på 0 når du hviler.

Når X, Y -verdiene leses, konverteres de først til radianer ved hjelp av funksjonen atan2 () i math.h -biblioteket. Å forklare denne funksjonen er utenfor omfanget av denne instruerbare, men vær så snill å slå den opp - det er et ganske enkelt geometri -triks!

Til slutt, for å gjøre livet lettere for oss som pleide å jobbe i grader i stedet for rad, konverteres rad -verdien beregnet av atan2 () til grader.

På toppen av løkken er en liten kodebit som lar deg klikke på den øyeblikkelige knappen på joysticken for å flytte "hjem" -stedet. Dette var utrolig nyttig mens du testet koden, men jeg har forlatt det slik jeg kan se hvordan det kan være nyttig i noen tilfeller.

Nå til hovedmassen av koden! Vi begynner med å lese joysticken X, Y koordinater to ganger adskilt med en 10 ms forsinkelse og deretter sjekke om de er de samme - jeg fant ut at joysticken av og til ville sende sporadiske avlesninger, og denne lille forsinkelsen var nok til å stoppe motoren å dreie basert på disse. Det er også en kort nok forsinkelse til at det ikke ser ut til å forstyrre forsettlige innganger.

Resten av koden er ganske selvforklarende, og jeg har gjort mitt beste for å dokumentere den; En serie IF -setninger sammenligner den nåværende joystickvinkelen med motorvinkelen, og flytter motoren til den vinkelen. 28BYJ-48 har 5.689 trinn per grad, så det er derfor vi multipliserer den nødvendige bevegelsen med dette tilsynelatende merkelige tallet!

Den ene delen av koden som krever mest forklaring er det jeg har kalt "omsluttingssaken". I selv at joysticken & motoren var på f.eks. +175 °, og styrespaken flyttet seg deretter til -175 ° (en bevegelse på bare 10 ° på styrespaken, fra like nord for vest til sør for vest), ville motoren bevege seg i feil retning med 350 °! for å gjøre rede for dette ble den spesielle saken skrevet.

Omsluttingshuset begynner med å kontrollere at motoren og joysticken har motsatte tegn, dvs. motoren er positiv og joysticken negativ, eller omvendt. Den kontrollerer også at summen av de absolutte (det vil si positive verdiene) til styrespaken og motoren er over 180 °.

Hvis begge disse påstandene er sanne, kontrollerer funksjonen om motoren må bevege seg med klokken (motorverdien er negativ) eller mot klokken (hvis motorverdien er positiv).

De absolutte verdiene for motorvinkelen og joystickvinkelen er totalert og trukket fra 360 ° for å bestemme avstanden som skal beveges. Til slutt oppdateres motorvinkelen (som nå gjenspeiler joystickvinkelen) som sådan.

Trinn 3: FERDIG

Så det er bare å laste opp koden til Arduino og kjøre den! Se videoen ovenfor for en god ide om hvordan prosjektet fungerer. Dette ville være nyttig for kameragimbaler, robotarmer og mange andre applikasjoner!

Gi meg beskjed hvis du bruker koden, og hvis du ser noen der koden kan forbedres, vil jeg gjerne høre din tilbakemelding.

Anbefalt: