Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 114 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
114
Dung lượng
7,41 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG THIẾT KẾ VÀ THI CÔNG DÂY CHUYỀN PHÂN LOẠI ĐAI ỐC ỨNG DỤNG XỬ LÝ ẢNH GVHD: VÕ ĐỨC DŨNG SVTH: NGUYỄN VĂN TÀI 15141273 NGUYỄN MINH ĐỨC 15141135 SKL 0 Tp Hồ Chí Minh, tháng 6/2019 an BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG DÂY CHUYỀN PHÂN LOẠI ĐAI ỐC ỨNG DỤNG XỬ LÝ ẢNH GVHD: THS VÕ ĐỨC DŨNG SVTH: NGUYỄN VĂN TÀI 15141273 NGUYỄN MINH ĐỨC 15141135 Tp Hồ Chí Minh - 6/2019 an an TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC o0o Tp HCM, ngày 20 tháng năm 2019 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Chuyên ngành: Hệ đào tạo: Khóa: Nguyễn Văn Tài Nguyễn Minh Đức Kỹ thuật điện tử - truyền thơng Đại học quy 2015 MSSV: 15141273 MSSV: 15141135 Mã ngành: 141 Mã hệ: Lớp: 15141DT2C I TÊN ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG DÂY CHUYỀN PHÂN LOẠI ĐAI ỐC ỨNG DỤNG XỬ LÝ ẢNH II NHIỆM VỤ Các số liệu ban đầu: Mơ hình dây chuyền phân loại đai ốc ứng dụng xử lý ảnh sử dụng động DC 12V, khung xây dựng nhơm định hình, camera sử dụng loại webcam C270, vi điều khiển sử dụng STM32F103C8T6, phần xử lý ảnh dùng máy vi tính Giao tiếp máy tính vi điều khiển qua IC PL2303 dựa giao tiếp UART Chương trình xử lý ảnh máy tính viết ngơn ngữ C++ dựa thư viện mã nguồn mở OpenCV tạo giao diện phần mềm QT Creator Nội dung thực hiện: - Tìm hiểu cách thức hoạt động hệ thống phân loại dùng xử lý ảnh - Tìm hiểu chuẩn giao tiếp UART, động DC, cảm biến hồng ngoại, encoder - Tìm hiểu vi điều khiển STM32F103C8T6 - Thiết kế thi cơng mơ hình dây chuyền phân loại - Thiết kế thi công mạch điện cho hệ thống - Viết chương trình xử lý ảnh máy tính dùng phần mềm QT Creator - Viết chương trình điều khiển cho vi điều khiển STM32F103C8T6 - Chạy thử nghiệm mơ hình, chỉnh sửa hoàn thiện hệ thống - Thực viết luận văn báo cáo - Tiến hành báo cáo đề tài tốt nghiệp III NGÀY GIAO NHIỆM VỤ: 18/2/2019 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 20/6/2019 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Võ Đức Dũng CÁN BỘ HƯỚNG DẪN SINH BM ĐIỆN TỬ CÔNG NGHIỆP – Y i an TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC o0o Tp HCM, ngày 18 tháng 02 năm 2019 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Nguyễn Minh Đức 15141135 Lớp: 15141DT2C MSSV: Họ tên sinh viên 2: Nguyễn Văn Tài 15141273 Lớp: 15141DT2C MSSV: Tên đề tài: THIẾT KẾ VÀ THI CÔNG DÂY CHUYỀN PHÂN LOẠI ĐAI ỐC ỨNG DỤNG XỬ LÝ ẢNH Tuần/ngày Nội dung Xác nhận GVHD - Gặp GVHD để nghe phổ biến yêu cầu làm đồ án, tiến hành chọn đề tài, GVHD tiến hành xét (18/02 - 24/02) duyệt đề tài Tuần Tuần (25/02 - 03/03) Tuần (04/03 - 10/03) Tuần (11/03 - 17/03) - Viết đề cương tóm tắt nội dung đồ án - Tìm hiểu tổng quan phương thức hoạt động Module STM32f103c8t6, Camera - Tìm hiểu cơng nghệ xử lý ảnh - Tìm hiểu nghiên cứu điều khiển động khí nén dùng STM32f103c8t6 - Tìm hiểu kết nối Camera để thu thập hình ảnh Tuần - Tìm hiểu nghiêm cứu giao tiếp Uart (18/03 - 24/03) máy tính STM32f103c8t6 Tuần - - Tìm hiểu cách lập trình ngôn ngữ viết cho (25/03 - 07/04) xử lý ảnh ii an Tuần - Mô mạch, kiểm tra cân chỉnh mạch (08/04 - 14/04) - Vẽ PCB Tuần - 10 - Tiến hành thi công mạch (15/04 - 28/04) - Kiểm tra mạch thi công Tuần 11 (29/04 - 05/05) Tuần 12 – 13 (06/05 - 19/05) Tuần 14 - Kiểm tra cải tiến hệ thống - Viết báo cáo nội dung làm (20/05- 26/05) - Hoàn thiện báo cáo gởi cho GVHD để xem xét góp ý lần cuối trước in báo cáo Tuần 15 - Nộp báo cáo báo cáo đề tài (27/05 - 02/06) - Thiết kế Slide báo cáo GV HƯỚNG DẪN (Ký ghi rõ họ tên) iii an LỜI CAM ĐOAN Đề tài nhóm tự thực hiện, dựa vào số đề tài trước tài liệu tham khảo không chép từ tài liệu hay cơng trình có trước TP Hồ Chí Minh, ngày 20/6/2019 Người thực đề tài Nguyễn Văn Tài Nguyễn Minh Đức iv an LỜI CẢM ƠN Lời đầu tiên, nhóm thực đề tài xin gửi lời cảm ơn chân thành đến thầy Võ Đức Dũng - giảng viên khoa Điện-Điện tử, theo sát hỗ trợ hướng dẫn nhóm cách chi tiết trình thực đề tài Thầy ln hỗ trợ hết mình, giải đáp thắc mắc, sai sót gợi ý phương án thực cho khả thi dễ tiếp cận Trong trình thực Đồ án tốt ngiệp chúng em nhận giúp đỡ ủng hộ thầy, cô khoa Điện-Điện tử Sự hỗ trợ thầy, góp phần khơng nhỏ giúp chúng em hồn thành đề tài Nhóm đề tài xin cảm ơn bạn sinh viên khoa Điện-Điện tử nhiệt tình giúp đỡ, hỗ trợ nhóm, chia sẻ kinh nghiệm Những đóng góp bạn ln nhóm tiếp nhận xem xét kĩ lưỡng Cuối cùng, nhóm xin cảm ơn chân thành sâu sắc đến người thân đặc biệt quý phụ huynh - người bên cạnh hỗ trợ tài tinh thần suốt trình học tập thực đề tài Dù cố gắng nỗ lực nhiên với hạn chế kiến thức kinh nghiệm, đề tài khơng thể tránh cịn nhiều thiếu sót Nhóm mong nhận đóng góp, nhận xét để thầy, cô bạn bè để hồn thiện đề tài in chân thành cảm ơn Người thực đề tài Nguyễn Văn Tài Nguyễn Minh Đức v an MỤC LỤC LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP ii LỜI CAM ĐOAN iv LỜI CẢM ƠN v LIỆT KÊ HÌNH viii LIỆT KÊ BẢNG x TÓM TẮT xi Chương TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU VÀ GIỚI HẠN 1.3 NỘI DUNG NGHIÊN CỨU 1.4 GIỚI HẠN 1.5 BỐ CỤC Chương CƠ SỞ LÝ THUYẾT 2.1 TỔNG QUAN VỀ XỬ LÝ ẢNH 2.1.1 Giới thiệu ảnh số 2.1.2 Phương pháp thu nhận ảnh 2.1.3 Giới thiệu thư viện OpenCV camera Logitech C270 2.1.4 Điều chỉnh độ sáng độ tương phản 2.1.5 Lọc nhiễu ảnh 2.2 TÌM ĐƯỜNG BIÊN CỦA ẢNH 13 2.3 GIAO TIẾP UART 16 2.4 VI ĐIỀU KHIỂN STM32F103C8T6 17 2.4.1 Tổng quan 17 2.4.2 Cấu trúc hệ thống 19 2.4.3 Tìm hiểu GPIO 22 2.4.4 Timer PWM 25 2.5 ĐỘNG CƠ DC 26 2.6 ENCODER 28 2.7 CẢM BIẾN HỒNG NGOẠI 30 Chương TÍNH TỐN VÀ THIẾT KẾ HỆ THỐNG 32 3.1 THIẾT KẾ SƠ ĐỒ KHỐI 32 3.2 TÍNH TỐN THIẾT KẾ MẠCH 34 3.2.1 Khối vi điều khiển giao tiếp máy tính 34 vi an 3.2.2 Khối cảm biến encoder 37 3.2.3 Khối công suất điều khiển tải 38 3.2.4 Khối nguồn 42 3.2.5 Mạch PCB 44 3.2.6 Sơ đồ nguyên lý toàn mạch 47 3.3 TÍNH TỐN THIẾT KẾ MƠ HÌNH 48 3.3.1 Cơ cấu cấp phôi 48 3.3.2 Băng tải 50 3.3.3 Cơ cấu phân loại 50 3.3.4 Hộp điện 53 Chương THI CÔNG HỆ THỐNG 54 4.1 GIỚI THIỆU 54 4.2 THI CÔNG MẠCH ĐIỆN 54 4.2.1 Linh kiện sử dụng mạch điện 54 4.2.2 Lắp ráp kiểm tra mạch điện 55 4.3 THI CÔNG MÔ HÌNH 56 4.3.1 Vật liệu, linh kiện sử dụng 56 4.3.2 Các bước thi công 57 4.4 LẬP TRÌNH HỆ THỐNG 61 4.4.1 Lưu đồ giải thuật cho vi điều khiển 61 4.4.2 Lưu đồ giải thuật cho chương trình xử lý ảnh 68 4.4.3 Phần mềm QT Creator 71 4.4.4 Trình biên dịch Keil µVision 76 Chương KẾT QUẢ - NHẬN ÉT – ĐÁNH GIÁ 82 Chương KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 88 6.1 KẾT LUẬN 88 6.2 HƯỚNG PHÁT TRIỂN 88 TÀI LIỆU THAM KHẢO 89 PHỤ LỤC 90 vii an gạt Các đai ốc đạt yêu cầu qua Servo tới gạt lắp sau Servo, Hình Các hình chụp lưu lại thư mục đai ốc bị gạt khỏi đĩa quay Như hai loại ốc phân loại riêng biệt Sau camera chụp hình lưu lại thư mục đặt tên theo thời gian chụp với định dạng tên “Anh_giờ_phút_giây.jpg” Điều giúp kiểm tra quản lý việc xử lý ảnh cần thiết Sau trình làm việc nghiên cứu nhóm đạt số kết sau: Có thể lập trình cho vi điều khiển STM32F103C8T6 Với xu hướng xử dụng dòng vi điều khiển lõi ARM với chi phí rẻ hiệu suất cao STM32F103C8T6 số nhóm có kiến thức dòng vi điều khiển mở rộng loại vi điều khiển tương tự Có thể tính tốn, thiết kế vẽ mạch điện Tính tốn, thiết kế vẽ mạch yêu cầu thiếu người học điện tử, sau thực đề tài, nhóm biết vận dụng kiến thức học để tính tốn thiết kế mạch cơng suất theo yêu cầu Có thể vẽ mạch điện PCB phù hợp với tiêu chuẩn đảm bảo thẩm mĩ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 86 Biết cách lập trình phần mềm ứng dụng có giao diện QT Creator Qua trình làm việc nhóm có kiến thức đủ để tạo ứng dụng chạy máy tính có giao diện thân thiện với người dùng giúp người sử dụng dễ dàng Có thể giao tiếp máy tính vi điều khiển Giao tiếp vi điều khiển máy tính yêu cầu thường gặp thực tế sau thực đề tài, nhóm nắm rõ kiến thức cần thiết để giao tiếp thiết bị Hiểu sử dụng thư viện OpenCV cho việc xử lý ảnh Thư viện OpenCV thư viện tảng phổ biến cho việc lập trình xử lý ảnh, giúp việc xử lý nhanh chóng dễ dàng Nhóm tìm hiểu cách sử dụng kiến thức sử dụng thư viện OpenCV giúp việc hiểu rõ nguyên lý ứng dụng mở rộng thư viện khác tảng xử lý ảnh khác Hệ thống sau hồn thành hoạt động cịn thiếu sót chưa thực ổn định, có tình trạng phân loại bị sai, nguyên nhân camera sử dụng chưa đáp ứng tốt yêu cầu hệ thống nên việc xử lý phân loại chưa tốt Ngoài mặt thẩm mĩ nhiều chi tiết chưa tốt BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 87 Chương KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 6.1 KẾT LUẬN Sau thời gian nghiên cứu làm việc chăm nhóm đạt mục tiêu đề ra: Viết chương trình xử lý ảnh máy tính có giao diện Nhận dạng đai ốc có kích thước khác Giao tiếp từ máy tính tới vi điều khiển ổn định xác Các phận khí hoạt động tương đối tốt 6.2 HƯỚNG PHÁT TRIỂN Đề tài cịn nhiều thiếu sót nhóm đề xuất số hướng để phát triển thêm: - Thay webcam loại camera có tốc độ chụp nhanh giúp xử lý hình ảnh tốc độ cao - Nghiên cứu thêm thuật toán hiệu việc phát lỗi - Thiết kế mạch phù hợp với môi trường công nghiệp, tiêu chuẩn cơng nghiệp - Hồn thiện phần mềm máy tính để đóng gói sử dụng cách hoàn chỉnh - Cải tiến cấu khí để hoạt động hiệu phù hợp với yêu cầu thực tế BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 88 TÀI LIỆU THAM KHẢO [1] Nguyễn Đình Phú, “Giáo trình vi xử lý”, Trường ĐHSPKT, Tp.HCM, 2013 [2] Nguyễn Đình Phú, “Giáo trình: Thực hành vi điều khiển - ARM STM32”, Trường ĐHSPKT, Tp.HCM, 2014 [3] Phan Văn Phương, Trần Trí Tâm, “Ứng dụng xử lý ảnh cảnh báo tài xế ngủ gật”, Đồ án tốt nghiệp, Trường ĐHSPKT Tp HCM, 2014 [4] Phan Trọng Thuật, Nguyễn Văn Đúng, “Phân loại sản phẩm dùng camera”, Đồ án tốt nghiệp, Trường ĐHSPKT Tp HCM, 2014 [5] Lê Quốc Nhật, Châu Thái Bảo, “Nhận dạng thứ tự màu cho cáp kết nối công nghiệp dùng xử lý ảnh”, Đồ án tốt nghiệp, Trường ĐHSPKT Tp HCM, 2016 [6] Trần Thanh Sang, Trần Mạnh Hùng, “Thiết kế hệ thống nhận dạng biển số xe”, Đồ án tốt nghiệp, Trường ĐHSPKT Tp HCM, 2014 [7] Lê Dỗn Thắng, “Thiết kế thi cơng điều khiển máy chạy điện”, Đồ án tốt nghiệp, Trường ĐHSPKT Tp HCM, 2015 [8] T.Lê, ” Dùng webcam phân loại sản phẩm”, nld.com.vn, 8/2008 [9] Nguyễn Đình Phú, Nguyễn Trường Duy, “Giáo Trình: Kỹ Thuật Số”, Nhà xuất ĐH Quốc Gia Tp.HCM, 2013 [10] Trần Thu Hà, Trương Thị Bích Ngà, Nguyễn Thị Lưỡng, Bùi Thị Tuyết Đan, Phù Thị Ngọc Hiếu, Dương Thị Cẩm Tú, “Giáo Trình: Điện tử bản”, Nhà xuất ĐH Quốc Gia Tp.HCM, 2013 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 89 PHỤ LỤC CHƯƠNG TRÌNH VI ĐIỀU KHIỂN Hàm main.c #include "stm32f10x.h" GPIO_InitTypeDef TIM_TimeBaseInitTypeDef NVIC_InitTypeDef USART_InitTypeDef TIM_OCInitTypeDef TIM_BDTRInitTypeDef uint32_t uint32_t uint32_t float uint16_t uint8_t uint8_t uint8_t GPIO_InitStructure; TIM_TimeBaseInitStructure; NVIC_InitStructure; UART_InitStructure; TIM_OCInitStructure; TIM_BDTRInitStructure; encoder_pulse1=0; // khai bao bien doc encoder count_temp1=0, count_test=0; count_recent1 =0, count_update1=0; motor_speed1=0; data; fail; a[5]; number; void GPIO_Configuration(void); void Delay_ms(uint16_t time); void TIM4_TIME(void); // timer4 dem thoi gian toc void TIM1_PWM(void);// pwm dung timer1 dieu khien dong co void TIM2_ENCODER_Configuration(void);//doc gia tri encoder timer2,3 void UART_Configuration (void); //cau hinh cho UART void TIM3_SERVO(void); dung int main(void) { GPIO_Configuration(); UART_Configuration(); TIM4_TIME(); TIM1_PWM(); TIM2_ENCODER_Configuration(); TIM3_SERVO(); TIM_SetCompare2(TIM3,520); while (1) { if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==0)//tin hieu cam bien { if(USART_GetITStatus(USART2, USART_IT_TXE)== RESET) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 90 Delay_ms(25); USART_SendData(USART2,0x64); } if(fail==1) { Delay_ms(1600); TIM_SetCompare2(TIM3,1400); Delay_ms(300); TIM_SetCompare2(TIM3,520); if(USART_GetITStatus(USART2,USART_IT_TXE)== RESET) USART_SendData(USART2,0x65); fail=0; } } } } void GPIO_Configuration(void) { /*Cap clock cho port*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); } void Delay_ms(uint16_t time) { uint32_t time_n=time*12000; while(time_n!=0){time_n ;} } /*Cấu hình giao tiếp UART*/ void UART_Configuration (void) { /*Cấp clock cho USART port A*/ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 91 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); /* Cấu hình chân TX RX*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; // chân TX UART2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //chân RX UART2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); /*Cau hinh USART*/ UART_InitStructure.USART_BaudRate = 9600; UART_InitStructure.USART_WordLength = USART_WordLength_8b; UART_InitStructure.USART_StopBits = USART_StopBits_1; UART_InitStructure.USART_Parity = USART_Parity_No; UART_InitStructure.USART_HardwareFlowControl= USART_HardwareFlowControl_None; UART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2, &UART_InitStructure); /* Cấu hình ngắt UART */ NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ClearFlag(USART2, USART_IT_RXNE); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); /* Cho phep UART hoat dong */ USART_Cmd(USART2, ENABLE); } /*Cấu hình TIMER4 đếm thời gian*/ void TIM4_TIME(void) { RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM4 , ENABLE); /*cấu hình TIM4*/ TIM_TimeBaseInitStructure.TIM_Period = 99; // delay 10ms TIM_TimeBaseInitStructure.TIM_Prescaler = (7200 - 1);//1khz TIM_TimeBaseInitStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStructure); /* Cấu hình ngắt UART */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_ClearFlag(TIM4, TIM_FLAG_Update); TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 92 TIM_Cmd(TIM4, ENABLE); } /*Cấu hình PWM với TIMER1 điều khiển động cơ*/ void TIM1_PWM(void) { /*Cấp clock cho TIMER1 port A*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8| GPIO_Pin_9;// motor GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /*cấu hình TIM1*/ TIM_TimeBaseInitStructure.TIM_Prescaler =7; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period = 899; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStructure); /*Cấu hình PWM1*/ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; /*PWM Channel 1*/ TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1); TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable); /*PWM Channel 2*/ TIM_OC2Init(TIM1, &TIM_OCInitStructure); TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1); TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable); /*cho phép PWM_TIM1 hoạt động*/ TIM_Cmd(TIM1, ENABLE); TIM_CtrlPWMOutputs(TIM1, ENABLE); } /*Cấu hình TIMER2 đếm xung encoder*/ void TIM2_ENCODER_Configuration(void) { TIM_ICInitTypeDef TIM_ICInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* cấu hình TIM2*/ BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP- Y SINH an 93 TIM_TimeBaseInitStructure.TIM_Prescaler=0; TIM_TimeBaseInitStructure.TIM_Period=0xFFFF; TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); TIM_ICInitStructure.TIM_Channel=TIM_Channel_1 | TIM_Channel_2; TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Falling; TIM_ICInitStructure.TIM_ICFilter=15; TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI; TIM_ICInit(TIM2, &TIM_ICInitStructure); TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_Falling, TIM_ICPolarity_Falling); TIM_SetCounter(TIM2, 0); TIM_Cmd(TIM2, ENABLE); TIM_ClearFlag(TIM2, TIM_FLAG_Update); TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /*Cấu hình TIMER3 điều khiển Servo*/ void TIM3_SERVO(void) { /*Cấp xung clock cho TIMER3 port A*/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; // servo GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /*Tao xung tan so 50hz dieu khien servo*/ TIM_TimeBaseInitStructure.TIM_Prescaler =99; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period = 14399; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure); /*Cấu hình PWM*/ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); /*PWM Channel 2*/ TIM_OC2Init(TIM3, &TIM_OCInitStructure); TIM_SelectOCxM(TIM3, TIM_Channel_2, TIM_OCMode_PWM1); TIM_CCxCmd(TIM3, TIM_Channel_2, TIM_CCx_Enable); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 94 TIM_Cmd(TIM3, ENABLE); TIM_CtrlPWMOutputs(TIM3, ENABLE); } Chương trình ngắt /* Hàm ngắt UART*/ void USART2_IRQHandler(void) { uint16_t data; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) { data = USART_ReceiveData(USART2); if(data==0x61) // Start he thong chay- ki tu 'a' { GPIO_SetBits(GPIOA,GPIO_Pin_12); GPIO_SetBits(GPIOA,GPIO_Pin_11); TIM_SetCompare1(TIM1,170); TIM_SetCompare2(TIM1,150); } else if(data==0x62) // Stop he thong- ki tu 'b' { GPIO_ResetBits(GPIOA,GPIO_Pin_12); GPIO_ResetBits(GPIOA,GPIO_Pin_11); TIM_SetCompare1(TIM1,0); TIM_SetCompare2(TIM1,0); } else if(data==0x63)// co vat loi- ki tu 'c' { fail=1; } } } /* Hàm ngắt TIMER4*/ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 95 void TIM4_IRQHandler(void) { if (TIM_GetFlagStatus(TIM4, TIM_FLAG_Update)==SET) { TIM_ClearFlag(TIM4, TIM_FLAG_Update); encoder_pulse1 = 500000000 + TIM_GetCounter(TIM2) + 65536*count_temp1; count_recent1 = encoder_pulse1; if (count_recent1 > count_update1) {motor_speed1 = (float)(count_recent1 – count_update1)*6000/100;} else if (count_recent1 < count_update1) {motor_speed1 = 0- (float)(count_update1 – count_recent1)*6000/100;} else {motor_speed1 = 0;} count_update1 = count_recent1; } } /* Hàm ngắt TIMER2*/ void TIM2_IRQHandler(void) { uint16_t timer_temp1; if (TIM_GetFlagStatus(TIM2, TIM_FLAG_Update)==SET) { TIM_ClearFlag(TIM2, TIM_FLAG_Update); timer_temp1 = TIM2->CNT; if (timer_temp1 == 65535) count_temp1 ; if (timer_temp1 == 0) count_temp1++; } } CHƯƠNG TRÌNH XỬ LÝ ẢNH BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 96 Hàm nhận liệu void MainWindow::readData() { const QByteArray data = m_serial->readAll(); if (data.size() == 0) { qDebug() dataGet->insertPlainText(QString(data.at(i))); } } const char* t = strstr(data, "d"); if(t != nullptr) { m_ui-> dataSend-> insertPlainText("ok"); flag=true; } const char* r = strstr(data, "e"); if(r != nullptr) fail++; } } Chương trình void MainWindow::on_StartBtn_clicked() { using namespace cv; using namespace std; if(video.isOpened()) { m_ui->StartBtn->setText("Start"); video.release(); writeData("b"); return; } if(!video.open(1)) { QMessageBox::critical(this,"Camera Lỗi"); return; } m_ui->StartBtn->setText("Stop"); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 97 writeData("a"); Mat frame,img; Mat canny_output; while(video.isOpened()) { video >> frame; if(!frame.empty()) { cvtColor(frame,frame,CV_RGB2GRAY); QImage qimg(frame.data,frame.cols,frame.rows, QImage::Format_Indexed8); pixmap.setPixmap( QPixmap::fromImage(qimg)); m_ui->IMG_1->fitInView(&pixmap, Qt::KeepAspectRatio); Mat threshold_output; vector contours; vector hierarchy; if(flag==1) { QTime ct = QTime::currentTime(); QString fileName=("G:/DATotNgiep/capture/Anh_"+ ct.toString("hh-mm-ss")+".jpg"); GaussianBlur(frame,img,Size(3, 3), 2); //loc anh threshold(img,threshold_output, m_SettingSystem.Thresh,255,THRESH_BINARY); findContours( threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0,0)); // Draw contours vector contours_poly(contours.size()); vectorcenter(contours.size()); vectorradius(contours.size()); for(unsigned int i=0;i 1000) && (contourArea(contours[i]) < 8000)) { drawContours(drawing, contours_poly, int(i), Scalar(255,0,255), 3, 8, vector(), 0, Point()); circle(drawing, center[i], int(radius[i]), Scalar(255,255,255), 2, 8, 0); if (max < radius[i]) max = radius[i]; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 98 } } if(max45) { writeData("c"); m_ui->lbl_Capture-> setText("FAIL"); } else if(max>63) { writeData("d"); m_ui->lbl_Capture-> setText("PASS"); } QImage imdisplay(drawing.data, drawing.cols, drawing.rows, QImage::Format_RGB888); m_ui->lEd_NumberFalse->setText(QString("%1").arg(fail)); pixmap2.setPixmap( QPixmap::fromImage(imdisplay)); m_ui->IMG_2->fitInView(&pixmap2, Qt::KeepAspectRatio); flag=false; } void MainWindow::on_Thresh_slider_valueChanged(int value) { m_ui-> lbl_Thresh_Value-> setText(QString("%1").arg(value)); m_SettingSystem.Thresh=value; } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH an 99 S an K L 0 ... 15141DT2C I TÊN ĐỀ TÀI: THI? ??T KẾ VÀ THI CÔNG DÂY CHUYỀN PHÂN LOẠI ĐAI ỐC ỨNG DỤNG XỬ LÝ ẢNH II NHIỆM VỤ Các số liệu ban đầu: Mơ hình dây chuyền phân loại đai ốc ứng dụng xử lý ảnh sử dụng động DC 12V,... nhóm định thực đề tài ? ?Thi? ??t kế thi công dây chuyền phân loại đai ốc ứng dụng xử lý ảnh? ??, mơ hình phân loại sản phẩm Hoạt động mơ hình dựa ngun lý xử lý tín hiệu số (hình ảnh) với ngơn ngữ lập... MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: THI? ??T KẾ VÀ THI CÔNG DÂY CHUYỀN PHÂN LOẠI ĐAI ỐC ỨNG DỤNG XỬ LÝ ẢNH GVHD: