Satura rādītājs:

28BYJ-48 pakāpju motora leņķa pozīcijas kontrole ar Arduino un analogo kursorsviru: 3 soļi
28BYJ-48 pakāpju motora leņķa pozīcijas kontrole ar Arduino un analogo kursorsviru: 3 soļi

Video: 28BYJ-48 pakāpju motora leņķa pozīcijas kontrole ar Arduino un analogo kursorsviru: 3 soļi

Video: 28BYJ-48 pakāpju motora leņķa pozīcijas kontrole ar Arduino un analogo kursorsviru: 3 soļi
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Jūlijs
Anonim
28BYJ-48 pakāpju motora leņķa pozīcijas kontrole ar Arduino un analogo kursorsviru
28BYJ-48 pakāpju motora leņķa pozīcijas kontrole ar Arduino un analogo kursorsviru

Šī ir soļu motora 28BYJ-48 vadības shēma, kuru esmu izstrādājis, lai izmantotu pēdējā gada disertācijas projekta ietvaros. Es to iepriekš neesmu redzējis, tāpēc domāju augšupielādēt atklāto. Cerams, ka tas palīdzēs kādam citam!

Kods būtībā ļauj soļu motoram "kopēt" analogā kursorsviras leņķisko stāvokli, tas ir, ja jūs virzāt kursorsviru uz priekšu, motors norāda uz "ziemeļiem". pabīdiet kursorsviru uz rietumiem, motors griežas, lai norādītu tajā pašā virzienā.

Īstenošanai es pieprasīju, lai, atlaižot kursorsviru, t.i., tai nav leņķa stāvokļa, motors atgriežas "mājas" virzienā. Mājas virziens ir vērsts uz austrumiem, un motoram (vai nomai neatkarīgi no rādītāja / ierīces, ko esat pievienojis izejas vārpstai!) Arī jābūt vērstam šajā virzienā, kad tas ir ieslēgts.

Piegādes

Arduino Uno vai līdzīgi

maizes dēlis un džemperu vadu izvēle (no vīrieša uz vīrieti, no vīrieša uz sievieti)

5V barošanas avots

Analogais kursorsviras modulis (ideālā gadījumā ar īslaicīgu spiedpogas funkciju, kas atvieglo "mājas" stāvokļa atpūtu)

28BYJ-48 soļu motors un ULN2003 pakāpju vadītājs

Pildspalva, papīrs un blu-tac (vai jebkura cita rādītājierīce, ko piestiprināt pie motora!)

1. darbība: 1. darbība: iestatīšana

Pievienojiet pakāpju motoru pakāpiena vadītājam un pievienojiet tapas šādi:

IN1 - Arduino tapa 8

IN2 - Arduino tapa 9

IN3 - Arduino tapa 10

IN4 - Arduino tapa 11

Pievienojiet 5 voltu barošanas bloku barošanas sliedēm uz jūsu maizes dēļa un pievienojiet ULN2003 5 v ieejas barošanas sliedēm. savienojiet zemes sliedi ar Arduino zemi.

kursorsvirai pievienojiet šādi:

Slēdža tapa - Arduino tapa 2

X ass - Arduino A0 (analogs 0)

Y ass - Arduino A1

+5V - Arduino 5V izeja

GND - Arduino GND

Visbeidzot pievienojiet maizes dēļa zemi ar otru Arduino GND tapu

2. darbība: 2. darbība: izskaidrojiet kodu

Esmu iekļāvis pilnu Arduino kodu, lai jūs varētu lejupielādēt un izmantot. Bet es darīšu visu iespējamo, lai šeit izskaidrotu attiecīgās daļas.

Šī koda teorija ir tāda, ka kursorsviras aizņemtā telpa ir sadalīta grafikā, kura centrā ir 0, 0. tomēr kursorsviru ieejas atrodas (aptuveni) 512 centrā, tāpēc, lai to pārvarētu, divas funkcijas tiek izmantotas, lai no nulles nolasītu vērtību, kas nolasīta no X un Y ass. Atkarībā no izmantotā barošanas avota, iespējams, būs jāmaina funkciju ZeroX un ZeroY vērtības, lai atpūtas kursā kursorsvira sniegtu ticamu nolasījumu 0.

Nolasot X, Y vērtības, tās vispirms tiek pārvērstas par radiāniem, izmantojot funkciju atan2 () math.h bibliotēkā. Šīs funkcijas izskaidrošana ir ārpus šīs pamācības darbības jomas, taču, lūdzu, dodieties to meklēt - tas ir diezgan vienkāršs ģeometrijas triks!

Visbeidzot, lai atvieglotu dzīvi tiem no mums, kuri agrāk strādāja grādos, nevis rados, atan2 () aprēķinātā rad vērtība tiek pārvērsta grādos.

Cilpas augšpusē ir neliels koda fragments, kas ļauj noklikšķināt uz kursorsviras mirkļa pogas, lai pārvietotu "mājas" atrašanās vietu. Tas bija neticami noderīgi, pārbaudot kodu, taču esmu to atstājis, jo redzu, kā tas dažos gadījumos varētu būt noderīgs.

Tagad pāriet uz galveno koda lielāko daļu! mēs vispirms nolasām kursorsviru X, Y koordinātas, divas reizes atdalītas ar 10 ms aizkavi, un pēc tam pārbaudām, vai tās ir vienādas - es atklāju, ka kursorsviru reizēm izdod sporādiski rādījumi, un ar šo nelielu kavēšanos pietika, lai apturētu motora griešanos, pamatojoties uz šiem. Tā ir arī pietiekami īsa aizkave, ka šķiet, ka tā netraucē apzinātiem ievadiem.

Pārējais kods ir diezgan pašsaprotams, un esmu darījis visu iespējamo, lai to dokumentētu; IF paziņojumu sērija salīdzina pašreizējo kursorsviras leņķi ar motora leņķi un pārvieto motoru uz šo leņķi. 28BYJ-48 ir 5,689 soļi uz grādu, tāpēc mēs vajadzīgo kustību reizinām ar šo šķietami nepāra skaitli!

Viena no koda daļām, kas prasa visvairāk skaidrojumu, ir tā, ko es esmu nodēvējis par “ietīšanas lietu”. Tajā pat laikā, kad kursorsvira un motors atradās, piem. +175 °, un kursorsviru pēc tam pārvietoja uz -175 ° (kustība tikai par 10 ° kursorsvirā, no ziemeļiem uz rietumiem līdz dienvidiem no rietumiem), motors pārvietotos nepareizā virzienā par 350 °! lai to ņemtu vērā, tika uzrakstīts īpašais gadījums.

Ietīšanas gadījums sākas, pārbaudot, vai motoram un kursorsvirai ir pretējas zīmes, t.i., motors ir pozitīvs un kursorsviru negatīvs, vai otrādi. Tas arī pārbauda, vai kursorsviras un motora absolūto (tas ir, pozitīvo) vērtību summa pārsniedz 180 °.

Ja abi šie apgalvojumi ir patiesi, funkcija pārbauda, vai motoram jāpārvietojas pulksteņrādītāja virzienā (motora vērtība ir negatīva) vai pretēji pulksteņrādītāja virzienam (ja motora vērtība ir pozitīva).

Motora leņķa un kursorsviras leņķa absolūtās vērtības tiek summētas un atņemtas no 360 °, lai noteiktu pārvietošanās attālumu. Visbeidzot, motora leņķis (kas tagad atspoguļo kursorsviru leņķi) tiek atjaunināts kā tāds.

3. darbība: Pabeigts

Tātad, atliek tikai augšupielādēt kodu savā Arduino un palaist to! Skatiet iepriekš redzamo videoklipu, lai iegūtu labu priekšstatu par projekta darbību. Tas būtu noderīgi kameru kardāniem, robotām rokām un daudzām citām lietojumprogrammām!

Ja izmantojat kodu, lūdzu, informējiet mani, un, ja redzat, kur kodu var uzlabot, labprāt uzklausīšu jūsu atsauksmes.

Ieteicams: