Mengontrol Motor Servo SG 90 Menggunakan Arduino
Mengenal Motor Servo SG90
Motor servo SG90 adalah jenis motor servo yang paling sering digunakan untuk proyek-proyek sederhana menggunakan Arduino. Motor servo ini memiliki 3 kaki yang terdiri dari Ground, Vcc dan Sg(PWM), bekerja pada tegangan 4.8 volt – 6 volt serta hanya dapat berputar hingga 180 derajat. Untuk lebih jelasnya dapat diperhatikan pada gambar berikut :
Merangkai Motor Servo SG90 dengan Arduino
Misalkan sebuah motor servo akan disambungkan dengan Arduino Uno, dapat dilakukan dengan cara seperti gambar berikut :
Pada gambar di atas dapat dilihat kaki V+ motor servo dihubungkan dengan pin 5V Arduino Uno, kaki Gnd dihubungkan dengan pin GND Arduino Uno, dan kaki Sg(PWM) dihubungkan dengan pin 9 Arduino Uno yang merupakan salah satu pin PWM pada Arduino Uno. Selain menggunakan pin 9 Arduino Uno, pin 3, pin 5, pin 6, pin 10 dan pin 11 Arduino Uno dapat disambungkan ke kaki Sg(PWM) motor servo.
Mengontrol Motor Servo dengan Arduino Uno
Seperti yang dijelaskan pada tulisan terdahulu – Berkenalan dengan Arduino struktur program pada Arduino dapat menggunakan library tertentu sesuai dengan perangkat keras yang digunakan. Motor servo merupakan salah satu perangkat keras yang jika dirangkaian dengan Arduino, memerlukan library tersebut. Library untuk motor servo sudah tersedia, jadi pemrogram tidak perlu membuat library sendiri.
Rangkaian di atas dapat dibuat dan disimulasikan menggunakan SimulIDE, caranya dapat dibaca disini.
a. Sweep Servo 180 Derajat
Mengontrol motor servo agar dapat bergerak 180 derajat searah jarum jam, kemudian bergerak 180 derajat berlawanan arah dengan jarum jam. Contoh kode programnya adalah sebagai berikut :
#include <Servo.h> //menyertakan library untuk servo Servo servoQ; // membuat variabel untuk servo int posisi=0; // setting posisi awal pada 0 derajat void setup(){ servoQ.attach(9); // kaki Sg(PWM) servo dihubungkan dengan pin 9 Arduino Uno } void loop(){ for (posisi=0;posisi<180;posisi++){ // servo bergerak ke kanan (searah dengan jarum jam) servoQ.write(posisi); delay(20); } for (posisi=180;posisi>=0;posisi--){ // servo bergerak ke kiri (berlawanan arah dengan jarum jam) servoQ.write(posisi); delay(20); } }
Pada program di atas, motor servo bergerak ke kanan dengan kenaikan 1 derajat dengan jeda 20 ms, sehingga motor servo terlihat bergerak langsung ke posisi 180 derajat, tidak terlihat tahapannya. Demikian pula ketika motor servo bergerak ke kiri.
b. Menggerakkan Motor Servo dengan Bertahap
Menggerakkan motor servo dengan bertahap maksudnya adalah menggerakkan motor servo ke kanan maupun ke kiri dengan sudut yang lebih besar dari 1 derajat, sehingga terlihat pergerakan motor servo bertahap atau patah-patah sesuai dengan besar sudut yang ditetapkan oleh programer.
Pada contoh program berikut ini adalah menggerakkan motor servo ke kanan dengan tahapan sudut dimulai dari 0, 45, 90, 135, 180
Kode programnya adalah sebagai berikut :
#include <Servo.h> //menyertakan library untuk servo Servo servoQ; //membuat variabel untuk servo void setup(){ servoQ.attach(9); //servo disambungkan ke pin 9 Arduino Uno } void loop(){ servoQ.write(0); //posisi awal servo 0 derajat delay(15); //jeda waktu 15 milidetik servoQ.write(45); //posisi servo 45 derajat ke kanan delay(15); //jeda waktu 15 milidetik servoQ.write(90); //posisi servo 90 derajat ke kanan delay(15); //jeda waktu 15 milidetik servoQ.write(135); //posisi servo 135 derajat ke kanan delay(15); //jeda waktu 15 milidetik servoQ.write(180); //posisi servo 180 derajat ke kanan delay(15); //jeda waktu 15 milidetik }
Kode program di atas dapat ditulis lebih ringkas dengan memanfaatkan array dan perulangan yang sudah dipaparkan terlebih dahulu pada web blog ini, sebagai berikut :
#include <Servo.h> //menyertakan library untuk servo Servo servoQ; //membuat variabel untuk servo int sudut[5]={0,45,90,135,180}; //membuat array untuk menampung besar sudut yang dilalui servo void setup(){ servoQ.attach(9); //servo disambungkan ke pin 9 Arduino Uno } void loop(){ for(int i=0,i<5,i++){ //perulangan untuk menggerakkan servo servoQ.write(sudut[i]); //menggerakkan servo sesuai dengan isi dari index array delay(15); //jeda waktu 15 milidetik } }
Demikian, semoga bermanfaat.
Referensi :
- https://components101.com/servo-motor-basics-pinout-datasheet
- https://www.arduino.cc/en/Tutorial/BuiltInExamples