Professional Documents
Culture Documents
TÊN ĐỀ TÀI:
XE TỰ ĐỘNG TRÁNH VẬT CẢ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
Lê Văn Minh
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ế
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.
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.
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
+ 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ơ 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
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
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
4
2.1.3. Vi điều khiển
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.
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.
8
2.1.6. 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:
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.
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.
11
2.2. Module điều khiển động cơ L298
12
1. 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
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
2.3. Cảm biến siêu âm SRF05
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:
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.
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.
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
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ể.
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.
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.
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.
20
2.4. Động cơ điện một chiều
Độ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.
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
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.
23
Hình 2.14 Sơ đồ chân HC - 05
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.
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
Ở 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.
26
CHƯƠNG 3. THIẾT KẾ VÀ THI CÔNG
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
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
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?
END
30
3.3. Lưu đồ thuật toán chương trình tự động
BEGIN
Y
Vật cản
RETURN
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
Về cơ bản mạch đã hoạt động và tránh được các vật cản khi gặp phải.
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Ị
Ư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
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>
#define TRIGGER_PIN 13
#define ECHO_PIN 12
Servo myservo;
#define minSpeed 0
#define maxLeft 0
#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 in1_Left = 6;
uint8_t in2_Left = 5;
uint8_t in4_Right = 9;
uint8_t Throttle = 0;
//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){
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/////////////////////////////////////////////////
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(){
throttleLeft = Throttle;
throttleRight = Throttle;
else
{
if (CONTROL == 0xF1)
Direction = DIRECTION_FORWARD;
else
Direction = DIRECTION_BACKWARD;
else
Direction = DIRECTION_ROTATE_RIGHT;
}
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);
Direction = DIRECTION_FORWARD;
run_the_tank();
Direction = DIRECTION_STOP;
run_the_tank(); /
myservo.write(pos);
delay(10);
checkLeft = ultrasonic.ping_cm();
myservo.write(pos);
delay(10);
}
checkRight= ultrasonic.ping_cm();
myservo.write(90);
Direction = DIRECTION_ROTATE_RIGHT;
run_the_tank();
delay(400);
Direction = DIRECTION_ROTATE_LEFT;
run_the_tank();
delay(400);
Direction = DIRECTION_BACKWARD;
run_the_tank();