Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

MK2 Plus Robot Arm Controller

Komponen dan persediaan

CNC Shield
× 1
OpenBuilds NEMA 17 Motor Stepper
Saya menggunakan Nema 17 Steppers generik.
× 3
Arduino UNO
× 1
Papan driver motor SparkFun Stepper A4988
× 3
Sakelar Batas Mikro OpenBuilds
× 3

Alat dan mesin yang diperlukan

Printer 3D (generik)

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Lengan EEZYBOT MK2

Jika Anda telah mencari di sekitar thingiverse.com untuk lengan robot yang keren, kemungkinan Anda telah menemukan ini. Lengan EEZYBOT MK2 (dirancang oleh daghizmo yang brilian) berbagi hubungan kinematik dari ABB IRB460 yang diperkecil dengan rasio 1:7. Namun, lengan ini dirancang untuk bekerja dengan servos, yang membuatnya sedikit goyah dan kurang anggun. Namun, ada solusi yang lebih baik di luar sana. Lengan MK2 Plus dapat 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 membutuhkan waktu, jadi tandai artikel ini, cetak semuanya, dan kembalilah setelah Anda selesai! (Ini akan memakan waktu beberapa hari)

Jika Anda kesulitan memasang lengan, ada banyak tutorial online.

Memilih Posisi Rumah

Tidak seperti servo, motor stepper tidak memiliki kesadaran posisi. Kita harus memperbaiki ini dengan terlebih dahulu mengatur rutinitas homing saat lengan dinyalakan. Kami akan menggunakan 3 sakelar batas untuk mengatur posisi rumah kami. Tautan bekerja dengan cara yang agak rumit, tetapi Anda akan dengan mudah memahami di mana memposisikan sakelar setelah Anda memasang lengan dan melihat bagaimana semuanya bergerak.

(yaitu tidak ada XY seperti sistem Cartesian tetapi kami akan tetap menyebutnya demikian untuk mempermudah segalanya)

Anda dapat mengatur sakelar batas Z di mana saja di dasar utama lengan. Tambahkan sedikit lem panas agar kabel tidak terlepas saat lengan bergerak.

Pengkabelan

Pengkabelan cukup mudah, karena semua terminal ditandai pada pelindung CNC. Hanya saja, jangan mencolokkan driver A4988 Anda dengan cara yang salah! Motor stepper di samping dengan sakelar batas Y harus dicolokkan ke terminal untuk motor stepper Y di pelindung CNC Anda. Hal yang sama berlaku untuk motor di samping sakelar batas X. (Kami menyebutnya X dan Y karena lebih mudah menangani pelindung CNC dengan cara ini) Hubungkan stepper terakhir yang memutar pangkal lengan ke terminal Z, dan sambungkan ujungnya sesuai dengan namanya. Polaritas tidak masalah.

Temukan catu daya 12V yang layak yang dapat memberikan arus agar motor berjalan tanpa mati.

Kode

Mari kita turun ke bisnis. Kami akan menggunakan perpustakaan AccelStepper untuk Arduino untuk menggerakkan stepper dengan lancar. Pustaka ini memungkinkan Anda mempercepat, memperlambat, dan menjalankan beberapa motor stepper secara bersamaan. Anda bisa mendapatkan library ini langsung melalui Arduino IDE dengan menggunakan Library Manager (Sketch> Include Library> Library Manager)

Anda juga bisa mendapatkannya dari halaman pembuat asli di airspayce. https://www.airspayce.com/mikem/arduino/AccelStepper/

Sekarang setelah kita memiliki semua yang kita butuhkan, mari kita bahas kode langkah demi langkah.

Pertama kita akan mendefinisikan beberapa nama untuk pin yang akan kita gunakan. Anda dapat menemukan diagram pin pelindung CNC dengan pencarian gambar google cepat. Kami juga akan membuat objek AccelStepper untuk 3 motor stepper kami.

#define XSTEP 2 //Stepper Motor Step pin
#define YSTEP 3
#define ZSTEP 4
#define XDIR 5 // Motor stepper Pin kendali arah
#define YDIR 6
#define ZDIR 7
#define ENABLE 8 // CNC Shield Aktifkan Pin
#define XLIMIT 9 // Batasi pin sakelar
#define YLIMIT 10
#define ZLIMIT 11
#define XMOTORACC 250 // Nilai Akselerasi dan Kecepatan Maksimal
#define XMOTORMAXSPEED 1000
#define YMOTORACC 250
#define YMOTORMAXSPEED 1000
# termasuk
AccelStepper XMOTOR(1,XSTEP,XDIR);
AccelStepper YMOTOR(1,YSTEP,YDIR);
AccelStepper ZMOTOR(1,ZSTEP,ZDIR);

Mari kita buat sedikit fungsi pembantu untuk mengatur pin kita.

void pinsetup(){
pinMode(ENABLE,OUTPUT);
digitalWrite(ENABLE,LOW);
pinMode(XLIMIT,INPUT_PULLUP);
pinMode( YLIMIT,INPUT_PULLUP);
pinMode(ZLIMIT,INPUT_PULLUP);
}

Sekarang setelah selesai, mari kita bahas logika dari rutinitas pulang kita.

void autohome(){ //Kami menggunakan ini untuk memanggil rutin homing kami 
xyhome();
zhome();
}
void xyhome () {
int initial_xhome =-1;
int initial_yhome =-1;
// Atur Kecepatan Maks dan Akselerasi setiap Stepper saat startup untuk homing
XMOTOR.setMaxSpeed(500.0 ); // Atur Kecepatan Maksimal Stepper (Lebih lambat untuk mendapatkan akurasi yang lebih baik)
XMOTOR.setAcceleration(50,0); // Atur Percepatan Stepper
YMOTOR.setMaxSpeed(500.0); // Atur Kecepatan Maksimal Stepper (Lebih lambat untuk mendapatkan akurasi yang lebih baik)
YMOTOR.setAcceleration(50.0); // Atur Percepatan Stepper
// Mulai prosedur Homing Motor Stepper saat startup
while (digitalRead(YLIMIT)) { // Buat Stepper bergerak CCW sampai saklar diaktifkan
XMOTOR. moveTo(initial_xhome); // Atur posisi untuk pindah ke
YMOTOR.moveTo(initial_yhome); // Atur posisi untuk pindah ke
initial_xhome--; // Kurangi 1 untuk langkah selanjutnya jika diperlukan
initial_yhome--;
XMOTOR.run(); // Mulai gerakkan stepper
YMOTOR.run();
delay(5);
}
XMOTOR.setCurrentPosition(0); // Tetapkan posisi saat ini sebagai nol untuk saat ini
YMOTOR.setCurrentPosition(0);
initial_xhome =-1;
initial_yhome =1;
while(digitalRead(XLIMIT)){
XMOTOR.moveTo(initial_xhome); // Atur posisi untuk pindah ke
YMOTOR.moveTo(initial_yhome); // Atur posisi untuk pindah ke
initial_xhome--; // Kurangi 1 untuk langkah selanjutnya jika diperlukan
initial_yhome++;
XMOTOR.run(); // Mulai gerakkan stepper
YMOTOR.run();
delay(5);
}
YMOTOR.setCurrentPosition(0); // Tetapkan posisi saat ini sebagai nol untuk saat ini
YMOTOR.setMaxSpeed(250.0); // Atur Kecepatan Maksimal Stepper (Lebih lambat untuk mendapatkan akurasi yang lebih baik)
YMOTOR.setAcceleration(10.0); // Atur Percepatan Stepper
initial_yhome =1;
while (!digitalRead(YLIMIT)) { // Buat Stepper bergerak CW hingga sakelar dinonaktifkan
YMOTOR.moveTo(initial_yhome);
YMOTOR.run();
initial_yhome++;
delay(5);
}
YMOTOR.setCurrentPosition(0);
YMOTOR.setMaxSpeed(YMOTORMAXSPEED ); // Atur Kecepatan Maksimal Stepper (Lebih cepat untuk gerakan reguler)
YMOTOR.setAcceleration(YMOTORACC); // Atur Percepatan Stepper
XMOTOR.setCurrentPosition(0); // Tetapkan posisi saat ini sebagai nol untuk saat ini
XMOTOR.setMaxSpeed(250.0); // Atur Kecepatan Maksimal Stepper (Lebih lambat untuk mendapatkan akurasi yang lebih baik)
XMOTOR.setAcceleration(10.0); // Atur Akselerasi Stepper
initial_xhome =1;
while (!digitalRead(XLIMIT)) { // Buat Stepper bergerak CW hingga sakelar dinonaktifkan
XMOTOR.moveTo(initial_xhome);
XMOTOR.run();
initial_xhome++;
delay(5);
}
XMOTOR.setCurrentPosition(0);
XMOTOR.setMaxSpeed(XMOTORMAXSPEED ); // Atur Kecepatan Maksimal Stepper (Lebih cepat untuk gerakan reguler)
XMOTOR.setAcceleration(XMOTORACC); // Atur Akselerasi Stepper
}
void zhome() {
int initial_zhome =-1;
// Atur Max Speed ​​dan Acceleration setiap Stepper saat startup untuk homing
ZMOTOR.setMaxSpeed(100.0); // Atur Kecepatan Maksimum Stepper (Lebih lambat untuk mendapatkan akurasi yang lebih baik)
ZMOTOR.setAcceleration(100.0); // Atur Percepatan Stepper
// Mulai prosedur Homing Motor Stepper saat startup
while (digitalRead(ZLIMIT)) { // Buat Stepper bergerak CCW sampai switch diaktifkan
ZMOTOR. pindahKe(initial_zhome); // Atur posisi untuk pindah ke
initial_zhome--; // Kurangi 1 untuk langkah selanjutnya jika diperlukan
ZMOTOR.run(); // Mulai gerakkan stepper
delay(5);
}
ZMOTOR.setCurrentPosition(0); // Tetapkan posisi saat ini sebagai nol untuk saat ini
ZMOTOR.setMaxSpeed(50,0); // Atur Kecepatan Maksimum Stepper (Lebih lambat untuk mendapatkan akurasi yang lebih baik)
ZMOTOR.setAcceleration(50,0); // Atur Percepatan Stepper
initial_zhome =1;
while (!digitalRead(ZLIMIT)) { // Buat Stepper bergerak CW hingga sakelar dinonaktifkan
ZMOTOR.moveTo(initial_zhome);
ZMOTOR.run();
initial_zhome++;
delay(5);
}
ZMOTOR.setCurrentPosition(0);
ZMOTOR.setMaxSpeed(1000.0 ); // Atur Kecepatan Maksimal Stepper (Lebih cepat untuk gerakan reguler)
ZMOTOR.setAcceleration(1000.0); // Atur Percepatan Stepper
}

Oke, jadi itu banyak kode. Apa yang sebenarnya terjadi di sini? Lengan pertama melakukan rutinitas homing pada motor X dan Y. Karena cara kerja tautan, ini dilakukan dalam beberapa langkah. (Anda dapat melihat video di akhir untuk melihat ini beraksi)

  • Pertama, motor X dan Y digerakkan berlawanan arah sehingga saklar batas Y ditekan terlebih dahulu.
  • Begitu sakelar batas Y ditekan, kedua motor berputar ke arah yang sama sehingga sakelar batas X ditekan.
  • Setelah saklar X ditekan, motor digerakan sedikit sehingga saklar tertekan ( tertekan seperti di, bukan yang sedih agak tertekan.)
  • Akhirnya motor Z diputar sehingga saklar batas Z ditekan.

Anda harus benar-benar berhati-hati saat melakukan prosedur homing untuk pertama kalinya. Jika stepper Anda bergerak ke arah lain, cukup MATIKAN DAYA, lalu balik konektor motor.

