HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP
IOT ỨNG DỤNG
Họ tên: Lương Tuấn Anh
sinh viên: B22DCCN021
H
i, 2025
I. GIỚI THIỆU TỔNG QUAN.....................................................................................................2
1.1. Giới thiệu chung..................................................................................................................2
1.2. Mục đích nghiên cứu..........................................................................................................2
1.3. Thiết bị phần cứng nền tảng phần mềm.........................................................................2
II. PHÂN TÍCH YÊU CẦU HỆ THỐNG....................................................................................2
2.1. Tổng quan...........................................................................................................................2
2.2. Mục tiêu hệ thống...............................................................................................................3
2.3. Phân tích yêu cầu chi tiết....................................................................................................3
2.3.1. Yêu cầu về chức năng................................................................................................3
2.3.2. Yêu cầu phi chức năng...............................................................................................3
2.3.3. Yêu cầu về phần cứng................................................................................................3
2.3.4. Yêu cầu phần mềm.....................................................................................................4
III. THIẾT KẾ HỆ THỐNG.........................................................................................................4
3.1. Tổng quan hệ thống............................................................................................................4
3.2. Thiết kế đồ mạch............................................................................................................4
3.4. Thiết kế ứng dụng web.......................................................................................................4
a. Các chức năng..................................................................................................................4
b. đồ tuần tự....................................................................................................................4
1
I. GIỚI THIỆU TỔNG QUAN
1.1. Giới thiệu chung
Hệ thống giám sát điều khiển thiết bị thông minh trong nhà đang trở thành xu hướng trong các
ứng dụng dân dụng IoT. Việc sử dụng các cảm biến như nhiệt độ, độ ẩm ánh sáng giúp
theo dõi môi trường trong thời gian thực, từ đó đưa ra các quyết định điều khiển thiết bị tự động
như bật/tắt đèn, quạt hoặc điều hòa. Đây giải pháp tối ưu để nâng cao tiện nghi, tiết kiệm năng
lượng đảm bảo hiệu quả vận hành của các thiết bị điện trong nhà.
1.2. Mục đích nghiên cứu
Mục tiêu của hệ thống bao gồm:
- Giám sát môi trường: Theo dõi các thông số nhiệt độ, độ ẩm ánh sáng để nắm bắt
tình trạng thực tế trong nhà.
- Phân tích dữ liệu: Lưu trữ phân tích dữ liệu cảm biến trên server để phát hiện bất
thường hoặc xu hướng thay đổi môi trường.
- Điều khiển tự động: Dựa trên dữ liệu cảm biến, hệ thống đưa ra quyết định bật/tắt đèn,
quạt hoặc điều hòa, giúp điều chỉnh môi trường theo nhu cầu người dùng.
- Giao diện người dùng thân thiện: Người dùng thể theo dõi điều khiển hệ thống từ
xa qua ứng dụng di động hoặc website.
Đối tượng sử dụng:
- Hộ gia đình, hoặc các tòa nhà nhu cầu theo dõi, kiểm soát các thiết bị điện tử, hoặc
theo dõi các thông số môi trường.
2
1.3. Thiết bị phần cứng vnền tảng phần mềm
1.3.1. ESP32-DEVKIT
Hình 1: ESP32-DEVKIT
ESP32-DEVKIT một trong những nền tảng vi điều khiển phổ biến hiện nay, được phát triển
bởi . Đây bộ vi điều khiển tích hợp Wi-Fi Bluetooth công suất thấp, Espressif Systems
cung cấp hiệu năng cao độ tin cậy tốt, được sử dụng rộng rãi trong các ứng dụng IoT, robot,
tự động hóa vhệ thống nhúng.
ESP32 thế hệ kế thừa của NodeMCU ESP8266, mang đến nhiều cải tiến vượt trội về hiệu
năng, tính năng khả năng mở rộng, đồng thời vẫn duy trì ưu điểm tiết kiệm chi phí vtiêu
thụ điện năng thấp, phù hợp cho các ứng dụng chạy bằng pin.
2. Đặc điểm nổi bật
Kết nối không dây: Hỗ trợ Wi-Fi 2.4 GHz Bluetooth v4.2 (BLE).
Bộ xử mạnh mẽ: Dual-core Xtensa® 32-bit LX6, tốc độ xung nhịp tối đa 240 MHz.
Hệ thống quản năng lượng: Hỗ trợ nhiều chế độ tiết kiệm năng lượng, thể duy trì
hoạt động với dòng tiêu thụ chỉ ~10 µA chế độ .deep sleep
3
Tính linh hoạt: Tích hợp nhiều giao diện ngoại vi như UART, SPI, I2C, I2S, ADC,
DAC, PWM, phù hợp với nhiều yêu cầu ứng dụng khác nhau.
Kích thước nhỏ gọn: 52 x 29 mm, dễ dàng tích hợp vào các mạch ứng dụng IoT.
3. Cấu hình phần cứng
3.1. Thông số kỹ thuật chính
CPU: Dual-core Tensilica Xtensa LX6, tối đa 240 MHz.
RAM: 520 KB SRAM.
ROM: 448 KB.
Flash: 4 MB (mặc định).
Kết nối: Wi-Fi 802.11 b/g/n, Bluetooth v4.2 + BLE.
GPIO: 30 chân đa năng.
ADC: 12-bit, tối đa 18 kênh.
DAC: 2 kênh (GPIO25, GPIO26).
PWM: hỗ trợ hầu hết các chân GPIO.
3.2. Nguồn cung cấp
Bảng mạch hỗ trợ ba phương thức cấp nguồn:
Qua cổng (mặc định).microUSB / Type-C
Qua chân .5V (VIN) / GND
Qua chân .3V3 / GND
3.3. Dòng tiêu thụ
Hoạt động bình thường: 160 260 mA.
Deep sleep: ~10 µA.
4
Hình 2: Kích thước ESP32-DEVKIT
đồ chân
DEVKIT hệ thống sử dụng 30 chân kết nối, trong đó 25 GPIO , 1 chân
EN(rs), 2 chân GND 2 chân nguồn
Hình 3: đồ chân ESP32-DEVKIT ( 30 chân)
5
1.3.2. MODULE CẢM BIẾN NHIỆT ĐỘ, ĐỘ ẨM DHT11
Hình 4: Module cảm biến độ ẩm, nhiệt độ DHT11
DHT11 một cảm biến kỹ thuật số giá rẻ để cảm nhận nhiệt độ độ ẩm. Cảm biến này
thể dễ dàng giao tiếp với bất kỳ bộ vi điều khiển vi nào như Arduino, Raspberry Pi, ...
để đo độ ẩm nhiệt độ ngay lập tức.
DHT11 một cảm biến độ ẩm tương đối. Để đo không khí xung quanh, cảm biến này sử
dụng một điện trở nhiệt một cảm biến độ ẩm điện dung.
Cấu tạo cảm biến nhiệt độ độ ẩm DHT11
Cảm biến DHT11 bao gồm một phần tử cảm biến độ ẩm điện dung một điện trở
nhiệt để cảm nhận nhiệt độ. Tụ điện cảm biến độ ẩm hai điện cực với chất nền giữ ẩm
làm chất điện môi giữa chúng. Thay đổi giá trị điện dung xảy ra với sự thay đổi của các
mức độ ẩm. IC đo, xử các giá trị điện trở đã thay đổi này và chuyển chúng thành dạng
kỹ thuật số.
Để đo nhiệt độ, cảm biến này sử dụng một nhiệt điện trở hệ số nhiệt độ âm, làm
giảm giá trị điện trở của khi nhiệt độ tăng. Để được giá trị điện trở lớn hơn ngay cả
6
đối với sự thay đổi nhỏ nhất của nhiệt độ, cảm biến này thường được làm bằng gốm bán
dẫn hoặc polymer.
đồ chân DHT11
Hình 5: đồ chân Module DHT11
Cảm biến một loại cảm biến kỹ thuật số phổ biến giá thành rẻ, được sử dụng để đo DHT11
nhiệt độ độ ẩm của môi trường. Cảm biến này dễ dàng kết nối giao tiếp với nhiều loại vi
điều khiển khác nhau như Arduino, ESP32, Raspberry Pi,… giúp thu thập dữ liệu môi trường
nhanh chóng chính xác.
DHT11 thuộc nhóm cảm biến , hoạt động dựa trên nguyên thay đổi giá trị độ ẩm tương đối
điện dung điện trở nhiệt khi điều kiện môi trường thay đổi.
2. Cấu tạo vnguyên hoạt động
2.1. Cấu tạo
Cảm biến DHT11 bao gồm hai thành phần chính:
Phần tử cảm biến độ ẩm điện dung: gồm hai điện cực chất nền giữ ẩm nằm giữa.
Khi độ ẩm thay đổi, hằng số điện môi thay đổi, làm thay đổi giá trị điện dung.
Điện trở nhiệt (NTC): hệ số nhiệt độ âm, tức khi nhiệt độ tăng thì điện trở giảm.
Các giá trị đo từ hai thành phần này sẽ được xử bởi IC tích hợp bên trong DHT11 chuyển
đổi sang tín hiệu số để vi điều khiển dễ dàng đọc được.
7
2.2. Nguyên hoạt động
Đo độ ẩm: Khi độ ẩm không khí thay đổi, giá trị điện dung của tụ điện cảm biến cũng
thay đổi theo. IC xử sẽ tính toán xuất ra giá trị độ ẩm tương ng.
Đo nhiệt độ: Sử dụng điện trở nhiệt hệ số nhiệt độ âm (NTC). Khi nhiệt độ tăng, điện
trở giảm; khi nhiệt độ giảm, điện trở tăng. Từ sự thay đổi này, IC sẽ c định giá trị nhiệt
độ.
3. Đặc điểm kỹ thuật
Điện áp hoạt động: 3.5V 5.5V.
Dải đo độ ẩm: 20% 90% RH, sai số ±5% RH.
Dải đo nhiệt độ: 0 50 °C, sai số ±2 °C.
Tần suất lấy mẫu: 1 Hz (một lần mỗi giây).
Giao tiếp: Tín hiệu số, giao thức một dây ( ).single-wire
1.3.3. MODULE CẢM BIẾN ÁNH SÁNG BH1750
BH1750 cảm biến ánh sáng xung quanh kỹ thuật số thường được sử dụng trong điện thoại di
động để điều chỉnh độ sáng màn hình dựa trên ánh sáng môi trường. Cảm biến này thể đo
chính xác giá trị LUX của ánh sáng lên tới 65535lx.
Hình 6. Module cảm biến ánh sáng BH1750
8
Thông số kỹ thuật
Nguồn điện: 2.4V-3.6V (thường 3.0V)
Tiêu thụ dòng điện ít hơn: 0,12mA
Dải đo: 1-65535lx
Giao tiếp: bus I2C
Độ chính xác: +/-20%
Bộ chuyển đổi A/D tích hợp để chuyển đổi độ sáng analog trong dữ liệu số.
Ảnh hưởng rất nhỏ của bức xạ hồng ngoại
Độ phản hồi cao gần với mắt người.
đồ chân BH1750
Hình 7. đồ chân Module cảm biến ánh sáng BH1750
1.3.4. Module Relay
9
Hình 8. Relay
Relay một loại công tắc điện tử được điều khiển bằng tín hiệu điện áp nhỏ từ vi điều khiển
(như , , ), dùng để đóng/ngắt các thiết bị điện công suất lớn (đèn, Arduino ESP32 Raspberry Pi
quạt, động cơ…). Nhờ chế cách ly giữa mạch điều khiển mạch tải, module relay đảm bảo
an toàn được ứng dụng rộng rãi trong các hệ thống .IoT, tự động hóa vnhthông minh
Cấu tạo
Cuộn dây (Coil): bộ phận tạo từ trường khi dòng điện chạy qua, quyết định khả
năng đóng/mở của relay.
Tiếp điểm (Contacts): Thành phần quan trọng giúp relay đóng/m mạch điện, điều khiển
trực tiếp thiết bị.
Diode bảo vệ: Giúp ngăn chặn dòng ngược từ cuộn dây, tránh làm hỏng vi điều khiển.
Mạch cách ly (Optocoupler, Transistor): Đảm bảo sự an toàn ổn định của tín hiệu điều
khiển, giảm thiểu nhiễu điện.
LED báo trạng thái: Hiển thị trạng thái hoạt động của relay, giúp người dùng dễ dàng
kiểm tra.
10
đồ hoạt động của Module Relay
Khi vi điều khiển gửi tín hiệu mức cao, dòng điện chạy qua cuộn dây relay, tạo từ trường
hút tiếp điểm.
Tiếp điểm đóng lại, cấp nguồn cho thiết bị hoạt động.
Khi tín hiệu điều khiển mức thấp, từ trường biến mất, tiếp điểm mở ra, thiết bị ngừng
hoạt động.
Tương tự đối với tín hiệu vi điều khiển kích mức thấp
Hình 9: đồ hoạt động của Module Relay
Hệ thống sử dụng 3 module relay 1 kênh để điều khiển 3 đèn LED
II. PHÂN TÍCH & THIẾT KẾ YÊU CẦU HỆ THỐNG
2.1. Tổng quan
Hệ thống IoT giám sát các thông số: nhiệt độ, độ ẩm, ánh sáng điều khiển các thiết bị đèn,
quạt, điều hòa trong nhà một cách thông minh. Dữ liệu được gửi xử theo thời gian thực,
giúp theo dõi một cách trực quan điều khiển bằng giao diện web trên các thiết bị như điện
thoại, laptop ngay cả khi không mặt tại nhà.
11
2.2. Mục tiêu hệ thống
Xây dựng hệ thống giám sát nhiệt độ, độ ẩm, ánh sáng đồng bộ lên sở dữ liệu một
cách nhanh chóng
Cung cấp giao diện người dùng trực quan
Xây dựng hệ thống điều khiển các thiết bị đèn, quạt, điều hoà từ xa.
Đảm bảo tính bảo mật ổn định của hệ thống
2.3. Phân tích yêu cầu chi tiết
2.3.1. Yêu cầu về chức năng
Giám sát thời gian thực:
Hiển thị các thông số môi trường (nhiệt độ, độ ẩm, ánh sáng) theo thời gian thực.
Cập nhật trạng thái các thiết bị (đèn, quạt, điều hòa)
Điều khiển thiết bị:
Bật/tắt các thiết bị từ xa thông qua giao diện Web.
Quản dữ liệu:
Lưu trữ lịch sử hoạt động của các thiết bị dữ liệu cảm biến.
Xuất báo cáo dưới nhiều định dạng (CSV, PDF…) phục vụ giám sát phân tích.
2.3.2. Yêu cầu phi chức năng
Thời gian phản hồi:
- Giao diện web: <2 giây
Cập nhật dữ liệu thời gian thực: < 1 giây
- Xử lệnh điều khiển: < 1 giây
2.3.3. Yêu cầu phần mềm
Nền tảng triển khai: Vercel (Cloud Platform)
Frontend:
- Framework: React.js
- UI Library: AntDesign, TailwindCSS
- State Management: Zustand
- Chart Library: Rechart
Backend:
- Database: Firestore
12
- Framework: NestJS + MQTT microservices
Firmware:
- Platform: Arduino
- Libraries: ESP8266WiFi, FirebaseESP8266
- Protocol: MQTT
III. THIẾT KẾ HỆ THỐNG
3.1. Tổng quan hệ thống
3.2. Thiết kế mạc phần cứng
Khối nguồn
Cung cấp năng lượng cho toàn bộ hệ thống, bao gồm vi điều khiển ESP32, các cảm biến,
module relay các tải đầu ra (LED).
Khối cảm biến (DHT11, BH1750)
Cảm biến DHT11 được dùng để đo nhiệt độ độ ẩm môi trường.
Cảm biến BH1750 được dùng để đo cường độ ánh sáng.
Các tín hiệu thu thập từ cảm biến sẽ được gửi về để xử lý.khối vi điều khiển
13
Khối vi điều khiển (ESP32)
Đóng vai trò trung tâm xử lý, nhận dữ liệu từ các cảm biến.
Thực hiện xử dữ liệu, đưa ra quyết định điều khiển.
Gửi tín hiệu điều khiển đến để bật/tắt các thiết bị đầu ra khối công tắc (module relay)
(LED).
Đồng thời, ESP32 cũng giao tiếp với , giúp người dùng giám sát điều khiển hệ Server
thống từ xa thông qua thiết bị kết nối mạng.
Khối công tắc (Module Relay)
Đóng vai trò như mạch đóng/ngắt, nhận lệnh từ ESP32.
Điều khiển trực tiếp các tải đầu ra (LED 1, LED 2, LED 3).
Các thiết bị đầu ra (LED 1, LED 2, LED 3)
các tải phỏng, được điều khiển bật/tắt tùy theo tín hiệu từ ESP32 thông qua
module relay.
Server vDevices
ESP32 kết nối với để lưu trữ quản dữ liệu.Server
Người dùng thể sử dụng (máy tính, smartphone, v.v.) để giám sát điều Devices
khiển hệ thống từ xa thông qua server.
ĐỒ ĐẤU DÂY
14
Hình 11: đồ đấu dây
Nguồn cấp cho hệ thống
Toàn bộ mạch được cấp nguồn từ cổng USB của ESP32.
Điện áp 3.3V của ESP32 được dùng cho cảm biến.
Điện áp 5V được sử dụng để nuôi module relay LED.
Khối vi điều khiển ESP32
ESP32 được bố trí trên breadboard đóng vai trò trung tâm xử lý.
Các chân GPIO của ESP32 được sử dụng để giao tiếp với cảm biến phát tín hiệu điều
khiển relay.
ESP32 được cấp nguồn trực tiếp từ cổng USB (5V), đồng thời sử dụng điện áp 3.3V nội
bộ để nuôi cảm biến.
Khối cảm biến
Cảm biến DHT11 dùng để đo nhiệt độ độ ẩm.
Chân VCC của DHT11 nối với chân 3.3V trên ESP32.
Chân GND nối với GND của ESP32.
15
Chân DATA được kết nối với một chân GPIO của ESP32 để truyền dữ liệu.
Cảm biến BH1750 dùng để đo cường độ ánh sáng, giao tiếp với ESP32 qua giao thức
I2C.
Chân VCC nối 3.3V.
Chân GND nối GND.
Chân SDA nối với GPIO21 (SDA) của ESP32.
Chân SCL nối với GPIO22 (SCL) của ESP32.
Khối điều khiển relay
Hệ thống sử dụng 3 module relay đơn, mỗi relay điều khiển một LED riêng biệt.
Chân tín hiệu (IN) của mỗi relay lần lượt được kết nối đến các chân GPIO điều khin trên
ESP32.
Chân VCC của relay được cấp nguồn 5V, GND của relay nối chung mass với ESP32 để
đồng bộ tín hiệu điều khiển.
Khối tải đầu ra (LED)
Mỗi LED được nối với tiếp điểm của một relay.NO (Normally Open) COM
Khi ESP32 phát tín hiệu kích hoạt, relay đóng mạch cho phép dòng điện chạy qua LED
làm LED sáng.
Nhờ vậy, vi điều khiển thể điều khiển trạng thái bật/tắt của từng LED một cách độc
lập.
3.3.1. Các thực thể
1. User (Người dùng)
Mục đích: Quản thông tin người dùng hệ thống
Thuộc tính:
id (PK): UUID - Định danh duy nhất người dùng
password: String - Mật khẩu đăng nhập
email: String (Unique) - Email đăng nhập
phone: String (Nullable) - Số điện thoại
created_at: DateTime - Thời gian tạo tài khoản
16
updated_at: DateTime - Thời gian cập nhật cuối
Mối quan hệ: 1-N với DevicesActionLog (một user thể thực hiện nhiều thao tác)
2. Sensor (Cảm biến)
Mục đích: Quản thông tin các cảm biến trong hệ thống
Thuộc tính:
id (PK): UUID - Định danh duy nhất cảm biến
name: String - Tên cảm biến
is_active: Boolean (Default: true) - Trạng thái hoạt động
location: String (Nullable) - Vị trí đặt cảm biến
created_at: DateTime - Thời gian tạo
updated_at: DateTime - Thời gian cập nhật cuối
Mối quan hệ: 1-N với SensorData (một cảm biến tạo ra nhiều dữ liệu)
3. SensorData (Dữ liệu cảm biến)
Mục đích: Lưu trữ dữ liệu thô từ cảm biến
Thuộc tính:
id (PK): Int (Auto increment) - Định danh duy nhất
sensor_id (FK): String (Nullable) - Tham chiếu đến Sensor
data: Json - Dữ liệu thô từ cảm biến
temperature: Float (Nullable) - Nhiệt độ đã parse
humidity: Float (Nullable) - Độ ẩm đã parse
light: Float (Nullable) - Ánh sáng đã parse
created_at: DateTime - Thời gian thu thập dữ liệu
Mối quan hệ: N-1 với Sensor (nhiều dữ liệu thuộc về một cảm biến)
4. Device (Thiết bị)
Mục đích: Quản các thiết bị thể điều khiển (relay, actuator)
Thuộc tính:
id (PK): UUID - Định danh duy nhất thiết bị
name: String - Tên thiết bị
location: String (Nullable) - Vị trí đặt thiết bị
sensor_id: String (Unique) - ID cảm biến để Arduino nhận diện
port: Int (Default: 0) - Cổng GPIO trên Arduino
created_at: DateTime - Thời gian tạo
17
updated_at: DateTime - Thời gian cập nhật cuối
Mối quan hệ:
1-1 với CurrentDeviceStatus
1-N với DevicesActionLog
1-N với DeviceScript
5. CurrentDeviceStatus (Trạng thái thiết bị hiện tại)
Mục đích: Lưu trữ trạng thái hiện tại của thiết bị
Thuộc tính:
device_id (PK, FK): String - Tham chiếu đến Device
status: Enum (on, off, standby) - Trạng thái hiện tại
updated_at: DateTime - Thời gian cập nhật trạng thái
Mối quan hệ: 1-1 với Device
6. DevicesActionLog (Lịch sử thao tác thiết bị)
Mục đích: Ghi lại tất cả thao tác điều khiển thiết bị
Thuộc tính:
id (PK): Int (Auto increment) - Định danh duy nhất log
device_id (FK): String - Thiết bị được điều khiển
action: Enum (switch_on, switch_off, adjust_temperature) - Hành động thực hiện
user_id (FK): String - Người thực hiện thao tác
is_executing: Boolean (Default: false) - Trạng thái đang thực thi
status_before: String - Trạng thái trước khi thao tác
status_after: String (Nullable) - Trạng thái sau khi thao tác
created_at: DateTime - Thời gian thực hiện thao tác
Mối quan hệ:
N-1 với Device
N-1 với User
7. DeviceScript (Script tự động)
Mục đích: Quản các script tự động cho thiết bị
Thuộc tính:
id (PK): UUID - Định danh duy nhất script
device_id (FK): String - Thiết bị áp dụng script
18
name: String - Tên script
description: String (Nullable) - tả script
is_active: Boolean (Default: true) - Trạng thái hoạt động
created_at: DateTime - Thời gian tạo
updated_at: DateTime - Thời gian cập nhật cuối
Mối quan hệ:
N-1 với Device
1-N với ScriptCondition
1-N với ScriptAction
8. ScriptCondition (Điều kiện script)
Mục đích: Định nghĩa điều kiện để kích hoạt script
Thuộc tính:
id (PK): UUID - Định danh duy nhất điều kiện
script_id (FK): String - Script chứa điều kiện này
condition_type: Enum (AND, OR) - Loại điều kiện logic
sensor_type: Enum (TEMPERATURE, HUMIDITY, LIGHT, DEVICE_STATUS) -
Loại cảm biến
comparison_type: Enum (LESS_THAN, GREATER_THAN, EQUAL_TO,
NOT_EQUAL_TO, LESS_THAN_OR_EQUAL,
GREATER_THAN_OR_EQUAL) - Toán tử so sánh
value: Float - Giá trị để so sánh
Mối quan hệ: N-1 với DeviceScript
9. ScriptAction (Hành động script)
Mục đích: Định nghĩa hành động sẽ thực hiện khi điều kiện được thỏa mãn
Thuộc tính:
id (PK): UUID - Định danh duy nhất hành động
script_id (FK): String - Script chứa hành động này
action_type: Enum (switch_on, switch_off, adjust_temperature) - Loại hành động
action_target: String - Mục tiêu thực hiện hành động
action_value: String (Nullable) - Giá trị hành động
Mối quan hệ: N-1 với DeviceScript
Mối quan hệ:
1. User (1-N): Một user thể thực hiện nhiều thao tácDevicesActionLog
19

Preview text:

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP
IOT ỨNG DỤNG
Họ và tên: Lương Tuấn Anh Mã sinh viên: B22DCCN021 H Nôi, 2025 MỤC LỤC
I. GIỚI THIỆU TỔNG QUAN.....................................................................................................2
1.1. Giới thiệu chung..................................................................................................................2
1.2. Mục đích nghiên cứu..........................................................................................................2
1.3. Thiết bị phần cứng và nền tảng phần mềm.........................................................................2
II. PHÂN TÍCH YÊU CẦU HỆ THỐNG....................................................................................2
2.1. Tổng quan...........................................................................................................................2
2.2. Mục tiêu hệ thống...............................................................................................................3
2.3. Phân tích yêu cầu chi tiết....................................................................................................3
2.3.1. Yêu cầu về chức năng................................................................................................3
2.3.2. Yêu cầu phi chức năng...............................................................................................3
2.3.3. Yêu cầu về phần cứng................................................................................................3
2.3.4. Yêu cầu phần mềm.....................................................................................................4
III. THIẾT KẾ HỆ THỐNG.........................................................................................................4
3.1. Tổng quan hệ thống............................................................................................................4
3.2. Thiết kế sơ đồ mạch............................................................................................................4
3.4. Thiết kế ứng dụng web.......................................................................................................4
a. Các chức năng..................................................................................................................4
b. Sơ đồ tuần tự....................................................................................................................4 1 I.
GIỚI THIỆU TỔNG QUAN
1.1. Giới thiệu chung
Hệ thống giám sát và điều khiển thiết bị thông minh trong nhà đang trở thành xu hướng trong các
ứng dụng dân dụng và IoT. Việc sử dụng các cảm biến như nhiệt độ, độ ẩm và ánh sáng giúp
theo dõi môi trường trong thời gian thực, từ đó đưa ra các quyết định điều khiển thiết bị tự động
như bật/tắt đèn, quạt hoặc điều hòa. Đây là giải pháp tối ưu để nâng cao tiện nghi, tiết kiệm năng
lượng và đảm bảo hiệu quả vận hành của các thiết bị điện trong nhà.
1.2. Mục đích nghiên cứu
Mục tiêu của hệ thống bao gồm: -
Giám sát môi trường: Theo dõi các thông số nhiệt độ, độ ẩm và ánh sáng để nắm bắt
tình trạng thực tế trong nhà. -
Phân tích dữ liệu: Lưu trữ và phân tích dữ liệu cảm biến trên server để phát hiện bất
thường hoặc xu hướng thay đổi môi trường. -
Điều khiển tự động: Dựa trên dữ liệu cảm biến, hệ thống đưa ra quyết định bật/tắt đèn,
quạt hoặc điều hòa, giúp điều chỉnh môi trường theo nhu cầu người dùng. -
Giao diện người dùng thân thiện: Người dùng có thể theo dõi và điều khiển hệ thống từ
xa qua ứng dụng di động hoặc website. Đối tượng sử dụng: -
Hộ gia đình, hoặc các tòa nhà có nhu cầu theo dõi, kiểm soát các thiết bị điện tử, hoặc
theo dõi các thông số môi trường. 2
1.3. Thiết bị phần cứng v nền tảng phần mềm
1.3.1. ESP32-DEVKIT
Hình 1: ESP32-DEVKIT
ESP32-DEVKIT là một trong những nền tảng vi điều khiển phổ biến hiện nay, được phát triển
bởi Espressif Systems. Đây là bộ vi điều khiển tích hợp Wi-Fi và Bluetooth công suất thấp,
cung cấp hiệu năng cao và độ tin cậy tốt, được sử dụng rộng rãi trong các ứng dụng IoT, robot,
tự động hóa v hệ thống nhúng.
ESP32 là thế hệ kế thừa của NodeMCU ESP8266, mang đến nhiều cải tiến vượt trội về hiệu
năng, tính năng và khả năng mở rộng, đồng thời vẫn duy trì ưu điểm tiết kiệm chi phí v tiêu
thụ điện năng thấp, phù hợp cho các ứng dụng chạy bằng pin. 2. Đặc điểm nổi bật
Kết nối không dây: Hỗ trợ Wi-Fi 2.4 GHz và Bluetooth v4.2 (BLE).
Bộ xử mạnh mẽ: Dual-core Xtensa® 32-bit LX6, tốc độ xung nhịp tối đa 240 MHz.
Hệ thống quản năng lượng: Hỗ trợ nhiều chế độ tiết kiệm năng lượng, có thể duy trì
hoạt động với dòng tiêu thụ chỉ ~10 µA ở chế độ deep sleep. 3
Tính linh hoạt: Tích hợp nhiều giao diện ngoại vi như UART, SPI, I2C, I2S, ADC,
DAC, PWM, phù hợp với nhiều yêu cầu ứng dụng khác nhau.
Kích thước nhỏ gọn: 52 x 29 mm, dễ dàng tích hợp vào các mạch ứng dụng IoT.
3. Cấu hình phần cứng
3.1. Thông số kỹ thuật chính
CPU: Dual-core Tensilica Xtensa LX6, tối đa 240 MHz. RAM: 520 KB SRAM. ROM: 448 KB. Flash: 4 MB (mặc định).
Kết nối: Wi-Fi 802.11 b/g/n, Bluetooth v4.2 + BLE. GPIO: 30 chân đa năng.
ADC: 12-bit, tối đa 18 kênh. DAC: 2 kênh (GPIO25, GPIO26).
PWM: hỗ trợ hầu hết các chân GPIO.
3.2. Nguồn cung cấp
Bảng mạch hỗ trợ ba phương thức cấp nguồn:
Qua cổng microUSB / Type-C (mặc định).
Qua chân 5V (VIN) / GND.
Qua chân 3V3 / GND.
3.3. Dòng tiêu thụ
Hoạt động bình thường: 160 – 260 mA. Deep sleep: ~10 µA. 4
Hình 2: Kích thước ESP32-DEVKIT Sơ đồ chân
DEVKIT hệ thống sử dụng có 30 chân kết nối, trong đó có 25 GPIO , 1 chân
EN(rs), 2 chân GND và 2 chân nguồn
Hình 3: đồ chân ESP32-DEVKIT ( 30 chân) 5
1.3.2. MODULE CẢM BIẾN NHIỆT ĐỘ, ĐỘ ẨM DHT11
Hình 4: Module cảm biến độ ẩm, nhiệt độ DHT11
DHT11 là một cảm biến kỹ thuật số giá rẻ để cảm nhận nhiệt độ và độ ẩm. Cảm biến này
có thể dễ dàng giao tiếp với bất kỳ bộ vi điều khiển vi nào như Arduino, Raspberry Pi, ...
để đo độ ẩm và nhiệt độ ngay lập tức.
DHT11 là một cảm biến độ ẩm tương đối. Để đo không khí xung quanh, cảm biến này sử
dụng một điện trở nhiệt và một cảm biến độ ẩm điện dung.
Cấu tạo cảm biến nhiệt độ độ ẩm DHT11
Cảm biến DHT11 bao gồm một phần tử cảm biến độ ẩm điện dung và một điện trở
nhiệt để cảm nhận nhiệt độ. Tụ điện cảm biến độ ẩm có hai điện cực với chất nền giữ ẩm
làm chất điện môi giữa chúng. Thay đổi giá trị điện dung xảy ra với sự thay đổi của các
mức độ ẩm. IC đo, xử lý các giá trị điện trở đã thay đổi này và chuyển chúng thành dạng kỹ thuật số.
Để đo nhiệt độ, cảm biến này sử dụng một nhiệt điện trở có hệ số nhiệt độ âm, làm
giảm giá trị điện trở của nó khi nhiệt độ tăng. Để có được giá trị điện trở lớn hơn ngay cả 6
đối với sự thay đổi nhỏ nhất của nhiệt độ, cảm biến này thường được làm bằng gốm bán dẫn hoặc polymer.
đồ chân DHT11
Hình 5: đồ chân Module DHT11
Cảm biến DHT11 là một loại cảm biến kỹ thuật số phổ biến và giá thành rẻ, được sử dụng để đo
nhiệt độ và độ ẩm của môi trường. Cảm biến này dễ dàng kết nối và giao tiếp với nhiều loại vi
điều khiển khác nhau như Arduino, ESP32, Raspberry Pi,… giúp thu thập dữ liệu môi trường nhanh chóng và chính xác.
DHT11 thuộc nhóm cảm biến độ ẩm tương ,
đối hoạt động dựa trên nguyên lý thay đổi giá trị
điện dung và điện trở nhiệt khi điều kiện môi trường thay đổi.
2. Cấu tạo v nguyên hoạt động 2.1. Cấu tạo
Cảm biến DHT11 bao gồm hai thành phần chính:
Phần tử cảm biến độ ẩm điện dung: gồm hai điện cực và chất nền giữ ẩm nằm giữa.
Khi độ ẩm thay đổi, hằng số điện môi thay đổi, làm thay đổi giá trị điện dung.
Điện trở nhiệt (NTC): có hệ số nhiệt độ âm, tức là khi nhiệt độ tăng thì điện trở giảm.
Các giá trị đo từ hai thành phần này sẽ được xử lý bởi IC tích hợp bên trong DHT11 và chuyển
đổi sang tín hiệu số để vi điều khiển dễ dàng đọc được. 7
2.2. Nguyên hoạt động
Đo độ ẩm: Khi độ ẩm không khí thay đổi, giá trị điện dung của tụ điện cảm biến cũng
thay đổi theo. IC xử lý sẽ tính toán và xuất ra giá trị độ ẩm tương ứng.
Đo nhiệt độ: Sử dụng điện trở nhiệt có hệ số nhiệt độ âm (NTC). Khi nhiệt độ tăng, điện
trở giảm; khi nhiệt độ giảm, điện trở tăng. Từ sự thay đổi này, IC sẽ xác định giá trị nhiệt độ.
3. Đặc điểm kỹ thuật
Điện áp hoạt động: 3.5V – 5.5V.
Dải đo độ ẩm: 20% – 90% RH, sai số ±5% RH.
Dải đo nhiệt độ: 0 – 50 °C, sai số ±2 °C.
Tần suất lấy mẫu: 1 Hz (một lần mỗi giây).
Giao tiếp: Tín hiệu số, giao thức một dây (single-wire).
1.3.3. MODULE CẢM BIẾN ÁNH SÁNG BH1750
BH1750 là cảm biến ánh sáng xung quanh kỹ thuật số thường được sử dụng trong điện thoại di
động để điều chỉnh độ sáng màn hình dựa trên ánh sáng môi trường. Cảm biến này có thể đo
chính xác giá trị LUX của ánh sáng lên tới 65535lx.
Hình 6. Module cảm biến ánh sáng BH1750 8
Thông số kỹ thuật
Nguồn điện: 2.4V-3.6V (thường là 3.0V)
Tiêu thụ dòng điện ít hơn: 0,12mA Dải đo: 1-65535lx Giao tiếp: bus I2C Độ chính xác: +/-20%
Bộ chuyển đổi A/D tích hợp để chuyển đổi độ sáng analog trong dữ liệu số.
Ảnh hưởng rất nhỏ của bức xạ hồng ngoại
Độ phản hồi cao gần với mắt người.
đồ chân BH1750
Hình 7. đồ chân Module cảm biến ánh sáng BH1750
1.3.4. Module Relay 9 Hình 8. Relay
Relay là một loại công tắc điện tử được điều khiển bằng tín hiệu điện áp nhỏ từ vi điều khiển
(như Arduino, ESP32, Raspberry Pi), dùng để đóng/ngắt các thiết bị điện công suất lớn (đèn,
quạt, động cơ…). Nhờ cơ chế cách ly giữa mạch điều khiển và mạch tải, module relay đảm bảo
an toàn và được ứng dụng rộng rãi trong các hệ thống IoT, tự động hóa v nh thông minh. Cấu tạo
● Cuộn dây (Coil): Là bộ phận tạo từ trường khi có dòng điện chạy qua, quyết định khả năng đóng/mở của relay.
● Tiếp điểm (Contacts): Thành phần quan trọng giúp relay đóng/mở mạch điện, điều khiển trực tiếp thiết bị.
● Diode bảo vệ: Giúp ngăn chặn dòng ngược từ cuộn dây, tránh làm hỏng vi điều khiển.
● Mạch cách ly (Optocoupler, Transistor): Đảm bảo sự an toàn và ổn định của tín hiệu điều
khiển, giảm thiểu nhiễu điện.
● LED báo trạng thái: Hiển thị trạng thái hoạt động của relay, giúp người dùng dễ dàng kiểm tra. 10
đồ hoạt động của Module Relay
Khi vi điều khiển gửi tín hiệu mức cao, dòng điện chạy qua cuộn dây relay, tạo từ trường hút tiếp điểm.
Tiếp điểm đóng lại, cấp nguồn cho thiết bị hoạt động.
Khi tín hiệu điều khiển ở mức thấp, từ trường biến mất, tiếp điểm mở ra, thiết bị ngừng hoạt động.
Tương tự đối với tín hiệu vi điều khiển kích mức thấp
Hình 9: Sơ đồ hoạt động của Module Relay
Hệ thống sử dụng 3 module relay 1 kênh để điều khiển 3 đèn LED II.
PHÂN TÍCH & THIẾT KẾ YÊU CẦU HỆ THỐNG 2.1. Tổng quan
Hệ thống IoT giám sát các thông số: nhiệt độ, độ ẩm, ánh sáng và và điều khiển các thiết bị đèn,
quạt, điều hòa trong nhà một cách thông minh. Dữ liệu được gửi và xử lý theo thời gian thực,
giúp theo dõi một cách trực quan và điều khiển bằng giao diện web trên các thiết bị như điện
thoại, laptop ngay cả khi không có mặt tại nhà. 11
2.2. Mục tiêu hệ thống
● Xây dựng hệ thống giám sát nhiệt độ, độ ẩm, ánh sáng và đồng bộ lên cơ sở dữ liệu một cách nhanh chóng
● Cung cấp giao diện người dùng trực quan
● Xây dựng hệ thống điều khiển các thiết bị đèn, quạt, điều hoà từ xa.
● Đảm bảo tính bảo mật và ổn định của hệ thống
2.3. Phân tích yêu cầu chi tiết
2.3.1. Yêu cầu về chức năng Giám sát thời gian thực:
● Hiển thị các thông số môi trường (nhiệt độ, độ ẩm, ánh sáng) theo thời gian thực.
● Cập nhật trạng thái các thiết bị (đèn, quạt, điều hòa) Điều khiển thiết bị:
● Bật/tắt các thiết bị từ xa thông qua giao diện Web. Quản lý dữ liệu:
● Lưu trữ lịch sử hoạt động của các thiết bị và dữ liệu cảm biến.
● Xuất báo cáo dưới nhiều định dạng (CSV, PDF…) phục vụ giám sát và phân tích.
2.3.2. Yêu cầu phi chức năng Thời gian phản hồi:
- Giao diện web: <2 giây
– Cập nhật dữ liệu thời gian thực: < 1 giây
- Xử lý lệnh điều khiển: < 1 giây
2.3.3. Yêu cầu phần mềm
Nền tảng triển khai: Vercel (Cloud Platform) Frontend: - Framework: React.js
- UI Library: AntDesign, TailwindCSS - State Management: Zustand - Chart Library: Rechart Backend: - Database: Firestore 12
- Framework: NestJS + MQTT microservices Firmware: - Platform: Arduino
- Libraries: ESP8266WiFi, FirebaseESP8266 - Protocol: MQTT III.
THIẾT KẾ HỆ THỐNG
3.1. Tổng quan hệ thống
3.2. Thiết kế mạc phần cứng Khối nguồn
● Cung cấp năng lượng cho toàn bộ hệ thống, bao gồm vi điều khiển ESP32, các cảm biến,
module relay và các tải đầu ra (LED).
Khối cảm biến (DHT11, BH1750)
● Cảm biến DHT11 được dùng để đo nhiệt độ và độ ẩm môi trường.
● Cảm biến BH1750 được dùng để đo cường độ ánh sáng.
● Các tín hiệu thu thập từ cảm biến sẽ được gửi về khối vi điều khiển để xử lý. 13
Khối vi điều khiển (ESP32)
● Đóng vai trò trung tâm xử lý, nhận dữ liệu từ các cảm biến.
● Thực hiện xử lý dữ liệu, đưa ra quyết định điều khiển.
● Gửi tín hiệu điều khiển đến khối công tắc (module relay) để bật/tắt các thiết bị đầu ra (LED).
● Đồng thời, ESP32 cũng giao tiếp với Server, giúp người dùng giám sát và điều khiển hệ
thống từ xa thông qua thiết bị kết nối mạng.
Khối công tắc (Module Relay)
● Đóng vai trò như mạch đóng/ngắt, nhận lệnh từ ESP32.
● Điều khiển trực tiếp các tải đầu ra (LED 1, LED 2, LED 3).
Các thiết bị đầu ra (LED 1, LED 2, LED 3)
● Là các tải mô phỏng, được điều khiển bật/tắt tùy theo tín hiệu từ ESP32 thông qua module relay.
Server v Devices
● ESP32 kết nối với Server để lưu trữ và quản lý dữ liệu.
● Người dùng có thể sử dụng
Devices (máy tính, smartphone, v.v.) để giám sát và điều
khiển hệ thống từ xa thông qua server.
ĐỒ ĐẤU DÂY 14
Hình 11: Sơ đồ đấu dây Nguồn cấp cho hệ thống
● Toàn bộ mạch được cấp nguồn từ cổng USB của ESP32.
● Điện áp 3.3V của ESP32 được dùng cho cảm biến.
● Điện áp 5V được sử dụng để nuôi module relay và LED.
Khối vi điều khiển ESP32
● ESP32 được bố trí trên breadboard và đóng vai trò trung tâm xử lý.
● Các chân GPIO của ESP32 được sử dụng để giao tiếp với cảm biến và phát tín hiệu điều khiển relay.
● ESP32 được cấp nguồn trực tiếp từ cổng USB (5V), đồng thời sử dụng điện áp 3.3V nội bộ để nuôi cảm biến. Khối cảm biến
● Cảm biến DHT11 dùng để đo nhiệt độ và độ ẩm.
○ Chân VCC của DHT11 nối với chân 3.3V trên ESP32.
○ Chân GND nối với GND của ESP32. 15
○ Chân DATA được kết nối với một chân GPIO của ESP32 để truyền dữ liệu.
● Cảm biến BH1750 dùng để đo cường độ ánh sáng, giao tiếp với ESP32 qua giao thức I2C. ○ Chân VCC nối 3.3V. ○ Chân GND nối GND.
○ Chân SDA nối với GPIO21 (SDA) của ESP32.
○ Chân SCL nối với GPIO22 (SCL) của ESP32. Khối điều khiển relay
● Hệ thống sử dụng 3 module relay đơn, mỗi relay điều khiển một LED riêng biệt.
● Chân tín hiệu (IN) của mỗi relay lần lượt được kết nối đến các chân GPIO điều khin trên ESP32.
● Chân VCC của relay được cấp nguồn 5V, GND của relay nối chung mass với ESP32 để
đồng bộ tín hiệu điều khiển. Khối tải đầu ra (LED)
● Mỗi LED được nối với tiếp điểm NO (Normally Open) và COM của một relay.
● Khi ESP32 phát tín hiệu kích hoạt, relay đóng mạch cho phép dòng điện chạy qua LED và làm LED sáng.
● Nhờ vậy, vi điều khiển có thể điều khiển trạng thái bật/tắt của từng LED một cách độc lập.
3.3.1. Các thực thể 1. User (Người dùng)
Mục đích: Quản lý thông tin người dùng hệ thống Thuộc tính:
id (PK): UUID - Định danh duy nhất người dùng
password: String - Mật khẩu đăng nhập
email: String (Unique) - Email đăng nhập
phone: String (Nullable) - Số điện thoại
created_at: DateTime - Thời gian tạo tài khoản 16
updated_at: DateTime - Thời gian cập nhật cuối
Mối quan hệ: 1-N với DevicesActionLog (một user có thể thực hiện nhiều thao tác) 2. Sensor (Cảm biến)
Mục đích: Quản lý thông tin các cảm biến trong hệ thống Thuộc tính:
id (PK): UUID - Định danh duy nhất cảm biến
name: String - Tên cảm biến
is_active: Boolean (Default: true) - Trạng thái hoạt động
location: String (Nullable) - Vị trí đặt cảm biến
created_at: DateTime - Thời gian tạo
updated_at: DateTime - Thời gian cập nhật cuối
Mối quan hệ: 1-N với SensorData (một cảm biến tạo ra nhiều dữ liệu)
3. SensorData (Dữ liệu cảm biến)
Mục đích: Lưu trữ dữ liệu thô từ cảm biến Thuộc tính:
id (PK): Int (Auto increment) - Định danh duy nhất
sensor_id (FK): String (Nullable) - Tham chiếu đến Sensor
data: Json - Dữ liệu thô từ cảm biến
temperature: Float (Nullable) - Nhiệt độ đã parse
humidity: Float (Nullable) - Độ ẩm đã parse
light: Float (Nullable) - Ánh sáng đã parse
created_at: DateTime - Thời gian thu thập dữ liệu
Mối quan hệ: N-1 với Sensor (nhiều dữ liệu thuộc về một cảm biến) 4. Device (Thiết bị)
Mục đích: Quản lý các thiết bị có thể điều khiển (relay, actuator) Thuộc tính:
id (PK): UUID - Định danh duy nhất thiết bị
name: String - Tên thiết bị
location: String (Nullable) - Vị trí đặt thiết bị
sensor_id: String (Unique) - ID cảm biến để Arduino nhận diện
port: Int (Default: 0) - Cổng GPIO trên Arduino
created_at: DateTime - Thời gian tạo 17
updated_at: DateTime - Thời gian cập nhật cuối Mối quan hệ: 1-1 với CurrentDeviceStatus 1-N với DevicesActionLog 1-N với DeviceScript
5. CurrentDeviceStatus (Trạng thái thiết bị hiện tại)
Mục đích: Lưu trữ trạng thái hiện tại của thiết bị Thuộc tính:
device_id (PK, FK): String - Tham chiếu đến Device
status: Enum (on, off, standby) - Trạng thái hiện tại
updated_at: DateTime - Thời gian cập nhật trạng thái
Mối quan hệ: 1-1 với Device
6. DevicesActionLog (Lịch sử thao tác thiết bị)
Mục đích: Ghi lại tất cả thao tác điều khiển thiết bị Thuộc tính:
id (PK): Int (Auto increment) - Định danh duy nhất log
device_id (FK): String - Thiết bị được điều khiển
action: Enum (switch_on, switch_off, adjust_temperature) - Hành động thực hiện
user_id (FK): String - Người thực hiện thao tác
is_executing: Boolean (Default: false) - Trạng thái đang thực thi
status_before: String - Trạng thái trước khi thao tác
status_after: String (Nullable) - Trạng thái sau khi thao tác
created_at: DateTime - Thời gian thực hiện thao tác Mối quan hệ: N-1 với Device N-1 với User
7. DeviceScript (Script tự động)
Mục đích: Quản lý các script tự động cho thiết bị Thuộc tính:
id (PK): UUID - Định danh duy nhất script
device_id (FK): String - Thiết bị áp dụng script 18 name: String - Tên script
description: String (Nullable) - Mô tả script
is_active: Boolean (Default: true) - Trạng thái hoạt động
created_at: DateTime - Thời gian tạo
updated_at: DateTime - Thời gian cập nhật cuối Mối quan hệ: N-1 với Device 1-N với ScriptCondition 1-N với ScriptAction
8. ScriptCondition (Điều kiện script)
Mục đích: Định nghĩa điều kiện để kích hoạt script Thuộc tính:
id (PK): UUID - Định danh duy nhất điều kiện
script_id (FK): String - Script chứa điều kiện này
condition_type: Enum (AND, OR) - Loại điều kiện logic
sensor_type: Enum (TEMPERATURE, HUMIDITY, LIGHT, DEVICE_STATUS) - Loại cảm biến
comparison_type: Enum (LESS_THAN, GREATER_THAN, EQUAL_TO,
NOT_EQUAL_TO, LESS_THAN_OR_EQUAL,
GREATER_THAN_OR_EQUAL) - Toán tử so sánh
value: Float - Giá trị để so sánh
Mối quan hệ: N-1 với DeviceScript
9. ScriptAction (Hành động script)
Mục đích: Định nghĩa hành động sẽ thực hiện khi điều kiện được thỏa mãn Thuộc tính:
id (PK): UUID - Định danh duy nhất hành động
script_id (FK): String - Script chứa hành động này
action_type: Enum (switch_on, switch_off, adjust_temperature) - Loại hành động
action_target: String - Mục tiêu thực hiện hành động
action_value: String (Nullable) - Giá trị hành động
Mối quan hệ: N-1 với DeviceScript Mối quan hệ:
1. User → DevicesActionLog (1-N): Một user có thể thực hiện nhiều thao tác 19