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

thiết kế và thi công hệ thống máy thanh toán tự động

110 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 đề Thiết Kế Và Thi Công Hệ Thống Máy Thanh Toán Tự Động
Tác giả Bùi Phạm Đức Huy, Lê Kiều My
Người hướng dẫn ThS. Nguyễn Ngô Lâm
Trường học Trường Đại Học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh
Chuyên ngành Công Nghệ Kỹ Thuật Điện Tử - Viễn Thông
Thể loại Đồ Án Tốt Nghiệp
Năm xuất bản 2024
Thành phố Tp. Thủ Đức
Định dạng
Số trang 110
Dung lượng 7,67 MB

Cấu trúc

  • CHƯƠNG 1: TỔNG QUAN (21)
    • 1.1 Giới thiệu tình hình nghiên cứu hiện tại (21)
    • 1.2 Tính cấp thiết của đề tài (21)
    • 1.3 Mục tiêu nghiên cứu (22)
    • 1.4 Nhiệm vụ nghiên cứu (22)
    • 1.5 Đối tượng và phạm vi nghiên cứu (23)
      • 1.5.1 Đối tượng nghiên cứu (23)
      • 1.5.2 Phạm vi nghiên cứu (23)
    • 1.6 Phương pháp nghiên cứu (23)
    • 1.7 Bố cục đồ án (24)
  • CHƯƠNG 2: CƠ SỞ LÝ THUYẾT (25)
    • 2.1 Tổng quan về xử lý ảnh [1] (25)
    • 2.2 Những vấn đề trong xử lý ảnh (26)
      • 2.2.1 Điểm ảnh [1] (26)
      • 2.2.2 Ảnh số [1] [2] (26)
      • 2.2.3 Lân cận ảnh [1] [4] (27)
      • 2.2.4 Phân loại ảnh [1] (27)
      • 2.2.5 Biểu diễn ảnh [16] [18] (28)
      • 2.2.6 Phân vùng ảnh [4] [21] (29)
      • 2.2.7 Hệ màu RGB và HSV [3] (30)
      • 2.2.8 Ngôn ngữ Python và thư viện OpenCV (33)
    • 2.3 Phương pháp nhận diện vật thể dựa vào màu sắc (35)
      • 2.3.1 Chọn mô hình màu (35)
      • 2.3.2 Màu sắc của sản phẩm (36)
    • 2.4 Quá trình nhận diện vật thể (38)
    • 2.5 Giới thiệu các linh kiện sử dụng cho phần cứng (40)
      • 2.5.1 Raspberry Pi 4 [8] (40)
      • 2.5.2 ESP32 [11] (42)
      • 2.5.3 Bộ chuyển đổi tín hiệu Hx711 và cân trọng lượng 5kg (45)
      • 2.5.4 Màn hình LCD – I2C 16x2 [12] [13] (48)
      • 2.5.5 Camera Pi Module [9] (50)
      • 2.5.6 Nút nhấn [14] (51)
    • 2.6 Các chuẩn giao tiếp (52)
      • 2.6.1 Chuẩn giao tiếp UART [22] (52)
      • 2.6.2 Chuẩn giao tiếp I2C [22] (54)
    • 2.7 Giới thiệu về IoTs và các ứng dụng (56)
    • 2.8 Nền tảng về Django Rest Framework (57)
      • 2.8.1 Tổng quan về Django Rest Framework [6] (57)
      • 2.8.2 Ứng dụng Django vào việc xử lý khi người dùng yêu cầu truy cập bên trong ứng dụng [6] (58)
      • 2.8.3 Giao tiếp giữa máy chủ với cơ sở dữ liệu [7] (59)
    • 2.9 Tổng quan về các công cụ hỗ trợ xây dựng vào lập trình cho hệ thống (60)
      • 2.9.1 Proteus (60)
      • 2.9.2 Arduino IDE (62)
      • 2.9.3 Pycharm (63)
      • 2.9.4 Visual Studio Code (64)
  • CHƯƠNG 3: THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG (66)
    • 3.1 Yêu cầu hệ thống (66)
    • 3.2 Sơ đồ khối hệ thống và chức năng từng khối (67)
      • 3.2.1 Sơ đồ khối hệ thống (67)
      • 3.2.2 Chức năng từng khối (67)
    • 3.3 Hoạt động của hệ thống (68)
    • 3.4 Thiết kế phần cứng (69)
      • 3.4.1 Khối xử lý trung tâm 1 (69)
      • 3.4.2 Khối xử lý trung tâm 2 (71)
      • 3.4.3 Khối cảm biến trọng lượng (72)
      • 3.4.4 Khối hiển thị (73)
      • 3.4.5 Khối nút nhấn (74)
      • 3.4.6 Camera Pi Module (75)
      • 3.4.7 Khối nguồn (76)
    • 3.5 Sơ đồ nguyên lý toàn hệ thống (78)
    • 3.6 Thiết kế phần mềm (79)
      • 3.6.1 Lưu đồ giải thuật chương trình chính (79)
      • 3.6.2 Lưu đồ giải thuật chương trình con gửi địa chỉ API (80)
      • 3.6.3 Lưu đồ giải thuật chương trình con ESP32 (81)
      • 3.6.4 Lưu đồ giải thuật chương trình con từ địa chỉ API gửi tới server (82)
      • 3.6.5 Lưu đồ giải thuật hoạt động của giao diện Web (83)
  • CHƯƠNG 4: KẾT QUẢ THỰC HIỆN HỆ THỐNG (84)
    • 4.1 Kết quả thực hiện mô hình (84)
    • 4.2 Kết quả toàn bộ hệ thống (87)
    • 4.3 Kết quả hoạt động của hệ thống (89)
    • 4.4 Giao diện người dùng (98)
      • 4.4.1 Giao diện website (98)
      • 4.4.2 Giao diện ADMIN (99)
    • 4.5 Giao diện trang terminal khi địa chỉ API gửi tới server (102)
    • 4.6 Nhận xét và đánh giá hệ thống (103)
  • CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN (104)
    • 5.1 Kết luận (104)
    • 5.2 Hạn chế và hướng phát triển (104)
      • 5.2.1 Hạn chế (104)
      • 5.2.2 Hướng phát triển (105)
  • TÀI LIỆU THAM KHẢO (106)

Nội dung

1.2 Tính cấp thiết của đề tài Đa phần các siêu thị ở Việt Nam hiện nay việc tính tiền hàng hóa sẽ do những người thu ngân đảm nhiệm, để giúp cho máy tính có thể phân biệt được loại hàng

TỔNG QUAN

Giới thiệu tình hình nghiên cứu hiện tại

Trong những năm gần với sự phát triển nhanh chóng của nền kinh tế, nhu cầu về một cuộc sống tiện lợi của con người cũng theo đó được nâng cao Mua sắm là một trong những nhu cầu hàng đầu của con người, vì thế ngày càng có nhiều siêu thị được mở ra và máy tính tiền dần trở thành một phần quan trọng trong mô hình kinh doanh này

Tuy máy tính tiền đã mang lại sự tiện lợi cho con người, nhưng đã có vấn đề phát sinh đó là sự chờ đợi trong việc thanh toán Là người đã nhiều lần mua hàng trong siêu thị, chúng em nhận thấy rằng kể cả vào thời điểm siêu thị vắng khách thì khi thanh toán khách hàng đều phải chờ một khoảng thời gian khá dài Lý do là doanh nghiệp đã giảm bớt số lượng nhân viên thu ngân trong thời điểm vắng khách để tiết kiệm chi phí

Từ những vấn đề nêu trên chúng em đã quyết định chọn “THIẾT KẾ VÀ THI CÔNG

HỆ THỐNG MÁY THANH TOÁN TỰ ĐỘNG” làm đề tài cho đồ án tốt nghiệp của mình.

Tính cấp thiết của đề tài

Đa phần các siêu thị ở Việt Nam hiện nay việc tính tiền hàng hóa sẽ do những người thu ngân đảm nhiệm, để giúp cho máy tính có thể phân biệt được loại hàng hóa người ta sử dụng mã vạch riêng cho từng sản phẩm Tuy nhiên đôi khi xảy ra những trường hợp máy không thể quét được mã vạch của sản phẩm dẫn đến mất thời gian cho việc thanh toán Với thiết bị đã và hiện có ở thị trường để cung cấp cho cửa hàng, siêu thị thì thiết bị do chúng em tạo ra về phần thiết kế có bắt mắt hơn, gọn gàng hơn và không chiếm quá nhiều diện tích Do đó chúng em đã nảy ra ý tưởng “Thiết kế và thi công hệ thống máy thanh toán tự động”

Hệ thống này có thể mang lại cho con người những lợi ích như:

- Giảm thời gian chờ đợi của khách hàng tại quầy thanh toán

- Tạo sự thuận tiện, thoải mái cho khách hàng trong quá trình thanh toán

- Giảm khả năng xảy ra lỗi và gian lận trong quá trình giao dịch

- Tăng tính chính xác trong việc quản lý hàng hóa và ghi nhận giao dịch

- Giảm chi phí cho doanh nghiệp trong việc thuê thêm nhân viên thu ngân.

Mục tiêu nghiên cứu

Máy thanh toán tự động sẽ do người dùng trực tiếp thao tác mà không cần đến nhân viên mà nhóm chúng em tạo ra góp phần cắt giảm bớt chi phí nhân viên cho cửa hàng và siêu thị với khả năng tự nhận diện sản phẩm qua camera trong thời gian thực, tích hợp loadcell để đo trọng lượng của sản phẩm Tất cả các thông tin thu được từ camera và loadcell được đưa vào bộ xử lý trung tâm để tính toán sau đó hiển thị giá trị lên màn hình để thông báo người dùng Sau khi khách hàng bấm xác nhận thanh toán, một mã

QR sẽ xuất hiện giúp cho việc thanh toán qua ngân hàng

Thông qua đề tài này chúng em muốn củng cố lại những kiến thức và kỹ năng đã trau dồi được trong 4 năm học vừa qua, đồng thời học hỏi thêm nhiều kiến thức mới Ngoài ra, chúng em mong muốn có thể tạo ra một sản phẩm có ích, phục vụ cho đời sống hằng ngày.

Nhiệm vụ nghiên cứu

- Hoàn thành đồ án đúng thời hạn

- Hệ thống hoạt động ổn định, đúng các tiêu chí đã đề ra

- Giao diện hiển thị thông tin trên màn hình dễ nhìn, dễ sử dụng

- Mô hình hệ thống sạch, đẹp, gọn gàng

Đối tượng và phạm vi nghiên cứu

Về phần cứng, nhóm tập trung nghiên cứu các linh kiện sau: Raspberry Pi4, Camera Pi Module, Esp32, Loadcell, LCD 16x2 – I2C và các chuẩn chuẩn giao tiếp liên quan

Về phần mềm, nhóm nghiên cứu các ngôn ngữ lập trình: Python, HTML, CSS, Javascript và các công cụ hỗ trợ thiết kế phẩn cứng (Proteus 8), phần mềm lập trình cho vi xử lý và vi điều khiển (Arduino IDE, Pycharm), phần mềm hỗ trợ thiết kế giao diện web và thiết lập giao thức API (Visual Studio Code)

Về mô hình, nhóm nghiên cứu cách vận hành của các máy tính tiền được sử dụng phổ biến hiện nay, cách thiết kế hệ thống, bố trí linh kiện sao cho phù hợp, gọn gằng, đẹp mắt

Phạm vi nghiên cứu của đề tài dừng lại ở mức thiết kế hệ thống tính tiền tự động với khả năng nhận diện 3 loại quả khác nhau, người mua hàng có thể tự tiến hành thanh toán và trả phí thông qua mã QR

- Nghiên cứu cách kết nối và lập trình cho Raspberry Pi4, Esp32

- Nghiên cứu cơ sở lý thuyết về Loadcell Module, Camera Pi Module

- Tìm hiểu về các lý thuyết có liên quan như ngôn ngữ C, HTML, CSS, Javascript, Python

