- Trên hệ Pan-Tilt ta gá cảm biến siêu âm SRF04, hệ Pan-Tilt quay mang theo cảm biến và yêu cầu vẽ được biên dạng 2D của vật đặt trước cảm biến.. Thiết kế: - Dựa theo yêu cầu đề tài, xem
Trang 1chương 3: Thiết kế hệ Pan-Tilt
3.1 Yêu cầu:
- Đề tài yêu cầu thiết kế 1 hệ Pan-Tilt có thể quay quanh 2 trục Ox – Tilting, và Oy – Panning
- Trên hệ Pan-Tilt ta gá cảm biến siêu âm SRF04, hệ Pan-Tilt quay mang theo cảm biến và yêu cầu vẽ được biên dạng 2D của vật đặt trước cảm biến
3.2 Thiết kế:
- Dựa theo yêu cầu đề tài, xem cấu trúc của 1 hệ Pan-Tilt và tham khảo 1 số mẫu Pan-Tilt trên mạng, chúng em đã thiết kế được
1 hệ Pan-Tilt cơ bản, đáp ứng được yêu cầu mang SRF04 quay quanh 2 trục Ox, Oz dễ dàng
O Z
Y
X
Trang 2- Hai động cơ được sử dụng để thiết kế là 2 động cơ RC Servo của hãng Futaba (các thông số như trình bày ở phần động cơ servo), momen của chúng là 3.2 kg.cm đáp ứng đủ yêu cầu mang
sensor SRF04 quay mà không sợ bị quá tải
- Cảm biến siêu âm SRF04 được gá trên top của hệ Pan-Tilt
biến có thể quét được hầu hết toàn bộ biên dạng của vật thể nằm trong tầm quét của nó (phụ thuộc cách đặt, vị trí tương đối hệ Pan-Tilt – vật)
C Kết quả đạt được:
I Phần cứng:
1 Vật mẫu: 3 vật mẫu: hình tròn, chữ nhật và nón cụt
Trang 32 Phần cứng toàn bộ của đề tài:
II Phần điện tử:
2.1 Thiết kế board điều khiển dùng AT Mega32:
a Nguyên lý:
Trang 4b Mạch hoàn thành:
Trang 52.2 Board nguồn cung cấp cho 2 động cơ Servo:
Board dùng IC LM 2576 Adj, có khả năng điều chỉnh điện áp ngõ ra (mắc biến trở) và cho dòng ra lớn (lên đến 3A) Lý do chính
để chọn IC này làm mạch nguồn cho servo là nhằm đáp ứng đủ dòng tiêu thụ cho 2 động cơ servo, vì khi chạy dòng I tiêu thụ của mỗi servo khoảng > 1A, 2 servo phải mất trên 2A và các loại IC nguồn thường dùng (7805, MC34063…) không đáp ứng đủ
a Nguyên lý mạch
b Mạch hoàn thành:
Trang 6III Chương trình điều khiển:
1.Vi điều khiển – AT Mega32:
1.1 Chương trình chính:
a Giải thuật chương trình chính:
Bắt đầu reset
Xác định Xmax, Xmin,Ymax,Ymin
Truyền lên máy tính
Đưa cảm biến về Xmin, Ymax
Quét và gởi tọa độ lên
máy tính
Trang 7b Source Code: viết bằng phần mềm CodeVision.
reset_servoX(); // vi tri "0"
reset_servoY();
Xmin,Xmas***************
axes = top(); // lấy giá trị Ymax - điểm cao nhất trên cùng của vật
itoa(axes,Ymax);
axes = bottom(); // lấy giá trị Ymin -điểm thấp nhất dưới cùng của vật
itoa(axes,Ymin);
axes = left(); // lấy giá trị Xmin - điểm ngoài cùng bên trái của vật
itoa(axes,Xmin);
axes = right();
itoa(axes,Xmax); // lấy giá trị Xmax -điểm ngoài cùng bên phải của vật
//**xử lý chuỗi và gởi lên máy tính các giá trị
biên***********
Trang 8strcatf(str," ");// them ky tu ' ' strcat(str,Ymax);
strcatf(str," ");// them ky tu ' ' strcat(str,Ymin);
strcatf(str," ");// them ky tu ' ' strcat(str,Xmax);
strcatf(str," ");// them ky tu ' ' strcat(str,Xmin);
puts(str); // gởi lên máy tính chuỗi data dạng: Ymax Ymin
Xmas Xmin
lcd_clear(); // xóa LCD
lcd_puts(str);
servoX = iXmin; // đưa servo đến vị trí "top left"chuẩn
bị quét
servoY = iYmax;
delay_ms(1000);
//***********thực hiện quét vật thể***********
for (y=j2;y>=j1;y )
{
for (x=i1;x<=i2;x++)
{
servoX += 4;
if (has_obj())
{
itoa(x,axis_OX);
itoa(y,axis_OY);
strcatf(axis_OX," "); strcat(axis_OX,axis_OY);
Trang 9puts(axis_OX);
delay_ms(100);
}
}
delay_ms(300);
servoX = iXmin;
servoY += 4;
delay_ms(300);
}
1.2 Chương trình con xác định X(min,max); Y(min,max):
a Giải thuật chương trình con xác định Ymax:
Trang 10c Source Code:
//***********hàm xác định “top” - mép trên cùng của vật
int top(void)
{
unsigned char tang=1;
reset_servoX();
reset_servoY();
Ytang:
servoY -= 4; //Y tang
Bắt đầu
Y tăng
Ymax
Tăng ==1 S
S
Đ Thoát
X tăng
Đ
Xmax
KT
KT
Reset servoX Tăng :=0
X giảm S
S
Đ
S
Return Y Kết thúc
Trang 11j2++;
if (servoY <= 461-20) //kiem tra Y max
else
kiemtra:
if (has_obj()) //kiem tra co vat
else
{
}
thoat:
iYmax = servoY;
return j2; //return giá trị top = Ymax
}
//********************end*********************
Trang 12* Các chương trình con xác định Ymin, Xmax, Xmin tương tự.
1.3 Chương trình ngắt đo khoảng cách từ SRF04 đến vật-có vật hay không?
a Giải thuật:
S
Đ
Bắt đầu
Xuất 1 xung 10us từ chân PD.7 kích CB
Thiết lập INT2 ngắt cạnh lên, khởi tạo timer0.
Khi ngắt cạnh lên, cho timer chạy, INT2 chuyển qua dò cạnh xuống
Khi ngắt cạnh xuống cho timer dừng, đo khoảng time t từ lúc
có cạnh lên đến lúc có cạnh xuống
t # timeout
Có vật
Không có vật
Kết thúc
Trang 13b Source Code:
interrupt [EXT_INT2] void ext_int2_isr(void)
{
#asm("sei")
if (MCUCSR==0x40)
else
long)count*256);
}
}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
#asm("sei")
}
2 MatLab: