Isi kandungan:

Kawalan Posisi Sudut Motor Stepper 28BYJ-48 Dengan Joystick Arduino & Analog: 3 Langkah
Kawalan Posisi Sudut Motor Stepper 28BYJ-48 Dengan Joystick Arduino & Analog: 3 Langkah

Video: Kawalan Posisi Sudut Motor Stepper 28BYJ-48 Dengan Joystick Arduino & Analog: 3 Langkah

Video: Kawalan Posisi Sudut Motor Stepper 28BYJ-48 Dengan Joystick Arduino & Analog: 3 Langkah
Video: Using 28BYJ-48 Stepper Motor Push button Speed with 8 projects: Ultimate Video Tutorial Lesson 107 2024, Julai
Anonim
Kawalan Posisi Sudut Motor Stepper 28BYJ-48 Dengan Joystick Arduino & Analog
Kawalan Posisi Sudut Motor Stepper 28BYJ-48 Dengan Joystick Arduino & Analog

Ini adalah skema kawalan untuk motor stepper 28BYJ-48 yang telah saya kembangkan untuk digunakan sebagai sebahagian daripada projek disertasi tahun terakhir saya. Saya tidak pernah melihatnya sebelum ini, jadi saya fikir akan memuat naik apa yang saya dapati. Semoga ini dapat membantu orang lain di luar sana!

Kod pada dasarnya membolehkan motor stepper untuk "menyalin" kedudukan sudut kayu bedik analog, iaitu jika anda menolak kayu bedik ke hadapan, motor menunjuk ke arah "utara". tolak kayu bedik ke arah barat, motor berpusing ke arah yang sama.

Untuk pelaksanaan saya, saya memerlukan bahawa jika kayu bedik dilepaskan, iaitu tidak mempunyai kedudukan sudut, motor akan kembali ke arah "rumah". Arah rumah menghadap ke timur, dan motor (atau sewa pointer / peranti apa pun yang anda pasangkan pada poros output!) Juga mesti menghadap ke arah ini ketika dihidupkan.

Bekalan

Arduino Uno atau yang serupa

papan roti & pemilihan wayar pelompat (lelaki hingga lelaki, lelaki hingga wanita)

Bekalan kuasa 5V

Modul joystick analog (sesuai dengan ciri butang tekan sesaat, ini menjadikan kedudukan "rumah" berehat lebih mudah

Motor stepper 28BYJ-48 dan pemacu stepper ULN2003

Pena, kertas dan blu-tac (atau alat penunjuk lain untuk dipasang ke motor!)

Langkah 1: Langkah 1: Menyiapkan

Sambungkan motor stepper ke pemacu stepper, dan sambungkan pin seperti berikut:

IN1 - Pin Arduino 8

IN2 - Pin Arduino 9

IN3 - Pin Arduino 10

IN4 - Pin Arduino 11

Sambungkan bekalan kuasa 5v anda ke rel bekalan di papan roti anda, dan sambungkan input 5v ULN2003 ke rel bekalan. sambungkan landasan kereta api ke tanah di Arduino anda.

untuk kayu bedik, sambungkan seperti berikut:

Tukar pin - pin Arduino 2

Paksi X - Arduino A0 (Analog dalam 0)

Paksi Y - Arduino A1

+ 5V - Arduino output 5V

GND - Arduino GND

Akhirnya sambungkan permukaan papan roti anda ke pin Arduino GND yang lain

Langkah 2: Langkah 2: Menjelaskan Kod

Saya telah memasukkan kod Arduino penuh untuk anda muat turun dan gunakan. Tetapi akan melakukan yang terbaik untuk menerangkan bahagian-bahagian yang berkaitan di sini.

Teori di sebalik kod ini adalah bahawa ruang yang ditempati oleh kayu bedik dibahagikan kepada graf, dengan 0, 0 di tengahnya. namun input joystick terletak pada (kira-kira) 512 di tengah, jadi untuk mengatasi kedua fungsi ini digunakan untuk "zero" nilai yang dibaca dari sumbu X dan Y. bergantung pada bekalan kuasa yang anda gunakan, anda mungkin perlu mengubah nilai dalam fungsi ZeroX dan ZeroY sehingga kayu bedik anda memberikan bacaan 0 yang boleh dipercayai ketika berehat.

Apabila nilai X, Y dibaca, mereka pertama kali ditukar menjadi radian menggunakan fungsi atan2 () di perpustakaan math.h. Menjelaskan fungsi ini berada di luar ruang lingkup arahan ini, tetapi sila lihat - ini adalah kaedah geometri yang agak mudah!

Akhirnya, untuk menjadikan hidup lebih mudah bagi kita yang biasa bekerja dalam darjah dan bukannya rad, nilai rad yang dikira oleh atan2 () ditukar menjadi darjah.

Di bahagian atas gelung terdapat potongan kecil kod yang membolehkan anda mengklik butang sesaat pada kayu bedik untuk memindahkan lokasi "rumah". Ini sangat berguna semasa menguji kod, tetapi saya membiarkannya kerana saya dapat melihat bagaimana ia berguna dalam beberapa keadaan.

Sekarang ke sebahagian besar kod! kita mulakan dengan membaca joystick X, koordinat Y dua kali dipisahkan dengan kelewatan 10ms dan kemudian memeriksa apakah itu sama - saya mendapati bahawa joystick kadang-kadang akan menghasilkan bacaan sporadis, dan sedikit kelewatan ini cukup untuk menghentikan putaran motor berdasarkan ini. Ia juga merupakan kelewatan yang cukup singkat sehingga nampaknya tidak mengganggu input yang disengajakan.

Selebihnya kod agak jelas dan saya telah berusaha sedaya upaya untuk mendokumentasikannya; Satu siri pernyataan IF membandingkan sudut joystick semasa dengan sudut motor, dan memindahkan motor ke sudut itu. 28BYJ-48 mempunyai 5.689 langkah setiap darjah, jadi itu sebabnya kita memperbanyak pergerakan yang diperlukan dengan nombor yang kelihatan ganjil ini!

Satu bahagian kod yang paling memerlukan penjelasan adalah apa yang saya sebut sebagai "case wraparound". Pada tahap yang sama, joystick & motor berada di mis. + 175 °, dan kayu bedik kemudian bergerak ke -175 ° (pergerakan hanya 10 ° pada kayu bedik, dari arah utara ke barat ke selatan ke barat), motor akan bergerak DI ARAH YANG SALAH sebanyak 350 °! untuk menjelaskan kes ini ditulis khas.

Kes pembungkus dimulakan dengan memeriksa bahawa motor dan kayu bedik mempunyai tanda bertentangan, iaitu motor positif dan kayu bedik negatif, atau sebaliknya. Ia juga memeriksa bahawa jumlah mutlak (iaitu nilai positif) kayu bedik dan motor berada di atas 180 °.

Sekiranya kedua-dua pernyataan ini benar, fungsi kemudian memeriksa sama ada motor perlu bergerak mengikut arah jam (nilai motor negatif) atau berlawanan arah jam (jika nilai motor positif).

Nilai mutlak sudut motor dan sudut kayu bedik dijumlahkan, dan dikurangkan dari 360 ° untuk menentukan jarak bergerak. Akhirnya, sudut motor (yang sekarang mencerminkan sudut kayu bedik) dikemas kini.

Langkah 3: SELESAI

Jadi, yang tinggal hanyalah memuat naik kod ke Arduino anda dan jalankan! Lihat video di atas untuk mengetahui idea bagaimana projek berfungsi. Ini akan berguna untuk gimbal kamera, lengan robot dan banyak aplikasi lain!

Sekiranya anda menggunakan kod, beritahu saya, dan jika anda melihat mana kod tersebut dapat diperbaiki, saya ingin mendengar maklum balas anda.

Disyorkan: