Innehållsförteckning:

Vinkellägesstyrning av 28BYJ-48 stegmotor med Arduino och analog joystick: 3 steg
Vinkellägesstyrning av 28BYJ-48 stegmotor med Arduino och analog joystick: 3 steg

Video: Vinkellägesstyrning av 28BYJ-48 stegmotor med Arduino och analog joystick: 3 steg

Video: Vinkellägesstyrning av 28BYJ-48 stegmotor med Arduino och analog joystick: 3 steg
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, November
Anonim
Vinklad lägesstyrning av 28BYJ-48 stegmotor med Arduino och analog joystick
Vinklad lägesstyrning av 28BYJ-48 stegmotor med Arduino och analog joystick

Detta är ett kontrollschema för stegmotorn 28BYJ-48 som jag har utvecklat för att använda som en del av mitt sista års avhandlingsprojekt. Jag har inte sett detta gjort förut så tänkte ladda upp det jag upptäckte. Förhoppningsvis hjälper detta någon annan där ute!

Koden tillåter i princip en stegmotor att "kopiera" vinkelpositionen för en analog joystick, det vill säga om du trycker joysticken framåt pekar motorn mot "norr". tryck joysticken mot väster, motorn roterar för att peka i samma riktning.

För min implementering krävde jag att om joysticken släpps, dvs inte har någon vinkelläge, återgår motorn till "hem" -riktningen. Hemriktningen är vänd åt öster, och motorn (eller vid leasning av vilken pekare / enhet du har anslutit till utgående axel!) Måste också riktas mot denna riktning när den slås på.

Tillbehör

Arduino Uno eller liknande

brödbräda och val av bygelkablar (hane till hane, hane till hona)

5V strömförsörjning

Analog joystick -modul (helst med en tillfällig tryckknappsfunktion, detta gör det lättare att vila "hem" -positionen

Stegmotor 28BYJ-48 och ULN2003 stegdrivrutin

Penna, papper och blu-tac (eller någon annan pekarenhet att fästa på motorn!)

Steg 1: Steg 1: Konfigurera

Anslut stegmotorn till stegdrivrutinen och anslut stiften enligt följande:

IN1 - Arduino -stift 8

IN2 - Arduino stift 9

IN3 - Arduino pin 10

IN4 - Arduino -stift 11

Anslut din 5v strömförsörjning till matningsskenorna på din brödbräda och anslut ULN2003 5v ingångarna till matningsskenorna. anslut markskenan till marken på din Arduino.

för joysticken, anslut enligt följande:

Brytare - Arduino pin 2

X -axel - Arduino A0 (analog i 0)

Y -axel - Arduino A1

+5V - Arduino 5V -utgång

GND - Arduino GND

Anslut slutligen marken på din brödbräda till den andra Arduino GND -stiftet

Steg 2: Steg 2: Förklara koden

Jag har inkluderat hela Arduino -koden för dig att ladda ner och använda. Men jag kommer att göra mitt bästa för att förklara de relevanta delarna här.

Teorin bakom denna kod är att det utrymme som joysticken upptar delas upp i en graf, med 0, 0 i mitten. men joystickingångarna vilar på (cirka) 512 i mitten, så för att övervinna detta används två funktioner för att "nollställa" värdet avläst från X- och Y -axeln. beroende på vilken strömförsörjning du använder kan du behöva ändra värdena i funktionerna ZeroX och ZeroY så att joysticken ger en tillförlitlig avläsning av 0 när du vilar.

När X, Y -värdena läses omvandlas de först till radianer med funktionen atan2 () i math.h -biblioteket. Att förklara denna funktion ligger utanför ramen för denna instruerbara, men sök gärna upp den - det är ett ganska enkelt geometri -trick!

Slutligen, för att göra livet enklare för oss som brukade arbeta i grader snarare än rad, konverteras radvärdet beräknat av atan2 () till grader.

Högst upp i öglan finns ett litet kodavsnitt som låter dig klicka i den tillfälliga knappen på joysticken för att flytta "hem" -platsen. Det här var otroligt användbart när jag testade koden, men jag har lämnat den eftersom jag kan se hur den kan vara användbar i vissa fall.

Nu till huvuddelen av koden! Vi börjar med att läsa joysticken X, Y -koordinater två gånger separerade med en 10 ms fördröjning och sedan kontrollera om de är desamma - jag fann att joysticken ibland skulle mata ut sporadiska avläsningar, och denna lilla fördröjning var tillräckligt för att stoppa motorn att vrida baserat på dessa. Det är också en tillräckligt kort fördröjning för att det inte verkar störa avsiktliga ingångar.

Resten av koden är ganska självförklarande och jag har gjort mitt bästa för att dokumentera den; En serie IF -uttalanden jämför den aktuella joystickvinkeln med motorvinkeln och flytta motorn till den vinkeln. 28BYJ-48 har 5.689 steg per grad, så det är därför vi multiplicerar den nödvändiga rörelsen med detta till synes udda tal!

Den ena delen av koden som kräver mest förklaring är vad jag har kallat "omslutningsfallet". I det jämna som joysticken & motorn var på t.ex. +175 °, och joysticken flyttades därefter till -175 ° (en rörelse på endast 10 ° på joysticken, från strax norr om väst till strax söder om väst), skulle motorn röra sig i FELRIKTEN med 350 °! för att redogöra för detta skrevs specialfallet.

Omslutningsfodralet börjar med att kontrollera att motorn och joysticken har motsatta tecken, dvs motorn är positiv och joysticken negativ, eller vice versa. Den kontrollerar också att summan av de absoluta (det vill säga positiva värden) för joysticken och motorn är över 180 °.

Om båda dessa påståenden är sanna, kontrollerar funktionen sedan om motorn måste röra sig medurs (motorvärdet är negativt) eller moturs (om motorvärdet är positivt).

De absoluta värdena för motorvinkeln och joystickvinkeln summeras och subtraheras från 360 ° för att bestämma avståndet att flytta. Slutligen uppdateras motorvinkeln (som nu återspeglar joystickvinkeln) som sådan.

Steg 3: FÄRDIG

Så det är bara att ladda upp koden till din Arduino och köra den! Se videon ovan för en bra uppfattning om hur projektet fungerar. Detta skulle vara användbart för kamerakardlar, robotarmar och många andra applikationer!

Om du använder koden, vänligen meddela mig, och om du ser någon där koden kan förbättras, skulle jag gärna höra din feedback.

Rekommenderad: