Kontrol Robot ARM dengan Arduino

Robot Arm adalah sejenis robot yang berfungsi seperti lengan kita, lengan manusia. Ada siku (elbow), pergelangan (wrist), ada pula bagian untuk memegang/menjepit (grip). Penampakannya terlihat pada gamba :

Terdapat lima servo : Base, Shoulder, Elbow, Wrist dan Grip. Jadi kita perlu lima pin Arduino yang dihubungkan ke masing masing servo.Pada latihan kali ini kita akan memprogram pengendali robot arm sederhana. Cukup mengontrol posisi masing – masing servo secara manual. Untuk pembelajaran yang lebih advanced anda dapat mempelajarinya dengan teori penunjang Invers Kinematik.
Nah berikut ini program sederhana mengontrol gerakan robot dengan Arduino.

 

#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 = “”;
        }
   }
}

 

Jalannya program :
Untuk mengontrol gerakan masing-masing servo menggunakan perintah dari serial komunikasi. Buka Serial Monitor. Perintah kontrolnya sebenarnya bebas saja, dapat anda buat sendiri, pada contoh kita kali ini memakai protokol komunikasi sebagai berikut :
[nomor servo] [spasi atau karakter lain] [besar sudut] [‘\n’]
Contoh, servo 1 kita set pada sudut 1200, cukup kita tulis “1 120” kemudian klik Send maka servo 1 (base) akan berputar menuju posisi 1200.

Penjelasan program :
Pengontrolan motor servo menggunakan perintah dari 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 (900) :
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 = “”;
Ini foto hardwarenya :

Ok, kalau tadi ngontrolnya pake program serialnya Arduino, besok saya sampaikan pake yang lebih ‘berwarna’ semisal Delphi, tunggu aja ya…

