Mündəricat:

Arduino və Analog Joystick ilə 28BYJ-48 Step Motorun Açısal Pozisyon Kontrolü: 3 addım
Arduino və Analog Joystick ilə 28BYJ-48 Step Motorun Açısal Pozisyon Kontrolü: 3 addım

Video: Arduino və Analog Joystick ilə 28BYJ-48 Step Motorun Açısal Pozisyon Kontrolü: 3 addım

Video: Arduino və Analog Joystick ilə 28BYJ-48 Step Motorun Açısal Pozisyon Kontrolü: 3 addım
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Iyul
Anonim
Arduino və Analog Joystick ilə 28BYJ-48 Step Motorun Açısal Pozisyonal İdarəçiliyi
Arduino və Analog Joystick ilə 28BYJ-48 Step Motorun Açısal Pozisyonal İdarəçiliyi

Bu, son illik dissertasiya layihəm çərçivəsində istifadə etmək üçün hazırladığım 28BYJ-48 pilləli mühərrikin idarəetmə sxemidir. Bunu əvvəllər görməmişdim, buna görə də kəşf etdiyimi yükləyəcəyimi düşünürdüm. Ümid edirik ki, bu, başqasına kömək edəcək!

Kod əsasən bir step motorunun analoq joystikin açısal mövqeyini "kopyalamasına" imkan verir, yəni joysticki irəli itələsəniz, motor "şimala" işarə edir. joystick'i qərbə doğru itələyin, motor eyni istiqamətə dönmək üçün dönər.

Həyata keçirmək üçün tələb etdim ki, joystick buraxılsa, yəni bucaq mövqeyi yoxdursa, motor "ev" istiqamətinə qayıdır. Ev istiqaməti şərqə baxır və mühərrik (və ya çıxış milinə bağladığınız hər hansı bir göstərici / cihazı icarəyə götürəndə) işə salındıqda da bu istiqamətə baxmalıdır.

Təchizat

Arduino Uno və ya bənzəri

çörək taxtası və tullanan tellərin seçimi (kişidən kişiyə, kişidən qadına)

5V enerji təchizatı

