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

Thiết kế và thi công hệ thống điều khiển các thiết bị điện trong nhà sử dụng công nghệ lora

101 10 0

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết Kế Và Thi Công Hệ Thống Điều Khiển Các Thiết Bị Điện Trong Nhà Sử Dụng Công Nghệ Lora
Tác giả Lê Anh Quang, Trần Hữu Nghĩa
Người hướng dẫn TS. Nguyễn Thanh Nghĩa
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 2023
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 101
Dung lượng 9,72 MB

Cấu trúc

  • Chương 1. GIỚI THIỆU ĐỀ TÀI (14)
    • 1.1 Đặt vấn đề (14)
    • 1.2 Mục tiêu (15)
    • 1.3 Nội dung nghiên cứu (15)
    • 1.4 Giới hạn (16)
    • 1.5 Bố cục (16)
  • Chương 2. CƠ SỞ LÝ THUYẾT (0)
    • 2.1 Công nghệ IoT và hệ thống nhà thông minh (0)
    • 2.2 Bảo mật bằng phương pháp nhận diện gương mặt (0)
    • 2.3 Giới thiệu phần cứng (21)
      • 2.3.1 Arduino Mega 2560 (21)
      • 2.3.2 Andruino Uno (23)
      • 2.3.3 Raspberry Pi 3 Model B (24)
      • 2.3.4 Module Wifi ESP8266 (25)
      • 2.3.5 Module thu phát Lora RA-02 SX1278 (26)
      • 2.3.6 Module Relay 4 kênh và 8 kênh (27)
      • 2.3.7 Module LCD 16x2 và I2C (28)
      • 2.3.8 Camera USB 2.0 (29)
      • 2.3.9 Cảm biến khí gas MQ2 (30)
      • 2.3.10 Cảm biến nhiệt độ, độ ẩm DHT11 (31)
      • 2.3.12 Đèn và quạt (0)
      • 2.3.13 Bàn phím ma trận 3x4 (0)
      • 2.3.14 Khối nguồn (33)
    • 2.4 Các chuẩn truyền dữ liệu (36)
      • 2.4.1 Chuẩn truyền thông UART (36)
      • 2.4.2 Chuẩn truyền thông SPI (38)
  • Chương 3. THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG (0)
    • 3.1 Giới thiệu (42)
    • 3.2 Thiết kế hệ thống (42)
      • 3.2.1 Thiết kế sơ đồ khối hệ thống (42)
      • 3.2.2 Thiết kế mạch – Tầng trệt (44)
      • 3.2.3 Thiết kế mạch – Tầng 2 (49)
    • 3.3 Sơ đồ nguyên lý toàn bộ hệ thống (51)
  • Chương 4. THI CÔNG HỆ THỐNG (54)
    • 4.1 Giới thiệu (54)
    • 4.2 Thi công hệ thống (54)
      • 4.2.1 Mô hình hệ thống tầng 1 (54)
      • 4.2.2 Mô hình hệ thống tầng 2 (56)
      • 4.2.3 Khối nguồn (57)
    • 4.3 Đóng gói và thi công mô hình (0)
    • 4.4 Lập trình hệ thống (0)
      • 4.4.1 Lưu đồ giải thuật (58)
      • 4.4.2 Thiết kế giao diện trên App Android (64)
    • 4.5 Hướng dẫn sử dụng (76)
  • Chương 5. KẾT QUẢ - NHẬN XÉT – ĐÁNH GIÁ (0)
    • 5.1 Giới thiệu (77)
    • 5.2 Kết quả đạt được (77)
    • 5.3 Nhận xét – Đánh giá (0)
  • Chương 6. KẾT LUẬN - HƯỚNG PHÁT TRIỂN (0)
    • 6.1 Kết luận (0)
    • 6.2 Hướng phát triển (83)
  • TÀI LIỆU THAM KHẢO (84)
  • PHỤ LỤC (85)

Nội dung

GIỚI THIỆU ĐỀ TÀI

Đặt vấn đề

Ngày nay, sự phát triển không ngừng của khoa học và công nghệ đã làm cho thế giới trở nên văn minh và hiện đại hơn Kỹ thuật điện tử đã tạo ra nhiều thiết bị với độ chính xác cao, tốc độ nhanh và gọn nhẹ, rất cần thiết cho hiệu quả công việc Một trong những ứng dụng quan trọng của công nghệ điện tử là kỹ thuật điều khiển từ xa, giúp quản lý và điều khiển thiết bị hiệu quả, tiết kiệm thời gian cho con người.

Bắt nguồn từ những nhu cầu cần thiết đó và lấy cảm hứng từ các dự án như:

Nhóm em đã quyết định thực hiện đề tài “Thiết kế và thi công hệ thống điều khiển các thiết bị điện trong nhà sử dụng công nghệ Lora” nhằm cải thiện khả năng điều khiển nhiều thiết bị thông qua chuẩn truyền không dây Lora Hệ thống này không chỉ cho phép điều khiển các thiết bị điện mà còn giám sát các cảm biến và camera nhận diện gương mặt, đồng thời tích hợp hệ thống nhập mật khẩu để mở cửa Điều này giúp nâng cao tính năng và sự tiện lợi trong việc quản lý thiết bị trong nhà.

Nội dung chính của đề tài:

• Sử dụng Arduino Mega 2560 làm board trung tâm xử lý và điều khiển các thiết bị tại tầng trệt.

• Sử dụng Arduino Uno làm board trung tâm xử lý và điều khiển các thiết bị tại tầng 2.

• Sử dụng Raspberry Pi 3 model B xử lý, nhận diện khuôn mặt qua camera để đóng mở cửa tự động,

• Điều khiển các thiết bị bằng app Android kết hợp WiFi và sóng Lora.

• Giám sát trạng thái hoạt động, điều khiển các thiết bị, giá trị cảm biến qua app Android và LCD hiển thị tình trạng của cửa ra vào

• Cảnh báo khi các giá trị cảm biến vượt ngưỡng cho phép.

Mục tiêu

Đề tài “Thiết kế và thi công hệ thống điều khiển các thiết bị điện trong nhà sử dụng công nghệ Lora” tập trung vào việc áp dụng công nghệ Lora để tối ưu hóa việc điều khiển thiết bị điện trong không gian sống Hệ thống này không chỉ giúp nâng cao hiệu quả sử dụng năng lượng mà còn mang lại sự tiện lợi cho người dùng thông qua khả năng điều khiển từ xa Bên cạnh đó, việc triển khai hệ thống còn đảm bảo tính linh hoạt và mở rộng, phù hợp với nhu cầu ngày càng cao của người tiêu dùng trong bối cảnh công nghệ thông minh phát triển mạnh mẽ.

- Thiết kế và thi công mạch giám sát và điều khiển các thiết bị qua app Android ở 2 tầng

- Thiết kế và thi công hệ thống cửa ra vào có bảo mật và nhận diện gương mặt để mở cửa tự động

- Thi công mô hình nhà 2 tầng và chạy thử nghiệm.

Nội dung nghiên cứu

• Tìm hiểu và tham khảo các tài liệu, giáo trình, nghiên cứu các chủ đề, các nội dung liên quan đến đề tài

• Thiết kế sơ đồ khối và sơ đồ nguyên lý cho hệ thống

Thiết kế và thi công mạch điều khiển cho các thiết bị ở tầng trệt bao gồm servo, cảm biến nhiệt độ và độ ẩm, cảm biến khí gas, đèn, quạt và module Lora.

Thiết kế và thi công mạch giao tiếp giữa Raspberry Pi 3 model B và camera nhận diện gương mặt, cho phép tự động đóng mở cửa Hệ thống còn được trang bị LCD để hiển thị tình trạng cửa, cùng với tính năng bảo mật thông qua việc nhập mật khẩu.

• Thiết kế và thi công mạch xử lý điều khiển các thiết bị ở tầng 2 như: đèn, quạt và module Lora

• Thiết kế app Android giám sát và điều khiển các thiết bị, hiển thị giá trị cảm biến

• Viết các chương trình để giao tiếp giữa ESP8266, Raspberry Pi, Adruino Uno, Adruino Mega và Module Lora.

Giới hạn

• Mô hình hệ thống gồm 2 tầng nên số lượng node chỉ có 2

• Tầng 1 sử dụng 3 quạt, 4 đèn và cảm biến nhiệt độ- độ ẩm, khí gas

• Tầng 2 sử dụng 2 đèn và 2 quạt

• Hệ thống mở cửa tự động gồm có camera, màn hình LCD, bàn phím và servo để đóng mở cửa

• Khoảng cách tối đa giữa 2 tầng để hệ thống có thể hoạt động là 5 km đến

15 km nhưng trong đề tài đồ án này nhóm chúng em làm mô hình nhà 2 tầng nên khoảng cách ngắn.

Bố cục

• Chương 1: Giới thiệu đề tài

Chương này giới thiệu lý do chọn đề tài, mục tiêu nghiên cứu, nội dung chính, các giới hạn về thông số, và cấu trúc của đồ án.

• Chương 2: Cơ sở lý thuyết

Chương này khám phá các lý thuyết liên quan đến vấn đề mà đề tài sẽ áp dụng trong quá trình thiết kế và thi công.

• Chương 3: Thiết Kế và Tính Toán

Chương này giới thiệu tổng quan về các yêu cầu của đề tài mà mình thiết kế và các tính toán, thiết kế gồm những phần nào

• Chương 4: Thi công hệ thống

Bài viết trình bày các mạch thiết kế và quy trình lắp ráp mô hình, đồng thời hướng dẫn cài đặt và sử dụng phần mềm lập trình Ngoài ra, bài viết còn cung cấp các thao tác chi tiết để sử dụng hệ thống một cách hiệu quả.

• Chương 5: Kết Luận, Nhận xét và Đánh giá

Chương này đưa ra nhận xét và đánh giá sản phẩm mô hình đã hoàn thành

• Chương 6: Kết Luận và Hướng phát triển

Chương này tổng kết các kết quả đạt được sau quá trình nghiên cứu và thi công, đồng thời chỉ ra những hạn chế tồn tại Từ đó, chúng tôi rút ra kết luận và đề xuất hướng phát triển nhằm giải quyết các vấn đề còn tồn đọng, góp phần hoàn thiện đồ án hơn nữa.

Chương 2 CƠ SỞ LÝ THUYẾT

2.1 Công nghệ IoT và hệ thống nhà thông minh

Internet of Things (IoT) đang ngày càng trở nên phổ biến, ảnh hưởng sâu sắc đến đời sống con người IoT kết nối các thiết bị qua internet, giúp quản lý và điều khiển hoạt động trong nhà thông minh, văn phòng, công trình xây dựng và thành phố dễ dàng hơn Nhờ vào các cảm biến, IoT hỗ trợ theo dõi sức khỏe, phát hiện sớm vấn đề sức khỏe và tự động điều khiển thiết bị để tăng cường an toàn cho người dùng Với sự tiến bộ công nghệ, IoT có ứng dụng tiềm năng trong nhiều lĩnh vực như sản xuất, nông nghiệp, giải trí và du lịch, hứa hẹn mang lại nhiều lợi ích cho cuộc sống trong tương lai.

Ứng dụng của IoT trong nhà thông minh đã cải thiện đáng kể trải nghiệm sống của con người, mang lại nhiều tiện ích Với các thiết bị kết nối thông minh như đèn, máy lạnh, máy giặt, bếp điện và cửa ra vào, việc điều khiển và quản lý các thiết bị trong nhà trở nên dễ dàng và thuận tiện hơn bao giờ hết.

Hình 2.1:Hệ thống nhà thông minh

Nhà thông minh cho phép người dùng điều khiển và giám sát thiết bị qua ứng dụng điện thoại, giúp tắt đèn, máy lạnh và kiểm tra khóa cửa từ xa Người dùng có thể mở cửa cho khách mà không cần phải có mặt tại chỗ Để sử dụng hiệu quả, cần có kiến thức và kỹ năng cài đặt thiết bị IoT Các nhà sản xuất nên cung cấp giải pháp tối ưu để người dùng dễ dàng tiếp cận và sử dụng sản phẩm một cách tiện lợi và an toàn.

Việc phát triển sản phẩm nhà thông minh gặp nhiều thách thức, đặc biệt là về bảo mật thông tin và tính ổn định của hệ thống Để đảm bảo chất lượng sản phẩm, các nhà sản xuất cần đầu tư vào nghiên cứu và phát triển công nghệ, cùng với việc kiểm tra và thử nghiệm kỹ lưỡng trước khi ra mắt thị trường.

Trong tương lai, sản phẩm nhà thông minh sẽ trở nên phổ biến và trở thành phần thiết yếu trong cuộc sống Sự kết hợp giữa công nghệ và cuộc sống sẽ giúp tiết kiệm thời gian, công sức, đồng thời tạo ra môi trường sống tiện nghi và an toàn hơn.

2.2 Bảo mật bằng phương pháp nhận diện gương mặt

Nhận dạng khuôn mặt là một phương pháp sinh trắc học nhằm xác định hoặc xác minh danh tính cá nhân bằng cách so sánh hình ảnh chụp trực tiếp hoặc hình ảnh kỹ thuật số với dữ liệu đã lưu trữ Phương pháp này thuộc lĩnh vực nghiên cứu của ngành Biometrics, tương tự như nhận dạng vân tay và nhận dạng mống mắt.

So với nhận dạng vân tay và mống mắt, nhận dạng khuôn mặt sở hữu nguồn dữ liệu phong phú hơn, vì chúng ta có thể dễ dàng tìm thấy hình ảnh khuôn mặt trong nhiều tấm ảnh và video clip trực tuyến Hơn nữa, công nghệ nhận dạng khuôn mặt không yêu cầu sự tương tác có kiểm soát như các phương pháp nhận dạng khác, vì nhận dạng vân tay và mống mắt cần sự hợp tác của người dùng trong môi trường được kiểm soát.

Hệ thống nhận dạng khuôn mặt được sử dụng chủ yếu cho mục đích an ninh như kiểm soát ra vào tại tòa nhà, sân bay, máy ATM, và phát hiện tội phạm ở nơi công cộng Hệ thống này hoạt động bằng cách nhận đầu vào là hình ảnh kỹ thuật số hoặc khung hình video, và đầu ra là việc xác định hoặc xác minh danh tính của người trong hình ảnh hoặc video Quy trình nhận dạng khuôn mặt thường được chia thành ba bước chính: phát hiện khuôn mặt, trích rút đặc trưng và nhận dạng khuôn mặt.

Hình 2.2:Hệ thống nhận diện khuôn mặt

Phát hiện khuôn mặt là chức năng chính nhằm xác định sự xuất hiện của khuôn mặt trong hình ảnh hoặc video Tỉ lệ phát hiện phụ thuộc vào nhiều yếu tố như độ sáng, hướng khuôn mặt, biểu cảm cảm xúc và các yếu tố môi trường khác Để nâng cao hiệu quả của hệ thống nhận dạng, hình ảnh khuôn mặt cần được chuẩn hóa về kích thước và ánh sáng sau khi phát hiện.

Sau khi phát hiện khuôn mặt trong ảnh, bước tiếp theo là trích rút các đặc trưng của khuôn mặt Quá trình này tạo ra một vector đặc trưng, đại diện cho từng khuôn mặt và đảm bảo tính duy nhất của nó.

Nhận dạng khuôn mặt là quá trình xác định và phân tích các đặc trưng của khuôn mặt từ hình ảnh đầu vào, sau đó so sánh các đặc trưng này với cơ sở dữ liệu khuôn mặt hiện có.

CƠ SỞ LÝ THUYẾT

Giới thiệu phần cứng

Arduino Mega 2560 là một sản phẩm nổi bật trong dòng mạch Mega, vượt trội hơn so với Arduino Uno với 54 chân digital IO và 16 chân analog IO Bộ nhớ flash của MEGA được nâng cấp đáng kể, gấp bốn lần so với phiên bản UNO R3 Với khả năng điều khiển nhiều thiết bị ngoại vi và cảm biến khác nhau, Arduino Mega 2560 còn trang bị các tính năng như cổng USB và các chân giao tiếp UART, I2C, SPI.

Arduino Mega 2560 là một bo mạch phổ biến trong lĩnh vực ứng dụng nhúng và điện tử, được sử dụng cho các hệ thống kiểm soát, tự động hóa, đo lường, dự án robot và ứng dụng IoT Với khả năng mở rộng qua các mô-đun ngoại vi, mạch phụ trợ và shield Arduino, nó cho phép người dùng dễ dàng tùy chỉnh và phát triển các ứng dụng theo nhu cầu của mình.

Thông số kỹ thuật của Arduino Mega 2560:

Mạch Arduino Mega 2560 có 70 chân Digital, bao gồm 54 chân số từ 0-53 và 16 chân analog từ 0-15, có thể được sử dụng làm đầu vào hoặc đầu ra thông qua các hàm Mode(), digitalWrite() và digitalRead() Điện áp trên mỗi chân là 5V với dòng tối đa 20mA, cùng với điện trở kéo lên từ 20-50 ohm Để bảo vệ board mạch, dòng tối đa cho mỗi chân I/O không được vượt quá 40mA.

Arduino Mega2560 có 16 chân analog (A0 → A15) với độ phân giải tín hiệu 10 bit, cho phép đọc giá trị điện áp trong khoảng 0V đến 5V Bằng cách sử dụng chân AREF trên board, bạn có thể cung cấp điện áp tham chiếu, ví dụ nếu cấp 2.5V vào chân này, các chân analog sẽ đo điện áp trong khoảng 0V đến 2.5V mà vẫn giữ độ phân giải 10 bit.

Arduino Uno có 4 cặp chân Serial, trong đó chân 0 (RX) và chân 1 (TX) được sử dụng để truyền (TX) và nhận (RX) dữ liệu TTL Serial Thông qua 2 chân này, Arduino Uno có khả năng giao tiếp với các thiết bị khác.

Chân PWM trên mạch có 15 chân (~): 3, 5, 6, 9, 10,… cho phép xuất xung PWM với độ phân giải 8 bit thông qua hàm analogWrite() Điều đặc biệt là điện áp đầu ra ở các chân này có thể điều chỉnh từ 0V đến 5V, khác với các chân khác chỉ có mức cố định 0V và 5V.

