1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo môn học thiết kế hệ thống nhúng Đề tài xây dựng nhà thông minh bán tự Động sử dụng hệ thống internet of things

56 2 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 đề Xây Dựng Nhà Thông Minh Bán Tự Động Sử Dụng Hệ Thống Internet Of Things
Tác giả Trần Trung Hiếu, Đặng Quốc Ân, Hà Huy Trường, Nguyễn Quang Huy
Người hướng dẫn PGS. TS. Phạm Văn Hưởng
Trường học Học viện Kỹ thuật Mật mã
Chuyên ngành Thiết kế hệ thống nhúng
Thể loại báo cáo
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 56
Dung lượng 2,22 MB

Cấu trúc

  • CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI (10)
    • 1.1 Mục đích tài liệu (0)
    • 1.2 Phạm vi tài liệu (0)
    • 1.3 Các linh kiện và chức năng (0)
      • 1.3.1 Arduino Uno R3 (0)
      • 1.3.2 NodeMCU Esp8266 (0)
      • 1.3.3 Module cảm biến ánh sáng (0)
      • 1.3.4 Module Relay 5V DC (0)
  • CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ (21)
    • 2.1 Phát biểu bài toán (21)
    • 2.2 Mục tiêu (22)
    • 2.3 Mô hình ca sử dụng (22)
      • 2.3.1 Biểu đồ ca sử dụng của hệ thống (22)
      • 2.3.2 Đặc tả các ca sử dụng (23)
    • 2.4 Phân tích kiến trúc (26)
    • 2.5 Phân tích các ca sử dụng (30)
    • 2.6 Thiết kế phần cứng (33)
    • 2.7 Thiết kế phần mềm (34)
      • 2.7.1 Phần mềm mô phỏng (34)
      • 2.7.2 Phần mềm lâp trình (35)
      • 2.7.3 Phần mềm hệ thống (36)
    • 2.8 Thiết kế code (42)
      • 2.8.1 Code Arduino Uno (42)
      • 2.8.2 Code ESP8266 (45)
  • CHƯƠNG 3: THỰC NGHIỆM (49)
    • 3.1 Kết quả thực nghiệm (49)
      • 3.1.1 Lắp đặt hệ thống thực tế (49)
      • 3.1.2 Thực nghiệm các chức năng (51)
    • 3.2 Đánh giá kết quả (55)
    • 3.3 Kết luận chung (55)

Nội dung

Với mong muốn lắp đặt các thiết bị điện, điện tử có thể được điều khiển hoặc tựđộng hoá hoặc bán tự động, thay thế con người trong thực hiện một hoặc một số thaotác quản lý, điều khiển..

PHÂN TÍCH VÀ THIẾT KẾ

Phát biểu bài toán

Từ những ngày đầu của Internet, các nhà phát minh đã nỗ lực kết nối mọi thứ qua một mạng lưới đồng nhất, nhằm điều khiển chúng phục vụ cho nhu cầu của con người Đây chính là một biểu hiện rõ nét của Internet vạn vật (IoT).

Internet of Things (IoT) là một mạng lưới thiết bị kết nối Internet, bao gồm các thiết bị, phương tiện, phòng ốc và trang thiết bị khác Những thiết bị này được trang bị điện tử, phần mềm, cảm biến và cơ cấu chấp hành, cho phép chúng thu thập và truyền tải dữ liệu qua mạng máy tính.

Cùng với sự phát triển của cuộc cách mạng công nghiệp 4.0, IoT đang trở nên phổ biến và cần được hiểu rõ hơn trong cuộc sống hàng ngày Việc triển khai hệ thống IoT vào đời sống giúp mọi người áp dụng công nghệ này ngay trong căn nhà của mình Nhà thông minh, hay còn gọi là smarthome, là những ngôi nhà được trang bị các thiết bị điện tử tự động hóa hoặc bán tự động, thay thế con người trong việc quản lý và điều khiển Hệ thống này giao tiếp với chủ nhân thông qua bảng điều khiển điện tử, ứng dụng di động, máy tính bảng hoặc giao diện web.

Hình 2 1 : Công nghệ nhà thông minh

Mục tiêu

Mô hình “Xây dựng nhà thông minh bán tự động với hệ thống Internet of Things” mang lại giải pháp hiệu quả cho việc đưa IoT gần gũi hơn với cuộc sống hàng ngày, cho phép người dùng điều khiển các thiết bị trong gia đình từ xa thông qua Internet.

Sử dụng các thiết bị cảm biến để tự động điều khiển giúp nâng cao hiệu quả trong việc quản lý và điều chỉnh các thiết bị.

