Tutorial #10: Kawalan SERVO dengan Servo.h Library

Dalam Tutorial ini, anda akan pelajari bagaimana mengawal Servo dengan menggunakan library Servo.h .

Servo.h Library

Servo seperti SG90 dan servo-servo yang serupa, menggunakan input PWM-Berkala 2000ms untuk mengawal mereka. PWM-Berkala adalah berlainan dari PWM dari Pin PWM Arduino. Perbezaan paling ketara adalah dari segi frequency signal PWM mereka.

PWM-Berkala mempunyai frequency yang rendah iaitu pada 50Hz. Bagi kawalan servo, servo hanya mengenali signal High selama 1000ms sebagai signal paling rendah, 1500ms sebagai signal kedudukantengah, dan signal 2000ms sebagai signal maksium.

  • 1000ms = pusingan  0 darjah
  • 1500ms = pusingan  90 darjah
  • 2000ms = pusingan  180 darjah

Dengan menggunakan Servo.h Library, kawalan masa-berkala di atas dikawal oleh software, dan algorythm kawalan telah dipermudahkan. Paling menarik, servo dapat di kawal pada hampir semua Pin Digital dan juga pada hampir semua Pin Analog Arduino dengan menggunakan Servo.h Library.

Untuk mengetahui lebih lanjut mengenai signal PWM, PPM dan PWM-Berkala kami syorkan anda ikuti artikel berikut:

  • PWM, PPM & PWM-Berkala

PERKARA ASAS SEBELUM MULAKAN TUTORIAL

cover-photo-ide

Bagi menggunakan Servo.h Library, cara-caranya adalah seperti berikut:
(gunakan rajah di atas sebagai panduan)

  • Include-kan Servo.h Library dalam DEFINING AREA
    #include <Servo.h>
    
  • Berikan nama pada Servo anda dalam DEFINING AREA

    #include <Servo.h>
    
    Servo servoSaya1;
    
  • Declare Pin, dalam Void Serup()
    void setup(){
     servoSaya1.attach(3);
     //gunakan algorythm .attach
     //dan letakkan nombor pin sambungan
    }
    
  • Berikan satu kedudukan awal pada servo dalam Void Setup()
    supaya servo tidak meracau

    void setup(){
     servoSaya1.attach(3);
    
     servoSaya1.write(90);
     //gunakan algorythm write untuk arahkan servo
     //90 adalah bermakan 90 darjah
     //iaitu kedudukan tengah bagi semua servo
    }
    
  • Kawal servo dengan nilai range 0~180 dengan menggunakan
    algorythm .write

    void loop(){
     servoSaya1.write(180);
    }

Teruskan dengan Tutorial ini, untuk memahami cara mengawal servo.

Dalam tutorial ini, komponen-komponen berikut perlu disediakan:

  1. Arduino Uno (atau yang lain) (1 unit)
  2. Servo SG90 atau servo lain (1 unit)
  3. Potentiometer 10k ohm (1 unit)
  4. Jumper cable
  5. Breadboard (1 unit)

LANGKAH #1: SAMBUNGAN LITAR

Sambungkan litar anda seperti gambarajah berikut:

KAWALAN SERVO - DIAGRAM

LANGKAH #2: CODING/SKETCH 

Copy sketch di bawah dan pastekan dalam Arduino IDE anda.

//Tutorial #10 : Kawalan Servo
//Code disediakan oleh MatGyver.my

#include <Servo.h>
//masukkan library Servo.h
//library sudah pre-install dalam IDE

Servo servoSaya1;
//berikan nama pada servo
//disini kami namakanservo servoSaya1

int dataSensor;
int dataBaru;
//declare variable untuk simpan data input Sensor

void setup() {
// masukkan code setup di sini, Void Setup berjalan sekali sahaja

 pinMode(A0, INPUT);
 //declare pin A0 sebagai INPUT untuk potentiometer

 servoSaya1.attach(3);
 //settingkan servo pada pin 3

 servoSaya1.write(90);
 //berikan kedudukan awal servo pada 90 darjah
 //iaitu ditengah, supaya servo tidak meracau

 delay(100);
 //letak sedikit delay untuk program setup

}//penutup Void Setup

void loop() {
// masukkan code utama di sini, untuk program yang berulang

 dataSensor = analogRead(A0);
 dataBaru = map(dataSensor, 0, 1023, 0, 180);
 //map dan convert dataSensor dari range 0~1023
 //kepada dataBaru range 0~180
 //servo library hanya boleh mengawal servo dengan 0~180 shj

 servoSaya1.write(dataBaru);
 //gunakan ".write" untuk kawal servo mengikut potentiometer
 
 delay(15);
 //berikan sedikit delay supaya loop tidak terlalu laju
 //untuk servo mampu mengikut arahan

} //penutup Void Loop

