Sabtu, 14 Februari 2015

Tutorial Arduino Uno dan Motor Servo

ide dasar

          langsung aja  untuk posting kali ini saya akan membahas tentang cara menggunakan arduino uno(sini) untuk mengendalikan motor servo ,pada percobaan kali ini servo yang digunakan adalah servo mikro yang banyak dijual pada toko hobi atau bisa juga di sini

 keunggulan motor servo
        Di dalam servo terdapat gearbox yang kecil (untuk membuat gerakan yang lebih bertenaga) dan rangkaian elektronik (untuk memudahkan pengaturan). Sebuah servo standard dapat diatur posisinya dari 0 sampai dengan 180 derajat. Pengaturan posisi diatur menggunakan timed pulse, antara 1.25 milliseconds (0 derajat) dan 1.75 milliseconds (180 derajat) 1.5 milliseconds untuk 90 derajat). Waktu yang digunakan ini bervariasi dari tiap manufaktur servo. Apabila pulse yang digunakan dikirim setiap 25-50 milliseconds maka servo akan bergerak dengan sangat halus

untuk komponen yang di perlukan dalam percobaan ini antara lain 
  • 1 buah servo mikro
  • Kabel jumper
sedangkan skema rangkaian dapat di lihat sebagai berikut:

gambar.1.1 skema rangkaian  servo dan arduino


untuk gambar simulasi penempatan komponen dan board Arduino bisa di lihat di bawah ini. Gambar simulasi ini menggunakan software Fritzing yang bisa didapat di sini.


gambar 1.2 simulasi penempatan komponen


kode program
  kode program yang digunakan untuk menggerakkan servo. Tidak perlu mengetiknya karena sudah tersedia pada software Arduino. Klik menu File > Examples > Servo > Sweep.
// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop()
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}



Membuat Perubahan
  • Membuat timing sendiri  caramya dengan mengatur pulse yang digunakan untuk menggerakkan servo secara langsung (tanpa library servo). Dengan cara ini kita dapat menggerakkan servo pada 20 pin yang tersedia pada Arduino (pin digital & analog). Tetapi anda perlu merubah beberapa baris kode agar dapat mengoptimalkan hasilnya. 
         Berikut ini adalah kode dasar yang akan dipergunakan.     
         int servoPin = 9;
         int pulseTime;

       void setup()
       {
       Serial.begin(9600);
       pinMode(servoPin,OUTPUT);
       }

       void loop()
      {
       pulseTime = 2100; //(the number of microseconds
                    //to pause for (1500 90 degrees
                    // 900 0 degrees 2100 180 degrees)
        digitalWrite(servoPin, HIGH);
       delayMicroseconds(pulseTime);
       digitalWrite(servoPin, LOW);
       delay(25);
        }

 
Upload dan coba lihat hasilnya. Servo akan bergerak ke arah 180 derajat. Timing 2100 microseconds akan membuat servo bergerak ke arah 180 derajat. dibawah ini yang merupakan variasi dari kode sebelumnya.
 catatan :
untuk timing servo berbeda tergantung manufaktur jadi belum tentu timing 2100 membuat motor servo bergerak 180 derajat ,Untuk mencoba menemukan timing yang sesuai dengan servo yang anda pakai, gunakan kode program dibawah ini yang merupakan variasi dari kode sebelumnya.

int servoPin = 9;
int pulseTime;

void setup()
{
  Serial.begin(9600);
  pinMode(servoPin,OUTPUT);
}

void loop()
{
  for(pulseTime = 900; pulseTime <= 2100; pulseTime += 50) {
    Serial.println(pulseTime);
    digitalWrite(servoPin, HIGH);
    delayMicroseconds(pulseTime);
    digitalWrite(servoPin, LOW);
    delay(25);
  }
  for(pulseTime = 2100; pulseTime >= 900; pulseTime -= 50) {
    Serial.println(pulseTime);
    digitalWrite(servoPin, HIGH);
    delayMicroseconds(pulseTime);
    digitalWrite(servoPin, LOW);
    delay(25);
  }
}


Upload dan coba lihat kembali hasilnya. Servo akan bergerak ke 180 derajat dan 0 derajat berulang-ulang seperti pada program Sweep tadi. Tetapi hasilnya mungkin kurang maksimal, sudut 180 derajat dan 0 derajat-nya masih belum maksimal. Artinya servo sebenarnya belum menyentuh sudut 180 derajat atau 0 derajat. Coba rubah angka pada pulseTime, untuk yg 900 coba diperkecil dan untuk yang 2100 coba diperbesar. Anda harus menemukan angka pulseTime yang pada angka tersebut servo sudah pada posisi maksimumnya (servo tidak bergerak lagi, mencapai sudut 180/0 derajat). seperti kode berikut ini\


int servoPin = 9;
int pulseTime;

void setup()
{
  Serial.begin(9600);
  pinMode(servoPin,OUTPUT);
}

void loop()
{
  for(pulseTime = 700; pulseTime <= 2650; pulseTime += 50) {
    Serial.println(pulseTime);
    digitalWrite(servoPin, HIGH);
    delayMicroseconds(pulseTime);
    digitalWrite(servoPin, LOW);
    delay(25);
  }
  for(pulseTime = 2500; pulseTime >= 600; pulseTime -= 50) {
    Serial.println(pulseTime);
    digitalWrite(servoPin, HIGH);
    delayMicroseconds(pulseTime);
    digitalWrite(servoPin, LOW);
    delay(25);
  }
}


Agar mempermudah melihat angka pulseTime, coba gunakan Serial Monitor (Menu: Tools > Serial Monitor). Dan agar angka pulseTime yang digunakan tidak bergerak terlalu cepat, ganti kode delay(25); menjadi delay(500);.
Setelah anda mengerti dan memahami cara menggerakkan servo menggunakan Arduino,  Gunakan daya kreasi anda dan kembangkan

sekian dulu posting dari saya ,terimakasih

sumber : http://blog.famosastudio.com/2011/07/tutorial/tutorial-arduino-servo/128
              http://arduino.cc/en/Main/ArduinoBoardUno