Mahir Arduino Sketch dan Elektro secara praktek

Showing posts with label Servo. Show all posts
Showing posts with label Servo. Show all posts
Pada proyek ini adalah pengenalan bagaiman mengatur 1 servo menggunaka potentiometer. (Baca juga Artikel :Pengenalan Servo Control)

Komponen
  • Standard RC Servo
  • Rotary Potentiometer
  • 220 ohm resistor


Skema



Sketch
#include <Servo.h>
Servo servo1;
void setup(){
  servo1.attach(5);
}


void loop(){
  int angle = analogRead(0); // Read the pot value
  angle=map(angle, 0, 1023, 0, 180);
  servo1.write(angle); // Write the angle to the servo
  delay(15); // Delay of 15ms to allow servo to reach position
}


Pembahasan Kode

Pertama kita include library yang digunakan
#include <Servo.h>

Kemudian deklarasi objek servo:
Servo servo1; // Create a servo object

Pada fungsi loop, attach servo1 pada pin 5
  servo1.attach(5);

Perintah attach digunakan objek servo untuk mengatur pin yang digunakan. Pada proyek digunakan 1 parameter saja, yaitu pin. Namun perintah attach bisa menerima 3 parameter, yaitu, parameter pertama adalah pin, parameter kedua adalah sudut minimum (0 derajat) (default adalah 544), parameter adalah sudut maksimum (180 derajat) (default adalah 2400).

Untuk kebutuhan umum, cukup menggunakan 1 parameter saja, yaitu parameter pin.

Kita dapat menghubungkan 12 servo pada Arduino Duemilanove (atau sejenis) dan hingga 48 servos pada Arduino Mega—cocok untuk aplikasi robotik.

Perhatian
Library ini mendisable fungsi analogWrite (PWM) function pada pin 9 dan 10. Pada Arduino Mega kita dapat menggunakan 12 motors tanpa menginterfensi fungsi PWM. 

Pada main loop, baca nilai analog dari potentiometer yang terhubung ke pin analog 0.
  int angle = analogRead(0); // Read the pot value

Petakan nilai bacaan dari potentiometer pada jangkauan 0 -180, dimana akan mengubah sudut dari lengan servo.
  angle=map(angle, 0, 1023, 0, 180);

Setelah diketahui nilai sudut, kita perintahkan servo untuk mengubah lengannya ke sudut tersebut
  servo1.write(angle); // Write the angle to the servo

Kemudian beri waktu 15 ms untuk memberi waktu bagi servo menggerakan keposisi yang diperintahkan.
  delay(15); // Delay of 15ms to allow servo to reach position

Sebagai tambahan, kita dapat menggunakan perintah detach() servo dari pin, hingga pin dapat untuk keperluan lainnya. Atau kita juga bisa menggunakan perintah read()  untuk membaca sudut saat ini.

Untuk lebih lanjut mengenai library servo, bisa dibaca di http://arduino.cc/en/Reference/Servo.

Nah, semoga artikel pengenalan servo ini bermanfaat. Selamat berkreasi.

Artikel Sebelumnya : Display Suhu
Artikel Berkaitan Pengenalan Servo Control



Servo adalah sebuah kotak kecil dengan DC motor, 1 set roda gigi antara motor dan poros keluaran, dengan mekanisme position sensing dan rangkaian kontrol. Mekanisme position-sensing akan memberikan balikan berupa posisi servo pada rangkaian kontrol, yang digunakan oleh motor untuk mengatur lengan servo pada posisi yang diharapkan.

Servo tersedia dalam berbagai ukuran, kecepatan, kekuatan torsi dan presisi putaran. Beberapa ada yang cukup mahal harganya. Makin kuat torsi servo atau makin presisi, makin mahal harganya.

Servo umum digunakan pada pesawat radio-control, mobil atau kapal.

Posisi servo diatur dengan memberikan pulsa. Pulsa ini dalam  PWM. Lebar dari pulsa diukur dalam milliseconds. Kecepatan pengiriman pulsa tidak terlalu penting. Hanya lebar pulsa yang digunakan oleh rangkaian kontrol. Umumnya kecepatan pulsa berkisar antara 400Hz - 50Hz.

Umumnya untuk servo standar, posisi tengah dapat diraih dengan memberikan pulsa dengan lebar 1.5 millisecond. posisi -45 derajat dari tengah memerlukan pulsa dengan lebar 1 millisecond. Dan +45 derajat  memerlukan 2 millisecond pulsa.

Namun adalah praktik yang baik untuk membaca datasheet untuk mengetahui lebar pulsa yang diperlukan untuk mencapai sudut yang diinginkan.

Bila Anda menggunakan library servo, kita tidak perlu terlalu khawatir. Librari akan mengatur nilai PWM yang diperlukan untuk menggerakan servo. Kita hanya perlu memberikan sudut yang diinginkan, library akan mengkonversi menjadi lebar pulsa yang dibutuhkan untuk menggerakan servo ke sudut yang diinginkan.

Beberapa jenis servo dapat melakukan putaran kontinu. Bila Anda hanya memiliki standar servo, anda dapat memodifikasi servo tersebut untuk melakukan putaran kontinu.

Rotasi yang kontiune sama dengan memerintahkan servo untuk berputar antara 0 - 180 derajat.

Nilai 0 akan memberikan rotasi dengan kecepatan penuh dalam satu arah, nilai 90 akan stasioner, dan nilai 180 akan memberikan rotasi dengan kecepatan penuh ke arah yang berlawanan. Nilai di antara ini akan membuat servo berotasi disatu arah atau yang lain dan pada kecepatan yang berbeda.

Servo rotasi kontinyu sangat bagus untuk digunakan pada proyek robot kecil. Servo dapat dihubungkan ke roda untuk memberikan kontrol kecepatan dan arah yang akurat dari masing-masing roda.

Ada jenis lain dari servo yang dikenal sebagai aktuator linier yang memutar poros ke posisi yang diinginkan, memungkinkan Anda untuk mendorong dan menarik item yang terhubung ke ujung poros.

Servo jenis ini sering digunakan dalam progam TV MythBusters oleh Grant Imahara, ahli robotik pada acara tersebut.

Perhatikan jika servo "menggeram" di salah satu ujung rentang, arduino sedang mencoba menggerakan servo diluar jangkauannya, dapat menyebabkan arus yang tinggi.

Hal ini dapat dicegah dengan memberikan argumen ke-2 dan ke-3 saat menggunakan perintah servo.attach( ),  meningkatkan lebar pulsa minimum dari 544 microsecond default ata menurunkan lebar pulsa maksimum dari 2400 microsecond default hingga "geraman" tidak terjadi lagi saat servo mencapai ujung rentang.