- Nghiên cứu các nội dung cần thiết cho đề tài như: thuật toán nhận diện hình ảnh, cấu trúc dữ liệu, tạo và liên kết mã QR với trang web.

Phương pháp nghiên cứu

Nghiên cứu về cơ sở lý thuyết:

- Tham khảo tài liệu, thông tin mô tả của các linh kiện trong hệ thống

- Dựa vào những kiến thức đã học và những thông tin đã tìm hiểu được, tiến hành mô phỏng hệ thống

- Tham khảo các sản phẩm trên thị trường có chức năng gần giống, đánh giá các điểm mạnh và điểm yếu của các sản phẩm ấy, từ đó đưa ra các phương án cải tiến cho mô hình

Nghiên cứu thực hiện mô phỏng:

- Mô phỏng từng khối của mô hình, kiểm tra kết quả, tinh chỉnh các thông số sao cho đáp ứng được các yêu cầu đã đề ra

- Kết hợp các khối thành mô hình hoàn chỉnh.

Bố cục đồ án

Chương 1: Tổng quan: Đưa ra tình hình nghiên cứu hiện nay, tính cấp thiết của đề tài Đưa ra lý do chọn đề tài và ứng dụng thực tế của đề tài

Chương 2: Cơ sở lý thuyết: Giới thiệu chi tiết cơ sở lý thuyết, các khái niệm sẽ vận dụng trong đề tài

Chương 3: Thiết kế hệ thống: Trình bày được sơ đồ khối hệ thống, thiết kế của từng khối trong hệ thống, lựa chọn linh kiện, tính toán, xây dựng lưu đồ giải thuật và đưa ra cách vận hành hợp lý của hệ thống dựa trên những lý thuyết có sẵn

Chương 4: Kết quả: Biểu thị, vận hành phần cứng thực tế, đánh giá độ ổn định của hệ thống, nhược điểm còn tồn tại

Chương 5: Kết luận và hướng phát triển: Nêu ra những kết quả đã thực hiện được và hướng phát triển đề tài trong tương lai

CƠ SỞ LÝ THUYẾT

Tổng quan về xử lý ảnh [1]

Xử lý ảnh là quá trình áp dụng các thuật toán, phương pháp để phân tích, trích xuất thông tin hoặc cải thiện chất lượng của hình ảnh Xử lý ảnh được ứng dụng ở nhiều lĩnh vực như: điều khiển tự động, kỹ thuật y sinh, viễn thông, giao thông Việc xử lý ảnh gồm nhiều vấn đề khác nhau, được chia thành bốn lĩnh vực chính: tạo lập ảnh, biểu diễn, phân tích, quản lý

Hình 2 1: Các lĩnh vực nghiên cứu chính trong xử lý ảnh số

- Tạo lập ảnh: là quá trình thu nhận ảnh từ các nguồn khác nhau như máy ảnh, video sau đó hình thành một ảnh số dưới dạng ma trận

- Hiển thị: thực hiện các xử lý trên ma trận ảnh để thu được ảnh đầu ra mong muốn

- Phân tích: gồm các bước xử lý phục vụ cho việc đo lường hoặc nội suy, để thực hiện quá trình này chúng ta cần phải hiểu bản chất, nội dung của ảnh cũng như các thuật toán được dùng để xử lý ảnh

- Quản lý: cung cấp các khả năng lưu trữ, phục hồi, truyền thông hiệu quả

- Tăng cường: các thuật toán tăng cường ảnh có thể coi như là một bước tiền xử lý hoặc hậu xử lý trong các lĩnh vực được nêu trên.

Những vấn đề trong xử lý ảnh

2.2.1 Điểm ảnh [1] Đơn vị cơ bản nhất của ảnh số là điểm ảnh (pixel), mỗi điểm ảnh biểu diễn thông tin về màu sắc và độ sáng tại một trị trí cụ thể trên ảnh Vị trí của mỗi điểm ảnh được xác định bằng một tọa độ (x, y), số lượng điểm ảnh càng nhiều thì độ phân giải của ảnh số càng cao, càng chứa nhiều thông tin

2.2.2 Ảnh số [1] [2] Ảnh số là tập hợp của nhiều điểm ảnh, được định nghĩa là hàm hai chiều f(x, y), với x và y là tọa độ không gian và biên độ của hàm f tại toạ độ (x, y) bất kỳ được gọi là mức xám của ảnh tại điểm đó, các giá trị x, y và mức xám của ảnh số đều là các đại lượng hữu hạn, rời rạc Bằng các phương pháp thống kê và đo lường một lượng lớn các điểm ảnh, chúng ta có thể tái cấu trúc các điểm ảnh này thành một ảnh mới tương tự với ảnh gốc

2.2.3 Lân cận ảnh [1] [4] Ở một điểm ảnh p tại tọa độ (x, y) bất kỳ, luôn có 4 điểm ảnh xung quanh theo phương ngang và dọc với tọa độ được xác định như sau:

Tập hợp các điểm ảnh này được gọi là lân cận 4 của p hoặc N4(p) Ngoài ra, một dạng lân cận nữa là theo đường chéo được gọi là ND(p) với các tọa độ như sau:

Kết hợp hai dạng lân cận trên chúng ta có lân cận 8 điểm ảnh N8(p) Cần lưu ý những khái niệm này không áp dụng cho các đường biên của ảnh

Hình 2 2: Các loại lân cận ảnh

Có hai dạng chính của ảnh số, đó là ảnh màu và ảnh đen trắng, hay còn gọi là ảnh xám Ảnh màu được tạo thành từ các pixel mang các giá trị màu sắc khác nhau, trong khi

8 ảnh đen trắng được hình thành từ các pixel có giá trị mức xám khác nhau.

Hình 2 3: Hình minh họa về sự thay đổi mức xám

• Ảnh đen trắng: được cấu tạo từ nhiều pixel với mỗi pixel mang một giá trị nhất định tương ứng với một mức xám Những mức xám này có giá trị giới hạn trong khoảng từ 0-255 với giá trị 0 tương ứng với màu đen và 255 tương ứng với màu trắng

• Ảnh màu: được tạo thành từ các pixel màu, mỗi pixel được biểu diễn bởi ba giá trị tương ứng với các mức trong các kênh màu đỏ (Red), xanh lá (Green) và xanh dương (Blue) tại một vị trí cụ thể Trong không gian màu RGB, các kênh màu này đại diện cho những màu cơ bản, và thông qua phương pháp pha trộn, chúng ta có thể tạo ra hơn 16 triệu màu khác nhau

2.2.5 Biểu diễn ảnh [16] [18] Ảnh thường được biểu diễn theo hai mô hình cơ bản là Raster và Vector

• Mô hình Raster Ảnh được biểu diễn theo mô hình Raster thường được thu nhận qua các thiết bị như camera, scanner Một ảnh Raster được chia thành các hàng và các cột chứa các điểm ảnh, mỗi điểm ảnh được biểu diễn qua một hoặc nhiều bit tùy vào yêu cầu thực tế, ảnh có độ phân giải càng cao thì càng mịn và chi tiết Do được tạo thành từ nhiều pixel vuông được quy định bởi số pixel trên mỗi inch nên kích thước của ảnh Raster là một giá trị cố định, nếu ảnh càng được phóng to thì sẽ càng mờ Mô hình Raster được hỗ trợ từ nhiều công nghệ phần cứng, cung cấp những thiết bị thu nhận ảnh với tốc độ

9 nhanh và chất lượng cao cho cả đầu vào và đầu ra, tạo thuận lợi cho việc hiển thị và in ấn Ảnh Raster là đối tượng chính của lĩnh vực xử lý ảnh và thị giác máy tính

• Mô hình Vector Ảnh Vector được tạo thành từ các phương pháp toán học, bằng cách nối các điểm lại với nhau tạo thành các đường nét, hình khối theo các kích thước khác nhau Ảnh Vector được mô tả thông qua tọa độ của các thành phần bên trong nó, thay vì sử dụng ma trận điểm ảnh như ảnh Raster, nhờ đó ảnh Vector có thể được phóng to, thu nhỏ theo một tỉ lệ bất kì mà vẫn luôn sắc nét

Tuy nhiên, màu sắc của ảnh Vector không chân thực, ít tinh tế hơn so với ảnh Raster, vì thế cho nên mặc dù sở hữu nhiều ưu điểm như: tiết kiệm dung lượng, dễ dàng hiển thị, in ấn, sao chép, di chuyển và tìm kiếm ảnh Vector chỉ thường được dùng trong việc thiết kế banner, giao diện đồ họa, hầu như không được sử dụng trong việc xử lý ảnh và thị giác máy tính

Phân vùng ảnh là một trong những bước then chốt của việc xử lý ảnh, quá trình này chia tách ảnh đầu vào thành các vùng ảnh có cùng tính chất, đặc điểm nào đó dựa theo biên hoặc các vùng liên thông để phục vụ cho việc biểu diễn, phân tích, nhận dạng các đối tượng trong ảnh

Vùng ảnh là một tập hợp gồm các điểm ảnh có tính chất giống hoặc gần giống nhau, ví dụ như: mức xám, mức màu, độ nhám đường bao quanh vùng ảnh được gọi là biên ảnh (Boundary)

Dựa theo đặc tính vật lý của ảnh, ta có nhiều kỹ thuật phân vùng khác nhau như: phân vùng dựa theo miền đồng nhất, phân vùng biên, phân vùng dựa theo kết cấu, phân vùng

10 theo ngưỡng biên độ, phân vùng dựa trên ngưỡng màu sắc Dựa theo yêu cầu của hệ thống, nhóm thực hiện quyết định chọn phương pháp phân vùng dựa trên ngưỡng màu sắc

Phương pháp nhận diện vật thể dựa vào màu sắc

Táo, chanh, lê là những loại quả quen thuộc thường xuất hiện trong đời sống hằng ngày của chúng ta, bằng mắt thường chúng ta hoàn toàn có thể phân biệt ba loại quả này tuy nhiên đối với máy tính, để có thể phân biệt và nhận dạng được chính xác từng loại quả thì yếu tố màu sắc đóng vai trò rất quan trọng Nhóm thực hiện đã quyết định sử dụng hệ màu HSV cho việc nhận diện vật thể bởi những lý do sau:

- Thuận tiện: Khi áp dụng phương pháp phân vùng ảnh vựa vào ngưỡng màu sắc thì việc sử dụng hệ màu HSV sẽ mang lại sự dễ dàng cho việc đặt các khoảng màu giới hạn

- Chính xác và linh hoạt: Hệ màu HSV phản ánh chính xác hơn về cách con người nhìn thấy màu sắc, việc được thể hiện trên cả ba yếu tố: Hue (màu sắc), Saturation (độ bão hòa), Value (độ sáng) giúp cho màu sắc tăng độ chân thực

- Loại bỏ nhiễu: Khi sử dụng giới hạn màu, ta có thể loại bỏ những phần màu không mong muốn hoặc nhiễu màu khỏi ảnh, điều này tạo thuận lợi cho việc quan sát những vùng màu được xét

2.3.2 Màu sắc của sản phẩm Để có thể đặt ra các khoảng giới hạn màu HSV cho 3 loại quả cần thực hiện việc lấy mẫu từ nhiều quả với các sắc độ khác nhau, sau khi lấy mẫu, tiến hành hiệu chỉnh, đối chiếu và so sánh với các mẫu vật thực tế Lặp lại các công đoạn trên cho đến khi có được các giới hạn màu mong muốn

Dưới đây là 3 loại quả với các màu sắc khác nhau:

Hình 2 8: Táo với các sắc độ đỏ sẫm, đỏ tươi, đỏ cam

Các khoảng màu HSV của táo:

Hình 2 9: Chanh với các sắc độ xanh lá sẫm, xanh xá, xanh ngả vàng

Khoảng màu HSV của chanh: (26, 102, 40) ÷ (51, 255, 255)

Hình 2 10: Lê vàng Các khoảng màu HSV của lê:

Quá trình nhận diện vật thể

Với sự hỗ trợ từ thư viện OpenCV, quá trình nhận diện vật thể dựa vào giới hạn màu HSV được diễn ra như sau:

Hình 2 11: Quá trình nhận diện vật thể

- Thu nhận video: video thời gian thực sẽ được gửi về từ Camera Pi

- Tiền xử lý: video thu được từ trước đó đang ở hệ màu RGB nên ta cần chuyển đổi nó sang hệ màu HSV trước khi tiến hành nhận diện

Công thức chuyển đổi từ hệ màu RGB sang hệ màu HSV như sau:

Lấy giá trị của R, G, B chia cho 255 để thay đổi phạm vi từ [0, 255] sang [0, 1]

• Tính Saturation (Độ bão hòa)

- Tạo mask: từ các khoảng màu HSV đã xác định trước, tạo các mask cho từng loại quả tương ứng

- Nhận diện: dựa vào các mask đã được tạo ta tiến hành so sánh với vật thể có trong video để tìm ra vùng màu trùng khớp

- Kết luận: nếu có phát hiện vùng màu trùng khớp, tiến hành đưa ra dự đoán tên loại quả, nếu không phát hiện vùng màu trùng khớp, chương trình sẽ không trả về giá trị nào

Giới thiệu các linh kiện sử dụng cho phần cứng

Raspberry Pi là một dòng máy tính nhỏ kích thước, giá rẻ, và tiêu thụ năng lượng thấp, mỗi chiếc Raspberry Pi là một máy tính đầy đủ có thể kết nối với màn hình, bàn phím, chuột, và các thiết bị khác thông qua các cổng USB và HDMI Nó chạy trên nền tảng ARM và sử dụng hệ điều hành Linux Raspberry Pi có nhiều phiên bản khác nhau

Raspberry Pi 4 là mô hình mới nhất với nhiều cải tiến về hiệu suất và tính năng so với các phiên bản trước đó Với kiến trúc lõi tứ và các cổng kết nối đa dạng, Raspberry Pi

4 đã trở thành một công cụ đa nhiệm linh hoạt với ứng dụng rộng rãi trong nhiều lĩnh vực như: xây dựng máy tính nhúng, IoT, phát triển web và dự án phần mềm nhỏ, Robotics, hệ thống giám sát và quản lý,

Hình 2 12: Hình ảnh mô phỏng và thực tế của Raspberry Pi 4 Bảng 2 1: Thông số kỹ thuật của Raspberry Pi 4

Phần cứng Bộ xử lý ARM-Cortex A72 lõi tứ 64-bit

Tốc độ xử lý 1.5 GHz

Giải mã phần cứng H.265 (HEVC) (lên tới 4Kp60)

Giải mã phần cứng H.264 (lên tới 1080p60) Đồ họa 3D VideoCore VI

Màn hình hiển thị Hỗ trợ màn hình HDMI kép lên tới 4Kp60

Wireless LAN 802.11 b/g/n/ac Bluetooth Bluetooth 5.0 với BLE

Lưu trữ 1 thẻ SD Card

Hiển thị 2 Cổng micro-HDMI hỗ trợ màn hình kép có độ phân giải lên tới 4Kp60 USB Ports

Mạng 1 Cổng Gigabit Ethernet (hỗ trợ PoE với PoE HAT bổ sung) Camera Port 1 Cổng camera Raspberry Pi (MIPI CSI 2 làn) Display Port 1 Cổng hiển thị Raspberry Pi (MIPI DSI 2 làn)

28 User GPIO hỗ trợ nhiều tùy chọn giao diện khác nhau:

- 1 DPI (Màn hình RGB song song)

- Lên đến 3 đầu ra GPCLK

Phần mềm Stack Mature Linux software stack

Tích cực phát triển và duy trì:

- Userland ổn định và được hỗ trợ tốt

- Tính khả dụng của chức năng GPU thông qua các API tiêu chuẩn

Bảng 2 2: Thông số các chân của Raspberry Pi 4 được sử dụng trong đồ án

Chân Tên Mức điện áp hoạt động Chức năng

ESP32 là một module được phát triển bởi Espressif Systems – nhà phát triển của ESP8266 SoC ESP32 đã kế thừa và phát triển các ưu điểm của ESP8266, ngoài ra cũng tích hợp thêm nhiều tính năng mới, một số tính năng tiêu biểu có thể kể đến như:

23 hỗ trợ Wi-Fi 802.11 b/g/n, tích hợp Bluetooth 4.2 và BLE, sử dụng bộ xử lý lõi kép Tensilica Xtensa LX6 với xung nhịp lên đến 240 MHz giúp cải thiện hiệu suất trong việc xử lý đa nhiệm, tăng số lượng chân GPIO giúp mở rộng khả năng kết nối và tương tác với nhiều thiết bị, hỗ trợ các phần mềm lập trình như Arduino IDE, MicroPython

Với những ưu điểm trên, module ESP32 đã trở thành một trong những lựa chọn hàng đầu cho các dự án ứng dụng về IoT

Hình 2 13: Hình ảnh mô phỏng và thực tế của ESP32

Bảng 2 3: Thông số kỹ thuật của ESP32

2.5.3 Bộ chuyển đổi tín hiệu Hx711 và cân trọng lượng 5kg

2.5.3.1 Bộ chuyển đổi tín hiệu Hx711 [10]

Module HX711 là một bộ chuyển đổi tín hiệu analog từ Loadcell thành tín hiệu kỹ thuật số có thể đọc được thông qua các chân số của vi điều khiển Loadcell tạo ra một tín hiệu analog, thay đổi theo lực tác động lên nó, HX711 sẽ chuyển đổi tín hiệu analog này thành tín hiệu số Ngoài ra HX711 có khả năng lọc tín hiệu để giảm nhiễu và ổn định dữ liệu đo, giúp cho giá trị thu được từ Loadcell chính xác hơn

HX711 được thiết kế để dễ dàng kết nối với các vi điều khiển thông qua các giao diện như SPI hoặc I2C Điều này giúp tích hợp module vào hệ thống điều khiển và xử lý dữ liệu dễ dàng hơn

Hình 2 14: Hình ảnh mô phỏng và thực tế của module HX711

Bảng 2 4: Thông số các chân của module HX711

Chân Tên Chức năng Mô tả

2 BASE Đầu ra tín hiệu tương tự NC khi không sử dụng

3 AVDD Nguồn Nguồn tín hiệu tương tự: 2.6V ~ 5.5V

4 VFB Đầu vào tín hiệu tương tự Nối với AGND khi không sử dụng

6 VBG Đầu ra tín hiệu tương tự Đầu ra bỏ qua tham chiếu

7 INA- Đầu vào tín hiệu tương tự Kênh A đầu vào âm

8 INA+ Đầu vào tín hiệu tương tự Kênh A đầu vào dương

9 INB- Đầu vào tín hiệu tương tự Kênh B đầu vào âm

10 INB+ Đầu vào tín hiệu tương tự Kênh B đầu vào dương

11 PD_SCK Đầu vào tín hiệu số Điều khiển tắt nguồn (CAO) và tín hiệu Clock

12 DOUT Đầu ra tín hiệu số Đầu ra dữ liệu nối tiếp

13 XO Đầu vào/đầu ra kỹ thuật số Crystal I/O (NC khi không sử dụng)

14 XI Đầu vào tín hiệu số

Crystal I/O hoặc tín hiệu Clock bên ngoài 0: sử dụng bộ tạo dao động trên chip

15 RATE Đầu vào tín hiệu số

Kiểm soát tốc độ dữ liệu đầu ra 0: 10Hz ; 1: 80Hz

16 DVDD Nguồn Nguồn tín hiệu số: 2.6V ~ 5.5V

Loadcell là một loại cảm biến dùng để đo lực hoặc trọng lượng, thường được ứng dụng trong hệ thống cân, máy đo lực Loadcell có nhiều hình dạng khác nhau như: đĩa, trụ, cầu, thanh, chữ S, tùy thuộc vào mục đích sử dụng

Loadcell sử dụng các cảm ứng điện trở gọi là strain gauge, thường được kết hợp trong một mạng Wheatstone Bridge Khi có một lực tác động lên load cell, độ biến đổi điện trở trong Wheatstone Bridge sẽ tạo ra một hiệu điện thế (voltage) không đối xứng Hiệu điện thế này thường được đo bằng một bộ chuyển đổi A/D để chuyển đổi thành giá trị số có thể đọc được

Hình 2 15: Hình ảnh mô phỏng và thực tế của loadcell 5kg

Bảng 2 5: Thông số kỹ thuật của Loadcell 5kg

STT Thông số Giá trị

4 Chất liệu cảm biến Nhôm

8 Dây xanh lá Ngõ ra (+)

Màn hình LCD 16x2 được sử dụng để hiển thị thông tin, thường được sử dụng trong các dự án nhúng và điện tử Màn hình gồm 2 dòng, mỗi dòng có thể chứa 16 ký tự

Module I2C được tích hợp với màn hình LCD nhằm giảm đi số lượng chân kết nối cần sử dụng so với việc kết nối trực tiếp thông qua các chân kỹ thuật số Với module I2C chỉ cần 2 chân SDA và SCL đã có thể kết nối được với vi điều khiển

Hình 2 16: Hình ảnh mô phỏng và thực tế của màn hình LCD

Hình 2 17: Hình ảnh mô phỏng và thực tế của module I2C

Bảng 2 6: Thông số kỹ thuật của màn hình LCD

STT Ký hiệu Thông số

Max (lớn nhất) Đơn vị

1 VIH Điện áp vào mức cao 2.2 VEE V

2 VIL Điện áp vào mức thấp 0.6 V

3 VOH Điện áp ra mức cao 2.2 V

4 VOL Điện áp ra mức thấp 0.4 V

5 IDD Dòng điện ngõ vào 2.5 4.0 mA

6 VDD Điện áp ngõ vào

Bảng 2 7: Thông số các chân của màn hình LCD

2 VDD Nguồn cung cấp đầu vào +3V hoặc +5V

3 V0 Điều chỉnh độ tương phản

4 RS Tín hiệu chọn thanh ghi H/L

7–14 DB0–DB7 Đường truyền dữ liệu H/L

15 A Nguồn cung cấp cho đèn LED (4.2V)

17 NC/VEE NC hoặc đầu ra điện áp âm

Camera Pi là một loại camera dành riêng cho vi xử lý Raspberry Pi, thường được sử dụng trong các ứng dụng IoT Camera Pi kết nối với Raspberry Pi thông qua giao tiếp CSI (Camera Serial Interface)

Camera Pi có thể chụp ảnh và quay video, người dùng có thể điều chỉnh độ phân giải, khẩu độ, cân bằng trắng, thông qua phần mềm Camera Pi được thiết kế để hoạt động trên các phiên bản Raspberry Pi khác nhau: Raspberry Pi 1, Raspberry Pi 2, Raspberry

Pi 3, Raspberry Pi 4, và Raspberry Pi Zero

Hình 2 18: Hình ảnh mô phỏng và thực tế của camera Pi module

Bảng 2 8: Thông số kỹ thuật của Camera Pi

Phiên bản Raspberry Pi Camera Module v2 Độ phân giải 8 MP Độ phân giải ảnh tĩnh 3280 x 2464 P

Chức năng điều khiển hình ảnh:

• Kiểm soát phơi sáng tự động

• Cân bằng trắng tự động

• Bộ lọc băng tần tự động

• Tự động phát hiện độ chói 50/60 Hz

• Tự động hiệu chỉnh mức độ đen

Nút nhấn là một loại công cụ hỗ trợ cho việc bật, tắt, thay đổi trạng thái của một hệ thống hoặc một thiết bị Nút nhấn thường được đặt trên tủ điện, bảng điều khiển, trên hộp nút nhấn, đa phần các loại nút nhấn được làm bằng kim loại hoặc nhựa với hình dạng phù hợp với ngón tay hoặc bàn tay giúp người dùng dễ dàng thao tác

Các chuẩn giao tiếp