Analoq joystick modulu (ideal olaraq bir anlıq düymə xüsusiyyəti ilə "ev" mövqeyinin rahat istirahətini təmin edir.

28BYJ-48 step motor və ULN2003 step sürücü

Qələm, kağız və blu-tac (və ya mühərrikə qoşulmaq üçün hər hansı digər göstərici cihazı!)

Addım 1: Adım 1: Quraşdırma

Step motorunu step sürücüsünə bağlayın və pinləri aşağıdakı kimi bağlayın:

IN1 - Arduino pin 8

IN2 - Arduino pin 9

IN3 - Arduino pin 10

IN4 - Arduino pin 11

5v enerji təchizatını çörək taxtanızdakı təchizat raylarına qoşun və ULN2003 5v girişlərini təchizat raylarına qoşun. yer rayını Arduino cihazınızla yerə bağlayın.

joystick üçün aşağıdakı kimi bağlayın:

Keçid pimi - Arduino pin 2

X oxu - Arduino A0 (Analog 0 -da)

Y oxu - Arduino A1

+5V - Arduino 5V çıxışı

GND - Arduino GND

Nəhayət, çörək taxtanızın zəminini digər Arduino GND pininə bağlayın

Addım 2: Adım 2: Kodun izahı

Yükləmək və istifadə etmək üçün tam Arduino kodunu daxil etdim. Ancaq burada əlaqəli hissələri izah etmək üçün əlimdən gələni edəcəyəm.

Bu kodun arxasında duran nəzəriyyə, joystickin tutduğu yerin ortada 0, 0 olduğu bir qrafikə bölünməsidir. lakin joystick girişləri mərkəzdə (təxminən) 512 -də dayanır, buna görə də bu iki funksiyanı aşmaq üçün X və Y oxundan oxunan dəyəri "sıfırlamaq" üçün istifadə olunur. İstifadə etdiyiniz enerji mənbəyindən asılı olaraq ZeroX və ZeroY funksiyalarının dəyərlərini dəyişdirməyiniz lazım ola bilər ki, istirahət edərkən joystickiniz 0 -un etibarlı oxunmasını təmin etsin.

X, Y dəyərləri oxunduqda, əvvəlcə math.h kitabxanasındakı atan2 () funksiyasından istifadə edərək radiana çevrilir. Bu funksiyanı izah etmək bu təlimatlandırmanın əhatə dairəsindən kənardır, amma lütfən gedin baxın - bu olduqca sadə bir həndəsə hiyləsidir!

Nəhayət, əvvəllər radlardan çox dərəcə işləyənlərin həyatını asanlaşdırmaq üçün atan2 () ilə hesablanan rad dəyəri dərəcələrə çevrilir.

Döngünün yuxarı hissəsində, "ev" yerini köçürmək üçün joystickdəki ani düyməni basmağa imkan verən kiçik bir kod parçası var. Kodu sınayarkən bu inanılmaz dərəcədə faydalı oldu, amma bəzi hallarda necə faydalı ola biləcəyini görə bildiyim üçün buraxdım.

İndi kodun əsas hissəsinə keçək! Joystick X, Y koordinatlarını iki dəfə ayrılaraq 10ms gecikmə ilə oxuduqdan sonra eyni olub olmadığını yoxlayırıq - joystickin ara -sıra oxunuşlar çıxardığını gördüm və bu kiçik gecikmə motorun dönməsini dayandırmaq üçün kifayət idi. Bu da qəsdən girişlərə müdaxilə etmədiyi üçün kifayət qədər qısa bir gecikmədir.

Kodun qalan hissəsi özünü izah edir və bunu sənədləşdirmək üçün əlimdən gələni etdim; IF bir sıra ifadələr, indiki joystick açısını motor bucağı ilə müqayisə edir və mühərriki bu bucağa keçirir. 28BYJ-48-in hər dərəcəsi 5.689 addımdır, buna görə lazım olan hərəkəti bu qəribə sayla vururuq!

Kodun ən çox izah edilməsini tələb edən bir hissəsi, "dolama işi" adlandırdığım şeydir. Joystick və motorun belə olduğu halda. +175 ° və joystick sonradan -175 ° -ə keçdi (joystickdə yalnız 10 ° bir hərəkət, yalnız şimaldan qərbdən cənubdan qərbə), motor səhv istiqamətdə 350 ° hərəkət edəcək! bunun üçün xüsusi bir iş yazıldı.

Mühərrik işi, motorun və joystikin əks işarələrə malik olduğunu yoxlamaqla başlayır, yəni motor müsbət və joystick mənfi və ya əksinə. Joystick və motorun mütləq (yəni müsbət dəyərlər) cəminin 180 ° -dən yuxarı olduğunu da yoxlayır.

Bu ifadələrin hər ikisi də doğrudursa, funksiya sonra motorun saat əqrəbi istiqamətində (motor dəyəri mənfi) və ya saat əqrəbinin əksinə (əgər motor dəyəri müsbətdirsə) hərəkət etməli olub olmadığını yoxlayır.

Mühərrik bucağının və joystick açısının mütləq dəyərləri cəmlənir və hərəkət etmək məsafəsini təyin etmək üçün 360 ° -dən çıxılır. Nəhayət, motor bucağı (indi joystick açısını əks etdirir) bu şəkildə yenilənir.

Addım 3: BİTDİ

Beləliklə, qalan yalnız kodu Arduino -ya yükləmək və işə salmaqdır! Layihənin necə işlədiyini bilmək üçün yuxarıdakı videoya baxın. Bu kamera gimbals, robot qolları və bir çox digər tətbiqlər üçün faydalı olardı!

Kodu istifadə edirsinizsə, mənə bildirin və kodun təkmilləşdirilə biləcəyi hər hansı bir yer görürsünüzsə, rəyinizi eşitmək istərdim.

Tövsiyə: