TÌM HIỂU VỀ CÁC CẢM BIẾN TRÊN ROBOT Như buổi 1 đã đề cập ,cảm biến trên robot được bố trí thành 3 tầng Tầng dưới ,tầng giữa ,và tầng trên .Buổi hôm nay ta sẽ đi sâu vào các loại cảm biế
Trang 1Buổi 2
TÌM HIỂU VỀ CÁC CẢM BIẾN TRÊN ROBOT
Như buổi 1 đã đề cập ,cảm biến trên robot được bố trí thành 3 tầng (Tầng dưới ,tầng giữa ,và tầng trên ).Buổi hôm nay ta sẽ đi sâu vào các loại cảm biến này
1.Cảm biến tầng trên :
Trong Robocon tầng trên thường được trang bị Camera Ta sẽ tìm hiểu kĩ về CMU Cam Ưu điểm của Camera này là được tích hợp chip xử lý ảnh sẵn nên việc ứng dụng nó rất dễ dàng Chỉ cần dùng những loại vi điều khiển thông thường vẫn có thể giao tiếp tốt với CMU Cam
Trang 2(Hướng dẫn sử dụng và các phần mềm hỗ trợ sẽ được chỉ rõ trong CMUCam Manual )
Chương trình tham thảo: Dùng PIC16F877A giao tiếp với CMU Cam
// Spot Welding Mobile Robot V2 (Only Spot, No Welding Line)
// 2 PIC877: (1)for Welding Process; (2) for Tracking Line using Camera sensor // PIC Comm.: Parallel (PSP)
Trang 9Giới thiệu :
Cảm biến siêu âm SRF04 có khả năng đo được khoảng cách từ 3 cm đến 3m Nó được gắn trên robot kèm theo một động cơ RC Servo để dò vật cản
Giao tiếp với SRF04:
Sơ đồ chân của 5 đầu ra của SFR04 :
Hình ảnh một robot sử dụng cảm biến siêu âm SRF04 :
Trang 10Giản đồ xung của SRF04 :
Nguyên tắc hoạt động :
Vùng hoạt động của cảm biến siêu âm được xác định bằng cách truyền một xung âm thanh ra bên ngoài Xung này sẽ di chuyển với tốc độ âm thanh (xấp xỉ 0,9 ft/ msec) trong vùng hình nón
Trang 11Giá trị xung thô trả về được tính bằng micro giây Từ đó ta tính được khoảng cách thông qua công thức sau :
s [m] = 344m/s * ti [s] / 2
Với vùng phát hiện từ 3cm tới 3m ,ta có thể tính được độ dài của xung là từ 100us tới 18ms
Nếu không có vật thể nào phát hiện ,chiều rộng xung sẽ là 36 ms
Chương trình tham khảo : Sử dụng PIC16F84A
Trang 12status equ 0x03 ; status equate
; -
; -
; porta0 = input from sensor
; portb3 = command to sensor
; portb0 = command to servo
of B
next instruction
skip next instruction
skip next instruction
Trang 13movwf PWM
nop
nop
nop
decfsz PWM ; decrement the PWM length
rest of the PWM signal
Cách đây vài năm ,nhiều loại cảm biến hồng ngoại đo khoảng cách đã được Sharp giới
thiệu Các cảm biến này được đóng góp nhỏ gọn ,tiêu thụ dòng rất ít ,và nhiều sự lựa
chọn cho tín hiệu output
Hình ảnh của GP2D12:
Trang 14Sơ đồ khối :
Giản đồ trạng thái
Trang 15Một số đặc tính của GP2D12 :
Absolute Max Ratings
Output Terminal Voltage VO -0.3 to VCC+0.3 V
Operating Supply Voltage
Operating Supply Voltage VCC 4.5 to 5.5 V
Trang 16L: Distance to reflected object
* 1 Using reflected object: White paper (Made by Kodak Co Ltd gray cards
R-27, white face, reflective ratio: 90%)
Lý thuyết hoạt động :
Với sự giới thiệu về cảm biến GP2DXX của Sharp ,một phương pháp mới được sử dụng phát hiện vật thể ở khoảng cách xa hơn, và không bị ảnh hưởng nhiều của điều kiện ánh sáng xug quanh
Cảm biến hồng ngoại sử dụng phương pháp trắc đạt tam giác (triangulation) và một mảng CCD dài mỏng để tính toán khoảng cách và sự hiện diện của vật thể trong vùng quan sát
(Phương pháp trắc đạt tam giác sẽ được giới thiệu trong tài liệu kèm theo )
Ý tưởng cơ bản là : một xung của đèn IR được phát ra bởi đèn phát (emitter) Tia sáng này sẽ đi trong trường quan sát và hoặc là đụng vật thể ,hoặc là không đụng vật thể Trong trường hợp không gặp vật thể ,tia sáng sẽ không bao giờ phản hồi về và đọc là không có vật thể Nếu tia sáng phản xạ lại ,có vật thể Cảm biến sẽ thu và tạo ra một phép trắc đạc tam giác giữa 3 điểm : điểm phản xạ ,điểm phát và điểm thu
Khác góc và khác khoảng cách Tín hiệu Output :
Tín hiệu Output không tuyến tính Bởi vì một vài phép lượng giác của tam giác trắc địa
Trang 17
Đường cong quan hệ giữa khoảng cách và mức volt của GP2D12
Ở đây có hai điều lưu ý trong đường cong quan hệ trên :
Đầu tiên ,tín hiệu output khoảng cách nằm giữa vùng từ 10 cm tới 80 cm thì không tuyến tính
Thứ hai là trên đường cong có thể chia thành hai vùng ,một vùng nhỏ hơn 10 cm và vùng
từ 10 cm tới 80 cm Hai vùng này đường đặc tuyến khác nhau Nó có thể gây ảnh hưởng đến robot của bạn nếu robot của bạn di chuyển chậm hoặc khi robot của bạn tiến lại gần vật thể Để tránh điều này cảm biến trên robot bạn có thể bố trí như hình dưới
Ví dụ về vị trí đặt cảm biến trên robot
Góc của chùm tia hơi nhỏ ,vì khoảng cách giữa con phát và thu nhỏ chỉ có 16 cm Nếu bạn muốn tăng góc mở , bạn có thể sử dụng kết hợp 2 cảm biến hồng ngoại như ví dụ ở hình dưới
Trang 18Ví dụ tăng góc quan sát của cảm biến
Việc sử dụng GP2D12 được liên kết nối tới 3 dây Những kết nối này là : Ground ,Vcc ,và Output Cảm biến sẽ đo khoảng cách và xuất ra output dưới dạng mức volt analog Bởi vì việc thu ánh sáng xảy ra liên tục , không cần xung clock Nên tốn nhiều năng
lượng ,và có thể ảnh hưởng đến các ngoại vi khác ,và bộ xử lý nếu trên robot có nhiều cảm biến này
Tín hiệu Output có những xung gai nhỏ nên cần có thêm tụ lọc giữa Output và Ground
Trang 19
Việc lập trình sử dụng cảm biến này thì rất đơn giản ,các bạn chỉ cần dùng vi điều khiển
nào có tích hợp sẵn bộ ADC ,và đọc vào là có thể biết được khoảng cách
Cảm biến dò đường trong Robocon :
Như buổi 1 đã phân tích ,có rất nhiều phương án bố trí cảm biến để có thể dò đường và
đếm vạch được Trong phần này ,chỉ ví dụ một phương án đó là sử dụng 8 cảm biến đặt
thẳng hàng (Dùng led siêu sáng và quang trở ) ,vừa dò đường vừa đếm vạch
R7 1K
D31 INFARED LED_TRANSMITTER
D31 INFARED LED_TRANSMITTER
0
R3 2.2K R6
47K
R7 1K
1_-IN4
D31 INFARED LED_TRANSMITTER
D31 INFARED LED_TRANSMITTER
1_+IN4
R3 2.2K
0 0
0
1_-IN3
R7 1K
R3 2.2K
1_OUT4
1_-IN3
5V
1_+IN4 1_OUT1
1_+IN2
0
U7 LM339
OUT2 OUT1 +V -IN1 +IN1 -IN2
+IN3 -IN4 +IN4 GND OUT4
OUT3
1 2 3 4- 5+
8-9+
11+
10-12 13 14
1_OUT2
1_-IN2
1_-IN4
Trang 20D33 LED
+5V
P0.2 1_OUT3
C8 CAP NP
0
R9 R P0.0
C8 CAP NP
P0.1 +5V
C8 CAP NP
D33 LED
P0.3
R9 R 1_OUT4
D33 LED
+5V
0 0
R9 R
+5V
R8 10K
2
D32 INFARED LED_RECEIVER
R7 1K
D31 INFARED LED_TRANSMITTER
0
D32 INFARED LED_RECEIVER
0
2-IN4
D31 INFARED LED_TRANSMITTER
2
R7 1K R8
R3 2.2K
R7 1K
D32 INFARED LED_RECEIVER
0
D31 INFARED LED_TRANSMITTER
R3 2.2K
R8 10K
0
R6 47K
R6 47K
0
0
2+IN2
R3 2.2K
R6 47K
R7 1K
0
Trang 212-IN4 5V
2-IN3
U7 LM339
OUT2 OUT1 +V -IN1 +IN1 -IN2
+IN3 -IN4 +IN4 GND OUT4
OUT3
1 2 3 4- 5+
8-9+
11+
10-12 13 14
2+IN3
2OUT4 2OUT2
0
2OUT2
C8 CAP NP
P0.6
R9 R 2OUT3
C8 CAP NP
D33 LED
0
C8 CAP NP
R9 R
R9 R
D33 LED
PSEN 5V P1.0
P3.1 P0.3
P2.0
P2.3
Y 1 XM/SM
P1.2 P1.3
5V
R1 8k2
6
8
P1.3
P3.0 P1.7
P2.2 P2.6
29 31
40 1
3
5
7 8
21 23 25 26 28
10 11
13
15
17
39 38
36
34 33
RST
XTAL2 GND
PSEN ALE/PROG EA/VPP
VCC P1.0
P1.2 P1.3 P1.5 P1.7
P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.5/A13 P2.6/A14
P3.0/RXD P3.1/TXD P3.2/INT0 P3.4/T0 P3.6/WR P3.7/RD
P0.0/AD0 P0.2/AD2 P0.4/AD4 P0.6/AD6 P0.7/AD7
P2.3 P0.2
P1.5
C3 10uF
P1.6
P3.2
Trang 22Thực hành vẽ mạch cảm biến và làm mạch cảm biến : Sử dụng Orcad và vẽ 1 lớp tự làm mạch bằng tay để test
Lập trình dò đường :
Trong lập trình dò đường bạn có 2 cách để lập trình ,một là hỏi vòng liên tục ,hai là sử dụng ngắt Viết theo ngắt thì hay hơn vì xử lý được các sự kiện ngay lập tức ,còn hỏi vòng phải mất thời gian quét nên có thể bỏ xử lý các tình huống không kịp thời
Chương trình tham khảo :(Sử dụng ngắt )
#include<REG52.H>
#include<mod51rd2.h>
extern bit
nho_trai,nho_phai,co_cd1,co_cd2,co_cd3,enable_time,finish,finish1,finish2,enable_xoa,enable_dem,enable_vach,en_doduong;
extern unsigned char tocdo,tocdolx,tocdok,tocdoka,m;
extern unsigned int dem1;//,dem2,dem3;
void timer0_ISR(void) interrupt 1 using 1
{ unsigned char tocdol,tocdor;
dem1++;
Trang 23tocdol = tocdo - tocdo/6;
tocdor = tocdo + tocdo/4;
Trang 24case 0xCF: // co 4 cam bien ben phai dk ve ben phai
{
finish = 1;
nho_trai = 0;
nho_phai = 1;
tocdol = tocdo + tocdo/4;
tocdor = tocdo - tocdo/6;
Trang 27tocdol = tocdo - tocdo/3 ;
tocdor = tocdo + tocdo/5;
tocdol = tocdo + tocdo/5 ;
tocdor = tocdo - tocdo/3;
Trang 28case 0x60: // co 2 cam bien senrn + senrn1 dieu khien lech toc do vua ve phai
Trang 29tocdol = tocdo - tocdo/4;
tocdor = tocdo + tocdo/4;
tocdor = tocdo - tocdo/4;
tocdol = tocdo + tocdo/4;
// chaytoi(tocdol,tocdor);
P1 = 0xFF;
dir0 = 0;
Trang 30tocdol = tocdo - tocdo/6;
tocdor = tocdo + tocdo/6;
tocdol = tocdo + tocdo/6;
tocdor = tocdo - tocdo/6;
Trang 32}