Chân giao tiếp SPI bao gồm 22 (SS), 24 (MOSI), 25 (MISO) và 23 (SCK) Bên cạnh các chức năng thông thường, bốn chân này còn được sử dụng để truyền dữ liệu thông qua giao thức SPI với các thiết bị khác.

Chân giao tiếp I2C bao gồm chân 20 cho SDA và chân 21 cho SCK, hỗ trợ tốc độ 400kHz để kết nối hai dây với các thiết bị khác Để bắt đầu chuyển đổi I2C, sử dụng hàm wire.begin(), trong khi wire.read() cho phép đọc dữ liệu I2C và wire.write() dùng để ghi dữ liệu I2C.

Trên Arduino Mega2560, có một đèn LED màu cam (ký hiệu chữ L) được kết nối với chân số 13 Khi bạn nhấn nút Reset, đèn LED này sẽ nhấp nháy để báo hiệu Nếu chân số 13 được sử dụng bởi người dùng, LED sẽ phát sáng.

• Có 6 chân ngắt ngoài: từ 0 đến 5 tương ứng với các chân (2, 3, 21, 20,

19, 18) được ký hiệu là INT

Arduino Uno R3 là bảng mạch vi điều khiển mã nguồn mở, sử dụng vi điều khiển Microchip ATmega328, được phát triển bởi Arduino.cc Bảng mạch này có các chân đầu vào/đầu ra Digital và Analog, cho phép giao tiếp với nhiều bảng mở rộng khác nhau Arduino Uno rất phù hợp cho những người mới bắt đầu tìm hiểu về điện tử và lập trình Nhờ vào nền tảng mở của Arduino.cc, người dùng có thể dễ dàng xây dựng các dự án nhanh chóng, như lập trình Robot, xe tự hành, hoặc điều khiển bật tắt LED.

Thông số kỹ thuật của Arduino Uno:

• Mạch Arduino UNO R3 với thiết kế tiêu chuẩn sử dụng vi điều khiển Atmega328.

Mạch Arduino UNO R3 sở hữu 14 chân Digital cho phép đọc và xuất tín hiệu, với hai mức điện áp là 0V và 5V Mỗi chân có dòng vào/ra tối đa là 40mA, và được trang bị các điện trở pull-up từ có sẵn trong vi điều khiển ATmega328, mặc dù các điện trở này không được kết nối mặc định.

Arduino UNO có 6 chân Analog (A0 → A5) với độ phân giải tín hiệu 10 bit (0 → 1023), cho phép đọc giá trị điện áp trong khoảng từ 0V đến 5V Khi cấp điện áp 2.5V vào các chân này, bạn vẫn có thể đo điện áp từ 0V đến 2.5V với độ phân giải 10 bit Đặc biệt, chân A4 (SDA) và A5 (SCL) trên Arduino UNO hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.

Raspberry Pi 3 Model B sở hữu chip 4 nhân 64-bit với tốc độ 1.4GHz, là phiên bản nhanh nhất hiện nay Nó hỗ trợ Wifi Dual-band 2.4GHz và 5GHz, Bluetooth 4.2/Bluetooth Low Energy, cổng Ethernet tốc độ cao lên đến 300Mbps và tính năng Power over Ethernet (PoE) thông qua PoE HAT.

Raspberry Pi 3 Model B là một thiết bị phổ biến cho nhiều ứng dụng như máy tính để bàn nhỏ gọn, thiết bị định tuyến, máy chủ đa phương tiện và hệ thống giám sát Nó đóng vai trò quan trọng trong việc phát triển các dự án IoT (Internet of Things) và các ứng dụng công nghệ khác Nhóm chúng em sẽ sử dụng Raspberry Pi 3 để thực hiện dự án nhận dạng khuôn mặt, khai thác tiềm năng của thiết bị này trong lĩnh vực công nghệ.

ESP8266 NodeMCU là một module phổ biến trong lĩnh vực IoT, được phát triển dựa trên chip Wifi SoC ESP8266 với thiết kế thân thiện cho người dùng nhờ vào mạch nạp tích hợp sử dụng chip CP2102 trên board Module này có lõi vi xử lý sẵn có, cho phép lập trình trực tiếp mà không cần thêm vi xử lý khác Hiện nay, người dùng có thể lập trình ESP8266 bằng hai ngôn ngữ, thông qua phần mềm IDE của Arduino với bộ thư viện riêng hoặc sử dụng phần mềm NodeMCU.

Các chuẩn truyền dữ liệu

UART (Universal Asynchronous Receiver-Transmitter) là một giao thức truyền thông nối tiếp không đồng bộ, thường được tích hợp trong các mạch điện tử Chức năng chính của UART là truyền tín hiệu giữa các thiết bị như Laptop và Modem, hoặc giữa các vi điều khiển, cho phép giao tiếp hiệu quả và linh hoạt trong các ứng dụng điện tử.

Các thông số trong chuẩn truyền UART:

Hình 2.21:Gói dữ liệu truyền của UART

• Packet : Một gói dữ liệu được truyền đi, bao gồm bit Start, khung truyền dữ liệu, bit parity, bit Stop

Bit Start thường duy trì ở mức điện áp cao khi không có dữ liệu truyền Để bắt đầu quá trình truyền, UART sẽ kéo bit này từ cao xuống thấp trong một chu kỳ xung nhịp Khi UART nhận thấy sự chuyển đổi từ điện áp cao sang thấp, nó sẽ bắt đầu đọc các bit trong khung dữ liệu với tần số tương ứng với tốc độ truyền.

Khung dữ liệu chứa thông tin được truyền và có độ dài từ 5 đến 8 bit khi sử dụng một bit parity; nếu không có bit parity, độ dài có thể lên tới 9 bit Bit parity giúp kiểm tra tính toàn vẹn của dữ liệu trong quá trình truyền bằng cách xác định tổng số bit 1 là chẵn hay lẻ Nếu tổng số bit 1 là chẵn và bit parity là 0, điều này cho thấy không có lỗi trong quá trình truyền Ngược lại, nếu bit parity là 1, điều đó chỉ ra rằng có lỗi trong đường truyền, dẫn đến sự thay đổi của dữ liệu.

Bit Stop là tín hiệu đánh dấu sự kết thúc của gói dữ liệu, trong đó UART điều khiển đường truyền dữ liệu bằng cách chuyển đổi từ điện áp thấp sang điện áp cao trong ít nhất hai bit.

Nguyên lý hoạt động của UART bắt đầu khi dữ liệu được nhận từ bus dữ liệu Dữ liệu này được truyền ở dạng song song, kèm theo bit start, bit parity và bit stop để tạo thành gói dữ liệu Gói dữ liệu sau đó được xuất ra dưới dạng nối tiếp qua chân Tx và truyền đến chân Rx của UART nhận UART nhận sẽ đọc các gói dữ liệu, loại bỏ các bit không cần thiết và chuyển đổi dữ liệu trở lại dạng song song Cuối cùng, dữ liệu song song được chuyển qua bus dữ liệu.

Hình 2.23: Quá trình truyền UART

Hình 2.24:Quá trình nhận UART

SPI (Serial Peripheral Bus) là một chuẩn truyền thông nối tiếp tốc độ cao do Motorola phát triển, hoạt động theo mô hình Master-Slave với một chip Master điều phối và nhiều chip Slave được kiểm soát bởi Master Giao tiếp trong SPI diễn ra giữa Master và Slave, cho phép truyền thông song công (full duplex) tức là truyền và nhận dữ liệu đồng thời Chuẩn SPI thường được gọi là "4 dây" vì bao gồm bốn đường giao tiếp: SC (Serial Clock), MISO (Master Input Slave Output), MOSI (Master Output Slave Input) và SS (Slave Select).

SCK đóng vai trò quan trọng trong giao tiếp SPI, vì SPI là chuẩn truyền đồng bộ cần một đường xung giữ nhịp Mỗi xung trên chân SCK truyền tải một bit dữ liệu đến hoặc đi Sự hiện diện của chân SCK giúp giảm thiểu lỗi trong quá trình truyền, cho phép tốc độ truyền của SPI đạt mức cao Xung nhịp chỉ được tạo ra bởi chip Master.

• MISO (Master Input /Slave Output): Nếu là chip Master thì đây là đường

Input còn nếu là chip Slave thì MISO lại là Output MISO của Master và các Slaves được nối trực tiếp với nhau

• MOSI (Master Output / Slave Input): Nếu là chip Master thì đây là đường

Output còn nếu là chip Slave thì MOSI là Input MOSI của Master và các Slaves được nối trực tiếp với nhau

SS (Slave Select) là tín hiệu chọn Slave trong giao tiếp, giữ ở mức cao khi không hoạt động Khi chip Master kéo đường SS của một Slave xuống mức thấp, giao tiếp giữa Master và Slave đó sẽ diễn ra Mỗi Slave chỉ có một đường SS, nhưng chip Master có thể có nhiều đường điều khiển SS tùy thuộc vào thiết kế của người dùng.

Nguyên lý hoạt động của hệ thống này dựa trên việc mỗi chip Master và Slave có một thanh ghi dữ liệu 8 bit Mỗi khi Master phát ra một xung nhịp trên đường SCK, một bit từ thanh ghi của Master sẽ được truyền tới Slave qua đường MOSI, đồng thời một bit trong thanh ghi của Slave cũng được xử lý.

Dữ liệu từ chip Slave được truyền qua Master qua đường MISO, với 26 ghi Quá trình truyền dữ liệu này diễn ra đồng thời giữa hai gói dữ liệu trên hai chip, do đó nó được gọi là truyền dữ liệu song song.

Quá trình truyền một gói dữ liệu được thực hiện bởi module SPI trong AVR được mô tả trong hình dưới đây, với chip Master nằm bên trái và chip Slave ở bên phải.

Hình 2.25: Truyền dữ liệu SPI

I2C, viết tắt của Inter-Integrated Circuit, là một giao thức bus dùng để kết nối và giao tiếp giữa các IC Giao thức này được áp dụng rộng rãi làm bus giao tiếp ngoại vi cho nhiều loại vi điều khiển khác nhau, bao gồm 8051, PIC và ARM.

Hình 2.26: Bus I2C và các thiết bị ngoại vi Đặc điểm giao tiếp I2C:

Giao tiếp I2C bao gồm hai dây: Serial Data (SDA) và Serial Clock (SCL) SDA cho phép truyền dữ liệu hai chiều, trong khi SCL chỉ truyền xung đồng hồ theo một chiều để đảm bảo tính đồng bộ.

27 vi kết nối vào đường bus I2C thì chân SDA của nó sẽ nối với dây SDA của bus, chân SCL sẽ nối với dây SCL

Mỗi dây SDA và SCL trong giao thức I2C cần được kết nối với điện áp dương thông qua điện trở kéo lên (pullup resistor) Điều này là cần thiết vì chân giao tiếp I2C của các thiết bị ngoại vi thường ở dạng cực máng hở (opendrain hoặc opencollector) Giá trị của các điện trở kéo này thay đổi tùy thuộc vào từng thiết bị và chuẩn giao tiếp, thường nằm trong khoảng từ 1 KΩ đến 4.7 KΩ.

Bus I2C có ba chế độ hoạt động khác nhau, cho phép truyền dữ liệu linh hoạt và hiệu quả.

• Chế độ tiêu chuẩn (Standard mode)

• Chế độ nhanh (Fast mode)

• Chế độ cao tốc High-Speed (Hs) mode

Hình 2.27:Trình tự truyền bit trên đường truyền

Trình tự truyền bit trên đường truyền:

• Thiết bị chủ tạo một điều kiện start Điều kiện này thông báo cho tất cả các thiết bị tớ lắng nghe dữ liệu trên đường truyền

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

Giới thiệu

Trong chương này, trình bày về cách tính toán, sơ đồ khối, sơ đồ nguyên lý của các board mạch của hệ thống.

Thiết kế hệ thống

3.2.1 Thiết kế sơ đồ khối hệ thống

Với các yêu cầu đã đưa ra nhóm em đã hình thành sơ đồ khối cho hệ thống như sau:

Hình 3.1: Sơ đồ khối của hệ thống

Khối điều khiển hệ thống tầng trệt sử dụng Arduino Mega 2560 làm vi xử lý trung tâm, kết nối với Raspberry Pi 3 model B để điều khiển camera và bàn phím ma trận Hệ thống cũng tích hợp các cảm biến để thu thập dữ liệu nhiệt độ và độ ẩm, sau đó lưu trữ lên cơ sở dữ liệu Firebase của Google Đồng thời, dữ liệu từ Firebase được sử dụng để điều khiển các thiết bị điện tại tầng trệt và tầng 2.

⚫ App điện thoại: Nhận và cập nhật giá trị nhiệt độ - độ ẩm, đồng thời truyền dữ liệu xuống để điều khiển các thiết bị.

⚫ Lora: Truyền dữ liệu giữa khối điều khiển hệ thống tầng trệt và khối điều khiển hệ thống tầng 2.

⚫ Khối hiển thị: Hiển thị trạng thái của cửa lên LCD.

⚫ Khối cảm biến: Khối này gồm các cảm biến khí gas MQ2, cảm biến nhiệt độ - độ ẩm DHT11

Khối relay điều khiển thiết bị bao gồm một module Relay 8 kênh, được kết nối với 4 bóng đèn và 3 quạt, nhằm mục đích điều khiển bật tắt thiết bị thông qua ứng dụng Android.

⚫ Khối nút nhấn: Khối này gồm nút nhấn dùng để reset chuông buzzer và bàn phím ma trận 3x4 để nhập mật khẩu mở cửa

⚫ Khối buzzer báo động: Khối này gồm chuông buzzer Nhận tín hiệu từ khi khối điều khiển hệ thống tầng trệt khi có khí Gas vượt hoặc có khói.

⚫ Khối mở cửa: Sử dụng servo để mở cửa

⚫ Khối nguồn: Cung cấp nguồn cho các khối hoạt động

⚫ Khối điều khiển hệ thống tầng 2: Dùng Arduino Uno để nhận dữ liệu từ khối điều khiển trung tâm thông qua Lora để điều khiển các thiết bị điện

⚫ Lora: Nhận dữ liệu giữa khối điều khiển hệ thống tầng trệt và khối điều khiển hệ thống tầng 2.

Khối relay điều khiển thiết bị bao gồm 2 module Relay 4 kênh, kết nối với 2 bóng đèn và 2 quạt, cho phép người dùng điều khiển bật, tắt thiết bị thông qua ứng dụng điện thoại.

⚫ Khối nguồn: Cung cấp nguồn cho các khối hoạt động

3.2.2 Thiết kế mạch – Tầng trệt Ở đề tài này nhóm sẽ điều khiển nhiều đèn, quạt, một vài module khác như ESP8266, Lora, cảm biến nhiệt độ độ ẩm DHT11, cảm biến khí gas MQ-02, Raspberry Pi 3, servo, LCD 16x2 nên cần số lượng chân GPIO để kết nối với các thiết bị đó

Hình 3.2: Kết nối chân Arduino Mega 2560

Module Lora Ra-02 được kết nối với Arduino Mega 2560 thông qua giao thức SPI, sử dụng các chân SCK, MISO, MOSI và NSS Cụ thể, chân SCK của module được kết nối với chân 52 của Arduino, chân MISO với chân 50, chân MOSI với chân 51, và chân NSS với chân 53.

Hình 3.3: Kết nối chân module Lora Ra-02 ESP8266 giao tiếp với Arduino Mega 2560 qua bộ UART 2 (RX-D5, TX-D6)

Hình 3.4: Kết nối chân ESP8266 Raspberry Pi 3 kết nối chân GPIO17 với chân 4 của Arduino Mega 2560 để cấp nguồn cho Raspberry hoạt động

Hình 3.5: Kết nối chân Raspberry Pi

Khối cảm biến bao gồm module cảm biến khí gas MQ-2 và cảm biến đo nhiệt độ - độ ẩm DHT11

Cảm biến đo nhiệt độ - độ ẩm DHT11 giao tiếp với vi điều khiển qua chuẩn giao tiếp One-wire, gửi và nhận dữ liệu trên 1 dây

Cảm biến khí gas MQ-2 giao tiếp với vi điều khiển bằng chân Out nối với chân

3 của Arduino Mega 2560 Sơ đồ nối dây chi tiết của khối cảm biến này được trình bày như hình 3.6

Hình 3.6: Cảm biến nhiệt độ-độ ẩm DHT11 và cảm biến khí gas MQ2

Nhóm sử dụng buzzer loại 2 dây để phát tín hiệu báo động khi phát hiện cháy hoặc khí gas rò rỉ Chân âm của buzzer được kết nối với chân 38, trong khi chân dương được nối với nguồn 5V của Arduino Mega 2560.

Nút nhấn được sử dụng để tắt buzzer reo, với loại nút nhấn 2 chân Trong chương trình, nút nhấn được xuất ở dạng INPUT_PULLUP, cho phép kết nối trực tiếp với Arduino Mega 2560 mà không cần điện trở Sơ đồ nối dây chi tiết cho khối nút nhấn này được trình bày trong hình 3.7.

Hình 3.7: Còi báo buzzer và nút nhấn reset

Để tiết kiệm chân giao tiếp trên Arduino Mega 2560, chúng tôi sử dụng module I2C để giao tiếp với LCD Cụ thể, chân VDD được kết nối với nguồn 5V, chân VSS nối với mass, chân SCL kết nối với chân A5, và chân SDA nối với chân A4 của Arduino Mega 2560 Sơ đồ nối dây chi tiết được thể hiện trong hình 3.8.

Để phù hợp với hệ thống, nhóm đã chọn module relay 5V 8 kênh Relay này có khả năng chịu dòng tối đa 10A trên tiếp điểm, đảm bảo an toàn cho dòng điện.

35 trong quạt, đèn khi chạy qua các tiếp điểm sẽ an toàn Các chân 31, 32, 33, 34, 35,

Chân 36 và 37 của Arduino Mega 2560 được sử dụng để kích hoạt các relay, trong khi chân 6 điều khiển servo mở cửa Sơ đồ nối dây chi tiết được thể hiện trong hình 3.9.

