Sadržaj:

Kutna pozicijska kontrola koračnog motora 28BYJ-48 s Arduino i analognom joystickom: 3 koraka
Kutna pozicijska kontrola koračnog motora 28BYJ-48 s Arduino i analognom joystickom: 3 koraka

Video: Kutna pozicijska kontrola koračnog motora 28BYJ-48 s Arduino i analognom joystickom: 3 koraka

Video: Kutna pozicijska kontrola koračnog motora 28BYJ-48 s Arduino i analognom joystickom: 3 koraka
Video: Policijska kontrola (police control) 2024, Studeni
Anonim
Kutna pozicijska kontrola koračnog motora 28BYJ-48 s Arduino i analognom joystickom
Kutna pozicijska kontrola koračnog motora 28BYJ-48 s Arduino i analognom joystickom

Ovo je shema upravljanja koračnim motorom 28BYJ-48 koju sam razvio za korištenje u sklopu svog završnog diplomskog projekta. Nisam vidio da je to učinjeno prije pa sam mislio prenijeti ono što sam otkrio. Nadam se da će ovo pomoći nekome drugome!

Kod u osnovi dopušta koračni motor da "kopira" kutni položaj analogne upravljačke palice, što znači da ako gurnete navigacijsku tipku prema naprijed, motor pokazuje prema "sjeveru". gurnite joystick prema zapadu, motor se okreće prema istoj smjeru.

Za moju implementaciju zahtijevao sam da se motor, ako se pusti, odnosno nema kutni položaj, vrati u smjer "doma". Domaći smjer je okrenut prema istoku, a motor (ili u najmu bez obzira na pokazivač / uređaj koji ste priključili na izlazno vratilo!) Također mora biti okrenut u tom smjeru kada je uključen.

Pribor

Arduino Uno ili slično

oplata i odabir kratkospojnih žica (muško na muško, muško na žensko)

5V napajanje

Analogni modul upravljačke palice (idealno s trenutnom funkcijom pritiska na gumb, to olakšava odmaranje u "kućnom" položaju

Koračni motor 28BYJ-48 i pokretač koraka ULN2003

Olovka, papir i blu-tac (ili bilo koji drugi pokazivač za pričvršćivanje na motor!)

Korak 1: Korak 1: Postavljanje

Spojite koračni motor na pokretač koraka i spojite pinove na sljedeći način:

IN1 - Arduino pin 8

IN2 - Arduino pin 9

IN3 - Arduino pin 10

IN4 - Arduino pin 11

Spojite svoje napajanje od 5 V na opskrbne vodilice na vašoj ploči, a 5 V ulaze ULN2003 s opskrbnim vodilicama. spojite uzemljenje sa uzemljenjem na svom Arduinu.

za joystick spojite na sljedeći način:

Prekidač - Arduino pin 2

Os X - Arduino A0 (analogno u 0)

Os Y - Arduino A1

+5V - Arduino 5V izlaz

GND - Arduino GND

Konačno spojite uzemljenje svoje matične ploče na drugi pin Arduino GND

Korak 2: Korak 2: Objašnjenje koda

Uključio sam cijeli Arduino kôd koji možete preuzeti i koristiti. Ali potrudit ću se objasniti relevantne dijelove ovdje.

Teorija koja stoji iza ovog koda je da je prostor koji zauzima joystick podijeljen u grafikon, s 0, 0 u središtu. međutim ulazi džojstika leže na (približno) 512 u sredini, pa se za prevladavanje ove dvije funkcije koriste za "nuliranje" vrijednosti očitane s osi X i Y. ovisno o izvoru napajanja koje koristite, možda ćete morati promijeniti vrijednosti u funkcijama ZeroX i ZeroY tako da vaš joystick daje pouzdano očitanje 0 tijekom odmora.

Kad se pročitaju vrijednosti X, Y, one se prvo pretvaraju u radijane pomoću funkcije atan2 () u biblioteci math.h. Objašnjenje ove funkcije izvan je opsega ovog uputstva, ali molimo vas da to potražite - to je prilično jednostavan trik geometrije!

Konačno, kako bismo olakšali život onima od nas koji smo radili u stupnjevima, a ne u radima, vrijednost rada koju izračunava atan2 () pretvara se u stupnjeve.

Pri vrhu petlje nalazi se mali isječak koda koji vam omogućuje da pritisnete trenutni gumb na upravljačkoj palici za pomicanje "kućnog" mjesta. Ovo je bilo nevjerojatno korisno tijekom testiranja koda, ali ostavio sam ga jer vidim kako bi u nekim slučajevima mogao biti koristan.

Sada na glavni dio koda! započinjemo čitanjem joystick -a X, Y koordinata dvaput odvojenih odgodom od 10 ms, a zatim provjeravamo jesu li isti - otkrio sam da će joystick povremeno emitirati sporadična očitanja, a to malo kašnjenje bilo je dovoljno da zaustavi okretanje motora na temelju ovih. To je također dovoljno kratko kašnjenje da se ne čini da ometa namjerne unose.

Ostatak koda prilično je jasan i dao sam sve od sebe da ga dokumentiram; Niz IF izjava uspoređuje trenutni kut upravljačke palice s kutom motora i pomiče motor do tog kuta. 28BYJ-48 ima 5.689 koraka po stupnju, pa zato potrebno kretanje pomnožimo s ovim naizgled neparnim brojem!

Jedan dio koda koji zahtijeva najviše objašnjenja je ono što sam nazvao "omotni slučaj". Čak i kad su joystick i motor bili na pr. +175 °, a joystick se nakon toga pomaknuo na -175 ° (pomak od samo 10 ° na joystick -u, od sjeverozapada do jugozapada), motor bi se pomaknuo u pogrešnom smjeru za 350 °! da bi se ovo objasnilo napisan je poseban slučaj.

Slučaj zaokruživanja počinje provjerom da li motor i joystick imaju suprotne znakove, tj. Motor je pozitivan, a joystick negativan, ili obrnuto. Također provjerava da li je zbroj apsolutnih (to jest pozitivnih vrijednosti) upravljačke palice i motora iznad 180 °.

Ako su obje izjave točne, funkcija tada provjerava treba li se motor kretati u smjeru kazaljke na satu (vrijednost motora je negativna) ili u smjeru suprotnom od kazaljke na satu (ako je vrijednost motora pozitivna).

Apsolutne vrijednosti kuta motora i kuta upravljačke palice zbrajaju se i oduzimaju od 360 ° kako bi se odredila udaljenost za kretanje. Konačno, kut motora (koji sada odražava kut upravljačke palice) je ažuriran kao takav.

Korak 3: ZAVRŠENO

Dakle, preostaje samo prenijeti kôd na svoj Arduino i pokrenuti ga! Za bolji uvid u funkcioniranje projekta pogledajte gornji video. Ovo bi bilo korisno za gimbale fotoaparata, robotske ruke i mnoge druge aplikacije!

Ako koristite kôd, javite mi. Ako vidite bilo gdje gdje se kôd može poboljšati, volio bih čuti vaše povratne informacije.

Preporučeni: