Innholdsfortegnelse:
Video: Vinkel posisjonskontroll av 28BYJ-48 trinnmotor med Arduino og analog joystick: 3 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:22
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:
28BYJ-48 5V trinnmotor og A4988 driver: 4 trinn
28BYJ-48 5V trinnmotor og A4988 driver: Har du noen gang ønsket å få en robot til å snu i en presis vinkel, ved å bruke bare noen få utganger fra din Arduino eller mikro: bit? Alt dette billig? Det er instruerbart for deg! I denne instruksen vil vi se hvordan du kjører en veldig billig trinnmotor med bare
Hvordan bruke 28BYJ-48 trinnmotor med 3 trykknapper: 5 trinn
Hvordan bruke 28BYJ-48 trinnmotor med 3 trykknapper: Vil du kontrollere trinnmotoren din med trykknapper? Det kan gjøre med klokken, mot klokken og deretter stoppe funksjonen? Da er denne videoen noe for deg
Steppermotor kontrollert trinnmotor - Trinnmotor som roterende koder: 11 trinn (med bilder)
Steppermotor kontrollert trinnmotor | Steppermotor som roterende encoder: Har et par trinnmotorer liggende og vil gjøre noe? I denne instruksen, la oss bruke en trinnmotor som en roterende encoder for å kontrollere en annen trinnmotors posisjon ved hjelp av en Arduino mikrokontroller. Så uten videre, la oss gi
Hvordan måle vinkel med MPU-6050 (GY-521): 3 trinn
Hvordan måle vinkel med MPU-6050 (GY-521): I denne instruksen skal vi måle vinkel med en Arduino. Vi trenger noen kabler, en Arduino UNO og GY-521 (MPU-6050) for å måle vinkel
Arduino Nano og Visuino: Konverter akselerasjon til vinkel fra akselerometer og gyroskop MPU6050 I2C -sensor: 8 trinn (med bilder)
Arduino Nano og Visuino: Konverter akselerasjon til vinkel fra akselerometer og gyroskop MPU6050 I2C -sensor: For en stund siden la jeg ut en opplæring om hvordan du kan koble MPU9250 akselerometer, gyroskop og kompasssensor til Arduino Nano og programmere den med Visuino for å sende pakkedata og vise det på et omfang og visuelle instrumenter. Akselerometeret sender X, Y