Trong đề tài này, chúng tôi sử dụng bàn phím ma trận 3x4 để nhập mật khẩu mở cửa, với sơ đồ nối dây chi tiết được trình bày trong hình 3.10.

Hình 3.10: Kết nối chân bàn phím ma trận 3x4

3.2.3 Thiết kế mạch – Tầng 2 Ở tầng 2 này, chỉ điều khiển đèn và quạt, lora nên không cần số lượng chân nhiều như tầng 1 nên vì thế chúng em sử dụng Arduino Uno để điều khiển các thiết bị ở tầng này

Hình 3.11: Kết nối chân Arduino Uno

Module Lora Ra-02 được kết nối với Arduino Uno thông qua giao thức SPI, sử dụng 4 chân SCK, MISO, MOSI và NSS Cụ thể, chân SCK của module được nối với chân 13 của Arduino, chân MISO với chân 12, chân MOSI với chân 11, và chân NSS với chân 10.

Để điều khiển 2 đèn và 2 quạt ở tầng 2, nhóm em đã chọn module relay 5V 4 kênh, với dòng tối đa trên tiếp điểm là 10A, đảm bảo an toàn cho dòng điện khi quạt và đèn hoạt động Các chân 3, 4, 5, 6 của Arduino Uno sẽ được sử dụng để kích hoạt các relay.

Sơ đồ nối dây chi tiết được trình bày như hình 3.13

Hình 3.13: Sơ đồ nối dây các thiết bị ở tầng 2

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

Sơ đồ nguyên lý tầng 1:

Hình 3.14: Sơ đồ nguyên lý tầng 1

Sơ đồ nguyên lý tầng 2:

Hình 3.15: Sơ đồ nguyên lý tầng 2

Hệ thống tầng 1 sử dụng Arduino Mega 2560 làm vi điều khiển chính, có khả năng truyền và nhận dữ liệu với tầng 2 qua module Lora Ra-02 Việc điều khiển các thiết bị điện như đèn và quạt được thực hiện thông qua ứng dụng Android được phát triển bằng MIT App Inventor, với dữ liệu từ Firebase được chuyển xuống ESP8266 trước khi xử lý bởi Arduino Mega 2560 Các cảm biến DHT11 và MQ-2 hoạt động với nguồn 5V từ Arduino Mega 2560; cảm biến MQ-2 sẽ phát hiện khói hoặc cháy và kích hoạt còi báo động, có thể tắt bằng nút nhấn Cảm biến DHT11 cung cấp dữ liệu về nhiệt độ và độ ẩm, được gửi đến ESP8266 và hiển thị trên ứng dụng Android Hệ thống mở cửa có hai phương thức: nhận diện khuôn mặt hoặc nhập mật khẩu từ bàn phím ma trận 3x4 Raspberry Pi, sử dụng nguồn 5V từ Arduino Mega 2560, thực hiện nhận diện khuôn mặt; nếu nhận diện thành công, servo sẽ mở cửa, ngược lại, cửa sẽ không mở Màn hình LCD hiển thị trạng thái "Open Door" hoặc "Close Door".

Hệ thống tầng 2 sử dụng Arduino Uno để nhận dữ liệu điều khiển từ hệ thống tầng 1 Arduino Uno sẽ lấy dữ liệu và xuất giá trị tại các chân 3, 4, 5, 6 để điều khiển module relay, từ đó quản lý các thiết bị điện ở tầng 2.

THI CÔNG HỆ THỐNG

Giới thiệu

Sau khi tính toán và thiết kế nhóm, hệ thống thi công được chia thành hai tầng Tầng 1 bao gồm các thiết bị như Arduino Mega 2560, Raspberry Pi 3 Model B, ESP8266 Node MCU, Lora Ra-02, module relay 5V 8 kênh, servo, cảm biến DHT11, cảm biến MQ-2, LCD 16x2, bàn phím ma trận 3x4, buzzer, nút nhấn reset và camera USB Tầng 2 sử dụng Arduino Uno, Lora Ra-02 và module relay 5V 4 kênh.

Thi công hệ thống

4.2.1 Mô hình hệ thống tầng 1:

Dưới đây là bố trí linh kiện của hệ thống tầng 1 với mặt trên và mặt dưới, tương ứng với hình 4.1 và 4.2

Hình 4.1: Mặt trên của mô hình hệ thống tầng 1

Hình 4.2: Mặt dưới của mô hình hệ thống tầng 1

Bảng 4.1: Số liệu dòng và áp của các thiết bị tại tầng 1

Tên linh kiện Số lượng Giá trị dòng

Cảm biến khí gas MQ2 1 120m 5 Đèn led 4 36m 12

4.2.2 Mô hình hệ thống tầng 2

Hình 4.3: Mặt trên của mô hình hệ thống tầng 2

Hình 4.4: Mặt dưới của mô hình hệ thống tầng 2

Bảng 4.2: Số liệu dòng và áp của các thiết bị tại tầng 2

Tên linh kiện Số lượng Giá trị dòng ( A) Giá trị áp(V)

Module Relay 4 kênh 1 10 5 Đèn led 2 36m 12

Dựa trên các thông số từ bảng 4.1 và 4.2, nhóm đã quyết định sử dụng bộ nguồn tổ ong chuyển đổi 220 VAC thành 12 VDC để cấp nguồn cho các linh kiện hoạt động Đối với các linh kiện cần nguồn 5 VDC, chúng tôi sử dụng mạch nguồn hạ áp LM2596 để chuyển đổi từ 12 VDC xuống 5 VDC, đảm bảo cung cấp nguồn điện cần thiết cho các linh kiện này.

4.3 Đóng gói và thi công mô hình

Sau khi xác nhận mạch hoạt động hiệu quả, chúng ta tiến hành đóng gói thành mô hình hoàn chỉnh Hệ thống được thiết kế bao gồm hai tầng: hệ thống tầng 1 và hệ thống tầng 2, với kiến trúc như hình 4.4 dưới đây.

Hình 4.5: Kiến trúc mô hình

45 Ý tưởng của nhóm ở đây sẽ thi công hệ thống thành ngôi nhà 2 tầng Mô hình được làm bằng bìa PVC – Foam

Lưu đồ điều khiển chính hệ thống tầng 1

Hình 4.6: Lưu đồ điều khiển chính tầng 1

Bài viết giải thích lưu đồ bắt đầu bằng việc khai báo các thư viện cần thiết và định nghĩa các biến, sau đó thiết lập tốc độ baud cho UART Tiếp theo, quá trình khởi tạo Lora và cấu hình tần số cho thiết bị Lora được thực hiện, cùng với việc khởi tạo các chân kết nối Cuối cùng, các chương trình sẽ được thực hiện trong vòng lặp để đảm bảo hoạt động hiệu quả.

- Kiểm tra bàn phím ma trận

- Kiểm tra xem có khí gas rò rỉ hay không ?

- Đọc các giá trị cảm biến nhiệt độ - độ ẩm

Kiểm tra xem có nhận được chuỗi giá trị từ ESP hay không; nếu có, tiến hành xử lý tín hiệu đó Sau khi xử lý chuỗi dữ liệu, kết quả sẽ bao gồm các giá trị từ 1 đến 22.

Nếu giá trị nằm trong khoảng từ 1 đến 14, Arduino Mega sẽ điều khiển các thiết bị đèn quạt ở tầng 1 Ngược lại, các giá trị từ 15 đến 22 sẽ được truyền qua tầng 2 thông qua module Lora để điều khiển thiết bị ở tầng 2.

Lưu đồ điều khiển ESP8266

Hình 4.7: Lưu đồ điều khiển ESP8266

Đầu tiên, cần khai báo các thư viện cần thiết và định nghĩa các biến Tiếp theo, thực hiện kết nối vào mạng Wifi và khởi tạo kết nối giữa ESP8266 với Firebase.

Khi kết nối Wifi, ESP8266 nhận dữ liệu từ ứng dụng Android để điều khiển thiết bị và thu thập thông tin từ cảm biến DHT11.

Giá trị cảm biến sẽ được cập nhật lên Firebase, trong khi chuỗi dữ liệu điều khiển thiết bị sẽ được gửi đến Arduino Mega để xử lý và điều khiển các thiết bị tại đó.

Lưu đồ điều khiển hệ thống tầng 2

Hình 4.8: Lưu đồ điều khiển hệ thống tầng 2

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách khai báo các thư viện cần thiết, định nghĩa và khai báo biến, cũng như thiết lập tốc độ baud cho UART Tiếp theo, chúng tôi sẽ hướng dẫn khởi tạo Lora và cấu hình tần số cho thiết bị này, cùng với việc khởi tạo các chân kết nối.

- Kiểm tra xem có dữ liệu truyền đến không Nếu có sẽ xử lý dữ liệu đó để điều khiển các thiết bị đèn quạt tại tầng 2

Lưu đồ xây dựng mô hình nhận diện khuôn mặt

Hình 4.9: Lưu đồ xây dựng mô hình nhận diện khuôn mặt

Giải thích lưu đồ: Đầu tiên khai báo các thư viện sử dụng, tạo một danh sách các đường dẫn đến ảnh trong thư mục

Đầu tiên, chúng ta cần một "dataset" chứa các ảnh mẫu của khuôn mặt Tiếp theo, khởi tạo một danh sách rỗng để lưu trữ các mã hóa khuôn mặt và tên của các khuôn mặt đã biết, được định nghĩa bởi hai biến: knownEncodings và knownNames.

Tiếp đến dùng vòng lặp for để duyệt các từng danh sách trong đường dẫn ấy:

- Trích xuất từng tên người từ đường dẫn

- Chuyển đổi ảnh từ BGR sang RGB

- Xác định vị trí khuôn mặt trong ảnh sử dụng phương pháp HOG

- Tính toán các biểu diễn khuôn mặt cho từng khuôn mặt được phát hiện (mã hóa khuôn mặt)

Sau khi thêm biểu diễn khuôn mặt và tên của từng người vào danh sách đã biết, chúng ta tạo một biến “data” để lưu trữ danh sách các biểu diễn khuôn mặt cùng với danh sách tên Tiếp theo, mở tệp "encodings.pickle" để lưu trữ dữ liệu và sử dụng lệnh f.write(pickle.dumps(data)) để chuyển đổi dữ liệu thành chuỗi bytes và ghi vào tệp.

Lưu đồ nhận diện khuôn mặt

Hình 4.10: Lưu đồ nhận diện khuôn mặt

Để giải thích lưu đồ, đầu tiên cần khai báo các thư viện sử dụng và cấu hình chân GPIO 17 của Raspberry Pi làm đầu ra với trạng thái LOW Tiếp theo, sử dụng lệnh “data = pickle.loads(open("encodings.pickle", "rb").read())” để tải dữ liệu biểu diễn khuôn mặt từ tệp "encodings.pickle" và chuyển đổi chuỗi bytes thành dữ liệu Python.

Camera sẽ nhận diện khuôn mặt và so sánh với khuôn mặt được mã hóa trong tệp "encodings.pickle" Nếu có sự trùng khớp, hệ thống sẽ hiển thị khung hình chứa khuôn mặt cùng với tên của người được nhận diện.

4.4.2 Thiết kế giao diện trên App Android Ở đề tài này nhóm sử dụng phần mềm lập trình App Android miễn phí, dễ sử dụng đó là: App Inventor

4.4.2.1 Tổng quan về app inventor

App Inventor là nền tảng web mã nguồn mở, ban đầu được Google phát triển Năm 2012, Google đã chuyển giao nền tảng này cho Trung tâm nghiên cứu Di động của Viện công nghệ Massachusetts (MIT) để quản lý và phát triển.

Môi trường lập trình App Inventor rất thân thiện với người mới bắt đầu, cho phép người dùng tạo ra các ứng dụng từ đơn giản đến phức tạp thông qua các khối lệnh trực quan có thể kéo thả Các ứng dụng này có thể chạy trực tiếp trên các thiết bị di động như điện thoại và máy tính bảng.

4.4.2.2 Giới thiệu tổng quan về giao diện của phần mềm App Inventor 2

Lập trình hệ thống

Ý tưởng của nhóm ở đây sẽ thi công hệ thống thành ngôi nhà 2 tầng Mô hình được làm bằng bìa PVC – Foam

Lưu đồ điều khiển chính hệ thống tầng 1

Hình 4.6: Lưu đồ điều khiển chính tầng 1

Đầu tiên, khai báo các thư viện cần thiết và định nghĩa các biến, sau đó thiết lập tốc độ baud cho UART Tiếp theo, khởi tạo Lora và cấu hình tần số cho nó, đồng thời thiết lập các chân kết nối Cuối cùng, thực hiện các chương trình trong vòng lặp để hoàn thành quy trình.

- Kiểm tra bàn phím ma trận

- Kiểm tra xem có khí gas rò rỉ hay không ?

- Đọc các giá trị cảm biến nhiệt độ - độ ẩm

Kiểm tra sự nhận diện chuỗi giá trị từ ESP; nếu có, tiến hành xử lý tín hiệu Sau khi xử lý chuỗi dữ liệu, kết quả sẽ có các giá trị từ 1 đến 22.

Nếu giá trị nằm trong khoảng từ 1 đến 14, nó sẽ được giữ lại để Arduino Mega điều khiển các thiết bị đèn và quạt ở tầng 1 Ngược lại, các giá trị từ 15 đến 22 sẽ được truyền qua tầng 2 thông qua module Lora để điều khiển các thiết bị ở tầng 2.

Lưu đồ điều khiển ESP8266

Hình 4.7: Lưu đồ điều khiển ESP8266

Lưu đồ bắt đầu bằng việc khai báo các thư viện cần thiết và định nghĩa các biến Tiếp theo, thực hiện kết nối vào mạng Wifi và khởi tạo kết nối giữa ESP8266 với Firebase.

Khi kết nối Wifi được thiết lập, ESP8266 sẽ tiếp nhận các chuỗi dữ liệu từ ứng dụng Android để điều khiển thiết bị và nhận thông tin từ cảm biến DHT11.

Các giá trị cảm biến sẽ được gửi lên Firebase, trong khi chuỗi dữ liệu điều khiển thiết bị sẽ được chuyển đến Arduino Mega để xử lý và điều khiển các thiết bị tại đó.

Lưu đồ điều khiển hệ thống tầng 2

Hình 4.8: Lưu đồ điều khiển hệ thống tầng 2

Để bắt đầu, cần khai báo các thư viện sử dụng, định nghĩa và khai báo các biến cần thiết Tiếp theo, xác định tốc độ baud cho UART và tiến hành khởi tạo Lora, đồng thời cài đặt cấu hình tần số cho Lora Cuối cùng, khởi tạo các chân kết nối để đảm bảo hoạt động hiệu quả.

- Kiểm tra xem có dữ liệu truyền đến không Nếu có sẽ xử lý dữ liệu đó để điều khiển các thiết bị đèn quạt tại tầng 2

Lưu đồ xây dựng mô hình nhận diện khuôn mặt

Hình 4.9: Lưu đồ xây dựng mô hình nhận diện khuôn mặt

Giải thích lưu đồ: Đầu tiên khai báo các thư viện sử dụng, tạo một danh sách các đường dẫn đến ảnh trong thư mục

Bài viết bắt đầu với việc tạo một "dataset" chứa các ảnh mẫu của khuôn mặt Tiếp theo, một danh sách rỗng được khởi tạo để lưu trữ các mã hóa khuôn mặt và tên của các khuôn mặt đã biết, cụ thể là các biến knownEncodings và knownNames.

Tiếp đến dùng vòng lặp for để duyệt các từng danh sách trong đường dẫn ấy:

- Trích xuất từng tên người từ đường dẫn

- Chuyển đổi ảnh từ BGR sang RGB

- Xác định vị trí khuôn mặt trong ảnh sử dụng phương pháp HOG

- Tính toán các biểu diễn khuôn mặt cho từng khuôn mặt được phát hiện (mã hóa khuôn mặt)

Sau khi thêm biểu diễn khuôn mặt và tên của từng người vào danh sách đã biết, chúng ta tạo biến "data" để lưu trữ các danh sách này Tiếp theo, mở tệp "encodings.pickle" để lưu trữ dữ liệu, và sử dụng dòng lệnh f.write(pickle.dumps(data)) để chuyển đổi dữ liệu thành chuỗi bytes và ghi vào tệp.

Lưu đồ nhận diện khuôn mặt

Hình 4.10: Lưu đồ nhận diện khuôn mặt

Đầu tiên, khai báo các thư viện cần thiết và cấu hình chân GPIO 17 của Raspberry Pi làm đầu ra với trạng thái LOW Sau đó, sử dụng lệnh “data = pickle.loads(open("encodings.pickle", "rb").read())” để tải dữ liệu biểu diễn khuôn mặt từ tệp "encodings.pickle" và chuyển đổi chuỗi bytes thành dữ liệu Python.

Camera sẽ nhận diện khuôn mặt và so sánh với khuôn mặt được mã hóa trong tệp "encodings.pickle" Nếu khuôn mặt trùng khớp, hệ thống sẽ hiển thị khung hình kèm theo tên của người được nhận diện.

4.4.2 Thiết kế giao diện trên App Android Ở đề tài này nhóm sử dụng phần mềm lập trình App Android miễn phí, dễ sử dụng đó là: App Inventor

4.4.2.1 Tổng quan về app inventor

App Inventor là nền tảng web mã nguồn mở, ban đầu được Google phát triển Năm 2012, Google đã chuyển giao quản lý và phát triển nền tảng này cho Trung tâm nghiên cứu Di động thuộc Viện công nghệ Massachusetts (MIT).

Môi trường lập trình App Inventor rất thân thiện với người mới, cho phép tạo ra các ứng dụng từ đơn giản đến phức tạp thông qua các khối lệnh trực quan kéo thả Các ứng dụng này có thể chạy trực tiếp trên các thiết bị di động như điện thoại và máy tính bảng.

4.4.2.2 Giới thiệu tổng quan về giao diện của phần mềm App Inventor 2

Giao diện của App Inventor được chia thành hai khu vực chính: Khu thiết kế (Designer) và Khu lập trình (Blocks) Khi bạn chọn một dự án từ danh sách dự án của mình, giao diện mặc định hiển thị là Khu thiết kế.