Universal Asynchronous Reception and Transmission (UART) là giao diện truyền thông nối tiếp cung cấp khả năng giao tiếp giữa master và slave Đây là chuẩn giao tiếp không đồng bộ do đó không có đường xung nhịp nào điều chỉnh tốc độ của quá trình truyền dữ liệu Người dùng cần phải đặt cả hai thiết bị truyền và nhận ở cùng một tốc độ, gọi là tốc độ truyền, có đơn vị là bps Cần lưu ý tốc độ giao tiếp giữa UART bên truyền và bên nhận không lệch nhau quá 10%

UART có 3 chế độ truyền nối tiếp:

- Full duplex: Truyền dữ liệu đồng thời đến và đi từ cả master và slave

- Half duplex: Truyền dữ liệu đi theo một hướng tại một thời điểm

- Simplex: Chỉ truyền dữ liệu một chiều

Quá trình truyền dữ liệu của UART

Dữ liệu truyền được tổ chức thành các gói, mỗi gói chứa 1 bit bắt đầu, từ 5 đến

9 bit dữ liệu, 1 bit chẵn lẻ tùy chọn và từ 1 đến 2 bit dừng

Hình 2 21: Gói dữ liệu của chuẩn giao tiếp UART

34 Để bắt đầu quá trình truyền dữ liệu, UART truyền sẽ kéo đường truyền từ mức điện áp cao xuống mức điện áp thấp, UART bên nhận phát hiện sự chuyển đổi mức điện áp, bắt đầu nhận dữ liệu

Sau khi đọc hết các bit dữ liệu UART nhận đọc parity bits để xác nhận quá trình truyền có xảy ra lỗi hay không Sau cùng, UART truyền sẽ kéo đường truyền dữ liệu từ mức điện áp thấp lên cao trong khoảng ít nhất 2 bit để kết thúc quá trình truyền

Dù là một giao thức cũ và chỉ có thể giao tiếp giữa một bên thu và một bên nhận, nhưng UART vẫn được sử dụng phổ biến nhờ các ưu điểm như:

- Sử dụng số lượng dây ít (2 dây)

- Không cần tín hiệu Clock

- Có bit chẵn lẻ để kiểm tra lỗi

- Có nhiều tài liệu hướng dẫn sử dụng

Inter-Integrated Circuit (I2C) là một giao thức truyền thông nối tiếp Giao thức này hiệu quả khi sử dụng cho các cảm biến và module, nhưng không phải là lựa chọn tốt cho việc giao tiếp giữa các thiết bị trên bo mạch (PCB) Bus truyền thông chuyển đổi thông tin hai chiều giữa các thiết bị kết nối chỉ bằng hai dây Với I2C, ta có thể kết nối đến 128 thiết bị với bo mạch chính mà vẫn duy trì một đường truyền thông rõ ràng giữa chúng I2C thích hợp cho các dự án yêu cầu nhiều thành phần khác nhau hoạt động cùng nhau (ví dụ như cảm biến, chân, mở rộng và trình điều khiển)

Tốc độ của I2C phụ thuộc vào tốc độ dữ liệu, chất lượng của dây truyền thông, và lượng nhiễu ngoại vi I2C cũng sử dụng giao diện hai dây để kết nối các thiết bị tốc độ thấp như bộ chuyển đổi ADC, vi điều khiển, giao diện I/O,

Nguyên lý hoạt động của I2C

Dữ liệu truyền nằm trong các tin nhắn, tin nhắn được chia thành các khung bao gồm: một khung địa chỉ nhị phân của slave, một hoặc nhiều khung chứa dữ liệu được truyền, các bit đọc/ghi, các bit ACK/NACK và điều kiện khởi động, điều kiện dừng

Hình 2 22: Gói dữ liệu của chuẩn giao tiếp I2C

I2C có hai dây: SCL và SDA, tương ứng là dây xung Clock và dây dữ liệu nối tiếp Dây xung Clock (SCL) được sử dụng để đồng bộ hóa truyền dữ liệu, dữ liệu được truyền và nhận qua dây SDA

Thiết bị master tạo tín hiệu xung Clock và gửi địa chỉ của slave cần nhận hoặc truyền dữ liệu đến tất cả các slave được kết nối Các slave sẽ so sánh địa chỉ được gửi từ master với địa chỉ của mình, nếu không trùng khớp slave sẽ rời khỏi đường tín hiệu mức cao Nếu trùng khớp, slave trả về một bit ACK và bắt đầu quá trình truyền / nhận dữ liệu Để kết thúc quá trình truyền dữ liệu, master gửi tín hiệu dừng đến slave

- Hỗ trợ nhiều thiết bị master khác nhau

- Cung cấp giap tiếp nhiều master nhiều slave

- Là một giao thức linh hoạt, phổ biến

- Tương đối chậm do cần sử dụng điện trở kéo lên

- Số lượng thiết bị kết nối càng tăng kiến trúc càng phức tạp

Hình 2 23: Giao tiếp I2C giữa một Master và nhiều Slave

Giới thiệu về IoTs và các ứng dụng

IoT - Internet of Things là một khái niệm trong lĩnh vực công nghệ mạng và trí tuệ nhân tạo Một hệ thống IoT sẽ bao gồm các cảm biến, vi xử lý, vi điều khiển, chúng trao đổi dữ liệu với nhau thông qua các mạng kết nối như: Internet, Wi-fi, Bluetooth,

Zigbee, LoRa Các dữ liệu thu được sẽ chuyển đến trung tâm xử lý dữ liệu, người dùng có thể theo dõi kết quả và điều khiển các thiết bị thông qua các phần mềm được triển khai trên các thiết bị di động hoặc máy tính để bàn

Với tốc độ phát triển của khoa học kỹ thuật hiện nay, ngày càng có nhiều thiết bị IoT ra đời nhằm phục vụ cho các nhu cầu khác nhau của con người, một số lĩnh vực ứng dụng IoT có thể kể đến như:

- Nhà thông minh: điều khiển các thiết bị như đèn, quạt, TV, camera an ninh, được kết nối với Internet từ xa thông qua các thiết bị di động

- Y tế: đồng hồ thông minh, các thiết bị theo dõi sức khỏe có thể gửi dữ liệu trực tuyến

- Công nghiệp: thu thập dữ liệu từ các thiết bị và máy móc, giúp tối ưu hóa quy trình sản xuất và cải thiện hiệu suất công việc

- Nông nghiệp: quản lý tưới tiêu, giám sát độ ẩm đất và theo dõi điều kiện thời tiết để cải thiện năng suất nông nghiệp

- Giao thông: giám sát và quản lý giao thông đô thị, cung cấp thông tin về lưu lượng giao thông, đỗ xe

Nền tảng về Django Rest Framework

2.8.1 Tổng quan về Django Rest Framework [6]

Là một framework phổ biến được sử dụng để phát triển các ứng dụng web, Django Rest Framework cung cấp các công cụ và tài nguyên mạnh mẽ để xây dựng API RESTful trong ứng dụng Django Một số ưu điểm nổi bật của Django Rest Framework:

- Cung cấp nhiều loại views: APIView, GenericAPIView, ModelViewSet giúp linh hoạt trong việc xử lý yêu cầu và trả về phản hồi

- Đơn giản hóa việc thực hiện các thao tác CRUD (Create, Retrieve, Update, Delete) thông qua các ViewSets, giúp giảm độ lặp lại mã nguồn

- Hỗ trợ nhiều định dạng dữ liệu như JSON, XML, YAML, HTML

- Hỗ trợ nhiều cách để xác thực người dùng và kiểm soát quyền truy cập vào các API

2.8.2 Ứng dụng Django vào việc xử lý khi người dùng yêu cầu truy cập bên trong ứng dụng [6]

Django Rest Framework cho phép phát triển các API RESTful bằng cách sử dụng các thành phần chính của Django Việc xử lý khi người dùng yêu cầu truy cập bên trong ứng dụng thường bao gồm các bước sau:

- Định tuyến (Routing): Tương tự như khi xây dựng ứng dụng web, ta cần định rõ các đường dẫn cho các endpoint API trong file ‘urls.py’ Các endpoint này được liên kết với các view function, tương tự như khi xử lý yêu cầu từ trình duyệt

- Mô hình ( Model ): Tạo bảng hoặc trường cho Django, nói tóm lại là tạo cơ sở dữ liệu cho ứng dụng Lớp này chứa mọi thứ về dữ liệu và nó có trách nhiệu duy trì mọi dữ liệu cho cả ứng dụng khi đang hoạt động Nó có thể thêm, xóa, chỉnh sửa bất kỳ nội dung nào mà người dùng mong muốn

- Mẫu ( Template ): Là đầu ra của HTML.Về cơ bản thì được sử dụng bằng ngôn ngữ HTML, CSS, Javascript trong tệp có đuôi là html Lớp này có chức năng trình bày , hiển thị các nội dung nào đó trong trang Web để mục đích cuối cùng là người dùng có thể xem và nhìn thấy được Do đó, muốn cung cấp một giao diện người dùng cần một mẫu để hiển thị nội dung mà người dùng tùy chọn và tùy thuộc vào nhu cầu của người dùng

- Xử lý View: Tạo các view function để xử lý logic khi người dùng gửi yêu cầu Views được xem là cầu nối của mô hình ( model ) và mẫu ( template )

Hình 2 24: Mô hình MVT ( Model – View – Template ) Ở hình 2.22, khi người dùng tạo thành công cơ sở dữ liệu của ứng dụng, mẫu đã được thiết kế theo ý người dùng và được tác động thì sẽ gửi tới bộ xử lý view Khi bộ xử lý view nhận được lệnh yêu cầu của hai hàm là mô hình và mẫu thì tiến hành phản hồi lại cho mô hình về phần thiết kế và cập nhật thông tin người dùng Còn về phần mẫu thì hiển thị thông tin có bên trong cơ sở dữ liệu ra lại màn hình khi người dùng tác động vào

2.8.3 Giao tiếp giữa máy chủ với cơ sở dữ liệu [7]

Một trong những yếu tố quan trọng của việc xây dựng API là khả năng tương tác với cơ sở dữ liệu Django Rest Framework chặt chẽ tích hợp với ORM (Object-Relational Mapping) của Django để thực hiện các thao tác trên cơ sở dữ liệu

Models, đại diện cho cấu trúc dữ liệu của ứng dụng, được sử dụng để mô hình hóa dữ liệu Serializer, một thành phần quan trọng của DRF, giúp chuyển đổi giữa đối tượng Python và định dạng dữ liệu có thể truyền qua mạng

Việc này không chỉ giúp quản lý dữ liệu một cách hiệu quả mà còn đảm bảo tính nhất quán giữa dữ liệu trên máy chủ và cơ sở dữ liệu Serializer cung cấp một cầu nối linh hoạt giữa thế giới đối tượng Python và định dạng dữ liệu di động như JSON, giúp xây dựng và duy trì các API RESTful hiệu quả và dễ bảo trì.

Tổng quan về các công cụ hỗ trợ xây dựng vào lập trình cho hệ thống

Proteus là một phần mềm mô phỏng hệ thống mạch điện tử và thiết kế PCB (Printed Circuit Board), được sử dụng rộng rãi trong lĩnh vực thiết kế và phát triển các mạch điện tử Được phát triển bởi Labcenter Electronics Ltd., Proteus giúp kỹ sư và nhà thiết kế kiểm tra, mô phỏng và thử nghiệm các mạch điện tử trước khi chúng được thi công

Hình 2 25: Giao diện màn hình chính của phần mềm Proteus

Các thành phần chính của giao diện Proteus:

1 Thanh công cụ: cung cấp các tùy chọn phục vụ cho việc vẽ, chỉnh sửa, chú thích, tính toán thông số cho các linh kiện

2 Bảng chứa danh sách linh kiện: hiển thị tên các linh kiện đã được sử dụng, giúp người dùng nắm được tên, số lượng các linh kiện có trong mạch và dễ dàng lấy ra sử dụng lại mà không mất nhiều thời gian tìm kiếm

3 Các nút chức năng: thực hiện các tác vụ như chạy chương trình, tạm dừng, ngắt, bỏ qua

