Kontrol Robot ARM dengan Arduino

Iklan EDUROBO

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 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”);
 }
99 proyek arduino
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 = “”;
        }
   }
}

Iklan MM ARDU

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
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…

This entry was posted in Arduino. Bookmark the permalink.

46 Responses to Kontrol Robot ARM dengan Arduino

  1. muholidin says:

    bisakah robot ARM ini memakai sensor atau sistem otomatis?

  2. yanuaristo says:

    Bisakah dijelaskan pin-pinnya dari servo ke arduino?
    saya sudah mengikuti step by step program seperti yg dijelaskan di http://arduino.cc/playground/Learning/SingleServoExample namun servo tidak mau bergerak sama sekali
    mohon pencerahannya,terimakasih

    • admin says:

      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.

  3. syehu says:

    mw tanya itu pake arduino yang apa

  4. ilham says:

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

    • admin says:

      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.

  5. ilham says:

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

    • admin says:

      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

  6. rizal says:

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

  7. wahyu says:

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

    • admin says:

      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

  8. antonius says:

    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

    • admin says:

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

  9. andi says:

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

  10. ndunk2 says:

    itu forward kinematik.ya, ??

  11. fungky says:

    Ini arus dari arduinonya kuat y untuk 5 servo mas?

    apa ada pengaman arusnya?
    atau dengan rangkaian biasa?

  12. tian says:

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

  13. Pramudya Widyantoro says:

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

    • admin says:

      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

  14. Mario Aditya M says:

    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

    • Mario Aditya M says:

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

    • admin says:

      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.

  15. kurniaec says:

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

  16. Andha says:

    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.

    • admin says:

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

  17. Ahmad says:

    gan mau nanya nih,,,kalau misalkan pergerakan lengannya kita perlambat caranya gimana yah?? supaya pergerakan posisi servo membentuk kaya huruf S…
    untuk lebih jelasnya kya grafik ini gan:
    https://drive.google.com/file/d/0B1bH6tH7X6JxZTFFaE5KdWwxMFk/view?usp=sharing

    Mohon pencerahannya..

    • admin says:

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

  18. yusuf123@ says:

    kok gak bisa

  19. syky says:

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

    • admin says:

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

  20. candra says:

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

    • admin says:

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

  21. Anggi says:

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

  22. AroP says:

    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

    • admin says:

      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..

Leave a Reply