Tentang proyek ini
Memperkenalkan Lengan Robot DIY yang dikendalikan oleh Gerakan Manusia.
Film Blockbuster seperti Pacific Rim, Avatar, dan Film Sci-Fi lainnya telah mengisyaratkan kemampuan untuk bersinergi dengan Robot – di mana gerakan Anda dapat ditingkatkan dengan bantuan Robot.
Bagaimana jika kita dapat membuat Robot industri yang sama, tetapi dalam skala yang lebih kecil?
Proyek ini adalah upaya untuk mencapainya.
Ini adalah Lengan Robot Arduino yang dapat diprogram atau bahkan dikendalikan oleh Gerakan Tangan.
Tetap setia pada konvensi setelan Iron man, setiap iterasi akan dikenal sebagai Mark. Prototipe ini akan dikenal sebagai MARK 1. Kita dapat mengharapkan lebih banyak iterasi untuk meningkatkan lengan robot asli.
Lihat Tutorial Lengan Robot DIY Lengkap (dikendalikan oleh Gerakan Tangan) Di Sini
Ikhtisar
Dalam tutorial ini, kita akan membuat Robot enam sumbu yang dikendalikan oleh gerakan Tangan menggunakan Sarung Tangan Robot. Dan dengan meniru gerakan alami manusia seperti mencubit, atau memutar pergelangan tangan ke kiri, Anda akan dapat membuka/menutup atau memutar lengan robot ke kiri dan ke kanan. Akibatnya, mengendalikan Lengan Robot secara manual.
Temukan Lebih Detail di artikel asli
Tandai 1 Fitur:
- Rotasi 6 Sumbu
- Portabel
- Kontrol Robot dengan Gerakan Manusia
- Dapat diprogram untuk menjalankan fungsi dasar
- Dapat dikontrol secara nirkabel dari jarak jauh
- Dapat menahan beban 600g (Max Load 1kg)
Daftar Bagian
Lengan Robot sepenuhnya dapat disesuaikan. Anda dapat membeli sendiri atau mencetak 3d Anda sendiri. Jika Anda memilih untuk mencetak 3D, jangan khawatir. Ada daftar Robot berbeda yang menggunakan motor servo, jadi teori yang kami buat masih berlaku.
Untuk proyek ini, prototipe ini (Tanda 1) akan dicetak 3D karena memberi saya lebih banyak ruang untuk membuat suku cadang khusus.
Lengan Robot: Lengan Robot Cetak Thingiverse 3D (kredit:Wonder Tiger):
- Bagian 1:Bagian Gripper
- Bagian 2:Basis dan Meja Putar
- Bagian 3:Lengan Inti Robot
Anda dapat menemukan informasi lebih lanjut tentang bangunan ini, bersama dengan jenis sekrup dari bagian di atas. Waktu yang dibutuhkan untuk mencetak bisa sampai 40 jam. Namun, ini menghemat biaya untuk membeli Lengan Robot.
Sarung Tangan Robot : File Robotic Glove.STL (kredit:Roman 13)
Sarung Tangan Robot adalah tambahan estetika untuk proyek ini, tetapi Anda juga dapat menggunakan sarung tangan pembangun untuk menerapkan Lengan Robot.
Catatan: untuk tangan yang lebih besar, cetak pada skala 105%
Cara Kerjanya
Secara keseluruhan, kami mengirimkan sinyal (melalui Bluetooth) dari Robotic Glove ke motor servo. Ketika nilai telah diterima, driver servo akan mengirimkan sinyal ke motor servo tertentu yang menggerakkan Lengan Robot.
Sekarang, jika kita menambahkan beberapa servo dan lebih banyak sensor, kita dapat mengontrol setiap Motor. `
Jika kita menganggap Lengan Robot sebagai rangkaian motor servo yang saling berkoordinasi untuk menjalankan suatu fungsi, kita dapat membuat lengan robot yang dikendalikan oleh sarung tangan Robot.
Arduino Sarung Tangan Robot menggunakan sensor untuk berkomunikasi dengan Lengan Robot Arduino dan mengirimkan data untuk memindahkan Servo ke sudut yang diinginkan.
Anda mungkin bertanya-tanya, sensor apa yang digunakan Sarung Tangan Robot?
Untuk MARK 1, kami akan menggunakan Flex Sensors dan accelerometer (MPU6050)
- Sensor Fleksibel – Berdasarkan derajat kelengkungan potongan plastik ini, hambatan berubah, mempengaruhi arus. Pengukuran ini kemudian digunakan untuk mendeteksi perubahan gerakan tangan.
- Akselerometer – Untuk gerakan yang lebih alami, akselerometer dapat mendeteksi perubahan pada rotasi lengan dan pergelangan tangan.
Kami menggunakan sensor ini untuk mendeteksi perubahan dalam isyarat. Kami kemudian dapat mengirim nilai tertentu yang dipetakan dari gerakan ke Lengan Robot untuk mengontrol motor servo melalui Bluetooth. Dan Dengan gerakan yang cukup, lengan robot menjadi hidup!
Pemetaan Lengan Robot
Berikut ini merupakan tabel pemetaan nilai yang dikirim ke Lengan Robot oleh Sarung Tangan. Ini dapat ditemukan di Artikel asli. Dengan masing-masing memiliki kunci untuk mencirikan fungsinya. (P – Kelingking, L – Kanan, dll.)
Catatan: Kapital "F" (jari) mewakili arah yang berlawanan dari putaran motor servo
Perakitan Bagian
Lengan Robot – Perakitan
Membeli Lengan Robot bisa sangat mahal. Untuk menjaga lengan robot ini tetap dalam Anggaran, pencetakan 3D Lengan Robot adalah pilihan terbaik.
Ini membantu dalam jangka panjang, karena ada banyak contoh lengan robot cetak 3D yang dapat disesuaikan, misalnya, menambahkan LED, membuat Penjepit dudukan kamera:
Seperti disebutkan sebelumnya, Lengan Robot dimodelkan di sekitar Lengan Robot di Thingyverse. Saya telah memilih contoh ini karena ini adalah desain yang sangat baik yang menyediakan enam sumbu, terdokumentasi dengan baik, dan memiliki kekuatan/kekokohan. Anda dapat mengakses Lengan Robot Wonder Tiger dari daftar Bagian.
Anda juga dapat menemukan remix saya untuk Stand Kamera Lengan Robot. Kami akan membahas ini lebih lanjut di rilis mendatang. Namun, untuk mencetak semua suku cadang, diperlukan waktu setidaknya 40 jam untuk mengumpulkan semua suku cadang.
Anda juga dapat menemukan banyak alternatif Robotic Arm 3D Printed lainnya.
Memperkenalkan motor servo dan Driver
Mengingat bahwa Lengan Robot idealnya merupakan rangkaian motor yang saling berkoordinasi, secara teoritis kita dapat memasang beberapa motor yang semuanya dapat ditenagai oleh Arduino. Dalam proyek ini, kami akan menggunakan Driver Servo PCA9685 untuk memberi daya pada Servo MG966R.
Catatan: Gunakan catu daya eksternal saat menyalakan setiap Motor. Arduino tidak dapat memasok daya yang cukup untuk mengontrol semua motor. Dalam proyek ini, Baterai RC 5V, 2200 mAh digunakan.
Pengkabelan diagram Arduino akan terlihat seperti di bawah ini:
NEMA-17 untuk rotasi dasar
Karena Robot mulai bertambah sedikit beratnya, dan motor servo MG966R tidak cukup kuat untuk memutar Lengan Robot di pangkalan. Untuk memutar Lengan Robot, motor yang lebih kuat daripada motor servo perlu digunakan
Motor Stepper (NEMA-17) dapat digunakan karena presisi dan torsinya yang tinggi, membantu Lengan Robot berputar dengan mulus ke kontrol gerakan.
Driver NEMA-17 dan A4988 digunakan untuk mengontrol arah Motor, dapat dilihat dari diagram di bawah ini:
Dan akhirnya, diagram berikut menunjukkan perakitan diagram pengkabelan akhir dari Lengan Robot lengkap.
Perakitan Sirkuit
Diagram pengkabelan di bawah ini menunjukkan perakitan akhir semua komponen elektronik untuk membuat lengan Robot, termasuk modul Bluetooth. Kami akan membahas proses pengupas di bawah.
Sensor Fleksi Manusia
Sesuai dengan estetika Lengan Robot, Anda dapat mencetak Sarung Tangan Eksoskeleton Cetak 3D untuk digunakan sebagai Sarung Tangan Robot Anda.
Namun, Anda dapat menggunakan Sarung Tangan Pembuat standar untuk membuat prototipe Sarung Tangan Robot. Desain 'Robot Glove Exoskeleton' ini berpadu sempurna dengan desain Lengan Robot.
Sarung Tangan Robot terdiri dari komponen berikut:
- Sensor Fleksibel – Berdasarkan tekukan jari, arus berubah yang bisa kita gunakan untuk mengirim sinyal ke Motor
- Akselerometer (MPU6050 ) – Kita dapat mengontrol Motor dengan memetakan gerakan manusia dari bidang X, Y, Z
- LED – LED akan menyala ketika kontrol gerakan manusia telah dikirim ke Arduino
- Modul Bluetooth (HC-05) – Mengirim data ke Penerima Robotic Arm HC-05
- Arduino Nano – Mikrokontroler akan berfungsi sebagai otak dari Robotic Glove
Diagram berikut bagus untuk menguji sensor fleksibel dan Akselerometer.
Penting: Lengan Robot hanya akan seakurat kontrol Sarung Tangan robot, Jadi ini layak dilakukan dengan benar.
Mengonfigurasi Bluetooth (Master dan Penerima)
Lengan Robot Arduino berkomunikasi melalui Bluetooth menggunakan modul HC-05. Di bawah ini soroti informasi penting.
Modul
Konfigurasi
Sarung Tangan Robot HC-05 Master Lengan Robot HC-05 Budak
Catatan:
Baud Rate ditetapkan pada 4800
Pemrograman Arduino
Anda dapat mengunduh kode berikut di bawah ini:
Catatan: Semua kode uji lainnya dan versi terbaru dapat ditemukan di Arduino Robotic Arm Git Repo
Memprogram Lengan Robot
Kode Lengan Robot memanfaatkan Perpustakaan HCPCA9685 (untuk Driver Servo). Dengan cara ini, kita dapat menyalakan beberapa motor servo, semuanya dikendalikan oleh Arduino. Dalam kode, kita bisa mulai dengan menambahkan library ini dan mendeklarasikan variabel servo.
Variabel berikut digunakan untuk mencari sebelumnya/kenaikan dan mendapatkan posisi Servo saat ini.
* Sertakan library HCPCA9685 */
#include "HCPCA9685.h"
/* Alamat slave I2C untuk perangkat/modul. Untuk HCMODU0097 alamat I2C default
adalah 0x40 */
#define I2CAdd 0x40
/* Buat instance perpustakaan */
HCPCA9685 HCPCA9685(I2CDad);
//posisi parkir awal motor
const int servo_joint_L_parking_pos =60;
//Derajat sensitivitas servo robot - Interval
int servo_joint_L_pos_increment =20;
// Pantau terus nilai posisi motor saat ini
int servo_joint_L_parking_pos_i =servo_joint_L_parking_pos;
//Sudut minimum dan maksimum motor servo
int servo_joint_L_min_pos =10;
int servo_joint_L_max_pos =180;
Inisialisasi Port Serial pada Baud Rate 4800 untuk memulai komunikasi Bluetooth
Serial.begin(4800); // Inisialisasi kecepatan komunikasi default modul Bluetooth
Di bagian loop(), kami terus memeriksa apakah ada data yang berasal dari sarung tangan robot. Jika benar, kami akan menyimpan data yang masuk dalam variabel 'status'. Dan tergantung pada karakter yang diberikan, kami akan menggunakan ini untuk menggerakkan motor.
Bagian berikut menguraikan kode:
Kode Lengan Robot dapat dilihat sebagai serangkaian motor servo yang bekerja bersama untuk mensimulasikan gerakan manusia. Kodenya sama, dengan Servo digerakkan oleh Driver Servo berdasarkan nilai Bluetooth.
//Mendefinisikan driver servo. 0x40 Alamat adalah Alamat I2C default.
#define I2CAdd 0x40
int response_time =5; //Menerima nilai dari interval Robotic Glove
// Memeriksa apakah data berasal dari port serial
if (Serial.available()> 0) {
state =Serial .Baca(); // Membaca data dari port serial
Serial.print(state); // Mencetak nilai yang dikirim
//Blok kode fungsi motor
}
Berdasarkan 'nilai keadaan' saat ini, Driver servo akan mengirim sinyal ke Motor masing-masing.
Misalnya, jika kita menekuk jari kita. Nilai 'f' akan dikirim oleh sarung tangan robot (melalui Bluetooth) dimana Lengan Robot akan membaca data ini dan memicu fungsi untuk memutar motor servo masing-masing. Proses ini diulang dalam lingkaran tak terbatas.
if (Serial.available()> 0) { // Memeriksa apakah data berasal dari port serial
state =Serial.read(); // Membaca data dari port serial
Serial.print(state); // Mencetak nilai yang dikirim
//Untuk penamaan motor, lihat artikel / tutorial
//Move (Rotasi Basis) Motor Stepper Kiri
if (status ==' S') {
baseRotateLeft();
delay(waktu_respon);
}
}
Catatan: Kode tersebut menerapkan penghentian keras, untuk menghentikan Motor agar tidak melebihi sudut maksimumnya, yang dapat melucuti roda gigi motor.
HPCCA9685.Servo(0, servo_joint_L_parking_pos_i); // Menggerakkan motor servo pada saluran 0 ke sudut yang diinginkan.
//Pindahkan Motor Cakar Ke Bawah
if (status =='f') {
if (servo_joint_3_parking_pos_i HPCCA9685.Servo(4, servo_joint_3_parking_pos_i);
delay(waktu_respon);
Serial.println(servo_joint_3_parking_pos_i);
servo_joint_3_parking_pos_i =servo_joint_3_parking_pos_i}>}
void baseRotateLeft() {
digitalWrite(stepPin, RENDAH); //Putar ke arah berdasarkan TINGGI, RENDAH
delayMicroseconds(stepDelay); //Mengubah kecepatan motor Stepper
}
Jika nilai motor servo kurang dari putaran maksimum, terus berputar. Jika sudah mencapai putaran maksimal 180 derajat, berhentilah.
servo_joint_3_parking_pos_i
Dimana servo_joint_3_max_pos adalah posisi maksimum Motor.
Catatan: Kode tersebut menerapkan penghentian keras untuk menghentikan Motor agar tidak melebihi sudut maksimumnya, yang dapat melucuti roda gigi motor.
Memprogram Sensor Fleksibel
Kode Lengan Robot dapat ditemukan di GitHub. Jika Anda mengerjakan proyek tersebut, sumbangkan versi Anda sendiri ke Git Repo. Ini akan membantu membangun indeks berbagai versi dan fungsi Lengan Robot.
Kode telah didokumentasikan (Juga tersedia di Git). Namun, kami akan membahas poin-poin utamanya:
Kami akan mendefinisikan lima sensor:
//LED PADA PIN 3
int pinkie_Data =A1;
int finger_Data =A2;
int thumb_Data =A3;
//const int MPU_addr =0x68;
const int MPU2 =0x69, MPU1 =0x68;
Catatan: 0x68 dan 0x69 mewakili Alamat I2C dari 2 Akselerometer MPU6050
//Seberapa sering mengirim nilai ke Lengan Robot
int response_time =1000;
Kode berikut menguraikan Arduino membaca nilai sensor:
// membaca nilai dari Flex Sensors ke Arduino
kelingking =analogRead(pinkie_Data);
finger =analogRead(finger_Data);
thumb =analogRead(thumb_Data);
Baca posisi Akselerometer saat ini:
GetMpuValue1(MPU1);
GetMpuValue2(MPU2);
Mengkalibrasi nilai:
Kode berikut dikalibrasi untuk menemukan batas atas dan bawah Sensor Flex. Untuk mengkalibrasi ulang sarung tangan fleksibel, tekan tombol reset pada Arduino.
if (bool_caliberate ==false ) {
delay(1000);
thumb_high =(thumb * 1.15);
thumb_low =(thumb * 0.9);
finger_high =(finger * 1.03);
finger_low =(finger * 0.8);
kelingking_high =(kelingking * 1.06);
kelingking_low =(kelingking * 0.8);
bool_caliberate =benar;
}
Kami akan terus memeriksa apakah nilai saat ini telah melebihi batas atas atau bawah flex yang ditentukan berdasarkan kalibrasi. Jika sensor flex berada di atas atau di bawah nilai ini, data dikirim ke Lengan Robot untuk menggerakkan motor servo tertentu ke arah tertentu.
// finger 1 - Claw Bend/Open
if (finger>=finger_high) {
Serial.print("F");
delay(response_time);
}
if (jari <=finger_low) {
Serial.print("f");
delay(waktu_respon);
}
Memprogram Lengan Robot
Hasil – Pembayaran
Lengan Robot cukup akurat untuk memindahkan objek. Namun, itu akan membutuhkan beberapa pekerjaan untuk memindahkan objek yang kompleks, atau bahkan bersaing dengan 'sejuta tahun lebih' yang dimiliki manusia dalam hal ketangkasan ... meskipun menghabiskan lebih banyak waktu untuk mengerjakan kode, presisi Robot dapat bekerja seperti yang dimaksudkan untuk MARK 1i . Meskipun Lengan dapat ditingkatkan dapat ditingkatkan secara signifikan.
Jika Anda ingin meningkatkan kode, berkontribusi pada Arduino Robot Arm Git Repo dan bangun lengan Anda. Mari kita buat ini terbuka untuk dikembangkan orang lain!
Terakhir, Kami juga dapat mengontrol Robot melalui gerakan tangan dan memprogram Robot untuk mengotomatiskan tugas-tugas dasar.
Langkah Selanjutnya
Dan itu saja untuk orang-orang MARK 1! Jika Anda menyukai proyek ini, pertimbangkan untuk mendukung halaman Patreon saya.
Kode
- Cuplikan kode #1
- Cuplikan kode #3
- Cuplikan kode #4
- Cuplikan kode #5
- Cuplikan kode #7
- Cuplikan kode #11
- Cuplikan kode #12
Cuplikan kode #1Teks biasa
* Sertakan library HCPCA9685 */#include "HCPCA9685.h"/* Alamat slave I2C untuk perangkat/modul. Untuk HCMODU0097, alamat I2C default adalah 0x40 */#define I2CAdd 0x40/* Buat instance perpustakaan */HCPCA9685 HCPCA9685(I2CAdd);//posisi parkir awal motorconst int servo_joint_L_parking_pos =60;//Derajat servo robot sensitivitas - Intervalsint servo_joint_L_pos_increment =20;//Melacak nilai posisi motor saat iniint servo_joint_L_parking_pos_i =servo_joint_L_parking_pos;//Sudut minimum dan maksimum motor servoint servo_joint_L_min_pos =10;int servo_joint_L_max_pos Cuplikan kode #3Teks biasa
//Mendefinisikan driver servo. 0x40 Alamat adalah Alamat I2C default.#define I2CAdd 0x40 int response_time =5; //Menerima nilai dari interval Robotic Glove// Memeriksa apakah data berasal dari port serial if (Serial.available()> 0) { state =Serial.read(); // Membaca data dari port serial Serial.print(state); // Mencetak nilai yang dikirim // Blok kode fungsi motor}
Cuplikan kode #4Teks biasa
if (Serial.available()> 0) { // Memeriksa apakah data berasal dari status port serial =Serial.read(); // Membaca data dari port serial Serial.print(state); // Mencetak nilai yang dikirim //Untuk penamaan motor, lihat artikel / tutorial //Memindahkan (Rotasi Basis) Motor Stepper ke Kiri if (status =='S') { baseRotateLeft(); delay(waktu_respon); }}
Cuplikan kode #5Teks biasa
HPCCA9685.Servo(0, servo_joint_L_parking_pos_i); // Arahkan motor servo pada saluran 0 ke sudut yang diinginkan.//Pindahkan Motor Cakar Ke Bawah if (status =='f') { if (servo_joint_3_parking_pos_i Cuplikan kode #7Teks biasa
//LED PADA PIN 3int pinkie_Data =A1;int finger_Data =A2;int thumb_Data =A3;//const int MPU_addr =0x68;const int MPU2 =0x69, MPU1 =0x68;
Cuplikan kode #11Teks biasa
if (bool_caliberate ==false ) { delay(1000); jempol_tinggi =(jempol * 1.15); jempol_rendah =(jempol * 0.9); finger_high =(jari * 1,03); finger_low =(jari * 0.8); kelingking_tinggi =(kelingking * 1,06); kelingking_rendah =(kelingking * 0.8); bool_caliberate =benar; }
Cuplikan kode #12Teks biasa
// jari 1 - Claw Bend/Open if (jari>=finger_high) { Serial.print("F"); delay(waktu_respon); } if (jari <=finger_low) { Serial.print("f"); delay(waktu_respon); }
Github
http://github.com/EbenKouao/arduino-robot-armhttp://github.com/EbenKouao/arduino-robot-arm Github
https://github.com/EbenKouao/arduino-robotic-armhttps://github.com/EbenKouao/arduino-robotic-arm
Suku cadang dan penutup khusus
Thingiverse
https://www.thingiverse.com/thing:1748596File CAD di thingiverse.com Thingiverse
https://www.thingiverse.com/thing:1750025File CAD di thingiverse.com Thingiverse
https://www.thingiverse.com/thing:1838120File CAD di thingiverse.com Thingiverse
https://www.thingiverse.com/thing:1982745File CAD di thingiverse.com Skema
Robot Arm Git Repo
https://github.com/EbenKouao/arduino-robot-arm