4 Không gian thiết kế: nơi người dùng đặt các linh kiện, nối dây để tạo thành một hệ thống hoàn chỉnh

Arduino IDE là một phần mềm được dùng để lập trình và biên dịch mã cho các bo mạch Arduino khác nhau như Arduino Uno, Arduino Mega, Arduino Micro, Mỗi bo mạch này đi kèm với một vi điều khiển được lập trình sẵn, chấp nhận thông tin dưới dạng mã được tạo ra từ môi trường lập trình tích hợp (IDE) Mã nguồn, hay còn gọi là

"sketch," được phát triển trên giao diện người dùng của IDE, sau đó được biên dịch thành một file Hex trước khi được tải lên bo mạch thông qua cổng nối USB hoặc các phương tiện truyền thông khác

Môi trường IDE bao gồm hai thành phần chính: Trình chỉnh sửa và Trình biên dịch Phần soạn thảo mã được sử dụng để viết mã nguồn theo yêu cầu, phần biên dịch chịu trách nhiệm biên dịch mã nguồn đó thành ngôn ngữ máy có thể thực thi trực tiếp trên bo mạch Arduino Môi trường này hỗ trợ cả ngôn ngữ lập trình C và C++

Hình 2 26: Giao diện chính của phần mềm Arduino IDE

Khi làm việc với phần mềm Arduino IDE ta cần chú ý một số phần như sau:

1 Menu lệnh: Cung cấp các tùy chọn mở, tạo mới, đổi tên, một project

2 Nút kiểm tra lỗi (Verify): Dùng để kiểm tra chương trình có chứa lỗi hay không Nếu phát hiện lỗi, phần mềm sẽ hiển thị thông báo về nội dung lỗi và vị trí lỗi cụ thể

3 Nút nạp chương trình vào Arduino (Upload): Dùng để nạp chương trình được viết vào Arduino, trước khi nạp chương trình sẽ được kiểm tra lỗi, nếu không có lỗi chương trình mới được nạp xuống Arduino,

4 Vùng lập trình: Dùng để viết và chỉnh sửa các câu lệnh trong chương trình

Pycharm là một phần mềm được phát triển bởi JetBrains, chuyên phục vụ cho việc lập trình Python Ra mắt lần đầu tiên vào năm 2010, Pycharm nhanh chóng trở thành một trong những phần mềm lập trình phổ biến và mạnh mẽ trong cộng đồng lập trình Python

Pycharm cung cấp một trình soạn thảo mã thông minh với các tính năng: tự động hoàn thành mã, kiểm tra cú pháp, gợi ý cú pháp và định dạng mã tự động Ngoài ra nó còn có tính năng tự động kiểm tra lỗi, gợi ý cách sửa lỗi, cung cấp một bộ gỡ lỗi mạnh mẽ cho phép người dùng theo dõi giá trị biến, điểm dừng, và phân tích lỗi một cách hiệu quả Tích hợp với các hệ thống quản lý phiên bản như Git, Mercurial, và SVN, giúp người dùng theo dõi lịch sử thay đổi trong mã nguồn

Hình 2 27: Giao diện màn hình chính của phần mềm Pycharm

Giao diện làm việc của phần mềm Pycharm có các phần quan trọng sau:

1 Thanh công cụ: cung cấp nhiều lựa chọn phục vụ cho quá trình lập trình như quản lý các thư viện, quản lý cấu hình, quản lý dự án, các chức năng tìm kiếm và chỉnh sửa

2 Thanh công cụ phụ: cung cấp các lựa chọn thường xuyên được sử dụng như biên dịch mã, sửa lỗi, cập nhật mã mới nhất đến các hệ thống quản lý phiên bản

3 Vùng lập trình: dùng để viết, chỉnh sửa các câu lệnh trong chương trình

Visual Studio Code là một ứng dụng hỗ trợ việc biên tập và soạn thảo mã nguồn, hỗ trợ quá trình xây dựng và thiết kế website một cách hiệu quả Được phát triển và duy trì bởi Microsoft, VS Code có sẵn trên ba hệ điều hành phổ biến là Windows, macOS và Linux

45 Ứng dụng này đặc biệt được tối ưu hóa để hỗ trợ các ngôn ngữ lập trình chủ yếu trong lĩnh vực phát triển web, bao gồm JavaScript, TypeScript và Node.js Nó cung cấp một môi trường linh hoạt và mạnh mẽ để phát triển ứng dụng web một cách nhanh chóng và hiệu quả

Hình 2 28: Giao diện chính của phần mềm Visual Studio Code

(1) Giao diện làm việc chính, nơi chứa code của chương trình

(2) Khu vực chứa các dự án đã hoặc đang thực hiện, ta có thể phân biệt tên ngôn ngữ được dungf trong tệp tin đó thông qua ký tự viết tắt như: “.js”, “.html”,… (3) Khu vực chứa các tab đang làm việc, ta có thể chuyển đổi các tab đang thực hiện qua lại tại đây

THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG

Yêu cầu hệ thống

Hệ thống có các chức năng sau:

- Cho phép khách hàng tự thanh toán sản phẩm tại các siêu thị, cửa hàng tiện lợi,… mà không cần phải nhân viên can thiệp

- Nhận diện sản phẩm thông qua camera thay vì phải nhập mã từng sản phẩm thủ công

- Giao diện thanh toán dễ hiểu, dễ sử dụng

- Phần mềm cho phép người dùng có thể quét mã QR code để thanh toán

Sơ đồ khối hệ thống và chức năng từng khối

3.2.1 Sơ đồ khối hệ thống

Hình 3 1: Sơ đồ khối hệ thống máy thanh toán tự động

- Khối xử lý trung tâm 1: Thu thập dữ liệu từ cân trọng lượng Khi loadcell lấy được trọng lượng của sản phẩm thì sẽ gửi về bộ xử lý trung tâm 2

- Khối xử lý trung tâm 2: Nhận diện được sản phẩm và đồng thời yêu cầu giá trị trọng lượng từ khối xử lý trung tâm 1 để gửi lên Web Server để lưu dữ liệu và đồng thời cho hiển thị ra giao diện Website

- Khối cảm biến trọng lượng: Thu thập trọng lượng của sản phẩm và truyền dữ liệu về cho khối xử lý trung tâm để gửi thông tin trọng lượng của sản phẩm lên cơ sở dữ liệu

- Camera Pi module: Từ video thời gian thực, camera gửi hình ảnh về bộ xử lý trung tâm và tiến hành nhận diện

- Khối nút nhấn: Khi nhấn nút 1 thì sẽ lưu giá trị vừa nhận diện được vào biến và đọc giá trị của loadcell từ serial Khi nhấn nút 2 thì sẽ gửi các giá trị được lưu khi nhấn nút 1 tới địa chỉ API và gửi lệnh yêu cầu tới server

- Web Server: Lưu trữ tất cả dữ liệu của sản phẩm từ cân trọng lượng và thông tin đã được nhập vào để gửi đúng thông tin sản phẩm lên màn hình hiển thị

- Khối hiển thị: Hiển thị trọng lượng của sản phẩm khi khối xử lý trung tâm 1 nhận được giá trị

- Khối nguồn: Cung cấp nguồn cho bộ xử lý trung tâm 1 và bộ xử lý trung tâm 2, từ đó có thể cung cấp nguồn cho các cảm biến khác như loadcell, LCD-I2C,…

Hoạt động của hệ thống

Khi hệ thống được cấp nguồn hệ thống sẽ hoạt động theo trình tự như sau:

- Bước 1: Khi được cấp nguồn toàn bộ hệ thống sẽ khởi động, khối xử lý trung tâm sẽ đợi dữ liệu từ các khối như khối cảm biến trọng lượng và module camera

- Bước 2: Khi đặt sản phẩm lên bàn cân trọng lượng của module loadcell thì nhấn nút 1 để xác nhận đã lấy giá trị nhận diện được của camera lưu vào biến, đồng thời giá trị cân trọng lượng được gửi từ serial cũng sẽ được lưu vào biến Tiếp đó, nhấn nút 2 để lấy các biến vừa lưu trên gửi tới địa chỉ API và gửi lệnh yêu cầu từ API tới server của Django Framework

- Bước 3: Khi Web Server nhận được dữ liệu gửi về từ địa chỉ API thì sẽ kiểm tra trong database của server có dữ liệu trùng khớp với các kết quả đã được gửi lên không Nếu có thì cho phép hiển thị tất cả thông tin đã lưu ra giao diện Website để người dùng có thể thấy được thông tin sản phẩm bao gồm tên, giá tiền, trọng lượng và cuối cùng là tổng hóa đơn của các sản phẩm Ngược lại nếu không khớp với dữ liệu bên trong database thì sẽ báo lỗi và không hiển thị thông tin sản phẩm ra Website

- Bước 4: Website sẽ tiếp tục cập nhật khi camera nhận diện được các sản phẩm khác gửi về từ địa chỉ API

- Bước 5: Nếu người dùng muốn tiến hành thanh toán các sản phẩm đã hiển thị trên màn hình thì tiến hành nhấn nút thanh toán trên màn hình và màn hình sẽ hiển thị mã QR code để người dùng có thể thanh toán Sau khi thanh toán xong thì màn hình sẽ hiển thị đã thanh toán thành công để thông báo cho người dùng biết.

Thiết kế phần cứng

3.4.1 Khối xử lý trung tâm 1

Vi điều khiển ESP32 được lựa chọn để làm khối xử lý trung tâm vì đây được xem là một trong những kiến trúc phần cứng phổ biến nhất cho các ứng dụng IoT Vi điều khiển ESP32 được thiết kế để tiêu thụ năng lượng thấp, có tính linh hoạt cao với đầy đủ các tính.năng như kết nối Wifi, Bluetooth, BLE và Zigbee, hỗ trợ các giao thức truyền thông như TCP/IP, CoAP, MQTT và HTTP ESP32 có độ trễ nhanh, thời gian phản hồi tích hợp của ESP32 chỉ mất vài phần trăm giây, được coi là rất nhanh so với các kiến trúc phần cứng IoT khác Ngoài ra, ESP32 được tích hợp với các bộ định thời chính xác cao, đảm bảo độ chính xác cho các hệ thống đồng bộ dữ liệu thời gian thực ESP32 còn là một vi mạch có giá thành phải chăng, phù hợp cho các dự án IoT tiết kiệm chi phí Sơ đồ chân của ESP32 được thể hiện như hình 3.2

Mô tả kết nối cho ESP32 bao gồm :

- Chân 7, 8 lần lượt kết nối với chân SCK và DT của cảm biến trọng lượng

- Chân 14, 17 lần lượt kết nối với chân SCA và SCL của màn hình LCD-I2C 16x2

- Chân 15, 16 ( RX, TX ) lần lượt kết nối với chân 8, 10 ( TX, RX )của Raspberry Pi

- Chân GND của ESP32 kết nối với chân GND của Raspberry Pi

Hình 3 2: Sơ đồ chân của ESP32

ESP32 có thể linh hoạt kết nối với các cảm biến thông qua các giao thức truyền thông như I2C, SPI, UART, xử lý được các dữ liệu ngõ vào analog và ngõ vào số Điều này cho phép ESP32 đọc các giá trị từ cảm biến Với thiết kế nhỏ gọn và tính linh hoạt cao trong việc kết nối và truyền dữ liệu, ESP32 là giải pháp thích hợp nhất cho quá trình thu thập dữ liệu từ cân trọng lượng để gửi lên bộ xử lý trung tâm

3.4.2 Khối xử lý trung tâm 2

Trong thời đại công nghệ 4.0, cũng như Internet Of Things ngày càng phát triển thì việc sử dụng raspberry để lập trình cho một dự án, một máy tính thu nhỏ, nó có thể được lập trình để điều khiển các thiết bị từ xa như máy in không dây hoặc nhiều thiết bị khác chẳng hạn như Smart home,… Ngoài là một máy tính thu nhỏ ra thì raspberry có thể được dùng như một VPN cá nhân, có thể biến thành rất nhiều thiết bị từ phần cứng tới phần mềm Hình 3.3 sẽ thể hiện sơ đồ chân của Raspberry Pi 4

Mô tả kết nối cho Raspberry Pi bao gồm :

- Chân 29, 31 lần lượt kết nối với các chân của nút nhấn

- Chân 8, 10 ( TX, RX ) lần lượt kết nối với chân 15, 16 ( RX, TX ) của ESP32

- Chân GND của Raspberry Pi kết nối với chân GND của ESP32

Hình 3 3: Sơ đồ chân của Raspberry Pi

Với thiết kế nhỏ gọn và linh hoạt kết nối với các thiết bị khác thông qua các giao thức như UART, I2C,… Raspberry sử dụng giao thức Wifi để có thể chạy trực tiếp trên địa chỉ IP mà không cần phải thông qua một phần mềm thứ ba

3.4.3 Khối cảm biến trọng lượng

Cảm biến cân trọng lượng là một loại cảm biến có thể chuyển đổi một trọng lượng thành một tín hiệu điện Giá trị của trọng lượng thay đổi phụ thuộc vào cầu điện trở, điện trở thay đổi dựa vào nguyên lý của trở kháng – áp lực Khi một lực tác động lên cảm biến thì sẽ làm thay đổi trở kháng, sự thay đổi trở kháng dẫn đến thay đổi điện trở đầu ra của cảm biến

Bảng 3 1: Sơ đồ nối dây của cảm biến trọng lượng với ESP32

Hình 3 4: Sơ đồ nguyên lý kết nối cảm biến trọng lượng với ESP32

Dựa vào bảng 3.1 và hình 3.4 ở trên, cảm biến trọng lượng được cấp nguồn 5V để hoạt động và dựa vào giao thức truyền I2C để giao tiếp với bộ xử lý trung tâm ESP32

Sử dụng màn hình hiển thị LCD-I2C 16x2 là một lọai màn hình được thiết kế nhỏ gọn sử dụng I2C nhằm dễ kết nối, tránh gây rối mắt khi kết nối với các thiết bị khác Màn hình này được sử dụng để hiển thị các thông tin đơn giản như hiển thị thời gian thực, hiển thị văn bản ngắn gọn,…

Bảng 3 2: Sơ đồ nối dây của màn hình LCD với ESP32

Hình 3 5: Sơ đồ nguyên lý kết nối màn hình LCD với ESP32 Ở hình 3.5, sau khi kết nối chân nguồn và chân dữ liệu của màn hình LCD với ESP32 thì sử dụng thư viện có sẵn là LiquidCrystal_I2C để điều khiển, cho phép hiển thị các dữ liệu, thông tin mà người dùng muốn hiển thị

Sử dụng nút nhấn giúp cho người dùng dễ dàng quản lý được hệ thống và sản phẩm khi thực hiện thanh toán các sản phẩm mong muốn Với thiết kế nhỏ gọn và sử dụng lâu dài mà không sợ bị hỏng hóc, phù hợp với hầu hết các mạch điện và có thể dễ dàng tích hợp vào hệ thống Bảng 3.3 và bảng 3.4 sẽ thể hiện sơ đồ nối dây của các nút nhấn với Raspberry Pi

Bảng 3 3: Sơ đồ nối dây của nút nhấn 1 với Raspberry Pi

Bảng 3 4: Sơ đồ nối dây của nút nhấn 2 với Raspberry Pi

Hình 3 6: Sơ đồ nguyên lý kết nối nút nhấn với Raspberry Pi

Có rất nhiều camera có thể kết nối với raspberry theo nhiều cách giao tiếp nhưng với raspberry có một cổng Camera Module Port giúp cho người dùng có thể kết nối camera ngoại vi Từ đó, kết nối camera theo cổng Port sẽ ổn định hơn là kết nối với các camera khác thông qua cổng USB,… Sử dụng Camera Pi Module giúp cho việc chụp hình, quay video, thu thập ảnh thông qua video trở nên dễ dàng, ổn định và hiệu quả hơn

Hình 3 7: Sơ đồ nguyên lý kết nối Camera Pi với Raspberry Pi Ở hình 3.10, Camera Pi Module kết nối với Raspberry Pi thông qua dây cáp bằng cổng Camera Module Port có sẵn trên Raspberry

Bảng 3 5: Thông số về điện áp, dòng điện tiêu thụ của các linh kiện cảm biến

Ta có công thức tính dòng của tiêu thụ của toàn mạch là:

Itm = Iesp + Iraspi + Ilcd + Iloadcell + Icamera = 0.008 + 3.0 + 0.0025 + 0.001 + 0.027 = ~ 3A

Dựa vào bảng 3.5 và công thức tính dòng tiêu thụ toán mạch vừa rồi thì nguồn 5V – 3A là nguồn lý tưởng để cấp cho các thiết bị cảm biến từ điện áp đầu vào là 220V xoay chiều, phù hợp với lưới điện của Việt Nam

Hình 3 8: Sơ đồ nguyên lý nguồn 5V

Sơ đồ nguyên lý toàn hệ thống

Sau quá trình tính toán, thiết kế và chọn linh kiện phù hợp nhóm thực hiện đã thu được sơ đồ nguyên lý như sau:

(Sơ đồ nguyên lý toàn hệ thống được đính kèm theo khổ A4)

Thiết kế phần mềm

3.6.1 Lưu đồ giải thuật chương trình chính

- Đầu tiên, thực hiện khai báo tất cả các thư viện sử dụng trong chương trình, khởi tạo các chân giao tiếp, khởi tạo biến ban đầu, khởi tạo cameraPi và LCD

- Kiểm tra đã kết nối Wifi hay chưa, nếu chưa thì đợi kết nối Wifi Nếu đã kết nối thì khởi tạo HTTP WebServer trên Raspberry

- Đặt sản phẩm vào vị trí nhận diện Kiểm tra nhận diện đúng sản phẩm hay không Nếu không đúng thì quay lại đợi nhận diện tiếp Nếu đúng thì tiến hành nhấn nút nhấn 1 để lưu đối tượng, đọc giá trị loadcell đồng thời hiển thị giá trị loadcell lên LCD

- Nhấn nút nhấn 2 để lưu giá trị nhận diện được và giá trị loadcell vào địa chỉ API Sau đó API tiến hành gửi lệnh yêu cầu tới server

- Server kiểm tra có thông tin trùng với cơ sở dữ liệu hay không Nếu không trùng thì quay lại chở nhận diện sản phẩm Nếu có trùng thông tin thì tiến hành hiển thị ra màn hình và tiếp tục quy trình sản phẩm mới

Hình 3 9: Lưu đồ chương trình chính

3.6.2 Lưu đồ giải thuật chương trình con gửi địa chỉ API

- Đầu tiên, thực hiện khai báo tất cả các thư viện sử dụng trong chương trình, khởi tại các chân giao tiếp, khởi tạo biến ban đầu, khởi tạo cameraPi và LCD

- Đặt đối tượng vào vị trí Chuyển video thu được của đối tượng sang không gian màu HSV

- Xác định và vẽ frame đối lượng, sau đó lưu số lượng mask vào mảng

- Tiến hành dự đoán đối tượng Nếu nhận diện không đúng thì quay ngược lại đợi chuyển lại không gian màu Còn nếu nhận diện đúng thì nhấn nút nhấn 1 để lưu đối tượng nhận diện được vào mảng

- Kiểm tra đã nhấn nút hay chưa, chưa thì đợi nhấn, còn nhấn rồi thì lấy giá trị loadcell từ port và nhấn nút nhấn 2

- Kiểm tra đã nhấn nút 2 hay chưa , chưa thì đợi nhấn Còn đã nhấn thì API gửi lệnh yêu cầu tới server

- Kiểm tra đã nhấn nút 2 hay chưa , chưa thì đợi nhấn Còn đã nhấn thì API gửi lệnh yêu cầu tới server

- Tiếp tục quy trình nhận diện sản phẩm khác

Hình 3 10: Lưu đồ chương trình con gửi địa chỉ API

3.6.3 Lưu đồ giải thuật chương trình con ESP32

- Đầu tiên, thực hiện khai báo tất cả các thư viện sử dụng trong chương trình, khởi tại các chân giao tiếp, khởi tạo biến ban đầu, khởi tạo LCD

- Đọc giá trị hiệu chỉnh, nếu giá trị hiệu chỉnh chưa đúng thì tiến hành hiệu chỉnh lại Nếu đúng thì tiến hành đọc giá trị loadcell

- Hiển thị giá trị loadcell ra màn hình LCD

- Gửi dữ liệu thu được từ cảm biến tới Raspberry thông qua cổng serial

- Tiếp tục quy trình lấy giá trị trọng lượng với các sản phẩm khác

Hình 3 11: Lưu đồ chương trình con ESP32

3.6.4 Lưu đồ giải thuật chương trình con từ địa chỉ API gửi tới server

- Đầu tiên kết nối internet Kiểm tra đã kết nối internet hay chưa

- Nếu chưa thì quay lại đợi kết nối internet Còn nếu kết nối rồi thì tiến hành nhận giá trị product_id và loadcell_value

- Kiểm tra product_id và ID trong cơ sở dữ liệu có trùng thông tin với nhau không

- Nếu không thì quay lại đợi nhận giá trị tiếp Nếu trùng thì hiển thị thông tin ra màn hình

- Tiếp tục quy trình nhận các giá trị của sản phẩm mới

Hình 3 12: Lưu đồ chương trình con API gửi tới server

3.6.5 Lưu đồ giải thuật hoạt động của giao diện Web

- Đầu tiên kết nối internet Kiểm tra đã kết nối internet hay chưa

- Nếu chưa thì quay lại đợi kết nối internet Còn nếu kết nối rồi thì hiển thị giao diện chính

- Nếu giao diện chính nhận yêu cầu từ API gửi lên server thì hiển thị ra màn hình thông tin của sản phẩm mà API gửi lên, công việc cứ tiếp tục với các sản phẩm khác khi API gửi lên

- Tiếp theo sẽ kiểm tra người dùng đã nhấn nút

“THANH TOÁN ”trên màn hình hay chưa, nếu chưa thì tiếp tục thực hiện chờ địa chỉ API gửi len và hiển thị thông tin ra màn hình

- Nếu đã nhấn nút “THANH TOÁN ” thì hiển thị giao diện thanh toán Kiểm tra đã thanh toán thành công hay chưa, nếu chưa thì đợi thanh toán

- Nếu đã thanh toán thành công thì hiển thị giao diện thanh toán thành công để thông báo người dùng Sau đó quay lại màn hình chính chờ nhận địa chỉ API

Hình 3 13: Lưu đồ hoạt động của giao diện Web

KẾT QUẢ THỰC HIỆN HỆ THỐNG

Kết quả thực hiện mô hình

Sau quá trình thực hiện các bước nhận diện vật thể bằng phương pháp phân vùng màu, ta có được kết quả nhận diện của từng loại quả như sau:

Hình 4 1: Kết quả nhận diện táo đỏ sẫm

 Ở hình 4.1, đối với táo có màu đỏ sẫm, hầu như không bị xem lẫn bởi màu cam hoặc vàng thì chương trình có thể nhận diện khá tốt, xác định được gần như toàn bộ diện tích bề mặt

Hình 4 2: Kết quả nhận diện táo đỏ tươi

 Đối với táo có màu đỏ tươi, xem lẫn một phần màu cam hoặc vàng trong hình 4.2 thì vùng màu nhận diện được ít hơn so với táo đỏ sẫm, tuy nhiên vẫn đủ để chương trình đưa ra dự đoán chính xác

Hình 4 3: Kết quả nhận diện táo đỏ cam

 Đối với táo trong hình 4.3 có màu đỏ cam, với mật độ màu cam và vàng chiếm diện tích khá lớn nên diện tích nhận diện giảm khá nhiều

Hình 4 4: Kết quả nhận diện chanh

 Chương trình nhận diện chanh trong hình 4.4 khá tốt, do màu sắc của chanh ít bị trùng với màu sắc chính của hai loại quả còn lại, nên khoảng giới hạn màu của chanh có thể mở rộng hơn

Hình 4 5: Kết quả nhận diện lê

 Kết quả nhận diện của lê trong hình 4.5 cũng khá tốt, do màu sắc của quả hầu như đồng đều trên toàn bộ bề mặt (không có sự pha trộn đỏ-cam-vàng như táo), tuy nhiên do màu sắc của lê có một khoảng màu trùng với khoảng màu của màu đỏ cam sáng, nên đây là lý do cho việc giới hạn màu của táo bị thu hẹp lại để giảm tỉ lệ nhận diện vùng màu sai

Bảng 4 1: Tỷ lệ nhận diện sản phẩm Thời gian

Bảng 4.1 thể hiện tỷ lệ nhận diện của từng sản phẩm trong các khoảng thời gian 1 giây,

2 giây và 3 giây Với điều kiện ánh sáng tốt (sử dụng ánh sáng trắng) chiếu thẳng vào sản phẩm, nhìn chung kết quả nhận diện của hệ thống khá tốt, riêng táo đỏ cam vì có các vùng màu vàng gần giống với lê nên hệ thống cần thêm thời gian để xác nhận

Kết quả toàn bộ hệ thống

Nhóm đã hoàn thiện mô hình hoàn chỉnh với độ chi tiết và chính xác cao cho sản phẩm của nhóm Dưới đây là mô hình đã được thiết kế và hoàn thiện chụp ở nhiều góc độ khác nhau ở hình 4.6 và hình 4.7:

Hình 4 6: Mô hình được chụp từ hướng bên trái Hình 4 7: Mô hình được chụp từ hướng bên phải

Hình 4 8: Mô hình được chụp từ bên trên Hình 4 9: Mô hình được chụp từ hướng ngang

Mô hình được mô tả trong hình 4.8 và hình 4.9 gồm các thiết bị và cảm biến sau:

(1) Màn hình hiển thị giao diện Web

(5) Màn hình LCD hiển thị cân nặng của sản phẩm

(6) Hộp đựng bộ xử lý trung tâm

Theo như mô tả ở trên thì màn hình điện thoại hiển thị các thông tin của sản phẩm khi camera nhận diện được cho người dùng biết Nút nhấn cho phép người dùng tác động nhằm mục đính kiểm soát được những sản phẩm khi camera nhận diện được, tránh rủi ro nếu màn hình hiển thị các sản phẩm một cách không đúng Camera Pi nhận diện sản phẩm từ video và chuyển thể thành hình ảnh, sau đó từ ảnh nhận diện được sản phẩm thông qua màu sắc của vật phẩm Tiếp đến là cảm biến trọng lượng, cảm biến tính toán

69 và cho biết trọng lượng của sản phẩm đó để khi có trọng lượng và giá tiền thì sẽ đưa ra được giá của sản phẩm thông qua trọng lượng Màn hình LCD hiển thị cân nặng của sản phẩm nhằm cho người dùng dễ dàng thấy được trọng lượng của từng sản phẩm khi được đặt lên bàn cân Các thiết bị xử lý trung tâm hoạt động tốt và đảm bảo thu thập thông tin một cách hiệu quả.

Kết quả hoạt động của hệ thống

Hệ thống máy thanh toán tự động đã hoạt động ổn định Khi được cấp nguồn, camera và các thiết bị khác khởi động một cách đồng bộ Khi đặt sản phẩm lên bàn cân, tiến hành đẩy bàn cân vào vị trí nhận diện sản phẩm

Camera tiến hành quét và nhận diện sản phẩm Hệ thống sử dụng các thuật toán xử lý ảnh, xử lý màu HSV để nhận biết màu đặc trưng của từng sản phẩm Kết quả khi nhận diện được sẽ gửi tới địa chỉ API kèm với trọng lượng của sản phẩm khi được đặt lên bàn cân mà ESP32 đã gửi lên

Tiến hành nhấn nút để cho phép kết quả nhận diện gửi lên cơ sở dữ liệu của server Khi server so sánh 2 kết quả của nhận diện và cơ sở dữ liệu Nếu đúng với cơ sở dữ liệu đã lưu thì tiến hành cho phép hiển thị thông tin bên trong cơ sở dữ liệu ra màn hình để người dùng biết được thông tin của sản phẩm bao gồm tên, giá tiền, trọng lượng và cuối cùng là giá trị của sản phẩm tương ứng với trọng lượng của sản phẩm đó

❖ Nhận diện quả lê màu vàng

Hình 4 10: Kéo bàn cân ra khỏi vị trí nhận diện Hình 4 11: Đặt sản phẩm cần nhận diện lên bàn cân

Hình 4 12: Sản phẩm đã được đưa vào vị trí nhận diện Ở hình 4.10, hình 4.11 và hình 4.12, bàn cân được đưa ra ngoài nhằm mục đích giúp người dùng đặt sản phẩm lên bàn cân một cách dễ dàng mà không bị vướng bận hay

71 khó khăn tron lúc thao tác Sau khi đặt sản phẩm lên bàn cân thì tiến hành đưa sản phẩm vào vị trí đã được đặt sẵn để tiến hành nhận diện Lúc này trên màn hình LCD bên dưới bàn cân sẽ hiển thị trọng lượng của sản phẩm giúp cho người dùng dễ so sánh với kết quả của trọng lượng khi đã được hiển thị lên màn hình Hình 4.13 sẽ hiển thị trọng lượng của sản phẩm vừa được đặt lên bàn cân

Hình 4 13: Trọng lượng của sản phẩm khi đặt lên bàn cân

Hình 4 14: Nhấn nút “Bắt đầu” Hình 4 15: Nhấn nút “Xác nhận”

Như hai hình 4.14 và hình 4.15 cho ta thấy, sau khi sản phẩm được đặt lên bàn cân và vào vị trí nhận diện, thì tiến hành nhấn nút “Bắt đầu” để camera tiến hành nhận diện sản phẩm Khi đã nhấn nút “Bắt đầu” thì tiến hành tiếp tục nút “Xác nhận” để hiển thị thông tin của sản phẩm lên màn hình điện thoại Hình 4.16 sẽ cho thấy khi camera nhận diện được sản phẩm và hiển thị lên màn hình

Hình 4 16: Hiển thị thông tin sản phẩm lên màn hình điện thoại Ở hình 4.16, camera đã nhận diện và hiển thị đúng sản phẩm mà chúng ta vừa đặt lên bàn cân Theo như màn hình hiển thị thì có tên sản phẩm là lê, giá trị cho một 1 cân là

45 nghìn, trọng lượng của sản phẩm là 0.53 kg và cuối cùng là giá của 0.53kg đó là 23 nghìn 850 đồng

❖ Nhận diện quả táo màu đỏ

Sau khi camera đã nhận và hiển thị đúng thông tin của quả lê thì tiếp tục sẽ nhận diện quả táo Ở hình 4.17 và hình 4.18, ta tiến hành đặt bịch táo lên bàn cân và đẩy bàn cân vào vị trí nhận diện

Hình 4 17: Đặt sản phẩm lên bàn cân Hình 4 18: Sản phẩm vào vị trí để nhận diện

Hình 4 19: Nhấn nút “Bắt đầu” Hình 4 20: Nhấn nút “Xác nhận”

Như hai hình 4.19 và hình 4.20 cho ta thấy, sau khi sản phẩm được đặt lên bàn cân và vào vị trí nhận diện, thì tiến hành nhấn nút “Bắt đầu” để camera tiến hành nhận diện sản phẩm Khi đã nhấn nút “Bắt đầu” thì tiến hành tiếp tục nút “Xác nhận” để hiển thị thông tin của sản phẩm lên màn hình điện thoại

Hình 4 21: Hiển thị thông tin sản phẩm lên điện thoại

Hình 4.21, camera đã nhận diện và hiển thị đúng sản phẩm mà chúng ta vừa đặt lên bàn cân Theo như màn hình hiển thị thì táo là tên sản phẩm, giá trị cho một 1 cân là 85 nghìn, trọng lượng của sản phẩm là 0.76 kg và cuối cùng là giá của 0.53kg đó là 64 nghìn 600 đồng

❖ Nhận diện quả chanh màu xanh

Sau khi camera đã nhận và hiển thị đúng thông tin của các sản phẩm trên thì tiếp tục sẽ nhận diện sản phẩm có màu vàng, đó là chanh Ở hình 4.22 và hình 4.23, ta tiến hành đặt bịch chanh lên bàn cân và đẩy bàn cân vào vị trí nhận diện

Hình 4 22: Đặt sản phẩm lên bàn cân Hình 4 23: Sản phẩm vào vị trí để nhận diện

Hình 4 24: Nhấn nút “Bắt đầu” Hình 4 25: Nhấn nút “Xác nhận”

Như hai hình 4.24 và hình 4.25 cho ta thấy, sau khi sản phẩm được đặt lên bàn cân và vào vị trí nhận diện, thì tiến hành nhấn nút “Bắt đầu” để camera tiến hành nhận diện sản phẩm Khi đã nhấn nút “Bắt đầu” thì tiến hành tiếp tục nút “Xác nhận” để hiển thị thông tin của sản phẩm lên màn hình điện thoại

Hình 4 26: Hiển thị thông tin quả chanh lên điện thoại

Hình 4.26, camera đã nhận diện và hiển thị đúng sản phẩm mà chúng ta vừa đặt lên bàn cân Theo như màn hình hiển thị thì chanh là tên sản phẩm, giá trị cho một 1 cân là 16 nghìn, trọng lượng của sản phẩm là 0.33 kg và cuối cùng là giá của 0.33kg đó là 5 nghìn 280 đồng

Tuy nhiên, không những với những sản phẩm trên mà người dùng có thể thao tác với các sản phẩm trái cây khác như cam, dưa hấu, và một số trái cây và sản phẩm khác nhằm đáp ứng đủ nhu cầu cho người dùng

❖ Thanh toán bằng mã QR

Hình 4.27 và hình 4.28, sau khi người dùng đã hoàn thành tất cả các sản phẩm mà người dùng muốn thì tiến hành thanh toán các sản phẩm thông qua mã QR Mã QR được tạo ra bởi tổng số tiền mà người dùng đã mua

Giao diện người dùng

Giao diện người dùng được thể hiện ở hình 4.30 cho thấy thiết kế đơn giản để người dùng dễ thao tác và tránh gây nhiễu thông tin khách hàng mong muốn Việc này cho phép từ người nhỏ, người trẻ cho đến người già cũng có thể thao tác trên màn hình một cách dễ dàng

Hình 4 30: Giao diện người dùng

Còn về phần giao diện hiển thị thông tin sản phẩm như hình 4.31, đây là những thông tin mà người dùng nào đa phần cũng sẽ cần biết đến Nhằm mục đích quản lý số lượng cũng như sản phẩm mà họ mua

Hình 4 31: Giao diện hiển thị thông tin Hình 4 32: Giao diện khi người dùng thanh toán Ở hình 4.32, mã QR được hiển thị đơn giản và không bị rối mắt Nhằm giúp người dùng quét mã một cách nhanh chóng, chính xác và an toàn Vì ngày nay, các ứng dụng quét mã QR rất nhạy, chỉ cần người dùng đưa lướt qua một mã QR nào thì thiết bị quét cũng sẽ phát hiện ra ngay nên việc tối giản trang web thanh toán giúp khách hàng không phải lo lắng quét nhầm một mã QR nào khác

Tại giao diện ADMIN như hình 4.33 và hình 4.34, cho phéo người quản trị:

- Quản lý dữ liệu của thông tin sản phẩm

- Quản lý được lượng khách hàng

- Chỉnh sửa dữ liệu sản phẩm

- Quản lý được lượng đơn hàng của một ngày làm việc

Hình 4 33: Giao diện tài khoản ADMIN Hình 4 34: Giao diện ADMIN

Tiếp đến là hình 4.35, hình cho ta biết đây là giao diện quản lý tất cả các sản phẩm

Hình 4 35: Giao diện quản lý sản phẩm Hình 4.36, hình 4.37 và hình 4.38 là thông tin của các sản phẩm được nhập bởi quản trị viên Cho phép điều chỉnh về giá, hình ảnh của các sản phẩm

Hình 4 36: Giao diện thông tin sản phẩm táo Hình 4 37: Giao diện thông tin sản phẩm chanh

Hình 4 38: Giao diện thông tin sản phẩm lê Hình 4 39: Giao diện quản lý khách hàng

Cuối cùng là hình 4.39, đây là giao diện mà quản trị viên có thể quản lý được lượng khách mua hàng của cửa hàng Cho họ biết được số lượng sản phẩm mà cửa hàng bán ra, số lượng khách hàng mua của những ngày khác nhau để nhằm phát triển sản phẩm cũng như phát triển cửa hàng này càng tốt hơn về dịch vụ

Giao diện trang terminal khi địa chỉ API gửi tới server

Ở hình 4.40, khi có địa chỉ API gửi lệnh yêu cầu tới server thì trên terminal sẽ hiển thị tất cả thông tin của sản phẩm có trong cơ sở dữ liệu kèm với giá trị trọng lượng vừa được gửi lên Đồng thời trên giao diện người dùng cũng sẽ hiển thị tất cả thông tin mà người dùng muốn nhìn thấy

Như vậy, khi địa chỉ API gửi lệnh yêu cầu POST tới server với tất cả các sản phẩm mà camera nhận diện được, cảm biến trọng lượng lấy được giá trị cân nặng thì trên server sẽ lấy kết quả so sánh với cơ sở dữ liệu và tiến hành hiển thị ra terminal đồng thời quản trị viên có thể theo dõi quan sát và kiểm tra được lượng hàng được thanh toán thông qua thời gian được hiển thị trên màn hình terminal

Hình 4 40: Terminal hiển thị thông tin sản phẩm

Nhận xét và đánh giá hệ thống

Khi cho hệ thống hoạt động, nhóm đã nhận thấy được mô hình hoạt động đúng như yêu cầu ban đầu và mục tiêu đề ra:

Về hoạt động của phần cứng:

- Hệ thống hoạt động ổn định

- Tốc độ tính toán và lấy giá trị của loadcell nhanh và ổn định Hoạt động tốt

Về hoạt động của phần mềm

- Đôi khi đường truyền mạng bị nghẽn thì việc truyền và nhận dữ liệu chưa được nhanh

- Việc hiển thị thông tin ra màn hình đôi lúc chưa ổn định

- Dữ liệu cập nhật được đẩy lên server luôn ở chế độ sẵn sàng và liên tục

- Giao diện người dùng, giao diện ADMIN đơn giản, dễ sử dụng, dễ quản lý

Ngày đăng: 07/06/2024, 16:36

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Nguyễn Thanh Hải, “Giáo trình Xử Lý Ảnh”, Nhà xuất bản Đại học Quốc gia Thành phố Hồ Chí Minh, 2014 Sách, tạp chí
Tiêu đề: Giáo trình Xử Lý Ảnh
Nhà XB: Nhà xuất bản Đại học Quốc gia Thành phố Hồ Chí Minh
[2] Rafael C. Gonzalez and Richard E. Woods, “Digital Image Processing” Sách, tạp chí
Tiêu đề: Digital Image Processing
[3] Đỗ Năng Toàn, “Xử Lý Ảnh”, Học viện Công nghệ Bưu chính Viễn thông, 11/2013 [4] Nguyễn Quang Hoan, “Xử Lý Ảnh”, Học viện Công nghệ Bưu chính Viễn thông, 2006 Sách, tạp chí
Tiêu đề: Xử Lý Ảnh”, Học viện Công nghệ Bưu chính Viễn thông, 11/2013 [4] Nguyễn Quang Hoan, “Xử Lý Ảnh
[5] Alexander Mordvintsev & Abid K, “OpenCV-Python Tutorials Documentation”, 5/2017 Sách, tạp chí
Tiêu đề: OpenCV-Python Tutorials Documentation
[6] Adrian Holovaty, Jacob K. Moss, “The Django Book” Sách, tạp chí
Tiêu đề: The Django Book
[7] Daniel Rubio, “Beginning Django” Datasheet tham khảo Sách, tạp chí
Tiêu đề: Beginning Django
[16] Phạm Thị Thanh Thảo – Phan Trần Hoài Vũ, Đồ án tốt nghiệp “Nghiên cứu, thiết kế và thi công mô hình đếm và phân loại sản phẩm theo cân nặng, màu sắc”, TPHCM, 6/2019: https://s.net.vn/LDzV Sách, tạp chí
Tiêu đề: Nghiên cứu, thiết kế và thi công mô hình đếm và phân loại sản phẩm theo cân nặng, màu sắc
[17] Nguyễn Hiền Minh – Phan Thanh Phong, Đồ án tốt nghiệp “Ứng dụng xử lý ảnh trong hệ thống phân loại sản phẩm”, TPHCM, 6/2019: https://s.net.vn/q1d3 Sách, tạp chí
Tiêu đề: Ứng dụng xử lý ảnh trong hệ thống phân loại sản phẩm
[11] Datasheet ESP32: https://s.net.vn/kBqg Link
[12] Datasheet LCD 16x2: https://www.vishay.com/docs/37299/37299.pdf [13] Datasheet I2C: https://s.net.vn/XFWZ Link
[14] Datasheet Button: https://s.net.vn/uAYN Link
[15] Loadcell: https://hshop.vn/products/cam-bien-loadcell-5kg Bài viết tham khảo Link
[18] Sự khác biệt cơ bản giữa Vector và Raster: https://s.net.vn/X2x2 [19] Python: https://s.net.vn/hjgT Link
[20] OpenCV: https://en.wikipedia.org/wiki/OpenCV Link
[21] Image Segmentation Using Color Spaces in OpenCV + Python: https://s.net.vn/eMXP Link
[22] SPI vs. I2C vs. UART: Differences Between These Communication Interfaces: https://www.nextpcb.com/blog/spi-i2c-uart Link

HÌNH ẢNH LIÊN QUAN

Hình 2. 1: Các lĩnh vực nghiên cứu chính trong xử lý ảnh số - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 1: Các lĩnh vực nghiên cứu chính trong xử lý ảnh số (Trang 25)
Hình 2. 6: Mô hình màu HSV - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 6: Mô hình màu HSV (Trang 33)
Hình 2. 8: Táo với các sắc độ đỏ sẫm, đỏ tươi, đỏ cam - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 8: Táo với các sắc độ đỏ sẫm, đỏ tươi, đỏ cam (Trang 36)
Hình 2. 9: Chanh với các sắc độ xanh lá sẫm, xanh xá, xanh ngả vàng - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 9: Chanh với các sắc độ xanh lá sẫm, xanh xá, xanh ngả vàng (Trang 37)
Hình 2. 12:  Hình ảnh mô phỏng và thực tế của Raspberry Pi 4  Bảng 2. 1: Thông số kỹ thuật của Raspberry Pi 4 - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 12: Hình ảnh mô phỏng và thực tế của Raspberry Pi 4 Bảng 2. 1: Thông số kỹ thuật của Raspberry Pi 4 (Trang 40)
Bảng 2. 2: Thông số các chân của Raspberry Pi 4 được sử dụng trong đồ án - thiết kế và thi công hệ thống máy thanh toán tự động
Bảng 2. 2: Thông số các chân của Raspberry Pi 4 được sử dụng trong đồ án (Trang 42)
Hình 2. 13: Hình ảnh mô phỏng và thực tế của ESP32 - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 13: Hình ảnh mô phỏng và thực tế của ESP32 (Trang 43)
Hình 2. 14: Hình ảnh mô phỏng và thực tế của module HX711 - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 14: Hình ảnh mô phỏng và thực tế của module HX711 (Trang 45)
Hình 2. 15: Hình ảnh mô phỏng và thực tế của loadcell 5kg - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 15: Hình ảnh mô phỏng và thực tế của loadcell 5kg (Trang 47)
Hình 2. 18: Hình ảnh mô phỏng và thực tế của camera Pi module - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 18: Hình ảnh mô phỏng và thực tế của camera Pi module (Trang 50)
Bảng 2. 8: Thông số kỹ thuật của Camera Pi - thiết kế và thi công hệ thống máy thanh toán tự động
Bảng 2. 8: Thông số kỹ thuật của Camera Pi (Trang 51)
Hình 2. 24: Mô hình MVT ( Model – View – Template ) - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 24: Mô hình MVT ( Model – View – Template ) (Trang 59)
Hình 2. 25: Giao diện màn hình chính của phần mềm Proteus - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 25: Giao diện màn hình chính của phần mềm Proteus (Trang 61)
Hình 2. 27: Giao diện màn hình chính của phần mềm Pycharm - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 27: Giao diện màn hình chính của phần mềm Pycharm (Trang 64)
Hình 2. 28: Giao diện chính của phần mềm Visual Studio Code - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 2. 28: Giao diện chính của phần mềm Visual Studio Code (Trang 65)
Hình 3. 1: Sơ đồ khối hệ thống máy thanh toán tự động - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 3. 1: Sơ đồ khối hệ thống máy thanh toán tự động (Trang 67)
Hình 3. 4: Sơ đồ nguyên lý kết nối cảm biến trọng lượng với ESP32 - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 3. 4: Sơ đồ nguyên lý kết nối cảm biến trọng lượng với ESP32 (Trang 73)
Hình 3. 5: Sơ đồ nguyên lý kết nối màn hình LCD với ESP32 - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 3. 5: Sơ đồ nguyên lý kết nối màn hình LCD với ESP32 (Trang 74)
Bảng 3. 5: Thông số về điện áp, dòng điện tiêu thụ của các linh kiện cảm biến - thiết kế và thi công hệ thống máy thanh toán tự động
Bảng 3. 5: Thông số về điện áp, dòng điện tiêu thụ của các linh kiện cảm biến (Trang 76)
Hình 3. 8: Sơ đồ nguyên lý nguồn 5V - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 3. 8: Sơ đồ nguyên lý nguồn 5V (Trang 77)
Hình 4. 2: Kết quả nhận diện táo đỏ tươi - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 4. 2: Kết quả nhận diện táo đỏ tươi (Trang 84)
Hình 4. 1: Kết quả nhận diện táo đỏ sẫm - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 4. 1: Kết quả nhận diện táo đỏ sẫm (Trang 84)
Hình 4. 13: Trọng lượng của sản phẩm khi đặt lên bàn cân - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 4. 13: Trọng lượng của sản phẩm khi đặt lên bàn cân (Trang 91)
Hình 4. 16: Hiển thị thông tin sản phẩm lên màn hình điện thoại. - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 4. 16: Hiển thị thông tin sản phẩm lên màn hình điện thoại (Trang 92)
Hình 4. 21: Hiển thị thông tin sản phẩm lên điện thoại - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 4. 21: Hiển thị thông tin sản phẩm lên điện thoại (Trang 94)
Hình 4. 26: Hiển thị thông tin quả chanh lên điện thoại - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 4. 26: Hiển thị thông tin quả chanh lên điện thoại (Trang 96)
Hình 4. 30: Giao diện người dùng - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 4. 30: Giao diện người dùng (Trang 98)
Hình 4. 33: Giao diện tài khoản ADMIN              Hình 4. 34: Giao diện ADMIN - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 4. 33: Giao diện tài khoản ADMIN Hình 4. 34: Giao diện ADMIN (Trang 100)
Tiếp đến là hình 4.35, hình cho ta biết đây là giao diện quản lý tất cả các sản phẩm. - thiết kế và thi công hệ thống máy thanh toán tự động
i ếp đến là hình 4.35, hình cho ta biết đây là giao diện quản lý tất cả các sản phẩm (Trang 100)
Hình 4. 40: Terminal hiển thị thông tin sản phẩm - thiết kế và thi công hệ thống máy thanh toán tự động
Hình 4. 40: Terminal hiển thị thông tin sản phẩm (Trang 102)

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

TÀI LIỆU LIÊN QUAN

w