INHOUDSOPGAWE:

Hoekposisionele beheer van 28BYJ-48-stapmotor met Arduino en analoog joystick: 3 stappe
Hoekposisionele beheer van 28BYJ-48-stapmotor met Arduino en analoog joystick: 3 stappe

Video: Hoekposisionele beheer van 28BYJ-48-stapmotor met Arduino en analoog joystick: 3 stappe

Video: Hoekposisionele beheer van 28BYJ-48-stapmotor met Arduino en analoog joystick: 3 stappe
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, November
Anonim
Hoekposisionele beheer van 28BYJ-48-stapmotor met Arduino en analoog joystick
Hoekposisionele beheer van 28BYJ-48-stapmotor met Arduino en analoog joystick

Dit is 'n beheerskema vir die 28BYJ-48-stapmotor wat ek ontwikkel het om te gebruik as deel van my proefskrif vir die laaste jaar. Ek het dit nog nie voorheen gesien nie, so ek het gedink ek sal dit wat ek ontdek het, oplaai. Hopelik sal dit iemand anders daar buite help!

Die kode laat basies 'n stepper motor toe om die hoekposisie van 'n analoog joystick te "kopieer", dit wil sê as u die joystick vorentoe stoot, wys die motor na "noord". druk die joystick na die weste, die motor draai om in dieselfde rigting te wys.

Vir my implementering het ek vereis dat die motor terugkeer na die "huis" rigting as die joystick losgelaat word, dit wil sê geen hoekposisie het nie. Die huisrigting is ooswaarts, en die motor (of teenoor die wyser / toestel wat u aan die uitsetas gekoppel het) moet ook in hierdie rigting wees wanneer dit aangeskakel word.

Voorrade

Arduino Uno of soortgelyk

broodbord en seleksie van draaddrade (manlik tot manlik, manlik tot vroulik)

5V kragtoevoer

Analoge joystick -module (ideaal met 'n kort drukknop -funksie, dit maak die rusting van die "tuis" posisie makliker

28BYJ-48 stepper motor en ULN2003 stepper driver

Pen, papier en blu-tac (of enige ander wysertoestel om aan die motor te koppel!)

Stap 1: Stap 1: Opstel

Koppel die stappermotor aan die stepper -aandrywer en verbind die penne soos volg:

IN1 - Arduino -pen 8

IN2 - Arduino -pen 9

IN3 - Arduino -pen 10

IN4 - Arduino -pen 11

Koppel u 5v -kragtoevoer aan die toevoerrails op u broodbord en koppel die ULN2003 5v -insette aan die toevoerrails. verbind die grondrail met die grond op u Arduino.

vir die joystick, sluit soos volg aan:

Skakelpen - Arduino -pen 2

X -as - Arduino A0 (analoog in 0)

Y -as - Arduino A1

+5V - Arduino 5V -uitset

GND - Arduino GND

Verbind uiteindelik die grond van u broodbord met die ander Arduino GND -pen

Stap 2: Stap 2: Verduideliking van die kode

Ek het die volledige Arduino -kode ingesluit wat u kan aflaai en gebruik. Maar ek sal my bes doen om die relevante dele hier te verduidelik.

Die teorie agter hierdie kode is dat die ruimte wat die joystick inneem, in 'n grafiek verdeel is, met 0, 0 in die middel. Die joystick -insette rus egter op (ongeveer) 512 in die middel, sodat hierdie funksies gebruik word om die waarde van die X- en Y -as te "nul". Afhangende van die kragtoevoer wat u gebruik, moet u moontlik die waardes in die funksies ZeroX en ZeroY verander sodat u joystick 'n betroubare lesing van 0 gee as u rus.

As die X-, Y -waardes gelees word, word dit eers omgeskakel na radiale met behulp van die funksie atan2 () in die wiskundeh biblioteek. Die verduideliking van hierdie funksie val buite die omvang van hierdie instruksies, maar gaan kyk gerus - dit is 'n redelike eenvoudige meetkunde -truuk!

Ten slotte, om die lewe makliker te maak vir ons wat vroeër in grade as rads gewerk het, word die rad -waarde wat deur atan2 () bereken word, omgeskakel na grade.

Bo -aan die lus is 'n klein stukkie kode waarmee u op die kortstondige knoppie op die joystick kan klik om die 'tuis' -ligging te skuif. Dit was ongelooflik handig tydens die toets van die kode, maar ek het dit gelos omdat ek kan sien hoe dit in sommige gevalle nuttig kan wees.

Gaan nou na die grootste deel van die kode! Ons begin met die lees van die joystick X, Y -koördinate twee keer geskei deur 'n vertraging van 10 ms en kyk dan of dit dieselfde is - ek het gevind dat die joystick af en toe sporadiese metings sou lewer, en hierdie geringe vertraging was genoeg om te keer dat die motor draai op grond van hierdie. Dit is ook 'n kort genoeg vertraging dat dit skynbaar nie met opsetlike insette inmeng nie.

Die res van die kode is baie duidelik en ek het my bes gedoen om dit te dokumenteer; 'N Reeks IF -stellings vergelyk die huidige joystickhoek met die motorhoek en skuif die motor na die hoek. Die 28BYJ-48 het 5.689 stappe per graad, daarom vermenigvuldig ons die vereiste beweging met hierdie oënskynlik onewe getal!

Die een deel van die kode wat die meeste verduidelik moet word, is wat ek die 'omhulsel' genoem het. In die selfs dat die joystick & motor by bv. +175 °, en die joystick het daarna na -175 ° beweeg ('n beweging van slegs 10 ° op die joystick, van net noord van wes tot net suid van wes), sou die motor 350 ° in die verkeerde rigting beweeg! hiervoor is die spesiale geval geskryf.

Die omhulsel begin deur te kyk of die motor en joystick teenoorgestelde tekens het, dit wil sê die motor is positief en die joystick negatief, of andersom. Dit kontroleer ook dat die som van die absolute (dit wil sê positiewe waardes) van die joystick en motor bo 180 ° is.

As albei hierdie stellings waar is, kyk die funksie dan of die motor met die kloksgewys moet beweeg (die motorwaarde is negatief) of linksom (as die motorwaarde positief is).

Die absolute waardes van die motorhoek en joystickhoek word in totaal afgetrek en van 360 ° afgetrek om die afstand te bepaal wat bepaal moet word. Laastens word die motorhoek (wat nou die joystickhoek weerspieël) as sodanig bygewerk.

Stap 3: afgerond

Al wat u hoef te doen is om die kode na u Arduino op te laai en uit te voer! Sien die video hierbo vir 'n goeie idee van hoe die projek funksioneer. Dit sal handig wees vir kameras, robotarms en vele ander toepassings!

Laat weet my as u die kode gebruik, en as u sien waar die kode verbeter kan word, hoor ek graag u terugvoer.

Aanbeveel: