THIẾT KẾ VÀ CHẾ TẠOMÔ HÌNH HỆ THỐNG MÁY KÉO DI CHUYỂN TỰ ĐỘNG

102 6 0
  • Loading ...
1/102 trang
Tải xuống

Thông tin tài liệu

Ngày đăng: 26/02/2019, 13:49

BỘ GIÁO DỤC ĐÀO TẠO TRƯỜNG ĐẠI HỌC NÔNG LÂM THÀNH PHỐ HỒ CHÍ MINH KHĨA LUẬN TỐT NGHIỆP THIẾT KẾ CHẾ TẠOMƠ HÌNH HỆ THỐNG MÁY KÉO DI CHUYỂN TỰ ĐỘNG Họ tên sinh viên: PHẠM QUANG LỘC NGUYỄN CÔNG HẬU Ngành: CƠ ĐIỆN TỬ Niên khóa: 2009- 2013 Tháng 06 năm 2013     MƠ HÌNH HỆ THỐNG MÁY KÉO CHẠY TỰ ĐỘNG TÁC GIẢ PHẠM QUANG LỘC – NGUYỄN CƠNG HẬU Khóa luận tốt nghiệp đệ trình đáp ứng yêu cầu Cấp kỹ sư nghành điện tử Giáo viên hướng dẫn: TH.S TRẦN THỊ KIM NGÀ PGS.TS NGUYỄN VĂN HÙNG Tháng 06 năm 2013 i    LỜI CẢM ƠN Chúng em xin chân thành cảm ơn thầy, cô mơn Cơ Điện Tử thầy, khoa khí_cơng nghệ giúp đỡ chúng em trình học trường Đại Học Nông Lâm Chúng em xin bày tỏ lòng cảm ơn chân thành thầy Nguyễn Văn Hùng cô Trần Thị Kim Ngà tận tình hướng dẫn chúng em suốt trình làm luận văn tốt nghiệp Đặc biệt, chúng em xin cảm ơn quý thầy cô hội đồng dành thời gian nhận xét góp ý để luận văn chúng em hoàn thiện Cuối chúng em xin cảm ơn đến gia đình tất bạn bè động viên, giúp đỡ ủng hộ cho chúng em suốt trình học tập Xin cảm ơn tất người cầu chúc tất người mạnh khỏe, vui vẻ thành công sống Xin chân thành cảm ơn! TPHCM, ngày tháng năm 2012 Sinh viên thực PHẠM QUANG LỘC NGUYỄN CƠNG HẬU ii    TĨM TẮT Đề tài nghiên cứu “ Thiết kế chế tạo mơ hình máy kéo chạy tự động” thực trường Đại Học Nơng Lâm Thành Phố Hồ Chí Minh, thời gian từ tháng đến tháng năm 2013 Đề tài thực thành công đạt kết khả quan xây mơ hình robot bám đối tượng dựa vào thuật toán CamShift thư viện OpenCV Để theo dõi đối tượng OpenCV cần phải có q trình dò tìm, phân tích nhận dạng đối tượng Thực truyền nhận liệu nối tiếp chuẩn RS232, truyền nhận liệu khơng dây qua sóng RF Trên sở tìm hiểu thư viện OpenCV đồ án xây dựng thuật toán theo dõi đối tượng dựa vào thuật toán phổ biến OpenCV thuật toán CamShift Đồ án gồm có:Mơ hình máy kéo di chuyển tự động robot chạy sau bám theo robot chạy trước Robot chạy sau có webcam thu nhận hình ảnh đóng vai trò mắt robot robot chạy trước đóng vai trò đối tượng di chuyển để robot sau bám theo Mơ hình robot chế tạo nhằm kiểm nghiệm thuật toán xây dựng, kết đồ án để phát triển xây dựng thuật toán điều khiển robot sử dụng OpenCV iii    MỤC LỤC LỜI CẢM ƠN ii TÓM TẮT iii MỤC LỤC .i DANH SÁCH CÁC CHỮ VIẾT TẮT iv DANH SÁCH CÁC HÌNH VẼ iv DANH SÁCH CÁC BẢNG vi Chương MỞ ĐẦU 1.1 Đặt vấn đề 1.2 Mục đích .2 Chương TỔNG QUAN 2.1 Một số khái niệm xử lý ảnh 2.1.1 Phần tử ảnh 2.1.2 Mức xám ảnh 2.1.3 Ảnh .5 2.1.3.1 Ảnh nhị phân 2.1.3.2 Ảnh xám 2.1.3.3 Ảnh màu 2.1.4 Độ phân giải 2.2 Tổng quan hệ thống xử lý ảnh .7 2.2.1 Các thiết bị thu nhận ảnh 2.2.1.1 Khái niệm camera 2.2.1.2Phân loại Camera 2.2.2 Thu nhận ảnh số ảnh 10 2.2.3 Lưu trữ ảnh 10 2.2.4 Phân tích ảnh 11 2.2.5 Hệ định .14 2.3 Tổng quan vi điều khiển PIC .15 i    2.4 Truyền thông nối tiếp RS 232 17 2.4.1 Tổng quan truyền thông nối tiếp RS 232 17 2.4.2 Truyền liệu qua cổng RS 232 19 2.4.2.1 Sơ đồ kết nối vi điều khiển với máy tính thơng qua cổng RS 232 19 2.4.2.2 Cấu trúc truyền liêu theo chuẩn RS 232 19 2.5 Tín hiệu khơng dây sử đụng cặp module thu phát RF 20 2.5.1 Tổng quan sóng RF .20 2.5.1.1 Biên độ bước sóng 20 2.5.1.2 Bức xạ điện từ 21 2.5.1.3 Pha 21 2.5.2 Các phương pháp điều chế sóng RF 21 2.5.2.1 Điều biên 21 2.5.2.2 Điều tần 22 2.5.2.3 Điều pha .22 2.5.3 Mã hóa liệu 23 2.5.3.1 Các phương pháp mã hóa liệu 23 2.5.3.2 Các dạng mã hóa phổ biến 23 2.5.4 Hoạt động sóng vô tuyến .24 2.5.5 Module thu phát sóng RF 25 2.5.5.1 Tổng quan cặp IC – PT2262 IC – 2272 .25 2.5.5.2 Module phát 26 2.5.5.3 Module thu 27 Tổng quan OpenCV 28 2.6.1 Cấu trúc nội dung OpenCV 29 2.6.2 Một số hàm đơn giản thường xuyên sử dụng thư viện HighGUI sau: .30 2.6.2.1 Đọc viết ảnh 30 2.6.2.2Các hàm thực xử lý ảnh 31 2.6.3 Cơ sở toán học thuật toán CamShift 33 Chương .35 PHƯƠNG TIỆN PHƯƠNG PHÁP NGHIÊN CỨU 35 ii    3.1 Thời gian bố trí thực đề tài 35 3.2 Đối tượng thiết bị nghiên cứu 35 3.3 Phương pháp nguyên cứu 35 3.3.1 Phương pháp nguyên cứu 35 Chương .36 KẾT QUẢ THẢO LUẬN 36 4.1 Sơ đồ xử lý điều khiển 36 4.1.1 Camera sử dụng 36 4.1.2 Thiết kế mach vi điều khiển kết nối module phát sóng RF 38 4.1.3 Sơ đồ khối khâu công tác 40 4.1.4 Thiết kế mach vi điều khiển kết nối module thu sóng RF 41 4.1.5 Thiết kế mạch công suất điều khiển động .43 4.1.6 Mơ hình hệ thống sau hồn thành 44 4.2 Xử lý ảnh, xác định điều khiển bám theo đối tượng 46 4.2.1 Thị giác máy tính điều khiển robot di động bám đối tượng .46 4.2.2 Thuật tốn tính hướng kích thước cỡ đối tượng cần theo dõi 46 4.2.2.1 Thuật toán chung 46 4.2.2.2 Nhận dạng bám theo đối tượng di động 47 4.2.3 Thuật toán CamShift 50 4.2.3.1 Thu nhận ảnh 52 4.2.3.2 Histogram .53 4.2.4 Thiết kế hoàn chỉnh phần mềm điều khiển 54 4.2.5 Phương pháp điều khiển .56 4.2.5.1 khảo sát chạy thử nghiệm robot 56 4.2.5.2 Khảo nghiệm mơ hình máy kéo di chuyển tự động .56 Chương .59 KẾT LUẬN ĐỀ NGHỊ 59 5.1 Kết đạt .59 5.1.1 Kết đạt 59 5.1.2 Hạn chế cân khắc phục .59 5.2 Hướng phát triển đồ án .60 iii    TÀI LIỆU THAM KHẢO PHỤ LỤC .2 Code xử lý ảnh Code vi điều khiển 23 2.1 Code mạch phát .23 2.2 Code mach thu xe .26 2.3 Code mạch thu xe .29 DANH SÁCH CÁC CHỮ VIẾT TẮT GUI: Graphical User Interface CMOS: Complementary Metal-Oxide-Semiconductor COM: component object model IP: Internet Protocol PIC: Programmable interrupt controller RS 232: Recommended Standard 232 RF: Radio Frequency CCD: Charge Couple Device CCIR: Consultative Committee On International Radio AC: Alternating Current ASK: Amplitude Shift Keying PSK: Phase Shift Keying OpenCV Open Source Computer Vision Library CamShift .Continouusly Adaptive Mean Shift DANH SÁCH CÁC HÌNH VẼ Hình 2.1 Điểm ảnh Hình 2.2 Ma trận biểu diễn ảnh nhị phân Hình 2.3 Ma trận biểu diễn ảnh xám .6 iv    Hình 2.4 Ma trận biểu diễn mức xám thành phần RED Hình 2.5 Ma trận biểu diễn mức xám thành phần GREEN Hình 2.6 Ma trận biểu diễn mức xám thành phần BLUE Hình 2.7 Sơ đồ hệ thống xử lý ảnh Hình 2.8 Camera có dây Hình 2.9 Camera khơng dây Hình 2.10 Camera IP Sony SNC DH 240 .10 Hình 2.11 Mơ hình khơng gian màu RGB 12 Hình 2.12 Mơ hình màu HLS 12 Hình 2.13 Mơ hình màu L*a*b .13 Hình 2.14 biến đổi Fourier 13 Hình 2.15 Vi điều khiển 16f877A 15 Hình 2.16 Sơ đồ chân Pic16F877A 16 Hình 2.17 Sơ đồ khối Pic 16F877A 17 Hình 2.18 Cổng nối tiếp RS232 Chân 18 Hình 2.19 Sơ đồ kết nối vi điều khiển với máy tính qua cổng rs232 19 Hình 2.20 Khung truyền liệu qua cổng RS232 20 Hình 2.21 Điều biên 22 Hình 2.22 Điều tần 22 Hình 2.23 Điều pha 23 Hình 2.24 dạng mã hóa phổ biến 24 Hình 2.25 Hoạt động sóng vơ tuyến .24 Hình 2.26 Module phát sử dụng IC PT 2262 26 Hình 2.27 Module thu sử dụng IC PT 2272 27 Hình 2.28 Quá trình phát triển OpenCV 29 Hình 2.29 Cấu trúc sở OpenCV 30 Hình 4.1 Sơ đồ khối xử lý ảnh điều khiển 36 Hình 4.2 Camera có dây Nansin 37 Hình 4.3 Camera không dây Vantech 37 Hình 4.4 Sơ đồ nguyên lý vi điều khiển kết nối với module phát sóng RF 38 Hình 4.5 Mạch vi điều khiển kết nối với module phát sóng RF 39 v    Hình 4.6 Mạch nguyên lý module phát sóng RF sử dụng PT 2262 40 Hình 4.7 Sơ đồ khối khâu cơng tác .40 Hình 4.8 Mạch nguyên lý Module thu sóng RF 41 Hình 4.9 Mạch nguyên lý module thu sóng RF kết nối với PIC 16F877A 42 Hình 4.10 Mạch module thu sóng RF kết nối với PIC 16F877A 43 Hình 4.11 Mạch nguyên lí mạch động lực 44 Hình 4.12 Mạch động lực 44 Hình 4.13 Mơ hình xe chạy trước 45 Hình 4.14 Mơ hình xe bám đối tượng 45 Hình 4.15 Sơ đồ thuật toán chung 47 Hình 4.16 Mặt phẳng ảnh 48 Hình 4.17 Biểu diễn đối tượng di chuyển mặt phẳng ảnh 49 Hình 4.18 Histogram .50 Hình 4.19 Kết trước sau lọc nhiễu 50 Hình 4.20 Sơ đồ thuật toán CamShift 51 Hình 4.21 Thu ảnh bám đối tượng 52 Hình 4.22 Ảnh nhận từ Camera .53 Hình 4.23 Histogram .53 Hình 4.24 Kết tính tọa độ tâm băng thuật toán CamShift 54 Hình 4.25 Kết bước đầu theo dõi đối tượng thuạt tốn CamShift 54 Hình 4.26 Giao diện chương trình điều khiển 55 DANH SÁCH CÁC BẢNG Bảng 2.1 thông số kỹ thuật module phát 26 Bảng 2.2 Thông số kỹ thuật module thu 27 Bảng 4.1: Khảo nghiệm khoảng cách truyền sóng RF 56 Bảng 4.2 khảo sát robot bám theo tốc độ 57 Bảng 4.3 khảo sát robot bám theo tốc độ 58 vi    cvSaveImage("backproject.jpg",backproject); cvShowImage("Camera", image ); cvShowImage("Histogram", histimg ); cvShowImage("backproject",backproject); c = cvWaitKey(10); if( (char) c == 27 ) break; switch( (char) c ) { case'b': backproject_mode ^= 1; break; case'c': track_object = 0; cvZero( histimg ); break; case'h': show_hist ^= 1; if( !show_hist ) cvDestroyWindow("Histogram" ); else cvNamedWindow("Histogram", ); break; default: ; } } cvDestroyWindow("backproject"); cvDestroyWindow("Histogram"); 18    cvDestroyWindow("Camera"); cvReleaseImage(&image); cvReleaseImage(&histimg); cvReleaseCapture(&capture ); cvReleaseImage(&backproject); fprintf(demFile," %4d\n",dem); fclose (xFile); fclose (yFile); fclose (demFile); } void CTUBODlg::OnBnClickedButtonRight() { data_send_RS232= "r"; UpdateData(TRUE); Setting(); m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput)); UpdateData(false); } void CTUBODlg::OnBnClickedButtonStop() { data_send_RS232= "s"; UpdateData(TRUE); Setting(); m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput)); UpdateData(false); 19    } void CTUBODlg::OnBnClickedButtonBackward() { data_send_RS232= "b"; UpdateData(TRUE); Setting(); m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput)); UpdateData(false); } void CTUBODlg::OnBnClickedButtonLeft() { data_send_RS232= "l"; UpdateData(TRUE); Setting(); m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput)); UpdateData(false); } void CTUBODlg::OnBnClickedButtonForward() { data_send_RS232= "f"; UpdateData(TRUE); Setting(); m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput)); UpdateData(false); 20    } void CTUBODlg::OnBnClickedButton1() { data_send_RS232= "s"; UpdateData(TRUE); Setting(); m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput)); UpdateData(false); } void CTUBODlg::OnBnClickedButtonLeft2() { data_send_RS232= "3"; UpdateData(TRUE); Setting(); m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput)); UpdateData(false); } void CTUBODlg::OnClickedButtonStop2() { data_send_RS232= "s"; UpdateData(TRUE); Setting(); m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput)); UpdateData(false); } 21    void CTUBODlg::OnClickedButtonRight2() { data_send_RS232= "2"; UpdateData(TRUE); Setting(); m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput)); UpdateData(false); } void CTUBODlg::OnClickedButtonForward2() { data_send_RS232= "1"; UpdateData(TRUE); Setting(); m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput)); UpdateData(false); } void CTUBODlg::OnClickedButtonBackward2() { data_send_RS232= "f"; UpdateData(TRUE); Setting(); m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput)); UpdateData(false); } void CTUBODlg::OnBnClickedButtonExit() { 22    // Neu cong mo thi dong lai if(m_mscomm1.get_PortOpen()) m_mscomm1.put_PortOpen(false); OnOK(); } void CTUBODlg::OnBnClickedButtonSend() { // TODO: Add your control notification handler code here UpdateData(TRUE); Setting(); m_mscomm1.put_Output(COleVariant(m_strTransfer));//strOutput)); UpdateData(false); } void CTUBODlg::OnBnClickedButtonClear() { // TODO: Add your control notification handler code here UpdateData(); m_strReceive=""; UpdateData(false); } Code vi điều khiển 2.1 Code mạch phát #include #include 23    #include #use delay(clock=4000000) #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) char value; #INT_RDA Receive_isr() //ngat truyen thong RS232 //ham ngat { value=getc(); //lay du lieu tu bo dem nhan delay_ms(10); putc(value); // gui du lieu //*************************************** if (value=='f') // tới chậm { porta=0b00000010; } if (value=='b') // lui { porta=0b00000100; } if (value=='r') // rẽ phải nhanh { porta=0b00001000; } if (value=='l') // rẽ trái nhanh { porta=0b00000001; } 24    if (value=='1') // thẳng nhanh { porta=0b00001001; } if (value=='2') // rẽ phải { porta=0b00001010; } if (value=='3') // rẽ trái { porta=0b00000101; } if (value=='s') // stop { porta=0b00000110; } } void main() { enable_interrupts(int_rda); enable_interrupts(GLOBAL); trisa=0x00; porta=0x00; while(1) { delay_ms(1000); 25    porta=0b00000000; } } 2.2 Code mach thu xe #include #include #fuses NOWDT,PUT,HS,NOPROTECT #use delay(clock=4000000) void dieuxung(int8 pwm1,pwm2) { pwm1=pwm1*2.5; pwm2=pwm2*2.5; setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); set_pwm1_duty(pwm1); set_pwm2_duty(pwm2); setup_timer_2(T2_DIV_BY_4,249,1); } void test_command() { if((RB0==1)& (RB1==1) & (RB2==0) & (RB3==0)) // Chạy tới chậm { porta=0b00000101; dieuxung(18,18); } 26    //================================== if((RB0==0)& (RB1==1) & (RB2==0) & (RB3==0)) // chạy lui { porta=0b00001010; dieuxung(15,15); } //=================================== if((RB0==1)& (RB1==0) & (RB2==1) & (RB3==0)) // Rẽ trái nhanh { porta=0b00000101; dieuxung(19,12); } //================================== if((RB0==1)& (RB1==1) & (RB2==1) & (RB3==0)) // Rẽ phải nhanh { porta=0b00000101; dieuxung(12,19); } //===================================== if((RB0==0)& (RB1==0) & (RB2==0) & (RB3==1)) // Rẽ phải { porta=0b00000101; dieuxung(30,40); 27    } //====================================== if((RB0==0)& (RB1==1) & (RB2==1) & (RB3==0)) // Rẽ trái { porta=0b00000101; dieuxung(40,30); } //========================================= if((RB0==0)& (RB1==0) & (RB2==1) & (RB3==0)) // Chạy thẳng nhanh { porta=0b00000101; dieuxung(25,25); } if((RB0==1)& (RB1==0) & (RB2==0) & (RB3==0)) // stop { porta=0b00000000; dieuxung(0,0); } //========================================= } 28    void main() { trisb=0xff; trisa=0x00; porta=0x00; portb=0b11110000; enable_interrupts(global); enable_interrupts(int_RB); ext_int_edge(L_to_H); while(1) { test_command(); } } 2.3 Code mạch thu xe #include #include #fuses NOWDT,PUT,HS,NOPROTECT #use delay(clock=4000000) void dieuxung(int8 pwm1,pwm2) { pwm1=pwm1*2.5; pwm2=pwm2*2.5; setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); set_pwm1_duty(pwm1); set_pwm2_duty(pwm2); setup_timer_2(T2_DIV_BY_4,249,1); } 29    void test_command() { if((RB0==1)& (RB1==0) & (RB2==0) & (RB3==0)) // chạy tới chậm { porta=0b00000101; dieuxung(35,35); } //================================== if((RB0==0)& (RB1==1) & (RB2==0) & (RB3==0)) // chạy lui { porta=0b00001010; dieuxung(35,35); } //=================================== if((RB0==0)& (RB1==0) & (RB2==1) & (RB3==0)) // Rẽ trái nhanh { porta=0b00000101; dieuxung(18,40); } //================================== if((RB0==0)& (RB1==0) & (RB2==0) & (RB3==1)) // Rẽ phải nhanh { porta=0b00000101; dieuxung(40,18); } 30    //===================================== if((RB0==1)& (RB1==0) & (RB2==1) & (RB3==0)) // Rẽ phải { porta=0b00000101; dieuxung(50,70); } //====================================== if((RB0==0)& (RB1==1) & (RB2==0) & (RB3==1)) // Rẽ trái { porta=0b00000101; dieuxung(70,50); } //========================================= if((RB0==0)& (RB1==0) & (RB2==1) & (RB3==1)) // Chạy thẳng nhanh { porta=0b00000101; dieuxung(70,70); } if((RB0==1)& (RB1==1) & (RB2==0) & (RB3==0)) // stop 31    { porta=0b00000000; dieuxung(0,0); } //========================================= } void main() { trisb=0xff; trisa=0x00; porta=0x00; portb=0b11110000; enable_interrupts(global); enable_interrupts(int_RB); ext_int_edge(L_to_H); while(1) { test_command(); } } 32    ... Khảo nghiệm mơ hình máy kéo di chuyển tự động .56 Chương .59 KẾT LUẬN VÀ ĐỀ NGHỊ 59 5.1 Kết đạt .59 5.1.1 Kết đạt 59 5.1.2 Hạn chế cân khắc phục... mô hình tưới tiêu tự động nhà lưới, robot hái cà chua… Vì tốn xử lý ảnh áp dụng giải nhiều việc tự động hóa khâu nơng nghiệp nước nhà, máy kéo di chuyển tự động bám theo đối tượng dùng công nghệ... cứu “ Thiết kế chế tạo mơ hình máy kéo chạy tự động thực trường Đại Học Nơng Lâm Thành Phố Hồ Chí Minh, thời gian từ tháng đến tháng năm 2013 Đề tài thực thành công đạt kết khả quan xây mơ hình
- Xem thêm -

Xem thêm: THIẾT KẾ VÀ CHẾ TẠOMÔ HÌNH HỆ THỐNG MÁY KÉO DI CHUYỂN TỰ ĐỘNG , THIẾT KẾ VÀ CHẾ TẠOMÔ HÌNH HỆ THỐNG MÁY KÉO DI CHUYỂN TỰ ĐỘNG

Gợi ý tài liệu liên quan cho bạn

Nhận lời giải ngay chưa đến 10 phút Đăng bài tập ngay