Hình 3.3 Toàn bộ hệ thống với bộ điều khiển
Việc thử sai các giá trị thông số điều khiển PID theo nguyên tắc. Nếu hệ thống dao động quá mạnh tuơng ứng giảm KP, tăng KD. Nếu muốn giảm sai số xác lập thì tăng KI. Nếu muốn tăng thời gian đáp ứng, giảm sai số xác lập thì tăng KP. Qua quá trình thực nghiệm thử sai theo qui tắc trên, các thông số điều khiển được chọn như trên hình 3.5 và hình 3.6.
Hình 3.5 Bộ điều khiển PID vị trí
Hình 3.6 Bộ điều khiển PID góc nghiêng
Hình 3.8 Đáp ứng góc nghiêng của hệ thống
Nhận xét: Qua quá trình thử sai và có thử qua giải thuật di truyền để tìm được thông số PID phù hợp với hệ thống nhóm đã điều khiển được robot hai bánh tự cân bằng. Hệ thống ổn định với thời gian trong khoảng 3s cũng như có độ vọt lố chấp nhận được đối với bộ điều khiển vị trí và điều khiển được xe tự cân bằng với góc nghiêng bằng 0 độ.
Kết luận:
Trong chương 3, nhóm đã khảo sát tính ổn định, tính điều khiển và tính quan sát được của hệ thống. Mô hình hóa và mô phỏng hệ thống điều khiển trên Matlab giúp hệ thống hoạt động chính xác và ổn định. Có được những kết quả trên nhóm đã bắt đầu thiết kế chế tạo robot hai bánh tự cân bằng.
CHƯƠNG 4 THIẾT KẾ, CHẾ TẠO, TÍCH HỢP HỆ THỐNG 4.1 Thiết kế hệ thống cơ khí
Thiết kế hình dáng hình học
Xe được thiết kế và lắp ráp trên phần mềm Solidworks. Việc lắp ráp các chi tiết đã thiết kế trở nên đơn giản hơn và giống với thực tế.
Hình 4.2 Phần khung robot hai bánh tự cân bằng
Hình 4.4 Mô hình robot hai bánh tự cân bằng hoàn chỉnh
Tấm đỡ tầng 1 được thiết kế thêm 8 lỗ để bắt vít với 2 giá đỡ động cơ, 4 lỗ ở 4 góc để nối tầng, 8 lỗ để gắn trụ đồng để làm cữ chặn hộp pin và 1 lỗ chữ nhật để luồn dây từ động cơ lên.
Tấm đỡ tầng 2 của robot được thiết kế 8 lỗ để gắn shield V4 và arduino uno, 4 lỗ ở 4 góc để nối tầng, 1 lỗ chữ nhật để luồn dây.
Tấm đỡ tầng 3 của robot được thiết kế 4 lỗ ở 4 góc để nối tầng, và 2 lỗ chữ nhật để gắn công tắc.
Hình 4.6 Tấm đỡ tầng hai của robot
Tính toán lựa chọn kích thước đảm bảo các điều kiện bền
Do kết cấu của robot hai bánh tự cân bằng ứng suất lực sẽ tập trung vào vị trí hai trục động cơ và 2 tấm đỡ của xe nên ta sẽ tính sức bền trên 2 trục và 2 tấm đỡ. Phần tính toán sức bền được mô phỏng trên phần mềm Solidworks với lực thử được đặt trên mỗi tấm đỡ là 5 N (tổng lực tác dụng lên xe sẽ là 10 N).
Hình 4.8 Ứng suất của xe
Từ mô phỏng ta thấy ứng suất lớn nhất tập trung ở hai trục động cơ. Trong đó mỗi trục phải chịu ứng suất là 11342152 N/m2 (ứng suất giới hạn: 282685049 N/m2) với độ biến dạng tương ứng là 0.0001 mm. Biến dạng lớn nhất ở tấm đỡ trên là 0.828 mm với ứng suất tương ứng là 1323939 N/m2. Dựa vào những giá trị ứng suất lớn nhất và độ biến dạng lớn nhất của từng bộ phận đều nằm trong phạm vi cho phép nên hệ thống xe hoạt động bình thường.
Tính toán lựa chọn các chi tiết điển hình
Hình 4.10 Lực tác động lên bánh xe
Trong đó:
⃗ : Mô mem quán tính của động cơ tác dụng lên bánh xe.
⃗ , ⃗ : Phản lực liên kết giữa trục động cơ và bánh xe.
m: Khối lượng bánh xe.
⃗: Phản lực giữa bánh xe và mặt đất.
⃗ : Lực ma sát giữa bánh xe và mặt đất.
R: Bán kính bánh xe.
Tổng trọng lượng xe là 1.5 Kg. Tại vị trí cân bằng = 0.
= ̈ ⇔ − = ̈ ⇔ ̈ = − = 2( − μ ) Trong đó: : Vị trí góc của bánh xe. : Hệ số ma sát của bánh xe với sàn. Để xe hoạt động thì ̈ > 0 ⇔ > μ = 1.5 ∗ 9.8 2 ∗ 1 ∗ 0.065 2 ≈ 0.24
Vậy Mômen trục động cơ tác dụng lên bánh xe phải lớn hơn 0.24 .
Chọn động cơ có thông số kỹ thuật
Kích thước bao: 42mm x 42mm x 38mm.
Kích thước trục: 5mm.
Momen xoắn: 0,46 N.m.
Điện áp làm việc: DC 9-24V.
Dòng điện định mức: 1,2A.
Độ phân giải: 1.8 độ/1 bước.
Loại động cơ bước: 2 pha.
4.2 Thiết kế hệ thống điều khiển Sơ đồ khối Sơ đồ khối
Hình 4.12 Sơ đồ khối hệ thống
Khối pin: Cung cấp nguồn năng lượng cho khối bộ xử lý và khối bộ điều khiển động cơ.
Khối cảm biến góc nghiêng MPU6050: Thu thập về góc nghiêng và đưa thông tin về khối bộ xử lý Arduino Nano.
Khối cảm biến siêu âm HC-SR04: Thu thập về khoảng cách từ robot đến vật cản và đưa thông tin về khối bộ xử lý Arduino Uno.
Khối điều khiển qua app bluetooth: Gồm các thiết bị điều khiển các thông số qua app bluetooth giao tiếp được với module bluetooth HM-10.
Khối bộ xử lý Arduino Nano: Là khối đọc tín hiệu từ khối cảm biến góc nghiêng, giao tiếp với module bluetooth HM-10 và xuất ra tín điều khiển tới bộ điều khiển động cơ bước A4988.
Khối bộ xử lý Arduino Uno: Là khối đọc tín hiệu từ khối cảm biến siêu âm HC-SR04 sau đó xuất ra tín hiệu gửi về khối bộ xử lý Arduino Nano.
Khối module bluetooth HM-10: Làm nhiệm vụ giao tiếp giữa bộ xử lý Arduino Nano và app điều khiển bluetooth.
Khối bộ điều khiển động cơ bước A4988: Xử lý tín hiệu gửi đến từ bộ xử lý Arduino Nano để điều khiển động cơ bước.
Khối động cơ bước: Nhận tín hiệu điều khiển từ bộ điều khiển động cơ bước A4988 và thực hiện nhiệm vụ theo yêu cầu.
Lưu đồ thuật toán
Hình 4.13 Lưu đồ thuật toán hệ thống
Hình 4.14 Lưu đồ thuật toán hệ thống – điều khiển bluetooth
Hình 4.15 Lưu đồ thuật toán hệ thống – bám vật
Hình 4.16 Lưu đồ thuật toán – chương trình ngắt
Mạch điều khiển [5]
Hình 4.17 Sơ đồ kết nối của hệ thống
Các cơ cấu chấp hành, hệ thống cảm biến và hệ thống điều khiển được kết nối với nhau (Hình 4.17). Sử dụng ba nguồn riêng biệt để cấp cho động cơ bước là nguồn 7.4V, bộ điều khiển Arduino Uno R3 là nguồn 7.4V và bộ điều khiển Arduino Nano là nguồn 5V.
Hình 4.18 Sơ đồ kết nối Arduino Nano với module A4988
Sơ đồ đi dây (Hình 4.18) sử dụng để điều khiển động cơ bước thông qua module điều khiển động cơ A4988. Module A4988 được kết nối với bộ xử lý Arduino Nano để nhận các tín hiệu từ cảm biến từ đó điều khiển động cơ bước cho phù hợp.
Bảng 4-1 Bảng kết nối Arduino Nano với module A4988
A4988 Arduino Nano
Enable 8 MS2 10 Dir 2 Step 5 Vcc 5V GND GND MS1 GND MS3 GND
Ngoài ra, trong module A4988 có chân Sleep nối với chân Reset, chân VMOT và chân GND lấy nguồn từ bên ngoài để cấp động cơ và 4 chân 1A, 2A, 1B và 2B kết nối với các chân tương ứng của động cơ bước.
Hình 4.19 Sơ đồ kết nối Arduino Nano với MPU 6050
Cảm biến gia tốc MPU 6050 nhận các tín hiệu từ trạng thái của robot.
Bảng 4-2 Bảng kết nối MPU6050 với Arduino Uno R3
MPU6050 Arduino Nano
VCC 5V
GND GND
SCL A5
SDA A4
Chân VCC là chân nguồn cho cảm biến được cấp từ nguồn 5V trên arduino.
Chân SCL và SDA là hai chân nhận dữ liệu giao tiếp I2C được kết với hai chân tín hiệu tương tự analog trên Arduino.
Hình 4.20 Sơ đồ kết nối Arduino Nano với module bluetooth HM-10
Module Bluetooth HM-10 nhận tín hiệu từ bên ngoài đưa tín hiệu đó vào Arduino để xử lý tín hiệu và đưa ra tín hiệu điều khiển robot.
Bảng 4-3 Bảng kết nối Arduino Nano với module bluetooth HM-10
Bluetooth HM-10 Arduino Nano
VCC 5V
GND GND
TXD RXD
RXD TXD
Hình 4.21 Sơ đồ kết nối Arduino Uno với cảm biến siêu âm
Cảm biến siêu âm HC-SR04 phát hiện khoảng cách từ robot đến vật cản.
Bảng 4-4 Bảng kết nối Arduino Nano với cảm biến siêu âm
Cảm biến siêu âm Arduino Uno
VCC 5V
GND GND
Trig 8
Echo 7
4.3 Chế tạo robot hai bánh tự cân bằng
Sau khi thiết kế các chi tiết cơ khí của robot, nhóm tiến hành lắp ráp hoàn chỉnh phần khung robot hai bánh tự cân bằng.
Động cơ bước được gá vào loại giá đỡ động cơ bước tương ứng để đảm bảo khi vận hành không gây rung lắc ảnh hưởng đến cân bằng của xe. Phần trục động cơ được lắp thêm khớp nối lục giác để gắn với bánh xe (Hình 4.22).
Hình 4.22 Lắp ráp động cơ bước vào giá đỡ
Sau khi hoàn thiện phần lắp động cơ với giá đỡ động cơ, nhóm tiến hành lắp giá động cơ với tấm đỡ (Hình 4.23).
Hình 4.24 Chế tạo phần hộp pin
Hình 4.26 Chế tạo tầng hai của robot
Hình 4.28 Robot hai bánh tự cân bằng hoàn chỉnh
Kết quả chạy thử nghiệm
Bảng 4-5 Kết quả chạy thử nghiệm
STT Nội dung Kết quả Ghi chú
1 Tốc độ tối đa 1.6 m/s 2 Tốc độ Robot ổn định 0.45 m/s 3 Góc nghiêng lớn nhất xe có thể tự cân bằng 22 0
4 Khối lượng vật có thể mang 150g
5
Độ nghiêng lớn nhất của dốc mà
Robot có thể đi 17 0
6
Độ nghiêng của dốc mà Robot
có thể đi ổn định 4 0
7 Thời gian hoạt động 1h10p
Đến khi xe mất cân bằng
8
Phạm vi điều khiển qua
bluetooth 20m
Không có vật cản
9
Bề rộng đường tối thiểu để
Robot xoay 1800 28cm 10 Góc lệch Robot khi đi thẳng 40 11 Phạm vi Robot theo vật 3m
12
Khoảng cách an toàn Robot theo
vật 0.5m
Nhận xét:
Trong quá trình chạy thử nghiệm robot trên hai bề mặt có độ ma sát khác nhau là sàn gạch hoa (bề mặt nhẵn – hệ số ma sát nhỏ) và sàn bê tông (bề mặt nhám – hệ số ma sát lớn), nhóm nhận thấy tốc độ di chuyển trên sàn gạch hoa nhanh hơn so với sàn bê tông nhưng khả năng cân bằng trên sàn bê tông lại tốt hơn so với sàn gạch hoa. Điều này hoàn toàn phù hợp với lý thuyết robot sẽ cân bằng tốt ở những nơi có ma sát cao và di chuyển nhanh hơn ở những nơi có ma sát nhỏ hơn.
Kết luận:
Trong chương 4, nhóm đã chế tạo được hệ thống cơ khí đúng trọng tâm cho robot hai bánh tự cân bằng. Bên cạnh đó, nhóm tính toán sức bền cho hệ thống cơ khí để đảm bảo an toàn khi hoạt động. Thiết kế được mạch điều khiển cho robot hoạt động ổn định và điều khiển các thông số phù hợp với hệ thống. Chạy thử nghiệm hệ thống trên các bề mặt khác nhau để quan sát sự ổn định của robot trên các bề mặt đó.
KẾT LUẬN
Kết quả đạt được
Thiết lập mô hình toán học, hàm trạng thái của mô hình và mô phỏng thành công mô hình trên Matlab Simulink.
Thiết kế, chế tạo thành công robot hai bánh tự cân bằng.
Các thành phần cơ khí đảm bảo đủ độ bền trong khi hoạt động.
Các đặc tính đầu ra (góc nghiêng, vị trí) của hệ hoạt động ổn định thông qua việc điều chỉnh các thông số của bộ điều khiển PID.
Đánh giá
Do đây lần đầu tham gia vào quá trình thiết kế, chế tạo nên phần tính toán hệ thống cơ khí chưa được tối ưu.
Phần mềm điểu khiển tuy đã có khả năng dự trù được một vài lỗi nhưng vẫn chưa đầy đủ và hầu hết vẫn phải khắc phục thủ công.
Tính thẩm mĩ của robot chưa hoàn hảo.
Năng suất của hệ thống không được cao.
Hạn chế và hướng giải quyết
Đồ án đã điều khiển được các thông số về góc nghiêng của thân xe và vị trí của xe khá ổn định trên địa hình phẳng. Nhưng bên cạnh đó còn thông số cần điều khiển để hệ thống hoạt động ổn định đó là góc xoay của xe, lọc nhiễu tín hiệu, khả năng tránh vật cản. Do đó, để hoàn thiện hơn đồ án cần:
Tối ưu hóa khối lượng, thuật toán để mô hình có thể hoạt động linh hoạt, dễ dàng điều khiển, tiết kiệm năng lượng.
Thiết kế thêm bộ lọc nhiễu tín hiệu.
Có thể gắn thêm Camera và GPS để robot có thể định vị, ghi hình, xử lý ảnh và tự hoạt động trong không gian lớn.
TÀI LIỆU THAM KHẢO
[1] Nguyễn Văn Trường, Nguyễn Xuân Thuận, Nguyễn Anh Tú, Bài giảng học phần Robot di động, Đại học Công nghiệp Hà Nội.
[2] Rich Chi Ooi, Balancing a Two-Wheeled Autonomous Robot, Final Year Thesis, 2003.
[3] Lê Ngọc Duy, Giáo trình cảm biến và hệ thống đo, 2019.
[4] Nguyễn Văn Đồng Hải, Điều khiển PID xe hai bánh tự cân bằng.
https://www.youtube.com/watch?v=kqfubY-UUhc.
[5] Phạm Thanh Khuyên, Arduino cho người bắt đầu, 2021.
https://www.youtube.com/watch?v=8uIownT95aQ&list=PL80KixHnvz1 DMNv9w5Ng8ZMV1_LqfRlkH.
PHỤ LỤC
Phụ lục 1. Chương trình mô phỏng hệ thống trên phần mềm Matlab
km=0.022; % he so momen
ke=0.4; % he so back emf cua dong co
R=1.7; % dien tro dong co
r=0.0325; % ban kinh xe
Mp=1; % khoi luong robot
Mw=0.03; % khoi luong banh xe
Ip=0.0012; % momen quan tinh than robot
Iw=0.000016; % momen quan tinh banh xe
l=0.05; % khoang cach tu tam banh xe toi tam than xe
g=9.81; % gia toc trong truong
teta_init=0; % goc nghieng ban dau
teta_dot_init=0; % van toc goc nghieng ban dau
x_init=0; % vi tri ban dau
x_dot_init=0; % van toc xe ban dau
beta = 2*Mw+2*Iw/r^2+Mp; alpha = Ip*beta+2*Mp*l^2*(Mw+Iw/r^2); A = [0 1 0 0; 0 (2*km*ke*(Mp*l*r-Ip-Mp*l^2))/(R*r^2*alpha) (Mp^2*g*l^2)/alpha 0; 0 0 0 1; 0 (2*km*ke*(r*beta-Mp*l))/(R*r^2*alpha) (Mp*g*l*beta)/alpha 0] B = [0; (2*km*(Ip+Mp*l^2-Mp*l*r))/(R*r*alpha); 0; (2*km*(Mp*l-r*beta))/R*r*alpha] C = [1 0 0 0; 0 0 1 0] D = [0; 0]
P = [B A*B A^2*B A^3*B]; %Khao sat tinh dieu khien
rank(P);
L = [C; C*A; C*A^2; C*A^3]; %Khao sat tinh quan sat
rank(L);
[num,den] = ss2tf(A,B,C,D) %Tinh ham truyen
HTXE1 = tf(num(1,:),den) HTXE2 = tf(num(2,:),den) pzmap (A,B,C,D)
Phụ lục 2. Chương trình điều khiển
Code nạp cho Arduino Uno
const int trig = 8; // chân Trig(HC-SR04) - chân 8(Arduino Uno) const int echo = 7; // chân Echo(HC-SR04) - chân 7(Arduino Uno) const int control_1 = 11; // chân 11(Arduino Uno)-chân 11(Arduino Nano) const int control_2 = 12; // chân 12(Arduino Uno)-chân 12(Arduino Nano) const int control_3 = 13; // chân 13(Arduino Uno)-chân 13(Arduino Nano) **************************************************************
// HÀM SETUP void setup(){
Serial.begin(9600); // giao tiếp Serial với baudrate 9600 pinMode(trig, OUTPUT); // chân trig sẽ phát tín hiệu pinMode(echo, INPUT); // chân echo sẽ nhận tín hiệu pinMode(control_1, OUTPUT); // thiết đặt chân control_1 là OUTPUT pinMode(control_2, OUTPUT); // thiết đặt chân control_2 là OUTPUT pinMode(control_3, OUTPUT);} // thiết đặt chân control_3 là OUTPUT **************************************************************
// HÀM LOOP void loop(){
unsigned long duration; // biến đo thời gian int distance; // biến lưu khoảng cách
/* Phát xung từ chân trig */
digitalWrite(trig, 0); // tắt chân trig delayMicroseconds(2); // dừng 2 microSeconds digitalWrite(trig, 1); // phát xung từ chân trig delayMicroseconds(5); // xung có độ dài 5 microSeconds digitalWrite(trig, 0); // tắt chân trig
/* Tính toán thời gian */ duration = pulseIn(echo, HIGH); // đo độ rộng xung HIGH ở chân echo distance = float (duration / 2 / 29.412); // tính khoảng cách đến vật if (distance > 50)digitalWrite(control_1, HIGH);
// nếu vật cản ở xa hơn 50 cm else digitalWrite(control_1, LOW); // nếu vật cản ở gần hơn 50 cm if (30 < distance <= 50)digitalWrite(control_2, HIGH);
// nếu vật cản ở trong khoảng từ 30-50 cm