1. Trang chủ
  2. » Giáo Dục - Đào Tạ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

53 7 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ả Nhóm 6
Người hướng dẫn ThS. Đỗ Hoàng Ngân Mi
Trường học Trường Đại Học Sư Phạm Kỹ Thuật Đà Nẵng
Chuyên ngành Kỹ thuật Điện - Tự động hoá
Thể loại Đồ án truyền động điện
Năm xuất bản 2022
Thành phố Đà Nẵng
Định dạng
Số trang 53
Dung lượng 10,58 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

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 (11)
        • 1.1.3.1 Quy trình sản xuất (11)
        • 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 (14)
    • 2.1 Tổng quan về Adruino Uno R3 (0)
      • 2.1.1 Giới thiệu về Arduino R3 (14)
      • 2.1.2 Cấu tạo của Arduino (14)
      • 2.1.3 Ứng Dụng (16)
    • 2.2 Tổng quan các linh ki n trong đề tài ện trong đề tài (0)
      • 2.2.1 IC LCM2004 (16)
        • 2.2.1.1 Giới thiệu (16)
        • 2.2.1.2 Thông số kĩ thuật (18)
      • 2.2.2 Cảm biến hồng ngoại (18)
        • 2.2.2.1 Giới thiệu (18)
        • 2.2.2.2 Thông số kĩ thuật (19)
      • 2.2.3 LCD 20x4 (21)
        • 2.2.3.1 Giới thiệu (21)
        • 2.2.3.2 Thông số kĩ thuật (21)
      • 2.2.4 Động cơ Servo MG90S (22)
        • 2.2.4.1 Giới thiệu (22)
        • 2.2.4.2 Thông số kĩ thuật (22)
      • 2.2.5 Nút nhấn (22)
        • 2.2.5.1 Giới thiệu (22)
        • 2.2.5.2 Thông số kĩ thuật (24)
      • 2.2.6 Bộ nạp cấp nguồn cho Arduino (24)
        • 2.2.6.1 Giới thiệu (24)
        • 2.2.6.2 Thông số kĩ thuật (24)
      • 2.2.7 Động cơ motor LK0195 (25)
        • 2.2.7.1 Giới thiệu (25)
        • 2.2.7.2 Thông số kĩ thuật (26)
      • 2.2.8 Mạch nguồn (26)
        • 2.2.8.1 Giới thiệu (26)
        • 2.2.8.2 Thông số kĩ thuật (27)
  • CHƯƠNG 3: THIẾT KẾ VÀ THI CÔNG (28)
    • 3.1 Giới thiệu (28)
    • 3.2 Các phần mềm thiết kế (28)
    • 3.3 Sơ đồ khối (32)
    • 3.4 Lưu đồ thuật toán (33)
    • 3.5 Xây dựng và khởi chạy chương trình mô phỏng Matlab (34)
    • 3.6 Xây dựng và khởi chạy chương trình mô phỏng Protues (34)
  • CHƯƠNG 4: TỔNG KẾT (35)
    • 4.1 Kết quả đạt được (35)
    • 4.2 Kết quả chưa đạt được (35)
    • 4.3 Ưu điểm của sản phẩm (35)
    • 4.4 Nhược điểm của sản phẩm (35)
    • 4.5 Đánh giá mô hình (35)
    • 4.6 Hướng khắc phục và phát triển (35)
    • 4.7 Kết luận (36)

Nội dung

Tuỳ theo yêu cầu sản xuất trong thực tế mà người ta phân ra các hình thức phân loại sản phẩmnhư sau: 1.1.2 Dây chuyền phân loại sản phẩm theo chiều cao.. Dây chuyền phân loại sản phẩm th

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 ện trong đề tài

 Arduino được dùng trong thiết kế Robot, như điều khiển motor, nhận biết và sử lý thông tin.

 Máy CNC mini sử dụng cho điêu khắc sử dụng laser hoặc spindle tốc độ cao

 Máy bay không người lái

 Điều khiển thiết bị thông qua internet

 Nhận biết và cảnh báo các vấn đề nguy hiểm như cảnh báo cháy, nồnđộ hóa chất khí gas độc hại thông qua cảm biến

 Điều khiển bật tắt đơn giản ,cảm biến âm thanh, ánh sáng

