Tutorial Dasar Arduino Mengendalikan Motor Servo


Pada tutorial Arduino kali ini akan diulas mengenai dasar mengendalikan motor servo. Motor servo merupakan sebuah motor dengan sistem feedback close loop. Dimana posisi dari motor servo akan disampaikan kembali ke rangkaian kendali yang ada di dalam motor servo tersebut. Poros motor dihubungkan dengan rangkaian kendali, sehingga jika putaran poros belum sampai pada posisi yang diperintahkan maka rangkaian kendali akan terus memberikan perbaikan posisi, hingga poros motor mencapai posisi yang diperintahkan. Dalam tutorial ini akan dibahas tentang bagaimana mengendalikan motor servo dengan menggunakan potentiometer maupun melalui komunikasi serial dengan komputer.

<img src="arduino.png" alt="arduino">


Mengendalikan Motor Servo dengan Potentiometer
Untuk percobaan pertama ialah mengendalikan motor servo dengan potentiometer yang terhubung ke board Arduino. Arduino akan membaca nilai tegangan dari potentiometer sebagai data nilai ADC. Nilai data ADC tersebut akan dipetakan dalam perbandingan sudut antara 0 hingga 179 derajad. Semakin besar tegangan, maka semakin besar nilai ADC, sehingga semakin besar pula sudut yang akan dibentuk oleh poros motor servo tersebut. Berikut ini adalah video tutorial mengendalikan putaran motor servo dengan potentiometer.



Untuk wiring atau pengkabelan yang perlu dilakukan ialah sebagai berikut.
  • Pin Arduino 9 dihubungkan dengan kabel signal data motor servo
  • Pin GND Arduino dihubungkan dengan kabel ground motor servo juga salah satu potentiometer
  • Pin VCC 5 volt Arduino dihubungkan dengan kabel sumber tegangan motor servo juga salah satu potentiometer
  • Pin analog A0 Arduino membaca tegangan dari potentiometer
Sedangkan untuk source code (sketch) Arduino mengendalikan motor servo dengan potentiometer ialah sebagai berikut.

/*
Program mengendalikan motor servo
menggunakan potentiometer

Loki Lang
*/

#include <Servo.h>

Servo langServo;
int val;

void setup()
{
  Serial.begin(9600);
  langServo.attach(9);
}

void loop()
{
  val = analogRead(A0);
  val = map(val, 0, 1023, 0, 180);
  Serial.print("Sudut motor servo ");
  Serial.println(val);
  langServo.write(val);
  delay(15);
}



Pemetaan untuk sudut motor servo dari nilai ADC 0 hingga 1023 dipetakan menjadi antara 0 hingga 180 derajad.

Mengendalikan Motor Servo malalui Serial Monitor
Untuk percobaan yang kedua ialah mengendalikan motor servo dengan komputer via komunikasi serial. Dengan menggunakan Serial Monitor Arduino IDE, untuk memberikan input nilai sudut dari motor servo tersebut.
Untuk wiring atau pengkabelan yang perlu dilakukan ialah sebagai berikut.
  • Pin Arduino 9 dihubungkan dengan kabel signal data motor servo
  • Pin GND Arduino dihubungkan dengan kabel ground motor servo
  • Pin VCC 5 volt Arduino dihubungkan dengan kabel sumber tegangan motor servo
Sedangkan untuk source code (sketch) Arduino mengendalikan motor servo melalui Serial Monitor ialah sebagai berikut.

/*
Program mengendalikan motor servo
melalui Serial Monitor Arduino IDE

Loki Lang
*/

#include <Servo.h>

Servo langServo;
int val;
String langString = "";

void setup()
{
  Serial.begin(9600);
  langServo.attach(9);
}

void loop()
{
  int degree;
  Serial.print("Masukkan sudut motor servo ");
  int langChar = Serial.read();
  if(isDigit(langChar))
  {
    langString += (char)langChar;   
  }
  if(langChar == '\n')
  {
    val = langString.toInt();
    Serial.println(val);
    langString = "";
    if(val > 179)
    {
      val = 179;
    }
    for(degree = 0; degree = val; degree++)
    {
      langServo.write(degree);
      delay(15);
    }
    for(degree = val; degree = 0; degree--)
    {
      langServo.write(degree);
      delay(15);
    }
  }
}



Berbeda dengan cara yang pertama, pada cara yang kedua ini, selain menggunakan Serial Monitor Arduino IDE, perubahan sudut motor servo juga dilakukan secara bertahap. Dengan menggunakan perulangan for(), memungkinkan perubahan sudut motor servo sebesar 1 derajad, hingga mencapai set point sudut yang diinginkan. Hal ini akan menghasilkan perubahan sudut yang relatif lebih halus dibandingkan dengan cara yang pertama.
Lihat juga mengenai modul driver kendali motor Arduino.