Kit Lengan Robot 3‑Axis Terprogram – Kontrol Lokal & Jarak Jauh dengan Arduino dan Bluetooth
Komponen dan Perlengkapan
Arduino Mega 2560
×
1
SainSmart DIY 3-Axis Control Palletizing Robot Arm Model for Arduino UNO MEGA2560
×
1
MeArm DIY Robot Arm Kit
×
1
HC-06 Bluetooth Module
×
1
Adafruit RGB Backlight LCD - 16x2
×
1
Android device
×
1
Rotary potentiometer (generic)
10Kohm
×
4
SparkFun Pushbutton switch 12mm
×
3
LED (generic)
RED, BLUE, GREEN, YELLOW
×
4
Aplikasi dan Layanan Online
Arduino IDE
MIT App Inventor 2
Tentang Proyek Ini
Tujuan tutorial ini adalah untuk mengembangkan langkah demi langkah proyek untuk mengontrol dan memprogram Lengan Robot, mensimulasikan fungsi dasar robot industri.
Langkah 1: Spesifikasi
Robot memiliki dua fungsi dasar:
Program: Merekam posisi lengan dalam tiga dimensi (setiap rekaman adalah "langkah")
Run: Melakukan secara berurutan posisi yang direkam dalam "Program". Robot akan menjalankan program hingga perintah "ABORT" digunakan.
Karakteristik utama:
Proyek dapat digunakan untuk mengontrol robot dengan 3 atau 4 DOF ("Degrees of Freedom").
Robot dapat dikontrol dalam mode "LOKAL" dan "JARAK JAUH" (yang terakhir melalui perangkat Android)
Selama fase program, pengguna dapat mengubah mode kontrol dari "LOKAL" ke "JARAK JAUH" dan sebaliknya.
Informasi kepada pengguna akan disediakan melalui LED berwarna, layar LED 2 baris, dan suara (buzzer).
Alarm suara juga dapat dipicu secara jarak jauh.
Langkah 2: Proyek
Diagram blok pada langkah sebelumnya menunjukkan "Daftar Bahan" yang akan digunakan dalam proyek ini.
Saya memilih Arduino MEGA untuk tidak khawatir tentang jumlah port Arduino yang tersedia (I/O). UNO misalnya akan bekerja tanpa masalah tetapi metode ekspansi port harus digunakan. Ada beberapa opsi yang dapat dengan mudah ditemukan di internet, sebagai contoh decoder 74138.
Di sini, prototipe pertama sedang diprogram dalam "mode lokal".
Untuk jaringan Bluetooth, HC-06 akan digunakan.
Aplikasi Android yang digunakan untuk "mode jarak jauh", dikembangkan menggunakan alat MIT Appinventor2, yang merupakan platform tunggal yang kuat untuk jenis aplikasi ini berdasarkan perangkat Android. Aplikasi tersedia untuk diunduh secara gratis di Google store: MJRoBot Arduino Robot Arm Control.
Video di bawah ini dapat memberikan ide tentang bagaimana proyek akhir dengan pemrograman jarak jauh seharusnya:
Langkah 3: Pengembangan Proyek
Lengan Robot dapat diklasifikasikan berdasarkan jumlah "sendi" atau "Derajat Kebebasan" (DOF) yang dimilikinya.
"Basis", atau "Pinggang", biasanya dapat memutar lengan 180o atau 360o, tergantung pada jenis Servo yang digunakan (di sini dalam proyek ini, Servo 180o digunakan).
"Bahu", bertanggung jawab untuk "mengangkat atau menurunkan" lengan secara vertikal.
"Siku", akan membuat lengan "maju atau mundur".
"Cakar" atau "Gripper", bekerja dengan membuka atau menutup untuk "menggrab benda".
Langkah 4: Rangkaian
Motor servo akan digunakan untuk menggerakkan sendi, terhubung langsung ke Arduino. Perhatikan tidak jarang melihat "Stepper Motors" digunakan di basis untuk torsi dan presisi yang lebih besar. Pemilihan servo yang tepat sangat penting (ada servo Cina murah yang sangat buruk konstruksinya seperti MG995, yang sayangnya adalah yang datang dengan SanSmart 3DOF AARM saya). Namun untuk tujuan proyek ini bekerja baik.
Daya DC untuk servo harus dipisahkan dari Arduino dan komponen lain. Sumber daya eksternal 5 atau 6V seharusnya bekerja tanpa masalah (periksa DataSheet servo Anda untuk memverifikasi rentang tegangan yang tepat). Praktik umum juga menggunakan kapasitor 470uF antara VCC dan GND untuk meminimalkan kebisingan yang dihasilkan oleh motor DC di dalam servo. Pastikan untuk menyambungkan semua "Grounds" (Sumber daya eksternal dengan pin GND Arduino).
Jika servo mengalami masalah dan bergetar banyak, buat penyesuaian pada "delays" dalam kode Anda. Penting agar servo memiliki waktu untuk mencapai titik tertentu sebelum menerima perintah baru. Juga layak untuk memeriksa apakah servo adalah digital atau analog, karena meskipun secara mekanis serupa, digital bekerja dengan frekuensi 300Hz sementara analog, 50Hz. Pustaka standar Arduino "Servo.h" dikembangkan untuk servo analog dan dapat dimodifikasi jika diperlukan, untuk berfungsi lebih baik dengan servo digital.
Gambar di atas menunjukkan rangkaian lengkap.
Langkah 5: Kode
Proyek ini tidak rumit, tetapi memiliki banyak variabel. Yang paling bijaksana adalah untuk secara jelas mendefinisikannya dan memberikan komentar pada satu file:
ArmDefine.h
File ini juga harus menetapkan sudut minimum, maksimum, dan awal servo. Kode yang disertakan dalam tutorial ini, memiliki dua set parameter untuk lengan robot yang saya uji dalam proyek saya (tentu saja hanya satu grup konstanta yang harus digunakan):
Setiap jenis lengan memiliki set parameter yang berbeda dan penting bagi Anda untuk menemukan yang tepat untuk lengan Anda. Yang saya sarankan adalah bahwa awalnya potentiometer (pots) tetap di titik tengahnya dan Mapping output PWM diatur ke nilai default: Max = 255, Min = 0 dan Mid = 126 ("#defines" di atas). Kemudian, mulai memvariasi pots (satu per satu) dan ikuti di Serial Monitor (atau LCD) apa yang harus menjadi nilai minimum dan maksimum di mana lengan bekerja dengan baik. Itu akan menjadi nilai akhir yang akan digunakan untuk pengaturan (ubah nilai asli saya di ArmDefine.h).
Untuk "merekam" set koordinat (atau langkah) yang harus dimainkan robot, saya akan menggunakan array data:
int gripPosition[100]; int basePosition[100]; int shouPosition[100]; int elbwPosition[100]; int positionIndex = 0; // Index to be used at position array used for recorded tasks
Perhatikan bahwa saya tidak menyimpan posisi "tersimpan" dan pada akhir program "robot", indeks kembali ke nol dan robot akan menunggu pemutaran urutan baru (program hilang). Sebagai alternatif, Anda dapat menyimpan array data ini di EEPROM Arduino, misalnya. Melakukan itu, program akan dijalankan lagi atau bahkan Anda dapat memiliki lebih dari satu program yang tersimpan.
Langkah 6: Logika Program
Blok utama ("Loop") sebenarnya sangat sederhana:
Periksa apakah perintah untuk menjalankan "program" (urutan langkah) telah digunakan.
Jika ya, jalankan.
Jika tidak, "program" belum lengkap dan masih harus menulis langkah baru.
Jika "posisi baru" ditentukan, tambahkan ke program.
Pertama, periksa pesan yang datang ke buffer serial, dari perangkat Android.
Selanjutnya, verifikasi apakah mode kontrol adalah "Lokal" atau "Jarak Jauh" (default adalah Lokal).
Fungsi checkBTcmd() mengumpulkan string menggunakan karakter individual yang datang dari modul BT. String ini diteruskan ke variabel "command".
Fungsi defineLocalRemote() mempertimbangkan variabel "command" memeriksa apakah satu perintah untuk mengubah mode ke jarak jauh diterima atau sebaliknya. Perintah alarm juga dianalisis di sini. Untuk logika program, jika "Alarm" dipicu di perangkat Android, lengan harus pergi ke mode Jarak Jauh.
Fungsi RunProgram() melakukan persiapan, menyalakan/mematikan LED, dll dan khususnya memanggil fungsi: ExecuteTask(). Yang terakhir adalah fungsi yang berisi logika eksekusi urutan langkah. Fungsi meningkatkan "positionIndex" mengirim data posisi ke lengan satu per satu menggunakan alat: armPosition(grip, base, shoulder, elbow).
Akhirnya, fungsi yang benar-benar memerintah servo dan menulis "langkah" adalah recArmPosition(). Terima kasih menerima perintah Android, fungsi ini akan menentukan posisi servo yang dapat melalui pot, atau melalui "slider" dari aplikasi Android. Dengan setiap perubahan posisi, fungsi ini mengirim koordinat ke servo menggunakan fungsi armPosition (grip, base, shoulder, elbow). Pembacaan posisi aktual dari pot atau slider dan aktivasi servo yang sesuai terjadi saat perintah "SAVE" atau "PROGRAM" dipicu. Pada saat itu, indeks array ditambah dan langkah disimpan.
Untuk menyederhanakan pemahaman, semua kode didasarkan pada fungsi spesifiknya. "Setup", "Loop" dan fungsi yang dijelaskan di atas hampir semuanya dalam file: MJRoBot_Arm_Robot_Task_Prgm.ino
Fungsi yang lebih umum seperti membaca perintah BT: void checkBTcmd(); generator suara: void beep (int pin, int freq, long ms) dan debouncing: boolean debounce (int pin); ada pada file: General_Functions.ino
Sebuah fakta penting: karena Arduino mengeksekusi instruksi berdasarkan jam 16Mhz, diharapkan tombol kontrol dibaca ratusan atau bahkan ribuan kali per detik, oleh karena itu penting untuk membuat "debouncing" tombol yang menetapkan langkah perekaman.
File keempat dan terakhir adalah: Arm_Ctrl_and_Display.ino
Dalam file ini ada fungsi pembacaan potentiometer: bool readPotenciometers(); pembacaan slider Android: bool readSliders(); penempatan servo: void armPosition (int gripp, int basee, int shoulder, elbow int). Fungsi lain yang disertakan dalam file adalah untuk tampilan data di LCD, Serial Monitor, alarm, dll.
Video menunjukkan lengan robot 4DOF "meArm" diprogram secara jarak jauh melalui Android app.
Kode sumber lengkap untuk proyek dapat ditemukan di GITHUB:
Seperti biasa, saya harap proyek ini dapat membantu orang lain menemukan jalan mereka di dunia yang menarik Elektronika, Robotika, dan IoT! Untuk lebih banyak proyek, silakan kunjungi blog saya: MJRoBot.org
Saludos dari selatan dunia! Sampai jumpa di tutorial saya selanjutnya!
int gripPosition[100]; int basePosition[100]; int shouPosition[100]; int elbwPosition[100]; int positionIndex = 0; // Index to be used at position array used for recorded tasks