Giao diện kết nối Hình 1 - 1: Vị trí các mạch điện trên xe TDC MCR Xe TDC MCR bao gồm board cảm biến dò đường, board xử lý cảm biến, board MCU PIC16F887, board công suất 2 DC Motor L29
Trang 1Tran Hong Van Microsoft 10/1/2012 HƯỚNG DẪN TÌM HIỂU CHƯƠNG TRÌNH TDC MCR
Trang 2MỤC LỤC
CHƯƠNG 1: ĐẶT TẢ CÁC MODULE CỦA XE TDC MCR
1.1 Giao diện kết nối 1
1.2 Board cảm biến dò đường: 2
1.3 Board xử lý sensor: 3
1.4 Board công suất 2 DC Motor L298: 4
1.5 Boar vi điều khiển PIC16F887: 6
CHƯƠNG 2: ĐIỀU KHIỂN MODULE CỦA XE TDC MCR 2.1 Khối LED 9
2.2 Khối Loa Beep 10
2.3 Khối DipSwitch 11
2.4 Khối nút nhấn 12
2.5 Khối RC Servo 13
2.6 Khối động cơ DC 14
2.7 Khối Xử lý sensor 16
CHƯƠNG 3: XÂY DỰNG GIẢI THUẬT ĐIỀU KHIỂN 3.1 Cấu trúc chương trình 17
3.2 Giải thuật xử lý khi qua các đoạn đường thẳng và cong 19
3.3 Giải thuật qua đoạn đường 900 0 22
3.4 Giải thuật chuyển làn bên phải 23
3.5 Các lỗi có thể xảy ra trên đường đua 25
CHƯƠNG 4: CÀI ĐẶT CÔNG CỤ LẬP TRÌNH 4.1 Cài đặt phần mềm MPLAB 33
4.2 Mở dự án mẫu 40
CHƯƠNG 5: CHƯƠNG TRÌNH MẪU MCR 5.1 Mã chương trình 42
5.2 Giải thích một số đoạn code trong chương trình 53 CHƯƠNG 6: NẠP CHƯƠNG TRÌNH VÀ SỬ DỤNG XE TDC MCR
Trang 3MỤC LỤC HÌNH ẢNH
Hình 1 - 1: Vị trí các mạch điện trên xe TDC MCR 1
Hình 1 - 2: Sơ đồ khối kết nối các mạch trên TDC MCR 1
Hình 1 - 3: Hình dáng board dò đường 2
Hình 1 - 4: Nguyên lý 1 đầu dò cảm biến 2
Hình 1 - 5: Nguyên lý phản xạ ánh sáng 2
Hình 1 - 6 : Hình dáng board xử lý dò đường 3
Hình 1 - 7: Nguyên lý 1 kênh xử lý cảm biến 3
Hình 1 - 8: Hình dáng board công suất 2 DC Motor L298 4
Hình 1 - 9: Nguyên lý board công suất 2 DC Motor L298 5
Hình 1 - 10: Bảng trạng thái tín hiệu điều khiển 1 kênh DC Motor 5
Hình 1 - 11: Hình dáng board vi điều khiển 6
Hình 1 - 12: Sơ đồ nguyên lý board vi điều khiển PIC16F887 cho xe MCR 7
Hình 2- 1: Nguyên lý Led 9
Hình 2- 2: Các loại led thông dụng 9
Hình 2- 3: 2 Led trên board 9
Hình 2- 4: Sơ đồ nguyên lý khối Led 10
Hình 2- 5: Buzzer thực tế trên board 10
Hình 2- 6: Sơ đồ nguyên lý điều khiển Buzzer 10
Hình 2- 7: Dipswitch thực tế 11
Hình 2- 8: Sơ đồ nguyên lý dipswitch 4 11
Hình 2- 9: Dipswitch 4 trên board 11
Hình 2- 10: Sơ đồ nguyên lý khối nút nhấn 12
Hình 2- 11: Nút nhấn thực tế trên board 12
Hình 2- 12: Tín hiệu rung nhiễu khi nhấn nút 13
Hình 2- 13: RC Servo 14
Hình 2- 14: Tín hiệu PWM điều khiển RC Servo 14
Hình 2- 15: Động cơ DC 15
Trang 4Hình 2- 16: Điều khiển chiều quay động cơ điện một chiều 15
Hình 2- 17: PWM điều khiển tốc độ động cơ 16
Hình 2- 18: Khối sensor 16
Hình 3- 1: Sơ đồ giải thuật 17
Hình 3- 2: Sensor bắt được nửa line bên trái 17
Hình 3- 3: Chạy qua đoạn chuyển làn trái 18
Hình 3- 4: Sensor bắt được nửa line bên phải 18
Hình 3- 5: Chạy qua đoạn chuyển làn trái 18
Hình 3- 6: Sensor bắt được nguyên line 19
Hình 3- 7: Chạy xong đoạn đường cua 90 0 19
Hình 3- 8: Sensor báo hiệu vị trí giữa line 21
Hình 3- 9: Sensor báo hiệu lệch nhỏ về phía bên trái so với vị trí trung tâm 21
Hình 3- 10: Sensor báo hiệu lệch về phía bên trái so với vị trí trung tâm 22
Hình 3- 11: Các bước qua đoạn đường 90 0 22
Hình 3- 12: Các bước qua vị trí line cắt ngang 23
Hình 3- 13: Các bước chuyển làn bên phải 24
Hình 3- 14: Các bước qua vị trí nửa line cắt ngang 24
Hình 3- 15: Vị trí queo trái – xe vượt qua đường đua 25
Hình 3- 16: Vị trí xác định line cắt ngan, xe bị lệch 26
Hình 3- 17: Sensor bắt nữa line bên phải 26
Hình 3- 18: Xe không quẹo một cách chính xác 26
Hình 3- 19: Các trạng thái sensor khi quẹo 27
Hình 3- 20: Vị trí chuyển làn xe tiếp tục đi về phía trước 28
Hình 3- 21: Các trạng thái sensor trước khi chuyển làn 28
Hình 3- 22: Chạy theo line biên của đường đua 29
Hình 3- 23: Trạng thái quẹo bám line trung tâm và line biên 29
Hình 3- 24: Trạng thái sensor thay đổi chính xác 30
Hình 3- 25: Trạng thái sensor thay đổi không chính xác 30
Trang 5Hình 3- 26: Thay đổi trạng thái 0x83, 0x81, 0xC1 30
Hình 3- 27: Các trạng thái chuyển line biên về line trung tâm 31
Hình 3- 28: Xe chuyển làn sau đó vượt khỏi đường đua 31
Hình 3- 29: Trạng thái chuyển làn đúng và không đúng 32
Hình 4 1: Click file setup 33
Hình 4 2: Nạp chương trình cài đặt 33
Hình 4 3: Đồng ý tiếp tục cài đặt phần mềm 34
Hình 4 4: Chấp nhận các điều khoản khi sử dụng phần mềm 34
Hình 4 5: Lựa chọn cách cài đặt 34
Hình 4 6: Lựa chọn thư mục chứa phần mềm 35
Hình 4 7: Chấp nhận cài đặt ứng dụng Maestro 35
Hình 4 8: Chấp nhận cài đặt ứng dụng MPLAB C32 35
Hình 4 9: Xem lại các lựa chọn cài đặt 36
Hình 4 10: Tiến trình cài đặt 36
Hình 4 11: Cài đặt HI – TECH C? 36
Hình 4 12: Tiếp tục cài đặt phần mềm hỗ trợ HI – TECH C 37
Hình 4 13: Chấp nhận cài đặt HI – TECH C 37
Hình 4 14: Lựa chọn thư mục cài đặt HI – TECH C 38
Hình 4 15: Chọn ngôn ngữ sử dụng trong HI – TECH C 38
Hình 4 16: Quá trình cài đặt HI – TECH C 38
Hình 4 17: Hoàn thành quá trình cài đặt HI-TECH C 39
Hình 4 18: Hoàn thành quá trình cài đặt MPLAB 39
Hình 4 19: Các hướng dẫn MPLAB IDE 39
Hình 4 20: Mở dự án mẫu 40
Hình 4 21: Code của dự án mẫu 40
Hình 4 22: Biên dịch dự án mẫu 41
Hình 5 1: Lưu đồ giải thuật do line 58
Hình 6 1: Nối nguồn cho xe 59
Trang 6Hình 6 2: Mở nguồn cho xe 59
Hình 6 3: Báo pin yếu 60
Hình 6 4: Sạc pin 60
Hình 6 5: Nối một đầu USB vào máy tính 61
Hình 6 6: Nối 1 đầu USB vào mạch nạp 61
Hình 6 7: Nối mạch nạp với board vi điều khiển pic16f887 61
Hình 6 8: Mạch nạp kết nối thành công 62
Hình 6 9: Mạch nạp kết nối không thành công 62
Hình 6 10: Biên dịch thành công 63
Hình 6 11: Nạp dữ liệu xuống vi điều khiển 63
Trang 7CHƯƠNG 1: ĐẶT TẢ CÁC MODULE CỦA XE TDC MCR
1.1 Giao diện kết nối
Hình 1 - 1: Vị trí các mạch điện trên xe TDC MCR
Xe TDC MCR bao gồm board cảm biến dò đường, board xử lý cảm biến, board MCU PIC16F887, board công suất 2 DC Motor L298 kết hợp với nhau để điều khiển sự di chuyển của xe, tức là điều khiển hệ thống động cơ trái, phải và động cơ rc servo
Hình 1 - 2: Sơ đồ khối kết nối các mạch trên TDC MCR
Mạch dò
đường
VĐK PIC 16F887
Buttons DIPSW4
Mạch xử
lý sensor
Led Buzzer
Trang 81.2 Board cảm biến dò đường:
a Hình dáng:
Hình 1 - 3: Hình dáng board dò đường
b Sơ đồ nguyên lý 1 đầu dò cảm biến:
Hình 1 - 4: Nguyên lý 1 đầu dò cảm biến
c Nguyên lý hoạt động:
Board cảm biến dò đường gồm 8 đầu dò sensor, mỗi đầu dò có nguyên lý như hình
1-4 Nguồn cấp VCC=5V lấy từ board xử lý cảm biến, led phát là led siêu sáng phát ánh sáng trắng, phần thu dùng quang trở , qua cầu phân áp R19 và PR1 tín hiệu ra là áp thay đổi tùy thuộc vào lượng ánh sáng phản xạ về (theo hình 1-5) Tín hiệu ra IN1 được đưa đến mạch xử lý cảm biến
Hình 1 - 5: Nguyên lý phản xạ ánh sáng
Trang 91.3 Board xử lý sensor:
a Hình dáng:
Hình 1 - 6 : Hình dáng board xử lý dò đường
b Sơ đồ nguyên lý 1 kênh xử lý sensor:
Hình 1 - 7: Nguyên lý 1 kênh xử lý cảm biến
c Nguyên lý hoạt động:
Tín hiệu IN1 từ đầu dò sensor được đưa đến ngõ vào (-) để so sánh với với ngõ vào (+) của opam LM324 Tại ngỏ vào (+) luôn có 1 điện áp V+ được thay đổi bởi biến trở 100K Nếu sensor được đưa đến nền màu trắng thì lượng ánh sáng phản xạ về nhiều, điện trở quang trở sẽ nhỏ làm điện áp IN1 cũng nhỏ theo Ta có điện áp IN1 cũng chính
Trang 10là điện áp V-, V-<V+ nên ngõ ra OUT1 của opam =1 Qua cổng đệm không đảo 74HC245 thì T1=5V làm led D10 sáng, tín hiệu T1 này được đưa đến board MCU để
Trang 11Hình 1 - 9: Nguyên lý board công suất 2 DC Motor L298
c Nguyên lý hoạt động:
Board công suất 2 DC motor gồm các khối:
Khối ổn áp nguồn: gồm nguồn 5V cấp cho các mạch logic, 6V cấp cho RC Servo
Motor
Khối mạch logic : gồm các cổng NOT và NAND kết hợp nhau nhằm tạo ra các
ngõ vào gồm tín hiệu PWM ( tốc độ), DIR (đảo chiều quay) và các ngõ ra IN1,
IN2 tương thích với logic điều khiển của L298 Bảng trạng thái tín hiệu điều
khiển 1 kênh DC Motor như hình sau:
Hình 1 - 10: Bảng trạng thái tín hiệu điều khiển 1 kênh DC Motor
Trong bảng trên ta thấy: để Motor có thể quay thuận, quay ngược và thay đổi tốc độ ta
cần 2 kênh điều chế xung PWM, điều này lại hạn chế đối với vi điều khiển hỗ trợ ít
kênh PWM Để giải quyết điều này thì khối logic đã đảm nhiệm, với ngõ vào PWM và
DIR ta dễ dàng điều khiển DC Motor, lúc này ta chỉ cần một kênh PWM để thay đổi tốc
độ và 1 chân tín hiệu số để đảo chiều quay
Trang 121.5 Boar vi điều khiển PIC16F887:
Trang 13Khối vi điều khiển: Các kết nối:
Các chức năng phụ:
Hình 1 - 12: Sơ đồ nguyên lý board vi điều khiển PIC16F887 cho xe MCR
Trang 14c Nguyên lý hoạt động:
Khối nguồn: nguồn vào từ pin Lipo 11.1V, có led báo nguồn, zenner 12V hạn
quá áp Ổn áp 5V dùng LM2576, dòng 3A, nguồn này sử dụng cấp cho board vi
điều khiển và board cảm biến
Khối báo yếu pin: việc sử dụng pin Lipo cấp cho xe có nhiều ưu điểm nổi trội:
dung lượng cao 1500mA ( thời gian sử dụng xe lâu hơn), khối lượng nhẹ; nhưng
nó cũng có những hạn chế nhất định: giá thành cao, nếu sử dụng không đúng qui cách ( sử dụng dưới áp giới hạn của pin) thì tuổi thọ của pin sẽ giảm đáng kể, thậm chí sẽ bị hỏng Do đó, mạch báo yếu pin trong quá trình sử dụng xe là hết sức cần thiết Ngưỡng điện áp so sánh yếu pin đã được chỉnh trước là 10VDC, nếu điện áp pin dưới ngưỡng này thì đèn đỏ sẽ sáng lên và pin phải cần đem đi sạc
Khối vi điều khiển: MCU sử dụng là PIC 16F887, dao động xung clock 20Mhz
Các cổng kết nối: ICSP dùng cho nạp chíp, SENSOR dùng cho kết nối với board
xử lý sensor, DC MOTOR dùng kết nối board công suất
Các chức năng phụ: BUTA, BUTB, BUTC sử dụng cho các chức năng như
START, MODE….; còi BUZZER dùng cho gỡ rối chương trình; LEDA, LEDB là các user led dùng chung với DIPSW4 để hiển thị các trạng thái test xe; DIPSW4
sử dụng mục đích test các chức năng trên xe
Trang 15CHƯƠNG 2: ĐIỀU KHIỂN MODULE CỦA XE TDC MCR
2.1 Khối LED
a Hình nguyên lý của LED:
Hình 2- 1: Nguyên lý Led
b Các loại Led thông dụng
Hình 2- 2: Các loại led thông dụng
c Led thực tế trên board
Hình 2- 3: 2 Led trên board
d Điều khiển Led
Led (diốt phát quang) thường dùng trên các mạch điện tử để hiển thị thông tin, với 2 trạng thái tắt/sáng Led thường được mắc nối tiếp với một điện trở (có giá trị khoảng từ 100Ω đến 2kΩ) để hạn dòng (tránh làm hỏng led), thành một đoaạn mạch AB nối tiếp
Trang 16Khi đó để làm led sáng, ta đặt điện thế +5V vào đầu A và điện áp 0V vào đầu B còn lại Xem hình 2-4
Hình 2- 4: Sơ đồ nguyên lý khối Led
Để điều khiển led bằng VĐK ta cũng áp dụng tương tự Đầu A ta nối vào 1 chân vi điều khiển (LEDA nối vào chân RC5, LEDB nối vào chân RD7), đầu B ta nối GND (0V) Khi RC5 = 1 (5V) thì LEDA sáng, và khi RC5 = 0 (0V) LEDA tắt (tương tự LEDB)
2.2 Khối Loa Beep
a Hình thực tế trên board
Hình 2- 5: Buzzer thực tế trên board
b Sơ đồ nguyên lý khối loa beep
Hình 2- 6: Sơ đồ nguyên lý điều khiển Buzzer
Trang 17Khối Loa beep tắt/mở bằng một khóa điện tử và được điều khiển bởi chân RD6 của VĐK Khi RD6 = 1 (+5V): OFF, loa không phát ra tiếng kêu; khi RD6 = 0 (0V): ON, loa phát ra tiếng kêu
2.3 Khối DipSwitch
a Hình dipswitch thực tế
Hình 2- 7: Dipswitch thực tế
b Sơ đồ nguyên lý dipswitch
Hình 2- 8: Sơ đồ nguyên lý dipswitch 4
c Dipswitch 4 thực tế trên board
Hình 2- 9: Dipswitch 4 trên board
d Điều khiển dipswitch
Dipsw gồm nhiều công tắc hoạt động độc lập nhưng được gắn chung với nhau thành một thanh Có nhiều loại Dipsw, khác biệt lớn nhất giữa chúng là số lượng công tắc Trong mạch VĐK dùng Dipsw-4, tức là Dipsw có 4 công tắc
Về nguyên lý thì rất đơn giản, khi gạt một công tắc lên ON thì hai chân tương ứng với hai phía công tắc đó sẽ nối với nhau
Trang 18 SW0 nối với chân RB1 của VĐK
SW1 nối với chân RB2 của VĐK
SW2 nối với chân RB4 của VĐK
SW3 nối với chân RB5 của VĐK
Khi các SW ở vị trí OFF các chân RB1, RB2, RB4, RB5 = 1(+5V), các SW tương ứng ở
vị trí ON thì các chân tương ứng của VĐK = 0(0V) SW0 ở vị trí ON thì RB1 = 0(0V)
2.4 Khối nút nhấn
Mỗi nút nhấn có hai chân, nguyên lý hoạt động rất đơn giản, khi không nhấn nút (OFF) thì hai chân của nút không nối nhau, và ngược lại khi nhấn nút (ON), hai chân của nút
sẽ nối nhau
a Sơ đồ nguyên lý khối nút nhấn
Hình 2- 10: Sơ đồ nguyên lý khối nút nhấn
b Hình thực tế khối nút nhấn trên board
Hình 2- 11: Nút nhấn thực tế trên board
Trên mạch VĐK có 3 nút nhấn được kết nối theo sơ đồ, BUTA nối với chân RB3, BUTB nối với chân RB6, BUTC nối với chân RB7 của VĐK Đồng thời chân của các nút nhấn cũng được nối với chân INT (chân tạo sự kiện ngắt) của VĐK (chân này dùng để báo
Trang 19cho VĐK biết có nút nhấn vừa mới nhấn, tạm dừng các chương trình đang chạy để xem rằng nút nào được nhấn từ đó xử lý Sau quá trình xử lý chương trình tiếp tục chạy tại vị trí bị dừng trước đó)
Khi không nhấn (OFF) các chân nối với nút nhấn của VĐK sẽ nhận được mức 1 (+5V),
và khi nút nhấn được nhấn (ON) ta nhận được mức 0 (0V)
c Điều khiển khối nút nhấn
Chống rung phím nhấn
Vấn đề rung, nhiễu khi nhấn nút
Hình 2- 12: Tín hiệu rung nhiễu khi nhấn nút
Khi không nhấn nút tín hiệu ở mức cao, khi nhấn nút tín hiệu xuống mức thấp Trong khoảng thời gian tín hiệu chuyển từ mức cao xuống mức thấp sẽ xảy ra tình trạng rung, nhiễu làm cho tín hiệu không rõ ràng Mặc dù khoảng thời gian rung, nhiễu là rất nhỏ, chưa tới 1ms (phụ thuộc vào cách nhấn nút và chất lượng nút nhấn), nhưng với tốc độ
xử lý rất cao của VĐK thì đây là một vấn đề cần phải giải quyết
Giải pháp chống rung
Có hai giải pháp thường được đưa ra để lựa chọn là giải pháp phần cứng (thực hiện trong giai đoạn thiết kế mạch), và giải pháp phần mềm (lúc lập trình) Ở đây hướng dẫn các bạn một giải thuật chống rung nút nhấn bằng phần mềm
2.5 Khối RC Servo
RC Servo là hệ thống gồm động cơ DC, hộp số, và vi mạch điều khiển Tùy theo tín hiệu điều khiển mà nó nhận được, RC Servo sẽ quay trục đến một góc xác định trong khoảng từ 00 đến 1800
Khoảng thời gian rung, nhiễu- Tín hiệu không rõ ràng
Trang 20a Hình thực tế RC servor
Hình 2- 13: RC Servo
b Điều khiển RC Servo
Điều khiển RC Servo chính là điều khiển tín hiệu vào dây PWM để RC Servo quay theo góc mà mình mong muốn Tín hiệu PWM cho RC Servo có chu kỳ 16ms, độ rộng xung
từ 0,7ms đến 2.3ms, mô tả theo hình bên dưới:
Hình 2- 14: Tín hiệu PWM điều khiển RC Servo
Trang 21a Hình động cơ DC
Hình 2- 15: Động cơ DC
b Điều khiển chiều của động cơ điện một chiều
Khi ta cấp điện thế đương (+) vào một cực của động cơ và cấp điện thế âm (-) vào cực còn lại thì động cơ sẽ quay theo một chiều cố định Và khi ta cấp điện thế ngược lại, đảo chiều dương âm thì động cơ sẽ quay theo chiều ngược lại
Hình 2- 16: Điều khiển chiều quay động cơ điện một chiều
c Điều khiển tốc độ động cơ điện một chiều
Để điều khiển tốc động động cơ điện một chiều ta dùng phương pháp điều xung (PWM) Như trên ta đã biết, khi được cấp điện thì động cơ quay, và khi không cấp điện nữa thì động cơ ngừng hoạt động Trong một khoảng thời gian rất ngắn 128us (gọi là chu kỳ điều xung T), và chia khoảng thời gian này thành 2 phần, ta sẽ cấp điện cho một động cơ một phần thời gian đầu, và ngừng cấp điện ở phần thời gian sau Lặp lại chu
kỳ đó liên tục, như thế động cơ sẽ liên tục ở trạng thái quay-ngừng-quay-ngừng-quay…
Vì chu kỳ điều xung là rất nhỏ nên ta sẽ thấy động cơ quay liên tục Tốc độ của động
cơ phụ thuộc vào tỷ lệ thời gian động cơ được cấp điện trong một chu kỳ
Trang 22Hình 2- 17: PWM điều khiển tốc độ động cơ
2.7 Khối Xử lý sensor
a Hình khối sensor
Hình 2- 18: Khối sensor
b Tín hiệu
8 Sensor được nối với board xử lý Tín hiệu từ board xử lý (T1-T8) được đưa về VĐK
Ví dụ về trạng thái của sensor tương ứng với màu đen, trắng trên đường đua
Giá trị của sensor sensor
Sensor thứ 3 bên trái
Sensor trung tâm
Sensor trung tâm
Sensor thứ 3 bên phải
Sensor thứ 2 bên phải
Sensor thứ 1 bên phải
Trang 23CHƯƠNG 3: XÂY DỰNG GIẢI THUẬT ĐIỀU KHIỂN3.1 Cấu trúc chương trình
Chương trình chia làm 4 trạng thái chính:
Hình 3- 1: Sơ đồ giải thuật
Bước chuyển 1 (I II): khi thấy nửa line bên trái
Hình 3- 2: Sensor bắt được nửa line bên trái
Bước chuyển 2 (II I): khi đã đi qua được đoạn đường chuyển làn trái
Xử lý các đoạn đường thẳng và đường cong (I)
Xử lý các đoạn đường cua vuông 90 0
Trang 24Hình 3- 3: Chạy qua đoạn chuyển làn trái
Bước chuyển 3 (I III): khi thấy được nửa line bên phải
Hình 3- 4: Sensor bắt được nữa line bên phải
Bước chuyển 4 (III I): khi chạy qua đoạn chuyển làn phải
Hình 3- 5: Chạy qua đoạn chuyển làn trái
Trang 25 Bước chuyển 5 (I IV), bước chuyển 7 (II IV), bước chuyển 8 (III IV): ngay khi thấy được một line
Hình 3- 6: Sensor bắt được nguyên line
Bước chuyển 6 (IV I): khi chạy xong đoạn đường cua 900
Hình 3- 7: Chạy xong đoạn đường cua 90 0
3.2 Giải thuật xử lý khi qua các đoạn đường thẳng và cong
Các trạng thái sensor có thể gặp thể hiện tương đối độ lệch hướng của xe với phương đường đua:
Ta dựa vào trạng thái sensor để biết được độ lệch hướng chạy của xe so với phương của đường đua, ứng với một trạng thái sensor ta chọn một góc bẻ hợp lý sao cho xe có
xu hướng di chuyển về phía chính giữa đường đua, với độ lệch hướng càng lớn thì ta chọn góc bẻ lái càng lớn
Trang 26Trạng thái sensor của sensor Giá trị Hexadecimal quay Góc
RC ervo
Động
cơ trái PWM
Động
cơ phải PWM
Trang 27Bảng 3- 2: Các trạng thái led gặp trên đường đua báo hiệu chuyển làn, cua 90 0
Khi sensor trả về giá trị: 0x08 ; 0x10 ; 0x18
Hình 3- 8: Sensor báo hiệu vị trí giữa line
Động cơ trái và phải chạy với công suất 100%, RC servo góc 00
Xe chạy lệch về phía bên trái so với trung tâm
Ở trạng thái này giá trị của sensor là 0x04 Vị trí của xe lệch về phía bên trái so với trung tâm tương đối ít nên lúc này ta chỉnh RC servo về phía bên phải 1 góc 7,50, vận tốc của 2 động cơ DC vẫn 100%
Hình 3- 9: Sensor báo hiệu lệch nhỏ về phía bên trái so với vị trí trung tâm
Trạng thái sensor Đặc tính và quá trình
xử lý
Các hàm cần phải xây dựng để kiểm tra trạng
check_leftline
Trang 28Ở trạng thái này giá trị của sensor là 0x06 Vị trí của xe lệch về phía bên trái so với trung tâm tương đối nên lúc này ta chỉnh RC servo về phía bên phải 1 góc 140, vận tốc động cơ trái bằng 80% và vận tốc động cơ phải bằng 69%
Hình 3- 10: Sensor báo hiệu lệch về phía bên trái so với vị trí trung tâm
Như vậy khi xe lệch càng nhiều về phía bên trái của trung tâm thì RC servo được điều chỉnh về phía bên phải với 1 góc càng lớn, vận tốc của động cơ bên trái và bên phải giảm dần, tuy nhiên do lệch về phía bên trái nên vận tốc của động cơ bên trái lớn hơn bên phải
Tương tự ngược lại với xe lệch về phía bên phải so với trung tâm
3.3 Giải thuật qua đoạn đường 90 0
Hình 3- 11: Các bước qua đoạn đường 90 0
Trang 29[1] : Hàm check_crosline phát hiện sự hiện diện của line cắt ngang Báo hiệu rằng còn 500mm đến 1000mm nữa là đến đoạn đường cua 900 (bên trái hoặc bên phải) Lúc này
ta phải giảm tốc độ của xe để đảm bảo điều hướng thành công Tin hiệu sensor lúc này không được tham chiếu cho đến vị trí [2] để ngăn chặn phát hiện sai lầm tại line cắt ngang thứ hai
[2] Xe tiến đến vị trí này một cách từ từ, xe chạy thẳng tới trước theo đường trung tâm [3] khi mà vị trí cua 900 được phát hiện, xe tiến hành quay theo hướng (trái hoặc phải) [4] khi đường trung tâm được phát hiện, xe trở lại chương trình đi đường thẳng và đường cong
Chương trình được mô tả như sau :
Khi mà line cắt ngang được phát hiện (thông qua hàm check_crosline) Đầu tiên xe sẽ
di chuyển qua đoạn line cắt ngang này, sau đó mới kiểm tra nửa line cắt ngang báo hiệu cua phải hay trái Như hình bên dưới
Hình 3- 12: Các bước qua vị trí line cắt ngang
[1] đường cắt ngang đầu tiên
[2] chạy thẳng
[3] đường cắt ngang thứ hai
[4] chạy thẳng, chạy chậm để xe bám vị trí đường trung tâm
3.4 Giải thuật chuyển làn bên phải
Trang 30Hình 3- 13: Các bước chuyển làn bên phải
[1] Hàm check_rightline phát hiện nửa line cắt ngang bên phải Xe phải đổi làn đường bên phải sau 500mm đến 1200mm, do đó xe phải thắng lại Sensor bỏ qua vị trí [2] để ngăn chặn phát hiện sai lầm tại nửa line cắt ngang bên phải thứ hai
[2] ở vị trí này xe chạy từ từ bám theo đường trung tâm
[3] khi vị trí quay được phát hiện, xe quay theo hướng quay (trái, phải)
[4] khi line trung tâm được nhận diện, xe thực hiện chạy theo chương trình đi thẳng và đường cong
Chương trình được mô tả như sau :
Khi phát hiện nửa line bên phải Đầu tiên xe đi qua các line cắt ngang Các đặc tính theo dõi đường line từ vị trí line thứ hai được thể hiện trong hình sau đây:
Hình 3- 14: Các bước qua vị trí nửa line cắt ngang
Trang 31[1] Line đầu tiên
[2] Chạy thẳng
[3] Line thứ hai
[4] chạy thẳng, chạy chậm để xe bám vị trí đường trung tâm
3.5 Các lỗi có thể xảy ra trên đường đua
a Line cắt ngang không phát hiện chính xác
Mô tả vấn đề
Sau khi gặp tín hiệu quẹo 900 xe không quẹo mà tiếp tục đi thẳng rời khỏi đường đua
Hình 3- 15: Vị trí queo trái – xe vượt qua đường đua
Phân tích nguyên nhân
Thu thập và phân tích dữ liệu cho thấy tại thời điểm phát hiện line cắt ngang, trạng thái sensor là 0x1F, không phải là giá trị dự đoán 0xE7
Trang 32Hình 3- 16: Vị trí xác định line cắt ngang, xe bị lệch
Trong quá trình phát hiện nửa line, ta cần sử dụng cả tám bộ cảm biến
Hình 3- 17: Sensor bắt nửa line bên phải
Vì dữ liệu sensor nhận về tương ứng với dữ liệu phát hiện nửa line nên tất nhiên sẽ xảy ra sự cố
Giải quyết
Sử dụng lập trình để giải quyết tình huống này không thể thực hiện được Một cách tương đối khi sensor phát hiện nửa line, không xử lý sự kiện ngay lập tức mà đợi 1 thời gian ngắn Sau đó sensor nhận line có thể rõ ràng hơn
b Không phát hiện đường quẹo một cách chính xác
Mô tả vấn đề
Hình 3- 18: Xe không quẹo một cách chính xác
Trang 33 Phân tích nguyên nhân
Thu thập và phân tích dữ liệu đang chạy cho thấy tại thời điểm chuẩn bị quay bên phải, trạng thái cảm biến là 0x0F, 0x3F, 0x7F, không giống như giá trị dự đoán 0x1F
Hình 3- 19: Các trạng thái sensor khi quẹo
Mặc dù đã gặp phải vị trí cần phải quay bên phải, nhưng dữ liệu cảm biến không phù hợp với trạng thái cảm biến dự kiến cho quay phải và xe tiến thẳng ra đường đua
Giải quyết
Trong chương trình thay vì khi phát hiện quay bên phải là 0x1F Trong thực thế gặp phải các trạng thái khác như 0x0F, 0x3F hoặc 0x7F Vì vậy, những trạng thái cảm biến nên được bổ sung vào chương trình khi phát hiện quay bên phải
c Lỗi khi chuyển làn
Mô tả vấn đề
Tại vị trí chuyển làn thay vì xe chuyển làn, xe lại tiếp tục đi thẳng về phía trước
Trang 34Hình 3- 20: Vị trí chuyển làn xe tiếp tục đi về phía trước
Phân tích nguyên nhân
Thu thập và phân tích các dữ liệu của xe đang chạy cho thấy tại thời điểm phát hiện nửa line, trạng thái cảm biến là 0x0F, 0x3F, 0x7F không giống như trạng thái dự đoán
Trang 35d Xe chạy theo line biên của đường đua
Mô tả vấn đề
Khi vị trí quay bên trái được phát hiện, xe quay bên trái Sau khi di chuyển trong một thời gian với 1 vòng cung hơi rộng, xe bắt đầu theo dõi line biên của đường đua và di chuyển theo line này
Hình 3- 22: Chạy theo line biên của đường đua
Phân tích nguyên nhân
Trạng thái quẹo bám line trung tâm Trạng thái quẹo bám line biên
Hình 3- 23: Trạng thái quẹo bám line trung tâm và line biên
Xem lại những thay đổi trạng thái của cảm biến khi đường trung tâm được phát hiện chính xác Trạng thái sensor thay đổi từ 0x00 đến 0xC0 đến 0x60, cuối cùng quay về chạy bình thường