CHƯƠNG III: PHÂN TÍCH THUẬT TỐN PID VÀ ỨNG DỤNG TRONG ROBOT DÒ ĐƯỜNG
3.1 Giới thiệu
Thuật tốn dị đường thường sử dụng trong thiết kế các robot dò đường là đặt một dãy các cảm biến sắp xếp đều nhau ph a trước robot. Việc lệch đường đi trong quá trình di chuyển sẽ được robot phát hiện thông qua các trạng thái của cảm biến, cụ thể: nếu hai cảm biến ở giữa cảm nhận được đường đi thì robot đang tiến thẳng về ph a trước, nếu các cảm biến bên phải cảm nhận được đường đi thì robot di chuyển lệch về bên trái và ngược lại nếu các cảm biến bên trái cảm nhận được đường đi thì robot đang di chuyển lệch sang phải. Thuật tốn này được ứng dụng khá thành cơng trong việc thiết kế robot dò đường.
3.2 Định nghĩa thuật tốn PID
Bộ điều khiển vi tích phân tỉ lệ (bộ điều khiển PID Proportional Integral Derivative) là một cơ chế phản hồi vòng điều khiển ( bộ điều khiển) tổng quát được sử dụng rộng rãi trong các hệ thống điều khiển công nghiệp – bộ điều khiển PID là bộ điều khiển được sử dụng nhiều nhất trong các bộ điều khiển phản hồi.
Bộ điều khiển PID sẽ tính tốn giá trị "sai số" là hiệu số giữa giá trị đo thông số biến đổi và giá trị đặt mong muốn. Bộ điều khiển sẽ thực hiện giảm tối đa sai số bằng cách điều chỉnh giá trị điều khiển đầu vào.
Trong trường hợp khơng có kiến thức cơ bản (mơ hình tốn học) về hệ thống điều khiển thì bộ điều khiển PID là sẽ bộ điều khiển tốt nhất. Tuy nhiên, để đạt được kết quả tốt nhất, các thơng số PID sử dụng trong tính tốn phải điều chỉnh theo tính chất của hệ thống, trong khi kiểu điều khiển là giống nhau, các thông số phải phụ thuộc vào đặc thù của hệ thống.
Giải thuật tính tốn bộ điều khiển PID bao gồm 3 thơng số riêng biệt, do đó đ i khi nó cịn được gọi là điều khiển ba khâu, các giá trị tỉ lệ, tích phân và đạo hàm, viết tắt là P, I, và
D. Giá trị tỉ lệ xác định tác động của sai số hiện tại, giá trị tích phân xác định tác động của
tổng các sai số quá khứ, và giá trị vi phân xác định tác động của tốc độ biến đổi sai số.
Tổng chập của ba tác động này dùng để điều chỉnh q trình thơng qua một phần tử điều khiển như vị trí của van điều khiển hay bộ nguồn của phần tử gia nhiệt. Nhờ vậy, những giá trị này có thể làm sáng tỏ về quan hệ thời gian: (P) phụ thuộc vào sai số hiện tại, (I) phụ 25
thuộc vào t ch lũy các sai số quá khứ, và (D) dự đoán các sai số tương lai, dựa vào tốc độ thay đổi hiện tại.
3.3 Phương pháp điều chế độ rộng xung (PWM)
Tốc độ quay của động cơ một chiều tỉ lệ thuận với điện áp đầu vào. Do đó, cách đơn giản nhất để điều khiển tốc độ quay của rotor là thay đổi mức điện áp đặt vào động cơ.
Nguyên tắc cơ bản để thay đổi tốc độ quay động cơ của phương pháp PWM là giữ nguyên giá trị điện áp vào và thay đổi thời gian đặt điện áp vào động cơ. Điều này có nghĩa, thời gian mức cao Ton trong một chu kỳ của xung ngõ vào động cơ càng lớn thì điện áp trung bình đặt vào động cơ càng cao, ngược lại thời gian mức thấp Toff trong một chu kỳ của xung ngõ vào động cơ càng lớn điện áp trung bình đặt vào động cơ càng thấp (hình 3.1). Đại lượng mơ tả mối quan hệ giữa khoảng thời gian Ton và Toff được gọi là độ rộng xung (duty_cycle), được tính theo cơng thức:
(a) Giản đồ độ rộng xung (b) Giản đồ xung với theo duty_cycle Hình 3.1 Giản đồ
thời gian của xung PWM
Thí dụ: Trong hình 3.1 (b), nếu chu kỳ xung 1kHz; thời gian xung mức cao Ton là 0.3ms và thời gian xung mức thấp Toff là 0.7ms. Biên độ xung là 12Vdc. Tốc độ quay của rotor là 1500 vịng/phút. Theo cơng thức: duty_cycle = 30% và điện áp trung bình đặt vào động cơ là 12 x 30% = 3.6Vdc. Tốc độ quay của rotor là 1500 x 30% = 450 vịng/phút.
3.4 Giải thuật điều khiển vi tích phân tỉ lệ (PID)
Giải thuật điều khiển vi tích phân tỉ lệ hiệu chỉnh sai số giữa giá trị biến đo được và giá trị mong muốn đạt đến bằng cách tính tốn và xuất ra một "hành động điều chỉnh" nhanh
chóng để giữ cho lỗi ở mức nhỏ nhất có thể được. Bộ điều khiển này bao gồm 3 thống số: Proportional (P), Integral (I) và Derivative (D), được thể hiện qua sơ đồ khối và phương trình tổng quát như hình 3.2:
Hình 3.2 Sơ đồ khối giải thuật PID Phương trình PID tổng quát:
Hàm lỗi e(t) tại thời điểm t: độ lệch giữa giá trị mong muốn và giá trị đo được: e(t) = Vset Vmo(t)
Trong đó:
Vset : Setpoint Value (giá trị điện áp mong muốn).
Vmo (t) : Measurable Output Value (giá trị điện áp đo được tại thời điểm t). Proportional P(t) (hàm tỉ lệ): điều khiển tỉ lệ với giá trị lỗi hiện tại. P(t) =
Kp.e(t) Trong đó:
Kp: hằng số tỉ lệ, tham số dùng để tinh chỉnh.
Integral I(t) (hàm t ch phân): điều khiển tương ứng với mức lỗi được t ch lũy theo thời gian.
Trong đó:
Ki: hằng số điều chỉnh hàm t ch phân.
Derivative D(t) (hàm vi phân): điều khiển tương ứng với tốc độ thay đổi của lỗi, hay độ dốc lỗi theo thời gian.
Trong đó:
Kd: hằng số điều chỉnh hàm vi phân.
3.5 Ứng dụng giải thuật trên robot dị đường
3.5.1 Mơ hình PID áp dụng cho robot dị đường
Giải thuật PID được tích hợp vào trong giải thuật điều khiển robot dị đường để tính tốn và xuất ra các giá trị PWM điều khiển 2 động cơ gắn với 2 bánh sau của robot dựa vào độ sai lệch giữa giá trị đo đạc ngõ vào và giá trị mong muốn. Độ sai lệch, hay còn gọi là giá trị lỗi, được tính tốn trong giải thuật PID là độ lệch giữa trạng thái hiện tại của robot so với đường đi. Có nghĩa là, độ sai lệch giữa giá trị hiện tại của bộ cảm biến so với giá trị của cảm biến trong trường hợp robot chạy thẳng về ph a trước. Việc áp dụng giải thuật PID trên robot dò đường sử dụng cảm biến quang được trình bày bằng một sơ đồ khối như hình 3.3.
Hình 3.3 Sơ đồ khối ứng dụng giải thuật PID vào robot dò đường
Trước khi đề cập ứng dụng giải thuật PID vào robot dò đường, tác giả đưa ra các định nghĩa của các thuật ngữ liên quan.
Vị trí mục tiêu Vset: trung tâm của đường đi, vị trí mà ta muốn robot hướng đến. Vị trí thực tại Vmo(t): vị trí thực của robot, có thể lệch bên trái hoặc lệch bên phải so với đường đi của robot.
giá trị âm hoặc dương hoặc bằng 0, được tính theo cơng thức.
Hệ số Kp, Ki, Kd là các hằng số tương ứng được sử dụng để điều chỉnh ảnh hưởng của các khâu tỉ lệ, khâu tích phân và khâu vi phân.
3.5.2 Giải thuật PID
Giải thuật PID là một chuỗi các phép toán để xác định các giá trị của khâu điều khiển tỉ lệ, khâu điều khiển vi phân và khâu điều khiển t ch phân. Sau đó, kết hợp các giá trị lại với nhau và xuất ra giá trị điều rộng xung PWM để điều khiển 2 động cơ bánh sau của robot. Khâu điều khiển tỉ lệ t nh toán độ lệch của robot, xác định được robot đang lệch phải hay lệch trái đường và xuất ra các giá trị PWM để điều khiển hai động cơ giúp robot quay về vị trí mục tiêu.
Độ lệch : e(n) = Vmo(n) – Vset
Đáp ứng khâu tỉ lệ : P(n) = Kp . e(n) Trong đó : n là số lần lấy mẫu
Hằng số Kp càng lớn thì sự điều chỉnh càng lớn khi lỗi càng lớn. Ngược lại, Kp càng nhỏ thì sẽ đáp ứng điều chỉnh nhỏ đối với lỗi.
Khâu điều khiển tích phân tính tốn dựa trên sai số t ch lũy theo thời gian. Robot càng lệch xa đường thì sai số t ch lũy càng lớn. Khâu này thể hiện rằng trong quá khứ robot có bám đường đi tốt hay khơng.
Sai số tích lũy:
E(n) e(n)
n 1
Đáp ứng khâu t ch phân: I(n)= Ki . E(n) (11) Trong đó : n là số lần lấy mẫu
Khâu vi phân tính tốn dựa trên sai số hiện tại. Khâu này cho biết tốc độ robot dao động qua lại của đường đi.
Tốc độ dao động: ∆e(n) = e(n) – e(n1) (12) Đáp ứng khâu vi phân: D(n) = Kd . ∆e(n) (13)
Cuối cùng, giá trị PWM để xuất ra điều khiển cho các động cơ điều khiển hoạt động của robot sẽ là
PWM = P(n) + I(n) + D(n) = Kp . e(n) + Ki . I(n) + Kd . D(n) PWM = Kp . [Vmo(n) – Vset] + Ki . e(n)+ Kd . [e(n) – e(n1)]
n 1
3.5.3 Hiệu chỉnh thuật toán PID
Khi sử dụng giải thuật PID để điều khiển robot dò đường, kết quả ban đầu cho thấy robot hoạt động kh ng như mong đợi. Trường hợp này được lý giải là do các giá trị của các hệ số Kp, Ki và Kd chưa phù hợp. Mỗi robot có một đặc tính vật lý khác nhau do đó các hệ số này cũng phải thay đổi để phù hợp. Phần tiếp theo, tác giả đề xuất các bước thực nghiệm đơn giản để xác định các hệ số Kp, Ki và Kd.
3.6 Giới thiệu phần mềm Arduino IDE
3.6.1 Giao diện
Hình 3.4 Giao diện phần mềm Arduino IDE3.6.2 Vùng lệnh 3.6.2 Vùng lệnh
Bao gồm các nút lệnh menu (File, Edit, Sketch, Tools, Help). Ph a dưới là các icon cho phép sử dụng nhanh các chức năng thường dùng của IDE được miêu tả như sau:
Hình 3.5 Các nút lệnh trong Arduino IDE
3.6.3 Vùng thơng báo (debug)
Hình 3.6 Vùng thơng báo trong Arduino IDE
Những thông báo từ IDE sẽ được hiển thị tại đây. Để ý rằng góc dưới cùng bên phải hiển thị loại board Arduino và cổng COM được sử dụng. Luôn chú ý tới mục này bởi nếu chọn sai loại board hoặc cổng COM, bạn sẽ không thể upload được code của mình.
Chúng ta có thể tìm thấy một vài hướng dẫn khắc phục các lỗi thường gặp khi lập trình Arduino tại Lỗi của Arduino? Và các lỗi thường gặp khi lập trình Arduino
3.6.4 Một số lưu ý
Khi lập trình, cần chọn port (cổng kết nối khi gắn board vào) và board (tên board mà bạn sử dụng). Giả sử, đang dùng mạch Arduino Uno, và khi gắn board này vào máy tính bằng cáp USB nó được nhận là COM4 thì bạn chỉnh như thế này là có thể lập trình được.
Hình 3.7 Chọn cổng kết nối cho Arduino Uno R3
CHƯƠNG VI: THIẾT KẾ VÀ CHẾ TẠO ROBOT DÒ ĐƯỜNG4.1 Thiết kế đường đi cho robot 4.1 Thiết kế đường đi cho robot
Từ ý tưởng có sẵn sử dụng phần nềm Panit 3D để mô phỏng đường đi giúp cho việc chế tạo đường đi của robot dị đường được dễ dàng hơn.
Hình 4.1 Mơ phỏng đường đi trên phần nềm Paint 3D 4.2.2 Hệ thống đường line cho robot 3D 4.2.2 Hệ thống đường line cho robot
Sử dụng băng keo cách nhiệt để làm đường line cho robot vì độ bám dính tốt, sự đàn hồi của băng keo tốt, k ch thước phù hợp với k ch thước để làm đường line cho robot.
Hình 4.2 Băng keo dùng làm đường line
Hình 4.3 Sân đi sau khi chế tạo 4.4 Kết quả thực nghiệm trên mơ hình robot tạo 4.4 Kết quả thực nghiệm trên mơ hình robot
Việc thiết kế và chế tạo robot dò đường sử dụng thuật tốn PID đã hồn thiện và đi vào sử dụng. Robot đã tự động nhận biết đường line để chạy với khả năng hoạt động chính xác cao.
Hình 4.5 Hồn thiện robot dị đường
Phần tiếp theo là áp dụng phương pháp PWM kết hợp với giải thuật PID, cịn gọi là PWM vịng kín, vào việc thực nghiệm mơ hình robot thật. Robot được thiết kế và chế tạo sử dụng dãy 5 cặp cảm biến thu phát quang để dò đường, mỗi cặp cảm biến cách nhau 25mm. Vì, đường đi là vạch đen được k trên nền trắng và có bề rộng 30mm.
PHẦN KẾT LUẬN KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
1. Rút ra kết luận
Sau thời gian làm đề tài với sự hướng dẫn tận tình của cơ ThS. Trần Thị Trà Vinh, trong đề tài này em đã thực hiện được những vấn đề sau:
- Tổng quan về robot dò đường.
- Thuật tốn PID sử dụng trong robot dị đường.
- Thiết kế và chế tạo robot dị đường sử dụng thuật tốn PID.
- Cơ cấu truyền động, bánh xe áp dụng cho Robot dò line và tránh vật cản. - Chế tạo mơ hình xe theo kích thước thực với linh kiện.
- Thực hiện kết nối và trao đổi dữ liệu giữa thiết.
- Tìm hiểu về các linh kiện cũng như cách thiết kế và làm mạch thủ cơng. - Đi sâu tìm hiểu một số thuật tốn điều khiển.
- Đề tài này rất phổ biến và có ứng dụng rất cao vào đời sống thực tiễn. - Ứng dụng cơng nghệ dị line tránh vật cản vào các hệ thống khác.
- Thiết kế mạch điều khiển trung tâm, mạch công suất điều khiển động cơ.
◎ Ưu điểm
- Mạch nhỏ gọn, các linh kiện rẻ.
- Mạch hoạt động tốt, khơng gặp vấn đề trong q trình chạy.
- Bộ điều khiển hoạt động đúng với yêu cầu đặt ra, đạt giá trị tiệm cận với giá trị đặt
(setpoint).
◎ Khuyết điểm
- Mạch cịn thơ sơ, dễ bị hư hỏng. - Bám line chưa ổn định
Hướng phát triển
- Tiếp tục nghiên cứu về xe dò line và tránh vật cản một cách ổn định và chính xác nhất có thể.
Đồ án tốt nghiệp được thực hiện dưới sự cố gắng nỗ lực của bản thân và sự chỉ bảo tận tình của giáo viên hướng dẫn, tuy nhiên những thiếu sót và khiếm khuyết là khơng thể tránh khỏi. Em rất mong nhận được các ý kiến đóng góp của thầy cơ giáo trong hội đồng cùng toàn thể các bạn để đồ án của em được hồn thiện hơn.
Việc thiết kế robot dị đường sử dụng thuật tốn PID đã hồn thành và đã đi vào hoạt động, đã tự dò vạch nhưng vẫn chưa phát huy được hết t nh năng. Trong quá trình làm đồ án em có tìm hiểu thêm chức năng qt mã vạch trên các sản phẩm nhưng do điều kiện chưa cho phép nên em chưa thể áp dụng vào đồ án này. Nếu có điều kiện em sẽ tiếp tục phát triển hệ thống hơn nữa đáp ứng nhu cầu ngày càng cao của con người. Em hy vọng có thể ứng dụng robot dị đường này có thể ứng dụng ngay trong đời sống hàng ngày chứ không đơn thuần chỉ là trên mơ hình.
TÀI LIỆU THAM KHẢO
[1]. Tran Quoc Cuong, Tran Thanh Phong, (May 2012), Speed Control of Dc
Motor By PWM Method Using Microcontroller. Faculty of Industrial Engineering, Tien Giang University, ISSN: 1859 4530.
[2]. WAN ROBAAH BINTI W AHMAD, (November 2008), A DC Motor
Controller Using PID Algorithm Implementation on PIC, Faculty of Electrical & Electronics Engineering, University Malaysia Pahang.
[3]. http://efa.tnut.edu.vn/Article/Download/242 [4]. http://arduino.vn/baiviet/1130bodieukhienpidgioithieuthuattoanphan1 [5]. http://arduino.vn/baiviet/1130bodieukhienpidgioithieuthuattoanphan2 [6]. http://arduino.vn/baiviet/1130bodieukhienpidgioithieuthuattoanphan3 [7]. http://arduino.vn/baiviet/1130bodieukhienpidgioithieuthuattoanphan4 PHỤ LỤC #include <SoftwareSerial.h> float Kp = 40, Ki = 0 ,Kd = 170;
float error = 0, P = 0, I = 0, D = 0, PID_value = 0; float previous_error = 0;
int sensor[5] = {0,0,0,0,0}; int gia_tri_ban_dau = 150; int PID_phai, PID_trai;
int stop_distance = 20;// Khoảng cách phát hiện vật cản //Kết nối SRF 05 OR 04
const int trigPin = 11; // kết nối chân trig với chân 11 arduino const int echoPin = 12; // kết nối chân echo với chân 12 arduino long duration; //
int distance; // biến khoảng cách int mode;
int bluetoothTx = 8; // định nghĩa chân 2 là chân truyền tín hiệu int bluetoothRx = 13;// định nghĩa chân 3 là chân nhận tín hiệu SoftwareSerial bluetooth(bluetoothTx, bluetoothRx); //định nghĩa chân motor trái
#define In1 4 #define In2 5
//định nghĩa chân motor phai #define ENB 10
#define In3 6 #define In4 7
char blue;// là vùng nhớ để so sánh kí tự trả về từ app. int spd; // giá trị băm xung( tay ga).
void setup() { bluetooth.begin(115200); bluetooth.print("$$$"); delay(100); bluetooth.println("U,9600,N"); bluetooth.begin(9600); Serial.begin(9600);
/ định nghĩa chân tín hiệu in & out pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(In1, OUTPUT); pinMode(In2, OUTPUT); pinMode(In3, OUTPUT); pinMode(In4, OUTPUT); pinMode(ENA,OUTPUT); pinMode(ENB,OUTPUT); }
void motor_left(int spd, byte dir) {
if (dir == 0) // motor trái quay tới {
digitalWrite(In2, LOW); digitalWrite(In1, HIGH); }