Pelajaran 86: Mengontrol posisi motor servo menggunakan potensiometer
Bayangkan memutar sebuah kenop sederhana dan melihat lengan mekanis mengikuti setiap gerakan Anda dengan presisi. Itulah keajaiban menggabungkan potensiometer dengan motor servo. Proyek ini, bagian dari Kursus Arduino Langkah demi Langkah oleh Robojax, menunjukkan konsep yang mendasar dan sangat berguna dalam elektronika: menerjemahkan input analog menjadi gerakan fisik yang presisi. Anda akan belajar cara membaca tegangan variabel dari potensiometer, memetakan nilai tersebut ke rentang sudut, dan memerintahkan motor servo untuk berputar ke posisi yang tepat. Ini adalah gerbang Anda untuk membangun proyek intuitif dan interaktif di mana kontrol manual bertemu dengan otomatisasi.

Aplikasi dari keterampilan ini sangat luas dan praktis. Berikut adalah beberapa ide untuk menginspirasi Anda:
- Kontrol Lengan Robot: Gunakan potensiometer untuk memposisikan setiap sendi lengan robot secara manual untuk operasi ambil-dan-tempat yang presisi.
- Sistem Pan dan Tilt Kamera: Bangun dudukan kamera yang dikendalikan jarak jauh untuk time-lapse atau pengawasan, dengan pan dan tilt yang halus hanya dengan memutar kenop.
- Replika Pengukur Analog: Buat pengukur dasbor fisik (seperti speedometer atau kenop suhu) yang bergerak berdasarkan data sensor, dengan potensiometer berfungsi sebagai alat override manual atau kalibrasi.
- Instalasi Seni Interaktif: Buat patung kinetik yang merespons input pengunjung, di mana memutar kenop mengubah posisi bagian yang bergerak.
- Kemudi Kendaraan Model: Kontrol sudut kemudi mobil atau perahu model dari jarak jauh, memberikan nuansa analog yang lebih intuitif daripada tombol digital.
Panduan ini didasarkan pada tutorial video Pelajaran 86: Kontrol posisi motor servo menggunakan potensiometer oleh Robojax (di video pada 00:00). Ini memandu Anda melalui seluruh proses, dari memahami pengkabelan hingga menjelaskan kode yang membuat semuanya berfungsi. Mari kita mulai.
Perangkat Keras dan Komponen
Untuk mengikuti proyek ini, Anda akan membutuhkan komponen berikut:
- Papan Arduino (misalnya, Uno, Nano)
- Motor servo standar (misalnya, SG90 atau MG996R)
- Potensiometer (resistor variabel, biasanya 10kΩ)
- Kabel jumper
- Breadboard (opsional, untuk koneksi yang lebih mudah)
Memahami Pengkabelan
Pengkabelan untuk proyek ini cukup sederhana. Kuncinya adalah menyediakan koneksi daya dan sinyal yang benar untuk servo dan potensiometer. Servo adalah perangkat yang membutuhkan daya besar, sehingga mendapatkan daya langsung dari pin 5V Arduino. Potensiometer berfungsi sebagai pembagi tegangan, dan kita membaca tegangan pada wiper-nya (pin tengah) untuk menentukan posisinya. (di video pada 01:05)
Salah satu trik cerdas yang digunakan proyek ini adalah membuat sumber 5V tambahan pada pin digital untuk memberi daya pada potensiometer, karena beberapa papan Arduino hanya memiliki satu pin 5V khusus. Ini dilakukan dalam kode dengan mengatur pin digital (pin 8) ke HIGH, yang mengeluarkan 5V. (di video pada 00:39)
Berikut adalah diagram pengkabelan yang disebutkan dalam video:
Mari kita uraikan koneksinya:
- Motor Servo:
- Daya (kabel Merah) → Pin 5V Arduino
- Ground (kabel Coklat/Hitam) → Pin GND Arduino
- Sinyal (kabel Oranye/Kuning) → Pin 3 Arduino (pin yang mendukung PWM)
- Potensiometer:
- Pin Kiri → Pin GND Arduino
- Pin Tengah (Wiper) → Pin analog A0 Arduino
- Pin Kanan → Pin 8 Arduino (didefinisikan sebagai VCC2 dalam kode)
Penjelasan Kode
Kode untuk proyek ini sangat sederhana. Ini memanfaatkan beberapa fungsi Arduino kunci untuk membaca potensiometer dan mengontrol servo. Mari kita fokus pada bagian yang dapat dikonfigurasi pengguna yang dapat Anda sesuaikan untuk proyek Anda sendiri. (di video pada 03:00)
Di bagian atas sketsa, Anda akan mendefinisikan pin dan membuat objek servo. Ini adalah variabel utama yang akan Anda ubah berdasarkan pengkabelan Anda:
#include <Servo.h>
Servo myservo; // buat objek servo untuk mengontrol servo
int potpin = A0; // pin analog yang digunakan untuk menghubungkan potensiometer
int servoPin = 3; // definisikan pin digital (dengan PWM) untuk servo. Hanya bisa menggunakan pin 3, 5, 6, 9, 10, 11
int VCC2 = 8;// definisikan VCC tambahan untuk potensiometer
int val; // variabel untuk membaca nilai dari pin analog
Berikut adalah fungsi dari setiap bagian:
- Servo myservo;: Baris ini membuat objek bernama
myservoyang akan kita gunakan untuk mengontrol motor servo spesifik kita. Anda dapat mengganti namanya, tetapi Anda harus menggunakan nama yang sama nanti dalam kode. - int potpin = A0;: Ini mendefinisikan pin analog mana yang terhubung ke wiper potensiometer. Jika Anda memindahkan kabel ke pin analog yang berbeda, Anda harus memperbarui angka ini.
- int servoPin = 3;: Ini mengatur pin digital untuk kabel sinyal servo. Sangat penting untuk menggunakan pin yang mendukung PWM (biasanya ditandai dengan '~' di papan). Komentar tersebut mencantumkan pin yang valid untuk sebagian besar Arduino.
- int VCC2 = 8;: Ini adalah pin yang kita gunakan sebagai sumber 5V sekunder untuk potensiometer. Jika Anda memiliki papan dengan beberapa pin 5V, Anda dapat menghubungkannya langsung dan menghapus bagian kode ini.
Dalam fungsi setup(), kode menginisialisasi servo dan mengatur pin daya tambahan. Fungsi myservo.attach(servoPin) sangat penting karena memberi tahu Arduino pin mana yang terhubung ke kabel sinyal servo.
void setup() {
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // menghubungkan servo pada pin 3 ke objek servo
pinMode(VCC2, OUTPUT);// mengatur pin 8 sebagai output
digitalWrite(VCC2, HIGH);// mengatur pin 8 HIGH sehingga berfungsi sebagai pin 5V
}
Logika inti ada di fungsi loop(). Fungsi ini membaca nilai potensiometer, menskalakannya menjadi sudut, dan memerintahkan servo untuk bergerak. Dua fungsi penting di sini adalah analogRead() dan map(). (di video pada 04:27)
void loop() {
val = analogRead(potpin); // membaca nilai potensiometer (nilai antara 0 dan 1023)
val = map(val, 0, 1023, 0, 180); // menskalakannya untuk digunakan dengan servo (nilai antara 0 dan 180)
myservo.write(val); // mengatur posisi servo sesuai dengan nilai yang telah diskalakan
Serial.print(val);
Serial.println();
delay(50); // menunggu servo mencapai posisinya
}
Berikut cara kerjanya:
- analogRead(potpin): Fungsi ini membaca tegangan dari wiper potensiometer dan mengembalikan nilai antara 0 (0V) dan 1023 (5V).
- map(val, 0, 1023, 0, 180): Ini adalah kunci dari seluruh proyek. Fungsi ini mengambil nilai mentah dari potensiometer (0 hingga 1023) dan mengubahnya secara proporsional menjadi sudut servo (0 hingga 180 derajat). Misalnya, jika potensiometer membaca 511 (sekitar setengah), fungsi
map()akan mengembalikan 90, menggerakkan servo ke posisi tengahnya. - myservo.write(val): Fungsi ini mengambil sudut yang telah dihitung (sekarang disimpan dalam
val) dan memerintahkan servo untuk berputar ke posisi tersebut. - delay(50): Ini menambahkan jeda kecil di akhir setiap loop. Ini mengontrol kecepatan pembaruan. Jeda yang lebih besar (seperti 200ms) membuat servo bergerak secara bertahap, sementara jeda yang lebih kecil (seperti 50ms) membuat gerakan sangat halus. Anda dapat menyesuaikannya untuk mengubah responsivitas. (di video pada 07:26)
Demonstrasi Proyek Langsung
Dalam video, Anda dapat melihat proyek ini beraksi. Saat kenop potensiometer diputar, lengan motor servo mengikuti posisinya secara proporsional. Monitor serial mencetak sudut saat ini, mengonfirmasi bahwa pemetaan bekerja dengan benar. Ketika potensiometer berada pada posisi minimum, servo berada pada 0 derajat. Saat Anda memutar kenop hingga maksimum, servo berputar dengan halus hingga 180 derajat. (di video pada 06:33)
Lingkaran umpan balik waktu nyata ini menunjukkan integrasi yang mulus antara sensor analog dengan aktuator digital, menciptakan sistem kontrol yang responsif dan intuitif.
Bab
- [00:00] Pendahuluan dan Gambaran Proyek
- [01:05] Skematik dan Diagram Pengkabelan
- [02:07] Demonstrasi Pengkabelan Fisik
- [03:00] Penjelasan Kode
- [06:33] Demonstrasi dan Pengujian Langsung
- [07:26] Menyesuaikan Kecepatan Respons Servo
/*
* Lesson 88: Controlling Servo motor a with Potentiometer
* 📚⬇️ Download and resource page https://robojax.com/RJT763
watch full video tutroial: https://www.youtube.com/watch?v=ntRW77mNFFk
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
Update by Ahmad Shamshiri on Jan 01, 2019 in Ajax, Ontario, Canada
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int servoPin = 3; // define a digital pin (with PWM) for servo. Can use only pin 3, 5, 6,9, 10, 11
int VCC2 = 8;// define extra VCC for potentiometer
int val; // variable to read the value from the analog pin
void setup() {
//
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 3 to the servo object
pinMode(VCC2, OUTPUT);// set pin 8 as output
digitalWrite(VCC2, HIGH);// set pin 8 HIGH so it acts as 5V pin
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
Serial.print(val);
Serial.println();
delay(50); // waits for the servo to get there
}
Hal-hal yang mungkin Anda butuhkan
-
Amazon
-
Amazon
-
eBay
-
AliExpressPurchase SG90 Servo motor 180 or 360 from AliExpresss.click.aliexpress.com
Sumber daya & referensi
Berkas📁
File lainnya
-
Datasheet motor SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB