Hướng dẫn này là một phần của: Động cơ servo
Tất cả các video liên quan đến động cơ servo đều được liệt kê ở đây. Các liên kết đến các video khác nằm bên dưới bài viết này.
Điều khiển Servo bằng chiết áp và LCD1602 sử dụng Arduino
Trong hướng dẫn này, chúng ta sẽ học cách điều khiển động cơ servo bằng chiết áp và hiển thị giá trị chiết áp cũng như góc servo trên màn hình LCD1602. Dự án này là một cách tuyệt vời để kết hợp nhiều linh kiện và hiểu cách chúng có thể hoạt động cùng nhau để tạo ra một hệ thống tương tác. Đến cuối hướng dẫn này, bạn sẽ có một thiết lập hoạt động cho phép bạn điều chỉnh góc của servo bằng núm xoay trong khi đồng thời hiển thị các giá trị trên màn hình LCD.

Trước khi đi sâu vào việc đấu dây và viết mã, việc hiểu các linh kiện chúng ta sẽ sử dụng là rất hữu ích. Chiết áp hoạt động như một điện trở biến đổi có thể điều chỉnh điện áp đầu ra dựa trên vị trí của nó, mà chúng ta sẽ dùng để xác định góc của servo. LCD1602 sẽ hiển thị giá trị chiết áp hiện tại và góc tương ứng của servo. Bạn có thể tham khảo video (trong video tại 00:00) để có hướng dẫn trực quan về toàn bộ quá trình.
Giải Thích Phần Cứng
Các linh kiện chính chúng ta sẽ sử dụng trong dự án này là:
- Bo mạch Arduino: Đây sẽ là bộ điều khiển cho toàn bộ hệ thống, xử lý đầu vào từ chiết áp và điều khiển vị trí của servo dựa trên các đầu vào đó.
- Chiết áp: Một chiết áp 10k ohm sẽ được sử dụng để cung cấp đầu vào tương tự cho Arduino. Nó có ba chân: một chân kết nối với 5V, một chân với đất, và chân giữa kết nối với một chân tương tự (A0) trên Arduino.
- Động cơ Servo: Servo này sẽ được điều khiển bằng cách gửi cho nó một góc dựa trên vị trí của chiết áp. Dây tín hiệu kết nối với một chân kỹ thuật số trên Arduino (chân 9).
- Màn hình LCD1602: Màn hình này sẽ hiển thị giá trị chiết áp và góc của servo. Nó kết nối với một số chân kỹ thuật số trên Arduino để điều khiển.
Chiết áp hoạt động bằng cách thay đổi điện trở và do đó thay đổi điện áp tại chân giữa của nó, mà Arduino đọc như một đầu vào tương tự. Động cơ servo được điều khiển bằng cách gửi cho nó một tín hiệu điều chế độ rộng xung (PWM) cụ thể tương ứng với góc mong muốn. LCD1602 sử dụng một thư viện cho phép chúng ta dễ dàng điều khiển màn hình và xuất thông tin về chiết áp và servo.
Chi Tiết Từ Bảng Dữ Liệu
| Nhà sản xuất | nhiều hãng |
|---|---|
| Số bộ phận | LM016L |
| Điện áp Logic/IO | 5 V |
| Điện áp cung cấp | 4.5 – 5.5 V |
| Dòng điện đầu ra (mỗi kênh) | lên đến 2 mA |
| Dòng điện đỉnh (mỗi kênh) | 20 mA |
| Hướng dẫn tần số PWM | 50 Hz |
| Ngưỡng logic đầu vào | 0.3 x Vcc (thấp), 0.7 x Vcc (cao) |
| Sụt áp / RDS(on) / bão hòa | 0.2 V tối đa |
| Giới hạn nhiệt độ | 85 °C |
| Kiểu đóng gói | DIP 16 chân |
| Ghi chú / biến thể | Màn hình ký tự 16x2 |
- Kết nối chân giữa của chiết áp với chân tương tự A0.
- Đảm bảo servo được cấp nguồn 5V và kết nối với chân kỹ thuật số 9.
- Sử dụng thư viện thích hợp cho LCD và đảm bảo nó được bao gồm trong Arduino IDE của bạn.
- Cẩn thận với việc đấu dây để tránh đoản mạch, đặc biệt là với các kết nối servo.
- Kiểm tra rằng LCD được khởi tạo chính xác trong mã để tránh các sự cố hiển thị.

Hướng Dẫn Đấu Dây
Để đấu dây các linh kiện lại với nhau, hãy bắt đầu bằng việc kết nối chiết áp. Kết nối một chân ngoài của chiết áp với chân 5V trên Arduino, và chân ngoài còn lại với đất. Chân giữa đi đến chân tương tự A0.
Tiếp theo, đối với động cơ servo, kết nối dây màu nâu hoặc đen với đất, dây màu đỏ với chân 5V, và dây màu vàng hoặc cam với chân kỹ thuật số 9 trên Arduino. Đối với LCD1602, kết nối chân VDD với 5V, RW với đất, và V0 với chân giữa của chiết áp để điều chỉnh độ tương phản. Kết nối RS với chân 12, EN với chân 11, D4 với chân 5, D5 với chân 4, D6 với chân 3, và D7 với chân 2.
Bạn cũng nên bao gồm một điện trở 220 ohm mắc nối tiếp với đèn LED nếu bạn sử dụng một cái, kết nối nó với nguồn 5V. Ngoài ra, một tụ điện 470 µF có thể được kết nối qua nguồn và đất của servo để lọc nhiễu trong quá trình hoạt động.
Ví Dụ Mã & Giải Thích Chi Tiết
Mã bắt đầu bằng việc bao gồm các thư viện cần thiết và khởi tạo các chân cho LCD và servo. Đoạn trích sau đây cho thấy việc thiết lập LCD và servo:
void setup() {
lcd.begin(16, 2);
myservo.attach(9); // gắn servo vào chân 9 cho đối tượng servo
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Robojax Servo Knob");
delay(2000);
}
Đoạn mã này khởi tạo LCD cho 16 cột và 2 hàng, gắn servo vào chân 9, và hiển thị thông điệp chào mừng trên LCD. Hàm lcd.clear() đảm bảo rằng mọi thông điệp trước đó được xóa bỏ.
Tiếp theo, vòng lặp liên tục đọc giá trị của chiết áp và cập nhật vị trí của servo cũng như màn hình LCD:
void loop() {
val = analogRead(potpin); // đọc giá trị của biến trở
angle = map(val, 0, 1023, 0, 180); // chia tỷ lệ để sử dụng với servo
myservo.write(angle); // đặt vị trí servo theo giá trị đã chia tỷ lệ
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Giá trị biến trở:");
lcd.setCursor(11, 0);
lcd.print(val);
lcd.setCursor(0, 1);
lcd.print("Góc :");
lcd.setCursor(11, 1);
lcd.print(angle);
delay(500);
}
Vòng lặp này đọc giá trị biến trở, chuyển đổi nó thành góc tương ứng cho servo, và cập nhật màn hình LCD với cả giá trị biến trở và góc servo. Lệnh delay(500) ở cuối vòng lặp ngăn màn hình cập nhật quá nhanh.
Trình diễn / Điều mong đợi
Khi bạn cấp nguồn cho hệ thống, màn hình LCD sẽ hiển thị "Robojax Servo Knob" trong 2 giây, sau đó là giá trị biến trở và góc servo. Khi bạn xoay biến trở, góc servo sẽ thay đổi tương ứng, và giá trị biến trở mới sẽ được phản ánh trên màn hình LCD. Nếu bạn gặp bất kỳ hành vi bất thường nào, chẳng hạn như servo di chuyển sai hướng, hãy kiểm tra cách nối dây của biến trở và các kết nối servo (trong video tại 10:00).
Hướng dẫn này là một phần của: Động cơ servo
- Điều khiển Servo bằng nút nhấn sử dụng Arduino
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Điều khiển Servo bằng chiết áp sử dụng Arduino
- Điều khiển động cơ Servo bằng điều khiển từ xa hồng ngoại với Arduino
- Điều khiển động cơ servo Arduino bằng cách sử dụng biến trở
- Điều khiển vị trí servo bằng cử chỉ tay cho Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Cách sử dụng Servo 360° liên tục với Arduino
- Mã Arduino và Video cho Bộ điều khiển Servo PCA9685 16 kênh 12-bit V1
- Xây dựng Công tắc Bật/Tắt Servo Arduino với Nút Nhấn
/*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 November 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
*/
// May 20, 2018 20:08
// Written by Ahmad S. for Robojax.com at Ajax, Ontario, Canada
// Watch the video for this code at https://youtu.be/DN1LPMSZtNA
// This code is taken from http://robojax.com/learn/arduino
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// start of servo settings *******
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
int angle; // the angle servo is sent to
// END of servo settings *******
void setup() {
// Robojax Servo knob with LCD1602 Test
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
// Robojax Servo knob with LCD1602 Test
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Robojax Servo Knob");
delay(2000);
}
void loop() {
// Robojax Servo knob with LCD1602 Test
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
angle = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(angle); // sets the servo position according to the scaled value
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pot. Value:");
// set the cursor to column 0, line 1
lcd.setCursor(11, 0);
lcd.print(val);
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print("Angle :");
lcd.setCursor(11, 1);
lcd.print(angle);
delay(500);
// Robojax Servo knob with LCD1602 Test
}
Tài nguyên & tài liệu tham khảo
-
Bên ngoàiLCD1602 library (from GitHub)github.com
-
Bên ngoàiUsing LCD1602 LCD display for Arduinoyoutube.com
Tập tin📁
Không có tệp nào khả dụng.