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

bai tieu luan abnkgferer

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 (1.03 MB, 28 trang )

Trường Đại học Kinh Bắc
Khoa CNTT

Báo cáo môn học thiết kế và mô phỏng mạch ứng dụng
Đề tài: Thiết kế module đo khoảng cách báo động khi khoảng cách dưới
1m

Các thành viên trong nhóm:
1.

Đỗ Minh Đức

2.

Tô Quang Hiếu

3.

Lê Văn Tính

4.

Nguyễn Văn Đồn

5.

Mẫn Văn Tiến
GVHD:ThS.Nguyễn Văn Doanh

[Type text]


Page 1


[Type text]

Page 2


Mục lục:
1.Giới thiệu đề tài
1.1.Lý do chọn đề tài
1.2.Ứng dụng của cảm biến đo khoảng cách
2.Lý thuyết phần cứng
2.1.Các linh kiện trong mạch
2.2.Board Adruino UNO
2.3.Cảm biến siêu âm SRF05
2.4.Còi chíp 5V
2.5.Đèn LED
3.Lý thuyết phần mềm
3.1.Mạch thiết kế
3.2.Cấu trúc chương trình
4.Kết luận và hướng phát triển của đề tài
4.1.Ưu nhược điểm của sóng siêu âm
4.2.Hướng phát triển đề tài

[Type text]

Page 3



1.Giới thiệu đề tài:
Sóng siêu âm là sóng cơ học có tần số lớn hơn tần số nghe thấy
(>20KHz).Thính giác của con người nghe được âm thanh với dải tần số
từ vài Hz đến âm thanh rất cao(gần 20KHz).Một số loài như ong,cá
heo,dơi,cá voi có thể nhận được sóng siêu âm.Cảm biến siêu âm có thể
phát hiện ra hầu hết các đối tượng là kim loại,chất lỏng hoặc chất
rắn,vật trong hoặc mờ đục(những vật có hệ số phản xạ sóng âm đủ lớn).
Cảm biến siêu âm hoạt động bằng cách phát đi 1 xung tín hiệu và đo
thời gian nhận được tín hiệu trở vể. Sau khi đo được tín hiệu trở về trên
cảm biến siêu âm, ta tính được thời gian từ lúc phát đến lúc nhận được
tín hiệu. Từ thời gian này có thể tính ra được khoảng cách.

[Type text]

Page 4


1.1.Lý do chọn đề tài:
Đối với robot, khi ở chế độ tự động, nó phải lấy thông tin của môi trường
xung quanh như: khoảng cách, nhiệt độ, độ ẩm, ánh sáng ... Và tiến
hành phân tích các dữ liệu đó, cuối cùng ra quyết định phù hợp. Ví dụ
như robot tự tìm đường đi thì nó phải tính được xem phía trước có vật
cản hay không, và tiến hành đi tới hay rẽ sang một hướng khác.
Đề tài sẽ giúp mọi người hiểu và sử dụng được một trong những cảm
biến khoảng cách phổ biến - cảm biến khoảng cách bằng sóng
âm SRF05.

[Type text]

Page 5



1.2. Ứng dụng của cảm biến đo khoảng cách:
-Đo mực chất lỏng
- Robot dò đường
- Sử dụng chống va chạm trong các băng chuyền
- Kiểm tra ,giám sát tình trạng của nguyên liệu gia công
-Phát hiện ,giám sát chiều cao của vật
-Ứng dụng trong rada quân sự
-Dùng cho xe hơi khi lùi
-Thăm dò dưới nước,đáy biển,phát hiện tàu ngầm,các đàn cá...
-Phát hiện phóng điện cục bộ trong MBA
-Ứng dụng trong y tế
-Ứng dụng rộng rãi trong nghành gia công kim loại

[Type text]

Page 6


2. Lí thuyết phần cứng:
2.1.Các linh kiện trong mạch:
Gồm có:
-1 Board Arduino UNO
-1 Cảm biến SRF-05
-1 Còi Chíp 5V
-1 Đèn LED

[Type text]


Page 7


2.2. Board Arduino UNO:

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. Đầu tiên ta có phiên bản Arduino Uno R3 tiêu chuẩn:

Dựa vào thiết kế này, để giảm giá thành sản xuất nên một số thành
phần của board này được thay đổi lại với chức năng tương đương. Ví dụ
như thay vi điều khiển mặc định của Arduino là ATmega328P với kiểu
chân là DIP thành ATmega328 có kiểu chân SMD. Phiên bản này có tên
gọi Arduino Uno SMD R3.

[Type text]

Page 8


Với các thiết bị cần có kích thước nhỏ gọn, Arduino Nano ra đời nhằm
đáp ứng nhu cầu đó. Arduino Nano vẫn giữ nguyên sức mạnh của
Arduino Uno với vi điều khiển ATmega328 - SMD nhưng toàn bộ board
mạch được thu gọn lại và có khả năng cắm trực tiếp vào breadboard.

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.
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
[Type text]

Page 9


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.
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Ω.

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.

[Type text]

Page 10




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.

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ừ ACDC adapter hay thông qua ắc-quy nguồn.
Khi làm việc với Arduino board, một số thuật ngữ sau cần được lưu ý:


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...
Các cổng vào/ra
[Type text]

Page 11


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ể

[Type text]

Page 12


đ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.

Thông số kỹ thuật của Arduino board được tóm tắt trong bảng sau:
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

[Type text]

Page 13


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

Một số lưu ý khi làm việc với Arduino Uno R3
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. Các thao tác sau đây có thể gây hỏng một phần hoặc
toàn bộ board 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

[Type text]


Page 14


Nối 1 pin OUT bất kì vào GND

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()

[Type text]

Page 15


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.


{

[Type text]

Page 16


3.

pinMode(8, OUTPUT);

4.

pinMode(12, INPUT);

5.

}

6.
7.

void loop()

8.

{

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
[Type text]

Page 17


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.

Thay đổi các kết nối trong lúc đang vận hành
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.

[Type text]

Page 18


2.3 Cảm biến SRF-05:
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:
1.

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

2.

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

3.

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í. Lưu ý là sóng âm không thể truyền được trong môi
trường chân không.
Theo nguyên tắc này, dựa vào sự tiến bộ của khoa học công nghệ hiện
đại, ta đã thấy được ứng dụng của sóng âm trong cuộc sống rất nhiều,
có thể kể đến như thiết bị định vị dưới biển của tàu ngầm, thiết bị radar,
các thiết bị đo khoảng cách môi trường như đo độ sâu của đại dương ...

[Type text]

Page 19


[Type text]

Page 20


*Thông số kĩ thuật SRF-05:
-Điện áp hoạt động: 5V
-Dòng cấp: 30mA, 50mA Max
-Tần số: 40KHz
-Góc quét: < 15 độ
-Khoảng cách đo được xa nhất: 3m
-Phát hiện vật cản trong khoảng: 3cm đến 3m
-Kích thước nhỏ gọn: 43mm x 20mm x17mm

[Type text]


Page 21


2.4.Còi chíp 5V:

-Nguồn:5V
-Kích thước:9.5x12mm
-Công dụng:Báo động khi cảm biến hoạt động.

[Type text]

Page 22


2.5.Đèn LED:

[Type text]

Page 23


3. Lí thuyết phần mềm:
3.1

Mạch thiết kế:

[Type text]

Page 24



3.2.Cấu trúc chương trình:


int buzzer=3;



int sound = 250;



void setup() {



Serial.begin (9600);



pinMode(trigPin, OUTPUT);



pinMode(echoPin, INPUT);



pinMode(led, OUTPUT);




pinMode(buzzer, OUTPUT);



void loop() {



unsigned long duration;



int distance;



digitalWrite(trigPin, LOW);



delayMicroseconds(2);



digitalWrite(trigPin, HIGH);




delayMicroseconds(10);



digitalWrite(trigPin, LOW);



duration = pulseIn(echoPin, HIGH);



distance = int (duration/2/29.412);



if (distance > 100 || distance <= 0){



digitalWrite(13,LOW);



digitalWrite(3,LOW);

[Type text]

Page 25



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

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