Lompat ke konten Lompat ke sidebar Lompat ke footer

Cara merakit Robot Lengan

Robot lengan atau arm robot banyak ditemui di industri dan otomatisasi. Robot lengan ini dapat digunakan untuk mengangkat benda atau memindahkan benda dari tempat satu ke tempat lainnya. 
Untuk merakit Robot lengan (arm robot) maka bisa menggunakan motor servo dan dikontrol pergerakannya menggunakan mikrokontroller. Dalam pembahasan ini kita menggunakan mikrokontroller Arduino Uno dengan menggunakan bahasa pemograman C++.

robot lengan

Guna merakit lengan robot maka dibutuhkan berbagai alat dan bahan yaitu :
 1.   Plat almunium robot lengan
 2.   Motor servo type MG996R sebanyak 6 buah
 3.   Board Arduino UNO R3
 4.   Driver servo PCA9685
 5.   Sensor Ultrasonic
 6.   Kabel jumper
 7.   Power supply 5 V / 3 A
 8.   Obeng +
 9.   Tang lancip
10.  Bor tangan
11.  Kabel
12. Buzzer

Setelah alat dan bahan disiapkan, maka proses pertama adalah merakit lengan robot (arm robot).

bahan membuat robot lengan

Proses perakitan  robot lengan dimulai dari memasang motor servo 0 pada bagian bawah, lalu dilanjutkan persendian pada lengan robot dengan menggunakan motor servo 1, 2, 3, 4. Sedangkan untuk japit lengan robot (arm robot) diletakkan motor servo 5. 

Dalam merakit ini gunakan obeng plus dan tang. Pada saat memasang motor servo pada persendian robot waka wajib menggunakan bearing supaya pergerakan sendinya menjadi lancar. Pemasangan plat dan motor servo harus benar karena kalau tidak benar maka pergerakan sendinya bisa saja tidak lancar atau tidak sesuai. Dalam proses perakitan robot lengan ini tidak mungkin di lampirkan foto-fotonya secara detail dalam website ini, sehingga sebaiknya anda menyimak pada video dibawah ini :


sumber video : https://www.youtube.com/watch?v=WQRPdNfW80Q&t=34s

Setelah proses perakitan maka kita harus memastikan ke 6 buah servo bekerja normal dan dicari data sudut pergerakan maksimum / minimum setiap motor servo sesuai sendi pergerakannya. Karena jika pergerakan motor servo melebihi batas dalam pergerakan sendinya, maka motor bisa nyangkut atau bergerak tidak normal. Jadi data sudut pergerakan servo 1,2,3,4,5, dan 6 akan berbeda-beda sesuai pergerakannya. Didalam program sudah diatur pergerakan maksimum dan mnimum, tetapi pergerakan tersebut masih bisa di modifikasi sesuai keinginan.

Untuk mengatur pergerakan sudut motor servo maka harus memahami prinsip kerja motor servo. Motor Servo diputar berdasarkan sinyal Pulse width Modulation (PWM). Jadi sebelum merakit lengan robot harus menguasai bagaimana cara memutar motor servo sesuai sudutnya melalui sinyal PWM. Sinyal PWM bisa dibangkitkan oleh mikrokontroller arduino melalui pemograman. 

Proses pengendalian motor servo menggunakan PWM bisa ditonton  pada  video di bawah ini.


sumber video : https://www.youtube.com/watch?v=5KLiHrfpkhg&t=1224s

Setelah menguasai prinsip kerja motor servo maka anda bisa melakukan proses pemograman lengan robot. Untuk menggerakkan motor servo pada lengan robot kita tidak direkomendasikan langsung menghubungkan ke arduino uno karena lengan robot menggunakan banyak motor sehingga membutuhkan arus listrik yang lebih besar.

Untuk mengatasi hal tersebuit maka kita menambahkan power supply eksternal khusus untuk motor servo dan menggunakan driver motor servo yaitu PCA9685. Pada instalasi program Arduino IDE standar belum ada library PCA9685. Jadi anda harus menambahkan librarynya terlebih dahulu. Tentang cara penambahan library PCA9685 bisa dibrowsing di internet.

Setelah selesai menambahkan library PCA9685 lalu hubungkan arduino uno, PCA9685 dan motor servo seperti gambar di bawah ini:

DRIVER MOTOR SERVO PCA9685
sumber gambar : https://learn.adafruit.com/assets/2221

jika menggunakan banyak motor servo maka bisa dilihat pada gambar dibawah ini :

DRIVER MOTOR SERVO PCA9685
sumber gambar : https://steemit.com/utopian-io/@drencolha/adafruit-pca9685-pwm-servo-driver-setup-arduino-library-use-shown-with-an-example-project-tutorial

Setelah selesai merakit maka bisa membuat sketch program Arduino robot lengan seperti dibawah ini :

//Program robot lengan mengunakan PCA9685
//Oleh : Hendry Kurniawan,S.Pd

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
uint8_t servonum0 = 0; //servo 0 paling bawah untuk kanan kiri
uint8_t servonum1 = 1; //sevo 1 sendi pertama untuk naik turun
uint8_t servonum2 = 2; //sevo 2 sendi kedua untuk naik turun
uint8_t servonum3 = 3; //sevo 3 sendi ketiga untuk naik turun
uint8_t servonum4 = 4; //sevo 4 sendi rotate kiri kanan pada capit
uint8_t servonum5 = 5; //sevo 5 capit buka tutup

const int PIN_TRIG = 13;
const int PIN_ECHO = 12;
int BUZ = 11;

void setup(){
  delay(1000);
  Serial.begin (9600);
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);
  pinMode(BUZ, OUTPUT);
  pwm.begin();
  pwm.setOscillatorFrequency(27000000);
  pwm.setPWMFreq(50); 
  delay(1000);

  //buzzer
  digitalWrite(BUZ,HIGH);
  delay(1000);
  digitalWrite(BUZ,LOW);
  delay(500);
  digitalWrite(BUZ,HIGH);
  delay(1000);
  digitalWrite(BUZ,LOW);
  delay(500);
  digitalWrite(BUZ,HIGH);
  delay(1000);
  digitalWrite(BUZ,LOW);
  delay(1000);

  //Robot standbye
    pwm.setPWM(servonum0, 0, 250); //
    delay(1000);
    pwm.setPWM(servonum1, 0, 250); //
    delay(1000);
    pwm.setPWM(servonum2, 0, 400); //
    delay(1000);
    pwm.setPWM(servonum3, 0, 400); //
    delay(1000);
   
    pwm.setPWM(servonum4, 0, 100); // kiri
    delay(1000);
    pwm.setPWM(servonum4, 0, 400); // kanan
    delay(1000);
    pwm.setPWM(servonum4, 0, 290); // center.
    delay(1000);

    pwm.setPWM(servonum5, 0, 220); // buka capit
    delay(1000);
    pwm.setPWM(servonum5, 0, 320); // tutup capit
    delay(1000);
}