54 thoughts on “Kontrol Robot ARM dengan Arduino

  • April 5, 2012 at 5:59 pm
    Permalink

    bisakah robot ARM ini memakai sensor atau sistem otomatis?

    Reply
    • April 27, 2012 at 8:33 pm
      Permalink

      Kalo dari servo kan ada 3 pin : Vs (5V) biasax kabel merah, Gnd (ground) kabel hitam & Sig (signal) biasanya kabel kuning/putih. Nah yg konek ke Arduino adalah pin Signal-nya + Gnd juga konek tentunya.
      Mengenai koneksi ke pin Arduino fleksibel, misalnya seperti pada gambar materi ini ada di pin 2 sd 6, yang penting inisialisasinya :
      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);//p

      Semoga membantu, makasih.

      Reply
  • August 17, 2012 at 8:42 pm
    Permalink

    mw tanya itu pake arduino yang apa

    Reply
  • October 13, 2014 at 6:09 pm
    Permalink

    bisa gak mas kontrolnya gak pakai adrUINO atau mikro,,,
    kalo pakai pc bisa GMANA?…
    programnya pakai delphi atau VB6 BISA GAK MAS?

    Reply
    • October 14, 2014 at 8:31 am
      Permalink

      Hmmm.. yang saya masih berpikir (kalau tanpa mikro) bagaimana cara ngontrol 5 atau 6 servo-nya ya … Cz data dari komputer tidak bisa langsung dipakai buat bikin PWM.
      Nah kalau di komputernya bisa pakai VB, Delphi atau yang lain gak masalah mas.

      Reply
  • October 14, 2014 at 1:46 pm
    Permalink

    kalau mikro ( adruino) kita kasih program delphi atau VB, apakah bisa mas untuk kontrol arm robot?
    dan bagaimana caranya?

    Reply
    • October 16, 2014 at 8:38 am
      Permalink

      Kalau Delphi/VB itu program di komputernya mas bukan di Arduino. Kalau di komputer pakai program apa saja bisa yang penting bisa komunikasi serial.
      Trims

      Reply
  • October 18, 2014 at 12:37 pm
    Permalink

    bang maaf mau tanya buat lengan arm nya itu kalau make mikrokontroller pake ic apa aja atau pake yg lain gtu

    Reply
    • October 28, 2014 at 3:17 pm
      Permalink

      Controller-nya bisa pakai apa saja. yang disitu pakai ATmega8

      Reply
  • November 2, 2014 at 8:26 pm
    Permalink

    gan kalo itu nggak pake ardruino, kira kira pake atmega yg berapa dan kalo di bahasa c gimana programnya terima kasih 🙂

    Reply
    • November 8, 2014 at 1:32 pm
      Permalink

      Bisa saja, tidak harus Arduino. Lha wong Arduino itu sebenere ATmega juga kok, gak percaya ? Intip aja …hehe…
      Yang penting bisa komunikasi serial mas, memori program tidak harus besar, programnya tidak banyak kok,bisa pakai ATmega8, ATmega8535, ATmega16.
      Untuk listing/source code kapan kapan kita coba posting, Insya Allah

      Reply
  • December 4, 2014 at 7:43 pm
    Permalink

    bro,,,perlu power external ga ya?kalo ga pake power external saya udah nyobain,,gerakannya ngacak,,,ga stabil juga,,,kalo pake power external buat servo,,,tolong jelasin dong bro,,,perlu bwt skripsi ni….08982613957

    Reply
    • December 5, 2014 at 9:09 am
      Permalink

      Pakai p.supply yang arusnya mencukupi kebutuhan servonya mas.
      Kalau yang kami coba pakai p.supply switching kepunyaan komputer (CPU Komputer).

      Reply
  • January 1, 2015 at 1:35 pm
    Permalink

    bisa posting yang pake atmega16 n bahasa C gak mas??butuh,,

    Reply
    • March 12, 2015 at 1:26 pm
      Permalink

      Lain kali mas Andi, Insya Allah

      Reply
    • January 19, 2015 at 8:15 am
      Permalink

      Ini sederhana kok mas, belum sampai ke inverse/forward kinematik

      Reply
  • February 24, 2015 at 3:35 pm
    Permalink

    Ini arus dari arduinonya kuat y untuk 5 servo mas?

    apa ada pengaman arusnya?
    atau dengan rangkaian biasa?

    Reply
    • March 11, 2015 at 9:10 am
      Permalink

      Itu sudah ada kontrollernya, arduino tinggal kirim command berupa karakter string.

      Reply
  • April 7, 2015 at 8:08 am
    Permalink

    mas boleh minta skema kerangka robotnya dalam skala 1:1 ngga? makasih…..

    Reply
    • April 7, 2015 at 8:44 am
      Permalink

      Itu kita robotnya beli jadi, so gak punya skema-nya.
      Makasih dah mampir…

      Reply
  • May 11, 2015 at 7:06 pm
    Permalink

    mas mau nanya fungsi dari base servo nya sendiri untuk apa ya?
    terima kasih

    Reply
    • May 13, 2015 at 1:06 pm
      Permalink

      Itu hanya istilah di robot arm. Maksudnya kan sebagai dasar-nya (kaki). Kalau disebut engsel ‘pinggang’ juga boleh untuk memutar seluruh ‘tubuh’ ke kiri – kanan.
      Trims

      Reply
  • May 22, 2015 at 4:38 am
    Permalink

    Mas mau tanya servo standar dengan spek apa yg dipakai kalo mau bikin arm robot 2 axis? Fungsinya cuma kaya lengan tangan, gak ada beban tambahan, cuma sekedar atur posisi gt.. Saya kurang paham spesifikasinya supaya ga salah pilih.. itu cuma saya bikin model aja, ukurannya ga sama kaya tangan, lebih kecil.. Terima kasih

    Reply
    • May 22, 2015 at 4:41 am
      Permalink

      oh iya, saya pake 2 servo aja mas, joint nya pake akrilik… kira2 pertimbanganny gimana?

      Reply
      • May 22, 2015 at 8:21 am
        Permalink

        Pakai bahan akrilik sepertinya juga bisa mas, asal yang kuat (agak tebal)

        Reply
    • May 22, 2015 at 8:28 am
      Permalink

      Hampir sama saja untuk servo, yang beda di torsi dan range derajat putarnya. Walaupun ada type kontrolnya tidak pakai pulsa PWM tapi pakai serial semacam kondo KRS2552. Masnya bisa pakai servo yang ada dipasaran yang bisa muter 0 – 180 derajat udah bisa mas.

      Reply
  • October 12, 2015 at 1:35 pm
    Permalink

    gan maunya ni….
    kalau sitem hubungan servo yang digunakan adalah serial maka bagaimana solusinya mas???

    Reply
    • October 20, 2015 at 7:45 am
      Permalink

      Tinggal sesuaikan dengan protocol serial servonya mas. Trus bikin program untuk komunikasi serialnya.

      Reply
  • November 16, 2015 at 9:09 am
    Permalink

    Mas mau tanya. Ini pake driver motor? Klo iya, driver motor apa? Dan butuh brp? Saya merakit robot lengan mr 999 e. Speknya sih pake motor DC. Klo semisal lsg disambung ke arduinonya bisa? Mohon dijawab Terimakasih.

    Reply
    • November 24, 2015 at 9:10 am
      Permalink

      Driver sudah ada di board robotnya itu mas, pakainya motor servo mas bukan dc. Konek ke arduino bisa mas, kan sama2 mikrokontroler juga.

      Reply
    • December 15, 2015 at 10:07 am
      Permalink

      Untuk memperlambat gerakan berarti memperlambat motor servo-nya. Berarti ngatur pulsa yang mengontrol servonya mas, yaitu di frekuensinya.

      Reply
    • April 2, 2016 at 9:09 am
      Permalink

      Cek lagi mas, coding-nya

      Reply
  • March 20, 2016 at 1:23 pm
    Permalink

    Min mau tanya kok di compile ga bisa ya
    Tertulis stray’\324′ in program

    Reply
    • April 2, 2016 at 9:06 am
      Permalink

      library servo-nya dah ada kan ? Teliti juga mas listig programnya. Arduino termasuk yang ‘case sensitive’ soalnya 🙂

      Reply
  • May 24, 2016 at 3:14 pm
    Permalink

    mas mau nanya, kalok kontrolnya pake potensio sama arduino gimna ya?, apa perlu rangkaian lagi?

    Reply
    • June 4, 2016 at 7:14 am
      Permalink

      Tidak perlu mas, cukup potensio konek ke pin analog trus nanti baca nilai analog trus konversi ke gerakan motor servonya.

      Reply
  • September 11, 2016 at 10:26 pm
    Permalink

    salam kenal mas,
    gini mas, rencananya saya punya tugas akhir mengenai Arm Robot menggunakan analisa kinematik. mas punya refrensi ngak ? (bentuk document atau video)

    Reply
  • September 11, 2016 at 10:30 pm
    Permalink

    salam kenal mas,
    rencananya saya mau bikin tugas akhir mengenai Arm Robot menggunakan analisa Invers Kinematik.
    mas ada referensinya ngak ? (dalam bentuk Doc, Pdf, video )

    mas, boelh minta e-mail nya ngak ? biar saling tukar pikiran

    Reply
    • September 23, 2016 at 9:15 pm
      Permalink

      Salam kenal juga mas Aro.
      Dulu teman pernah pakai inverse kinematik buat kontrol arm sama ATmega8535. Bahasanya BASCOM sama di komputer pakai Visual Basic. Agak susah mas, hehe.. tapi saya yakin mas Aro bisa, asal ada kemauan ada jalan..

      Reply
      • September 29, 2016 at 5:17 pm
        Permalink

        mas, punya documen nya ngak yg temannya mas ? buat tambah referensi

        ato ngak documen-documen mengenai invers dan foward kinematik ?
        please

        Reply
  • May 4, 2017 at 8:51 am
    Permalink

    ada file desain kerangkanya gak mas? kalau ada boleh minta.

    Reply
    • May 6, 2017 at 2:40 pm
      Permalink

      Maaf mas, gakpunya, itu beli udah jadi.
      Trims sudah mampir 🙂

      Reply
  • November 26, 2017 at 8:11 pm
    Permalink

    mau tau tanya mas, kalau pengendalinya pakai joystik PS2 itu gimana mas? terimakasih mohon pencerahannya

    Reply
    • July 18, 2018 at 11:24 am
      Permalink

      Bis mas, lain kali coba kita bikin Insya Allah

      Reply
  • March 21, 2018 at 2:43 am
    Permalink

    Mas mau nanya…? Kalo motor DC bekas tamiya di kontrol pake Arduino bisa ngga y. Tolong Di jawab.. Makasih

    Reply
    • July 18, 2018 at 11:08 am
      Permalink

      Bisa mas. Maaf baru balas

      Reply
  • March 24, 2018 at 12:10 am
    Permalink

    Mas saya kan pake NODEMCU ESP8266 mikrokontroler nya, nah servo nya 5, board apa ya yg di gunakan khusus buat servo biar semua gerak?

    Reply
    • July 18, 2018 at 11:03 am
      Permalink

      NodeMCU kan modul WiFi, kalau untuk gerakin 5 servo bisa pakai Arduino, nanti dikonekkan dengan NodeMCU secara serial juga bisa mas.

      Reply

Leave a Reply

WhatsApp chat
%d bloggers like this: