Talaan ng mga Nilalaman:

Angular Positional Control ng 28BYJ-48 Stepper Motor Na May Arduino at Analogue Joystick: 3 Mga Hakbang
Angular Positional Control ng 28BYJ-48 Stepper Motor Na May Arduino at Analogue Joystick: 3 Mga Hakbang

Video: Angular Positional Control ng 28BYJ-48 Stepper Motor Na May Arduino at Analogue Joystick: 3 Mga Hakbang

Video: Angular Positional Control ng 28BYJ-48 Stepper Motor Na May Arduino at Analogue Joystick: 3 Mga Hakbang
Video: Using 28BYJ-48 Stepper Motor Push button Speed with 8 projects: Ultimate Video Tutorial Lesson 107 2024, Nobyembre
Anonim
Angular Positional Control ng 28BYJ-48 Stepper Motor Na May Arduino at Analogue Joystick
Angular Positional Control ng 28BYJ-48 Stepper Motor Na May Arduino at Analogue Joystick

Ito ay isang control scheme para sa 28BYJ-48 stepper motor na binuo ko upang magamit bilang bahagi ng aking proyekto sa panghuling taon ng disertasyon. Hindi ko pa ito nakita dati na nagawa kong i-upload ang natuklasan ko. Inaasahan kong makakatulong ito sa ibang tao diyan!

Karaniwang pinapayagan ng code ang isang stepper motor na "kopyahin" ang angular na posisyon ng isang analogue joystick, iyon ay upang sabihin kung itulak mo ang joystick pasulong, ang motor ay tumuturo patungo sa "hilaga". itulak ang joystick patungo sa kanluran, ang motor ay umiikot upang ituro sa parehong direksyon.

Para sa aking pagpapatupad kinakailangan ko na kung ang joystick ay pinakawalan, ibig sabihin ay walang anggular na posisyon, ang motor ay bumalik sa direksyon na "tahanan". Ang direksyon ng bahay ay nakaharap sa silangan, at ang motor (o sa pagpapaupa ng anumang pointer / aparato na na-attach mo sa output shaft!) Ay dapat ding nakaharap sa direksyon na ito kapag pinapagana.

Mga gamit

Arduino Uno o katulad

breadboard at pagpili ng mga wire ng jumper (lalaki hanggang lalaki, lalaki hanggang babae)

5V supply ng kuryente

Analogue joystick module (mainam na may isang pansamantalang tampok na pindutan ng push, ginagawang mas madali ang pamamahinga ng posisyon na "home"

28BYJ-48 stepper motor at ULN2003 stepper driver

Panulat, papel at blu-tac (o anumang iba pang aparato ng pointer upang ilakip sa motor!)

Hakbang 1: Hakbang 1: Pag-set up

Ikonekta ang stepper motor sa stepper driver, at ikonekta ang mga pin tulad ng sumusunod:

IN1 - Arduino pin 8

IN2 - Arduino pin 9

IN3 - Arduino pin 10

IN4 - Arduino pin 11

Ikonekta ang iyong 5v power supply sa mga supply rails sa iyong breadboard, at ikonekta ang mga ULN2003 5v input sa mga riles ng supply. ikonekta ang ground rail sa lupa sa iyong Arduino.

para sa joystick, kumonekta tulad ng sumusunod:

Switch pin - Arduino pin 2

X axis - Arduino A0 (Analogue sa 0)

Y axis - Arduino A1

+ 5V - Arduino 5V output

GND - Arduino GND

Sa wakas ay ikonekta ang lupa ng iyong breadboard sa iba pang Arduino GND pin

Hakbang 2: Hakbang 2: Pagpapaliwanag ng Code

Isinama ko ang buong Arduino code para ma-download at magamit mo. Ngunit gagawin ang aking makakaya upang ipaliwanag ang mga kaugnay na bahagi dito.

Ang teorya sa likod ng code na ito ay ang puwang na sinakop ng joystick ay nahahati sa isang graph, na may 0, 0 sa gitna. subalit ang mga input ng joystick ay natitira sa (tinatayang) 512 sa gitna, kaya upang mapagtagumpayan ang dalawang pagpapaandar na ito ay ginagamit upang "zero" ang binasang halaga mula sa axis ng X at Y. nakasalalay sa suplay ng kuryente na ginamit mo maaaring kailanganin mong baguhin ang mga halaga sa mga pagpapaandar na ZeroX at ZeroY upang ang iyong joystick ay magbibigay ng isang maaasahang pagbabasa ng 0 kapag nagpapahinga.

Kapag nabasa ang mga halagang X, Y, una silang na-convert sa mga radian gamit ang function na atan2 () sa library ng matematika.h. Ang pagpapaliwanag ng pagpapaandar na ito ay nasa labas ng saklaw ng pagtuturo na ito, ngunit mangyaring tingnan ito - ito ay isang simpleng simpleng trick ng geometry!

Sa wakas, upang gawing mas madali ang buhay para sa amin na dating nagtatrabaho sa degree kaysa sa mga rad, ang halaga ng rad na kinakalkula ng atan2 () ay na-convert sa degree.

Sa tuktok ng loop ay isang maliit na snippet ng code na nagbibigay-daan sa iyo upang mag-click sa panandaliang pindutan sa joystick upang ilipat ang lokasyon ng "home". Ito ay hindi kapani-paniwalang kapaki-pakinabang habang sinusubukan ang code, ngunit naiwan ko ito dahil nakikita ko kung paano ito magiging kapaki-pakinabang sa ilang mga pagkakataon.

Ngayon sa pangunahing bultuhan ng code! nagsisimula kami sa pamamagitan ng pagbabasa ng joystick X, Y coordinate dalawang beses na pinaghiwalay ng isang 10ms pagkaantala at pagkatapos ay suriin kung pareho ang mga ito - Nalaman ko na ang joystick ay paminsan-minsan na naglalabas ng sporadic readings, at ang bahagyang pagkaantala na ito ay sapat upang ihinto ang pag-on ng motor batay sa mga ito. Ito rin ay isang maikling sapat na pagkaantala na tila hindi makagambala sa mga sadyang pag-input.

Ang natitirang code ay sa sarili ay nagpapaliwanag at nagawa ko ang aking makakaya upang idokumento ito; Ang isang serye ng mga pahayag ng KUNG ihambing ang kasalukuyang anggulo ng joystick sa anggulo ng motor, at ilipat ang motor sa anggulo na iyon. Ang 28BYJ-48 ay may 5.689 na mga hakbang bawat degree, kaya't pinarami namin ang kinakailangang paggalaw ng tila kakaibang numero na ito!

Ang isang bahagi ng code na nangangailangan ng pinaka-nagpapaliwanag ay ang tinawag kong "wraparound case". Sa gabi na ang joystick at motor ay nasa hal. + 175 °, at ang joystick pagkatapos ay lumipat sa -175 ° (isang kilusan na 10 ° lamang sa joystick, mula sa hilaga lamang ng kanluran hanggang timog lamang ng kanluran), ang motor ay lilipat SA MALING DIREKSIYON ng 350 °! upang account para sa mga ito ang espesyal na kaso ay nakasulat.

Ang case ng wraparound ay nagsisimula sa pamamagitan ng pag-check kung ang motor at joystick ay may kabaligtaran na mga palatandaan, ibig sabihin, positibo ang motor at negatibo ang joystick, o kabaligtaran. Sinusuri din nito na ang kabuuan ng ganap (iyon ay, mga positibong halaga) ng joystick at motor ay higit sa 180 °.

Kung ang parehong mga pahayag na ito ay totoo, ang pag-andar pagkatapos ay suriin kung ang motor ay kailangang ilipat sa pakanan (ang halaga ng motor ay negatibo) o anticlockwise (kung ang halaga ng motor ay positibo).

Ang ganap na mga halaga ng anggulo ng motor at anggulo ng joystick ay totaled, at ibabawas mula sa 360 ° upang matukoy ang distansya upang ilipat. Sa wakas, ang anggulo ng motor (na sumasalamin ngayon sa anggulo ng joystick) ay na-update na tulad nito.

Hakbang 3: TAPOS

Kaya, ang natitira lamang upang gawin ay i-upload ang code sa iyong Arduino at patakbuhin ito! Tingnan ang video sa itaas para sa isang magandang ideya kung paano gumagana ang proyekto. Ito ay magiging kapaki-pakinabang para sa mga camera gimbal, robotic arm at maraming iba pang mga application!

Kung gagamitin mo ang code, mangyaring ipaalam sa akin, at kung may nakikita ka kung saan maaaring mapabuti ang code, gusto kong marinig ang iyong puna.

Inirerekumendang: