Merakit Robot Lengan Menggunakan 6 buah Motor servo Langkah Detail

Merakit Robot Lengan Menggunakan 6 buah Motor servo Langkah Detail. Mari merakit Robot Lengan menggunakan 6 buah motor servo. Robot lengan ini banyak ditemui di industri dan otomatisasi. Robot lengan dapat kita gunakan untuk mengangkat benda atau memindahkan benda dari tempat satu ke tempat lainnya.

Untuk merakit Robot lengan (arm robot) maka anda bisa menggunakan motor servo dan dikontrol pergerakannya menggunakan mikrokontroller. Dalam pembahasan ini kita menggunakan mikrokontroller Arduino Uno dengan menggunakan bahasa pemograman C++.Untuk merakit lengan robot kita membutuhkan berbagai alat dan bahan yaitu :
  • Plat almunium robot lengan
  • Motor servo type MG996R sebanyak 6 buah
  • Board Arduino UNO R3
  • Driver servo PCA9685
  • Sensor Ultrasonic
  • Kabel jumper
  • Power supply 5 V / 3 A
  • Obeng +
  • Tang lancip
  • Bor tangan
  • Kabel
  • Buzzer

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

Merakit Robot Lengan Menggunakan 6 buah Motor servo Langkah Detail

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

Saat merakit robot lengan kita banyak gunakan obeng plus dan tang. Pada saat memasang motor servo pada persendian robot waka wajib menggunakan bearing supaya pergerakan sendinya menjadi lancar. Harap diperhatikan bahwa pemasangan plat dan motor servo harus dilakukan benar karena kalau tidak benar maka pergerakan sendinya bisa saja tidak lancar atau tidak sesuai. 


Mohon maaf, dalam proses perakitan robot lengan ini kami tidak bisa melampirkan foto-fotonya secara detail dalam website ini, sehingga sebaiknya anda menyimak pada video dibawah ini :

https://www.youtube.com/watch?v=WQRPdNfW80Q&t

Setelah kita melakukan 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 dapat 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. Untuk jelasnya tentang pembahasan PWM bisa lihat disini

Jika anda ingin mengetahui cara mengendalikan putaran motor servo menggunakan arduino maka bisa buka materi di website ini, dengan cara klik mengendalikan motor servo. Jika anda merasa penjelasannya masih kurang maka bisa tonton video youtubenya tentang motor servo yaitu pada channel youtube "OTOMOTIF-SMKN1SKL" judulnya : Tutorial motor Servo Arduino.

Setelah kita mampu menguasai prinsip kerja motor servo maka anda bisa melakukan proses pemograman lengan robot. Untuk menggerakkan motor servo yang banyak pada lengan robot maka jangan menggunakan catu daya 5 volt langsung keluaran dari Arduino uno karena arus listriknya terbatas. Jadi khusus catu daya motor servonya kita  menggunakan catu daya eksternal tersendiri misalnya power supply 5 volt/ 3 s.d 5 Ampere.

Sebagai kita ketahui bahwa pengendali motor servo yang banyak maka kita membutuhkan modul driver khusus motor servo yaitu modul  PCA9685. Pada program Arduino IDE standar belum dilengkapi library PCA9685. Jadi anda harus menambahkan librarynya terlebih dahulu. Tentang cara penambahan library PCA9685 bisa dibrowsing di internet.

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

https://learn.adafruit.com/assets/2221

Jika menggunakan motor servo yang bnyak maka bisa menggunakan semua output modul PCA9685. Untuk jelasnya bisa dilihat pada gambar dibawah ini : 

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

Pada robot lengan ini kita menggunakan juga sensor ultara sonic untuk mendeteksi objek/benda. Pada saat benda terdeteksi maka robot akan aktif dan pada saat benda tidak terdeteksi maka robot selalu standbye menunggu bendanya ada.Type Sensor Ultarasonic yang digunakan adalah HC-SR04. Pin Trig pada HC-SR04 dihubungkan  ke pin 13 Arduino Uno dan pin Echo HC-SR04 dihubungkan ke pin 12 Arduino Uno. Sedangkan Tegangan Vcc HC-SR04 hubungkan dengan 5 volt Arduino dan GND HC-SR04 disatukan dengan GND Arduino Uno.

Selain itu, robot lengan ini dilengkapi juga dengan buzzer. Buzzer dihubungkan dengan pin 11 Arduino. Buzzer kita gunakan sebagai tanda isyarat. Pada saat robot pertama kali di hidupkan akan ada bunyi buzzer 3 kali, ini memberi peringatan di sekitar robot agar jangan terlalu dekat dengan lengan robot karena robot sudah aktif. Tanda bunyi buzzer berikutnya adalah saat ada objek atau benda yang akan dipindahkan sudah terpasang dengan benar di posisinya. Selama benda tidak terpasang dengan tepat di posisinya maka buzzer tidak akan berbunyi. Jika buzzer berbunyi maka robot akan segera bereaksi untuk memindahkan barang tersebut. 

Saatnya mengupload sketch, selesai merakit maka bisa membuat sketch program Arduino robot lengan seperti dibawah ini :


#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++)
          {
      nbsp;    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);
   
}
 
Berikut adalah hasil dari sketch tersebut akan menghasilkan pergerakan lengan robot seperti di bawah ini: 


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

Itulah uraian Cara merakit Robot Lengan menggunakan 6 buah motor servo yaitu tentang cara merakit lengan robot menggunakan arduino uno R3.