Tạo ra mô hình đáp ứng đầy đủ yêu cầu về tính năng, giao diện, giá thành và chất lượng Hệ thống thiết bị với mẫu mã đa dạng và thiết kế sang trọng sẽ mang đến sự hiện đại và tinh tế cho ngôi nhà của bạn, trở thành những vật dụng trang trí lý tưởng Đặc biệt, độ sáng và màu sắc có thể được điều chỉnh theo ánh sáng môi trường xung quanh hoặc theo sở thích cá nhân của bạn.

Cải thiện cuộc sống và công việc của con người bằng cách giảm thiểu sức lực và thời gian tiêu tốn, giúp dễ dàng kiểm soát hơn, từ đó nâng cao năng suất lao động và học tập.

Mô hình ca sử dụng

2.3.1 Biểu đồ ca sử dụng của hệ thống

Hệ thống điều khiển cho phép người dùng quản lý Thiết bị 1 bằng cách sử dụng ánh sáng hoặc thông qua Nút bấm Ngoài ra, người dùng còn có thể điều khiển tất cả 4 thiết bị thông qua Website, Ứng dụng di động và Google Assistant kết nối với Server.

2.3.2 Đặc tả các ca sử dụng

Bảng 2.1 Đặc tả ca sử dụng bật đèn

Ca sử dụng Bật đèn

Mô tả Kích hoạt thiết bị hoạt động Điều kiện trước Người dùng truy cập được vào trang điều khiển, ứng dụng

1 Người dùng click vào nút bật đèn trên trang điều khiển, ứng dụng Android.

Luồng sự kiện phụ Hệ thống mất kết nối sẽ hiện thông báo người dùng.

Bảng 2.2 Đặc tả ca sử dụng tắt đèn

Ca sử dụng Tắt đèn

Mô tả Tắt thiết bị đang hoạt động Điều kiện trước Người dùng truy cập được vào trang điều khiển, ứng dụng

1 Người dùng click vào nút tắt đèn trên trang điều khiển, ứng dụng Android.

Luồng sự kiện phụ Hệ thống mất kết nối sẽ thông báo người dùng.

Bảng 3.3 Đặc tả ca sử dụng bật quạt

Ca sử dụng Bật quạt

Mô tả Kích hoạt thiết bị hoạt động Điều kiện trước Người dùng truy cập được vào trang điều khiển, ứng dụng

1 Người dùng click vào nút bật quạt trên trang điều khiển, ứng dụng Android.

Luồng sự kiện phụ Hệ thống mất kết nối sẽ hiện thông báo người dùng.

Bảng 2.4 Đặc tả ca sử dụng tắt quạt

Ca sử dụng Tắt quạt

Mô tả Tắt thiết bị đang hoạt động Điều kiện trước Người dùng truy cập được vào trang điều khiển, ứng dụng

1 Người dùng click vào nút tắt quạt trên trang điều khiển, ứng dụng Android.

Luồng sự kiện phụ Hệ thống mất kết nối sẽ thông báo người dùng.

Bảng 4.5 Đặc tả ca sử dụng điều chỉnh độ sáng của đèn

Ca sử dụng Chỉnh độ sáng của đèn

Mô tả Điều chỉnh độ sáng của đèn

1 Người dùng điều chỉnh độ sáng của đèn bằng thanh chỉnh độ sáng trên trang điều khiển, ứng dụng Android.

2 Độ sáng của đèn được thay đổi.

Luồng sự kiện phụ Hệ thống mất kết nối sẽ hiện thông báo người dùng.

Bảng 2.6 Đặc tả ca sử dụng điều chỉnh tốc độ quay của quạt

Ca sử dụng Điều chỉnh tốc độ quay của quạt

Mô tả Điều chỉnh tốc độ quay của quạt Điều kiện trước Người dùng truy cập được vào trang điều khiển, ứng dụng

1 Người dùng điều chỉnh tốc độ quay của quạt bằng thanh chỉnh tốc độ trên trang điều khiển, ứng dụng Android.

2 Tốc độ quay của quạt được thay đổi.

Luồng sự kiện phụ Hệ thống mất kết nối sẽ thông báo người dùng.

Bảng 2.7 Đặc tả ca sử dụng hiển thị trạng thái

Ca sử dụng Hiển thị trạng thái.

Tác nhân Server, Cảm biến khí gas, Cảm biết nhiệt độ

Mô tả Hiển thị trạng thái của hệ thống Điều kiện trước Server kết nối được tới Esp để nhận thông tin.

1 Esp8266 gửi trạng thái của các thiết bị lên server.

2 Server nhận giá trị trạng thái các thiết bị.

3 Server hiển thị ra cho người dùng trạng thái các thiết bi.

Luồng sự kiện phụ Hiển thị thông báo nếu mất kết nối tới Esp để nhận thông tin.

Phân tích kiến trúc

Kiến trúc của mô hình điều khiển thiết bị được chia làm 2 phân chính: phần mềm và phần cứng.

Hình 2.7 Kiến trúc tổng quan của hệ thống

Bài viết đề cập đến việc sử dụng phần cứng bao gồm một Arduino Uno và một Esp8266, được kết nối với nhau qua các chân RX và TX theo chuẩn UART Các chân này đóng vai trò quan trọng trong việc truyền và nhận dữ liệu giữa hai thiết bị thông qua cổng serial.

Về phần mềm hệ thống sử dụng Websocket để giao tiếp realtime giữa Server và Esp8266 Một website client để điều khiển các thiết bị thông qua internet.

Hình 2.9 Luồng hoạt động của hệ thống

- Thiết bị 1 sẽ được điều khiển bằng 3 luồng:

 Luồng thứ nhất là luồng từ cảm biến ánh sáng

 Luồng thứ hai là từ Server do người dùng điều khiển thông qua Website, App Mobile, Google Assistance

 Luồng thứ ba là từ Nút bấm được kết nối với Uno

 Cảm biến sẽ liên tục gửi các giá trị digital tương ứng với điều kiện ánh sáng lúc đó (0 – có ánh sáng, 1 – không có ánh sáng) về cho Uno.

 Uno sau khi nhận được giá trị cảm biến ánh sáng sẽ gửi lệnh bật hoặc tắt thiết bị sang cho ESP

Nếu giá trị nhận được là 0, Uno sẽ gửi lệnh tắt thiết bị, ngược lại, nếu giá trị là 1, Uno sẽ gửi lệnh bật thiết bị Dựa trên các lệnh này, ESP sẽ thực hiện việc bật hoặc tắt thiết bị tương ứng.

Người dùng có thể dễ dàng bật tắt thiết bị thông qua Nút bấm trên giao diện Website hoặc App Mobile, hoặc sử dụng điều khiển bằng giọng nói thông qua Google Assistant.

 Khi có yêu cầu gửi về Server, Server xử lý yêu cầu đó và gửi lệnh về cho ESP bật tắt thiết bị.

Cảm biến ánh sáng và Server hoạt động độc lập và song song, tuy nhiên, việc điều khiển thiết bị qua Cảm biến ánh sáng không được phép ghi đè lên quyền điều khiển từ Server.

Để giải quyết vấn đề này, chúng ta cần sử dụng một biến trung gian, được tạm gọi là biến Troi, với giá trị khởi tạo ban đầu là -1.

Trong lần chạy đầu tiên, biến Troi sẽ được gán giá trị -1, trong khi đó, Uno sẽ tiếp tục nhận dữ liệu từ cảm biến ánh sáng và gửi lệnh đến ESP Tuy nhiên, trước khi thực hiện việc gửi lệnh, chúng ta sẽ cập nhật lại giá trị của biến Troi bằng giá trị hiện tại từ cảm biến ánh sáng.

Trong các lần chạy tiếp theo, khi cảm biến ánh sáng gửi dữ liệu về Uno, Uno sẽ so sánh giá trị cảm biến với biến Troi trước khi gửi lệnh cho ESP Nếu giá trị cảm biến ánh sáng không thay đổi và bằng giá trị của biến Troi, Uno sẽ không gửi lệnh cho ESP nữa.

Nếu giá trị cảm biến ánh sáng thay đổi, Arduino Uno sẽ xử lý thông tin và gửi lệnh đến ESP dựa trên giá trị mới của cảm biến ánh sáng.

 Người dùng sẽ thao tác bật tắt thiết bị thông qua việc điều khiển Nút bấm được kết nối trực tiếp với UNO thông qua cổng số 3

+ Điều khiển thiết bị thông qua Website:

Người dùng có thể bật tắt thiết bị thông qua các nút bấm trên website Mỗi nút bấm sẽ gửi yêu cầu đến server, nơi tiếp nhận và xử lý trước khi gửi lệnh cho ESP Sau khi ESP thực hiện yêu cầu bật tắt thiết bị, nó sẽ gửi trạng thái mới về server, và server sẽ cập nhật trạng thái này trên website để thông báo cho người dùng.

Hình 2.10 Luồng điều khiển qua Website

+ Điều khiển thiết bị thông qua Google Assistant:

Người dùng ra lệnh bằng giọng nói cho Google Assistant, sau đó câu lệnh được Google Assistant nhận và chuyển tới Dialogflow để phân tích các câu lệnh.

Dialogflow phân tích rồi gửi các yêu cầu điều khiển thiết bị tới Server

Máy chủ nhận yêu cầu và gửi lệnh bật/tắt thiết bị đến Esp8266, đồng thời thông báo trạng thái điều khiển thành công hoặc thất bại cho người dùng.

Hình 2.11 Luồng điều khiển qua Google Assistant

+ Điều khiển thiết bị thông qua ứng dụng di động nền tảng Android:

Người dùng tương tác với ứng dụng di động được thiết kế sẵn cho các thiết bị, trong khi yêu cầu từ ứng dụng được chuyển tiếp đến máy chủ để xử lý.

Máy chủ nhận yêu cầu và gửi nhiều lệnh bật tắt thiết bị đến ESP8266, đồng thời thông báo trạng thái điều khiển thành công hoặc thất bại về cho người dùng.

Hình 2.12 Luồng điều khiển qua ứng dụng Android

Phân tích các ca sử dụng

Hình 2.13 Biểu đồ tuần tự ca sử dụng điều khiển thiết bị bằng cảm biến

Hình 2.14 Biểu đồ tuần tự ca sử dụng điều khiển bằng Nút bấm

Hình 2.15 Biểu đồ tuần tự ca sử dụng điều khiển bằng Website

Hình 2.16 Biểu đồ tuần tự ca sử dụng điều khiển bằng ứng dụng Android

Hình 2.17 Biểu đồ tuần tự ca sử dụng điều khiển băng Giọng nói

Thiết kế phần cứng

Hình 2.18 Mô phỏng lắp đặt trên Proteus

Lắp đặt phần cứng được mô tả như trên hình vẽ:

- Arduino được kết nối với ESP 8266 NodeMCU thông qua 2 chân TX và RX.

 Chân TX của Arduino Uno nối với chân RX của ESP 8266.

 Chân RX của Arduino Uno nối với chân TX của ESP 8266.

 Chân số 9 của Arduino Uno nối với chân OUT của cảm biến ánh sáng.

 Nguồn cấp cho Arduino Uno là nguồn 5V DC cắm trực tiếp vào cổng USB trên máy tính.

- ESP 8266 được kết nối với Arduino Uno thông qua 2 chân TX và RX.

 Chân D1 được nối với một Relay 5V DC và nối tới thiết bị 1

 Chân D2 được nối với một Relay 5V DC và nối tới thiết bị 2

 Chân D3 được nối với một Relay 5V DC và nối tới thiết bị 3

 Chân D4 được nối với một Relay 5V DC và nối tới thiết bị 4

 Nguồn cấp cho ESP 8266 là nguồn 5V DC cắm trực tiếp vào cổng USB trên máy tính.

- Các chân GND và VCC của cảm biến ánh sáng được nối tới các chân GND và 5V trên Arduino Uno.

Thiết kế phần mềm

- Trong phần thiết kế của mình, để mô phỏng mạch điện tử, nhóm lựa chọn sử dụng phần mềm mô phỏng Proteus

Phần mềm vẽ Proteus, do công ty Lancenter Electronics phát triển, là công cụ lý tưởng cho việc thiết kế mạch điện tử Nó có khả năng mô tả hầu hết các linh kiện điện tử phổ biến hiện nay và hỗ trợ tích hợp với các phần mềm như 8051, PIC, Motorola và AVR.

Proteus là phần mềm mạnh mẽ cho phép mô phỏng hoạt động của các mạch điện tử, bao gồm thiết kế mạch và lập trình điều khiển cho các loại vi điều khiển như MCS.

Phần mềm bao gồm hai chương trình chính là ARES, dùng để vẽ mạch in, và ISIS, chuyên cho mô phỏng mạch Trong đó, ISIS nổi bật hơn với 12 năm phát triển và hơn 12.000 người dùng toàn cầu, con số này chắc chắn đã tăng lên đáng kể Điểm mạnh của ISIS là khả năng mô phỏng hoạt động của vi điều khiển mà không cần phần mềm hỗ trợ nào khác, đồng thời cho phép chuyển đổi dễ dàng sang ARES hoặc các phần mềm vẽ mạch in khác.

Phần mềm ISIS tạo ra hình ảnh mạch điện đẹp mắt và dễ nhìn, cho phép người dùng tùy chỉnh đường nét, màu sắc và thiết kế theo các mẫu có sẵn Bên cạnh đó, phần mềm mô phỏng mạch của Proteus còn có tính năng tự động sắp xếp đường mạch và vẽ điểm giao mạch, mang lại sự thuận tiện cho người sử dụng.

- Những đặc điểm nổi bật của phần mềm Proteus:

 Xuất ra file Netlist tương thích với các chương trình làm mạch in thông dụng

 Xuất file thống kê linh kiện cho mạch.

ISIS cung cấp nhiều công cụ mạnh mẽ để quản lý các mạch điện lớn, với khả năng xử lý mạch có hàng ngàn linh kiện, hỗ trợ thiết kế mạch chuyên nghiệp một cách hiệu quả.

 Thiết kế theo cấu trúc.

 Khả năng tự động đánh số linh kiện.

