Jika Anda telah mencari di thingiverse.com untuk lengan robot keren, kemungkinan Anda telah menemukan ini. Lengan EEZYBOT MK2 (dirancang oleh daghizmo yang cerdas) berbagi kinematik tautan ABB IRB460 yang diskalakan dengan rasio 1:7. Namun, lengan ini dirancang untuk bekerja dengan servo, yang membuatnya sedikit goyah dan kurang anggun. Namun, ada solusi yang lebih baik di luar sana. Lengan MK2 Plus yang ditemukan di sini, https://www.thingiverse.com/thing:2520572 adalah versi remix dari lengan MK2 asli yang menggunakan 3 motor stepper untuk menggerakkan tautannya.
Mencetak ini memakan waktu, jadi bookmark artikel ini, cetak semua dan kembali setelah selesai! (Ini akan memakan waktu beberapa hari)
Jika Anda mengalami kesulitan merakit lengan, ada banyak tutorial online.
Memilih Posisi Home
Berbeda dengan servo, motor stepper tidak memiliki kesadaran posisi. Kita harus memperbaiki ini dengan pertama-tama menyiapkan rutinitas homing saat lengan menyala. Kita akan menggunakan 3 saklar batas untuk menentukan posisi home kita. Tautan bekerja dengan cara yang cukup kompleks, tetapi Anda akan dengan mudah memahami di mana menempatkan saklar setelah Anda merakit lengan dan melihat bagaimana semuanya bergerak.
(i.e tidak ada XY seperti sistem Kartesian tapi kita akan menyebutnya itu untuk memudahkan hal-hal)
Anda dapat menempatkan saklar batas Z di mana saja pada dasar utama lengan. Tambahkan sedikit lem panas sehingga kabel Anda tidak akan terlepas saat lengan bergerak.
Pemasangan Kabel
Pemasangan kabel cukup sederhana, karena semua terminal ditandai pada CNC shield. Cukup jangan memasang driver A4988 Anda dengan cara yang salah! Motor stepper di sisi dengan saklar batas Y harus dihubungkan ke terminal untuk motor stepper Y di CNC shield Anda. Hal yang sama berlaku untuk motor di sisi saklar batas X. (Kita menyebutnya X dan Y karena lebih mudah untuk menangani CNC shield dengan cara ini) Hubungkan stepper terakhir yang memutar dasar lengan ke terminal Z, dan pasang kabel saklar akhir sesuai namanya. Polaritas tidak penting.
Cari sumber daya 12V yang baik yang dapat menyediakan arus untuk motor berjalan tanpa terhenti.
Kode
Mari kita langsung ke intinya. Kita akan menggunakan perpustakaan AccelStepper untuk Arduino untuk mengemudi stepper dengan halus. Perpustakaan ini memungkinkan Anda dengan mudah mempercepat, memperlambat, dan menjalankan beberapa motor stepper secara bersamaan. Anda dapat memperoleh perpustakaan ini secara langsung melalui Arduino IDE dengan menggunakan Library Manager (Sketch > Include Library > Library Manager)
Anda juga dapat mendapatkannya dari halaman asli pencipta di airspayce. https://www.airspayce.com/mikem/arduino/AccelStepper/
Sekarang setelah kita memiliki semua yang kita butuhkan, mari kita uraikan kode langkah demi langkah.
Pertama kita akan menentukan beberapa nama untuk pin yang akan kita gunakan. Anda dapat menemukan diagram pin CNC shield dengan pencarian gambar google cepat. Kita juga akan membuat objek AccelStepper untuk 3 motor stepper kita.
Sekarang setelah selesai, mari kita uraikan logika rutinitas homing kita.
void autohome(){ //We're using this to call our homing routine xyhome(); zhome(); } void xyhome() { int initial_xhome = -1; int initial_yhome = -1; // Set Max Speed and Acceleration of each Steppers at startup for homing XMOTOR.setMaxSpeed(500.0); // Set Max Speed of Stepper (Slower to get better accuracy) XMOTOR.setAcceleration(50.0); // Set Acceleration of Stepper YMOTOR.setMaxSpeed(500.0); // Set Max Speed of Stepper (Slower to get better accuracy) YMOTOR.setAcceleration(50.0); // Set Acceleration of Stepper // Start Homing procedure of Stepper Motor at startup while (digitalRead(YLIMIT)) { // Make the Stepper move CCW until the switch is activated XMOTOR.moveTo(initial_xhome); // Set the position to move to YMOTOR.moveTo(initial_yhome); // Set the position to move to initial_xhome--; // Decrease by 1 for next move if needed initial_yhome--; XMOTOR.run(); // Start moving the stepper YMOTOR.run(); delay(5); } XMOTOR.setCurrentPosition(0); // Set the current position as zero for now YMOTOR.setCurrentPosition(0); initial_xhome = -1; initial_yhome = 1; while(digitalRead(XLIMIT)){ XMOTOR.moveTo(initial_xhome); // Set the position to move to YMOTOR.moveTo(initial_yhome); // Set the position to move to initial_xhome--; // Decrease by 1 for next move if needed initial_yhome++; XMOTOR.run(); // Start moving the stepper YMOTOR.run(); delay(5); } YMOTOR.setCurrentPosition(0); // Set the current position as zero for now YMOTOR.setMaxSpeed(250.0); // Set Max Speed of Stepper (Slower to get better accuracy) YMOTOR.setAcceleration(10.0); // Set Acceleration of Stepper initial_yhome = 1; while (!digitalRead(YLIMIT)) { // Make the Stepper move CW until the switch is deactivated YMOTOR.moveTo(initial_yhome); YMOTOR.run(); initial_yhome++; delay(5); } YMOTOR.setCurrentPosition(0); YMOTOR.setMaxSpeed(YMOTORMAXSPEED); // Set Max Speed of Stepper (Faster for regular movements) YMOTOR.setAcceleration(YMOTORACC); // Set Acceleration of Stepper XMOTOR.setCurrentPosition(0); // Set the current position as zero for now XMOTOR.setMaxSpeed(250.0); // Set Max Speed of Stepper (Slower to get better accuracy) XMOTOR.setAcceleration(10.0); // Set Acceleration of Stepper initial_xhome = 1; while (!digitalRead(XLIMIT)) { // Make the Stepper move CW until the switch is deactivated XMOTOR.moveTo(initial_xhome); XMOTOR.run(); initial_xhome++; delay(5); } XMOTOR.setCurrentPosition(0); XMOTOR.setMaxSpeed(XMOTORMAXSPEED); // Set Max Speed of Stepper (Faster for regular movements) XMOTOR.setAcceleration(XMOTORACC); // Set Acceleration of Stepper } void zhome() { int initial_zhome = -1; // Set Max Speed and Acceleration of each Steppers at startup for homing ZMOTOR.setMaxSpeed(100.0); // Set Max Speed of Stepper (Slower to get better accuracy) ZMOTOR.setAcceleration(100.0); // Set Acceleration of Stepper // Start Homing procedure of Stepper Motor at startup while (digitalRead(ZLIMIT)) { // Make the Stepper move CCW until the switch is activated ZMOTOR.moveTo(initial_zhome); // Set the position to move to initial_zhome--; // Decrease by 1 for next move if needed ZMOTOR.run(); // Start moving the stepper delay(5); } ZMOTOR.setCurrentPosition(0); // Set the current position as zero for now ZMOTOR.setMaxSpeed(50.0); // Set Max Speed of Stepper (Slower to get better accuracy) ZMOTOR.setAcceleration(50.0); // Set Acceleration of Stepper initial_zhome = 1; while (!digitalRead(ZLIMIT)) { // Make the Stepper move CW until the switch is deactivated ZMOTOR.moveTo(initial_zhome); ZMOTOR.run(); initial_zhome++; delay(5); } ZMOTOR.setCurrentPosition(0); ZMOTOR.setMaxSpeed(1000.0); // Set Max Speed of Stepper (Faster for regular movements) ZMOTOR.setAcceleration(1000.0); // Set Acceleration of Stepper }
Oke, jadi itu banyak kode. Apa yang sebenarnya terjadi di sini? Lengan pertama melakukan rutinitas homing pada motor X dan Y. Karena cara tautan bekerja, ini dilakukan dalam beberapa langkah. (Anda dapat melihat video di akhir untuk melihat ini dalam tindakan)
Pertama, motor X dan Y digerakkan ke arah berlawanan sehingga saklar batas Y ditekan terlebih dahulu.
Segera setelah saklar batas Y ditekan, kedua motor berputar ke arah yang sama sehingga saklar batas X ditekan.
Setelah saklar X ditekan, motor digerakkan sedikit sehingga saklar-saklar ditekan (ditekan dalam arti, tidak sedih.)
Terakhir motor Z diputar sehingga saklar batas Z ditekan.
Anda harus sangat hati-hati saat melakukan prosedur homing untuk pertama kalinya. Jika stepper Anda bergerak ke arah yang lain, cukup MATIKAN DAYA, DAN LALU balik konektor motor.
Sekarang setelah selesai, panggil autohome() dari fungsi setup() Anda sehingga hanya berjalan sekali. Biarkan loop() Anda kosong. Dan pegang tangan Anda pada sumber daya untuk mematikannya jika ada yang salah.
void setup() { // put your setup code here, to run once: Serial.begin(9600); pinsetup(); autohome(); Serial.println("HOMING OK"); }
Jika Anda beruntung, motor Anda akan berputar dengan benar, saklar batas akan klik dengan benar dan rutinitas homing akan bekerja tanpa masalah. Tetapi jika Anda seperti saya, Anda harus melakukan sedikit perubahan sebelum semuanya berjalan. Jadi selalu putuskan daya jika homing salah sehingga Anda tidak merusak lengan cetak 3D Anda.
Akhirnya, Anda dapat menulis logika Anda sendiri di loop() sehingga lengan Anda bergerak ke posisi yang Anda inginkan. Karena cara lengan terhubung, motor X dan Y mengontrol end effector dengan cara hampir kartesian.
Saya telah melihat banyak tutorial tentang cara menggunakan firmware GRBL populer untuk mengontrol lengan ini. Namun, ini berarti Anda membutuhkan komputer untuk mengirim perintah serial ke lengan agar bergerak. Jika Anda hanya membutuhkan lengan MK2 untuk beberapa gerakan, Anda dapat dengan mudah mengkodekannya ke dalam Arduino dan biarkan melakukannya sendiri.
Itu tidak berarti Anda tidak dapat mengontrol ini dengan perintah serial! Anda dapat dengan mudah menyertakan kode delimiter Serial ke dalam ini dan mengirim langkah motor X Y dan Z sebagai string (dibatasi dengan karakter khusus - mis. 5, 6, 7* yang akan menggerakkan motor X sebanyak 5 langkah, Y sebanyak 6 dan Z sebanyak 7. * digunakan untuk menunjukkan akhir string).
Anda juga dapat mengembangkan ini lebih lanjut untuk mengirim koordinat ruang 3D dari end effector, dan biarkan Arduino mencari tahu langkah yang diperlukan menggunakan kinematika invers, atau bahkan trigonometri dasar.
Selamat bersenang-senang! Dan terima kasih tulus kepada semua desainer cerdas di Thingiverse!
Kode
robotArm
robotArmArduino
Ekstrak file dan buka dengan Arduino IDE
Tidak ada pratinjau (hanya unduhan).
MK2 Robot Arm Controller - Github
Link ke repositori github https://github.com/yasaspeiris/MK2-Robot-Arm-Controller
Bagian dan Enclosure Kustom
Robot Arm MK2 Plus di Thingiverse
Kredit kepada ackyltle File CAD di thingiverse.com