Pelajaran 91: Mengendalikan Motor Servo Menggunakan Potensiometer dan Menampilkan Sudut pada LCD
Dalam tutorial Arduino langsung ini, Anda akan belajar cara menggabungkan tiga komponen penting menjadi satu proyek yang berfungsi: motor servo, potensiometer, dan layar LCD I2C. Pada akhirnya, Anda akan dapat memutar kenop dan melihat lengan servo bergerak secara real-time sementara sudut yang tepat ditampilkan di layar. Proyek ini sangat cocok untuk membangun antarmuka fisik yang intuitif di mana Anda membutuhkan umpan balik visual dan penentuan posisi yang presisi.
Proyek ini menjembatani kesenjangan antara input analog dan output fisik. Potensiometer berfungsi sebagai kenop kontrol analog Anda, motor servo menerjemahkan posisi kenop tersebut menjadi sudut fisik (0 hingga 180 derajat), dan layar LCD memberikan konfirmasi visual langsung dari sudut saat ini. Pengaturan ini menjadi fondasi untuk banyak aplikasi praktis:
- Membangun sendi lengan robot dengan kenop kontrol manual untuk penentuan posisi yang presisi
- Membuat dudukan kamera pan-and-tilt di mana Anda mengontrol arah dengan kenop
- Mengembangkan pengukur analog yang menampilkan nilai di layar untuk panel instrumen khusus
- Membangun mekanisme kemudi kendaraan model yang dikendalikan jarak jauh dengan umpan balik visual
Komponen Perangkat Keras
Untuk membangun proyek ini, Anda akan membutuhkan komponen berikut:
- Papan Arduino (Uno atau sejenisnya)
- Motor servo (servo hobi standar 5V)
- Potensiometer (10kΩ disarankan)
- Layar LCD I2C (16x2 atau 20x4)
- Papan breadboard dan kabel jumper
Panduan Pengkabelan
Proyek ini secara cerdas menggunakan dua pin digital cadangan pada Arduino untuk menyuplai daya 5V ke potensiometer dan LCD, menghindari kebutuhan rel daya tambahan di breadboard. Pin 8 dikonfigurasi sebagai output dan diatur HIGH untuk memberi daya pada potensiometer, sementara pin 4 melakukan hal yang sama untuk VCC LCD. Teknik ini berguna ketika Anda membutuhkan sumber 5V tambahan tanpa menambah perangkat keras.
Koneksi pengkabelan adalah sebagai berikut (dalam video pada 05:08):
- Servo: Kabel sinyal ke pin digital 3, daya ke 5V, ground ke GND
- Potensiometer: Pin tengah ke pin analog A0, satu pin luar ke pin 8 (VCC2), pin luar lainnya ke GND
- LCD: VCC ke pin 4 (VCC3), GND ke GND, SDA ke A4, SCL ke A5
Penjelasan Kode
Kode untuk proyek ini dibangun di atas kontrol servo standar dengan menambahkan fungsionalitas tampilan LCD. Mari kita fokus pada elemen kunci yang dapat dikonfigurasi pengguna yang perlu Anda sesuaikan untuk pengaturan spesifik Anda.
Definisi Pin: Pin didefinisikan di bagian atas sketsa dan dapat diubah agar sesuai dengan pengkabelan Anda:
int potpin = A0; // pin analog untuk potensiometer
int servoPin = 3; // pin PWM digital untuk servo (3, 5, 6, 9, 10, 11)
int VCC2 = 8; // pin 5V tambahan untuk potensiometer
int VCC3 = 4; // pin 5V tambahan untuk LCD
Konfigurasi LCD: Alamat I2C sangat penting dan harus sesuai dengan modul LCD spesifik Anda. Banyak modul menggunakan 0x27, tetapi kode ini menggunakan 0x3F. Anda mungkin perlu menjalankan sketsa pemindai I2C untuk menemukan alamat Anda:
LiquidCrystal_I2C lcd(0x3F, 16, 2); // alamat, kolom, baris
Penyesuaian Resolusi Servo: Pembacaan analog dibagi dengan 5 untuk mengurangi fluktuasi. Anda dapat menyesuaikan nilai ini untuk menyeimbangkan stabilitas dengan resolusi. Pembagi yang lebih tinggi (seperti 10) memberikan pembacaan yang sangat stabil tetapi mengurangi jumlah posisi servo yang dapat Anda capai:
val = analogRead(potpin)/5; // dibagi 5 untuk stabilitas
Penempatan Simbol Derajat: Kode ini mencakup logika untuk menempatkan simbol derajat (°) dengan benar di samping nilai sudut, baik itu angka satu, dua, atau tiga digit. Ini memastikan tampilan selalu terlihat bersih dan profesional.
Demonstrasi Proyek Langsung
Ketika Anda menyalakan proyek, LCD akan menampilkan "Servo with Pot." di baris pertama. Saat Anda memutar potensiometer, lengan servo akan berputar untuk mencocokkan posisi kenop, dan baris kedua LCD akan menampilkan sudut saat ini dengan simbol derajat. Monitor serial juga mengeluarkan nilai sudut untuk tujuan debugging (dalam video pada 05:36).
Satu hal yang akan Anda perhatikan adalah bahwa sudut yang ditampilkan mungkin sedikit berfluktuasi antara dua nilai. Ini karena pembacaan analog dari potensiometer tidak sepenuhnya stabil. Kode ini mengatasinya dengan membagi pembacaan mentah dengan 5, yang secara signifikan mengurangi fluktuasi sambil tetap menyediakan 180 posisi yang berbeda. Jika Anda menginginkan pembacaan yang benar-benar stabil, Anda dapat meningkatkan pembagi, tetapi Anda akan kehilangan beberapa presisi dalam penentuan posisi servo.
Bab
- [00:00] Pengenalan proyek
- [00:31] Gambaran pengkabelan dan kebutuhan daya
- [01:05] Penjelasan kode bagian 1: Pengaturan LCD
- [02:36] Penjelasan kode bagian 2: Inisialisasi LCD dan logika tampilan
- [03:48] Penjelasan kode bagian 3: Penempatan simbol derajat
- [05:08] Diagram pengkabelan lengkap dan koneksi
- [05:36] Demonstrasi langsung dan pengujian
- [06:14] Memperbaiki fluktuasi nilai dan menyesuaikan resolusi
/*
Lesson 91
* S05 Servo with Potentiometer and LCD1602-I2C
*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
Watch full instructions on YouTube https://youtu.be/E-H-4igygzA
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
Update by Ahmad Shamshiri on January 1, 2019 in Ajax, Ontario, Canada
https://robojax.com?vid=robojax-servo-knob
*/
#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
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
int VCC3 = 4;// define extra VCC for LCD
int degPos;// degree symbol position
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
// lines bellow are for LCD
pinMode(VCC3, OUTPUT);// set pin 4 as output
digitalWrite(VCC3, HIGH);// set pin 4 HIGH so it acts as 5V pin
lcd.begin(); // initialize the LCD,
// Turn on the backlight and print a message.
lcd.backlight();
}
void loop() {
val = analogRead(potpin)/5; // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023/5, 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();
lcd.clear();
lcd.print("Servo with Pot.");
lcd.setCursor (0,1); // go to start of 2nd line
lcd.print("Angle:");
lcd.setCursor (7,1); // go to 7 char of of 2nd line
lcd.print(val);// print angle
if(val >99)
{
degPos =10;
}else if(val >9)
{
degPos =9;
}else
{
degPos =8;
}
lcd.setCursor (degPos,1); // go to 11 char of of 2nd line
lcd.print((char)223);// degree symbol
delay(500); // waits for the servo to get there
}
Hal-hal yang mungkin Anda butuhkan
-
AmazonBuy LCD1602-I2C from Amazonamzn.to
-
Amazon
-
Amazon
-
AmazonServo motor on Amazonamzn.to
-
eBayPurchase LCD1602-I2C from eBayebay.us
-
eBay
-
AliExpressPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
-
AliExpressPurchase an LCD1602 from AliExpresss.click.aliexpress.com
-
AliExpressPurchase LCD1602-I2C from AliExpresss.click.aliexpress.com
-
AliExpressPurchase SG90 servo motor 180 or 360 from AliExpresss.click.aliexpress.com
Sumber daya & referensi
-
EksternalLCD library from RoboJax (ZIP)robojax.com
-
EksternalPurchase an LCD1602 from AliExpresss.click.aliexpress.com
Berkas📁
File Fritzing
-
Modul LCD LCD1602-I2C dengan 4 kabel
LCD1602-I2C.fzpz0.01 MB
File lainnya
-
Datasheet motor SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB -
LCD1602 LiquidCrystal Library
robojax-LCD1602_LiquidCrystal.zip