2.2 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 do Philips Semiconductors phát triển để 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ỉ sử dụng hai đường truyền tín hiệu Giao thức I2C tối ưu cho các hệ thống có giới hạn về dây dẫn và chi phí, cho phép kết nối giữa vi xử lý và các IC như cảm biến, bộ nhớ EEPROM và các thiết bị tích hợp khác trên cùng một bus.

Do tính đơn giản của nó, giao thức I2C được sử dụng rộng rãi cho giao tiếp giữa vi điều khiển và mảng cảm biến, thiết bị hiển thị, thiết bị IoT, EEPROM và nhiều thiết bị khác Đây là một loại giao tiếp nối tiếp đồng bộ, có nghĩa là các bit dữ liệu được truyền lần lượt theo các chu kỳ thời gian đều đặn do tín hiệu đồng hồ tham chiếu kiểm soát Các đặc điểm quan trọng của giao thức I2C bao gồm khả năng đồng bộ hóa dữ liệu trên một bus chung, kết nối được nhiều thiết bị với địa chỉ riêng, và sự cân bằng giữa tốc độ truyền và độ phức tạp của mạch, giúp hệ thống nhúng dễ mở rộng và tiết kiệm dây dẫn.

 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 hệ thống giao tiếp dữ liệu, không cần thỏa thuận trước về tốc độ truyền như trong giao tiếp UART Vì vậy, tốc độ truyền dữ liệu có thể được điều chỉnh bất cứ khi nào cần thiết để phù hợp với điều kiện kênh, tải hệ thống và yêu cầu của ứng dụng Việc linh hoạt điều chỉnh tốc độ truyền giúp tối ưu hóa hiệu suất, giảm thiểu độ trễ và tăng tính linh hoạt cho quá trình truyền thông.

 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 trên nguyên tắc điện tử điện dung, dùng để đo và phát hiện các bức xạ hồng ngoại Bức xạ hồng ngoại là những nguồn sáng mà mắt người không thể nhìn thấy được, bởi bước sóng hồng ngoại rộng hơn với ánh sáng khả biến Do vậy, bất cứ vật thể gì phát ra mức nhiệt lớn hơn 5 độ C đều phát ra bước sóng 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 text LCD2004 xanh dương /xanh lá sử dụng driver HD44780, có khả năng hiển thị 4 dòng với mỗi dòng 20 ký tự, màn hình có độ bền cao, rất phổ biến, nhiều code mẫu và dễ sử dụng thích hợp cho những người mới học và làm dự án.

LCD 20x4 là loại màn hình tinh thể lỏng nhỏ dùng để hiển thị chữ cái và số theo bảng mã ASCII Mỗi ô trên màn hình LCD dạng Text LCD chứa các chấm tinh thể lỏng; các chấm này được bật hoặc tắt theo trình tự nhất định để tạo thành ký tự cần hiển thị, và mỗi ô chỉ có thể hiển thị một ký tự duy nhất.

LCD 20x4 là loại màn hình LCD gồm 4 dòng, mỗi dòng có thể hiển thị tối đa 20 ký tự Đây là một trong những loại màn hình được sử dụng phổ biến trong các loại mạch điện, nhờ khả năng trình bày thông tin ngắn gọn và rõ ràng, dễ tích hợp trong các dự án điện tử và hệ thống điều khiển.

 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

Hình 1.7 giới thiệu động cơ Servo MG90S và Servo SG90 (góc quay 180°), là các servo phổ biến được dùng trong các mô hình điều khiển nhỏ và đơn giản như cánh tay robot Các động cơ này có tốc độ phản ứng nhanh, được tích hợp sẵn driver điều khiển và dễ dàng điều chỉnh góc quay bằng phương pháp điều khiển PWM (điều độ rộng xung).

 Đ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 hay công tắc là khí cụ dùng để đóng hoặc ngắt nguồn điện cho các thiết bị điện, máy móc hoặc một số quá trình trong điều khiển Thông thường, nút ấn được làm từ nhựa hoặc kim loại và được thiết kế với nhiều hình dạng, kích thước khác nhau để phù hợp với ngón tay và bàn tay của người vận hành, nhằm đảm bảo thao tác nhanh nhạy, chính xác và an toàn.

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ệ.

Đối với nút nhấn nhả, các tiếp điểm sẽ chuyển sang trạng thái mới khi có lực tác động lên nút nhấn và quay về trạng thái ban đầu khi lực ấy bị loại bỏ, đảm bảo tín hiệu điều khiển được cập nhật đúng theo thao tác nhấn rồi nhả.

Ở nút nhấn giữ, các tiếp điểm sẽ chuyển trạng thái khi có lực tác động lên nút nhấn; khi lực tác động ngừng, trạng thái tiếp điểm được duy trì và chỉ khi tác động lực vào nút nhấn thêm lần nữa thì các tiếp điểm mới trở về trạng thái ban đầu.

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

Module giảm áp LM2596 là một mạch buck (buck converter) có khả năng điều chỉnh điện áp đầu ra và cung cấp dòng tối đa lên tới 3A Khi cấp nguồn 9V cho module, điện áp ra có thể được hạ xuống còn 5V hoặc 3.3V, phù hợp cho các thiết bị tiêu thụ điện năng thấp hơn Việc điều chỉnh điện áp ra bằng potentiometer và khả năng tải lên tới 3A làm cho LM2596 trở thành lựa chọn phổ biến cho các dự án DIY và các bảng mạch nguồn nhỏ gọn Với hiệu suất cao và kích thước nhỏ, LM2596 được ứng dụng rộng rãi để biến đổi nguồn từ 9V xuống các mức thấp như 5V hoặc 3.3V cho các thiết bị như vi điều khiển, cảm biến và các module điện tử khác.

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, là loại động cơ được điều khiển bằng dòng điện có hướng xác định và hoạt động trên nguồn điện áp một chiều (DC – điện áp 1 chiều) Nhờ điện áp một chiều, tốc độ và mô-men xoắn của động cơ DC có thể được điều chỉnh dễ dàng bằng cách thay đổi điện áp hoặc dòng điện cấp cho động cơ, phù hợp với các ứng dụng cần kiểm soát nhanh và ổn định.

 Độ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à 1 hay nhiều cặp nam châm vĩnh cửu hoặc nam châm điện

+ Rotor: 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): giữ nhiệm vụ tiếp xúc và tiếp điện cho cổ góp

Cổ góp (commutator) đảm nhận nhiệm vụ tiếp xúc và chia nhỏ nguồn điện cho các cuộn dây trên rotor Số lượng các điểm tiếp xúc trên cổ góp sẽ tương ứng với số cuộn dây trên rotor.

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

Động cơ 545 công suất cao hoạt động ở điện áp 5V–9V DC, có sẵn quạt tản nhiệt và tiêu thụ dòng 1.4A, do đó cần nguồn cấp có khả năng cấp dòng lớn để chạy ổn định Trong các tùy chọn nguồn, nguồn pin là phù hợp nhất để đáp ứng yêu cầu về dòng điện và đảm bảo hiệu quả làm mát cho động cơ.

 Điện áp 5V tốc độ 14000 vòng/phú

 Điện áp 6V dòng không tải 1.4A tốc độ không tải 17000 vòng/phút

 Điện áp 9V tốc độ 25000 vòng/phút

 Trọng lượng động cơ: 160 gam

Sử dụng nguồn 24V điều khiển phần động lực và 5V cho phần điều khiển Việc sử dụng nguồn riêng biệt để giúp hệ thống hoạt động ổn định hơn.

 Điện áp đầu vào: 220V AC.

 Điện áp đầu ra: 24 V DC 5A.

 Công suất: 120W.Điện áp điều chỉnh: +/-10%.

 Khả năng chống sốc: Từ 10 đến khoảng 500Hz, 2G 10 min.

 Nhiệt độ họat động: Từ -10 độ C đến 60 độ C.

