Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 91 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
91
Dung lượng
3,38 MB
Nội dung
-1- PHẦN MỞ ĐẦU - Lý chọn đề tài: Nắm bắt từ thực tế nhiều nước giới ứng dụng Robot để phục vụ nhiều lĩnh vực như: công nghiệp, nông nghiệp quân sống sinh hoạt ngày Trong tương lai Robot công cụ hỗ trợ đắc lực cho người giúp người vươn đến tầm cao Nhận thức xu hướng tầm quan trọng Robot tương lai, nhằm góp phần xây dựng phát triển cơng nghệ Robot Việt Nam, nhóm sinh viên định chọn thực đề tài “THIẾT KẾ VÀ THI CÔNG ROBOT GIÁM SÁT VƯỢT ĐỊA HÌNH” với mong muốn đề tài ứng dụng tốt sống thực tiễn - Tổng quan lịch sử nghiên cứu đề tài: Hiện Việt Nam nhiều nước giới tập trung nghiên cứu nhiều lĩnh vực Robot Hình 1.1: Robot quân Vietbot1 Việt Nam chế tạo [6] Vietbot1: có hình dáng tương tự xe bọc thép, kích thước dài 1,5m, rộng 0,8m, cao 2m, khối lượng 300 kg, di chuyển bánh Điểm bật Vietbot1 sử dụng cánh tay cơng gắp RP có khả quay 360 độ, tháo lắp thay module, tùy theo yêu cầu nhiệm vụ Cánh tay máy có tầm -2- vươn xa m, gồm bậc tự vận hành động điện gắp giữ vật nặng tới 20kg [10] Hình 1.2: Robot leo cầu thang [10] Robot leo cầu thang: Chuyển động sáu bánh xe Robot leo cầu thang trường Đại Học Lạc Hồng chế tạo vượt địa hình phức tạp leo bậc thang Hình 1.3: Robot quân TALON quân đội Mỹ [8] Người máy mặt đất TALON: Có thể tháo ngịi nổ bom nhìn qua vật cản để phát đối phương [8] -3- - Mục tiêu nghiên cứu: Đối với nhóm sinh viên, đề tài bước đầu tìm hiểu, thi cơng sản phẩm Robot ứng dụng thực tế, đồng thời bước triển khai kiến thức học Thông qua việc nghiên cứu làm việc nghiêm túc để rèn luyện tác phong, tinh thần khoa học, hoàn thiện phương pháp, tư nghiên cứu, giải vấn đề thực tiễn Quan trọng hơn, đề tài bước “tổng kết hoàn thiện” kỹ cịn thiếu sót trước thực trở thành người kỹ sư Về mặt ứng dụng thực tiễn, đề tài sử dụng hỗ trợ giám sát từ xa, trinh sát tìm kiếm người vật nơi chật hẹp nguy hiểm - Đối tượng nghiên cứu phạm vi nghiên cứu: + Nghiên cứu cấu truyền động, bánh xe vượt địa hình + Thiết kế vẽ, chế tạo mơ hình theo kích thước thực + Nghiên cứu vi điều khiển AVR + Thiết kế mạch điều khiển trung tâm, mạch công suất điều khiển động + Tìm hiểu sử dụng thu phát sóng RF wireless để điều khiển từ xa Robot + Xây dựng, phát triển thuật toán điều khiển hệ thống điều khiển + Tìm hiểu loại camera khơng dây, camera IP + Lập trình, điều khiển Robot + Nâng cao khả vượt địa hình Robot, đảm bảo độ bền vững cho Robot từ thực nghiệm - Phương pháp nghiên cứu: Xuất phát từ thực tế mục đích nghiên cứu nêu trên, phương pháp nghiên cứu đề tài chọn lựa phù hợp + Thu thập tài liệu nước để tìm hiểu sở lý thuyết + Nghiên cứu ứng dụng linh kiện có để thực mơ hình + Thi cơng Robot máy CNC, máy tiện, thủ công thực nghiệm -4- - Những đóng góp đề tài vấn đề mà đề tài chưa thực được: đề tài có ý nghĩa bước đầu chập chững tiến lên ngành cơng nghiệp nghiên cứu Robot cịn yếu nước ta, góp phần làm “điểm tựa” cho hệ sau tiến lên nấc thang cao nghiên cứu chế tạo Robot Robot giám sát vượt địa hình có thiết kế nhỏ gọn hoạt động tốt với kết cấu vững nguồn hoạt động lâu giúp cho người dễ dàng vận chuyển triển khai phạm vi ứng dụng cách linh hoạt Tuy nhiên thời gian nghiên cứu không nhiều nên đề tài nhiều mặt hạn chế chưa áp dụng nhiều công nghệ GPS, cảm biến công nghệ giúp Robot trở nên thông minh có ứng dụng thực tiễn nhiều -5- CHƯƠNG CƠ SỞ LÝ THUYẾT CỦA ĐỀ TÀI 1.1 Vi điều khiển Atmega8: [4] AVR họ vi điều khiển chuẩn CMOS 8bit tiêu thụ lượng, chế tạo dựa cấu trúc AVR RISC (Reduced Instruct Set Computers), cấu trúc có tốc độ xử lý cao nhiều so với vi điều khiển chế tạo dựa cấu trúc CISC (Complex Instruct Set Computers) Bởi tần số hoạt động AVR với tần số thạch anh, với vi điều khiển họ 8051 tần số hoạt động tần số thạch anh chia cho 12 1.1.1 Đặc trưng Atmega8: - Được phát triển cấu trúc RISC, tập lệnh tối ưu với 130 lệnh, hầu hết lệnh chu kỳ máy - Có thể đạt tốc độ 16 triệu lệnh/s kết hợp thạch anh 16MHz - 32x8 ghi làm việc (R0 ÷ R31) - 8K byte nhớ flash dạng ISP - 512 byte EEPROM - 1K byte RAM nội - Cho phép lập trình cấm truy cập nội dung Flash ROM va EEPROM - Lập trình “on-chip” thơng qua chuẩn SPI - Hỗ trợ tốc độ BAUD cao - IC đóng gói 32 chân, có 23 chân I/O - Điện áp hoạt động: 4.5-5.5V - Tần số hoạt động : 0-16MHz -6- 1.1.2 Những đặc trưng giao tiếp ngoại vi: - Hai timer/counter bit với đếm dồn riêng biệt, chế độ so sánh - Một timer/counter 16 bit với đếm dồn riệng biệt, chế độ so sánh, chế độ thu nhận giá trị tức thời - Hỗ trợ đầy đủ nguồn ngắt ngồi - Bộ đếm thời gian thực chạy từ dao động riệng biệt - Hỗ trợ ba kênh PWM - Hỗ trợ kênh ADC 10 bit - Hỗ trợ giao chuẩn two-wire - Hỗ trợ giao tiếp USART - Hỗ trợ giao tiếp SPI - Watchdog timer với dao động riêng biệt on-chip, lập trình 1.1.3 Những tính đặc biệt: - Được tích hợp dao động RC nội điều chỉnh giúp hoạt động không cần thạch anh ngồi - Có chế độ ngủ (tiết kiệm lượng): nghỉ, giảm nhiễu ADC, tiết kiệm lượng, nguồn thấp nghỉ chờ 1.1.4 Sơ đồ chân Atmega8: Atmega8 hỗ trợ kiểu chân: PDIP , TQFP, MLFP Trong đồ án sử dụng IC có kiểu chân dán TQFP Hình 1.4: Sơ đồ chân Atmega8 [4] -7- 1.1.5 Mô tả chân: - VCC: chân cấp điện áp 5V - GND: chân nối đất - PortB (PB7 PB0): Là port xuất nhập bit hai chiều có điện trở kéo lên bên (có thể chọn cho bit) Ngồi chân portB cịn có chức đặc biệt: Chân port Chức khác PB5 SCK ( bus chuẩn SPI) PB4 MISO (bus chuẩn SPI: Master input/Slave output) PB3 MOSI (bus chuẩn SPI: Master output/Slave intput) PB2 SS (bus master: Slave select) - PortC (PC6 PC0): Là port xuất nhập bit hai chiều có điện trở kéo lên bên (có thể chọn cho bit) Ngoài chân portC cịn có chức đặc biệt: Chân port Chức khác PC6 Ngõ vào reset PC5 ADC5- ngõ vào kênh ADC5 SCL- bus xung đồng chuẩn truyền nối tiếp I2C PC4 ADC4- ngõ vào kênh ADC4 SDA- bus data input/output chuẩn truyền nối tiếp I2C PC3 ADC3- ngõ vào kênh ADC3 PC2 ADC2- ngõ vào kênh ADC2 PC1 ADC1- ngõ vào kênh ADC1 PC0 ADC0- ngõ vào kênh ADC0 -8- - PortD (PD7 PD0): Là port xuất nhập bit hai chiều có điện trở kéo lên bên (có thể chọn cho bit) Ngồi chân portD cịn có chức đặc biệt: Chân port Chức khác PD7 AIN1- ngõ vào so sánh đảo so sánh Analog PD6 AIN0- ngõ vào so sánh không đảo so sánh Analog PD5 T1- ngõ vào đếm kiện counter1 PD4 T0- ngõ vào đếm kiện counter0 XCK- ngõ vào/ra xung clock USART PD3 INT1- ngõ vào ngắt PD2 INT0- ngõ vào ngắt PD1 TXD- ngõ liệu USART PD0 RXD- ngõ vào liệu USART - RESET : ngõ vào Reset, chân xuống mức thấp thời gian dài độ dài xung nhỏ (tra bảng) vi điều khiển bị reset khơng có xung clock chạy - AVCC : chân cấp nguồn cho A/D, nên nối với VCC qua lọc thông thấp Nếu khơng sử dụng A/D nên nối chân vào nguồn VCC - AREF : chân tham chiếu tín hiệu analog A/D - ADC7 (chỉ có kiểu chân TQFP MLFP): hai ngõ vào thứ A/D -9- 1.1.6 Cấu trúc Atmega8: Hình 1.5: Cấu trúc Atmega [4] - Họ AVR mang kiến trúc Harvard: tách rời vùng nhớ, có bus cho chương trình liệu Tập ghi truy xuất nhanh bao gồm 32 x bit ghi với thời gian truy xuất xung clock Điều có nghĩa thời gian xung clock, đơn vị số học ALU (Arithmetic Logic Unit) thực thi lệnh, kết lưu ngược lại vào ghi ALU hỗ trợ phép tính số học logic ghi hay số với ghi Các lệnh - 10 - ghi đơn thực thi ALU Sáu số 32 ghi dùng ghi trỏ địa 16-bit, điều nói rõ phần sau - Bộ nhớ chương trình flash chia làm phần phận khởi động hệ thống phận chương trình ứng dụng Cả hai có bit khố dành riêng để bảo mật - Trong trình thực ngắt hay chương trình con, địa trở (PC) lưu ngăn xếp (Stack) Ngăn xếp vùng SRAM truy xuất theo nguyên tắc “lưu trước lấy sau” Khi lập trình cần ý khởi tạo địa SP chương trình reset,điều đặc biệt quan trọng sử dụng ngắt hay chương trình - Các module ngắt mềm có ghi điều khiển kết hợp với bit cho phép ngắt tồn cục Tất ngắt có vector ngắt tương ứng cho bảng sau: - 77 - #define RBP PORTB.0 #define BT OCR1B #define RBT PORTB.4 #define BT1 OCR2 #define RBT1 PORTB.5 #define GAP PORTC.4 #define CAMERA PORTC.5 #define NANG PORTC.2 #define HA PORTC.3 void t_tien() { RBT1=1; RBP1=1; delay_ms(40); BT1= 0; BP1= 0; } void t_lui() { RBT1=0; RBP1=0; delay_ms(100); BT1= 0; BP1= 0; } void t_phai() - 78 - { RBT1=1; RBP1=0; delay_ms(100); BT1= 0; BP1= 0; } void t_trai() { RBT1=0; RBP1=1; delay_ms(100); BT1= 0; BP1= 0; } void co_tien(int d) { RBT=1; RBP=1; RBT1=1; RBP1=1; delay_ms(40); BT= d; BP= d; BT1= 0; BP1= 0; } - 79 - void co_lui(int d) { RBT1=0; RBP1=0; RBT=1; RBP=1; delay_ms(100); BT= d; BP= d; BT1= 0; BP1= 0; } void co_phai(int d) { RBT=1; RBP=1; RBT1=1; RBP1=0; delay_ms(100); BT= d; BP= d; BT1= 0; BP1= 0; } void co_trai(int d) { RBT=1; - 80 - RBP=1; RBT1=0; RBP1=1; delay_ms(100); BT= d; BP= d; BT1= 0; BP1= 0; } void ban_tien(int d) { RBT=0; RBP=0; RBT1=1; RBP1=1; delay_ms(40); BT= d; BP= d; BT1= 0; BP1= 0; } void ban_lui(int d) { RBT1=0; RBP1=0; delay_ms(50); RBT=0; - 81 - RBP=0; delay_ms(100); BT= d; BP= d; BT1= 0; BP1= 0; } void ban_phai(int d) { RBT1=1; RBP1=0; delay_ms(50); RBT=0; RBP=0; delay_ms(100); BT= d; BP= d; BT1= 0; BP1= 0; } void ban_trai(int d) { RBT=0; RBP=0; RBT1=0; RBP1=1; delay_ms(100); - 82 - BT= d; BP= d; BT1= 0; BP1= 0; } void tien(int d) { RBT=1; RBP=1; RBT1=1; RBP1=1; delay_ms(40); BT= d; BP= d; BT1= 0; BP1= 0; } void lui(int d) { RBT1=0; RBP1=0; delay_ms(100); BT1= 0; BP1= 0; RBT=0; RBP=0; delay_ms(100); - 83 - BT= d; BP= d; } void phai(int d) { RBT1=1; RBP1=0; delay_ms(50); RBT=1; RBP=0; delay_ms(100); BT= d; BP= d; BT1= 0; BP1= 0; } void trai(int d) { RBT=0; RBP=1; RBT1=0; RBP1=1; delay_ms(100); BT= d; BP= d; BT1= 0; BP1= 0; - 84 - } void dung() { RBT=1; RBP=1; RBT1= 1; BP1= 1; BT= 255; BP= 255; NANG=1; HA=1; GAP=1; BT1= 255; BP1= 1; } void main(void) { char O; // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTB=0x00; DDRB=0xFF; - 85 - // Port C initialization // Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTC=0x00; DDRC=0x7F; // Port D initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTD=0x00; DDRD=0xFF; // Timer/Counter initialization // Clock source: System Clock // Clock value: Timer Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter initialization // Clock source: System Clock // Clock value: 7372.800 kHz // Mode: Fast PWM top=00FFh // OC1A output: Non-Inv // OC1B output: Non-Inv // Noise Canceler: Off // Input Capture on Falling Edge - 86 - // Timer Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0xA1; TCCR1B=0x09; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter initialization // Clock source: System Clock // Clock value: 7372.800 kHz // Mode: Fast PWM top=FFh // OC2 output: Non-Inverted PWM ASSR=0x00; TCCR2=0x69; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00; - 87 - // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // USART initialization // Communication Parameters: Data, Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x2F; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; PORTB=0xFF; PORTC=0xFF; PORTD=0xFF; BT=255; BP=255; BT1=255; O=230; CAMERA=1; while (1) { - 88 - char h; h=getchar(); switch (h) { case 'a': t_tien(); break; case 'b': t_lui(); break; case 'c': trai(0); break; case 'd': phai(0); break; case 'e': co_tien(0); break; case 'f': co_lui(0); break; case 'g': co_trai(0); - 89 - break; case 'h': co_phai(0); break; case 'A': ban_tien(0); break; case 'B': ban_lui(0); break; case 'C': ban_trai(0); break; case 'D': ban_phai(0); break; case 'l': CAMERA=0; break; - 90 - case 'm': CAMERA=1; break; case 'i': NANG=0; HA=1; break; case 'k': NANG=1; HA=0; break; case 'z': RBT=1; RBP=1; delay_ms(50); BT= O; BP= O; if(O>=1) { O ; } if(O