You are on page 1of 58

BỘ GIAO THÔNG VẬN TẢI

HỌC VIỆN HÀNG KHÔNG VIỆT NAM


Khoa Đ i ệ n t ử v i ễ n t h ô n g

TIỂU LUẬN TỐT NGHIỆP

TÊN ĐỀ TÀI: XE TỰ ĐỘNG TRÁNH VẬT CẢN

Giáo viên hướng dẫn: T h s . N g u y ễ n T h ị L i n h P h ư ơ n g


Sinh viên thực hiện: Lê Văn Minh
Mã số SV: 1353020031
Lớp: CNDV1 – K7

Thành phố Hồ Chí Minh - 2017


BỘ GIAO THÔNG VẬN TẢI
HỌC VIỆN HÀNG KHÔNG VIỆT NAM
Khoa Điện Tử Viễn Thông

TÊN ĐỀ TÀI:
XE TỰ ĐỘNG TRÁNH VẬT CẢN

Giáo viên hướng dẫn: Sinh viên thực hiện:


ThS. NGUYỄN THỊ LINH PHƯƠNG LÊ VĂN MINH
Mã số SV: 1353020031
Lớp: CNDV1 – K7

Thành phố Hồ Chí Minh – 2017


LỜI CẢM ƠN

Trong thời gian làm tiểu luận tốt nghiệp, em đã nhận được nhiều sự giúp
đỡ, đóng góp ý kiến và chỉ bảo nhiệt tình của thầy cô và bạn bè.

Em xin chân thành cảm ơn các thầy cô giáo trong trường HVHK đã dạy
cho em kiến thức về các môn đại cương cũng như các môn chuyên ngành, giúp
em có cơ sở ký thuyết để hoàn thành bài tiểu luận này.

Em xin gửi lời cảm ơn chân thành đến Th.s Nguyễn Thị Linh Phương, đã
hướng, giúp đỡ em trong quá trình làm tiểu luận.

Em đã nỗ lực hết mình trong suốt quá trình làm đề tài này nhương với
lượng kiến thức còn hạn chế nên tiểu luận còn nhiều thiếu sót. Em rất mong
nhận được những ý kiến đóng góp của thầy cô và các bạn để đề tài của em được
hoàn thiện hơn. Em xin chân thành cảm ơn.
LỜI CAM ĐOAN

Tôi cam đoan rằng tiểu luận tốt nghiệp này là do chính tôi thực hiện, các số liệu
và kết quả trong báo cáo là trung thực, không sao chép từ bất kỳ đề tài nghiên
cứu khoa học nào.

Ngày……tháng……năm 2017

Sinh viên thực hiện

Lê Văn Minh
NHIỆM VỤ TIỂU LUẬN TỐT NGHIỆP

HỌ VÀ TÊN: LÊ VĂN MINH MSSV: 1353020031

LỚP: CNDV1 – K7 NGÀNH: Điện tử viễn thông

1. Tên tiểu luận tốt nghiệp:

Xe tự động tránh vật cản

2. Nhiệm vụ tiểu luận tốt nghiệp:

Tìm hiểu các linh kiện, bộ xử lý, chương trình điều khiển của xe, thiết kế tạo
ra sản phẩm thực tế

3. Ngày giao tiểu luận tốt nghiệp: 6/4/2017

4. Ngày nộp tiểu luận tốt nghiệp: 22/5/2017

5. Họ tên cán bộ hướng dẫn

ThS. Nguyễn Thị Linh Phương

TRƯỞNG KHOA CÁN BỘ HƯỚNG DẪN CHÍNH

(Ký và ghi rõ họ tên) (Ký và ghi rõ họ tên)


NHẬN XÉT CỦA GIÁO VIÊN
HƯỚNG DẪN
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................

TpHCM, ngày ….. tháng …… năm ……


Giáo viên hướng dẫn
[Ký tên và ghi rõ họ tên]
NHẬN XÉT CỦA GIÁO VIÊN
PHẢN BIỆN
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................

TpHCM, ngày ….. tháng …… năm ……


Giáo viên phản biện
[Ký tên và ghi rõ họ tên]
MỤC LỤC

CHƯƠNG 1. TỔNG QUAN VỀ ĐỀ TÀI ......................................................................... 1


1.1. Lý do chọn đề tài ................................................................................................ 1
1.2. Mục tiêu của đề tài.............................................................................................. 1
1.3. Phương pháp nghiên cứu .................................................................................... 1
1.4. Đối tượng và phạm vi nghiên cứu ...................................................................... 2
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT .................................................................................. 3
2.1. Arduino UNO R3................................................................................................ 3
2.1.1. Giới thiệu tổng quan về Arduino UNO R3 .................................................. 3
2.1.2. Một vài thông số của Arduino UNO R3 ...................................................... 4
2.1.3. Vi điều khiển ................................................................................................ 5
2.1.4. Nguồn........................................................................................................... 6
2.1.5. Bộ nhớ .......................................................................................................... 8
2.1.6. Các cổng vào/ ra .......................................................................................... 9
2.1.7. Lập trình cho Arduino................................................................................ 11
2.2. Module điều khiển động cơ L298..................................................................... 12
2.2.1. Thông số kỹ thuật ...................................................................................... 12
2.2.2. Các chân tín hiệu........................................................................................ 12
2.3. Cảm biến siêu âm SRF05 ................................................................................. 14
2.3.1. Sóng siêu âm .............................................................................................. 14
2.3.2. Giới thiệu chung ........................................................................................ 16
2.3.3. Nguyên lý làm việc .................................................................................... 17
2.3.4. Lập trình điều khiển ................................................................................... 20
2.4. Động cơ điện một chiều.................................................................................... 21
2.5. Module bluetooth HC-05 .................................................................................. 23
2.5.1. Giới thiệu ................................................................................................... 23
2.5.2. Các chế độ hoạt động ................................................................................. 25
CHƯƠNG 3. THIẾT KẾ VÀ THI CÔNG ....................................................................... 27
3.1. Sơ đồ khối và nguyên lý hoạt động của mạch .................................................. 27
3.2. Lưu đồ thuật toán .............................................................................................. 30
3.3. Lưu đồ thuật toán chương trình tự động ........................................................... 31
3.4. Sơ đồ nguyên lý ................................................................................................ 32
3.5. Mạch thực tế ..................................................................................................... 33
3.6. Kết quả kiểm thử mạch ..................................................................................... 34
CHƯƠNG 4. KẾT LUẬN VÀ KIẾN NGHỊ ................................................................... 35
4.1. Kết luận............................................................................................................. 35
4.2. Kiến nghị .......................................................................................................... 35
PHỤ LỤC HÌNH ẢNH