Atau, anda boleh download file sketch .ino untuk tutorial ini di URL berikut:

Setelah sketch di-upload, anda dapat kawal kedudukan putaran servo dengan putaran Potentiometer.

PERHATIAN! : Servo SG90 adalah antara beberapa servo dalam pasaran yang mempunyai pergerakan dari 0 darjah sehingga 180 darjah. Ia juga dikenali sebagai servo 180 degree. Bagi kebanyakan Servo yang branded seperti FUTABA, HITEC dan lain-lain, pergerakan mereka mempunyai had limitasi dari 40 darjah ke maksimum 160 darjah sahaja. Kawalan lebih dari range ini boleh merosakkan servo-servo branded.

Anda juga boleh mengawal servo dengan menggunakan PS2 Analog Joystick Module dan coding yang sama di atas. Rajah diagramnya adalah seperti berikut:

KAWALAN SERVO - DIAGRAM 2

Tutorial BONUS – AUTO-Servo

Dalam tutorial bonus ini, anda akan pelajari bagaimana menggerakkan servo secara auto dari program. Tutorial ini lebih kurang seperti tutorial Auto-Malap/Terang LED yang menggunakan for() Loop.

LANGKAH #1 : SAMBUNGAN LITAR
Sambungkan litar anda seperti gambarajah berikut:

KAWALAN SERVO- BONUS DIAGRAM

LANGKAH #2 : CODING/SKETCH
Copy sketch di bawah dan pastekan dalam Arduino IDE anda.

//Tutorial #10 : Kawalan Servo BONUS- AUTO
//Code disediakan oleh MatGyver.my

#include <Servo.h>
//masukkan library Servo.h
//library sudah pre-install dalam IDE

Servo servoSaya1;
//berikan nama pada servo
//disini kami namakanservo servoSaya1

void setup() {
// masukkan code setup di sini, Void Setup berjalan sekali sahaja

 servoSaya1.attach(3);
 //settingkan servo pada pin 3

 servoSaya1.write(90);
 //berikan kedudukan awal servo pada 90 darjah
 //iaitu ditengah, supaya servo tidak meracau

 delay(100);
 //letak sedikit delay untuk program setup

}//penutup Void Setup

void loop() {
// masukkan code utama di sini, untuk program yang berulang

//nilai x akan memberikan value untuk kawalan servo

//dalam for loop PERTAMA, nilai x bermula dengan 0
//kemudian akan bertambah 1 untuk setiap loop berikutnya
//melalui coding x++
//loop akan berakhir setelah x mencapai nilai 180

 for(int x = 0; x < 180; x++){ //for loop PERTAMA
   servoSaya1.write(x);
   //x akan mengawal Output PWM Servo
   delay(15);//berikan delay 15ms paling laju
 }
 //loop PERTAMA akan berakhir apabila x mencapai 180

 //dalam for loop KEDUA, nilai x bermula dengan 180
 //kemudian akan berkurang 1 untuk setiap loop berikutnya
 //melalui coding x--
 //loop akan berakhir setelah x mencapai nilai 0
 
 for(int x = 180; x > 0; x--){ //for loop KEDUA
   servoSaya1.write(x);
   //x akan mengawal Output PWM Servo
   delay(15);//berikan delay 15ms paling laju
 }

} //penutup Void Loop

Atau, anda boleh download file sketch .ino untuk tutorial ini di URL berikut:

Dengan coding di atas, servo akan berputar CW dan ke CCW dengan automatic. Tingkatkan kelajuan putaran dengan menggantikan x++ kepada x = x +10, serta x– kepada x = x – 10.

Teruskan dengan Tutorial #11 melalui URL di bawah:

  • Tutorial #11

Senarai Tutorial asas Arduino MatGyver.my :

Published by Mat Gyver

Peneraju Komuniti Digital Maker Malaysia. Pembangunan Komuniti diUtamakan.

3 thoughts on “Tutorial #10: Kawalan SERVO dengan Servo.h Library

Tinggalkan Jawapan

Masukkan butiran anda dibawah atau klik ikon untuk log masuk akaun:

WordPress.com Logo

Anda sedang menulis komen melalui akaun WordPress.com anda. Log Out /  Tukar )

Twitter picture

Anda sedang menulis komen melalui akaun Twitter anda. Log Out /  Tukar )

Facebook photo

Anda sedang menulis komen melalui akaun Facebook anda. Log Out /  Tukar )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: