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

ĐỒ án TRUYỀN ĐỘNG điện đề tài mô HÌNH đếm và PHÂN LOẠI vật gỗ THEO CHIỀU CAO DÙNG TRONG điêu KHẮC sử DỤNG ARDUINO r3

55 5 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

Tiêu đề Mô Hình Đếm Và Phân Loại Vật Gỗ Theo Chiều Cao Dùng Trong Điêu Khắc Sử Dụng Arduino R3
Tác giả Nguyễn Tiến Bằng, Đỗ Thành Thiên Ân, Trần Văn Tư, Nguyễn Thanh Quang, Lương Toàn Thịnh
Người hướng dẫn ThS. Đỗ Hoàng Ngân Mi
Trường học Đại Học Đà Nẵng
Chuyên ngành Kỹ Thuật Điện - Điện Tử
Thể loại Đồ Án
Năm xuất bản 2022
Thành phố Đà Nẵng
Định dạng
Số trang 55
Dung lượng 1,48 MB

Cấu trúc

  • CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI (10)
    • 1.1 Tổng quan về các dây chuyền phân loại sản phẩm (10)
      • 1.1.1 Khái niệm và các kiểu dây chuyền phân loại sản phẩm (10)
        • 1.1.1.1 Khái niệm (10)
        • 1.1.1.2 Các kiểu dây chuyền phân loại sản phẩm (10)
      • 1.1.2 Dây chuyền phân loại sản phẩm theo chiều cao (10)
        • 1.1.2.1 Giới thiệu chung (10)
        • 1.1.2.2 Cấu tạo của dây chyền phân loại sản phẩm theo chiều cao (11)
      • 1.1.3 Dây chuyền sản xuất gỗ trong công nghiệp (12)
        • 1.1.3.1 Quy trình sản xuất (12)
        • 1.1.3.2 Lựa chọn khâu (12)
    • 1.2 Lý do chọn đề tài (12)
    • 1.3 Mục tiêu đề tài (13)
    • 1.4 Nội dung nghiên cứu (13)
    • 1.5 Yêu cầu dặt ra (13)
  • CHƯƠNG 2: TÌM HIỂU VỀ CẤU TRÚC ARDUINO UNO VÀ CÁC THIẾT BỊ TRONG ĐỀ TÀI (15)
    • 2.1 Tổng quan về Adruino Uno R3 (0)
      • 2.1.1 Giới thiệu về Arduino R3 (15)
      • 2.1.2 Cấu tạo của Arduino (15)
      • 2.1.3 Ứng Dụng (17)
    • 2.2 Tổng quan các linh kiện trong đề tài (17)
      • 2.2.1 IC LCM2004 (17)
        • 2.2.1.1 Giới thiệu (18)
        • 2.2.1.2 Thông số kĩ thuật (19)
      • 2.2.2 Cảm biến hồng ngoại (19)
        • 2.2.2.1 Giới thiệu (19)
        • 2.2.2.2 Thông số kĩ thuật (20)
      • 2.2.3 LCD 20x4 (22)
        • 2.2.3.1 Giới thiệu (22)
        • 2.2.3.2 Thông số kĩ thuật (22)
      • 2.2.4 Động cơ Servo MG90S (23)
        • 2.2.4.1 Giới thiệu (23)
        • 2.2.4.2 Thông số kĩ thuật (23)
      • 2.2.5 Nút nhấn (23)
        • 2.2.5.1 Giới thiệu (23)
        • 2.2.5.2 Thông số kĩ thuật (25)
      • 2.2.6 Bộ nạp cấp nguồn cho Arduino (25)
        • 2.2.6.1 Giới thiệu (25)
        • 2.2.6.2 Thông số kĩ thuật (25)
      • 2.2.7 Động cơ motor LK0195 (26)
        • 2.2.7.1 Giới thiệu (26)
        • 2.2.7.2 Thông số kĩ thuật (27)
      • 2.2.8 Mạch nguồn (27)
        • 2.2.8.1 Giới thiệu (27)
        • 2.2.8.2 Thông số kĩ thuật (28)
  • CHƯƠNG 3: THIẾT KẾ VÀ THI CÔNG (29)
    • 3.1 Giới thiệu (29)
    • 3.2 Các phần mềm thiết kế (29)
    • 3.3 Sơ đồ khối (33)
    • 3.4 Lưu đồ thuật toán (34)
    • 3.5 Xây dựng và khởi chạy chương trình mô phỏng Matlab (35)
    • 3.6 Xây dựng và khởi chạy chương trình mô phỏng Protues (35)
  • CHƯƠNG 4: TỔNG KẾT (36)
    • 4.1 Kết quả đạt được (36)
    • 4.2 Kết quả chưa đạt được (36)
    • 4.3 Ưu điểm của sản phẩm (36)
    • 4.4 Nhược điểm của sản phẩm (36)
    • 4.5 Đánh giá mô hình (36)
    • 4.6 Hướng khắc phục và phát triển (36)
    • 4.7 Kết luận (37)

Nội dung

TÌM HIỂU VỀ CẤU TRÚC ARDUINO UNO VÀ CÁC THIẾT BỊ TRONG ĐỀ TÀI

Tổng quan các linh kiện trong đề tài

I2C, viết tắt của "Inter-Integrated Circuit", là một giao thức giao tiếp được phát triển bởi Philips Semiconductors Giao thức này cho phép truyền dữ liệu giữa bộ xử lý trung tâm và nhiều IC trên cùng một board mạch chỉ với hai đường truyền tín hiệu.

Giao thức I2C, nhờ tính đơn giản của nó, được sử dụng rộng rãi cho giao tiếp giữa vi điều khiển và các thiết bị như mảng cảm biến, thiết bị hiển thị, thiết bị IoT, và EEPROMs Đây là một loại giao thức giao tiếp nối tiếp đồng bộ, trong đó các bit dữ liệu được truyền từng bit một theo các khoảng thời gian đều đặn được xác định bởi một tín hiệu đồng hồ tham chiếu.

 Chỉ cần có hai đường bus (dây) chung để điều khiển bất kỳ thiết bị / IC nào trên mạng I2C

Trong giao tiếp không cần thỏa thuận trước về tốc độ truyền dữ liệu như trong UART, điều này cho phép tốc độ truyền dữ liệu được điều chỉnh linh hoạt theo nhu cầu.

 Cơ chế đơn giản để xác thực dữ liệu được truyền

 Sử dụng hệ thống địa chỉ 7 bit để xác định một thiết bị / IC cụ thể trên bus I2C

 Các mạng I2C dễ dàng mở rộng Các thiết bị mới có thể được kết nối đơn giản với hai đườngbus chung I2C

 Điện áp hoạt động: 2.5-6V DC

 Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780)

 Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2)

 Kích thước: 41.5mm(L)x19mm(W)x15.3mm(H)T

 Trọng lượng: 5g tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt

 Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD

Cảm biến hồng ngoại (IR sensor) là thiết bị điện tự động hoạt động dựa trên nguyên tắc điện tử điện dung, có khả năng đo và phát hiện bức xạ hồng ngoại, loại bức xạ mà mắt người không nhìn thấy được Bức xạ hồng ngoại có bước sóng dài hơn so với ánh sáng khả kiến, do đó, bất kỳ vật thể nào có nhiệt độ cao hơn 5 độ C đều phát ra bức xạ hồng ngoại.

Hình 1.4: Cảm biến hồng ngoại

 IC so sánh: LM393.Điện áp: 3.3V - 6VDC.

 Dòng tiêu thụ: Vcc = 3.3V: 23 mA Vcc = 5.0V: 43 mA.

 Khoảng cách phát hiện: 2 ~ 30 cm.

 LED báo nguồn và LED báo tín hiệu ngõ ra.

 Mức logic ngõ ra: Mức thấp - 0V: khi có vật cản.

 Mức cao - 5V: khi không có vật cản.

Hình 1.5: Sơ đồ cảm biến hồng ngoai

Màn hình LCD2004 với nền xanh dương/xanh lá sử dụng driver HD44780, có khả năng hiển thị 4 dòng, mỗi dòng 20 ký tự Sản phẩm này nổi bật với độ bền cao, rất phổ biến và đi kèm nhiều mã code mẫu, giúp người dùng dễ dàng sử dụng, đặc biệt là cho những ai mới học và thực hiện các dự án.

Màn hình LCD 20x4 là thiết bị hiển thị chữ và số theo mã ASCII, với khả năng trình bày thông tin rõ ràng Mỗi ô trên màn hình này được cấu thành từ các chấm tinh thể lỏng, hoạt động theo cơ chế "ẩn" hoặc "hiện" để tạo ra các ký tự Đặc biệt, mỗi ô chỉ có thể hiển thị một ký tự duy nhất, giúp người dùng dễ dàng nhận diện thông tin.

LCD 20x4 là loại màn hình LCD có khả năng hiển thị 4 dòng, mỗi dòng chứa tối đa 20 ký tự Loại màn hình này được sử dụng rộng rãi trong các mạch điện, nhờ vào tính năng hiển thị thông tin rõ ràng và hiệu quả.

 Màu sắc: xanh lá hoặc xanh dương

 Module hỗ trợ giao tiếp với vi điều khiển: LCD I2C 16x2

Động cơ Servo MG90S và SG90 là những loại servo phổ biến, thường được sử dụng trong các mô hình điều khiển nhỏ như cánh tay robot Động cơ SG90 có khả năng quay góc 180 độ, nổi bật với tốc độ phản ứng nhanh và tích hợp sẵn driver điều khiển Việc điều khiển góc quay của động cơ này được thực hiện dễ dàng thông qua phương pháp điều độ rộng xung PWM.

 Điện áp hoạt động: 4.8V ~ 6V DC

 Tốc độ quay: 0.12 giây/60° (4.8V) , 0.1 giây/60° (6V)

 Mômen xoắn: 1.8kg/cm (4.8V) , 2.5kg/cm (6V)

 Góc quay: 180°Bánh răng: nhựaKích thước: 22.5 * 11.8 * 30 mm

 Chiều dài dây điện: 175mmTrọng lượng: 9g

 Dây cam: XungDây đỏ: Vcc (4.8V ~ 6V)

Nút nhấn/công tắc là thiết bị quan trọng trong việc điều khiển và ngắt kết nối các thiết bị điện và máy móc Thông thường, nút ấn được chế tạo từ nhựa hoặc kim loại, với hình dạng và kích thước được thiết kế phù hợp với tay người sử dụng.

Cấu tạo của nút ấn gồm: hệ thống lò xo, hệ thống các tiếp điểm thường hở (NO) – thường đóng (NC) và vỏ bảo vệ.

Nút nhấn nhả hoạt động bằng cách chuyển đổi trạng thái các tiếp điểm khi có lực tác động vào nút ấn Khi lực tác động biến mất, các tiếp điểm sẽ trở về trạng thái ban đầu.

Nút nhấn giữ hoạt động bằng cách chuyển trạng thái các tiếp điểm khi có lực tác động Khi lực tác động không còn, trạng thái tiếp điểm vẫn được duy trì Để trở về trạng thái ban đầu, cần tác động lực vào nút nhấn một lần nữa.

Nguyên lý hoạt động của nút ấn là một quy trình gồm các bước nối tiếp nhau, cụ thể như sau:

+ Khi người dùng nhấn nút, tiếp điểm động sẽ chạm vào tiếp điểm tĩnh và làm thay đổi trạng thái của tiếp điểm.

+ Trong một số trường hợp nhất định, người sử dụng sẽ cần giữ nút hoặc nhấn liên tục vào nút ấn để kích hoạt cho thiết bị hoạt động.

+ Một số loại nút nhấn khác sẽ có chốt giữ nút bật cho đến khi người sử dụng nhấn thêm lần nữa.

Hình 1.8: Hình ảnh nút nhấn

 Điện trở tiếp điểm: Nhỏ hơn 50 mohm.

 Hành trình: 5.8mm.Cách điện: 660VAC/DC.

 Điện áp đèn: 24VAC/DC, 220VAC.

2.2.6 Bộ nạp cấp nguồn cho Arduino

