Kontrol Robot Arm dengan Arduino
Halo sahabat Ardutech, semoga senantiasa dalam keadaan yang semakin baik, Aamiin.. Kali ini kita akan membuat Kontrol Robot Arm dengan Arduino UNO. Apa itu robot Arm ? Robot Arm merupakan jenis robot yang berfungsi seperti lengan kita, lengan manusia. Disana terdapat siku (elbow), pergelangan (wrist) serta bagian untuk menjepit atau memegang (grip). Jenis robot ini dapat dijumpai di pabrik/industri otomotif dengan fungsi pengelasan maupun perakitan.
Nah kita akan membuat yang sederhana saja, untuk memahami kontrol robot Arm. Sebagai penggerak dasar adalah motor servo. Cara kontrol motor servo dapat juga dilihat disini. Robot Arm yang akan kita kontrol merupakan robot Arm dengan jumlah motor servo yang dikontrol 5 buah.
Masing – masing motor servo mempunyai tugas sendiri – sendiri yaitu : base, shoulder, elbow, wrist dan gripper. Nah dengan demikian kita memerlukan 5 buah pin PWM dari Arduino UNO, cukup kan ? Ya, karena Arduino UNO mempunyai 6 buah pin PWM.
Bahan atau hardware yang diperlukan :
- Arduino UNO
- Satu set robot Arm Lynxmotion
- Power supply 5V/2A (untuk motor servo robot)
Jika sudah kita koneksikan robot Arm dengan Arduino. Ingat cukup pin signal-nya dari motor servo ya ditambah dengan ground. Untuk pin tegangan servo dikoneksikan ke power supply 5V/2A.
Ok, sekarang kita buat programnya. Buka Arduino IDE kemudian tulis code berikut :
#include <Servo.h> Servo servo1; Servo servo2; Servo servo3; Servo servo4; Servo servo5; unsigned int sudut; String inString="",temStr; char str; unsigned int nomor,l,i; void setup() { Serial.begin(9600); servo1.attach(2);//pin 2=servo1 servo2.attach(3);//pin 3=servo2 servo3.attach(4);//pin 4=servo3 servo4.attach(5);//pin 5=servo4 servo5.attach(6);//pin 6=servo5 servo1.write(90); servo2.write(90); servo3.write(90); servo4.write(90); servo5.write(90); Serial.println("ROBOT ARM CONTROLLER"); } void loop() { if(Serial.available()>0) { str = Serial.read(); if(str!='\n') { inString += (char)str; } else if (str == '\n') { temStr=inString.substring(0,1); nomor=temStr.toInt(); temStr=inString.substring(2); sudut=temStr.toInt(); Serial.print(nomor); Serial.print(" : "); Serial.println(sudut); switch(nomor){ case 1:servo1.write(sudut); break; case 2:servo2.write(sudut); break; case 3:servo3.write(sudut); break; case 4:servo4.write(sudut); break; case 5:servo5.write(sudut); break; } inString =""; } } }
Jika sudah selesai , simpan (Save ) kemudian Upload ke Arduino. Untuk mencoba gerakan kontrol robot Arm dengan Arduino ini melalui perintah serial komunikasi, kita pakai saja Serial Monitor dari Arduino IDE. Buka Serial Monitor (Tools – Serial Monitor), atur baudrate pada 9600 dan tambahan “Newline”.
Perintah kontrolnya sebagai berikut :
[nomor servo] [spasi] [besar sudut]
Contohnya servo 1 kita set pada sudut 120, cuku perintahnya : “1 120” kemudian klik tombol “Send” maka servo 1 (Base) akan berputar menuju posisi 120.
Silakan dicoba juga untuk servo yang lain dengan besar sudut divariasi. Sekarang tentang penjelasan program kontrol robot Arm dengan Arduino ya, sekilas saja.
Baris pertama merupakan library motor servo :
#include <Servo.h>
Jumlah servo ada 5, sehingga perlu kita membuat 5 identifikasi motor servo :
Servo servo1; Servo servo2; Servo servo3; Servo servo4; Servo servo5;
Selanjutnya konfigurasi koneksi pin masing – masing servo dengan pin Arduino, perhatikan schematic pada gambar 3.70. Servo1 terhubung ke pin 2, servo 3 terhubung ke pin 4 dan seterusnya :
servo1.attach(2);//pin 2=servo1 servo2.attach(3);//pin 3=servo2 servo3.attach(4);//pin 4=servo3 servo4.attach(5);//pin 5=servo4 servo5.attach(6);//pin 6=servo5
Posisikan semua servo pada posisi tengah (90) :
servo1.write(90); servo2.write(90); servo3.write(90); servo4.write(90); servo5.write(90);
Berikutnya program utama hampir sama dengan program sebelumnya, menunggu sampai ada perintah dari komputer. Perintahnya sesuai dengan format/protokol yang sudah kita buat. Sebagai tanda kalau pengiriman perintah sudah lengkap, disertakan karakter newline ‘\n’ pada akhir perintah.
Ketika ada data masuk maka Serial.available()>0 bernilai “true” sehingga pengujian kondisinya menjadi benar. Variabel str untuk menampung data yang masuk :
if(Serial.available()>0) { str = Serial.read();
Jika data bukan newline ‘\n’ maka pengiriman data belum komplit, tampung, gabungkan dan simpan ke inString.
if(str!=’\n’) { inString += (char)str; }
Setelah karakter newline diterima berarti sudah diterima sebuah perintah :
else if (str == ‘\n’)
Selanjutnya kita olah data yang diterima, kita ambil mana yang merupakan perintah untuk nomor servo dan mana yang merupakan perintah besar sudutnya.
Ambil satu karakter pertama, yaitu nomor servo yang akan dikontrol :
temStr=inString.substring(0,1);
Nilainya masih string, kita konversi menjadi integer :
nomor=temStr.toInt();
Posisi karakter yang menunjukkan besaran sudut dimulai pada karakter ketiga atau urutan kedua. Contoh : “2 150”, karakter 1 (angka pertama dari 150) ada pada posisi kedua, sehingga perintah berikutnya adalah mengambil karakter mulai urutan kedua :
temStr=inString.substring(2);
Nilai inipun masih bertipe string sehingga perlu dikonversi ke integer :
sudut=temStr.toInt();
Selanjutnya kita cek servo keberapa yang akan dikontrol, dengan perintah :
switch(nomor){ case 1:servo1.write(sudut); break; case 2:servo2.write(sudut); break; case 3:servo3.write(sudut); break; case 4:servo4.write(sudut); break; case 5:servo5.write(sudut); break; }
Jika servo yang dikontrol adalah servo 1 maka isi variabel nomor adalah 1 dan case 1 yang akan dikerjakan yaitu mengontrol servo 1 sesuai dengan nilai sudutnya. Demikian juga untuk nomor servo yang lain, terakhir variabel inString dikosongkan nilainya untuk dipakai pada proses penerimaan perintah berikutnya :
inString = “”;
Alhamdulillah sudah selesai ya sedikit pembahasan program Kontrol Robot Arm dengan Arduino UNO. Semoga bermanfaat.
Ardutech – “Sahabat inovasi anda”