1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu thiết kế chế tạo mạch điều khiển cho mô hình máy uốn sắt mini 3d (khóa luận cơ điện và công trình)

61 33 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 61
Dung lượng 2,73 MB

Nội dung

ĐẠI HỌC LÂM NGHIỆP KHOA CƠ ĐIỆN VÀ CÔNG TRÌNH BỘ MÔN KỸ THUẬT ĐIỆN VÀ TỰ ĐỘNG HÓA KHÓA LUẬN TỐT NGHIỆP Tên đề tài: NGHIÊN CỨU THIẾT KẾ CHẾ TẠO MẠCH ĐIỀU KHIỂN CHO MÔ HÌNH MÁY UỐN SẮT MINI 3D Giảng viên hướng dẫn : Đinh Hải Lĩnh Sinh viên thực hiện : Nguyễn Đức Thắng Mã sinh viên : 1651080646 Lớp : K61 - CĐT Khoá : 2016 - 2020 Hà Nội – năm 2020 MỞ ĐẦU Ngày nay, với ứng dụng khoa học kỹ thuật tiên tiến, giới ngày thay đổi, văn minh đại Sự phát triển kỹ thuật điện tử tạo hàng lọat thiết bị với đặc điểm bật xác cao, tốc độ nhanh, gọn nhẹ yếu tố cần thiết góp phần cho họat động người đạt hiệu cao Điện tử trở thành ngành khoa học đa nhiệm vụ Điện tử đáp ứng địi hỏi khơng ngừng từ lĩnh vực công–nông-lâm-ngư nghiệp nhu cầu cần thiết họat động đời sống ngày Một ứng dụng quan trọng công nghệ điện tử kỹ thuật điều khiển tự động Nó góp phần lớn việc điều khiển thiết bị tự động Trong ngành xây dựng trước đây, việc uốn chi tiết sản phẩm thép chủ yếu làm tay, vừa tốn thời gian, vừa tốn nhiều sức lao động người công nhân suất, hiệu mang lại không cao Xuất phát từ nhu cầu thực tế đó, việc nghiên cứu, thiết kế chế tạo máy uốn thép phục vụ cho nhu cầu xã hội cần thiết Mục tiêu nghiên cứu: Thiết kế chế tạo mạch điều khiển cho mơ hình máy uốn sắt mini 3D Đối tượng nghiên cứu: Mạch điều khiển máy uốn sắt mini 3D Phạm vi nghiên cứu: Máy uốn sắt mini 3D Phương pháp nghiên cứu: Phân tích tổng hợp lí thuyết Phương pháp chế tạo thực nghiệm Kết dự kiến đạt Mạch điều khiển mơ hình máy uốn sắt mini 3D Nội dung khóa luận: Sinh viên thực hiện đề tài Nguyễn Đức Thắng i NHẬN XÉT (Của giảng viên hướng dẫn) GIẢNG VIÊN HƯỚNG DẪN (Chữ ký, họ tên) ii NHẬN XÉT (Của giảng viên phản biện) GIẢNG VIÊN PHẢN BIỆN (Chữ ký, họ tên) iii MỤC LỤC MỞ ĐẦU i NHẬN XÉT iii MỤC LỤC iv DANH MỤC CÁC BẢNG VÀ HÌNH VẼ vi Chương 1: GIỚI THIỆU CÁC THIẾT BỊ ĐIỀU KHIỂN THƯỜNG SỬ DỤNG TRONG MƠ HÌNH MÁY UỐN SẮT MINI 3D 1.1 Giới thiệu Adruino 1.1.2 Khả bo mạch Arduino 1.1.3 Các loại bo mạch Arduino 1.2 Giới thiệu Drive Drv8825 1.3 Khái quát IC 7805 1.3.1 Mạch ổn áp 5V dùng 7805 1.4 Giới thiệu Servo Chương 2: THIẾT KẾ CHẾ TẠO MẠCH ĐIỀU KHIỂN MƠ HÌNH MÁY UỐN DÂY SẮT MINI 3D 2.1 Sơ đồ khối mạch điều khiển 2.2 Nguyên lí hoạt động sơ đồ mạch điều khiển 10 2.2.1 Nguyên lý hoạt động 10 2.2.2 Sơ đồ mạch điều khiển 11 2.3 Thiết kế mạch phần mềm Altium 12 2.4 Chế tạo mạch điều khiển mơ hình máy uốn sắt mini 3D 18 2.4.1 Chế tạo mạch in 18 2.4.2 Hàn linh kiện vào mạch in 19 Chương 3: LẬP TRÌNH ĐIỀU KHIỂN 22 3.1 Xây dựng sơ đồ thuật toán: 22 3.2 Lập trình chương trình điều khiển 24 Chương 4: LẮP GHÉP VÀ THỬ NGHIỆM 29 4.1 Các bước vận hành 29 iv 4.2 Kết vận hành 32 KẾT LUẬN PHỤ LỤC (Chương trình điều khiển máy uốn dây sắt mini 3D) DANH MỤC THAM KHẢO 18 v DANH MỤC CÁC BẢNG VÀ HÌNH VẼ Hình 1 Arduino Uno Hình Bo mạch Arduino .3 Hình Driver DRV8825 Hình Sơ đồ IC7805 Hình Sơ đồ mạch ổn áp 5v sử dụng IC 7805 Hình Sơ đồ động Servo Hình Sơ đồ khối mạch điều khiển Hình 2 Sơ đồ mạch điều khiển máy uốn sắt mini .11 Hình Mở file_project .12 Hình Tạo tên cho file .12 Hình Tạo tên cho file mạch nguyên lí 13 Hình Tạo file mạch PCB 13 Hình Khối vi điều khiển Hình Khối Driver 14 Hình Khối động step 14 Hình 10 Kết nối dây các khối với 15 Hình 11 Soát lỗi linh kiện 15 Hình 12 Sắp xếp các linh kiện PCB 15 Hình 13 Cài đặt kích thước lỗ 16 Hình 14 Cài đặt kích thước dây 16 Hình 15 Cài đặt mạch lớp .17 Hình 16 Nối Mạch 17 Hình 17 Mạch mô phỏng Altium .18 Hình 18 Mặt trước mạch in lớp .18 Hình 19 Mặt sau mạch in lớp 19 Hình 20 Thao tác gắn linh kiện vào mạch 19 Hình 21 Thao tác hàn chân linh kiện .20 Hình 22 Hàn linh kiện vào mạch 20 Hình 23 Gắn vi điều khiển driver vào mạch 20 Hình 24 Kết nối dây điện 21 vi Hình Sơ đồ thuật toán 22 Hình Sơ đồ thuật toán chương trình tự động hình 23 Hình 3 Chương trình chạy tự đông hình lập phương .24 Hình 1: Kết nối nguồn điện .29 Hình 2: Giao diện Arduino IDE 30 Hình 3: Chọn vi điều khiển 30 Hình 4: Chọn chip xử lí .31 Hình 5: Chọn Port .31 Hình 6: Nạp code cho vi điều khiển 32 Hình 7: Chọn chế độ thủ công 32 Hình 8: Chế độ nhập số thủ công manual mode .33 Hình 9: Lệnh đùn dây 33 Hình 10: Hình ảnh thực tế nhập lệnh f10 33 Hình 11: Lệnh xoay trục Z .33 Hình 12: Hình ảnh thực tế nhập z90 34 Hình 13: Lệnh bẻ cong 34 Hình 14:Hình ảnh thực tế nhập b-40 34 Hình 15: Sản phẩm hình lập phương chạy tự động 35 vii Chương 1: GIỚI THIỆU CÁC THIẾT BỊ ĐIỀU KHIỂN THƯỜNG SỬ DỤNG TRONG MÔ HÌNH MÁY UỐN SẮT MINI 3D 1.1 Giới thiệu Adruino Arduino sử dụng rộng rãi giới, ngày chứng tỏ sức mạnh chúng thông qua vô số ứng dụng độc đáo người dùng Hình 1 Arduino Uno Arduino bo mạch vi xử lý dùng để lập trình tương tác với thiết bị phần cứng cảm biến, động cơ, đèn thiết bị khác Đặc điểm bật Arduino môi trường phát triển ứng dụng dễ sử dụng, với ngôn ngữ lập trình học cách nhanh chóng với người am hiểu điện tử lập trình Arduino tảng mà thiết bị phần cứng làm sẵn chuẩn hóa, người dùng cần chọn thứ cần, ráp lại chạy Bạn muốn làm xe điều khiển từ xa? Arduino cung cấp cho bạn module điều khiển động có sẵn mạch điều khiển có sẵn, mạch thu phát sóng khơng dây có sẵn Hệ thống đa dạng chủng loại (đo đạc nhiệt độ, độ ẩm, gia tốc, vận tốc, cường độ ánh sáng, màu sác vật thể, lưu lượng nước phát chuyển động, phát kim loại,khí độc,…) Các thiết bị thị (màn hình LCD,đèn LED,…) Các module chức hỗ trợ kết nối có dây với thiết bị khác kết nối không dây thông dụng, định vị GPS, nhắn tin SMS 1.1.1 Phần cứng Arduino Một mạch Arduino bao gồm vi điều khiển AVR với nhiều linh kiện bổ sung giúp dễ dàng lập trình mở rộng với mạch khác Một khía cạnh quan trọng Arduino kết nối tiêu chuẩn nó, cho phép người dùng kết nối với CPU board với module thêm vào dễ dàng chuyển đổi, gọi shield Vafai shield truyền thông với board Arduino trực tiếp thông qua chân khác nhau, nhiều shield định địa thơng qua serial bus nhiều shield xếp chồng sử dụng dạng song song Một vài vi xử lý khác sử dụng mạch Arduino tương thích Hầu hết mạch gồm điều chỉnh tuyến tính 5V thạch anh dao động 16MHz mặc dù vài thiets kế lilypad chạy 8MHz bỏ qua điều khiển chỉnh điện áp onboard hạn chế kích cỡ thiết bị Một vi điều khiển Arduino 1.1.2 Khả bo mạch Arduino Bo mạch Arduino sử dụng dòng vi xử lý bit mega AVR Atmel với hai chip phổ biến Atmega328 Atmega2560 Các dòng vi xử lý cho phép lập trình ứng dụng điều khiển phức tạp trang bị cấu hình mạnh với loại nhớ ROM, RAMva Flash, ngõ vào digital I/O có nhiều ngõ có khả xuốt tín hiệu PWM, ngõ đọc tín hiệu analog chuẩn giao tiếp đa dạng UART, SPI, TWI 1.1.3 Các loại bo mạch Arduino Về mặt chức năng, bo mach Arduino chia thành hai loại: loại bo mạch có chip Atmega loại mở rộng thêm chức cho bo mạch Các bo mạch giống chức nhiên mặt cấu số lương I/O dung lượng nhớ hay kích thước có khác Một số bo có trang bị thêm tính kết nối Ethernet Bluetooth Các bo mở rộng chủ yếu mở rộng thêm số tính cho bo mạch ví dụ tính kết nối Ethernet, Wireless, điều khiển động delay(40); // Move 1400 steps from the limit switch to starting position while (benderStepper.currentPosition() != -1300) { benderStepper.setSpeed(-1200); // if negative rotates anti-clockwise benderStepper.run(); } benderStepper.setCurrentPosition(0); } void loop() { String mode = Serial.readString(); if (mode.startsWith("manual")) { manual(); } if (mode.startsWith("lap")) { lapphuong(); } if (mode.startsWith("star")) { star(); } if (mode.startsWith("gongkinh")) { gongkinh(); } if (mode.startsWith("sat")) { sat(); } } void star() { while (count != 5) { int feed = 38; // mm int feedDistance = feed * 48; // 48- constats that map the mm value to number of steps the stepper show move while (feederStepper.currentPosition() != feedDistance) { // run until it reaches the distance value feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); // reset the current position to servo01.write(40); // Set the bender pin up delay(200); int angleConst = 18; // angle constant // Bend the wire 52 degrees while (benderStepper.currentPosition() != -52 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); // Go back 52 degrees to initial position while (benderStepper.currentPosition() != 52 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); // Feed the same distance again while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); servo01.write(130); // Set the bender pin down delay(200); // Set bender to new initial position, for bending in the other direction while (benderStepper.currentPosition() != -42 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(200); servo01.write(40); // Bender pin up delay(200); while (benderStepper.currentPosition() != 105 * angleConst) { benderStepper.setSpeed(700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(50); while (benderStepper.currentPosition() != -63 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } delay(100); servo01.write(130); benderStepper.setCurrentPosition(0); count++; } } void manual() { int sign; Serial.println(" // MANUAL MODE //"); while (!dataIn.startsWith("end")) { servo01.write(130); delay(200); dataIn = Serial.readString(); if (dataIn.startsWith("f")) { dataInS = dataIn.substring(1, dataIn.length()); // reads the feed value dist = dataInS.toInt(); Serial.print("Feed "); Serial.print(dist); Serial.println("mm wire."); dist = dist * 48; while (feederStepper.currentPosition() != dist) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); } if (dataIn.startsWith("b")) { if (dataIn.charAt(1) == '-') { dataInS = dataIn.substring(2, dataIn.length()); ///reads the angle value angle = dataInS.toInt(); Serial.print("Bend -"); Serial.print(angle); Serial.println(" degrees."); angleConst = 16; // Set "negative" bending initial position while (benderStepper.currentPosition() != -43 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); servo01.write(40); delay(200); // Bend the wire while (benderStepper.currentPosition() != angle * angleConst) { benderStepper.setSpeed(700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != (-1) * angle * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); servo01.write(130); delay(200); // Get back to original "positive" bending initial poistion while (benderStepper.currentPosition() != 43 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); } else { dataInS = dataIn.substring(1, dataIn.length()); angle = dataInS.toInt(); Serial.print("Bend "); Serial.print(angle); Serial.println(" degrees."); angleConst = 16; servo01.write(40); delay(200); while (benderStepper.currentPosition() != (-1) *angle * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != angle * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); } dataInS = dataIn.substring(2, dataIn.length()); angle = dataInS.toInt(); angleConst = 16; while (benderStepper.currentPosition() != sign * angle * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != sign * angle * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); } // Z-Axis Control if (dataIn.startsWith("z")) { if (dataIn.charAt(1) == '-') { dataInS = dataIn.substring(2, dataIn.length()); angle = dataInS.toInt(); Serial.print("Move Z-Axis -"); Serial.print(angle); Serial.println(" degrees."); angleConst = 16; while (zAxisStepper.currentPosition() != angle * angleConst) { zAxisStepper.setSpeed(500); zAxisStepper.run(); } zAxisStepper.setCurrentPosition(0); delay(100); } else { dataInS = dataIn.substring(1, dataIn.length()); angle = dataInS.toInt(); Serial.print("Move Z-Axis "); Serial.print(angle); Serial.println(" degrees."); angleConst = 16; while (zAxisStepper.currentPosition() != (-1) *angle * angleConst) { zAxisStepper.setSpeed(-500); zAxisStepper.run(); } zAxisStepper.setCurrentPosition(0); delay(100); } } manualStatus = dataIn; } } void day(int a) { servo01.write(130); Serial.print("Feed "); Serial.print(a); Serial.println("mm wire."); a = a * 48; while (feederStepper.currentPosition() != a) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100);} void b ( String dataIn) {servo01.write(130); if (dataIn.charAt(0) == '-') { dataInS = dataIn.substring(1, dataIn.length()); ///reads the angle value angle = dataInS.toInt(); Serial.print("Bend -"); Serial.print(angle); Serial.println(" degrees."); angleConst = 16; // Set "negative" bending initial position while (benderStepper.currentPosition() != -43 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); servo01.write(40); delay(200); // Bend the wire while (benderStepper.currentPosition() != angle * angleConst) { benderStepper.setSpeed(700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != (-1) * angle * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); servo01.write(130); delay(200); // Get back to original "positive" bending initial poistion while (benderStepper.currentPosition() != 43 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); } else { dataInS = dataIn.substring(0, dataIn.length()); angle = dataInS.toInt(); Serial.print("Bend "); Serial.print(angle); Serial.println(" degrees."); angleConst = 16; servo01.write(40); delay(200); while (benderStepper.currentPosition() != (-1) *angle * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != angle * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); } dataInS = dataIn.substring(1, dataIn.length()); angle = dataInS.toInt(); Serial.print(angle); angleConst = 16; while (benderStepper.currentPosition() != sign * angle * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != sign * angle * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); } void z (String dataIn) { servo01.write(130); if (dataIn.charAt(0) == '-') { dataInS = dataIn.substring(1, dataIn.length()); angle = dataInS.toInt(); Serial.print("Move Z-Axis -"); Serial.print(angle); Serial.println(" degrees."); angleConst = 16; while (zAxisStepper.currentPosition() != angle * angleConst) { zAxisStepper.setSpeed(500); zAxisStepper.run(); } zAxisStepper.setCurrentPosition(0); delay(100); } else { dataInS = dataIn.substring(0, dataIn.length()); angle = dataInS.toInt(); Serial.print("Move Z-Axis "); Serial.print(angle); Serial.println(" degrees."); angleConst = 16; while (zAxisStepper.currentPosition() != (-1) *angle * angleConst) { zAxisStepper.setSpeed(-500); zAxisStepper.run(); } zAxisStepper.setCurrentPosition(0); delay(100); } } void lapphuong() { Serial.println(" // LAPPHUONG //"); servo01.write(130); delay(200); day(40); servo01.write(130); b ("60"); delay(200); day(40); b("60"); delay(200); day(40); b("60"); delay(200); day(40); z ("90"); delay(200); b("-60"); delay(200); day(40); z ("-90"); delay(200); b ("60"); delay(200); day(40); z ("90"); delay(200); b ("-60"); delay(200); day(40); b ("-60"); delay(200); day(40); b ("-60"); delay(200); day(40); z ("-90"); delay(200); } void gongkinh() { Serial.println(" // gongkinh //"); day(15); b ("40"); delay(200); day (30); b ("60"); delay(200); day (30); b ("60"); delay(200); day (30); b ("52"); delay(200); day (22); delay(200); b ("-69"); delay(200); day(20); b ("-69"); delay(200); day (22); b ("52"); delay(200); day (30); b ("60"); delay(200); day (30); b ("60"); delay(200); day (30); b ("40"); delay(200); day(30 ); } void sat() { Serial.println(" // sat //"); day(20); b ("60"); delay(200); day (20); z ("90"); delay(200); b ("60"); delay(200); day (40); b ("60"); delay(200); day (20); delay(200); z ("90"); delay(200); b ("-60"); delay(200); day(20); b ("-60"); delay(200); day (60); z ("-90"); delay(200); b ("60"); delay(200); day (40); b ("60"); delay(200); day (60); z ("-90"); delay(200); }; DANH MỤC THAM KHẢO Tiếng việt: Kỹ thuật điện tử.(1999) Đỗ Xuân Thụ – NXB giáo dục Giáo trình cảm biến (2000) Phan Quốc Phô, Nguyễn Đức Chiến – NXB Khoa học kĩ thuật Vi điều khiển câu trúc lập trình ứng dụng (2008) Kiều Xuân Thực, Vũ Thị Hương, Vũ Trung Kiên – NXB Giáo Dục Tiếng anh: Beginning Arduino - Mike McRoberts Arduino cookbook – Michael Margolis Địa Website: Website http://alldatasheet.com/ Website http://arduino.vn/ Website http://codientu.org/ Website http://webdien.com/ Website http://www.tailieu.vn/ Website http://wikipedia.com/ 10.Website thư viện AccelStepper Mike McCauley ... thiết kế chế tạo máy uốn thép phục vụ cho nhu cầu xã hội cần thiết Mục tiêu nghiên cứu: Thiết kế chế tạo mạch điều khiển cho mơ hình máy uốn sắt mini 3D Đối tượng nghiên cứu: Mạch điều khiển máy uốn. .. uốn sắt mini 3D Phạm vi nghiên cứu: Máy uốn sắt mini 3D Phương pháp nghiên cứu: Phân tích tổng hợp lí thuyết Phương pháp chế tạo thực nghiệm Kết dự kiến đạt Mạch điều khiển mơ hình máy uốn sắt mini. .. 10 2.2.2 Sơ đồ mạch điều khiển 11 2.3 Thiết kế mạch phần mềm Altium 12 2.4 Chế tạo mạch điều khiển mơ hình máy uốn sắt mini 3D 18 2.4.1 Chế tạo mạch in 18

Ngày đăng: 01/06/2021, 13:41

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w