Mạch Giảm Áp LM2596 là một module điều chỉnh điện áp có khả năng cung cấp dòng ra lên đến 3A Khi được cấp nguồn 9V, module này có thể giảm áp để cung cấp nguồn điện 3A với các mức điện áp thấp hơn như 5V hoặc 3.3V.

Hình 1.9: Bộ nạp cấp nguồn cho Arduno

 Modune nguồn không sử dụng cách ly

 Khích thước mạch 53mm x 26mm

 Đầu ra OUPUT+, OUPUT UT-

Động cơ một chiều DC, viết tắt của "Direct Current Motors", hoạt động dựa trên dòng điện có hướng xác định, sử dụng nguồn điện áp DC – điện áp một chiều.

 Động cơ một chiều (DC) là động cơ biến năng lượng từ dòng điện một chiều và thành cơ năng.

 Cấu tạo của động cơ điện 1 chiều thường gồm những bộ phận chính như sau:

Stator là một hoặc nhiều cặp nam châm vĩnh cửu hoặc nam châm điện, trong khi rotor là phần lõi được quấn các cuộn dây để tạo thành nam châm điện Chổi than (brushes) có nhiệm vụ tiếp xúc và cung cấp điện cho cổ góp.

Cổ góp (commutator) có vai trò quan trọng trong việc tiếp xúc và phân chia nguồn điện cho các cuộn dây trên rotor Số lượng điểm tiếp xúc của cổ góp tương ứng với số lượng cuộn dây trên rotor, đảm bảo hoạt động hiệu quả của động cơ.

Hình 1.10:Phần stator của động cơ mô tơ

Hình 1.11: Phần rotor của động cơ motor

THIẾT KẾ VÀ THI CÔNG

Giới thiệu

Mô hình hệ thống trong Đồ án “Mô hình đếm và phân loại vật gỗ theo chiều cao dùng trong điêu khắc sử dụng Arduino Uno R3” được thiết kế để phân loại sản phẩm một cách hiệu quả Việc lập trình Arduino không chỉ làm nổi bật ý tưởng ứng dụng công nghệ trong ngành sản xuất mà còn khẳng định tính khả thi và tiềm năng phát triển của nó.

Khi sản phẩm di chuyển trên băng tải, cảm biến E18-D80NK kết hợp với động cơ Servo sẽ phân loại sản phẩm hiệu quả Màn hình LCD hiển thị số lượng sản phẩm, giúp người dùng nắm bắt rõ hơn về quy trình phân loại trong thực tế.

Các phần mềm thiết kế

Arduino là một môi trường phát triển tích hợp mã nguồn mở, giúp người dùng dễ dàng lập trình và tải mã lên board mạch Nền tảng này được xây dựng dựa trên ngôn ngữ lập trình Java cùng với các phần mềm mã nguồn mở khác.

Kể từ tháng 3 năm 2015, Arduino IDE (Intergrated Devalopment Editor – môi trường phát triển thích hợp) đã được phổ biến tại rất nhiều nơi với giao diện trực quan.

Ngôn ngữ phổ quát cho Arduino là C và C++ Do đó phần mềm phù hợp với những người dùng quen thuộc các ngôn ngữ này.

Phần mềm Arduino bao gồm nhiều thư viện phong phú như EEPROM, Firmata, GSM, Servo, TFT, và Wifi Sự đa dạng của các thư viện này ngày càng gia tăng nhờ vào sự đóng góp tích cực từ cộng đồng Arduino toàn cầu.

Proteus là phần mềm mô phỏng mạch điện tử nổi bật của Labcenter Electronics, cho phép mô phỏng hầu hết các linh kiện điện tử thông dụng Phần mềm này đặc biệt hỗ trợ các vi điều khiển (MCU) như PIC, 8051, AVR, mang đến sự tiện lợi cho việc thiết kế và kiểm tra mạch điện.

Phần mềm bao gồm 2 mảng chính là ISIS cho phép mô phỏng mạch điện tử và ARES dùng để vẽ mạch in.

MATLAB là phần mềm do MathWorks phát triển, cung cấp môi trường tính toán số và lập trình Phần mềm này cho phép thực hiện các phép toán với ma trận, vẽ đồ thị hàm số và biểu đồ thông tin, cũng như thực hiện các thuật toán phức tạp Ngoài ra, MATLAB còn hỗ trợ tạo giao diện người dùng và kết nối với các chương trình viết bằng nhiều ngôn ngữ lập trình khác nhau.

Với thư viện Toolbox, MATLAB cho phép mô phỏng tính toán, thực nghiệm nhiều mô hình trong thực tế và kỹ thuật.

Matlab là viết tắt từ "MATrix LABoratory", được Cleve Moler phát minh vào cuối thập niên

1970, và sau đó là chủ nhiệm khoa máy tính tại Đại học New Mexico.

MATLAB, nguyên sơ được viết bởi ngôn ngữ Fortran, cho đến 1980 nó vẫn chỉ là một bộ phận được dùng nội bộ của Đại học Stanford.

Vào năm 1983, Jack Little, một cựu sinh viên của MIT và Stanford, đã tái phát triển MATLAB bằng ngôn ngữ C, đồng thời bổ sung các thư viện hỗ trợ cho thiết kế hệ thống điều khiển, các công cụ mô phỏng và hệ thống hộp công cụ Jack đã biến MATLAB thành một ngôn ngữ lập trình dựa trên ma trận, phục vụ cho các ứng dụng kỹ thuật và khoa học.

Steve Bangert là người đã viết chương trình thông dịch cho MATLAB, công việc này kéo dài gần 1 năm Sau đó, Jack Little kết hợp với Cleve Moler và Steve Bangert quyết định biến MATLAB thành một dự án thương mại, dẫn đến sự ra đời của công ty The MathWorks vào năm 1984.

MATLAB 1.0, phiên bản đầu tiên của phần mềm này, được phát hành vào năm 1984, được viết bằng ngôn ngữ C cho hệ điều hành MS-DOS và ra mắt tại Hội nghị IEEE về thiết kế và điều khiển tại Las Vegas, Nevada Phần mềm này ban đầu được phát triển nhằm hỗ trợ sinh viên sử dụng hai thư viện LINPACK và EISPACK, phục vụ cho đại số tuyến tính, mà không cần phải biết lập trình Fortran.

Năm 1986, MATLAB 2 ra đời trong đó hỗ trợ UNIX.

Năm 1990 Simulink 1.0 được phát hành gói chung với MATLAB.

Năm 1992, MATLAB 4 đã giới thiệu hỗ trợ đồ họa màu 2-D và 3-D, cùng với các ma trận truy tìm Cũng trong năm này, phiên bản MATLAB Student Edition, dành cho học sinh, đã được phát hành.

Năm 1993 MATLAB cho MS Windows ra đời Đồng thời công ty này có trang web là www.mathworks.com

Năm 1995 MATLAB cho Linux ra đời Trình dịch MATLAB có khả năng chuyển dịch từ ngôn ngữ MATLAB sang ngôn ngữ C cũng được phát hành trong dịp này.

Năm 1996 MATLAB 5 bao gồm thêm các kiểu dữ liệu, hình ảnh hóa, bộ truy sửa lỗi (debugger), và bộ tạo dựng GUI.

Năm 2000 MATLAB 6 cho đổi mới môi trường làm việc MATLAB, thay thế LINPACK và EISPACK bằng LAPACK và BLAS [2]

Năm 2002 MATLAB 6.5 phát hành đã cải thiện tốc độ tính toán, sử dụng phương pháp dịch JIT (Just in Time) và tái hỗ trợ MAC.

Vào năm 2004, MATLAB 7 được phát hành với khả năng chính xác đơn và kiểu nguyên, hỗ trợ hàm lồng nhau, công cụ vẽ điểm, và môi trường phân tích số liệu tương tác Đến tháng 12 năm 2008, phiên bản 7.7 ra mắt với SP3 cải tiến Simulink cùng với hơn 75 sản phẩm khác.

Năm 2009 cho ra đời 2 phiên bản 7.8 (R2009a) và 7.9 (R2009b).

Năm 2010 phiên bản 7.10 (R2010a) cũng đã được phát hành.

Matlab là công cụ phổ biến trong giáo dục, đặc biệt trong việc giải quyết các bài toán số trị, bao gồm cả đại số tuyến tính và giải tích, trong nhiều lĩnh vực kỹ thuật.

Sơ đồ khối

Lưu đồ thuật toán

Hình 1.18: Lưu đồ thuật toán

Xây dựng và khởi chạy chương trình mô phỏng Protues

Hình 1.19: Mô phỏng trên protues

TỔNG KẾT

Kết quả đạt được

Sau thời gian nghiên cứu, mô hình "Đếm và phân loại vật gỗ theo chiều cao trong điêu khắc sử dụng Arduino UNO R3" đã được thiết kế và chế tạo thành công.

Kết quả chưa đạt được

 Khó khăn trong việc suy nghĩ và thiết kế đề tài

 Chưa có giao diện giám sát trên máy tính

 Độ ổn định chưa tối ưu

Ưu điểm của sản phẩm

 Kích thước vừa phải, gọn nhẹ nên vận chuyển khá dễ dàng, có tính thẩm mỹ trong quá trình đi dây cũng như thiết kế mô hình.

 Kinh phí ở mức phù hợp để thực hiện một đề tài học tập và nghiên cứu trong môi trường học sinh, sinh viên.

 Nghiên cứu dễ dàng và có thể mở rộng thêm.

Nhược điểm của sản phẩm

 Tốc độ xử lý tạm ổn định tuy nhiên vẫn còn sai số.

 Chỉ xử lý tuần tự mỗi lần một sản phẩm.

 Quy trình thủ công vẫn còn xuất hiện ở một số bước trong quá trình phân loại sản phẩm.

Đánh giá mô hình

 Mô hình đã chạy ổn định nhưng đôi lúc còn bị nhiễm cảm biến

 Đạt được yêu cầu lúc đầu đề ra

Hướng khắc phục và phát triển

 Áp dụng cho các dây chuyền sản xuất nhỏ.

 Thay đổi cảm biến để tạo ra dây chuyền phân loại dựa trên các tiêu chí khác nhau của sản phẩm.

 Khắc phục được nhược điểm để đề tài hoàn thiện hơn

 Mở rộng quy mô cũng như tốc độ, số lượng chiều cao cần phân loại.

 Sử dụng thư viện AI để tăng khả năng và tốc độ nhận diện sản phẩm.

 Phát triển xử lý nhiều tín hiệu cùng một lúc thay vì chỉ xử lý một cách tuần tự lần một sản phẩm.

 Thiết kế hệ thống điều khiển thông minh, tiện dụng hơn.

 Mở rộng thêm các khâu đa nhiệm trong hệ thống hơn trước và sau khi phân loại sản phẩm xong.

 Tăng hiệu suất làm việc cũng như tốc độ của hệ thống.

 Thiết kế bộ phận đưa sản phẩm tới thay vì sử dụng tay.

 Sử dụng khí nén, cánh tay robot để gắp hay đẩy sản phẩm ra khỏi băng tải thay vì điều khiển động cơ servo theo góc quay.

Kết luận

Trong thời gian hạn chế để hoàn thành dự án, mặc dù gặp khó khăn về kiến thức, nhóm đã nỗ lực tìm hiểu đề tài và nhận được sự hướng dẫn tận tình từ ThS Đỗ Hoàng Ngân Mi, nhờ đó đã hoàn thiện được đề tài một cách hiệu quả.

Trong quá trình thực hiện đề tài, nhóm chúng tôi đã tích lũy được nhiều kiến thức và kinh nghiệm quý báu từ việc học tập và nghiên cứu Qua thời gian làm đồ án, chúng tôi xin chia sẻ những nhận xét và bài học rút ra từ trải nghiệm này.

 Phần cứng là phần tương đối khó chọn vì khá nhiều chi tiết

 Phần mềm là chương trình đã được chạy mô phỏng tương đối kỹ nhưng khi chạy thực tế sẽ còn phát sinh một số lỗi không lường trước

Quá trình nghiên cứu và thực hiện đồ án đã giúp nhóm hiểu sâu sắc các cơ sở lý thuyết từ những năm học trước, đồng thời nhận ra sự liên kết chặt chẽ giữa các môn học.