Hình 2.1 Arduino UNO R3 .............................................................................................. 3


Hình 2.2 Vi điều khiển ..................................................................................................... 5
Hình 2.3 Các cổng vào ra ................................................................................................. 9
Hình 2.4 Cửa sổ lập trình .............................................................................................. 11
Hình 2.5 Các chân tín hiệu L298 ................................................................................... 12
Hình 2.6 Sóng siêu âm ................................................................................................... 15
Hình 2.7 Cảm biến siêu âm ............................................................................................ 16
Hình 2.8 Cấu hình SRF 05 ở mode 1 ............................................................................ 17
Hình 2.9 Nguyên lý hoạt động của SRF 05 ở mode 1 ................................................... 18
Hình 2.10 Cấu hình SRF 05 ở mode 2 ........................................................................... 19
Hình 2.11 Nguyên lý hoạt động của SRF 05 ở mode 2 ................................................ 19
Hình 2.12 Động cơ DC .................................................................................................. 21
Hình 2.13 module bluetooth HC-05 ............................................................................... 23
Hình 2.14 Sơ đồ chân HC - 05 ....................................................................................... 24
Hình 3.1 Sơ đồ khối tổng quát ...................................................................................... 27
Hình 3.2 Lưu đồ chương trình chính .............................................................................. 30
Hình 3.3 Lưu đồ chương trình tự động .......................................................................... 31
Hình 3.4 Sơ đồ nguyên lý............................................................................................... 32
Hình 3.5 Mạch thực tế .................................................................................................... 33
CHƯƠNG 1. TỔNG QUAN VỀ ĐỀ TÀI

1.1. Lý do chọn đề tài

Hiện nay, đời sống ngày càng được nâng cao, các máy móc tự động ngày
càng được sử dụng rộng rãi trong đời sống nhằm phục vụ cho con người với
nhiều mục đích khác nhau như: nhà thông minh, nông trại thông minh, máy hút
bụi tự động, xe dò đường. Do kiến thức còn hạn chế trong bài tiểu luận này em
chọn làm xe tự động tránh vật cản. Đề tài này có thể thêm chức năng, nâng cấp
để tạo ra những robot tự động cao cấp hơn.

1.2. Mục tiêu của đề tài

Thiết kế và thi công xe tự động tránh vật cản bằng việc áp dụng cảm biến siêu
âm SRF 05, module điều khiển động cơ L298, module bluetooth HC 05 và vi
điều khiển (Arduino Uno) cho quá trình xử lý tín hiệu trong hệ thống.

1.3. Phương pháp nghiên cứu

Tìm hiểu về lý thuyết về vi xử lý arduino, cách kết nối, sử dụng cảm biến
siêu âm SRF 05 và module điều khiển động cơ L298 và module bluetooth HC
05 với arduino. Từ đó kết nối các linh kiện và sử dụng phần mềm Arduino IDE
để viết chương trình điều khiển cho xe hoạt động như ý muốn.

1
1.4. Đối tượng và phạm vi nghiên cứu

 Đối tượng nghiên cứu:

+ Vi xử lý: Arduino Uno R3: đóng vai trò là bộ xử lý tring tâm của hệ
thống

+ Module điều khiển động cơ L298: dùng để kết nối điều khiển hai động cơ
DC

+ Động cơ DC: Dùng gắn hai bánh để xe di chuyển

+ Động cơ servo: Để gắn cảm biến siêu âm giúp cảm biến có thể quét rộng
hơn

+ Cảm biến siêu âm SRF 05: Dùng để quét phát hiện các vật cản

+ Module bluetooth HC 05: Kết nối xe với app android dùng để điều khiển
xe

+ Phần mềm Arduino IDE: Dùng để viết, biên dịch chương trình điều khiển

 Phạm vi nghiên cứu: Thi công mô hình và thử nghiệm tại trường

2
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT

2.1. Arduino UNO R3

2.1.1. Giới thiệu tổng quan về Arduino UNO R3

Arduino board có rất nhiều phiên bản với hiệu năng và mục đích sử dụng
khác nhau như: Arduino Mega, Aruino LilyPad... Trong số đó, Arduino Uno R3
là một trong những phiên bản được sử dụng rộng rãi nhất bởi chi phí và tính linh
động của nó.

Do Arduino có tính mở về phần cứng, chính vì vậy bản thân Arduino Uno
R3 cũng có những biến thể của để phù hợp cho nhiều đối tượng khác nhau

Hình 2.1 Arduino UNO R3

Vì vậy, để có thể tận dụng tối đa sức mạnh của Arduino board, ta cần phải
biết rõ được thông số kỹ thuật của từng loại, nắm được các khác biệt giữa các
phiên bản từ đó có giải pháp xử lý phù hợp.

3
2.1.2. Một vài thông số của Arduino UNO R3

Vi điều khiển ATmega 328 họ 8bit

Điện áp hoạt động 5V DC (chỉ được cấp qua cổng USB)

Tần số hoạt động 16MHz

Dòng tiêu thụ Khoảng 30mA

Điện áp vào khuyên 7 – 12 V DC


dùng

Điện áp vào giới hạn 6 – 20 V DC

Số chân Digital 14 (6 chân hardware PWM)

Số chân Analog 6 (độ phân giải 10bit)

Dòng tối đa trên mỗi 30 mA


chân I/O

Dòng ra tối đa (5V) 500 mA

Dòng ra tối đa (3.3V) 50 mA

Bộ nhớ flash 32 KB (ATmega 328) với 0.5 KB dùng


bởi bootloader

SRAM 2 KB (ATmega 328)

EEPROM 1 KB (ATmega 328)

4
2.1.3. Vi điều khiển

Hình 2.2 Vi điều khiển

Arduino UNO có thể sử dụng 3 vi điều khiển họ 8bit AVR là ATmega8,


ATmega168, ATmega328. Bộ não này có thể xử lí những tác vụ đơn giản như
điều khiển đèn LED nhấp nháy, xử lí tín hiệu cho xe điều khiển từ xa, làm một
trạm đo nhiệt độ - độ ẩm và hiển thị lên màn hình LCD,… hay những ứng dụng
khác.

5
2.1.4. Nguồn

Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp
nguồn ngoài với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V.
Thường thì cấp nguồn bằng pin vuông 9V là hợp lí nhất nếu bạn không có sẵn
nguồn từ cổng USB. Nếu cấp nguồn vượt quá ngưỡng giới hạn trên, bạn sẽ làm
hỏng Arduino UNO.

Các chân nguồn:

 GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi bạn
dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những chân này
phải được nối với nhau.

 5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA.

 3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA.

 Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực
dương của nguồn với chân này và cực âm của nguồn với chân GND.

 IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được
đo ở chân này. Và dĩ nhiên nó luôn là 5V. Mặc dù vậy bạn không được lấy
nguồn 5V từ chân này để sử dụng bởi chức năng của nó không phải là cấp
nguồn.

 RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương
với việc chân RESET được nối với GND qua 1 điện trở 10KΩ

6
Lưu ý:

 Arduino UNO không có bảo vệ cắm ngược nguồn vào. Do đó bạn phải hết
sức cẩn thận, kiểm tra các cực âm – dương của nguồn trước khi cấp cho
Arduino UNO. Việc làm chập mạch nguồn vào của Arduino UNO sẽ biến
nó thành một miếng nhựa chặn giấy. mình khuyên bạn nên dùng nguồn từ
cổng USB nếu có thể.

 Các chân 3.3V và 5V trên Arduino là các chân dùng để cấp nguồn ra cho
các thiết bị khác, không phải là các chân cấp nguồn vào. Việc cấp nguồn sai
vị trí có thể làm hỏng board. Điều này không được nhà sản xuất khuyến
khích.

 Cấp nguồn ngoài không qua cổng USB cho Arduino UNO với điện áp dưới
6V có thể làm hỏng board.

 Cấp điện áp trên 13V vào chân RESET trên board có thể làm hỏng vi điều
khiển ATmega328.

 Cường độ dòng điện vào/ra ở tất cả các chân Digital và Analog của Arduino
UNO nếu vượt quá 200mA sẽ làm hỏng vi điều khiển.

 Cấp điệp áp trên 5.5V vào các chân Digital hoặc Analog của Arduino UNO
sẽ làm hỏng vi điều khiển.

 Cường độ dòng điện qua một chân Digital hoặc Analog bất kì của Arduino
UNO vượt quá 40mA sẽ làm hỏng vi điều khiển. Do đó nếu không dùng để
truyền nhận dữ liệu, bạn phải mắc một điện trở hạn dòng.

7
2.1.5. Bộ nhớ

Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng:

 32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ trong bộ
nhớ Flash của vi điều khiển. Thường thì sẽ có khoảng vài KB trong số này
sẽ được dùng cho bootloader nhưng đừng lo, bạn hiếm khi nào cần quá
20KB bộ nhớ này đâu.

 2KB cho SRAM (Static Random Access Memory): giá trị các biến bạn khai
báo khi lập trình sẽ lưu ở đây. Bạn khai báo càng nhiều biến thì càng cần
nhiều bộ nhớ RAM. Tuy vậy, thực sự thì cũng hiếm khi nào bộ nhớ RAM
lại trở thành thứ mà bạn phải bận tâm. Khi mất điện, dữ liệu trên SRAM sẽ
bị mất.

 1KB cho EEPROM (Electrically Eraseble Programmable Read Only


Memory): đây giống như một chiếc ổ cứng mini – nơi bạn có thể đọc và ghi
dữ liệu của mình vào đây mà không phải lo bị mất khi cúp điện giống như
dữ liệu trên SRAM.

8
2.1.6. Các cổng vào/ ra

Hình 2.3 Các cổng vào ra

Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng
chỉ có 2 mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA.
Ở mỗi chân đều có các điện trở pull-up từ được cài đặt ngay trong vi điều khiển
ATmega328 (mặc định thì các điện trở này không được kết nối).

9
Một số chân digital có các chức năng đặc biệt như sau:

 2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận


(receive – RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị
khác thông qua 2 chân này. Kết nối bluetooth thường thấy nói nôm na chính
là kết nối Serial không dây. Nếu không cần giao tiếp Serial, bạn không nên
sử dụng 2 chân này nếu không cần thiết

 Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với
độ phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm
analogWrite(). Nói một cách đơn giản, bạn có thể điều chỉnh được điện áp
ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như
những chân khác.

 Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngoài các
chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng
giao thức SPI với các thiết bị khác.

 LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm
nút Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân
số 13. Khi chân này được người dùng sử dụng, LED sẽ sáng.

Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu
10bit (0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V. Với
chân AREF trên board, bạn có thể để đưa vào điện áp tham chiếu khi sử dụng
các chân analog. Tức là nếu bạn cấp điện áp 2.5V vào chân này thì bạn có thể
dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân
giải vẫn là 10bit.

10
Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp
I2C/TWI với các thiết bị khác.

2.1.7. Lập trình cho Arduino

Các thiết bị dựa trên nền tảng Arduino được lập trình bằng ngôn riêng.
Ngôn ngữ này dựa trên ngôn ngữ Wiring được viết cho phần cứng nói chung.
Và Wiring lại là một biến thể của C/C++. Một số người gọi nó là Wiring, một số
khác thì gọi là C hay C/C++. Riêng mình thì gọi nó là “ngôn ngữ Arduino”, và
đội ngũ phát triển Arduino cũng gọi như vậy. Ngôn ngữ Arduino bắt nguồn từ
C/C++ phổ biến hiện nay do đó rất dễ học, dễ hiểu.

Để lập trình cũng như gửi lệnh và nhận tín hiệu từ mạch Arduino, nhóm
phát triển dự án này đã cũng cấp đến cho người dùng một môi trường lập trình
Arduino được gọi là Arduino IDE (Intergrated Development Environment) như
hình dưới đây.

Hình 2.4 Cửa sổ lập trình

11
2.2. Module điều khiển động cơ L298

2.2.1. Thông số kỹ thuật

Driver: L298 tích hợp hai mạch cầu H.

Điện áp điều khiển: +5V ~ +12V.

Dòng tối đa cho mỗi cầu H là: 2A

Điện áp của tín hiệu điều khiển: +5V ~ +7V

Dòng của tín hiệu điều khiển: 0 ~ 36mA

Công suất hao phí: 20W (khi nhiệt độ T = 75oC)

Nhiệt độ bảo quản : -25 oC ~ +130 oC

2.2.2. Các chân tín hiệu

Hình 2.5 Các chân tín hiệu L298

12
1. DC motor 1 “+” hoặc stepper motor A+

2. DC motor 1 “-” hoặc stepper motor A-

3. 12V jumper – tháo jumper ra nếu sử dụng nguồn trên 12V. Jumper này dùng
để cấp nguồn cho IC ổn áp tạo ra nguồn 5V nếu nguồn trên 12V sẽ làm cháy
IC nguồn.

4. Cắm dây nguồn cung cấp điện áp cho motor vào đây từ 6V đến 35V

5. Cắm chân GND của nguồn

6. Ngõ ra nguồn 5V, nếu jumper đầu vào không rút ra

7. Chân Enable của motor 1, chân này dùng để cấp xung PWM cho motor nếu
dùng vi điều khiển thì rút jumper ra và cắm chân PWM vào. Giữ nguyên khi
dùng với động cơ bước

8. IN1

9. IN2

10. IN3

11. IN4

12. Chân Enable của Motor 2, chân này dùng để cấp xung cho motor nếu dùng
vi điều khiển thì rút jumper ra và cắm chân PWM vào. Giữ nguyên khi dùng
với động cơ bước

13. DC motor 2 “+”, hoặc stepper motor B+

14. DC motor 2 “-“, hoặc stepper motor B-

13
2.3. Cảm biến siêu âm SRF05

2.3.1. Sóng siêu âm

Sóng siêu âm (sonar) là một loại sóng cao tầng mà con người không thể
nghe thấy được. Tuy nhiên, ta có thể thấy được sự hiện diện của sóng siêu âm ở
khắp mọi nơi trong tự nhiên. Ta có các loài động vật như dơi, cá heo ... dùng
sóng siêu âm để liên lạc với nhau, để săn mồi hay định vị trong không gian.

Dựa trên việc quan sát các quan sát hoạt động của chúng, ta thấy được
nguyên tắc mà các loài vật sử dụng sóng âm để định vị rất đơn giản, có thể tóm
gọn trong 3 bước sau:

 Vật chủ phát ra sóng âm

 Sóng âm này va chạm với môi trường xung quanh và phản xạ lại

 Dựa vào thời gian phát / thu, khoảng cách giữa vật chủ và môi trường xung
quanh được tính ra.

Việc tính toán khoảng cách cũng còn phụ thuộc rất nhiều vào môi trường
truyền dẫn, ví dụ như sóng âm truyền trong môi trường nước hay kim loại sẽ
nhanh hơn rất nhiều so với sóng âm được truyền trong môi trường không khí

14
Hình 2.6 Sóng siêu âm

15
Cảm biến siêu âm SRF05 cũng hoạt động theo như nguyên tắc ở trên, thiết
bị gồm có 2 loa - thu và phát - cùng với 5 chân để kết nối với Arduino. Theo tài
liệu của nhà sản xuất thì tầm hoạt động tối đa của cảm biến này nằm trong
khoảng 5m.

Hình 2.7 Cảm biến siêu âm

2.3.2. Giới thiệu chung

Cảm biến SRF 05 là một loại cảm biến khoảng cách dựa trên nguyên lý thu
phát siêu âm. Cảm biến gồm một bộ phát và một bộ thu sóng siêu âm. Sóng siêu
âm từ đầu phát truyền đi trong không khí, gặp vật cản (vật cản đo khoảng cách
tới) sẽ phản xạ ngược trở lại và được đầu thu ghi lại. Khoảng cách đo được của
SRF 05 nằm trong phạm vi từ 4cm đến 300cm

16
2.3.3. Nguyên lý làm việc

SRF 05 có thể thiết lập 2 mode hoạt động khác nhau thông qua các chân
điều khiển. Nối hoặc không nối chân OUT xuống GND cho phép cảm biến được
điều khiển thông qua giao tiếp dùng 1 chân hay 2 chân IO.

 Mode 1: Tách chân Trig và chân Echo dùng riêng:

Trong mode này, SRF 05 sử dụng cả 2 chân trig và echo cho việc giao
tiếp với vi điều khiển. Để xử dụng mode này, ta chỉ cần để trống chân OUT
của module, điện trở bên trong module sẽ kéo chân pin này lên mức 1

Hình 2.8 Cấu hình SRF 05 ở mode 1

17
Để điều khiển SRF 05, ta cẩn cấp cho chân trig một xung điều khiển
với độ rộng tối thiểu 10us. Sau đó một khoảng thời gian, đầu phát sóng siêu
âm sẽ phát ra sóng siêu âm, vi xử lý tích hợp trên module sẽ tự xác định thời
điểm phát sóng siêu âm và thu sóng siêu âm. Vi xử lý tích hợp này sẽ đưa
kết qua thu được ra chân echo. Độ rộng xung vuông tại chân Echo tỉ lệ với
khoảng cách từ cảm biến tới vật thể.

Hình 2.9 Nguyên lý hoạt động của SRF 05 ở mode 1

 Mode 2:Chân Trig và echo dùng chung


Được thiết kế nhằm cho mục đích tiết kiệm chân pin cho vi điều khiển,
nên trong mode này, SRF 05 chỉ sử dụng 1 chân pin cho 2 chức năng trig và
echo. Để sử dụng mode này, ta kết nối chân OUT xuống GND.

18
Hình 2.10 Cấu hình SRF 05 ở mode 2
Để điều khiển SRF 05, đầu tiên xuất một xung với độ rộng tối thiểu
10us vào chân trig – echo. Sau đó vi xử lý tích hợp trên cảm biến sẽ phát ra
tín hiệu điều khiển đầu phát siêu âm. Sau 700us kể từ lúc kết thúc tín hiệu
điều khiển, từ chân trig – echo có thể đọc ra một xung mà độ rộng tỉ lệ với
khoảng cách từ cảm biến tới vật cản.

Hình 2.11 Nguyên lý hoạt động của SRF 05 ở mode 2

19
2.3.4. Lập trình điều khiển

Với cảm biến SRF05, ta sẽ minh hoạ việc sử dụng qua việc lập trình cho
cảm biến cứ mỗi chu kì 1s ta tiến hành kích hoạt cảm biến và kiểm tra xem có
vật cản ở xung quanh hay không.

 Thực hiện mỗi chu kì 1s

 Kích hoạt cảm biến bằng việc bật PIN Trigger theo thứ tự LOW - HIGH -
LOW qua hàm digitalWrite.

 Tính toán khoảng cách thu được bằng việc sử dụng hàm pulseIn và các công
thức tính.

 Ta giả định nếu khoảng cách trả về < 0.5m thì sẽ in ra thông báo có vật cản.

 Lặp lại chu trình này.

20
2.4. Động cơ điện một chiều

Hình 2.12 Động cơ DC

Động cơ điện một chiều sử dụng dòng điện một chiều. Động cơ điện một
chiều được sử dụng trong các ứng dụng đặc biệt yêu cầu mô men khởi động cao
hoặc yêu cầu tăng tốc êm ở một dải tốc độ rộng.

Động cơ điện một chiều gồm 3 thành phần chính sau:

 Cực từ: Tương tác giữa hai từ trường tạo ra sự quay trong động cơ một
chiều. Động cơ một chiều có các cực từ đứng yên và phần ứng quay trong
không gian giữa cực từ. Một động cơ một chiều đơn giản có hai cực từ: cực
bắc và cực nam. Các đường sức từ chạy theo khoảng mở từ cực bắc tới cực
nam. Với những động cơ phức tạp và lớn hơn, có một vài nam châm điện.
Những nam châm này được cấp điện từ bên ngoài đóng vai trò hình thành
cấu trúc từ trường

21
 Phần ứng: Khi có dòng điện đi qua, phần ứng sẽ trở thành một nam châm
điện. Phần ứng, có dạng hình trụ, được nối với trụ ra để kéo tải. Với động cơ
một chiều nhỏ, phần ứng quay trong từ trường do các cực tạo ra, cho đến khi
cực bắc và cực nam của nam châm hoán đổi vị trí tương ứng với góc quay
của phần ứng. Khi sự hoán đổi hoàn tất, dòng điện đảo chiều để xoay chiều
các cực bắc và nam của phần ứng.

 Cổ góp: Bộ phần này thường có ở động cơ một chiều. Cổ góp có tác dụng đảo
chiều của dòng điện trong phần ứng. Cổ gió cũng hỗ trợ sự truyền điện giữa
phần ứng và nguồn điện

Ưu điểm của động cơ điện một chiều là khả năng điều khiển tốc độ mà không
làm ảnh hưởng tới chất lượng điện cung cấp

Có thể điều khiển động cơ loại này bằng các điều chỉnh:

 Điện áp phần ứng: tăng điện áp phần ứng sẽ làm tăng tốc độ

 Dòng kích thích: Giảm dòng kích thích sẽ làm tăng tốc độ

Động cơ điện một chiều có nhiều loại khác nhau, nhưng những động cơ
loại này thường được sử dụng giới hạn ở những thiết bị tốc độ chậm, công suất
thấp đến trung bình. Ở công suất lớn, động cơ một chiều có thể gặp trục trặc với
các cổ góp cơ. Các động cơ này cũng bị hạn chế chỉ sử dụng ở những khu vực
sạch, không độc hại vì nguy cơ đánh lửa ở chổi than

22
2.5. Module bluetooth HC-05

2.5.1. Giới thiệu

Bluetooth là chuẩn truyền thông không dây để trao đổi dữ liệu ở khoảng
cách ngắn.Chuẩn truyền thông này sử dụng sóng radio ngắn(UHF radio) trong
dải tần số ISM (2.4 tới 2.485 GHz). Khoảng cách truyền của module này vào
khoảng 10m.

Hình 2.13 module bluetooth HC-05

23
Hình 2.14 Sơ đồ chân HC - 05

Sơ đồ chân HC – 05 gồm có:

 KEY: Chân này để chọn chế độ hoạt động AT Mode hoặc Data Mode.

 VCC chân này có thể cấp nguồn từ 3.6V đến 6V bên trong module đã có
một ic nguồn chuyển về điện áp 3.3V và cấp cho IC BC417.

 GND: nối với chần nguồn GND

 TXD, RND: đây là hai chân UART để giao tiếp module hoạt động ở mức
logic 3.3V

 STATE: các bạn chỉ cần thả nổi và không cần quan tâm đến chân này.

24
2.5.2. Các chế độ hoạt động

HC-05 có hai chế độ hoạt động là Command Mode và Data Mode. Ở chế
độ Command Mode ta có thể giao tiếp với module thông qua cổng serial trên
module bằng tập lệnh AT quen thuộc. Ở chế độ Data Mode module có thể
truyền nhận dữ liệu tới module bluetooth khác. Chân KEY dùng để chuyển đổi
qua lại giữa hai chế độ này. Có hai cách để bạn có thể chuyển module hoạt động
trong chế độ Data Mode.

 Nếu đưa chân này lên mức logic cao trước khi cấp nguồn module sẽ đưa
vào chế độ Command Mode với baudrate mặc định 38400. Chế độ này
khá hữu ích khi bạn không biết baudrate trong module được thiết lập ở
tốc độ bao nhiêu. Khi chuyển sang chế độ này đèn led trên module sẽ
nháy chậm (khoảng 2s) và ngược lại khi chân KEY nối với mức logic
thấp trước khi cấp nguồn module sẽ hoạt động chế độ Data Mode.

 Nếu module đang hoạt động ở chế Data Mode để có thể đưa module vào
hoạt động ở chế độ Command Mode bạn đưa chân KEY lên mức cao.
Lúc này module sẽ vào chế độ Command Mode nhưng với tốc độ Baud
Rate được bạn thiết lập lần cuối cùng. Vì thế bạn phải biết baudrate hiện
tại của thiết bị để có thể tương tác được với nó. Chú ý nếu module của
bạn chưa thiết lập lại lần nào thì mặc định của nó như sau:

+ Baudrate 9600, data 8 bits, stop bits 1, parity : none, handshake: none

+ Passkey: 1234

+ Device Name: HC-05

Ở chế độ Data Mode HC-05 có thể hoạt động như một master hoặc slave
tùy vào việc bạn cấu hình

25
 Ở chế độ SLAVE: bạn cần thiết lập kết nối từ smartphone, laptop, usb
bluetooth để dò tìm module sau đó pair với mã PIN là 1234. Sau khi pair
thành công, bạn đã có 1 cổng serial từ xa hoạt động ở baud rate 9600.

 Ở chế độ MASTER: module sẽ tự động dò tìm thiết bị bluetooth khác (1


module bluetooth HC-06, usb bluetooth, bluetooth của laptop...) và tiến
hành pair chủ động mà không cần thiết lập gì từ máy tính hoặc
smartphone.

26
CHƯƠNG 3. THIẾT KẾ VÀ THI CÔNG

3.1. Sơ đồ khối và nguyên lý hoạt động của mạch

Sơ đồ khối

Module bluetooth
HC-05

Vi điều
Cảm biến Module
khiển
siêu âm điều khiển Động
Arduino
SRF 05 động cơ cơ DC
Uno R3
L298

Động cơ
servo

Khối cấp nguồn

Hình 3.1 Sơ đồ khối tổng quát

27
 Arduino R3: Xử lý mọi tín hiệu từ module bluetooth hoặc cảm biến siêu
âm gửi về để phát tín hiệu điều khiển cho module điểu khiển động cơ để
điều khiển động cơ hoạt động theo chương trình

 Cảm biến siêu âm SRF 05: cảm biến phát hiện vật cản gửi tín hiệu về cho
vi điều khiển

 Module bluetooth HC-05: nhận tín hiệu điều khiển từ người dùng gửi về
cho vi điều khiển xử lý

 Module điều khiển động cơ L298: nhận tín hiệu từ vi điều khiển để điều
khiển động cơ hoạt động chính xác

 Khối nguồn: Cung cấp nguồn cho mạch hoạt động

Nguyên lý hoạt động của mạch:

Ở đây có hai chế độ hoạt động cho xe:

 Khi cấp nguồn cho mạch xe tự khởi động chế độ chạy tránh vật cản. Khi
đó arduino nhận tín hiệu từ cảm biến siêu âm để xử lý điều khiển module
điều khiển động cơ cho xe chạy một cách hợp lý. Khi không có vật cản ở
phía trước xe sẽ chạy thẳng. Nếu gặp vật cản xe sẽ dừng lại. Servo hoạt
động quay 180o bắt đầu từ trái qua phải để tìm đường di chuyển. Xe sẽ rẽ
về hướng không có vật cản. Quá trình tiếp diễn như vậy đến khi tắt nguồn
hoặc chuyển qua chế độ điều khiển

28
 Ở chế độ điều khiển xe sẽ được kết nối với smartphone được cài đặt ứng
dụng điều khiển thông qua module bluetooth. Khi đó xe sẽ nhận tín hiệu
điểu khiển của người dùng truyền qua bluetooth từ đó arduino xử lý tín
hiệu điều khiển module điều khiển động cơ hoạt động chính xác theo yêu
cầu người dùng. Ta có thể chuyển đổi lại chế độ tránh vật cản thông qua
một nút trong ứng dụng điều khiển hoặc khi ngắt kết nối bluetooth.

29
3.2. Lưu đồ thuật toán

BEGIN

N
Button = 0?

Nhận tín hiệu từ cảm Nhận tín hiệu từ module


biến siêu âm SRF 05 bluetooth HC-05

Module điều khiển


động cơ L298

END

Hình 3.2 Lưu đồ chương trình chính

30
3.3. Lưu đồ thuật toán chương trình tự động

BEGIN

Nhận tín hiệu từ


cảm biến siêu âm
SRF 05

Y
Vật cản

Chạy thẳng Đổi hướng

RETURN

Hình 3.3 Lưu đồ chương trình tự động

31
3.4. Sơ đồ nguyên lý

Hình 3.4 Sơ đồ nguyên lý

32
3.5. Mạch thực tế

Hình 3.5 Mạch thực tế

33
3.6. Kết quả kiểm thử mạch

Về cơ bản mạch đã hoạt động và tránh được các vật cản khi gặp phải.

Nhưng vẫn tồn tại một số vấn đề như sau:

 Cảm biến siêu âm còn có hạn chế: Mức độ sóng âm hồi tiếp phụ thuộc vào
cấu tạo của đối tượng và góc phản xạ của nó. Một đối tượng mềm có thể
cho ra tín hiệu phản hồi yếu hoặc không phản hồi. Mặt tiếp xúc của vật cản
cũng sẽ ảnh hưởng tới việc nhận biết của cảm biến

 Khi di chuyển vào vùng hẹp có nhiều vật cản xe hoạt động trở nên thiếu
chính xác

34
CHƯƠNG 4. KẾT LUẬN VÀ KIẾN NGHỊ

4.1. Kết luận

 Ưu điểm:

+ Xe được thiết kế đơn giản,giá thành thấp dễ dàng cho mọi người tìm hiểu
nghiên cứu

+ Về cơ bản đã tránh được các vật cản hoàn thành mục tiêu đặt ra

 Khuyết điểm:

+ Có nghiên cứu và phát triển thêm kết nối bluetooth nhưng chưa đạt được
kết quả mong muốn.

+ Khi quét vật cản để chọn phương hướng nhiều khi vẫn gặp phải trục trặc
khi chọn hướng rẽ.

+ Trong điều kiện cho phép em chỉ thực hiện mô hình ở mức độ đơn giản
nhưng trong quá trình thực hiện vẫn chưa được hoàn hảo, mạch thi công
còn thiếu sót và hạn chế. Xe hoạt động thật sự chưa được ổn định

4.2. Kiến nghị

Có thể nghiên cứu phát triển thêm cho xe như: phát triển thành máy hút bụi tự
động, xe dò đường, và nhiểu ứng dụng dùng xe tự động khác.

35
TÀI LIỆU THAM KHẢO

1. Phạm Quang Huy – Lê Cảnh Trung , Lập trình điều khiển với arduino, Khoa học
và kỹ thuật.
2. Phạm Quang Huy – Nguyễn Trọng Hiếu , Vi điều khiển và ứng dụng arduino
dành cho người tự học , Bách Khoa Hà Nội.
3. http://arduino.vn/bai-viet/948-bam-xung-dieu-khien-toc-do-dong-co-bang-l298
4. http://arduino.vn/bai-viet/991-o-dieu-khien-bang-android-dung-mach-cau-h-l298
5. http://arduino.vn/result/1306-robot-tranh-vat-can
6. https://drive.google.com/file/d/0B4vt-olV258taFRFalBzcDZLcWM/view
7. http://ngocson-inspirer.blogspot.com/2015/10/module-bluetooth-hc-05-phan-
1.html
8. http://tae.vn/mach-dieu-khien-dong-co-l298
PHỤ LỤC
#include <SoftwareSerial.h>

#include <Servo.h>

#include <NewPing.h>

SoftwareSerial mySerial(3, 2); //rx 3, tx 2

#define TRIGGER_PIN 13

#define ECHO_PIN 12

#define MAX_DISTANCE 400

NewPing ultrasonic(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

Servo myservo;

#define maxSpeed 255

#define minSpeed 0

#define maxLeft 0

#define maxRight 178

#define steeringCenter 89

#define DIRECTION_STOP 0

#define DIRECTION_FORWARD 1

#define DIRECTION_BACKWARD 2

#define DIRECTION_ROTATE_RIGHT 3
#define DIRECTION_ROTATE_LEFT 4

//Variables

uint8_t distance;

uint8_t checkRight;

uint8_t checkLeft;

uint8_t pos = 90;

uint8_t in1_Left = 6;

uint8_t in2_Left = 5;

uint8_t in3_Right = 10;

uint8_t in4_Right = 9;

uint8_t Throttle = 0;

uint8_t throttleLeft = Throttle;

uint8_t throttleRight = Throttle;

uint8_t CONTROL = 0xF3;

uint8_t SPEED = minSpeed;

uint8_t STEERING = steeringCenter;

uint8_t BUTTON = 255;

uint8_t preCONTROL = 0x01;

uint8_t command[4] = {0x00, 0x00, 0x00, 0x00};


uint8_t Direction = DIRECTION_STOP;

boolean Mode = 1; //0: Bluetooth 1:Obstacle Avoidance

//SET UP////////////////////////////////////////////////////////

void setup()

Serial.begin(9600);

pinMode(in1_Left, OUTPUT);

pinMode(in2_Left, OUTPUT);

pinMode(in3_Right, OUTPUT);

pinMode(in4_Right, OUTPUT);

analogWrite(in1_Left, 0);

analogWrite(in2_Left, 0);

analogWrite(in3_Right, 0);

analogWrite(in4_Right, 0);

myservo.attach(11);

myservo.write(pos);

//MAIN PROGRAM//////////////////////////////////////////////////
void loop(){

if (mySerial.available() == 4){

for (byte i = 0; i < 4; i++)

command[i] = mySerial.read();

preCONTROL = CONTROL;

CONTROL = command[0];

SPEED = command[1];

STEERING = command[2];

BUTTON = command[3];

Throttle = SPEED;

else

Mode = 1;

if(bitRead(BUTTON,4)){

Mode = 1;
}

else{

Mode = 0;

if(!Mode){

bluetooth_mode();

run_the_tank();

else{

obstacle_avoidance_mode();

//MAIN PROGRAM//////////////////////////////////////////////////

//SUB PROCEDURE/////////////////////////////////////////////////

//RUN THE TANK=========================================//

void run_the_tank(){

if (CONTROL != preCONTROL)

analogWrite(in1_Left, 0);
analogWrite(in2_Left, 0);

analogWrite(in3_Right, 0);

analogWrite(in4_Right, 0);

//delay(200);

switch (Direction)

case DIRECTION_FORWARD:

analogWrite(in1_Left, throttleLeft);

analogWrite(in2_Left, 0);

analogWrite(in3_Right, throttleRight);

analogWrite(in4_Right, 0);

break;

case DIRECTION_BACKWARD:

analogWrite(in2_Left, throttleLeft);

analogWrite(in1_Left, 0);

analogWrite(in4_Right, throttleRight);

analogWrite(in3_Right, 0);

break;
case DIRECTION_ROTATE_LEFT:

analogWrite(in2_Left, throttleLeft);

analogWrite(in1_Left, 0);

analogWrite(in3_Right, throttleRight);

analogWrite(in4_Right, 0);

break;

case DIRECTION_ROTATE_RIGHT:

analogWrite(in1_Left, throttleLeft);

analogWrite(in2_Left, 0);

analogWrite(in4_Right, throttleRight);

analogWrite(in3_Right, 0);

break;

case DIRECTION_STOP:

analogWrite(in1_Left, 0);

analogWrite(in2_Left, 0);

analogWrite(in3_Right, 0);

analogWrite(in4_Right, 0);

break;

}
}

//BLUETOOTH
MODE==============================================//

void bluetooth_mode(){

if (CONTROL <= 0xF3)

if ((CONTROL == 0xF1) || (CONTROL == 0xF2))

if (STEERING > steeringCenter)

throttleLeft = Throttle;

throttleRight = map(STEERING, steeringCenter, maxRight, Throttle, minSpeed);

else if (STEERING < steeringCenter)

throttleRight = Throttle;

throttleLeft = map(STEERING, steeringCenter, maxLeft, Throttle, minSpeed);

else
{

throttleLeft = throttleRight = Throttle;

if (CONTROL == 0xF1)

Direction = DIRECTION_FORWARD;

else

Direction = DIRECTION_BACKWARD;

else

if (STEERING > steeringCenter)

throttleRight = throttleLeft = map(STEERING, steeringCenter, maxRight,


minSpeed, maxSpeed);

Direction = DIRECTION_ROTATE_RIGHT;
}

else if (STEERING < steeringCenter)

throttleRight = throttleLeft = map(STEERING, steeringCenter, maxLeft,


minSpeed, maxSpeed);

Direction = DIRECTION_ROTATE_LEFT;

else

throttleRight = throttleLeft = 0;

Direction = DIRECTION_STOP;

//OBSTACLE AVOIDANCE
MODE=====================================//

void obstacle_avoidance_mode(){

throttleLeft = 100;
throttleRight = 100;

distance = ultrasonic.ping_cm();

delay(40);

//Serial.println(distance);

if (distance > 10){

Direction = DIRECTION_FORWARD;

run_the_tank();

else if (distance <=10){

Direction = DIRECTION_STOP;

run_the_tank(); /

for(pos = 20; pos <= 160; pos += 1){

myservo.write(pos);

delay(10);

checkLeft = ultrasonic.ping_cm();

for(pos = 160; pos>=20; pos-=1){

myservo.write(pos);

delay(10);
}

checkRight= ultrasonic.ping_cm();

myservo.write(90);

if (checkLeft < checkRight){

Direction = DIRECTION_ROTATE_RIGHT;

run_the_tank();

delay(400);

else if (checkLeft > checkRight){

Direction = DIRECTION_ROTATE_LEFT;

run_the_tank();

delay(400);

else if (checkLeft <=10 && checkRight <=10){

Direction = DIRECTION_BACKWARD;

run_the_tank();

You might also like