THIẾT KẾ VÀ THI CÔNG

Giới thiệu

Hình 1.13 trình bày mô hình hệ thống của đồ án "Mô hình đếm và phân loại vật gỗ theo chiều cao dùng trong điêu khắc" với Arduino Uno R3, mô tả quá trình thiết kế mô hình phân loại sản phẩm và lập trình Arduino Ý tưởng ứng dụng Arduino trong công nghiệp sản xuất được làm rõ, cho thấy mức độ khả thi và tính ứng dụng cao của việc đếm và phân loại vật gỗ theo chiều cao trong các tác vụ điêu khắc.

Trong hệ thống băng tải, cảm biến E18-D80NK được lắp đặt để nhận diện và phân loại từng sản phẩm một cách tự động Động cơ servo điều khiển quá trình phân loại, đảm bảo độ chính xác và tốc độ xử lý cần thiết cho dây chuyền Màn hình LCD hiển thị số lượng sản phẩm đã được phân loại, giúp người vận hành dễ dàng theo dõi trạng thái dây chuyền trong thực tế Việc tích hợp cảm biến, động cơ servo và màn hình hiển thị cho phép người dùng hiểu rõ cách hoạt động của dây chuyền phân loại sản phẩm và tối ưu hóa quy trình sản xuất.

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

Arduino là môi trường phát triển tích hợp (IDE) mã nguồn mở, cho phép người dùng dễ dàng viết mã và tải nó lên bo mạch Nền tảng này chủ yếu dùng ngôn ngữ C/C++ cho các sketch và được xây dựng trên các công cụ và thư viện mã nguồn mở Phần mềm Arduino IDE được viết bằng Java và tận dụng cộng đồng mã nguồn mở rộng lớn để bổ sung tính năng và hỗ trợ nhiều dòng bo mạch khác nhau.

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 tích hợp các thư viện phong phú như EEPROM, Firmata, GSM, Servo, TFT và WiFi, mở rộng khả năng lập trình và giao tiếp giữa các module Nhờ sự đóng góp của cộng đồng Arduino trên toàn thế giới, hệ sinh thái thư viện ngày càng đa dạng và phong phú, cho phép triển khai các dự án từ điều khiển thiết bị đến kết nối IoT một cách dễ dàng và hiệu quả.

Proteus là phần mềm mô phỏng mạch điện tử do Labcenter Electronics phát triển, cho phép mô phỏng hầu hết các linh kiện điện tử phổ biến và đặc biệt tối ưu cho các vi điều khiển (MCU) như PIC, 8051, AVR và nhiều loại khác Với Proteus, người dùng có thể thiết kế, mô phỏng và kiểm thử mạch ở cả mức analog và số, từ sơ đồ mạch đến thời gian thực, giúp đánh giá chức năng trước khi chế tạo Đây là lựa chọn được ưa chuộng trong giảng dạy và phát triển sản phẩm nhờ tích hợp mạnh mẽ các linh kiện, khả năng mô phỏng MCU và giao diện trực quan, mang lại quy trình thiết kế hiệu quả và tiết kiệm thời gian.

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 cung cấp môi trường tính toán số và lập trình được thiết kế bởi công ty MathWorks Với MATLAB, người dùng có thể thực hiện tính toán số học trên ma trận, vẽ đồ thị hàm số và đồ thị dữ liệu, triển khai thuật toán, tạo giao diện người dùng trực quan, và liên kết với các chương trình máy tính viết bằng nhiều ngôn ngữ lập trình khác để mở rộng chức năng.

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 người từng học ở MIT và Stanford, đã viết lại MATLAB bằng ngôn ngữ C và mở rộng nó với các thư viện dành cho thiết kế hệ thống điều khiển, toolbox và khả năng mô phỏng Nhờ đó, MATLAB được xây dựng thành một mô hình ngôn ngữ lập trình dựa trên ma trận (matrix-based programming language).

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

Phiên bản đầu tiên của MATLAB, MATLAB 1.0, ra đời năm 1984, được viết bằng C cho hệ điều hành MS-DOS và được công bố lần đầu tại Hội nghị IEEE Design and Control tại Las Vegas, Nevada Ban đầu MATLAB được phát triển nhằm hỗ trợ sinh viên sử dụng hai thư viện LINPACK và EISPACK cho đại số tuyến tính (viết bằng Fortran) mà người dùng không cần 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.

Vào năm 1992, MATLAB 4 được nâng cấp để bổ sung hỗ trợ đồ họa màu 2-D và 3-D cùng với các ma trận truy tìm, và năm này cũng cho ra mắt phiên bản MATLAB Student Edition dành cho học sinh.

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.

Năm 2004, MATLAB 7 được phát hành, có khả năng làm việc với số thực độ 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ột 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 được ra mắt kèm SP3, cải thiện Simulink và đồng thời bổ sung 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 được sử dụng rộng rãi trong giáo dục, phổ biến nhất là để giải các bài toán số trị—bao gồm đại số tuyến tính và giải tích—trong nhiều lĩnh vực kỹ thuật Với khả năng tính toán, mô phỏng và trực quan hóa mạnh mẽ, MATLAB hỗ trợ giảng dạy và nghiên cứu tính toán, đồng thời giúp sinh viên và kỹ sư tiếp cận các phương pháp phân tích và tối ưu hóa hiện đại.

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 một thời gian nghiên cứu và tìm hiểu kỹ lưỡng về đề tài này, dự á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ế và chế tạo thành công Mô hình cho phép đếm và phân loại vật gỗ dựa trên chiều cao, phục vụ cho công tác điêu khắc và sản xuất, đồng thời tích hợp với nền tảng Arduino UNO R3 để tối ưu chi phí và thuận tiện trong triển khai Việc triển khai sử dụng cảm biến và cơ cấu điều khiển trên Arduino giúp tự động hóa quá trình đo đạc, nâng cao độ chính xác và khả năng ứng dụng rộng rãi trong ngành chế biến gỗ và nghệ thuật điêu khắc.

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.

 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 có hạn để hoàn thành đề án, nhóm đối mặt với nhiều thách thức do hạn chế về kiến thức, nhưng nhờ sự nỗ lực tìm hiểu đề tài và sự hướng dẫn tận tình của ThS Đỗ Hoàng Ngân Mi, nhóm đã hoàn thiện đề tài và đạt được kết quả nghiên cứu xứng đáng.

Trong quá trình thực hiện đề tài, nhóm đã tích lũy được nhiều kiến thức và kinh nghiệm quý báu từ quá trình học tập và nghiên cứu Quá trình làm đồ án nhóm giúp nâng cao kỹ năng phân tích, lập kế hoạch, làm việc nhóm và giải quyết vấn đề Trên cơ sở những thành tựu đạt được, nhóm xin được trình bày một số nhận xét và đề xuất nhằm cải thiện chất lượng nghiên cứu, tăng cường hiệu quả công việc và phát huy tối đa tiềm năng của các thành viên.

 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

Trong quá trình nghiên cứu và làm đồ án, nhóm đã nắm vững và hiểu sâu các cơ sở lý thuyết được tích lũy từ các năm học trước, đồng thời nhận thấy sự liên kết chặt chẽ giữa các môn học và cách chúng bổ sung cho nhau trong quá trình phân tích và giải quyết bài toán Việc vận dụng kiến thức lý thuyết vào bài tập thực tiễn giúp nâng cao khả năng tư duy phân tích, củng cố sự liên hệ giữa lý thuyết và thực hành, từ đó tăng cường hiệu quả học tập và nghiên cứu cho nhóm.

Mặc dù kiến thức và kinh nghiệm làm đồ án còn hạn chế, nhóm nhận thức được rằng đồ án có thể còn tồn tại sai sót Chúng tôi mong nhận được đánh giá, phản hồi và góp ý từ thầy cô cùng các bạn để rút kinh nghiệm và bổ sung, chỉnh sửa, từ đó hoàn thiện đồ án một cách toàn diện Những ý kiến đóng góp sẽ là nguồn tham khảo quý giá giúp nhóm nâng cao chất lượng và tiến bộ trong quá trình làm đồ án.

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

Arduino projects can be built around reliable I2C communication with LCD displays, while driving servo and DC motors with appropriate power and control schemes A 5V 5A power supply is a common requirement to power the board, I2C peripherals, and motors, with proper voltage regulation and decoupling to prevent brownouts The MG90S servo is a popular compact option for precise angular positioning, and high-speed motors rated at 5V–9V with speeds of 14,000–25,000 RPM enable faster actuation in robotics and automation Motor control can be implemented through Arduino-compatible libraries and I2C interfaces, and MATLAB can be used to model delays and simulate control sequences before deployment By combining these elements—Arduino, I2C LCD, servo MG90S, high-speed motors, and MATLAB delays—developers can design efficient, testable projects with clear performance benchmarks.

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;

This script initializes an Arduino-based control system by opening a serial connection to an Uno on COM3, creating two servos on pins D9 and D10, and resetting both servos to position zero It declares a set of global state variables (start, count, and various threshold and temporary buffers such as batdau, dem, dthap, dtb, dcao, thap, tb, cao) and initializes them all to zero, laying the groundwork for subsequent control logic The code also updates the graphical user interface by setting the status to 'Dung' and resetting the display fields for low, middle, and high setpoints as well as the total to zero, ensuring a clean startup state In short, these initializations prepare the Arduino servo control and GUI for a fresh run, enabling reliable hardware interaction and threshold-based control in the application.

% 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

This MATLAB GUI snippet defines global counters (batdau, dem, dthap, dtb, dcao, thap, tb, cao) and initializes them to zero, creating a clean starting state for the application It then updates the user interface via the handles structure using GUIDATA: db1 is set to the label 'Dung', and the numeric displays for the low, medium, and high categories (spthap, sptb, spcao) along with the total (tong) are reset to '0' This ensures both the internal state and the GUI reflect a neutral baseline ready to track new events.

% - 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

Using the MATLAB GUI handles structure and GUIDATA, the routine relies on a global state with variables cao, batdau, dem, dcao, and sv1 When cao equals 1 and batdau equals 1, it logs a position by calling writePosition(sv1, 0.5), increments dem by 1, increments dcao by 1, and resets cao to 0 It then updates the GUI text fields spcao and tong to show the current dcao and dem values, pauses for 2 seconds, and finally clears the position by calling writePosition(sv1, 0).

% - 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

This code manages a step-based counter within a GUI using global variables It checks two flags—thap and batdau—and, when thap equals 1 and batdau equals 1, it increments the total count (dem) and the current step counter (dthap), then resets thap to 0 It then updates the user interface by setting the spthap control to the new dthap value and the tong control to the new dem, converting the numbers to strings for display.

% - 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

This MATLAB GUI snippet uses the handles structure and GUIDATA to manage user data, and it relies on global counters to track progress It checks that the timer (tb) is active and the start flag (batdau) is set; when both conditions are true, it records the position at half speed with writePosition(sv2, 0.5) It then increments the per-event counter (dem) and the overall total (dtb), resets the timer flag (tb) to zero, and updates two on-screen displays to show the new dtb and dem values After a two-second pause, it clears the position by calling writePosition(sv2, 0).

% - 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

An Arduino-based sensor classification module tracks three sensor states (SensorState1–SensorState3) and their previous states (LastSensorState1–LastSensorState3), declares auxiliary variables (b1, b2, b3, c1, c2, c3), and maintains three counters (SP1, SP2, SP3) initialized to zero along with two timing variables (time1, time2) for interval measurement The Display() routine clears the LCD, prints a header line reading HT DEM PHAN LOAI SP, and then shows the current SP1, SP2, and SP3 values on consecutive lines at fixed cursor positions, providing real-time visual feedback of product classification on the LCD.

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: 19/12/2022, 17:24

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w