Arduino IDE là phần mềm miễn phí giúp viết mã lập trình cho bo mạch Arduino một cách nhanh chóng và dễ dàng.

Arduino IDE là phần mềm mã nguồn mở, miễn phí cho người dùng cả về tải về lẫn bản quyền Người dùng có quyền tự do sửa đổi, cải tiến và phát triển phần mềm theo các nguyên tắc chung do nhà phát hành quy định, điều này khác biệt hoàn toàn so với các phần mềm nguồn đóng.

Mặc dù Arduino IDE là phần mềm mã nguồn mở, nhưng khả năng bảo mật thông tin của nó rất ấn tượng Khi phát hiện lỗi, nhà phát hành nhanh chóng vá và cập nhật, giúp bảo vệ thông tin người dùng khỏi việc mất mát hoặc rò rỉ.

Arduino IDE sử dụng ngôn ngữ lập trình C/C++, một ngôn ngữ rất phổ biến trong cộng đồng lập trình Nó có khả năng nhận dạng mọi đoạn mã C/C++, giúp lập trình viên dễ dàng thiết kế và phát triển chương trình cho các bo mạch Arduino.

Arduino cung cấp một module quản lý bo mạch cho phép người dùng chọn và thay đổi bo mạch thông qua Menu một cách dễ dàng Quá trình này tự động cập nhật liên tục, đảm bảo rằng dữ liệu trên bo mạch và dữ liệu sửa đổi luôn đồng nhất Hơn nữa, Arduino IDE hỗ trợ tìm kiếm và sửa lỗi kịp thời, giúp ngăn ngừa tình trạng bo mạch hoạt động với mã lỗi quá lâu, từ đó giảm thiểu nguy cơ hư hỏng và cải thiện tốc độ xử lý.

Arduino IDE cung cấp hơn 700 thư viện miễn phí, được phát triển và chia sẻ bởi Arduino Software cùng với cộng đồng Arduino Người dùng có thể dễ dàng sử dụng những thư viện này cho các dự án cá nhân mà không phải tốn chi phí.

- Arduino IDE hoạt động trên 3 hệ điều hành phổ biến nhất là Windows, Mac

Hệ điều hành OS và Linux cho phép người dùng truy cập phần mềm mọi lúc, mọi nơi chỉ cần có máy tính Bên cạnh đó, người dùng còn có thể sử dụng các công cụ từ đám mây, giúp các lập trình viên linh hoạt trong việc tạo và lưu trữ dự án của họ trên nền tảng đám mây hoặc phát triển chương trình trên máy tính và tải lên bo mạch Arduino.

- Giao tiếp giữa Arduino Uno và ESP 8266 :

 Sử dụng 2 chân TX và RX của Arduino Uno và ESP8266 để giao tiếp dữ liệu qua lại với nhau.

UART, hay bộ thu-phát không đồng bộ đa năng, là một trong những phương thức giao tiếp kỹ thuật số đơn giản và lâu đời nhất giữa các thiết bị Thiết bị UART có thể được tìm thấy trong mạch tích hợp (IC) hoặc dưới dạng các thành phần riêng lẻ Chúng giao tiếp giữa hai nút bằng cách sử dụng một cặp dây dẫn và một nối đất chung.

Trong một sơ đồ giao tiếp UART:

 Chân Tx (truyền) của một chip kết nối trực tiếp với chân Rx (nhận) của chip kia và ngược lại Thông thường, quá trình truyền sẽ diễn ra ở 3.3V hoặc 5V

 Dữ liệu truyền đến và đi từ UART song song với thiết bị điều khiển (ví dụ: CPU).

 Khi gửi trên chân Tx, UART đầu tiên sẽ dịch thông tin song song này thành nối tiếp và truyền đến thiết bị nhận.

UART thứ hai nhận dữ liệu qua chân Rx và chuyển đổi nó thành dạng song song để giao tiếp với thiết bị điều khiển của nó.

UART truyền dữ liệu nối tiếp, theo một trong ba chế độ:

 Full duplex: Giao tiếp đồng thời đến và đi từ mỗi master và slave

 Half duplex: Dữ liệu đi theo một hướng tại một thời điểm

 Simplex: Chỉ giao tiếp một chiều Ưu và nhược điểm của UART Ưu điểm

 Chỉ sử dụng hai dây

 Không cần tín hiệu clock

 Có một bit chẵn lẻ để cho phép kiểm tra lỗi

 Cấu trúc của gói dữ liệu có thể được thay đổi miễn là cả hai bên đều được thiết lập cho nó

 Phương pháp có nhiều tài liệu và được sử dụng rộng rãi

 Kích thước của khung dữ liệu được giới hạn tối đa là 9 bit

 Không hỗ trợ nhiều hệ thống slave hoặc nhiều hệ thống master

 Tốc độ truyền của mỗi UART phải nằm trong khoảng 10% của nhau

- Giao tiếp giữa ESP8266 và Server Để nhận và gửi dữ liệu lên Server, còn sử dụng thêm Websocket để làm việc này:

 Giao thức WebSocket là một giao thức được sử dụng rộng rãi cho việc phát triển ứng dụng real-time.

Các phương thức mô phỏng kết nối full-duplex trước đây dựa trên polling, một kỹ thuật đồng bộ trong đó client gửi yêu cầu đến server để kiểm tra thông tin Client nhận phản hồi từ server ngay cả khi không có thông tin sẵn có Polling chỉ hiệu quả khi thời gian có thông điệp có thể dự đoán Tuy nhiên, trong hầu hết các ứng dụng real-time, tần suất xuất hiện thông điệp thường không thể đoán trước, và phương pháp này còn khiến client mở và đóng nhiều kết nối không cần thiết.

Thiết kế code

The provided code initializes a task management system with a constant for the number of tasks and defines the state of a device sensor It sets up an interrupt pin and manages the interrupt state using a volatile variable The code includes two task functions, Task1 and Task2, which are likely intended to handle specific operations related to the sensor and device state.

TaskHandle_t TaskHandle_1; // handler for Task1

TaskHandle_t TaskHandle_2; // handler for Task2 void setup()

Serial.begin(9600); pinMode(CBAS, INPUT); pinMode ( interruptPin , INPUT_PULLUP) ; attachInterrupt ( digitalPinToInterrupt ( interruptPin ), ChangeLedStatus, FALLING) xTaskCreate(Task1, "Task1", 100, NULL, 1,&TaskHandle_1); xTaskCreate(Task2, "Task2", 100, NULL, 1,&TaskHandle_2); vTaskStartScheduler();

{ while (1) { if (digitalRead(CBAS) != DEVICE_STATE) { if (digitalRead(CBAS) == 1) {

Serial.println("DEVICE 1"); // Thiết bị 1 sáng.

Serial.println("DEVICE 0"); // Thiết bị 1 tắt.

} delay(1000);// Dừng một giây giữa các lần gửi

{ if (interuptState != beforeInteruptState) { if (interuptState == 1) { beforeInteruptState = 1;

Serial.println("DEVICE 1"); // Thiết bị 1 sáng.

Serial.println("DEVICE 0"); // Thiết bị 1 tắt.

} delay(1000);// Dừng một giây giữa các lần gửi

- Code của Arduino được áp dụng FreeTOS và chia làm 2 Task chính, và 1 hàm setup():

Task 1 sẽ đảm nhận việc điều khiển Thiết bị 1 thông qua Cảm biến ánh sáng kết nối ở chân số 9 (int CBAS = 9) Nó sẽ đọc và so sánh giá trị Cảm biến ánh sáng hiện tại với giá trị trước đó (DEVICE_STATE) Nếu có sự thay đổi, Task 1 sẽ kiểm tra giá trị mới; nếu là 1, nó sẽ gửi lệnh bật Thiết bị 1 (DEVICE 1) đến ESP và cập nhật DEVICE_STATE thành 1 Ngược lại, nếu giá trị là 0, nó sẽ gửi lệnh tắt Thiết bị 1 (DEVICE 0) và cập nhật DEVICE_STATE thành 0.

Task 2 sẽ đảm nhận việc điều khiển Thiết bị 1 thông qua Nút bấm kết nối ở chân số 3 (const byte interruptPin = 3) Mỗi khi Người dùng nhấn nút, giá trị của interuptState sẽ được cập nhật trong hàm ChangeLedStatus() Task 2 sẽ so sánh giá trị interuptState với giá trị trước đó (beforeInteruptState) Nếu có sự thay đổi, Task 2 sẽ kiểm tra xem giá trị mới là 0 hay 1; nếu là 1, lệnh bật Thiết bị 1 sẽ được gửi đi.

1) sang ESP và lưu giá trị beforeInteruptState = 1 Ngược lại, nếu là 0 thì sẽ gửi lệnh tắt Thiết bị 1 (DEVICE 0) sang ESP và lưu giá trị beforeInteruptState = 0 Mục đích của việc kiểm tra này là để kiểm soát lỗi Task 2 liên tục gửi lệnh sang ESP mà không có thao tác nhấn của người dùng.

- 2 Task chính của Uno sẽ được khai báo và lập lịch để luân phiên chạy cứ sau mỗi 1s.

To establish a WebSocket connection, initialize the WebSocketsClient with the specified SSID "Tenda" and password "12312344" Connect to the host "iot-app-nhom11.herokuapp.com" on port 80, and set the path to "/" Define the device pins as D1, D2, D3, and D4, while keeping track of the active sensor with the variable activeSenser initialized to -1 Implement the webSocketEvent function to handle different WebSocket events, starting with the case for WStype_DISCONNECTED.

Serial.println("Disconnected!"); break; case WStype_CONNECTED:

Serial.println(" Da ket noi toi server");

Serial.printf("Get text: %s :\n", payload); strcmp((char*)payload, "LED_ON"); if (strcmp((char*)payload, "LED_ON") == 0) { digitalWrite(DEVICE1, 1); webSocket.sendTXT("DEVICE1_ON");

} else if (strcmp((char*)payload, "LED_OFF") == 0) { digitalWrite(DEVICE1, 0); webSocket.sendTXT("DEVICE1_OFF");

} else if (strcmp((char*)payload, "SENSER_DEVICE1_DISABLE") == 0) { activeSenser = 0; webSocket.sendTXT("SENSER_DEVICE1_DISABLE");

} else if (strcmp((char*)payload, "SENSER_DEVICE1_ACTIVE") == 0) { activeSenser = 1; webSocket.sendTXT("SENSER_DEVICE1_ACTIVE");

} if (strcmp((char*)payload, "LED_ON2") == 0) { digitalWrite(DEVICE2, 1); webSocket.sendTXT("DEVICE2_ON");

} else if (strcmp((char*)payload, "LED_OFF2") == 0) { digitalWrite(DEVICE2, 0); webSocket.sendTXT("DEVICE2_OFF");

} if (strcmp((char*)payload, "LED_ON3") == 0) { digitalWrite(DEVICE3, 1); webSocket.sendTXT("DEVICE3_ON");

} else if (strcmp((char*)payload, "LED_OFF3") == 0) { digitalWrite(DEVICE3, 0); if (strcmp((char*)payload, "LED_ON4") == 0) { digitalWrite(DEVICE4, 1); webSocket.sendTXT("DEVICE4_ON");

} else if (strcmp((char*)payload, "LED_OFF4") == 0) { digitalWrite(DEVICE4, 0); webSocket.sendTXT("DEVICE4_OFF");

Serial.println("ESP8266 Websocket Client");

WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500);

Serial.println("."); pinMode(DEVICE1, OUTPUT); pinMode(DEVICE2, OUTPUT); pinMode(DEVICE3, OUTPUT); pinMode(DEVICE4, OUTPUT); digitalWrite(DEVICE1, 0); digitalWrite(DEVICE2, 0); digitalWrite(DEVICE3, 0); digitalWrite(DEVICE4, 0);

} webSocket.begin(ip_host, port, path); webSocket.onEvent(webSocketEvent); pinMode(DEVICE1, OUTPUT); pinMode(DEVICE2, OUTPUT); pinMode(DEVICE3, OUTPUT); pinMode(DEVICE4, OUTPUT); sCmd.addCommand("DEVICE", DEVICE_CONTROL);

} void loop() { sCmd.readSerial(); webSocket.loop();

} void DEVICE_CONTROL() { char *arg; arg = sCmd.next(); int value = atoi(arg); if (activeSenser != 0) { digitalWrite(DEVICE1, value); if (value == 0) { webSocket.sendTXT("DEVICE1_OFF");

} else { webSocket.sendTXT("DEVICE1_ON");

Serial.println("da nhan lenh!");

- Code của ESP sẽ chỉ gồm 3 hàm chính và không áp dụng FreeTOS:

+ Hàm setup() dùng để khởi tạo các thành phần trong code và kết nối tới Server

+ Hàm loop() dùng để tiếp nhận và xử lý yêu cầu từ phía Uno gửi sang

THỰC NGHIỆM

Kết quả thực nghiệm

3.1.1 Lắp đặt hệ thống thực tế

Mô hình thực tế bao gồm 4 thiết bị: một bóng đèn lớn (thiết bị 1 - Đèn) và ba bóng đèn LED nhỏ tương ứng với thiết bị 2 (Quạt), thiết bị 3 (Điều hòa) và thiết bị 4 (Camera) Thiết kế mô hình đảm bảo các thiết bị nổi bật trên bề mặt, trong khi cảm biến ánh sáng được gắn ở bên hông hộp Hệ thống dây điện, Arduino Uno, ESP và Relay được giấu kín bên trong hộp để tạo sự gọn gàng và thẩm mỹ.

Thiết bị 1 sẽ được kết nối với Relay và Phích cắm để sử dụng nguồn điện 220V Relay nhận nguồn dương từ cổng 5V và nguồn âm từ cổng GND của Uno, trong khi tín hiệu được kết nối vào chân D1 của Esp để điều khiển bật tắt thiết bị.

Các thiết bị 2, 3 và 4 sẽ được kết nối chung cực âm vào chân GND của ESP, trong khi cực dương sẽ được nối lần lượt vào các chân D2, D3 và D4 của ESP để thực hiện điều khiển.

Cảm biến ánh sáng sẽ được cắm vào nguồn dương 5V, GND, và chân số 9 của Uno để có thể hoạt động và gửi tín hiệu về.

Uno và ESP sẽ được kết nối để trao đổi dữ liệu qua giao thức UART, với nguyên tắc kết nối như sau: chân RX của ESP sẽ được kết nối với chân TX của Uno và ngược lại, chân TX của ESP sẽ được kết nối với chân RX của Uno.

Hình 3.26 Giao diện Website điều khiển

Giao diện website điều khiển được thiết kế với 4 nút bấm tương ứng với 4 thiết bị và một màn hình hiển thị thông báo kết nối thành công đến server, cũng như trạng thái bật LED 1 Ngoài ra, có một nút bấm để bật tắt chế độ điều khiển tự động LED 1 bằng cảm biến ánh sáng Khi thiết bị tắt, biểu tượng bóng đèn sẽ tắt và nút bấm hiển thị “ON”, trong khi khi thiết bị bật, biểu tượng bóng đèn sáng và nút bấm hiển thị “OFF”.

Hình 3.27 Giao diện ứng dụng điện thoại

Giao diện của ứng dụng di động được thiết kế tương tự như giao diện website, với bốn nút bấm tương ứng cho bốn thiết bị Sự khác biệt duy nhất là ứng dụng di động không có màn hình hiển thị thông báo như trên website.

3.1.2 Thực nghiệm các chức năng

Trường hợp 1: Điều khiển thiết bị thông qua cảm biến

Hình 3.28 Điều khiển Thiết bị 1 qua Cảm biến ánh sáng

Trường hợp 2: Điều khiển Thiết bị 1 thông qua Nút bấm

Hình 3.29 Điều khiển Thiết bị 1 qua Nút bấm

Trường hợp 3: Điều khiển thiết bị thông qua Website

Trường hợp 4: Điều khiển thiết bị trên Web control khi cảm biến đang hoạt động

Hình 3.31 Điều khiển thiết bị kết hợp cảm biến

Trường hợp 5: Điều khiển thiết bị trên ứng dụng Android

Hình 3.32 khiển thiết bị trên App Mobile

Trường hợp 6: Điều khiển thiết bị thông qua Google Assistant

Hình 3.33 Điều khiển thiết bị bằng giọng nói qua Google Assistant

Trường hợp 7: Đồng bộ giữa các thiết bị điều khiển

Hình 3.34 Đồng bộ giữa các thiết bị điều khiển

Đánh giá kết quả

Ưu điểm: Các chức năng cơ bản của hệ thống hoạt động được và tương đối ổn định:

 Bật tắt Thiết bị 1 thông qua cảm Biến ánh sáng : Hoạt động

 Bật tắt Thiết bị 1 thông qua Nút bấm : Hoạt động

 Bật tắt thiết bị thông qua giao diện Website : Hoạt động

 Bật tắt thiết bị trên ứng dụng Android : Hoạt động

 Bật tắt thiết bị qua Google Assistant : Hoạt động

 Điều khiển bật tắt thiết bị mà không bị cảm biến ánh sáng ghi đè giá trị.

 Hiển thị trạng thái của thiết bị khi có thay đổi.

 Đồng bộ giữa các thiết bị điều khiển.

 FreeTOS giúp việc điều khiển Thiết bị 1 thông qua Cảm biến ánh sáng và Nút bấm hoạt động được trơn tru và đồng bộ hơn

 Hệ thống chưa ổn định hoàn toàn.

 Cảm biến bị nhiễu do nhiều tác nhân ánh sáng khác.

 Google Assistant không nhận đúng câu lệnh muốn thực hiện

 Phụ thuộc vào tốc độ Internet, xảy ra tình trạng kết nối kém giữa ESP tớiServer, Web control, ứng dụng Android.

Kết luận chung

- Đề tài này đã giúp nhóm củng cố và nắm được kiến thức về Hệ điều hành Nhúng thời gian thực.

Mô hình IoT mà nhóm phát triển đã giải quyết hiệu quả bài toán tiếp cận con người, nâng cao năng suất lao động và cải thiện chất lượng cuộc sống.

- Là cơ sở để tiếp tục học tập và phát triển công nghệ thông tin sau này.

Ngày đăng: 26/10/2024, 22:52

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w