Hình 4.11: Giao diện chính của phần mềm App Inventor

Khu thiết kế cho phép người dùng thêm, xóa và sắp xếp vị trí các đối tượng trong chương trình, được chia thành 4 phần chính: Palette, Viewer, Components và Properties.

- Palette: Khu vực này chứa tất cả các loại đối tượng có thể thêm vào chương trình, các đối tượng được chia thành các nhóm dựa theo chức năng:

• Nhóm User Interface: Gồm các đối tượng giao diện như nút, ảnh, hộp thoại thông báo, nhãn,…

• Nhóm Layout: Gồm các đối tượng hỗ trợ việc sắp xếp bố cục, vị trí các đối tượng khác

• Nhóm Media: Gồm các đối tượng đa phương tiện, dùng để quay phim, chụp ảnh, ghi âm, chơi nhạc,…

• Nhóm Drawing and Animation: Gồm các đối tượng dùng để vẽ và mô phỏng chuyển động

• Nhóm Sensor: Gồm các đối tượng cảm biến như đồng hồ, cảm biến gia tốc, cảm biến vị trí, cảm biến tiệm cận,…

• Nhóm Social: Gồm các đối tượng hỗ trợ việc liên lạc và chia sẻ như gọi điện, nhắn tin, Twitter,…

• Nhóm Storage: Gồm các đối tượng việc lưu trữ dữ liệu như tệp tin, cơ sở dữ liệu,…

• Nhóm Connectivity: Gồm các đồi tượng hỗ trợ việc kết nối như web, Bluetooth,…

• Nhóm LEGO MINDSTORM: Gồm các đối tượng hỗ trợ điều khiển robot LEGO MINDSTORMS NXT

• Nhóm Experimental: Cung cấp đối tượng giao tiếp với nền tảng Firebase của Google

• Nhóm Extension: Hỗ trợ thêm các đối tượng mở rộng

Hướng dẫn sử dụng

Đầu tiên ta tải phần mềm điều khiển thiết bị thông qua mã QR sau:

Hình 4.26: Mã QR để tải app

Để cài đặt ứng dụng trên điện thoại, người dùng cần đảm bảo giao diện giống như hướng dẫn Sau khi kết nối nguồn cho mô hình, hãy khởi động hệ thống và sử dụng các biểu tượng trên ứng dụng Android để điều khiển đèn và quạt cho từng tầng Các giá trị từ cảm biến nhiệt độ và độ ẩm sẽ hiển thị trên màn hình chính “Screen1” Đối với cảm biến khí gas, nếu phát hiện khí, còi sẽ kêu và người dùng chỉ cần nhấn nút để tắt còi báo.

Mở cửa bằng 2 chế độ:

- Chế độ nhập mật khẩu: Nhập “123” nhấn nút # để mở khóa, để xóa 1 số thì nhấn nút * ( nút * còn có chức năng để đóng cửa )

Để thiết lập chế độ nhận diện bằng camera, trước tiên bạn cần kết nối cáp vào Raspberry Pi và tìm địa chỉ IP tĩnh Sau đó, chạy mã face_door (được cung cấp trong phụ lục) để khởi động camera Hệ thống sẽ thực hiện nhận diện khuôn mặt, và nếu nhận diện thành công, cửa sẽ được mở.

KẾT QUẢ - NHẬN XÉT – ĐÁNH GIÁ

Giới thiệu

Chương này trình bày kết quả của cả quá trình nghiên cứu làm đề tài trong 15 tuần, đồng thời là các nhận xét, đánh giá về đề tài.

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

Sau khi hoàn thành đề tài, nhóm chúng em đã đạt được các mục tiêu đề ra, tích lũy nhiều kiến thức bổ ích và thực hiện được các tính năng quan trọng.

• Hiểu biết sâu hơn về sử dụng Board Arduino, ứng dụng hiệu quả board mạch này trong ĐATN

• Tìm hiểu và ứng dụng được các mô đun Wifi ESP8266, Lora SX1278

• Biết cách truyền - nhận dữ liệu giũa nhiều Lora (cụ thể là 2 trong ĐATN)

• Tìm hiểu và ứng dụng được xử lý ảnh để nhận diện khuôn mặt

• Tìm hiểu và ứng dụng được Raspberry Pi

• Thiết kế được giao diện Android để điều khiển, giám sát thiết bị

• Điều khiển bật, tắt các thiết bị điện qua mạng Wifi và Lora

• Tính toán, thiết kế, chọn linh kiện để hoàn thiện được board mạch chính đủ dòng áp chạy đáp ứng được yêu cầu đề tài

• Tiếp cận sử dụng được nhiều phần mềm mới: Spyder, App Inventor 2

• Giám sát được các giá trị nhiệt độ, độ ẩm thông qua App Android

• Có còi buzzer báo động kêu to, rõ khi khí gas, khói

• Hệ thống mở cửa bằng 2 cách: nhận diện khuôn mặt và nhập mật khẩu

• Thi công và đóng gói thành công mô hình

Lập trình hệ thống đảm bảo hoạt động ổn định qua nhiều lần kiểm tra, xử lý triệt để các tình huống sai sót Cảm biến hoạt động chính xác, đáp ứng nhanh chóng và hiệu quả trong các trường hợp sự cố.

• Giao diện điều khiển trên App Android dễ sử dụng

Mô hình hệ thống đã hoàn thiện, đạt đủ chức năng cơ bản và hoạt động ổn định Dưới đây là một số kết quả thử nghiệm toàn bộ hệ thống.

Hình 5.1 và hình 5.2 là kết quả điều khiển bật đèn và quạt của 2 tầng thông qua App điều khiển

Hình 5.1: Điều khiển đèn quạt tại tầng trệt

Hình 5.2:Điều khiển đèn quạt tại tầng 2

Và hình 5.3 và 5.4 là kết quả mở cửa bằng 2 cách: nhập mật khẩu và nhận diện khuôn mặt

Hình 5.3:Mở cửa bằng cách nhập mật khẩu

Hình 5.4 minh họa tính năng mở cửa bằng nhận diện khuôn mặt, trong khi Hình 5.5 hiển thị thông tin về giá trị nhiệt độ và độ ẩm được cập nhật và hiển thị trên giao diện chính của ứng dụng điều khiển.

Hình 5.5:Giá trị nhiệt độ - độ ẩm được hiển thị lên điện thoại

Dưới đây là bảng thống kê chạy thử nghiệm hệ thống sau 30 lần

Bảng 5.1: Bảng đánh giá các thiết bị điện của hệ thống

Thiết bị Số lần thực hiện thành công Đánh giá

Tầng 2 Đèn 27 lần Thời gian phản hồi 3 - 4 giây

Quạt 27 lần Thời gian phản hồi 3 - 4 giây Bảng 5.2: Bảng đánh giá số liệu thực hiện của hệ thống cửa

Số lần thực hiện thành công Đánh giá

Nhập mật khẩu 30 lần Đạt

Nhận diện khuôn mặt 30 lần Đạt

Sau quá trình vận hành thử hệ thống, nhóm có những đánh giá sau đây:

Hệ thống hoạt động ổn định và đạt được các mục tiêu ban đầu, với mô hình có tính thẩm mỹ và giao diện ứng dụng điều khiển dễ sử dụng Tuy nhiên, thời gian phản hồi khi điều khiển thiết bị ở tầng 2 vẫn chưa nhanh, trung bình mất từ 3 đến 4 giây từ lúc nhấn nút đến khi thiết bị được bật, do vấn đề truyền nhận dữ liệu từ tầng trệt.

Chương 6 KẾT LUẬN - HƯỚNG PHÁT TRIỂN

Sau 15 tuần nghiên cứu và thực hiện, nhóm đã hoàn thành đồ án và thi công mô hình theo yêu cầu ban đầu Trong quá trình thực hiện, nhóm đã đạt được những kết quả nhất định.

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

• Mô hình có tính thẩm mỹ, gọn nhẹ

• Mô hình hoạt động đạt yêu cầu và hoàn thành đúng thời gian quy định

• Giao diện app điều khiển thiết bị trực quan dễ sử dụng

Một số hướng phát triển để hoàn thành đề tài:

⚫ Thêm mạch công suất lớn để có thể điểu khiển nhiều tải công suất lớn

⚫ Thêm pin phòng trường hợp mất điện

⚫ Tăng thêm số lượng tầng bằng cách tăng thêm số lượng node

Nguyễn Đức Dũy đã thực hiện đồ án về thiết kế và thi công hệ thống giám sát và điều khiển thiết bị trong nhà, kết hợp công nghệ Wifi và Lora, tại Trường Đại Học Sư Phạm Kĩ Thuật Thành phố Hồ Chí Minh vào năm 2018.

Lê Đại Minh và Trương Đức Hoàng Long đã thực hiện đồ án nghiên cứu về thiết kế và thi công hệ thống điều khiển, giám sát thiết bị trong nhà sử dụng công nghệ Lora Nghiên cứu này được thực hiện tại Trường Đại Học Sư Phạm Kỹ Thuật Thành phố Hồ Chí Minh vào năm 2018.

[3] Mai Xuân Phú, “Luận văn – Nghiên cứu kỹ thuật nhận dạng khuôn mặt người Xây dựng hệ thống camera chống trộm”, Đại học Đà Nẵng, 2017

[4] Trần Thu Hà, “Điện tử cơ bản”, NXB ĐH Quốc Gia Tp.HCM, 2013

[5] Nguyễn Hữu Hưng, “Lập trình ứng dụng di động với App Inventor”, NXB ĐH Quốc Gia Hà Nội, 2020

[6] Nguyễn Việt Hùng, Nguyễn Ngô Lâm, Nguyễn Văn Phúc, Đặng Phước Hải Trang, “Giáo trình Truyền Số Liệu”, NXB Đại Học Quốc Gia Tp.HCM, 2013

[3] https://iotcircuithub.com/lora-esp8266-arduino-iot-project/

[5] http://www.appinventor.org/book2

[6] https://circuitdigest.com/microcontroller-projects/arduino-lora-sx1278- interfacing-tutorial

[7] https://huongdan.cytrontech.vn/ket-noi-vnc-truc-tiep-tu-laptop-pc-toi-raspberry- pi-voi-day-cap-mang.html

[9] GitHub - Dedepya/Face-Recognition-Using-SVM: Code for a face recognition engine based on OpenCV to detect faces via a live webcam feed

Lưu đồ chương trình con kiểm tra bàn phím ma trận

Hình 1: Lưu đồ kiểm tra bàn phím ma trận

Kiểm tra hoạt động của Raspberry Pi để nhận diện khuôn mặt Nếu nhận diện thành công, màn hình LCD sẽ hiển thị dòng chữ “Face detect” và cửa sẽ mở Sau đó, màn hình LCD sẽ được xóa và hiển thị thông báo “Xin Chao”.

Nếu không thể nhận diện khuôn mặt, người dùng có thể mở cửa bằng cách nhập đúng mật khẩu đã được lập trình, cụ thể là “123” Chúng ta cần kiểm tra xem có nút nào đã được nhấn hay không.

- Nếu như chúng ta nhập đúng password thì cửa sẽ mở

- Trong trường hợp chúng ta nhập sai thì nhấn “*” để xóa 1 ký tự

- Nếu trong trường hợp mà cửa đang mở và ta nhấn nút thì cửa sẽ đóng lại

Lưu đồ chương trình con điều khiển mở cửa

Hình 2: Lưu đồ chương trình con điều khiển mở cửa Lưu đồ chương trình con kiểm tra cảm biến khí gas

Hình 3: Lưu đồ kiểm tra cảm biến khí gas

Giá trị state_door = 1 có nghĩa là trạng thái mở cửa, LCD sẽ hiện dòng chữ “ Open door…” và servo sẽ quay để mở cửa

- Nếu như có khí gas rò rỉ thì còi sẽ báo động

- Nếu chúng ta nhấn nút button thì còi báo sẽ ngừng

Lưu đồ chương trình con đọc và xử lý cảm biến DHT11

Hình 4: Lưu đồ chương trình con đọc và xử lý cảm biến DHT11

Lưu đồ chương trình con tạo dữ liệu để gửi lên Firebase

Hình 5: Lưu đồ chương trình con tạo dữ liệu để gửi lên Firebase

Giải thích lưu đồ: Đọc giá trị nhiệt độ và độ ẩm, sau đó lưu các giá trị này vào các biến t và h tương ứng Các biến này sẽ được truyền đến ESP dưới dạng chuỗi.

Dữ liệu từ cảm biến được truyền đến ESP8266 dưới dạng chuỗi Sau đó, các chuỗi này được chuyển đổi thành số nguyên và cập nhật giá trị lên Firebase.

Chương trình kết nối ESP8266 với App Android

#define FIREBASE_HOST "https://lora-home-default-rtdb.firebaseio.com/"

#define FIREBASE_AUTH "TQnMogeNSOHBQ4n5CDstCNfQZCAS3ElqsyEW3juy"

SoftwareSerial EspSerial(12, 14); // RX, TX const char* ssid = "Nain"; const char* password = "nghiahuutran23012001"; int val, nhietdo, doam;

String data2mega = ""; void setup() {

Serial.begin(9600); //Default Baud Rate for NodeMCU

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

Serial.println("WiFi connected"); server.begin();

Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);

WiFiClient client = server.available(); delay(50);

NHAN_DATA(); if (client.available()) { req = client.readStringUntil('\r'); client.flush(); if (req.indexOf("/id_control/01") != -1)

The code snippet assigns a value based on the presence of specific identifiers in the request URL It checks for a series of "/id_control/" and "/id_control_t2/" paths, assigning values from 1 to 22 accordingly If none of the specified identifiers are found, the code proceeds to handle an alternative case This structure allows for organized management of different control IDs within the application.

Serial.println("invalid request"); client.stop();

} void GUI_DATA() { data2mega = ""; data2mega = String(val);

String inString = ""; // string to hold input

String v1, v2, symbol; int lengthString, k[1]; int j = 0; if (EspSerial.available() > 0)

{ inString = EspSerial.readStringUntil('\n'); lengthString = inString.length(); for (int i = 0; i < inString.length(); i++)

{ symbol = inString.charAt(i); if (symbol.equals(" ") == true)

} v1 = inString.substring(0, k[0]); v2 = inString.substring(k[0], lengthString); nhietdo = v2.toInt(); doam = v1.toInt();

Firebase.set(firebaseData, "Doam", doam);

Firebase.set(firebaseData, "Nhietdo", nhietdo);

Chương trình điều khiển chính tầng 1

// khai bao chan cam bien

//Khai bao bien int st_quat1 = 0, st_quat2 = 0, st_quat3 = 0, st_den1 = 0, st_den2 = 0, st_den3 = 0, st_den4 = 0; int t, h, idesp, state_door = 0; unsigned long time;

String esp2mega = "", keyid = "", passw = "123";

79 const byte Rows = 4; //number of rows on the keypad i.e 4 const byte Cols = 3; //number of columns on the keypad i,e, 3

//we will definne the key map as on the key pad: char keymap[Rows][Cols] =

}; byte rPins[Rows] = {25, 24, 23, 22}; //Rows 0 to 3 byte cPins[Cols] = {28, 27, 26}; //Columns 0 to 2

Keypad kpd = Keypad(makeKeymap(keymap), rPins, cPins, Rows, Cols); void setup() {

//khai bao ket noi uart

Serial2.begin(9600); // ket noi esp8266

//khai bao input dht.begin(); pinMode(PIN_BUTTON, INPUT_PULLUP); pinMode(PIN_MQ2, INPUT); pinMode(PIN_RASP, INPUT);

To configure the output pins for various components, initialize the pins for the three switches (PIN_QUAT1, PIN_QUAT2, PIN_QUAT3) and four LEDs (PIN_DEN1, PIN_DEN2, PIN_DEN3, PIN_DEN4) along with a buzzer (PIN_BUZZER) as outputs Set PIN_QUAT1 to LOW and activate the other switches and LEDs by setting PIN_QUAT2, PIN_QUAT3, PIN_DEN1, PIN_DEN2, PIN_DEN3, and PIN_DEN4 to HIGH, while also turning on the buzzer by setting PIN_BUZZER to HIGH.

80 myservo.attach(PIN_SERVO); myservo.write(80);

//khai bao lcd i2c lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Xin Chao");

// cài đặt tần số LoRa 433 MHz

LoRa.setPins(ss, rst, dio0); if (!LoRa.begin(433E6)) {

Serial.println("Starting LoRa failed!"); while (1);

CB_GAZ(); if ( (unsigned long) (millis() - time) > 5000) {

SEND_ESP(); time = millis();// cập nhật lại biến time

} if (Serial2.available() > 0) { esp2mega = ""; esp2mega = Serial2.readStringUntil('\n'); // val 1-22 idesp = esp2mega.toInt();

Serial.println(esp2mega); if (idesp < 15)

Serial.println("roga"); digitalWrite(PIN_BUZZER, LOW);

} if (digitalRead(PIN_BUTTON) == 0) digitalWrite(PIN_BUZZER, HIGH);

} void KEY_PAD() { if (digitalRead(PIN_RASP) == 1) { lcd.setCursor(0, 0); lcd.print("Face detect");

OPEN_DOOR(); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Xin Chao");

} char keypressed = kpd.getKey(); if (keypressed != NO_KEY)

DOC_CB(); if (keypressed == '*') { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Xin Chao"); keyid = keyid.substring(0, keyid.length() - 1);

} else if (keypressed == '#') { if (keyid == passw) {

OPEN_DOOR(); lcd.clear(); keyid = ""; lcd.setCursor(0, 0); lcd.print("Xin Chao");

} else { keyid = keyid + String(keypressed);

} lcd.setCursor(0, 1); lcd.print(keyid); if (keypressed == '*' && state_door == 1) { state_door = 0; lcd.setCursor(0, 1); lcd.print("Close door "); for (int pos = 160; pos >= 80; pos -= 1) { myservo.write(pos);

} void OPEN_DOOR() { state_door = 1; lcd.setCursor(0, 1); lcd.print("Open door "); for (int pos = 80; pos

Ngày đăng: 08/12/2023, 15:18

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

TÀI LIỆU LIÊN QUAN

w