Kit Lengan Robot 6-DoF Berbasis Arduino dengan Pengendali Nunchuk
Komponen dan Perlengkapan
| Lengan Robot 6 DoF | 1 |
| Nunchuk | 1 |
| Arduino Mega 2560 | 1 |
| Control shield | 1 |
Aplikasi dan Layanan Online
Arduino IDE
Tentang Proyek Ini
Lengan robot adalah hal yang luar biasa! Pabrik di seluruh dunia memilikinya, di mana mereka melukis, menyolder, dan mengangkut barang dengan presisi. Mereka juga dapat ditemukan di eksplorasi angkasa, kendaraan terpantau jauh bawah laut, dan bahkan dalam aplikasi medis!
Dan sekarang Anda dapat memiliki versi yang lebih murah dari mereka di rumah, kantor, atau lab Anda! Bosan melakukan pekerjaan yang berulang? Program robot Anda sendiri untuk membantu Anda... atau untuk mengacaukan hal-hal! :D
Dalam tutorial ini saya menunjukkan kepada Anda cara memasang lengan robot, dan cara memrogramnya menggunakan Arduino Mega. Untuk proyek ini saya juga ingin mencoba metode yang berbeda untuk mengontrol lengan robot: menggunakan Nintendo Nunchuk! Mereka murah, mudah ditemukan, dan memiliki banyak sensor.
Ada beberapa cara Anda dapat menggunakan tutorial ini. Jika Anda tidak memiliki kit lengan robot (dan tidak ingin membeli atau membangun satu) Anda masih dapat menggunakannya untuk mempelajari sesuatu tentang pemrograman Arduino, dan cara menghubungkan Wii Nunchuk ke proyek Anda sendiri. Anda juga dapat menggunakannya untuk melatih keterampilan elektronik dan mekanika Anda.
Langkah 1: Alat dan Bahan
Alat dan bahan yang digunakan dalam proyek ini:
- Paku solder dan kabel. Saya harus solder beberapa terminal ke kabel Nunchuk untuk menghubungkannya ke Arduino;
- Taburan menyusut. Beberapa potong taburan menyusut digunakan untuk isolasi yang lebih baik dari konduktor;
- Obeng. Struktur dipasang menggunakan beberapa bout dan kacang;
- Lengan robot desktop mekanis 6-sumbu (link). Kit yang luar biasa ini sudah dilengkapi dengan beberapa komponen seperti yang dijelaskan di bawah. Ini andal dan mudah dirakit;
- Sumber daya 12V (2A atau lebih);
- Pengendali Nunchuk (link). Ini berinterface dengan papan Arduino, dan digunakan untuk mengontrol lengan robot;
- Kabel jumper macho-macho (4 kabel);
- Arduino Mega (link / link / link). Perhatikan bahwa kit lengan robot yang saya gunakan juga memiliki bundel papan dan pengendali yang sudah dilengkapi dengan papan Arduino ini. Jika Anda tidak menggunakan salah satu kit ini, Anda mungkin menggunakan papan Arduino lainnya juga;
Saya diberitahu nanti bahwa ada adapter Nunchuk yang membuat koneksi ke breadboard lebih mudah (link / link). Ini opsi yang baik jika Anda ingin menghemat waktu pada soldering dan tidak ingin merusak konektor asli seperti yang dijelaskan pada Langkah 9.
Sain Smart lengan robot desktop mekanis 6-sumbu sudah dilengkapi dengan komponen berikut:
- Arduino Mega 2560 R3 (link)
- Papan kontrol shield (link)
- Modul Transceiver Nirkabel NRF24L01+ (link)
- MPU6050 giroskop 3-sumbu dan akselerometer 3-sumbu (link)
Anda mungkin menemukan kit lengan robot lainnya online, atau bahkan merancang sendiri. Ada beberapa proyek yang luar biasa yang dapat Anda cetak 3D, misalnya.
Dalam 7 langkah berikut saya akan menunjukkan kepada Anda cara merakit kit lengan sebelum merangkai rangkaian. Jika Anda tidak memiliki kit yang sama, silakan lompat beberapa langkah. Anda dapat menggunakan kit lengan robot lainnya, merakitnya dan lompat langsung ke langkah elektronik dan pemrograman.
Pada setiap langkah, ada gif animasi, yang menunjukkan bagaimana lengan robot saya dirakit. Ini hanya berjalan pada versi desktop situs web.
Langkah 2: Merakit Lengan Robot Bagian 1 - Dasar
Bagian pertama yang akan dirakit adalah dasar robot.
Ini terbuat dari dua bracket bentuk U, disatukan satu sama lain menggunakan empat baut dan kacang M3, seperti yang ditunjukkan dalam gambar. Ini mungkin bagian paling mudah untuk dipasang.
Langkah 3: Merakit Lengan Robot Bagian 2 - Servo #1
Servomotor pertama dipasang tegak lurus terhadap dasar, menggunakan bracket servo. Profil ini dilekatkan ke dasar menggunakan empat baut dan kacang M3, seperti yang ditunjukkan dalam gambar. Servo #1 ditempatkan di atasnya, dan dilekatkan menggunakan empat baut dan kacang M3.
Horn logam bulat dilekatkan ke poros servo. Kit dilengkapi dengan beberapa horn plastik. Mereka tidak akan digunakan untuk merakit robot.
Langkah 4: Merakit Lengan Robot Bagian 3 - Servo #2
Bracket servo lain dipasang tegak lurus terhadap yang sebelumnya. Ini terhubung ke horn servo #1 menggunakan empat baut M3. Servo #2 dipasang dengan empat baut dan kacang M3, dan juga menggunakan horn logam bulat.
Bracket U kemudian dilekatkan ke horn menggunakan empat baut. Perhatikan bahwa baut M3 digunakan di sisi yang berlawanan dengan poros servo. Ini memberikan stabilitas pada struktur. Bearing pas pada baut ini, dan dikunci dalam posisi menggunakan kacang M3 lainnya. Dengan cara ini bracket U erat terpasang pada poros pusat servo #2.
Langkah 5: Merakit Lengan Robot Bagian 4 - Servo #3
Bracket U lain dipasang menggunakan empat baut dan kacang M3.
Di ujung lainnya, servo #3 dipasang, menggunakan horn logam bulat dan empat baut. Bracket servo terhubung ke motor servo, dan profil bentuk L terhubung ke bracket servo menggunakan beberapa baut dan kacang.
Perhatikan bahwa bearing lain digunakan di sisi yang berlawanan dengan poros servo, seperti yang dijelaskan sebelumnya.
Langkah 6: Merakit Lengan Robot Bagian 4 - Servo #4
Bracket U lain terhubung ke profil bentuk L menggunakan sekumpulan empat baut dan kacang M3. Mirip dengan langkah sebelumnya, servo #4 dipasang ke bracket U menggunakan empat baut. Bracket servo lain terhubung ke servo.
Langkah 7: Merakit Lengan Robot Bagian 4 - Servo #5
Servo kelima terhubung tegak lurus terhadap servo #4 menggunakan bracket servo lain, dipasang menggunakan empat baut dan kacang M3.
Langkah 8: Merakit Lengan Robot Bagian 4 - Servo #6
Gripper kemudian terhubung ke poros servo #5. Di atasnya, servo #6 terhubung menggunakan beberapa baut, kacang dan horn logam. Gripper memiliki beberapa roda gigi, yang akan mengubah rotasi servo menjadi gerak linear dari gripper.
Langkah 9: Menyiapkan Pengendali Nunchuk
Untuk proyek ini saya memutuskan untuk menggunakan pengendali Nintendo Nunchuk untuk sejumlah alasan:
- Mereka murah! Replika mungkin memiliki kualitas yang inferior, tetapi saya tidak membutuhkan pengendali yang kuat untuk proyek ini;
- Mereka mudah ditemukan! Ada beberapa asli dan replika yang terjangkau online.
- Ini memiliki banyak sensor! Setiap pengendali memiliki dua tombol (tombol Z dan C), joystick dua sumbu (X dan Y) dan akselerometer tiga sumbu;
- Ini memiliki perpustakaan Arduino. Robert Eisele merancang perpustakaan yang luar biasa dan mudah digunakan untuk membaca sensor Nunchuk. Lihat di sini: https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/
Sayangnya joystick Nunchuk memiliki konektor yang rumit, sulit dihubungkan dengan elektronik lainnya. Untuk menghubungkannya ke Arduino, saya harus memotong kabelnya dan membuka kabelnya. Dengan cara ini, ia tidak akan bekerja dengan Nintendo Wii lagi... :/
Pertama saya harus memotong konektor joystick dan menghapus isolasi kabel. Menggunakan multimeter, dan berdasarkan warna setiap kabel, saya menentukan fungsi setiap kabel (Vcc, GND, SCL dan SDA) berdasarkan skema konektor yang ditunjukkan dalam gambar. Warna kabel tidak memiliki standar. Saya telah mendengar kemungkinan berikut:
Asli:
Replika #1:
Replika #2:
Saya solder kabel ke kabel jumper macho, untuk koneksi yang lebih mudah ke papan Arduino. Untuk itu, saya menggunakan soldering iron, dan beberapa taburan menyusut, seperti yang ditunjukkan dalam gambar.
Saya diberitahu nanti bahwa ada adapter Nunchuk yang membuat koneksi ke breadboard lebih mudah (link / link). Ini opsi yang baik jika Anda ingin menghemat waktu pada soldering dan tidak ingin merusak konektor asli.
Langkah 10: Merangkai Rangkaian
Setelah struktur dirakit dan konektor Nunchuk selesai, Anda akan siap untuk merangkai rangkaian. Saya menggunakan papan kontrol shield yang datang bersama dengan kit lengan robot saya. Ini membuat koneksi komponen lebih mudah, karena sudah dilengkapi dengan konektor khusus untuk servomotor, sumber daya, dll.
Sambungkan komponen sebagai berikut:
Nunchuk:
- Pin Nunchuk 6 (SCL) => Pin Arduino Mega 21 (SCL) (pada shield)
- Pin Nunchuk 1 (SDA) => Pin Arduino Mega 20 (SDA) (pada shield)
- Pin Nunchuk 3 (Vcc) => Pin Arduino Mega 3V3 (pada shield)
- Pin Nunchuk 4 (Gnd) => Pin Arduino Mega Gnd (pada shield)
Jika Anda menggunakan Arduino Uno, pin SCL dan SDA Nunchuk harus dihubungkan ke pin Arduino yang berbeda, sebagai berikut:
- Pin Nunchuk 6 (SCL) => Pin Arduino Uno A5
- Pin Nunchuk 1 (SDA) => Pin Arduino Uno A4
- Pin Nunchuk 3 (Vcc) => Pin Arduino Uno 3V3
- Pin Nunchuk 4 (Gnd) => Pin Arduino Uno Gnd
Servo:
- Terminal shield kontrol 11 => Servo #1
- Terminal shield kontrol 12 => Servo #2
- Terminal shield kontrol 13 => Servo #3
- Terminal shield kontrol 8 => Servo #4
- Terminal shield kontrol 9 => Servo #5
- Terminal shield kontrol 10 => Servo #6
Jika Anda tidak menggunakan shield kontrol, Anda harus menggunakan konfigurasi pin berikut:
- Pin Arduino 11 => Servo #1 (Sgn)
- Pin Arduino 12 => Servo #2 (Sgn)
- Pin Arduino 13 => Servo #3 (Sgn)
- Pin Arduino 8 => Servo #4 (Sgn)
- Pin Arduino 9 => Servo #5 (Sgn)
- Pin Arduino 10 => Servo #6 (Sgn)
- Sumber daya eksternal 12V => Servo Vcc
Anda juga perlu menghubungkan sumber daya eksternal 12V. Saya menyarankan yang memiliki keluaran lebih dari 2A. Servo menghabiskan banyak daya, dan jika sumber daya tidak cukup kuat, servo akan bergetar dan menjadi sangat panas. Mereka juga akan kehilangan kekuatannya.
Jangan menyambungkan sumber daya sampai Anda mengunggah kode Arduino (ditunjukkan dalam langkah berikutnya). Ada tombol daya pada shield. Biarkan dalam posisi mati.
Colokkan kabel USB ke Arduino dan lanjutkan ke langkah berikutnya.
Langkah 11: Setup Arduino IDE
Sekarang hardware siap, saatnya bekerja pada kode Arduino.
1. Unduh dan instal Arduino IDE versi terbaru Anda dapat menemukan versi terbaru untuk Windows, Linux atau MAC OSX di situs web Arduino: https://www.arduino.cc/en/main/software
Unduh secara gratis, instal di komputer Anda dan jalankan.
2. Menambahkan perpustakaan
Untuk proyek ini saya menggunakan perpustakaan Nunchuk Arduino yang luar biasa milik Robert Eisele! Anda dapat menemukan lebih banyak tentangnya di situs webnya:
https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/
Unduh perpustakaan di https://github.com/infusion/Fritzing/tree/master/Wii-Nunchuk
Navigasi ke Sketch-> Include Library -> Manage Libraries... pada Arduino IDE Anda untuk menambahkan perpustakaan.
Bagaimana cara kerja perpustakaan?
Perpustakaan Nunchuk datang dengan serangkaian fungsi untuk membaca sensor pengendali:
nunchuk_buttonZ(): mengembalikan 1 jika tombol Z ditekan, atau 0 jika tidak; nunchuk_buttonC(): mengembalikan 1 jika tombol C ditekan, atau 0 jika tidak; nunchuk_joystickX(): mengembalikan nilai joystick x (antara -127 dan 127); nunchuk_joystickY(): mengembalikan nilai joystick y (antara -127 dan 127); nunchuk_pitch(): mengembalikan sudut pengendali dalam radian (antara -180º dan 180º); nunchuk_roll(): mengembalikan sudut roll pengendali dalam radian (antara -180º dan 180º).
Sudut dikembalikan dalam radian. Saya mengubah nilai-nilai ini menjadi derajat dalam kode Arduino saya.
Langkah 12: Kode Arduino
Unduh file sketsa Arduino.
Colokkan kabel USB ke port USB komputer Anda dan unggah kode. Pengunggahan kode memerlukan waktu. Anda dapat menggunakan waktu itu untuk memberi 'like' dan 'share' tutorial ini sambil menunggu! :D
Setelah pengunggahan selesai, cabut kabel USB, sambungkan sumber daya dan nyalakan tombol daya. Kode akan berjalan segera.
Peringatan: saat kode mulai berjalan, lengan robot akan bergerak sangat cepat ke posisi awalnya. Hati-hati untuk tidak terluka atau merusak peralatan di sekitarnya selama startup!
Anda mungkin harus mengganti sudut awal setiap servomotor tergantung pada bagaimana servo Anda dipasang.
Penjelasan kode:
Sebelum setup, kode mengimpor perpustakaan yang digunakan pada sketsa (nunchuk.h, wire.h dan servo.h).
Pin yang akan digunakan didefinisikan, dan variabel global dideklarasikan. Variabel integer angle# menyimpan posisi awal untuk setiap servo. Jika Anda ingin robot Anda memulai di posisi berbeda, ubah nilai pada variabel-variabel tersebut.
Variabel servo#_speed mendefinisikan kecepatan gerakan setiap servo. Jika Anda ingin servo tertentu bergerak lebih cepat, tingkatkan nilainya. Variabel angle#min dan angle#max digunakan untuk membatasi sudut maksimum dan minimum untuk setiap servo. Anda dapat mengatur variabel-variabel ini untuk menghindari tabrakan antara sendi berurutan robot.
//Include libraries #include <nunchuk.h> #include <wire.h> #include <servo.h> //define variables #define SERV1 8 //servo 1 on digital port 8 #define SERV2 9 //servo 2 on digital port 9 #define SERV3 10 //servo 3 on digital port 10 #define SERV4 11 //servo 4 on digital port 11 #define SERV5 12 //servo 5 on digital port 12 #define SERV6 13 //servo 6 on digital port 13 Servo s1; //servo 1 Servo s2; //servo 2 Servo s3; //servo 3 Servo s4; //servo 4 Servo s5; //servo 5 Servo s6; //servo 6 //define starting angle for each servo //choose a safe position to start from //it will try to move instantaniously to that position when powered up! //those angles will depend on the angle of each servo during the assemble int angle1 = 90; //servo 1 current angle int angle2 = 30; //servo 2 current angle int angle3 = 0; //servo 3 current angle int angle4 = 90; //servo 4 current angle int angle5 = 90; //servo 5 current angle int angle6 = 45; //servo 6 current angle int servo1_speed = 3; //servo 1 speed int servo2_speed = 3; //servo 2 speed int servo3_speed = 3; //servo 3 speed int servo4_speed = 1; //servo 4 speed int servo5_speed = 1; //servo 5 speed //define restrictions for each servo //those angles will depend on the angle of each servo during the assemble int angle1min = 0; //servo 1 minimum angle int angle1max = 180; //servo 1 maximum angle int angle2min = 0; //servo 2 minimum angle int angle2max = 180; //servo 2 maximum angle int angle3min = 0; //servo 3 minimum angle int angle3max = 180; //servo 3 maximum angle int angle4min = 0; //servo 4 minimum angle int angle4max = 180; //servo 4 maximum angle int angle5min = 0; //servo 5 minimum angle int angle5max = 180; //servo 5 maximum angle int angle6min = 0; //servo 6 minimum angle int angle6max = 180; //servo 6 maximum angle boolean display_angles = true; //boolean used to update the angle of each servo on Serial Monitor
Selama setup, setiap servo dilekatkan ke pin tertentu, dan posisinya dimulai.
Komunikasi serial (ke Serial monitor) dan komunikasi I2C dengan Nunchuk juga dimulai di sini.
//SETUP void setup() { //attach each servo to a pin and start its position s1.attach(SERV1); s1.write(angle1); s2.attach(SERV2); s2.write(angle2); s3.attach(SERV3); s3.write(angle3); s4.attach(SERV4); s4.write(angle4); s5.attach(SERV5); s5.write(angle5); s6.attach(SERV6); s6.write(angle6); //start serial communication Serial.begin(9600); //start Nunchuk Wire.begin(); nunchuk_init(); }
Loop utama diulang berulang kali. Status Nunchuk dibaca pada setiap siklus. Bergantung pada pembacaan, perintah yang berbeda dilakukan.
void loop() { //read Nunchuk sensors if (nunchuk_read()) { int x = nunchuk_joystickX(); //joystick X position int y = nunchuk_joystickY(); //joystick Y position boolean z = nunchuk_buttonZ(); //z button status boolean c = nunchuk_buttonC(); //c button status float pitch = nunchuk_pitch(); //pitch angle float roll = nunchuk_roll(); //roll angle
Joystick X akan digunakan untuk menggerakkan servo #1.
Blok kode berikut digunakan. Pertama ia memeriksa apakah nilai joystick cukup besar. Dengan cara ini, kebisingan dan variasi kecil diabaikan. Jika nilai memenuhi persyaratan, sudut servo akan ditambah/dikurangi pada kecepatan tertentu.
//Turn left/right (at a fixed speed) //Turn left if (x > 90) { angle1 -= servo1_speed; display_angles = true; if (angle1 < angle1min) { angle1 = angle1min; } } //Turn right if (x < -90) { angle1 += servo1_speed; display_angles = true; if (angle1 > angle1max) { angle1 = angle1max; } } s1.write(angle1); //update servo position
Blok yang serupa digunakan untuk joystick y. Digunakan untuk mengubah sudut servo #3. Servo #2 tetap diam dalam kode ini.
Rotasi gripper ditentukan oleh sudut roll dan pitch pengendali, yang diukur oleh akselerometernya. Untuk membuat kontrol lengan lebih mudah, sudut gripper hanya diperbarui ketika tombol C atau Z ditekan.
Ketika hanya tombol C yang ditekan, kode membaca sudut roll dan menggunakannya sebagai titik set. Servo #5 diputar sampai mencapai titik set. Kecepatannya proporsional terhadap kesalahan antara posisi aktual dan yang diinginkan. Kode yang serupa digunakan untuk servo #4, yang melacak sudut pitch Nunchuk.
// Enable accelerometer only when the buttons are pressed // Rotate gripper (only Z button pressed) if (c && !z) { roll = roll * 57.0 + 90.0; //convert do degrees servo5_speed = abs(angle5 - roll)/10 + 1; //speed proportional do the error between actual and desired angle if (roll > angle5) { angle5 += servo5_speed; display_angles = true; } if (roll < angle5) { angle5 -=servo5_speed; display_angles = true; } s5.write(angle5); //update servo position }
Gripper ditutup setiap kali kedua tombol C dan Z ditekan. Ketika salah satu tombol tersebut dilepas, robot akan membuka gripper-nya.
//Open/close gripper (both buttons pressed) if(z && c) { s6.write(90); //close gripper display_angles = true; } else { s6.write(45); //open gripper }
Ada blok kode di akhir sketsa. Ini akan menampilkan pada Serial Monitor sudut aktual setiap servomotor. Ini mungkin berguna untuk memilih sudut awal setiap motor.
nunchuk.ino
Langkah 13: Penggunaan
Sekarang semuanya siap, nyalakan robot dan bersenang-senanglah!
Nunchuk digunakan untuk mengontrol lima gerakan yang ditunjukkan dalam gambar: rotasi kanan/kiri, gerakan naik/turun, rotasi gripper, gerakan naik/turun gripper, dan gerakan buka/tutup gripper. Anda dapat menggabungkan gerakan-gerakan ini untuk melakukan berbagai tugas.
Anda dapat memodifikasi kode untuk memiliki gerakan yang berbeda berdasarkan kombinasi tombol dan sudut joystick.
Kode
nunchuk.ino
No preview (download only).
Github
https://github.com/infusion/Fritzing/tree/master/Wii-Nunchukhttps://github.com/infusion/Fritzing/tree/master/Wii-Nunchuk