Mặc dù nhóm đã nỗ lực trong việc thực hiện đồ án, nhưng do hạn chế về kiến thức và kinh nghiệm, không tránh khỏi những sai sót Chúng tôi rất mong nhận được đánh giá, phản hồi cũng như ý kiến đóng góp từ các thầy cô và bạn bè để cải thiện và hoàn thiện đồ án hơn nữa.

Một lần nữa chúng em chân thành xin được cảm ơn sử hướng dẫn tận tình của cô “ThS Đỗ

Hoàng Ngân Mi” đã giúp đỡ chúng em hoàn thành đồ án này

For effective project development using Arduino, it's essential to understand various components and their functionalities Resources such as the official Arduino website provide comprehensive guides and tutorials The 5V 5A power supply is crucial for powering devices, while the MG90S servo motor offers precise control for various applications For communication between devices, the I2C interface with LCD displays enhances user interaction Additionally, high-performance motors, like the 545 model, can achieve impressive speeds between 14,000 to 25,000 RPM, making them suitable for demanding tasks Utilizing MATLAB can also aid in simulating and analyzing communication delays, ensuring efficient project execution.

Sách: Lập trình điều khiển với Arduino của Phạm Quang Huy - Lê Cảnh Trung

Sách: Lập trình Matlab và Ứng dụng của ThS Nguyễn Hoàng Hải, TS Nguyễn Việt Anh

Phụ lục 1: Code chương trình Matlab. function varargout = dmm(varargin)

% DMM MATLAB code for dmm.fig

% DMM, by itself, creates a new DMM or raises the existing

% H = DMM returns the handle to a new DMM or the handle to

% DMM('CALLBACK',hObject,eventData,handles, ) calls the local

% function named CALLBACK in DMM.M with the given input arguments.

% DMM('Property','Value', ) creates a new DMM or raises the

% existing singleton* Starting from the left, property value pairs are

% applied to the GUI before dmm_OpeningFcn gets called An

% unrecognized property name or invalid value makes property application

% stop All inputs are passed to dmm_OpeningFcn via varargin.

% *See GUI Options on GUIDE's Tools menu Choose "GUI allows only one

% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help dmm

% Last Modified by GUIDE v2.5 11-Dec-2022 11:30:47

% Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename,

'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end

% End initialization code - DO NOT EDIT

% - Executes just before dmm is made visible. function dmm_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn.

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% varargin command line arguments to dmm (see VARARGIN) axes (handles.anh1); imshow ('D:\1_png.jpg'); axes (handles.anh2); imshow ('D:\logo_khoa.jfif');

% Choose default command line output for dmm handles.output = hObject;

The code initializes an Arduino connection on COM3 with an Uno board, setting up two servo motors on pins D9 and D10 It establishes their initial positions to zero and resets several global variables, including counters and measurements related to height and base The user interface is updated to display default values, indicating that the system is idle with all relevant parameters set to zero.

% UIWAIT makes dmm wait for user response (see UIRESUME)

% - Outputs from this function are returned to the command line. function varargout = dmm_OutputFcn(hObject, eventdata, handles)

% varargout cell array for returning output args (see VARARGOUT);

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure varargout{1} = handles.output; function edit3_Callback(hObject, eventdata, handles)

% hObject handle to edit3 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit3 as text

% str2double(get(hObject,'String')) returns contents of edit3 as a double

% - Executes during object creation, after setting all properties. function edit3_CreateFcn(hObject, eventdata, handles)

% hObject handle to edit3 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

% See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit4_Callback(hObject, eventdata, handles)

% hObject handle to edit4 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit4 as text

% str2double(get(hObject,'String')) returns contents of edit4 as a double

% - Executes during object creation, after setting all properties. function edit4_CreateFcn(hObject, eventdata, handles)

% hObject handle to edit4 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

% See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

% - Executes on button press in chay. function chay_Callback(hObject, eventdata, handles)

% hObject handle to chay (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA) global batdau; batdau=1; set(handles.db1,'string','Chay');

% - Executes on button press in reset. function reset_Callback(hObject, eventdata, handles)

% hObject handle to reset (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

The article discusses the initialization and management of user data within a structured framework It defines several global variables, including 'batdau', 'dem', 'dthap', 'dtb', 'dcao', 'thap', 'tb', and 'cao', all set to zero Additionally, it updates the user interface by setting specific handles, such as 'db1', 'spthap', 'sptb', 'spcao', and 'tong', to display the values 'Dung' and '0', respectively This setup is crucial for ensuring the proper functioning of the application.

% - Executes on button press in nncb1. function nncb1_Callback(hObject, eventdata, handles)

% hObject handle to nncb1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

The code manages a structure that includes handles and user data, utilizing global variables for tracking the state When the conditions of `cao` and `batdau` are both met, it writes a position to `sv1`, increments the counters for `dem` and `dcao`, and resets `cao` to zero The updated values are then displayed in the respective GUI elements, followed by a brief pause before resetting the position to zero.

% - Executes on button press in nncb3. function nncb3_Callback(hObject, eventdata, handles)

% hObject handle to nncb3 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

The code manages a structure that includes handles and user data, utilizing a global variable for counting occurrences When both conditions of 'thap' and 'batdau' are met, it increments a counter 'dem' and updates 'dthap' accordingly The variable 'thap' is then reset to zero, and the updated values are displayed in the user interface elements identified by 'spthap' and 'tong'.

% - Executes on button press in nncb2. function nncb2_Callback(hObject, eventdata, handles)

% hObject handle to nncb2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

The code snippet manages a structure with handles and user data, utilizing global variables for tracking counts and states When the conditions of `tb` and `batdau` are met, it writes a position to `sv2`, increments the counters `dem` and `dtb`, resets `tb`, and updates the user interface elements with the new values A pause of two seconds is included before resetting the position to zero.

% - Executes on button press in nntb. function nntb_Callback(hObject, eventdata, handles)

% hObject handle to nntb (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA) global tb batdau; if batdau==1; tb=1; end

% - Executes on button press in nnthap. function nnthap_Callback(hObject, eventdata, handles)

% hObject handle to nnthap (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA) global thap batdau; if batdau==1; thap=1; end

% - Executes on button press in nncao. function nncao_Callback(hObject, eventdata, handles)

% hObject handle to nncao (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA) global cao batdau if batdau == 1 cao= 1; end

% - Executes on button press in dung. function dung_Callback(hObject, eventdata, handles)

% hObject handle to dung (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA) global batdau; batdau=0; set(handles.db1,'string','Dung');

% - Executes during object creation, after setting all properties. function anh1_CreateFcn(hObject, eventdata, handles)

% hObject handle to anh1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate anh1

% - Executes during object creation, after setting all properties. function anh2_CreateFcn(hObject, eventdata, handles)

% hObject handle to anh2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate anh2

Phụ lục 2: Chương trình code Arduino

The code snippet initializes three sensors and their states, setting default values for each sensor's last state and specific variables for tracking purposes It includes a function, `Display()`, which clears the LCD screen and prints a header followed by the current values of three products (SP1, SP2, and SP3) on the display This function positions the cursor appropriately to ensure that the information is clearly presented for each product, enhancing the user interface of the system.

Serial.begin(9600); pinMode(BTN, INPUT_PULLUP); pinMode(resetPin, INPUT_PULLUP); pinMode(Sensor1, INPUT); pinMode(Sensor2, INPUT); pinMode(Sensor3, INPUT);

// Chân servo servo1.attach(9); servo2.attach(10);

// Điều hướng chân động cơ là đầu ra pinMode(MOTOR, OUTPUT);

// Tắt băng tải digitalWrite(MOTOR, LOW); servo1.write(0); servo2.write(0); lcd.init(); lcd.backlight();

SensorState3 = digitalRead(Sensor3); if (digitalRead(resetPin)!=1) { reset();} else{ if (SensorState1 != LastSensorState1)

{ if (SensorState1 == 0){ if ( (unsigned long) (millis() - time1) > 300 ){ servo1.write(90);

} else if ((SensorState2 != LastSensorState2)){ if (SensorState2 == 0){ if ( (unsigned long) (millis() - time2) > 300 ) { servo2.write(90);

Ngày đăng: 24/12/2023, 16:08

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w