void loop(){
  // Berikan isyarat HIGH pada pin trig 10 mikrodetik
     digitalWrite(PIN_TRIG, HIGH);
     delayMicroseconds(10);  // Tunda 10 mikrodetik
     digitalWrite(PIN_TRIG, LOW);
 
  // Baca hasilnya di pin echo
     double selang = pulseIn(PIN_ECHO, HIGH);
 
  // Hitung jarak yang diperoleh
     double jarak = 0.0343 * ( selang / 2);
 
  //deteksi objek jika ada lalu ambil objek
      if (jarak > 4.5)
        {
        Serial.println("Barang tidak ada atau posisi belum tepat");
        }
      else
        {
        digitalWrite(BUZ,HIGH);
        delay(300);
        digitalWrite(BUZ,LOW);
        delay(100);
        Serial.print(jarak);
        Serial.println(" cm");
        delay(1000);
       
        //----MENUJU OBJEK
       
        //-----------Servo 2 turun
        for (uint16_t pulselen2 = 400; pulselen2 > 330; pulselen2--)
          {
          pwm.setPWM(servonum2, 0, pulselen2);
          delay (10);
          }

        //-----------Servo 1 angkat sedikit
        for (uint16_t pulselen1 = 250; pulselen1 > 210; pulselen1--)
          {
          pwm.setPWM(servonum1, 0, pulselen1);
          delay (10);
          }
         
         //-----------Servo 0 menuju objek
        for (uint16_t pulselen0 = 250; pulselen0 < 380; pulselen0++)
          {
          pwm.setPWM(servonum0, 0, pulselen0);
          delay (10);
          }

       //-----------Servo 3 turun
        for (uint16_t pulselen3 = 400; pulselen3 < 450; pulselen3++)
          {
          pwm.setPWM(servonum3, 0, pulselen3);
          delay (10);
          }

        //-----------Servo 5 buka capit
        for (uint16_t pulselen5 = 320; pulselen5 > 210; pulselen5--)
          {
          pwm.setPWM(servonum5, 0, pulselen5);
          delay (10);
          }
     
       //-----------Servo 1 turun
        for (uint16_t pulselen1 = 210; pulselen1 < 250; pulselen1++)
          {
          pwm.setPWM(servonum1, 0, pulselen1);
          delay (10);
          }

        //-----------Servo 2 turun
        for (uint16_t pulselen2 = 330; pulselen2 > 280; pulselen2--)
          {
          pwm.setPWM(servonum2, 0, pulselen2);
          delay (20);
          }

        delay(2000);
       
        //-----------Servo 5 tutup capit
        for (uint16_t pulselen5 = 220; pulselen5 < 280; pulselen5++)
          {
          pwm.setPWM(servonum5, 0, pulselen5);
          delay (10);
          }

        //-----------Servo 2 naik
        for (uint16_t pulselen2 = 280; pulselen2 < 330; pulselen2++)
          {
          pwm.setPWM(servonum2, 0, pulselen2);
          delay (10);
          }

        //-----------Servo 1 naik
        for (uint16_t pulselen1 = 250; pulselen1 > 200; pulselen1--)
          {
          pwm.setPWM(servonum1, 0, pulselen1);
          delay (10);
          }

        //-----------Servo 3 turun
        for (uint16_t pulselen3 = 450; pulselen3 < 500; pulselen3++)
          {
          pwm.setPWM(servonum3, 0, pulselen3);
          delay (10);
          }

        //------MENUJU PELETAKAN BARANG
        //-----------Servo 0 menuju peletakan barang
        pwm.setPWM(servonum0, 0, 150);
       
        /*for (uint16_t pulselen0 = 380; pulselen0 > 150; pulselen0--)
          {
          pwm.setPWM(servonum0, 0, pulselen0);
          delay (5);
          }*/
       
        //-----------Servo 3 naik
        for (uint16_t pulselen3 = 500; pulselen3 > 450; pulselen3--)
          {
          pwm.setPWM(servonum3, 0, pulselen3);
          delay (10);
          }

        //-----------Servo 1 turun
        for (uint16_t pulselen1 = 200; pulselen1 < 240; pulselen1++)
          {
          pwm.setPWM(servonum1, 0, pulselen1);
          delay (10);
          }

        //-----------Servo 4 putar ke kiri
        for (uint16_t pulselen4 = 290; pulselen4 > 250; pulselen4--)
          {
          pwm.setPWM(servonum4, 0, pulselen4);
          delay (10);
          }

        //-----------Servo 2 turun
        for (uint16_t pulselen2 = 330; pulselen2 < 350; pulselen2++)
          {
          pwm.setPWM(servonum2, 0, pulselen2);
          delay (20);
          }

        //-----------Servo 1 turun
        for (uint16_t pulselen1 = 240; pulselen1 < 300; pulselen1++)
          {
          pwm.setPWM(servonum1, 0, pulselen1);
          delay (20);
          }
       
        delay(1000);
       
        //-----------Servo 5 buka capit
        for (uint16_t pulselen5 = 300; pulselen5 > 220; pulselen5--)
          {
          pwm.setPWM(servonum5, 0, pulselen5);
          delay (10);
          }

        delay(1000);
        //-----------MENUJU TEMPAT STANDBYE

        //-----------Servo 1 naik
        for (uint16_t pulselen1 = 300; pulselen1 > 250; pulselen1--)
          {
          pwm.setPWM(servonum1, 0, pulselen1);
          delay (10);
          }

        //-----------Servo 2 naik
        for (uint16_t pulselen2 = 350; pulselen2 < 400; pulselen2++)
          {
          pwm.setPWM(servonum2, 0, pulselen2);
          delay (20);
          }

        //-----------Servo 3 naik
        for (uint16_t pulselen3 = 450; pulselen3 > 400; pulselen3--)
          {
          pwm.setPWM(servonum3, 0, pulselen3);
          delay (10);
          }

        //-----------Servo 0 menuju titik standbye
        for (uint16_t pulselen0 = 150; pulselen0 < 250; pulselen0++)
          {
          pwm.setPWM(servonum0, 0, pulselen0);
          delay (10);
          }


        //-----------Servo 2 turun
        for (uint16_t pulselen2 = 400; pulselen2 > 300; pulselen2--)
          {
          pwm.setPWM(servonum2, 0, pulselen2);
          delay (20);
          }

        //-----------Servo 5 tutup capit
        for (uint16_t pulselen5 = 220; pulselen5 < 340; pulselen5++)
          {
          pwm.setPWM(servonum5, 0, pulselen5);
          delay (10);
          }

        //-----------Servo 4 putar ke center
        for (uint16_t pulselen4 = 250; pulselen4 < 290; pulselen4++)
          {
          pwm.setPWM(servonum4, 0, pulselen4);
          delay (10);
          }
         
        //-----------Servo 1 turun
        for (uint16_t pulselen1 = 250; pulselen1 < 285; pulselen1++)
          {
          pwm.setPWM(servonum1, 0, pulselen1);
          delay (20);
          }
        }
      delay(1000);
   

}

Hasil dari program tersebut akan menghasilkan pergerakan lengan robot seperti di bawah ini:



sumber video : https://www.youtube.com/watch?v=j8HDogCJZmE


Demikianlah pembahasan tentang cara merakit  lengan robot menggunakan arduino uno R3. Jika ada yang ingin didiskusikan bisa ditulis di kolom komentar. 

2 komentar untuk "Cara merakit Robot Lengan"

  1. klo ingin mendalami ilmu ttg robotika itu di Teknik Mesin / di Teknik Elektro? Ato malah di Fakultas Kependidikan jurusan Elektro ato dimna? Mohon info ny wa/sms sy di 089656253648.. ya..

    BalasHapus