Setelah selesai, panggil autohome() dari fungsi setup() Anda sehingga hanya berjalan sekali. Biarkan loop() Anda kosong. Dan awasi catu daya Anda untuk mematikannya jika terjadi kesalahan.

void setup() {
// letakkan kode setup Anda di sini, untuk dijalankan sekali:
Serial.begin(9600);
pinsetup();
autohome();
Serial.println("HOMING OK");
}

Jika Anda beruntung motor Anda akan berbelok ke arah yang benar, sakelar batas akan mengklik kanan dan rutinitas homing akan bekerja tanpa masalah. Tetapi jika Anda seperti saya, Anda harus melakukan sedikit perubahan sebelum semuanya berjalan dan berjalan. Jadi, selalu putuskan sambungan daya jika homing salah sehingga Anda tidak mengacaukan lengan cetak 3D Anda.

Terakhir, Anda dapat menulis logika Anda sendiri di loop() sehingga lengan Anda bergerak ke posisi yang Anda inginkan. Karena cara lengan dihubungkan, motor X dan Y mengontrol efektor akhir dengan cara yang hampir kartesius.

void loop() {
XMOTOR.runToNewPosition(100);
delay(1000);
YMOTOR.runToNewPosition(50);
delay(1000);
YMOTOR.runToNewPosition(-50);
delay(1000);
YMOTOR.runToNewPosition(0);
delay(1000);
XMOTOR.runToNewPosition( 0);
delay(1000);
}

Kesimpulan

Saya telah melihat banyak tutorial tentang cara menggunakan firmware GRBL yang populer untuk mengontrol lengan ini. Namun, ini berarti Anda memerlukan komputer untuk mengirim perintah serial ke lengan untuk membuatnya bergerak. Jika Anda hanya memerlukan lengan MK2 untuk melakukan beberapa gerakan, Anda dapat dengan mudah meng-hardcodenya ke Arduino dan membiarkannya melakukan tugasnya sendiri.

Itu tidak berarti bahwa Anda tidak dapat mengontrol ini dengan perintah serial! Anda cukup memasukkan kode pembatas Serial ke dalam kode ini dan mengirimkan langkah motor XY dan Z sebagai string (dibatasi dengan karakter khusus - misalnya 5, 6, 7* yang akan menggerakkan motor X sebanyak 5 langkah, Y sebanyak 6 dan Z dengan 7. Tanda * digunakan untuk menunjukkan akhir string).

Anda juga dapat mengembangkan ini lebih lanjut untuk mengirim koordinat ruang 3D dari efektor akhir, dan meminta arduino mengetahui langkah-langkah yang diperlukan menggunakan kinematika terbalik, atau bahkan trigonometri dasar.

Selamat bersenang-senang! Dan terima kasih yang tulus untuk semua desainer brilian di Thingiverse!

Kode

  • robotArm
robotArmArduino
Ekstrak file dan buka dengan Arduino IDE
Tanpa pratinjau (hanya unduh).
MK2 Robot Arm Controller - Github
Tautan ke repositori githubhttps://github.com/yasaspeiris/MK2-Robot-Arm-Controller

Suku cadang dan penutup khusus

Lengan Robot MK2 Plus di Thingiverse
Kredit untuk ackyltle file CAD di thingiverse.com

Proses manufaktur

  1. Pengontrol motor mengintegrasikan inti Arm Cortex-M0
  2. Robot SCARA Lengan Ganda
  3. MeArm Robot Arm - Robot Anda - V1.0
  4. Robot Arm Dikendalikan Melalui Ethernet
  5. Littlearm 2C:Membangun Lengan Robot Arduino Cetak 3D
  6. Lengan Robot Arduino DIY – Dikendalikan oleh Gerakan Tangan
  7. Kontrol Lengan Robot Arduino dengan Aplikasi Android
  8. Robotika Realtime memperkenalkan komputer pengontrol robot baru
  9. Pusat Putar Dilengkapi Lengan Robot
  10. Robot Menggabungkan Lengan Robot Kolaboratif dengan Platform Seluler