Pelajaran 85: Pengenalan Motor Servo | Kursus Arduino Langkah demi Langkah
Panduan proyek ini memperkenalkan Anda pada dunia motor servo rotasi kontinu, yang juga dikenal sebagai servo 360 derajat. Tidak seperti servo standar yang bergerak ke sudut tertentu (seperti 0 hingga 180 derajat), motor ini berputar terus menerus di kedua arah. Hal ini membuatnya ideal untuk membangun robot kecil, trek tank, atau proyek apa pun yang membutuhkan motor penggerak sederhana dan terjangkau. Panduan ini akan menunjukkan cara mengendalikannya menggunakan Arduino dan beberapa tombol tekan, memberi Anda kendali langsung atas arah dan kecepatannya.
Berikut adalah beberapa aplikasi praktis untuk servo 360 derajat:
- Membangun mobil robot beroda dua yang kecil.
- Membuat dudukan kamera pan-and-tilt yang berputar tanpa henti.
- Menggerakkan ban berjalan kecil atau derek.
- Membuat platform pemindai radar atau sensor sederhana.

Perangkat Keras dan Komponen
Untuk proyek ini, Anda memerlukan komponen berikut:
- Papan Arduino (mis., Uno)
- Motor servo rotasi kontinu (mis., FS90R atau sejenisnya)
- Tiga tombol tekan
- Kabel jumper
- Papan roti (opsional, untuk memudahkan pengkabelan)
Panduan Pengkabelan
Pengkabelan untuk proyek ini cukup sederhana. Motor servo memiliki tiga kabel: biasanya coklat (ground), merah (daya), dan oranye atau kuning (sinyal). Tombol tekan dihubungkan dalam konfigurasi sederhana.
Berikut adalah rincian koneksinya:
- Motor Servo:
- Kabel coklat (Ground) terhubung ke pin GND Arduino.
- Kabel merah (Daya) terhubung ke pin 5V Arduino.
- Kabel oranye/kuning (Sinyal) terhubung ke pin 9 Arduino.
- Tombol Tekan:
- Satu sisi setiap tombol terhubung ke pin GND Arduino.
- Sisi lain dari tombol "Berlawanan Arah Jarum Jam" terhubung ke pin 2.
- Sisi lain dari tombol "Berhenti" terhubung ke pin 3.
- Sisi lain dari tombol "Searah Jarum Jam" terhubung ke pin 4.
Dalam video, pembuat menekankan bahwa kabel sinyal servo harus terhubung ke pin berkemampuan PWM di Arduino, yang sering ditandai dengan simbol tilde (~). Pin 9 adalah salah satu pin ini. Tombol tekan menggunakan resistor pull-up internal Arduino, yang menyederhanakan pengkabelan dengan menghilangkan kebutuhan resistor eksternal (dalam video pada 07:02).
Penjelasan Kode
Kode dirancang untuk membaca status tiga tombol tekan dan mengirim perintah yang sesuai ke motor servo. Mari kita uraikan bagian-bagian yang dapat dikonfigurasi oleh pengguna.
Mengonfigurasi Pin dan Perintah
Di bagian atas kode, Anda akan menemukan definisi untuk pin dan nilai kontrol servo. Di sinilah Anda dapat menyesuaikan perilaku proyek Anda.
const int servoPin = 9; // Pin PWM untuk sinyal servo
const int stopPin = 3; // Pin untuk tombol berhenti
const int cwPin = 4; // Pin untuk tombol searah jarum jam
const int ccwPin = 2; // Pin untuk tombol berlawanan arah jarum jam
Konstanta ini mendefinisikan pin Arduino mana yang terhubung ke tombol dan servo. Jika Anda menggunakan pin yang berbeda untuk tombol Anda, Anda akan mengubah angka di sini. servoPin harus berupa pin berkemampuan PWM.
const int csServoCommand[3] = {106, 52, 0}; // {CCW, STOP, CW}
const String csServoCommandText[3] = {"Berlawanan Arah Jarum Jam", "Berhenti", "Searah Jarum Jam"};
Ini adalah bagian terpenting untuk dipahami dan disetel. Array csServoCommand menyimpan nilai yang dikirim ke servo. Untuk servo kontinu, nilai-nilai ini tidak mewakili sudut tetapi kecepatan dan arah.
- 106 adalah nilai untuk rotasi Berlawanan Arah Jarum Jam dengan kecepatan penuh.
- 52 adalah nilai untuk berhenti penuh.
- 0 adalah nilai untuk rotasi Searah Jarum Jam dengan kecepatan penuh.
Nilai-nilai ini tidak universal. Karena perbedaan manufaktur, nilai "berhenti" (52) mungkin perlu disesuaikan. Jika servo Anda bergerak perlahan saat Anda menekan tombol berhenti, Anda perlu menyetel halus nilai ini. Video ini mendemonstrasikan proses ini, menunjukkan bagaimana mengubah nilai menjadi 54 atau 51 dapat memengaruhi perilaku motor (dalam video pada 13:45).
Anda juga dapat menyesuaikan nilai untuk rotasi guna mengubah kecepatan motor. Misalnya, mengatur nilai berlawanan arah jarum jam menjadi 70 akan membuatnya berputar lebih lambat daripada pada 106 (dalam video pada 12:23).
Array csServoCommandText menyimpan string teks yang dicetak ke Serial Monitor untuk menunjukkan status perintah saat ini.
Fungsi Kustom: servoCommand()
Kode menggunakan fungsi kustom untuk menangani logika perintah. Fungsi ini mengambil angka (0, 1, atau 2) sebagai argumen, memperbarui teks status, dan mengirim perintah yang sesuai ke servo.
void servoCommand(int n) {
statusText = csServoCommandText[n];
myservo.write(csServoCommand[n]);
Serial.println(csServoCommandText[n]);
Serial.println(csServoCommand[n]);
}
Fungsi ini dipanggil dari loop utama saat tombol ditekan. Fungsi ini memusatkan logika untuk memperbarui tampilan dan mengendalikan servo, membuat kode lebih bersih dan lebih mudah dimodifikasi.
Proyek Langsung dan Demonstrasi
Dalam video, pembuat mendemonstrasikan proyek yang sedang berjalan. Menekan tombol "Searah Jarum Jam" mengirim nilai 0 ke servo, menyebabkannya berputar ke satu arah. Menekan tombol "Berlawanan Arah Jarum Jam" mengirim nilai 106, membuatnya berputar ke arah lain. Tombol "Berhenti" mengirim 52, yang seharusnya menghentikan motor.
Serial Monitor digunakan untuk menampilkan status saat ini dan nilai pasti yang dikirim ke servo. Ini sangat berharga untuk debugging dan untuk menemukan nilai "berhenti" yang sempurna untuk motor spesifik Anda. Seperti yang dicatat dalam video, perintah berhenti mungkin tidak sempurna karena sirkuit internal servo, dan Anda mungkin melihat pergeseran lambat atau getaran. Ini adalah karakteristik umum dari servo kontinu yang lebih murah dan dapat diminimalkan dengan menyesuaikan nilai berhenti dalam kode (dalam video pada 01:15).
Bab
- [00:05] Pengenalan motor servo 360 derajat
- [02:02] Komponen dan gambaran umum perangkat keras
- [02:40] Diagram pengkabelan rinci dan koneksi
- [05:07] Penjelasan kode: konstanta, array, dan pengaturan
- [09:56] Penjelasan kode: fungsi servoCommand
- [10:54] Demonstrasi langsung dan keluaran Serial Monitor
- [12:23] Menyesuaikan kecepatan servo dan nilai berhenti
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
* This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor.
📚⬇️ Download and resource page https://robojax.com/RJT762
*
* Modified by Ahmad Shamshiri for Robojax.com
* on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
* Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
* Get this code from Robojax.com
*
Original code by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
Modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("received: ");
Serial.print (incomingByte);
if(incomingByte == 108){
Serial.println(" sent 0 Rotating CW ");
myservo.write(0);
}else if(incomingByte == 114){
Serial.println(" sent 180 Rotating CCW ");
myservo.write(180);
}else if(incomingByte == 60){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Randomly");
myservo.write(incomingByte);
}
}
}
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
360 Servo -2
* This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor.
📚⬇️ Download and resource page https://robojax.com/RJT762
*
* Modified by Ahmad Shamshiri for Robojax.com
* on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
* Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
* Get this code from Robojax.com
*
Original code by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
Modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int servoPin = 9;// this pin must be of those with PWM ~
int pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
int CWBS, CCWBS, SBS;
void setup() {
Serial.begin(9600);
pinMode(2,INPUT_PULLUP);// set pin for push button STOP
pinMode(3,INPUT_PULLUP);// set pin for push button CCW
pinMode(4,INPUT_PULLUP);// set pin for push button CW
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
}
void loop() {
CCWBS = digitalRead(2);// read status of button CCW
SBS = digitalRead(3);// read status of button STOP
CWBS = digitalRead(4);// read status of button CW
if(CCWBS == LOW){
Serial.println(" sent 0 Rotaing CW ");
myservo.write(0);
}else if(CWBS == LOW){
Serial.println(" sent 180 Rotaing CCW ");
myservo.write(180);
}else if(SBS == LOW){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Random");
myservo.write(48);
}
}// loop
Hal-hal yang mungkin Anda butuhkan
-
Amazon360 Degree Servo motor on Amazonlink.amazon
-
Amazon
-
eBay360 Degree Servo motor on eBayebay.us
-
AliExpress360 Degree Servo motor on AliExpresss.click.aliexpress.com
-
AliExpress360 Degree Servo motor on AliExpress-2s.click.aliexpress.com
Sumber daya & referensi
Berkas📁
File lainnya
-
Datasheet motor SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB