Tải bản đầy đủ (.docx) (40 trang)

Đồ án xe tránh vật cản.

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.85 MB, 40 trang )

****************
************
ỦY BAN NHÂN
DÂN THÀNH
PHỐ HỒ CHÍ
MINH
TRƯỜNG CAO
ĐẲNG LÝ TỰ
TRỌNG
KHOA ĐIỆNĐỒ
DIỆN TỬ

ÁN HỌC
PHẦN:

XE
TRÁNH
VẬT
Giảng
viên hướng****************
dẫn:
ThS Lê Tiến Đạt
Sinh viên thực hiện:
Châu Minh Thi
CẢN TP HCM,ThángHoàngNămNgọc Toàn
**********************************
Lê Thanh Tịnh
Lớp:
17C1-TĐH1
Môn:
Tự dộng hóa




ĐỒ

ÁN:

XE
Giảng viên hướng
dẫn:
Lê Tiến Đạt
TRÁNH
****************
Sinh viên thực hiện:
Châu Minh Thi
VẬTTP HCM,Tháng Năm
Hoàng Ngọc Toàn
**********************************
Lê Thanh Tịnh
CẢN Lớp:
17C1-TĐH1
Môn:

Tự dộng hóa

2

****************
************
ỦY BAN NHÂN
DÂN THÀNH

PHỐ HỒ CHÍ
MINH
TRƯỜNG CAO
ĐẲNG LÝ TỰ
TRỌNG
KHOA ĐIỆNDIỆN TỬ


MỤC LỤC
Lời cảm ơn:..................................................................................................4
Nhận xét của giáo viên hướng dẫn:............................................................5
Nhận xét của giáo viên phản biện:.............................................................. 6
Lời mở đầu:.................................................................................................. 7
CHƯƠNG I: TỔNG QUAN VỀ XE TRÁNH VẬT CẢN:.......................... 8
CHƯƠNG II:CÁC LÝ THUYẾT LIÊN QUAN:......................................... 9
2.1 ARDUINO R3 là gì ? :........................................................................... 9
2.2 Một số thuật ngữ cần lưu ý khi sử dụng Arduino:............................... 9
2.3 Tóm tắt thông số kỹ thuật của Arduino:................................................ 10
2.4 Một số lưu ý khi sử dụng Arduino:........................................................ 10
2.5 Các thao tác có thể gây hư tổn cho Arduino:........................................ 10
2.6 Các chân năng lượng:............................................................................ 12
2.7 Các cổng vào ra:..................................................................................... 12
2.8 Lập trình cho Arduino:.......................................................................... 13
2.2.1 Module điều khiển động cơ L293D:.....................................................13
a) Module điều khiển động cơ L293D là gì?:................................................13
b) Các thành phần Module L293D có thể điều khiển:.................................13
2.2.2 Module cảm biến siêu âm SRF-05:......................................................14
a)Ứng dụng:....................................................................................................14
b) Thông số kỹ thuật:.....................................................................................14
c) Sơ đồ chân:.................................................................................................15

d)Nguyên lí hoạt động:...................................................................................15
2.2.3 Servo SG90:...........................................................................................16
a)Servo là gì ?:................................................................................................16
b) Servo được thiết kế như thế nào ?:...........................................................16
CHƯƠNG III: Lắp ráp và code nạp:.............................................................17
3.1 Linh kiện:..................................................................................................17
3.2 Tiến hành lắp ráp & nạp code cho L293D:.............................................17
a)Điều khiển Motor DC:................................................................................17
b)Lập trình cho Module L293D:....................................................................17
c)Tiến hành nạp code cho L293D:................................................................18
d)Nạp code cho Servo SG05:.........................................................................19
1)Kết nạp:........................................................................................................19
2)Nạp code để thiết lập Servo:.......................................................................19
3)Code tổng:....................................................................................................20
CHƯƠNG IV:TIẾN HÀNH ĐỒ ÁN & BÁO CÁO GIÁ THÀNH:..............26
4.1 Sơ đồ giải thuật.........................................................................................26
4.2 Tiến hành thực hiện:................................................................................27
1)Linh kiện tổng:............................................................................................27
2)Các bước tiến hành:....................................................................................28
4.3 Bảng báo cáo giá tiền sản phẩm:.............................................................34
CHƯƠNG V:HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI:..................................35
3


5.1 Hướng phát triển của đề tài:....................................................................35
5.2 Hướng đi cho đề tài:.................................................................................36
a)Hướng đi hiện tại:.......................................................................................36
b)Hướng phát triển trong tương lai gần:......................................................36

4



LỜI CẢM ƠN
Lời đầu tiên nhóm chúng em xin tỏ lòng biết ơn sâu sắc đến giáo viên
hướng dẫn là thầy Lê Tiến Đạt đã nhiệt tình giúp dỡ chúng em tìm hiểu đề tài,
cung cấp một số tài liệu cơ bản, tận tình hướng dẫn chúng em trong suốt quá
trình thực hiện đề tài. Nhờ vậy mà chúng em đã hoàn thiện đề tài đúng thời hạn.
Và quan trọng hơn sau đó chúng em được học thêm nhiều khiến thức mới,
những kinh nghiệm thực tế trong quá trình xây dựng đồ án, lập trình và làm việc
với những thiết bị chuyên môn.
Chúng em xin chân thành cảm ơn các Thầy, Cô trong khoa Điện-Điện tử,
khoa cơ khí, và đặt biệt là các thầy các cô trong bộ môn Tự Động Hóa-Trường
cao đẳng Lý Tự Trọng đã nhiệt tình giúp đỡ và giảng dạy, cung cấp những kiến
thức cơ bản để chúng em có cơ sở chuyên môn thực hiện và hoàn thành đề tài.
Cuối cùng em xin chúc quý Thầy, Cô và gia đình dồi dào sức khỏe, và
thành công trong sự nghiệp cao quý.
Chúng em xin chân thành cảm ơn !

5


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

…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………

6


NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………

…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………

7


LỜI MỞ ĐẦU
Trong quá trình phát triển công nghiệp của đất nước ta hiện nay, nhu cầu
về tự động hóa đang là một trong những yếu tố được đặt lên hàng đầu. Điều này
đảm bảo cho nhiều nghành công nghiệp những thế đứng của mình trong điều
kiện cạnh tranh khác biệt của nền kinh tế thị trường ngày nay. Trong quá trình
sản xuất, Tự động hóa đóng vai trò rất quan trọng đặt biệt trong các nhà máy
công nghiệp.
Ngày nay việc ứng dụng khoa học kỹ thuật vào sản xuất rất phổ biến. Đặt
biệt là công nghệ Robot. Không chỉ đóng vai trò là thành phần sản xuất công
nghệ Robot còn được ứng dụng vào các nghành khác như: Y tế, Quốc
phòng,Cứu hộ cứu nạn, nghiên cứu khoa học địa chất, hàng không vũ trụ,v.v…
Ngoài việc dùng PLC để lập trình thì chúng ta hoàn toàn có thể dùng
ARDUINO để giảm thiểu chi phí. Qua đó nhóm chúng em xin giới thiệu đề tài:”
XE TRÁNH VẬT CẢN” sử dụng ARDUINO. Nghành công nghiệp không
người lái ngành càng phát triển dược ứng dụng nhiều ở nghành công nghiệp ô
tô, Quốc phòng hàng không mà ở đó máy bay không người lái đóng vai trò

quan trọng. Nhóm em đã quyết định đưa ra đề tài đề mô phỏng lại công nghệ đó
bằng việc sử dụng ARDUINO.
Trong thời gian một tháng tiến hành nghiên cứu và thực hiện đề tài, được
sự hướng dẫn của thầy Lê Tiến Đạt, chúng em đã hoàn thành đề tài của mình.
Tuy nhiên do còn sự hạn chế của thời gian cũng như kinh nghiệm. Đồng thời
giữa lý thuyết và thực tế là một khoảng cách khá xa cho nên đề tài của chúng em
không tránh khỏi những sai xót. Chúng em rất mong dược sự chỉ bảo và giúp đỡ
của các Thầy, Cô để chúng em có thể hiểu rõ hơn về đề tài nghiên cứu của mình.

8


*Tổng quan về robot tránh vật cản
Các Robot tự hành được ứng dụng trong đời sống ngày càng nhiều như
robot vận chuyển hàng hóa, robot kiểm tra nguy hiểm, robot xe lăn cho người
khuyết tật. Robot phục vụ sinh hoạt gia đình… Điểm hạn chế của các robot tự
hành hiện tại là tính thiếu linh hoạt và khả năng thích ứng khi làm việc ở những
vị trí khác nhau.
Robot tự động là lĩnh vực đang rất phát triển. Các ứng dụng của robot
đang dần thay thế sức lao động của con người. Và sự tiên tiến của Robot ngày
càng gia tăng nhờ vào sự phát triển của KH-KT.
Khái niệm Robot tự động đang phát triển nhanh chóng về số lượng,
Robot tự động và cấu tạo phức tạp củ nó ngày càng nâng cao để phù hợp với
từng lĩnh vực khác nhau.
Có rất nhiều loại điều khiển Robot tự động như: Thiết lập đường đi, định vị
GPS,v.v… Robot tránh vật cản là loại Robot có khả năng tránh va chạm với
những trở ngại bất ngờ.
Một số hãng xe đa áp dụng công nghệ tự động không người lái có thể kể
đến như:
+Hãng xe Tesla: với dòng xe Model S

+Hãng Volvo: Xe tự động sử dụng công nghệ GPS dể định vị và công
nghệ điện toán đám mây(cloud computing).
+Hãng Areo Mobil: với sản phẩm xe thông minh không chỉ tự lái mà còn
có thể cất cánh được phát triển dựa trên phiên bản Concept vào năm 1990.
Trong đồ án này, một xe tránh vật cản được nghiên cứu và thực
nghiệm. Xe được sử dụng bằng Arduino sử dụng cảm biến siêu âm để dò
tìm để tránh va chạm.

9

CHƯƠNG
I:
TỔNG
QUAN VỀ
XE TRÁNH
VẬT CẢN


2.1 Arduino R3 là gì?
-Arduino R3 là Arduino thế hệ 3 do hãng ATMEL sáng tạo và phát triển
-Arduino Uno được xây dựng với phân nhân là vi điều khiển
ATmega328P sử dụng thạch anh có chu kì dao động là 16 MHz. Với vi điều
khiển này, ta có tổng cộng 14 pin (ngõ) ra / vào được đánh số từ 0 tới 13 (trong
đó có 6 pin PWM, được đánh dấu ~ trước mã số của pin). Song song đó, ta có
thêm 6 pin nhận tín hiệu analog được đánh kí hiệu từ A0 - A5, 6 pin này cũng có
thể sử dụng được như các pin ra / vào bình thường (như pin 0 - 13). Ở các pin
được đề cập, pin 13 là pin đặc biệt vì nối trực tiếp với LED trạng thái trên
board.Trên board còn có 1 nút reset, 1 ngõ kết nối với máy tính qua cổng USB
và 1 ngõ cấp nguồn sử dụng jack 2.1mm lấy năng lượng trực tiếp từ AC-DC
adapter hay thông qua ắc-quy nguồn.


2.2 Một số thuật ngữ cần lưu ý khi sử dụng Arduino.
 Flash Memory: bộ nhớ có thể ghi được, dữ liệu không bị mất ngay cả khi tắt
điện. Về vai trò, ta có thể hình dung bộ nhớ này như ổ cứng để chứa dữ liệu
trên board. Chương trình được viết cho Arduino sẽ được lưu ở đây. Kích
thước của vùng nhớ này thông thường dựa vào vi điều khiển được sử dụng,
ví dụ như ATmega8 có 8KB flash memory. Loại bộ nhớ này có thể chịu được
khoảng 10,000 lần ghi / xoá.
 RAM: tương tự như RAM của máy tính, sẽ bị mất dữ liệu khi ngắt điện
nhưng bù lại tốc độ đọc ghi xoá rất nhanh. Kích thước nhỏ hơn Flash
Memory nhiều lần.
 EEPROM: một dạng bộ nhớ tương tự như Flash Memory nhưng có chu kì
ghi / xoá cao hơn - khoảng 100,000 lần và có kích thước rất nhỏ. Để đọc / ghi
dữ liệu ta có thể dùng thư viện EEPROM của Arduino.
Ngoài ra, board Arduino còn cung cấp cho ta các pin khác nhau như pin cấp
nguồn 3.3V, pin cấp nguồn 5V, pin GND... ;
*Sơ đồ chân của
IC ATMega328:

CHƯƠN
G II: CÁC
2.3 Thông số kỹ thuật của Arduino board được tóm tắt trong bảng sau:

THUYẾT
10
LIÊN
QUAN


Vi điều khiển


ATmega328P

Điện áp hoạt động

5V

Điện áp vào khuyên dùng

7-12V

Điện áp vào giới hạn

6-20V

Digital I/O pin

14 (trong đó 6 pin có khả năng băm xung)

PWM Digital I/O Pins

6

Analog Input Pins

6

Cường độ dòng điện trên mỗi I/O pin

20 mA


Cường độ dòng điện trên mỗi 3.3V pin

50 mA

Flash Memory

32 KB (ATmega328P)
0.5 KB được sử dụng bởi bootloader

SRAM

2 KB (ATmega328P)

EEPROM

1 KB (ATmega328P)

Tốc độ

16 MHz

Chiều dài

68.6 mm

Chiều rộng

53.4 mm


Trọng lượng

25 g

2.4 Một số lưu ý khi sử dụng Arduino
Mặc dù Arduino có cầu chi tự phục hồi (resettable fuse) bảo về mạch khi
xảy ra quá tải, tuy nhiên cầu chì này chỉ được mắc cho cổng USB nhằm tự động
ngắt điện khi nguồn vào USB lớn hơn 5V.Vì vậy, khi thao tác với Arduino, ta
cần tính toán cẩn thận để tránh gây hư tổn đến board.

2.5 Các thao tác có thể gây hư tổn cho Arduino
Nối trực tiếp dòng 5V vào GND.Khi nối trực tiếp dòng 5V vào GND mà
không qua bất kì một điện trở kháng nào sẽ gây ra hiện tượng đoản mạch và phá
hỏng Arduino, các trường hợp phổ biến có thể mắc phải:
+Nối trực tiếp dòng 5V vào 1 trong 2 chân GND.
+Nối 1 pin OUT bất kì vào GND.
11


Trong trường hợp này, ta nối pin 7 với GND và trong Arduino IDE ta có
đoạn code sau:
1. void setup()
2. {
3.

pinMode(8, OUTPUT);

4. }
5.
6. void loop()

7. {
8.

digitalWrite(8, HIGH);

9.

delay(1000);

10.}
+ Nối một pin HIGH vào một pin LOW bất kì: Về mặt ý nghĩa thì cách nối
này cũng tương tự như ở trên, sẽ gây ra đoản mạch và phá hủy Arduino. Đoạn
code sau sẽ minh họa vấn đề này
1. void setup()
2. {
3.

pinMode(8, OUTPUT);

4.

pinMode(12, INPUT);

5. }
6.
7. void loop()
8. {
12



9.

digitalWrite(8, HIGH);

10. delay(1000);
11.}
+Cấp nguồn lớn hơn 5V cho bất kì pin I/O nào: Theo tài liệu của nhà sản
xuất, với vi điều khiển ATmega328P thì 5V là ngưỡng lớn nhất mà vi điều khiển
này có thể chịu được. Nếu bất kì pin nào bị cấp điện áp vượt quá 5V sẽ gây ra
hỏng vi điều khiển này.
+Tổng cường độ dòng điện trên các I/O pin vượt quá ngưỡng chịu được:
Dựa theo datasheet của vi điều khiển ATmega328P, tổng cường độ dòng điện
cấp cho các I/O pin tối đa là 200mA. Vì vậy, ví dụ như trong trường hợp ta ép
Arduino cấp nguồn cho hơn 10 đèn LED (mỗi đèn thông thường sẽ cần 20mA)
hay dùng trực tiếp các chân I/O cấp nguồn cho động cơ sẽ có thể gây tổn hại đến
vi điều khiển.
Khi Arduino đang vận hành, việc thanh đổi các kết nối có thể gây ra sự
không ổn định của điện áp dẫn đến hư hỏng Arduino. Vì vậy, trong thực tế làm
việc ta nên ngắt nguồn Arduino trước khi thực hiện bất kì các thay đổi nào.

2.6 Các chân năng lượng
 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Ω.

2.7 Các cổng vào/ra

13


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).
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.
Đặ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.8 Lập trình cho Arduino

14


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.

2.2.1 Module điều khiển động cơ L293D
a) Module điều khiển động cơ L293D là gì?
-Motor Driver Shield L293D là shield mở rộng dành cho Arduino.
-Motor Driver Shield L293D tương thích tốt với board Arduino Uno R3,
Arduino Leonado, Arduino Mega 2560.

-Motor Driver Shield L293D sử dụng 2 IC cầu H L293D và 1 IC logic
74HC595 điều khiển. Do đó, shield này có thể điều khiển nhiều loại motor khác
nhau với mức áp lên đến 36V, dòng tối đa 600mA mỗi kênh điều khiển.
L293D là một IC cầu H tương tự như IC SN754410. Các bạn có thể tham khảo
thêm về cách hoạt động của cầu H tại bài viết Mạch cầu H và điều khiển động
cơ với SN754410. Motor Driver Shield L293D tích hợp sẵn 2 IC L293D giúp
bạn có thể dễ dàng thao tác với IC hơn.

b)Các thành phần Motor Driver
Shield L293D có thể điều khiển
-2 servo.
-4 motor điện DC (M1, M2, M3, M4) theo
các hướng khác nhau (mỗi motor có thể
chạy với 1 hướng tới/lùi bất kì) thông qua 4 cầu H của L293D dòng 600mA (cực
đại 1.2A).
-2 stepper motor loại đơn cực (unipolar) hoặc lưỡng cực (bipolar).
Motor driver shield L293D có sẵn các điện trở nối GND nhằm tránh các
motor tự quay lúc khởi động và nút RESET để khởi động lại board Arduino mà
nó đang gắn vào.

c)Các chân trên Shield được kết nối với board Arduino như sau
2 dây điều khiển 2 servo kết nối với chân số 9 và 10. Nguồn nuôi lấy trực
tiếp từ board Arduino (nguồn 5V).
Motor 1 nối với chân 11
Motor 2 nối với chân 3
Motor 3 nối với chân 5
Motor 4 nối với chân 6
Chân 4, 7, 8, 12 dùng điều khiển motor thông qua IC 74HC595
- Các chân chưa sử dụng: 2, 13, A0, A1, A2, A3, A4, A5


15


- Trên shield có 1 jumper màu vàng PWR được sử dụng: nếu kết nối nguồn
ngoài cho board Arduino thông qua jack DC (dùng pin 9V chẳng hạn) thì nguồn
nuôi motor được lấy luôn từ jack này, không cần nối nguồn với EXT_PWR.
Nếu ngắt jumper, bạn cần nối 1 nguồn riêng vào terminal EXT_PWR để nuôi
motor.
Sơ đồ chân L293D

◊Lưu ý!
Khi chạy thử, bạn không nên để motor bì ì vì lúc
này cường độ dòng điện sẽ tăng cao, dễ làm cháy nguồn
nuôi. Nếu cần, hãy cấp nguồn ngoài có công suất cao
cho nó (hãy quên pin tiểu và pin vuông 9V đi).

2.2.2 Module cảm biến siêu âm SRF-05
a) Ứng dụng
Dùng đo khoảng cách, đo mực chất lỏng, robot dò
đường,phát hiện các vết đứt gãy trong dây cáp.
b) Thông số kỹ thuật
- Điện áp vào: 5V
- Dòng tiêu thụ : <2mA
- Tín hiệu đầu ra: xung HIGH(5V) và LOW(0V)
- Khoảng cách đo : 2cm – 450cm
- Độ chính xác : 0.5cm
- Kích thước: 20*45*15mm
- Góc cảm biến :<15 độ
c) Sơ đồ chân
có 5 chân

1. VCC : 5V.
2. Trig(T) : digital input.
3. echo (R): digital output.
4. OUT.
5. GND.
d) Nguyên lý hoạt động
*Ở chế độ 1: Tách biệt, kích hoạt và phản hồi
16


Để đo khoảng cách, ta phát 1 xung rất ngắn (5 microSeconds) từ chân TRIG.
Sau đó cảm biến sẽ tạo ra 1 xung HIGH ở chân ECHO cho đến khi nhận được
xung phản xạ ở chân này. Chiều rộng của xung sẽ bằng với thời gian sóng siêu
âm được phát từ cảm biến quay trở lại. Tốc độ của âm thanh trong không khí là
340 m/s tương đương với 29,412 microSeconds/cm(1000000/(340*100)). Khi đã
tính được thời gian ta chia cho 29,412 để được khoảng cách cần đo.

+Ở chế độ 2: Dùng 1 chân cho cả kích hoạt và phản hồi

Ta sử dụng chân OUT để nó vừa phát ra xung rồi nhận xung phản xạ về,chân
chế độ thì nối đất.Tín hiệu hồi tiếp sẽ suất hiện trên cùng 1 chân với tín hiệu
kích hoạt.SR05 sẽ không tăng dòng phản hồi cho đến 700uS sau khi kết thúc các
tín hiệu kích hoạt và bạn đã có thời gian để kích hoạt pin xoay quanh và làm cho
nó trở thành 1 đầu vào.

2.2.3 Servo SG90
a) Servo là gì
Servo là một dạng động cơ điện đặc biệt. Không giống như động cơ thông
thường cứ cắm điện vào là quay liên tục, servo chỉ quay khi được điều khiển
(bằng xung PPM) với góc quay nằm trong khoảng bất kì từ 0o - 180o. Mỗi loại

servo có kích thước, khối lượng và cấu tạo khác nhau. Có loại thì nặng chỉ 9g
17


(chủ yếu dùng trên máy bay mô mình), có loại thì sở hữu một momen lực (vài
chục Newton/m), hoặc có loại thì khỏe và nhông sắc chắc chắn,...
b) SERVO được thiết kế như thế nào.
Động cơ servo được thiết kế những hệ thống hồi tiếp vòng kín. Tín hiệu ra
của động cơ được nối với một mạch điều khiển. Khi động cơ quay, vận tốc và vị
trí sẽ được hồi tiếp về mạch điều khiển này. Nếu có bầt kỳ lý do nào ngăn cản
chuyển động quay của động cơ, cơ cấu hồi tiếp sẽ nhận thấy tín hiệu ra chưa đạt
được vị trí mong muốn. Mạch điều khiển tiếp tục chỉnh sai lệch cho động cơ đạt
được điểm chính xác. Các động cơ servo điều khiển bằng liên lạc vô tuyến được
gọi là động cơ servo RC (radio-controlled). Trong thực tế, bản thân động cơ
servo không phải được điều khiển bằng vô tuyến, nó chỉ nối với máy thu vô
tuyến trên máy bay hay xe hơi. Động cơ servo nhận tín hiệu từ máy thu này.

18


3.1 Linh kiện
 Một bộ khung xe robot.
 Một cảm biến siêu âm SRF05.
 Một Broad Arduini UNO R3.
 Một module điều khiển động cơ
L293D.
 Một Servo SG90.
 Dây nối đực-cái, cái –cái.
 Bánh xe và motor.


3.2 Tiến hành ráp và nạp
code cho L293D
a) Điều khiển motor DC
Trước tiên, bạn sẽ ghép board Arduino UNO R3 và Motor Shield Driver
L293D lại với nhau như hình:

Sau để kết nối với một động cơ, chỉ cần hàn hai dây để các thiết bị đầu
cuối và sau đó kết nối chúng vào một trong hai M1, M2, M3,hoặc M4, ở đây
mình test thử với chân M2.

19

CHƯƠNG
III: LẮP
RÁP VÀ
CODE NẠP


b) Lập trình cho Module L293D
Đầu tiên: Cần tải và cài đặt thư
viện AFMotor.

c) Tiến hành nạp code cho L293D
1. #include <AFMotor.h>
2.
3. AF_DCMotor motor(2, MOTOR12_64KHZ); // tạo động cơ #2, 64KHz pwm
4.
5. void setup() {
6.
7. Serial.begin(9600); // mở cổng Serial monitor 9600 bps

8.
9. Serial.println("Welcome LTT College");
10.
11.

motor.setSpeed(255); // chọn tốc độ maximum 255`/255

12.
13.

}

14.
15.

void loop() {

16.
17.

Serial.print("tien");

20


18.
19.

motor.run(FORWARD); // động cơ tiến


20.
21.

delay(1000);

22.
23.

Serial.print("lui");

24.
25.

motor.run(BACKWARD); // động cơ lùi

26.
27.

delay(1000);

28.
29.

Serial.print("tack");

30.
31.

motor.run(RELEASE); // dừng động cơ


32.
33.

delay(1000);

34.
35.

}

d) Nạp code cho Servo SG05
1. Kết nối
Trên shield có 2 vị trí để nối tương ứng với 2 servo, bạn chỉ việc cắm theo
đúng thứ tự các chân Vcc (+), GND (-), Signal (S).

21


2. Nạp code để thiết lập Servo.
1. #include <AFMotor.h>
2.
3. #include <Servo.h>
4.
5. int i;
6.
7. Servo servo1;
8.
9. void setup() {
10.
11.


Serial.begin(9600); // mở cổng monitor 9600 bps

12.
13.

Serial.println("Test servo!");

14.
15.

servo1.attach(9); // Khai báo chân servo

16.
17.

}

18.
19.

void loop() {

22


20.
21.

for (i=0; i<255; i++) { // chạy từ 0 đến 255 giá trị


22.
23.

servo1.write(i);

24.
25.

delay(3); // đợi 3 mili dây

26.

}

27.
28.

for (i=255; i!=0; i--) {

29.

servo1.write(i-255);

30.

delay(3);

31.


}

32.
33.

}

3.3 Code tổng.
#include < AFMortor.h>
#include < Servo.h>
#include < NewPing.h>
#define TRIG_PIN A0
#define ECHO_PIN A1
#define MAX_DISTANCE_POSSIBLE 1000
#define MAX_SPEED 150
#define MOTORS_CALIBRATION_OFFSET 3
#define COLL_DIST 20
#define TURN_DIST COLL_DIST 10
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE_POSSIBLE);
AF_DCMotor leftMotor(4, MOTOR12_8KHZ);
AF_DCMotor rightMotor(2, MOTOR12_8KHZ);

23


Servo neckControllerServoMotor;
int pos = 0;
int maxDist = 0;
int maxAngle = 0;
int maxRight = 0;

int maxLeft = 0;
int maxFront = 0;
int course = 0;
int curDist = 0;
String motorSet = "";
int speedSet = 0;
void setup() {
neckControllerServoMotor.attach(10);
neckControllerServoMotor.write(90);
delay(2000);
checkPath();
motorSet = "FORWARD";
neckControllerServoMotor.write(90);
moveForward();
}
void loop() {
checkForward();
checkPath();
}
void checkPath() {
int curLeft = 0;
int curFront = 0;
int curRight = 0;
int curDist = 0;

24


neckControllerServoMotor.write(144);
delay(120);

for(pos = 144; pos >= 36; pos-=18)
{
neckControllerServoMotor.write(pos);
delay(90);
checkForward();
curDist = readPing();
if (curDist < COLL_DIST) {
checkCourse();
break;
}
if (curDist < TURN_DIST) {
changePath();
}
if (curDist > curDist) {maxAngle = pos;}
if (pos > 90 && curDist > curLeft) { curLeft = curDist;}
if (pos == 90 && curDist > curFront) {curFront = curDist;}
if (pos < 90 && curDist > curRight) {curRight = curDist;}
}
maxLeft = curLeft;
maxRight = curRight;
maxFront = curFront;
}
void setCourse() {
if (maxAngle < 90) {turnRight();}
if (maxAngle > 90) {turnLeft();}
maxLeft = 0;
maxRight = 0;

25



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×