Cảm Biến Và Chuyển Năng

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 17

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CẦN THƠ


KHOA CÔNG NGHỆ

BÁO CÁO ĐỒ ÁN MÔN HỌC


Đồ án kỹ thuật điện tử
GVHD: Trương Quốc Bảo

ROBOT TỰ CÂN BẰNG HAI BÁNH

SINH VIÊN THỰC HIỆN MSSV

Nguyễn Minh Trí B1509486

Tháng 4/2019
NỘI DUNG ĐỒ ÁN

I. GIỚI THIỆU ĐỀ TÀI

1. Tổng quan vấn đề

Ngày nay với sự tiến bộ của nghành khoa học kĩ thuật thì ứng dụng của các cảm
biến đóng vai trò quan trọng trong kĩ thuật điện tử, giúp chúng ta tạo ra những vật
dụng thông minh, tiện lợi và đầy hữu ít… Cảm biến là thiết bị điện tử cảm nhận
những trạng thái hay quá trình vật lý hay hóa học ở môi trường cần khảo sát, và
biến đổi thành tín hiệu điện để thu thập thông tin về trạng thái hay quá trình đó.
Nhóm chúng em sẽ tìm hiểu về cảm biến siêu âm, một cảm biến được sử dụng
rất nhiều trong các lĩnh vực như : robot, máy đo độ sâu, quét địa hình ở dưới đáy
biển,… với những cảm biến, chúng có khả năng nhận biết về môi trường xung
quanh, có nhiều ý nghĩa trong các ngành công nghiệp, thương mại, y tế, các ứng
dụng khoa học và phục vụ đời sống của con người.
Với sự phát triển của nghành Robot học thì cảm biến đóng vai trò rất quan trọng,
robot tự hành ngày càng có khả năng hoạt động trong các môi trường khác nhau,
tùy mỗi lĩnh vực áp dụng mà chúng có nhiều loại khác nhau như robot sơn, robot
hàn, robot cắt cỏ, robot thám hiểm đại dương, robot làm việc ngoài vũ trụ… robot
tự hành tiếp tục đưa ra những thách thức mới cho các nhà nghiên cứu để có thể
đáp ứng mọi nhu cầu của con người. Vấn đề của robot tự hành là làm thế nào để
robot tự hành có thể hoạt động, nhận biết môi trường và thực thi các nhiệm vụ đề
ra.
Việc di chuyển tránh vật cản là một tác vụ thường thấy ở robot di động, trong
các môi trường biết trước hoặc không biết trước. Tác vụ này được dùng với các
nhiệm vụ: tránh chướng ngại vật, đi theo tường biết trước, đi theo tường không
biết trước. Trong phạm vi của đồ án , chúng em thiết kế mô hình robot gồm 2
bánh xe chủ động phía sau, 1 bánh xe phía trước chuyển động tự do, 1 cảm biến
siêu âm HC-SR04 để thu khoảng cách và tránh vật cản, mạch điều khiển được sử
dụng ở đây là Arduino Uno.
2. Mục tiêu đề tài.

Hiểu được nguyên lý hoạt động của cảm biến khoảng cách HC SR-04 và ứng
dụng vào mô hình xe điện tử, để có thể tự tránh được các vật cản ở phía trước
đường đi của mình
Phần đề tài chúng em chỉ là mô hình nhưng nếu thành công thì mô hình như
vẫn có thể áp dụng trên các vật dụng hay phương tiện nào đó để phục vụ cho
mục đích của con người, ví dụ như là xe tự động láy, xe dò thám….

II. CƠ SỞ LÝ THUYẾT

1. Cấu tạo, nguyên lý hoạt động


1.1. Khối cảm biến

Cảm biến khoảng cách HC-SR04 là cảm biến dùng để xác định khoảng cách
trong phạm vi nhỏ bằng cách phát sóng siêu âm. Cảm biến với độ chính xác
chính xác khá cao (với khoảng cách nhận biết nhỏ nhất 3mm) và độ ổn định cao
trong quá trình sử dụng, đồng thời dễ dàng kết nối với các MCU (Arduino, DSP,
AVR, PIC, ARM…)
Các ứng dụng thường thấy với cảm biến như: xe tránh vật cản, xác định khoảng
cách của vật thể đến cảm biến, hay mô phỏng làm radar…
a) Thông số kỹ thuật :
 Điện áp làm việc: 5V (DC)
 Góc quét tốt nhất: 30°
 Khoảng cách hoạt động: 2cm ~ 450cm
 Khoảng cách nhận biết nhỏ nhất: 3mm
 Pinout:

- VCC: nguồn cấp cho cảm biến 5V


- GND: nối mass
- Trigger: pin cho cực phát
- Echo: pin cho cực thu

b) Nguyên lý hoạt động:


Nguyên lý hoạt động của module HC-SR04 dựa vào giản đồ thời gian bên
dưới.

Trigger phát ra sóng siêu âm và Echo thu sóng siêu âm phản xạ về. Đầu tiên
cảm biến sẽ phát ra 1 sóng siêu âm với tần số 40khz. Nếu có chướng ngại vật
trên đường đi, sóng siêu âm sẽ phản xạ lại và tác động lên module nhận sóng.
Bằng cách đo thời gian từ lúc phát đến lúc nhận sóng ta sẽ tính được khoảng
cách từ cảm biến đến chướng ngại vật.
Khoảng cách = (thời gian * vận tốc âm thanh (340 m/s) / 2
1.2. Khối điều khiển
1.2.1. Arduino UNO R3

Arduino UNO R3 có thể được cấp nguồn 5V thông qua cổng USB. Nếu cấp nguồn
vượt quá ngưỡng giới hạn như trên sẽ làm hỏng Arduino UNO R3.
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. Nó có thể luôn là 5V. Chú ý 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: Khi 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Ω.
Các chân vào ra của Arduino Uno R3:
Arduino UNO R3 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 có thể nói 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 để đọ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.
Module driver L298N

IC L298N là mạch tích hợp đơn chip có kiểu vỏ công suất 15 chân. (Là IC mạch
cầu đôi (dual full-bridge) có khả năng hoạt động ở điện thế cao, dòng cao. Nó được
thiết kế tương thích chuẩn TTL và lái tải cảm kháng như relay, cuộn solenoid,
động cơ DC và động cơ bước. Nó có 2 chân enable (cho phép) để cho phép/không
cho phép IC hoạt động, độc lập với các chân tín hiệu vào. Cực phát (emitter) của
transistor dưới của mỗi mạch cầu được nối với nhau và nối ra chân ngoài để nối
với điện trở cảm ứng dòng khi cần. Nó có thêm một chân cấp nguồn giúp mạch
logic có thể hoạt động ở điện thể thấp hơn..

Sơ đồ khối
CHỨC NĂNG CÁC CHÂN
+ Chân 1;15 (Sense A; Sense B): Nối chân này qua điện trở cảm ứng dòng
xuống GND để điều khiển dòng tải.
+ Chân 2;3 (Out 1; Out 2): Ngõ ra của cầu A. Dòng của tải mắc giữa hai chân
này được qui định bởi chân 1.
+ Chân 4 (VS): Chân cấp nguồn cho tầng công suất. Cần có một tụ điện không
cảm kháng 100nF nối giữa chân này và chân GND
+ Chân 5;7 (Input 1;Input): 2 Chân ngõ vào của cầu A, tương thích chuẩn TTL
+ Chân 6;11(Enable A; EnableB): Chân ngõ vào enable (cho phép) tương thích
chuẩn TTL. Mức thấp ở chân này sẽ cấm (disable) ngõ ra cầu A (đối với chân
EnableA) và/hoặc cầu B (đối với chân EnableB)
+ Chân 8 (GND): Chân đất (Ground)
+ Chân 9 (VSS): Chân cấp nguồn cho khối logic. Cần có tụ điện 100nF nối giữa
chân này với GND
+ Chân 10; 12 (Input 3;Input 4): Các chân logic ngõ vào của cầu B
+ Chân 13; 14 (Out 3; Out 4): Ngõ ra của cầu B. Dòng của tải mắc giữa hai chân
này được qui định bởi chân 15.

Thông số kỹ thuật
 Driver: L298N tích hợp hai mạch cầu H.
 Điện áp điều khiển: +5 V ~ +12 V
 Dòng tối đa cho mỗi cầu H là: 2A (=>2A cho mỗi motor)
 Điện áp của tín hiệu điều khiển: +5 V ~ +7 V
 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 = 75 ℃)
 Nhiệt độ bảo quản: -25 ℃ ~ +130 ℃

1.3. Khối cơ khí


1.3.1. Động cơ giảm tốc và bánh xe

Động cơ DC giảm tốc vàng là loại được lựa chọn và sử dụng nhiều nhất hiện
nay cho các thiết kế Robot đơn giản. Thông thường động cơ DC chỉ chạy ở một tốc
độ khi kết nối với nguồn điện, nhưng chúng ta vẫn có thể kiểm soát tốc độ và
hướng của động cơ với sự hỗ trợ của các mạch điện tử với phương pháp
PWM. Điều khiển động cơ PWM phương pháp dựa trên nguyên tắc hoạt động cho
động cơ chạy bằng chuỗi xung nhanh chóng mở và đóng. Điện DC được chuyển đổi
thành tín hiệu sóng vuông (chỉ có hai cấp độ và khoảng 0 điện áp hoạt động volt).
Tín hiệu sóngvuông này cho động cơ.Nếu tần số chuyển đổi là đủ lớn động cơ sẽ
chạy ở tốc độ ổn định phụ thuộc vào trục mô-men xoắn.Với phương pháp PWM,
điều chỉnh tốc độ động cơ thông qua điều chế độ rộng xung, tức là thời gian "xung
đầy đủ" ("on") của chuỗi xung vuông cho động cơ. Điều chỉnh này sẽ ảnh
hưởng đến công suất trung bình cho động cơ và do đó sẽ thay đổi cần điều khiển tốc
độ động cơ.

- Thông số kỹ thuật
+ Động cơ:
• Điện áp hoạt động : 3 v- 9 v DC
• Mômen xoắn cực đại: 800gf cm min 1:48 (3V)
• Tốc độ không tải:
125 rpm (3V)
208 rpm (5V)
• Dòng không tải: 70 mA (250 mA max).
+ Bánh xe
• Chất liệu: Nhựa
• Đường kính bánh xe: 66mm
• Đồ dày lốp xe : 6.5mm
• Chiều rộng bánh xe : 27mm
1.3.2. Động cơ servo
Động cơ servo được thiết kế cho 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ấu tạo:
1. Động Cơ
2. Các bản mạch điện tử
3. Dây nguồn chính ( đỏ)
4. Dây tín hiệu ( vàng hoặc trắng)
5. Dây âm/ dây nối đất ( mầu đen)
6. Bộ chỉnh điện áp ( bộ chia áp).
7. Trục đầu ra/ Bánh răng.
8. Mặt bích lắp ( ghá) động cơ Servo/ bánh răng.
9. Hộp động cơ Servo.
10. Chíp tích hợp điều khiển.
Thông số kĩ thuật SG90-9G :
• Khối lượng : 9g
• Kích thước: 22.2x11.8.32 mm
• Momen xoắn: 1.8kg/cm
• Tốc độ hoạt động: 60 độ trong 0.1 giây
• Điện áp hoạt động: 4.8V(~5V)
• Nhiệt độ hoạt động: 0 ºC – 55 ºC
• Có 3 đây, 1 dây nguồn +5V, 1 dây GND, 1 đây PWM.

Nguyên lý điều khiển động cơ :


Kết nối dây màu đỏ với 5V, dây màu nâu với mass, dây màu cam với chân điều
khiển tín hiệu vào dây PWM của vi điều khiển. Ở chân PWM cấp một xung từ 1ms-
2ms (hoặc tuỳ ý) để điều khiển góc quay theo ý muốn.

Mô tả góc quay trục động cơ theo độ rộng xung PWM

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


Xe né vật cản là robot dựa trên tín hiệu của cảm biến siêu âm . Phát một xung ngắn
(10 microseconds) từ chân Trig và sau đócảm biến sẽ tạo ra một xung HIGH ở chân
echo cho đến khi nhận được sóng phản xạ. Từ dộ rộng xung ta sẽ biết được khoảng
cách vật cản . Kết hợp với động ở Servo ta sẽ đo được khoảng cách vật cản ở phía
trước(0 độ) bên trái (180 độ) và bên phải (90độ) rồi so sánh các giá trị với giá trị cho
giới hạn rồi chọn công việc rẽ phải hay rẽ trái hay đi thẳng.
III. NỘI DUNG THỰC HIỆN

1. Sơ đồ mạch điện
2. Cấu tạo hệ thống ứng dụng

Sơ đồ khối hệ thống

Một bộ khung xe robot 3 bánh


Một cảm biến siêu âm HC-SR04 và giá đỡ
Một Broad Arduino UNO R3
Một module driver L298N
Một Servo
Hai động cơ có gắn bánh xe
Dây nối
Pin
3. Code
1. #include <Servo.h>
2. //#include "LiquidCrystal_I2C.h"
3. //LiquidCrystal_I2C Serial(0x3F, 16, 2);
4. #define trig 9 //chân trig của HC-SR04
5. #define echo 8//chân echo của HC-SR04
6.
7. Servo sr04; // create servo object to control a servo
8. #define inA1 4 //Định nghĩa chân in1 của động cơ A
9. #define inA2 5 //Định nghĩa chân in2 của động cơ A
10. #define inB1 6 //Định nghĩa chân in1 của động cơ B
11. #define inB2 7 //Định nghĩa chân in2 của động cơ B
12.
13.
14. void setup()
15. {
16. pinMode(inA1, OUTPUT);//Set chân in1 của dc A là output
17. pinMode(inA2, OUTPUT);//Set chân in2 của dc A là output
18. pinMode(inB1, OUTPUT);//Set chân in1 của dc B là output
19. pinMode(inB2, OUTPUT);//Set chân in2 của dc B là output
20. pinMode(trig, OUTPUT); //chân trig sẽ phát tín hiệu
21. pinMode(echo, INPUT); //chân echo sẽ nhận tín hiệu
22. Serial.begin(9600);
23. sr04.attach(10); //attach servo ở chân digital 10
24. }
25. int khoangcachvatcan_cm (byte x)
26. {
27. sr04.write(x);
28. delay(500);
29. unsigned long thoigian;//biến đo thời gian
30. int khoangcach;//biến lưu khoảng cách
31.
32. /* phát xung từ chân trig */
33. digitalWrite(trig, 0); //tắt chân trig
34. delayMicroseconds(2);
35. digitalWrite(trig, 1); // phát xung từ chân trig
36. delayMicroseconds(10);// xung có độ dài 4 microSeconds
37. digitalWrite(trig, 0); //tắt chân trig
38. /* tính toán thời gian */
39. thoigian = pulseIn(echo, HIGH); //đo độ rộng xung HIGH ở chân echo. (
http://arduino.vn/reference/pulsein )
40. khoangcach = int(thoigian / 2 / 29.412); //tính khoảng cách đến vật.
41.
42. /* in kết quả ra Serial monitor */
43. Serial.print(khoangcach);
44. Serial.println("cm");
45. //delay(200);
46. return khoangcach;
47. }
48. void chieuquaydongco (byte in1, byte in2, byte huongquay)
49. {
50. // in1 là in2 2 là chân dộng cơ
51. // huongquay bao gồm:
52. // 0:Dừng
53. // 1:Quay chiều thứ 1
54. // 2:Quay chiều thứ 2
55. switch (huongquay)
56. {
57. case 0:// Dừng không quay
58. digitalWrite(in1, LOW);
59. digitalWrite(in2, LOW);
60. break;
61. case 1:// Quay chiều thứ 1
62. digitalWrite(in1, HIGH);
63. digitalWrite(in2, LOW);
64.
65. break;
66. case 2:// Quay chiều thứ 2
67. digitalWrite(in1, LOW);
68. digitalWrite(in2, HIGH);
69. break;
70. //default:
71. }
72. }
73. void robotMover (byte inR1, byte inR2, byte inL1, byte inL2, byte hanhdong)
74. {
75. /*
76. inR1 inR2 là 2 chân tín hiệu động cơ bên phải
77. inL1 inL2 là 2 chân tín hiệu động cơ bên trái
78. hanhdong= 0 đứng yên
79. hanhdong =1 đi thẳng
80. hanhdong =2 lùi lại
81. hanhdong =3 rẽ trái
82. hanhdong =4 rẽ phải
83. */
84. switch (hanhdong)
85. {
86. case 0:// không di chuyển
87. chieuquaydongco(inR1, inR2, 0);
88. chieuquaydongco(inL1, inL2, 0);
89. break;
90. case 1://đi thẳng
91. chieuquaydongco(inR1, inR2, 1);
92. chieuquaydongco(inL1, inL2, 1);
93. break;
94. case 2:// lùi lại
95. chieuquaydongco(inR1, inR2, 2);
96. chieuquaydongco(inL1, inL2, 2);
97. break;
98. case 3:// quay trái
99. chieuquaydongco(inR1, inR2, 1);
100. chieuquaydongco(inL1, inL2, 0);
101. break;
102. case 4:// quay phải
103. chieuquaydongco(inR1, inR2, 0);
104. chieuquaydongco(inL1, inL2, 1);
105. break;
106. default:
107. hanhdong = 0;
108. }
109. }
110. void loop()
111. {
112. objectAvoider (inA1, inA2, inB1, inB2, 40, 1000);
113. }
114. void objectAvoider (byte inR1, byte inR2, byte inL1, byte inL2, byte
khoangcach_antoan(), int thoigianchuyenhuong)
115. {
116. int khoangcach_phiatruoc = khoangcachvatcan_cm (90);
117. int khoangcach_trai;
118. int khoangcach_phai;
119. int khoangcach_max;
120. if (khoangcach_phiatruoc > khoangcach_antoan)
121. {
122. robotMover(inR1, inR2, inL1, inL2, 1);
123. Serial.print("Truoc ");
124. Serial.print(khoangcach_phiatruoc);
125. Serial.println(" cm");
126. Serial.println("Tien Thang");
127. delay(10);
128. }
129. else if (khoangcach_phiatruoc <= khoangcach_antoan)
130. {
131. robotMover(inR1, inR2, inL1, inL2, 2);
132. Serial.println("Co vat can");
133. Serial.println("Lui lai");
134. delay(100);
135. robotMover(inR1, inR2, inL1, inL2, 0);
136. khoangcach_trai = khoangcachvatcan_cm (180); //đo khoảng cách bên trái
137. Serial.print("Ben Trai ");
138. Serial.print(khoangcach_trai);
139. Serial.println(" cm");
140. delay (100);
141. khoangcach_phai = khoangcachvatcan_cm (0); //đo khoảng cách bên phải
142. // Serial.setCursor(1,0);
143. Serial.print("Ben Phai ");
144. Serial.print(khoangcach_phai);
145. Serial.println(" cm");
146. khoangcach_max = max(khoangcach_trai, khoangcach_phai); // so sánh
giá trị lớn nhất với khoảng cách bên phải (gán bằng cái lớn nhất)
147. if (khoangcach_max == khoangcach_trai)
148. {
149. robotMover(inR1, inR2, inL1, inL2, 3);
150. Serial.println("<< Re trai");
151. delay (thoigianchuyenhuong / 2);
152. Serial.println("Toi luon!");
153. // Nếu bên trái là khoảng cách lớn nhất thì rẽ trái
154. robotMover(inR1, inR2, inL1, inL2, 1);
155. }
156. else if (khoangcach_max == khoangcach_phai)
157. {
158. robotMover(inR1, inR2, inL1, inL2, 4); // Nếu bên phải có khoảng cách lớn
nhất thì rẽ phải
159. Serial.println("Re phai >>");
160. delay (thoigianchuyenhuong / 2);
161. Serial.println("Toi luon!");
162.
163. }
164. }

IV. KẾT LUẬN

Nhóm đã làm ra xe tránh vật cản sử dụng Arduino và cảm biến khoảng cách
HC-SR04 và xe hoạt động cũng khá mượt . Nhưng bên cạnh đó vẫn còn nhiều
thiếu xót như: tính thẩm mĩ chưa cao…
Tài liệu tham khảo

- http://arduino.vn
- http://htpro.vn/news/dien-tu-co-ban/nguyen-ly-cau-tao-cam-bien-sieu-am-thong-
dung-5.html

You might also like