Mengatur kecepatan servo dengan arduino

Motor servo dikendalikan oleh lebar sinyal (PWM) yang berbanding lurus dengan posisi tap potensio pada kontrol-nya. Oleh karena itu kecepatan servo bergantung pada perbedaan antara nilai setara dari sinyal PWM dan nilai analog potensio yang ada pada motor servo. Semakin besar perbedaannya maka kecepatannya akan semakin tinggi, begitu juga sebaliknya, jika nilai setara-nya sama maka kecepatan servo = 0.

Untuk mengontrol kecepatan servo, dibutuhkan suatu fungsi yang menggerakkan servo setiap derajat perpindahannya (0..180) dengan penambahan waktu jeda diantaranya.

Skema mengendalikan kecepatan servo:

Dan fungsi pengaturan kecepatan servo dalam contoh sketch:

#include <Servo.h>

#define pinServo A0
Servo myservo;

void setup() {
  Serial.begin(9600);
  Serial.println("Mengatur kecepatan servo");
  Serial.println("https://www.project.semesin.com/");
  Serial.println();

  myservo.attach(pinServo);
  myservo.write(0);
  delay(500);
}

void loop() {
  //servoSpeed(Servo servo, int sudut, uint8_t Speed)
  servoSpeed(myservo, 180, 255);//speed dalam derajat/ms
  servoSpeed(myservo, 0, 200);
  servoSpeed(myservo, 180, 150);
  servoSpeed(myservo, 0, 100);
  servoSpeed(myservo, 180, 50);
  servoSpeed(myservo, 0, 0);//berhenti

  while (1);
}

void servoSpeed(Servo servo, int sudut, uint8_t Speed)
{
  if(Speed == 0)
  {
    return;
  }
  int posisiSekarang = servo.read();
  for (int i = posisiSekarang; i != sudut; (posisiSekarang > sudut) ? i-- : i++)
  {
    servo.write(i);
    if (Speed > 174)
    {
      delayMicroseconds((256 - Speed) * 200);//0.12 detik/60 derajat
    }
    else
    {
      delay((uint16_t)(256 - Speed) * 0.2f);//0.12 detik/60 derajat
    }
  }
  servo.write(sudut);
}

Leave a Reply

Your email address will not be published. Required fields are marked *