Contents
Sebenarnya agak rancu ya judul di atas, Mengatur ‘Kecepatan’ Motor Servo dengan Arduino. Makanya saya kasih tanda koma atas yang mengapit kata ‘kecepatan’ pada judul tersebut. Mengapa rancu? Karena pada dasarnya sebuah motor servo hanya bekerja pada satu kecepatan saja (kecepatan default). Prinsip kerja motor servo adalah ke sudut mana ia akan berputar (diperintahkan kontroller), bukan pada kecepatan berapa dia berputar atau berputar ke manakah ia, kekanan atau ke kiri? Tidak, sebuah motor servo hanya mengenal sudut. Jika kondisi sekarang berada di sudut 00 dan kontroller memerintahkan untuk berputar ke 900 maka ia akan berputar searah jarum jam (clockwise). Dan sebaliknya, jika posisi sekarang adalah 1800 dan kontroller memerintahkan untuk berputar ke 450 misalnya, maka sang motor akan berputar berlawanan jarum jam (counter clockwise). Jadi sekali lagi, motor servo hanya mengenal sudut.
Bagaimana Cara Mengatur ‘Kecepatan’ Motor Servo dengan Arduino?
Sebagaimana yang saya sebutkan pada paragraf di atas, sebuah motor servo hanya memiliki satu tingkat kecepatan (default). Berapa ukuran kecepatannya? Biasanya ada di spesifikasi alat/datasheet-nya. Sebagai contoh, motor servo SG90 memiliki kecepatan 0.12 seconds / 60 degrees. Atau kalau kita konversi menjadi 0,72 RPS (Rotation per Second) atau 43 RPM (Rotation per Minute). Eh, benar ngga ya? he he he. Nah, si motor servo tiap diperintah menuju sudut tertentu akan berputar dengan kecepatan sebesar angka tadi secara konstan. Bagaimana cara mengatur kecepatannya? Kalau mengatur kecepatan motor servo menggunakan teknik PWM (Pulse Width Modulation) jelas ngga mungkin. Nah, satu-satunya cara mengatur kecepatan motor servo adalah dengan memberi delay tiap pergerakan 10 sudutnya. Terdengar tricky? Ya memang, tapi ya gimana lagi, ngga ada cara yang lain he he he.
Berikut ini akan saya contohkan bagaimana caranya mengatur kecepatan motor servo dengan memberi delay tiap pergerakan 10 sudutnya. Dengan memberi delay yang berbeda maka akan didapat kecepatan yang berbeda pula. ‘Kecepatan’ di sini sifatnya relatif ya (cepat, agak cepat, lambat, sedikit lambat, dst tidak bisa terukur misal 20 RPM, 0,37 RPS dst). Anda harus mengira-ngira sendiri delay berapa yang sesuai dengan kecepatan yang Anda butuhkan.
Alat dan Bahan untuk Eksperimen Pengaturan Kecepatan Motor Servo
- Arduino (Uno atau yang lainnya)
- Motor Servo SG90/MG90 atau yang lainnya.
- Kabel jumper male to male (3 buah)
Koneksikan motor servo dengan Arduino sesuai warna kabel di bawah
Motor Servo | Arduino |
merah | 5v/Vcc |
coklat/hitam | GND |
kuning/orange | 9 |
Kurang lebih gambar rangkaian ditunjukkan pada gambar di bawah
Berikutnya upload sketch di bawah ke Arduino Anda.
#include <Servo.h> Servo myservo; int pos = 0; int servo_speed = 15; void setup() { myservo.attach(9); } void loop() { for (pos = 0; pos <= 180; pos += 1) { myservo.write(pos); delay(servo_speed); } for (pos = 180; pos >= 0; pos -= 1) { myservo.write(pos); delay(servo_speed); } }
Jika sketch sudah ter-upload, maka seharusnya motor servo Anda sekarang akan berputar searah dan berlawanan jarum jam secara bergantian dengan kecepatan sesuai variabel servo_speed di atas. Cobalah mengganti nilai variabel ini sesuai kebutuhan Anda.
Demikian sedikit trik Cara Mengatur ‘Kecepatan’ Motor Servo dengan Arduino. Mungkin ada yang sedang membutuhkan trik ini, silahkan dipakai sesuai kebutuhan. Karena saya juga mengalami sendiri, ada kalanya kecepatan motor servo berputar itu terlalu cepat, dan perlu diperlambat sehingga lebih smooth dan tidak mengganti parts mekanik yang lain
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
numpang nanya mas kalo cara ngubah derajat motor ds04 yg tadinya 360
menjadi 180 derajat gimana caranya?
ada 2 cara mas,
1. secara hardware, yakni dengan membongkar gir2 yang ada di dalamnya, trus ditambahi satu penghalang untuk menghalangi dia berputar 360. Agak susah menjelaskannya. Mungkin bisa cari di youtube untuk videonya
2. secara software, tinggal dibatasi aja perutaran sudut lewat script
contoh nya mas ?
di intenger y di kasih int pos =0; gax mas ?
di void loop nya sy ngasih perintah”for(pos>=0; pos <=180;pos +=1) gax mas terus pas di void loopnya
symengikutin cara mas aji
dgn cara myservo.writeMicroseconds(2000);terus kalo mau nentuin drajatnya pas mananya
#mohon bantuanya mas
apa mas myservo.write diganti sama myservo.script(90);
apa kaya gitu mas?
eh, bukan gitu mas
pak bisa bantu saya gk untuk membuat program arduino, untuk 2 buah motor servo dan satu motor dc kecil yang bekerja bersamaan disebuah breadboard. servo pertama bekerja lebih awal 3 menit dari pada servo kedua, dan servo kedua berjalan bersamaan dengan motor dc. kemudian alat diatas hanya bekerja selama 2 menit setelah itu berhenti otomatis.
dan apakah bisa alat diatas berjalan kembali secara otomatis setelah 5 menit berhenti? terima kasih pak sebelumnya, saya anak sma yg lagi pengen belajar tentang mekatronika hehe
silahkan saja tanya mana saja yang masih bingung
selamat sore mas. perkenalkan dulu saya luluk dari teknik mesin universitas jember, saya sekarang sedang mengambil proyek akhir, saya bingung mas menentukan kecepatan sudut dari motor servo. ada ga’ mas nilai kecepatan sudut dari motor servo? karena motor servonya itu saya hubungkan dengan batang penghubung yang dapat menggerakkan pintu hopper, nah untuk mencari nilai panjang batang tersebut saya membutuhkan nilai kecepatan sudut dari motor servo. mohon bantuannya mas
motor stepper sebenarnya diperuntukkan untuk berputar menuju suatu sudut secara presisi. Jadi parameter yang diutamanakan di sini adalah ‘sudut’ bukan ‘kecepatan’. Kecepatan yang dimiliki motor stepper hanya satu nilai saja, kalaupun bisa diatur itupun sebenarnya semacam ‘trik’ aja, tidak benar2 mengatur kecepatan. Untuk mengetahui kecepatan motor stepper dapat dibaca di datasheet motor stepper tsb
Untuk kebutuhan di atas, saya pikir yang paling tepat digunakan adalah motor DC dibanding motor stepper. Kalau motor dc kita bisa atur kecepatannya sesuai yang diinginkan menggunakan rangkaian/modul driver pengatur kecepatan. Hasilnya bisa kita masukkan rumus sesuai kebuutuhan
OK mas terimakasih sarannya
mantap dah atikelya ..bos ajie..lanjutkan bos…
Hai mas, salam kenal..
mua nanya, pernah nyoba ngatur ketelitian sudut motor servo dc agar dia bisa muter 0.01 derajat? soalnya kalo pwm biasa sanya nyoba cuman punya ketelitian muter 1 derajat. nggak bisa sampe dibawah 1 deraja.
Terima kasih..
belum pernah mas, tapi hal semacam itu tergantung hardware juga, dalam hal ini adalah rasio gir. Di dalam motor servo ada beberapa gir untuk menambah rating torsinya, nah kalo gigi gir resolusinya lebh dari 0,01 derajat ya, sehebat apapun programnya ya pasti akan gagal juga
kalo menurut saya, secara teknis bisa dilakukan mas, tapi ya itu tadi, ada beberapa kendala di sisi hardware
hallo salam kenal, saya nnya nih bosss,,
saya perlu mengatur kecepatan servo secara bersamaan, nah bagaimana caranya pake fungsi for itu untuk menggerakkan 2 servo secara bersamaan namun dengan sudut awal dan akhirnya berbeda,, terimakasih bnyak boussss 😀
kalo benar2 bersamaan sptnya ga bisa mas kalo pake arduino, paling pendekatannya bisa pake metode spt ini http://saptaji.com/2017/01/30/bekerja-secara-multitasking-di-arduino/
nanti di tiap2 timer di dalamnya bisa pake script servo1.write(sudut);
Mau nanya mas apakah motor servo bisa di kombinasikan dengan sensor kompas hmc5883L???
bisa mas
Untuk sensor kompasnya itu digunakan untuk lebih efektif/ menonjol soalnya sensor kompas itu sya terapkan di robot vacuum cleaner mas.
Kan sama2 dalam bentuk drajat perintahnya nanti…
Soalnya Sya juga menggunakan motor servo mas
mas bingungnya dimana? antara kompas dengan servo beda jalur. Kompas hmc5883l pake i2c, kl servo pake pin digital, tinggal main programnya aja
Saya itu sedang melaksanakan skripsi mas. Robot sebelumnya memakai motor dc saya mengembangkan menggunakan servo dan kompas tpi mau lebih menonjolkan kegunaan kompasnya mas …jadi
bingung di programnya mas soalnya jika menggunakan servo robot sdah stabil jalannya…
Trus untuk kompas itu yng lebih efektif digunakan untuk ap di dalam pergerakan robot itu iyy mas?
kl kompas hmc5883L (magnetometer) biasanya digunakan untuk mengetahui derajat kemiringan. Kl dlmimplementasi robot biar robotnya seimbang di segala medan
Kalau sensor kompas digunakan sebagai acuan dalam navigasi (penunjuk arah ) dan menggunakan motor servo gmana kira2 contoh codingnya mas…?
Mohon bantuannya mas…
Sya bingung krena pnelitian sbelumnya pakek motor dc…
kl mengubah dr sebelumnya menggunakan motor dc ke servo itu mudah mas. Servo itu tinggal atur sudut brp pake program. Tp gini mas, servo itu kebanyakan sudutnya 180 derajat aja. Kalo ada yg 360 derajat, itu bukan servo, balik lg kyk motor dc biasa. Kalo penggunaan untuk memutar roda/ban sebaiknya pake motor dc, krn torsinya lebih gede dari motor servo dengan harga yg sama coba mas desain dulu yg benar antara kebutuhan dan komponen yg digunakan. Saya lihat masih banyak yang salah konsep. Sedangkan hmc5883L sebagai petinjuk arah navigasi bisa dilakukan dengan mencari sudut relatif sensor terhadap medan magnet kutub… Read more »
bung pada saat dia putar ke kiri trus berhenti 1 menit bisa gak ya trus dia berputar kembali kekanan trus berhenti dikanan 1 menit lagi, gmn ya codingnya ,kasih masukkan dong bung
didefinisikan dulu yang dimaksud ‘putar kiri’ dan ‘putar kanan’ itu sudut berapa, sedangkan berhenti sekian menit itu untuk mudahnya pake delay aja. Habis itu tinggal masukkan ke program. Sebenarnya untuk servo itu termasuk mudah, karena servo mengenal sudut tujuan, beda dengan motor DC biasa, jadi tinggal masukkan aja sudut 0 (misal untuk putar kiri) atau sudut 180 (misal untuk putar kanan) dengan titik acuan (misal) sudut 90. Habis itu tinggal kasih delay (60000) untuk 1 menit berhenti
Numpang tanya,,, Apakah bisa servo di setting bergerak atau aktif berdasarkan jam, jadi diseting untuk bergerak atau aktif berdasarkan setting jam
bisa aja, tergantung programnya
permisi mau tanya, bila dijadikan satu kondisi gimana mas?
satu kondisi gimana ya maksudnya?
saya coba jadikan void mas jadi di loop tinggal manggil voidnya saja, apa bisa? karena saya mau makai kecepatannya saja
saya agak kurang paham yang dimaksud. Tapi kalo misal mau dijadikan subrutin juga bisa. Contohnya gini:
void loop(){ //program utama
//kode sembarang
motor_on(); //panggil subrutin motor_on
}
void motor_on(){
//kode anda
}
hehe jadi gini mass
jadi servo itu gerak dari derat 0 – 180 bila di picu satu kondisi, dan bergerak sesuai kecepatan yang di atur, begitupun sebaliknya
coba dibikin flowchart nya dulu mas, untuk memudahkan bikin programnya
atau di dalam void di beri loop lgi apa bisa?
Mohon bantuannya mas saya mau bikin coding untuk membuka jendela mengunakan servo, jadi saya mau bikin pas tombol on di tekan servo aktif tetapi tetap di derajat yang ditentukan pas saya tekan tombol off maka jendela turun secara perlahan.
Soalnya sudah saya coba coding yng ada diatas tapi servo nya tidak berhenti di sudut yang ditentukan.
#mohon bantuannya mas#
posting scriptnya di sini mas