Daftar Isi:

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

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

Video: Kontrol Posisi Sudut 28BYJ-48 Stepper Motor Dengan Arduino & Analog Joystick: 3 Langkah
Video: Tutorial Pemograman Dasar Menggerakan Motor Stepper – Belajar arduino gampang dan murah 2024, Juli
Anonim
Kontrol Posisi Sudut Motor Stepper 28BYJ-48 Dengan Arduino & Joystick Analog
Kontrol Posisi Sudut Motor Stepper 28BYJ-48 Dengan Arduino & Joystick Analog

Ini adalah skema kontrol untuk motor stepper 28BYJ-48 yang telah saya kembangkan untuk digunakan sebagai bagian dari proyek disertasi tahun terakhir saya. Saya belum pernah melihat ini dilakukan sebelumnya, jadi saya pikir saya akan mengunggah apa yang saya temukan. Semoga ini akan membantu orang lain di luar sana!

Kode pada dasarnya memungkinkan motor stepper untuk "menyalin" posisi sudut joystick analog, artinya jika Anda mendorong joystick ke depan, motor mengarah ke "utara". mendorong joystick ke arah barat, motor berputar ke arah yang sama.

Untuk implementasi saya, saya mengharuskan jika joystick dilepaskan, yaitu tidak memiliki posisi sudut, motor kembali ke arah "rumah". Arah rumah menghadap ke timur, dan motor (atau setidaknya penunjuk / perangkat apa pun yang Anda pasang ke poros keluaran!) juga harus menghadap ke arah ini saat dihidupkan.

Perlengkapan

Arduino Uno atau sejenisnya

papan tempat memotong roti & pemilihan kabel jumper (jantan ke jantan, jantan ke betina)

catu daya 5V

Modul joystick analog (idealnya dengan fitur tombol tekan sesaat, ini membuat posisi "rumah" lebih mudah diistirahatkan

28BYJ-48 motor stepper dan driver stepper ULN2003

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

Langkah 1: Langkah 1: Menyiapkan

Hubungkan motor stepper ke driver stepper, dan sambungkan pin sebagai berikut:

IN1 - Arduino pin 8

IN2 - Pin Arduino 9

IN3 - Pin Arduino 10

IN4 - Pin Arduino 11

Hubungkan catu daya 5v Anda ke rel suplai di papan tempat memotong roti Anda, dan sambungkan input ULN2003 5v ke rel suplai. hubungkan ground rail ke ground pada Arduino Anda.

untuk joystick, sambungkan sebagai berikut:

Beralih pin - pin Arduino 2

Sumbu X - Arduino A0 (Analog dalam 0)

Sumbu Y - Arduino A1

+5V - keluaran Arduino 5V

GND - Arduino GND

Terakhir hubungkan ground papan tempat memotong roti Anda ke pin Arduino GND lainnya

Langkah 2: Langkah 2: Menjelaskan Kode

Saya telah menyertakan kode Arduino lengkap untuk Anda unduh dan gunakan. Tetapi akan melakukan yang terbaik untuk menjelaskan bagian-bagian terkait di sini.

Teori di balik kode ini adalah bahwa ruang yang ditempati oleh joystick dibagi menjadi grafik, dengan 0, 0 di tengahnya. namun input joystick berada di (kira-kira) 512 di tengah, jadi untuk mengatasi ini dua fungsi digunakan untuk "nol" nilai yang dibaca dari sumbu X dan Y. tergantung pada catu daya yang Anda gunakan, Anda mungkin perlu mengubah nilai dalam fungsi ZeroX dan ZeroY sehingga joystick Anda memberikan pembacaan 0 yang andal saat beristirahat.

Saat nilai X, Y dibaca, nilai tersebut pertama kali dikonversi ke radian menggunakan fungsi atan2() di library math.h. Menjelaskan fungsi ini di luar cakupan instruksi ini, tapi tolong cari tahu - ini adalah trik geometri yang agak sederhana!

Terakhir, untuk mempermudah hidup kita yang terbiasa bekerja dalam derajat daripada rad, nilai rad yang dihitung oleh atan2() diubah menjadi derajat.

Di bagian atas loop adalah potongan kecil kode yang memungkinkan Anda mengklik tombol sesaat pada joystick untuk memindahkan lokasi "rumah". Ini sangat berguna saat menguji kode, tetapi saya membiarkannya karena saya dapat melihat bagaimana itu bisa berguna dalam beberapa kasus.

Sekarang ke sebagian besar kode! kita mulai dengan membaca joystick X, koordinat Y dua kali dipisahkan oleh penundaan 10 ms dan kemudian memeriksa apakah keduanya sama - saya menemukan bahwa joystick kadang-kadang akan menampilkan pembacaan sporadis, dan sedikit penundaan ini cukup untuk menghentikan putaran motor berdasarkan ini. Ini juga merupakan penundaan yang cukup singkat sehingga tampaknya tidak mengganggu input yang disengaja.

Sisa kodenya cukup jelas dan saya telah melakukan yang terbaik untuk mendokumentasikannya; Serangkaian pernyataan IF membandingkan sudut joystick saat ini dengan sudut motor, dan gerakkan motor ke sudut itu. 28BYJ-48 memiliki 5.689 langkah per derajat, jadi itu sebabnya kami mengalikan gerakan yang diperlukan dengan angka yang tampaknya ganjil ini!

Satu bagian dari kode yang paling membutuhkan penjelasan adalah apa yang saya sebut sebagai "wraparound case". Bahkan ketika joystick & motor berada di mis. +175 °, dan joystick kemudian pindah ke -175 ° (pergerakan hanya 10 ° pada joystick, dari utara barat ke selatan barat), motor akan bergerak DI ARAH YANG SALAH sebesar 350 °! untuk menjelaskan hal ini kasus khusus ditulis.

Kasus sampul dimulai dengan memeriksa apakah motor dan joystick memiliki tanda yang berlawanan, yaitu motor positif dan joystick negatif, atau sebaliknya. Ini juga memeriksa bahwa jumlah absolut (yaitu, nilai positif) dari joystick dan motor di atas 180°.

Jika kedua pernyataan ini benar, fungsi kemudian memeriksa apakah motor perlu bergerak searah jarum jam (nilai motor negatif) atau berlawanan arah jarum jam (jika nilai motor positif).

Nilai absolut dari sudut motor dan sudut joystick dijumlahkan, dan dikurangi dari 360° untuk menentukan jarak yang harus ditempuh. Akhirnya, sudut motor (yang sekarang mencerminkan sudut joystick) diperbarui seperti itu.

Langkah 3: SELESAI

Jadi, yang tersisa untuk dilakukan adalah mengunggah kode ke Arduino Anda dan menjalankannya! Lihat video di atas untuk ide bagus tentang bagaimana fungsi proyek. Ini akan berguna untuk gimbal kamera, lengan robot, dan banyak aplikasi lainnya!

Jika Anda menggunakan kode tersebut, beri tahu saya, dan jika Anda melihat di mana kode tersebut dapat ditingkatkan, saya akan senang mendengar tanggapan Anda.

Direkomendasikan: