Download as pdf or txt
Download as pdf or txt
You are on page 1of 75

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA CÔNG NGHỆ THÔNG TIN 1


----------------------  ----------------------

BÁO CÁO BÀI TẬP LỚN


MÔN HỌC: THỰC TẬP CƠ SỞ

Giảng viên hướng dẫn: Nguyễn Quý Sỹ


Nhóm lớp học: INT13147 nhóm 27
Sinh viên: Đỗ Thu Hà

Mã sinh viên: B20DCCN212


Tổ: 08

Hà Nội, 2023

1
MỤC LỤC
I. Lập trình và giải thuật .................................................................................................. 4
1.1. Số bài đã làm được: 53 ......................................................................................................................4
1.2. Các dạng bài đã làm ..........................................................................................................................4
1.2.1. Trước đó ......................................................................................................................................4
1.2.2. Tuần này .....................................................................................................................................4
1.2.3. Thuật toán thầy giao ..................................................................................................................4
1.3. Cách làm từng nhóm bài ..................................................................................................................6
1.3.1. Tìm kiếm .....................................................................................................................................6
1.3.2. Sắp xếp ........................................................................................................................................7
1.3.3. Danh sách liên kết đơn .............................................................................................................15
1.3.4. Sinh/Quay lui ............................................................................................................................16
1.3.5. Ngăn xếp ....................................................................................................................................17
1.3.6. Hàng đợi ....................................................................................................................................18
1.3.7. Quy hoạch động ........................................................................................................................19
II. Cơ sở dữ liệu quản lý sân bóng ................................................................................. 20
2.1. Giới thiệu bài toán ...........................................................................................................................20
2.2. Mục đích thiết kế cơ sở dữ liệu ......................................................................................................21
2.3. Đối tượng sử dụng ...........................................................................................................................21
2.4. Phân tích thiết kế cơ sở dữ liệu ......................................................................................................21
2.4.1. Mô tả ứng dụng của hệ CSDL .................................................................................................21
2.4.2. Các yêu cầu về dữ liệu cần lưu trữ .........................................................................................22
2.4.3. Các chức năng của CSDL ........................................................................................................22
2.5. Mô hình quan hệ..............................................................................................................................27
2.5.1. Mô hình quan hệ.......................................................................................................................27
2.5.2. Mô tả các quan hệ.....................................................................................................................28
2.5.3. Mô tả thuộc tính .......................................................................................................................30
2.5.4. Mô hình ER ...............................................................................................................................33
III. Máy tính và điều khiển ............................................................................................. 34
3.1 Tìm hiểu về máy chủ và tủ đĩa ........................................................................................................34
3.2 Tìm hiểu và nghiên cứu cấu trúc của máy chủ HP ProLiant DL380 Gen 10 .............................36
3.2.1. Tổng quan về máy chủ HP ProLiant DL380 Gen 10 ............................................................36
3.2.2. Cấu trúc HP ProLiant DL380 Gen10 .....................................................................................38

1
3.3 Tìm hiểu về tủ đĩa HP MSA 2050 ...................................................................................................42
3.3.1. Giới thiệu về tủ đĩa HP MSA 2050..........................................................................................42
Tủ đĩa HP MSA 2050 là một thiết bị lưu trữ dữ liệu hiệu suất cao được thiết kế để đáp ứng nhu cầu
lưu trữ và quản lý dữ liệu của doanh nghiệp. Thiết bị này có thể được sử dụng cho các mục đích lưu
trữ khác nhau, từ lưu trữ dữ liệu cho doanh nghiệp, backup dữ liệu, lưu trữ video, và nhiều hơn nữa.
Tủ đĩa HP MSA 2050 cung cấp tính năng lưu trữ hiệu quả, bảo mật dữ liệu, khả năng mở rộng và độ
tin cậy cao ............................................................................................................................................42
3.3.2. Cấu trúc và thành phần của tủ đĩa HP MSA 2050 ............................................................42
3.3.3. Tính năng của tủ đĩa HP MSA 2050 .......................................................................................42
3.4 Kết nối máy chủ HP ProLiant DL380 Gen10 với tủ đĩa HP MSA 2050......................................43
a. Giới thiệu..........................................................................................................................................43
b. Các bước kết nối...............................................................................................................................43
c. Kết luận ............................................................................................................................................44
3.5 Tìm hiểu về ảo hóa ...........................................................................................................................45
a. Khái niệm .........................................................................................................................................45
b.Các loại ảo hóa .................................................................................................................................45
c. Các công nghệ ảo hóa phổ biến hiện nay .........................................................................................46
d. Lợi ích của việc sử dụng ảo hóa.......................................................................................................47
e. Khó khăn và giải pháp khi triển khai ảo hóa ...................................................................................48
3.6 Giới thiệu chung về hệ thống lưu trữ, microservice và monolithic..............................................49
3.7 Tìm hiểu về ESP8266 NodeMCU và lập trình đơn giản với Arduino IDE .................................52
3.7.1 Giới thiệu về ESP8266 NodeMCU. ............................................................................................52
3.7.2 Cài đặt Arduino IDE. ..................................................................................................................52
3.7.3 Cài đặt thư viện ESP8266 trong Arduino IDE. ...........................................................................53
3.7.4 Lập trình đơn giản với ESP8266 NodeMCU...............................................................................53
3.8 Tìm hiểu về các cơ chế chấp hành ..................................................................................................55
3.8.1 Các cơ cấu chấp hành. .................................................................................................................55
3.8.2 Lập trình và thực hành.................................................................................................................56
3.9 Tìm hiểu về Timer và lập trình ngắt Timer với ESP8266 NodeMCU. ........................................57
3.9.1 Giới thiệu.....................................................................................................................................57
3.9.2 Timer ...........................................................................................................................................57
3.9.3 Lập trình timer trong ESP8266 NODEMCU ..............................................................................57
3.9.4 Lập trình ngắt timer ....................................................................................................................58
3.9.5 Ứng dụng của Timer và lập trình ngắt Timer với ESP8266 NodeMCU .....................................59
3.10 Thiết kế hệ thống giám sát nhiệt độ và ẩm bằng ESP8266 NODEMCU + BLYNK + DHT1160
3.10.1.Cơ sở lý thuyết về module wifi ESP8266.......................................................................................60
2
3.10.1.1.Giới thiệu về ESP8266 ...........................................................................................................60
3.10.1.2.Cấu tạo của NODEMCU ESP8266 ........................................................................................60
3.10.1.3.Tính năng của NODEMCU ESP8266 ....................................................................................61
3.10.1.4. Đặc điểm cảm biến DHT11 ...................................................................................................62
3.10.1.5. Cơ sở lý thuyết về APP Blynk ................................................................................................64
3.10.2. Phân tích thiết kế hệ thống ...........................................................................................................66
3.10.3 Mô phỏng và xây dựng hệ thống thực nghiệm ..............................................................................67

3
I. Lập trình và giải thuật
1.1. Số bài đã làm được: 53
1.2. Các dạng bài đã làm
1.2.1. Trước đó
- Tìm kiếm
- Thuật toán sắp xếp
- Danh sách liên kết đơn
- Sinh/quay lui
1.2.2. Tuần này
- Các dạng bài ngăn xếp, hàng đợi, quy hoạch động
1.2.3. Thuật toán thầy giao
Có một bài toán về chuỗi nhị phân như sau: Hãy viết chương trình tạo ra bộ mã nhị
phân Gray N bít.

Bài làm:

4
#include <iostream>
#include <vector>
using namespace std;
vector<string> gray_code(int n) {
vector<string> res;
if (n == 1) {
res.push_back("0");
res.push_back("1");
} else {
vector<string> prev_gray = gray_code(n-1);
for (int i = 0; i < prev_gray.size(); i++) {
res.push_back("0" + prev_gray[i]);
}
for (int i = prev_gray.size()-1; i >= 0; i--) {
res.push_back("1" + prev_gray[i]);
}
}
return res;
}
int main() {
int n = 4;
vector<string> gray_list = gray_code(n);
for (int i = 0; i < gray_list.size(); i++) {
cout << gray_list[i] << endl;
}
return 0;
5
}

Trong chương trình này, hàm gray_code trả về một vector chứa tất cả các mã
Gray có độ dài n bit. Nếu n = 1, hàm sẽ trả về vector chứa hai phần tử là "0" và
"1". Nếu n lớn hơn 1, hàm sẽ sử dụng đệ quy để tạo ra vector cho n-1 bit, sau đó
sử dụng các phép toán để tạo ra vector cho n bit. Bạn có thể thay đổi giá trị của n
để tạo ra các mã Gray với số bit khác nhau.

1.3. Cách làm từng nhóm bài


1.3.1. Tìm kiếm

1.3.1.1. DSA06020: Tìm kiếm


- Cách làm:
 Tạo 1 biến check có giá trị Boolean, ở đây check = false
 Tạo 1 vòng lặp để duyệt các phần tử, nếu thấy phần tử cho trước bằng
phần tử ở vị trí i trong mảng thì thiết lập lại biến check = true, sau đó
break thoát khỏi vòng lặp.
 Nếu check = false thì in ra -1, check = true thì in ra 1.

1.3.1.2. DSA06021: Tìm kiếm trong dãy sắp xếp vòng


- Cách làm:
 Tạo 1 vòng lặp để duyệt các phần tử, nếu thấy phần tử cho trước bằng
phần tử ở vị trí i trong mảng thì lưu vị trí i đó vào 1 biến khác rồi break
thoát khỏi vòng lặp
 In ra vị trí i cần tìm

1.3.1.3. DSA06022: Số nhỏ nhất và số nhỏ thứ 2


- Cách làm:
 Sắp xếp lại mảng từ bé đến lớn (dùng hàm sort có sẵn của C++)
 Lúc này phần tử đầu tiên (a[0]) sẽ là số nhỏ nhất, ta chỉ việc duyệt từ
phần tử thứ 2 đến cuối mảng tìm phần tử đầu tiên trong mảng khác giá trị
a[0] -> Phần tử nhỏ thứ 2

6
1.3.2. Sắp xếp

1.3.2.1. DSA06023: Sắp xếp đổi chỗ trực tiếp


- Cách làm:
 Xuất phát từ đầu dãy, tìm tất cả các cặp A[i] và A[j] thỏa mãn điều kiện i
< j và A[i] > A[j].
 Đổi chỗ 2 phần tử này cho nhau
 Lặp lại xử lý trên với phần tử kế trong dãy

1.3.2.2. DSA06024: Sắp xếp chọn


- Cách làm:
 Chọn phần tử nhỏ nhất trong N phần tử trong dãy hiện hành ban đầu.
 Đổi chỗ phần tử này với phần tử ở vị trí đầu dãy
 Xem dãy hiện hành chỉ còn N-1 phần tử của dãy hiện hành ban đầu.

o Bắt đầu từ vị trí thứ 2.


o Lặp lại quá trình trên cho dãy hiện hành… đến khi dãy hiện hành chỉ
còn 1 phần tử.

1.3.2.3. DSA06025: Sắp xếp chèn


- Cách làm:
 Khởi tạo mảng với dãy con đã sắp xếp có k = 1 phần tử(phần tử đầu tiên,
phần tử có chỉ số 0)
 Duyệt từng phần tử từ phần tử thứ 2, tại mỗi lần duyệt phần tử ở chỉ số i
thì đặt phần tử đó vào một vị trí nào đó trong đoạn từ [0…i] sao cho dãy
số từ [0…i] vẫn đảm bảo tính chất dãy số tăng dần. Sau mỗi lần duyệt, số
phần tử đã được sắp xếp k trong mảng tăng thêm 1 phần tử.Duyệt qua
vector a, tìm tập hợp giao của hai tập hợp bằng cách in ra các phần tử
xuất hiện trong cả hai tập hợp.
 Lặp cho tới khi duyệt hết tất cả các phần tử của mảng.

1.3.2.4. DSA06026: Sắp xếp nổi bọt


- Cách làm:

7
 Xuất phát từ cuối danh sách, đổi chỗ các cặp phần tử kế cận để đưa phần
tử nhỏ hơn trong cặp phần tử đó về đúng vị trí theo thứ tự tăng dần. Cuối
cùng, phần tử đầu tiên trong danh sách sẽ là phần tử nhỏ nhất.
 Sau đó, sẽ không xét đến phần tử đầu tiên đó nữa ở bước tiếp theo. Do
vậy, ở lần xử lý thứ i, phần tử đầu được xét sẽ có vị trí là i.
 Lặp lại các bước xử lý trên cho đến khi không còn cặp phần tử nào để xét.

1.3.2.5. DSA06027: Sắp xếp đổi chỗ trực tiếp – Liệt kê ngược
- Cách làm:
 Xuất phát từ đầu dãy, tìm tất cả các cặp A[i] và A[j] thỏa mãn điều kiện i
< j và A[i] > A[j].
 Đổi chỗ 2 phần tử này cho nhau
 Lặp lại xử lý trên với phần tử kế trong dãy

1.3.2.6. DSA06028: Sắp xếp chọn – Liệt kê ngược


- Cách làm:
 Chọn phần tử nhỏ nhất trong N phần tử trong dãy hiện hành ban đầu.
 Đổi chỗ phần tử này với phần tử ở vị trí đầu dãy
 Xem dãy hiện hành chỉ còn N-1 phần tử của dãy hiện hành ban đầu.

o Bắt đầu từ vị trí thứ 2.


o Lặp lại quá trình trên cho dãy hiện hành… đến khi dãy hiện hành chỉ
còn 1 phần tử.

1.3.2.7. DSA06030: Sắp xếp nổi bọt – Liệt kê ngược


- Cách làm:
 Xuất phát từ cuối danh sách, đổi chỗ các cặp phần tử kế cận để đưa phần
tử nhỏ hơn trong cặp phần tử đó về đúng vị trí theo thứ tự tăng dần. Cuối
cùng, phần tử đầu tiên trong danh sách sẽ là phần tử nhỏ nhất.
 Sau đó, sẽ không xét đến phần tử đầu tiên đó nữa ở bước tiếp theo. Do
vậy, ở lần xử lý thứ i, phần tử đầu được xét sẽ có vị trí là i.
 Lặp lại các bước xử lý trên cho đến khi không còn cặp phần tử nào để xét.

8
1.3.2.8. DSA06044: Sắp xếp chẵn lẻ
- Cách làm:
 Khởi tạo 2 mảng lưu các phần tử vị trí chẵn (mảng c) và vị trí lẻ (mảng l)
 Mảng lưu phần tử vị trí lẻ dùng hàm sort sắp xếp tăng dần, mảng lưu phần
tử vị trí chẵn thì dùng hàm sort sắp xếp giảm dần
 Chạy vòng for từ 0 -> n/2: mỗi bước in ra phần tử l[i] và c[i]
 Nếu số lượng phần tử trong mảng ban đầu là lẻ thì in thêm phần tử cuối
cùng của mảng l (mảng lẻ)

1.3.2.9. DSA06002: Sắp xếp theo giá trị tuyệt đối


- Cách làm:
 Sử dụng struct (đặt tên là So). Struct sẽ lưu 2 biến int value (giá trị của
element) và index (lưu vị trí của element trong mảng)
 Khởi tạo vector có Object type là So. Tại mỗi bước nhập mảng trong
vòng for, nhập giá trị của phần tử lưu vào value của struct, và đồng thời
lưu i vào index.
 Sử dụng hàm sort có sẵn của C++, thêm hàm bool điều kiện cmp vào. Cú
pháp
sort(a.begin(),a.end(), cmp) , cmp ở đây là 1 hàm bên ngoài main, trả về
giá trị bool, có 2 parameters là so a và so b
 Ở hàm này, trong trường hợp a.val<b.val hoặc 2 cái bằng nhau nhưng
a.index<b.index thì sẽ trả về true. Ngược lại trả về false

1.3.2.10. DSA06001: Sắp xếp xen kẽ


- Cách làm:
 Sau khi nhập mảng, sort lại mảng đã nhập theo thứ tự giảm dần
 Duyệt vòng lặp từ 0 -> n/2, tại mỗi bước in ra phần tử a[i] và a[n-i-1].
 Nếu số phần tử của mảng là lẻ, in ra phần tử ở giữa mảng a[n/2]

1.3.2.11. DSA06005: Hợp và giao của hai dãy số 2


- Cách làm:
 Nhập 2 mảng, lưu hết tất cả các phần tử của 2 mảng vào trong 1 vector rồi
sắp xếp lại vector theo thứ tự từ bé đến lớn
 Mảng hợp: kiểm tra xem 2 phần tử cạnh nhau của vector có khác nhau
hay không? Có thì in ra

9
 Mảng giao: kiểm tra xem 2 phần tử cạnh nhau của vector có giống nhau
hay không?

1.3.2.12. DSA06003: Đổi chỗ ít nhất


- Cách làm:
 Chọn phần tử nhỏ nhất trong N phần tử trong dãy hiện hành ban đầu.
 Đổi chỗ phần tử này với phần tử ở vị trí đầu dãy
 Xem dãy hiện hành chỉ còn N-1 phần tử của dãy hiện hành ban đầu.

o Bắt đầu từ vị trí thứ 2.


o Lặp lại quá trình trên cho dãy hiện hành… đến khi dãy hiện hành chỉ
còn 1 phần tử.

1.3.2.13. DSA06019: Sắp xếp theo số lần xuất hiện


- Cách làm:
 Sử dụng struct để lưu giá trị và số lần xuất hiện của một phần tử
 Sử dụng map để đếm tần suất số lần xuất hiện của mỗi phần tử, và lưu giá
trị đó vào struct
 Sử dụng hàm cmp sắp xếp theo yêu cầu đề bài

1.3.2.14. DSA06031: Phần tử lớn nhất trong dãy con


- Cách làm:
 Sử dụng 2 vòng lặp for lồng nhau, vòng lặp ngoài cho max = giá trị a[i]
với i chạy từ 1 đến n – k + 1, vòng lặp trong ta tìm max với điều kiện nếu
max < a[j] thì max = a[j] với j chạy từ i đến i + k -1.

1.3.2.15. DSA06007: Sắp xếp dãy con liên tục


- Cách làm:
 Tạo 1 mảng bằng mảng ban đầu đã sắp xếp
 So sánh vị trí khác biệt đầu tiên và vị trí khác biệt cuối cùng, lưu 2 vị trí
đó

1.3.2.16. DSA06009: Cặp phần tử có tổng bằng k


- Cách làm:
10
 Tạo một vòng lặp để tìm tổng 2 số, trong vòng lặp đấy lại có một vòng
lặp nữa để kiểm tra một số có bằng số k trừ đi 2 số lúc nãy không
 Nếu bằng thì in ra đáp án và thoát khỏi vòng lặp, nếu không thì tiếp tục
cho tăng vị trí để kiểm tra tiếp.

1.3.2.17. DSA06010: Sắp xếp chữ số


- Cách làm:
 Sử dụng struct để lưu giá trị và số lần xuất hiện của một phần tử
 Sử dụng map để đếm tần suất số lần xuất hiện của mỗi phần tử, và lưu giá
trị đó vào struct
 Sử dụng hàm cmp sắp xếp theo yêu cầu đề bài

1.3.2.18. DSA06011: Tổng gần 0 nhất


- Cách làm:
 Do số lượng phần tử của mảng không quá 10^3 nên có thể dùng 2 vòng
lặp (cách đơn giản nhất)
 Cho 2 vòng lặp lồng nhau (i: 0->n-1, j: i+1 -> n). Kiểm tra xem giá trị
tuyệt đối của a[i]+a[j] có phải bé nhất hay không? Nếu có thì lưu kết quả
của a[i]+a[j]

1.3.2.19. DSA06012: Phần tử lớn nhất


- Cách làm:
 Sắp xếp lại mảng ban đầu theo thứ tự từ bé đến lớn
 In ra k phần tử ở cuối mảng đã sắp xếp

1.3.2.20. DSA06013: Số lần xuất hiện


- Cách làm:
 Duyệt vòng lặp, mỗi khi gặp số cần tìm thì tăng biến đếm lên 1 đơn vị rồi
in ra kết quả biến đếm

1.3.2.21. DSA06014: Tổng cặp số nguyên tố


- Cách làm:
 Sử dụng 1 hàm kiểm tra số nguyên tố
 Duyệt mảng từ 2 -> n/2, kiểm tra xem số ở vị trí i và n-i có phải số
nguyên tố không? Nếu có thì in ra 2 số đó và kết thúc chương trình
11
 Hết vòng lặp chưa có số thỏa mãn, in ra -1

1.3.2.22. DSA06016: Tích lớn nhất – nhỏ nhất


- Cách làm:
 Sắp xếp lại 2 mảng theo thứ tự từ bé đến lớn
 Kết quả bài toán chính là tích giữa phần tử cuối cùng của mảng a và phần
tử đầu tiên của mảng b

1.3.2.23. DSA06017: Trộn hai dãy


- Cách làm:
 Thay vì nhập 2 mảng, ta lúc đầu chỉ nhập 1 mảng có số lượng phần tử
bằng với số lượng phần tử của mảng a và b cộng lại
 Sắp xếp lại mảng trên => Kết quả cần tìm

1.3.2.24. DSA06018: Bổ sung phần tử


- Cách làm:
 Lọc mảng thành mảng mới, không có phần tử nào bị trùng
 Kết quả cuối cùng sẽ là Max - Min + 1 – n của mảng mới vừa tìm được

1.3.2.25. DSA06041: Số xuất hiện nhiều nhất


- Cách làm:
 Sử dụng cấu trúc dữ liệu map(key,value) để lưu trữ giá trị của từng phần
tử và số lần xuất hiện.
 Key là giá trị của phần tử, value là số lần xuất hiện.
 Duyệt qua hết các phần tử của mảng để cập nhật key và value.
 Khởi tạo biến ans và c với giá trị ban đầu là -1 và -1.
 Duyệt qua tất cả các phần tử trong map để tìm phần tử xuất hiện nhiều
nhất.
 Nếu số lần xuất hiện của phần tử đó lớn hơn giá trị hiện tại của c, cập nhật
c và ans với giá trị của phần tử đó.
 Kiểm tra nếu c lớn hơn nửa số lượng phần tử của mảng, in ra giá trị của
ans. Ngược lại, in ra "NO".

12
1.3.2.26. DSA06035: Dãy tam giác dài nhất
- Cách làm:
 Dùng mảng l (lưu số lượng phần tử liên tiếp ở phía bên trái nhỏ hơn nó)
và mảng r (lưu số lượng phần tử liên tiếp ở phía bên phải nhỏ hơn nó)
 Tìm max của l[i]+r[i]-1

1.3.2.27. DSA06031: Phần tử lớn nhất trong dãy con


- Cách làm:
 Sử dụng 2 vòng lặp for lồng nhau, vòng lặp ngoài cho max = giá trị a[i]
với i chạy từ 1 đến n – k + 1, vòng lặp trong ta tìm max với điều kiện nếu
max < a[j] thì max = a[j] với j chạy từ i đến i + k -1.

1.3.2.28. DSA06039: Số đầu tiên bị lặp


- Cách làm:
 Đếm số lần xuất hiện của từng số trong dãy.
 Tạo 1 vòng lặp duyệt các phần tử từ đầu đến cuối dãy, nếu phần tử nào có
số lần xuất hiện lớn hơn 1 thì in ra luôn, đồng thời break thoát khỏi vòng
lặp.

1.3.2.29. DSA06043: Điểm cân bằng


- Cách làm:
 Tính tổng của các phần tử trong dãy (đặt tên biến là sum)
 Từ vị trí i = 1 đến i < n, tính sum_left = a[i-1] + sum_left
 Nếu sum - sum_left - a[i] = sum_left thì ngay lập tức in ra vị trí i+1 rồi
break thoát khỏi vòng lặp.

1.3.2.30. DSA06046: Chênh lệch nhỏ nhất


- Cách làm:
 Sắp xếp các phần tử trong dãy tăng dần
 Sau đó tìm min của hiệu các phần tử liền kề

13
1.3.2.31. DSA06040: Giao của ba dãy số
- Cách làm:
 Tạo 3 mảng A,B,C, nếu tìm thấy phần tử trong mảng A trùng với phần tử
trong mảng B và C thì insert phần tử đó vào trong mảng kết quả, đồng
thời tăng vị trí index của cả 3 mảng lên một đơn vị.
 Trong vòng lặp đó, tìm max của 3 giá trị tại vị trí index tiếp theo của 3
mảng, nếu giá trị nào nhỏ hơn giá trị max thì tăng index lên một đơn vị.
 Lần lượt như thế, ta sẽ tìm ra được các phần tử chung của 3 dãy số.

1.3.2.32. DSA06033: Khoảng cách xa nhất


- Cách làm:
 Sắp xếp mảng nhập vào theo hướng giảm dần
 Tại mỗi vị trí của mảng thiết lập biến để tìm những vị trí sao cho j – i là
lớn nhất
 Sau khi tìm được thì in vị trí đó ra

1.3.2.33. DSA06048: Số lần quay vòng


- Cách làm:
 Sắp xếp các phần tử trong dãy theo hướng tăng dần
 Sau đó ta thực hiện quay vòng phải, mỗi lần lấy một ký tự ở cuối dãy đưa
lên đầu dãy.
 Số lần quay vòng k chính là số lần mà dãy sau khi sắp xếp giống như dãy
đã nhập từ trước

1.3.2.34. DSA06015: Merge Sort


- Cách làm:
 Chia dãy cần sắp xếp thành 2 dãy con, từ dãy con thu được lại tiếp tục
chia thành 2 dãy con nhỏ hơn nữa
 Quá trình phân chia tiếp tục cho đến khi thu được dãy con chỉ còn duy
nhất 1 phần tử.
 Hòa nhập 2 dãy con nhỏ nhất thành dãy con lớn hơn sao cho đúng thứ tự,
từ hai dãy con lớn hơn lại hòa nhập thành 2 dãy con lớn hơn nữa….
 Quá trình hòa nhập cứ tiếp tục như vậy cho đến khi thu được dãy số ban
đầu đã được sắp xếp.
14
1.3.2.35. DSA06049: Đếm cặp
- Cách làm:
 Sắp xếp mảng đã nhập
 Xét 2 vòng lặp for với i chạy từ 0 đến n-1 và với j chạy từ i+1 đến n, xét
từng cặp a[i] và a[j] sao cho hiệu 2 số ấy phải nhỏ hơn k
 Đếm các cặp đã tìm được và hiện kết quả

1.3.2.36. DSA06036: Bộ ba số bằng k


- Cách làm:
 Sắp xếp mảng đã nhập
 Xét vòng lặp for với i chạy từ n-1 đến 2, khởi tạo với l = 0 và r = i-1
 Với vòng while và điều kiện là l<r, ta xét tổng của a[l] với a[r], nếu tổng
đó bằng k trừ đi a[i] thì in ra kết quả và kết thúc vòng lặp.
 Nếu tổng đó nhỏ hơn k trừ đi a[i] thì tăng l, ngược lại giảm r.

1.3.3. Danh sách liên kết đơn

1.3.3.1. CTDL_005: Xóa dữ liệu trong danh sách liên kết đơn
- Cách làm:
 Duyệt 1 vòng lặp từ đầu đến cuối mảng
 Nếu phần tử trong mảng bằng với số cần xóa thì không làm gì, còn lại thì
in ra

1.3.3.2. CTDL_006: Lọc dữ liệu trùng trong danh sách liên kết đơn
- Cách làm:
 Duyệt mảng từ 1 đến n, tại mỗi bước kiểm tra value của phần tử đó trong
mảng có =0 không? Nếu có thì in ra và tăng value lên 1 đơn vị (cú pháp:
m[a[i]]++ ), còn lại thì bỏ qua, đến phần tử tiếp theo của mảng

15
1.3.4. Sinh/Quay lui

1.3.4.1. DSA01027: Hoán vị dãy số


- Cách làm:
 Sử dụng hàm next_permutation (hàm này có công dụng tìm hoán vị tiếp
theo của mảng cho trước) có sẵn trong C++
 Sau khi nhập mảng, sort lại mảng đã nhập theo thứ tự tăng dần
 Sử dụng vòng lặp while kết hợp next_permutation. Vòng lặp này sẽ dừng
khi hàm next_permutation đi đến hoán vị cuối cùng. Tại mỗi bước trong
vòng lặp in ra mảng hiện tại.

1.3.4.2. DSA01007: Xâu AB có độ dài n


- Cách làm:
+ Nhập vào giá trị N từ bàn phím.
+ Sử dụng thuật toán quay lui nhị phân.
+ Tất cả các xâu AB có độ dài N thử từng ký tự ở mỗi vị trí trong xâu
+ Xây dựng xâu AB tiếp theo cho đến khi xâu đạt độ dài N.
+ Một mảng x có kích thước N để lưu các giá trị 0 hoặc 1 tương ứng với các
ký tự A hoặc B trong xâu AB.
+ Nếu giá trị là 0, in ra ký tự A, ngược lại in ra ký tự B.
 Nhập vào giá trị N từ bàn phím.
 Sử dụng thuật toán quay lui nhị phân.
 Tất cả các xâu AB có độ dài N thử từng ký tự ở mỗi vị trí trong xâu
 Xây dựng xâu AB tiếp theo cho đến khi xâu đạt độ dài N.
 Một mảng x có kích thước N để lưu các giá trị 0 hoặc 1 tương ứng với các
ký tự A hoặc B trong xâu AB.
 Nếu giá trị là 0, in ra ký tự A, ngược lại in ra ký tự B.

1.3.4.3. DSA01020: Xâu nhị phân trước


- Cách làm:
 Tìm vị trí i đầu tiên từ phải sang trái mà ký tự tại vị trí đó là '1'.
 Nếu không tìm thấy i, tức là xâu đã là "0" hoàn toàn, ta trả về xâu "0".
 Xét các ký tự từ vị trí i đến cuối xâu, tìm vị trí j đầu tiên từ phải sang trái
mà ký tự tại vị trí đó là '0'.
16
 Hoán đổi ký tự tại vị trí i và j.
 Đảo ngược các ký tự từ vị trí i+1 đến cuối xâu.
 Trả về xâu nhị phân kết quả.Nếu có thì in ra 2 phần tử a[0] (phần tử nhỏ
nhất của mảng) và x (phần tử nhỏ thứ 2)
 Nếu không thì chứng tỏ các phần tử trong mảng bằng nhau, in ra -1
1.3.5. Ngăn xếp

1.3.5.1. DSA07002: Ngăn xếp 2


- Cách làm:
 Xử lí truy vấn theo các hàm có sẵn của stack

1.3.5.2. DSA07021: Dãy ngoặc đúng dài nhất


- Cách làm:
 Sử dụng một stack để theo dõi các vị trí của các ngoặc đơn trong chuỗi,
đồng thời tính toán độ dài của dãy ngoặc đúng dài nhất
 Mỗi khi gặp dấu "(" trong chuỗi, ta đưa vị trí của dấu này vào stack
 Khi gặp dấu ")", ta lấy vị trí của dấu này ra khỏi stack.
 Nếu stack vẫn chưa rỗng, ta tính toán độ dài của dãy ngoặc đúng bằng
cách lấy hiệu của vị trí của dấu ")" hiện tại với vị trí của phần tử đầu tiên
(tức vị trí lớn nhất) trong stack.
 Nếu stack đã rỗng, ta đưa vị trí của dấu ")" hiện tại vào stack.

1.3.5.3. DSA07010: Biến đổi tiền tố - hậu tố


- Cách làm:
 Gọi str là chuỗi chứa các toán tử
 Viết hàm check kí tự c, nếu c thuộc một trong các toán tử của str thì trả về
true, còn lại trả về false
 Đặt t là số bộ duyệt, s là chuỗi cần nhập vào
 Khởi tạo 2 chuỗi tmp1,tmp2 rỗng và stack
 Duyệt vòng for chạy từ cuối chuỗi s về đầu
 Nếu gặp toán hạng thì thêm toán hạng vào stack
17
 Nếu gặp toán tử thì lấy ra phần tử đầu tiên của stack và gán vào tmp1, xóa
đi phần tử đầu tiên, lấy ra phần tử đầu tiên và gán vào tmp2, xóa đi phần
tử đầu
 Thêm tmp1+tmp2+toán hạng vào stack
 Duyệt cho đến hết chuỗi và in ra phần tử đầu của stack là kết quả của bài
toán

1.3.5.4. DSA07011: Biến đổi hậu tố - tiền tố


- Cách làm:
 Gọi str là chuỗi chứa các toán tử
 Viết hàm check kí tự c, nếu c thuộc một trong các toán tử của str thì trả về
true, còn lại trả về false
 Đặt t là số bộ duyệt, s là chuỗi cần nhập vào
 Khởi tạo 2 chuỗi tmp1,tmp2 rỗng và stack
 Duyệt vòng for chạy từ đầu chuỗi s đến cuối
 Nếu gặp toán hạng thì thêm toán hạng vào stack
 Nếu gặp toán tử thì lấy ra phần tử đầu tiên của stack và gán vào tmp1, xóa
đi phần tử đầu tiên, lấy ra phần tử đầu tiên và gán vào tmp2, xóa đi phần
tử đầu
 Thêm toán hạng+tmp2+tmp1vào stack
 Duyệt cho đến hết chuỗi và in ra phần tử đầu của stack là kết quả của bài
toán

1.3.6. Hàng đợi

1.3.6.1. DSA08017: Số lộc phát


- Cách làm:
 Lúc đầu push 2 phần tử 6 và 8 vào hàng đợi
 Dùng vòng lặp while (điều kiện dừng: hàng đợi rỗng)
 Trong vòng lặp, gán biến int k= phần tử đầu hàng đợi

18
 Kiểm tra xem k đã lớn hơn n chữ số chưa. Nếu lớn hơn thì break luôn
vòng lặp, chuyển sang B8
 Lưu k vào mảng a (do bài này yêu cầu sắp xếp ngược)
 Pop phần tử đầu hàng đợi ra khỏi mảng
 Thêm vào hàng đợi phần tử k*10+6 và k*10+8 (VD: 6 -> 66, 6->68,…),
tiếp tục quay lại B3
 In phần tử trong mảng a theo thứ tự ngược (cuối -> đầu mảng)

1.3.6.2. DSA08007: Số BDN 1


- Cách làm:
 Lúc đầu push phần tử 1 vào hàng đợi, khởi tạo biến đếm = 0
 Dùng vòng lặp while (điều kiện dừng: hàng đợi rỗng)
 Trong vòng lặp, gán biến int k= phần tử đầu hàng đợi
 Kiểm tra xem k đã lớn hơn số n ban đầu được cho chưa? Nếu lớn hơn thì
break luôn vòng lặp, chuyển sang B
 Tại cuối mỗi bước vòng lặp, tăng biến đếm thêm 1 đơn vị (để đếm số
phần tử nhỏ hơn n) và quay lại B3
 Thêm vào hàng đợi phần tử k*10+6 và k*10+8 (VD: 6 -> 66, 6->68,…),
tiếp tục quay lại B3
 In biến đếm

1.3.6.3. DSA08001: Cấu trúc dữ liệu hàng đợi 1


- Cách làm:
 Xử lí truy vấn theo các hàm có sẵn của queue

1.3.7. Quy hoạch động

1.3.7.1. DSA05012: Tổ hợp C(n, k)


- Cách làm:
Áp dụng công thức sau và tam giác Pascal

19
- Sử dụng quy hoạch động với mảng 2 chiều
- Công thức: C[i][j] = (C[i-1][j-1] + C[i-1][j]) % MOD; (chia mod do số lớn)
- VD: C(2,1) có giá trị là 2 chính bằng tổng của C(1,0)=1 và C(1,1)=1

1.3.7.2. DSA05005: Số bước ít nhất


- Cách làm:
 Sử dụng bài toán quy hoạch động dãy con tăng dài nhất
 Sử dụng thuật toán:
 Gọi F(i) là độ dài dãy con tăng dài nhất kết thúc ở A(i), ta có công thức
tính:
F(1)=1
F(i)=max{F(j)+1}
Với j,j thỏa mãn 1≤j<ivà A(j)<A(i)
Kết quả bài toán là max{F}

II. Cơ sở dữ liệu quản lý sân bóng


2.1. Giới thiệu bài toán
Hiện nay, máy tính và công nghệ đang được áp dụng hầu hết trong các lĩnh
vực đời sống, và bóng đá cũng không đứng ngoài guồng quay đó khi hiện nay mọi
lĩnh vực trong bóng đá đều đã, đang và sẽ luôn được áp dụng khoa học công nghệ.

Khi tổ chức các giải đấu một nhu cầu đặt ra là giúp tổ chức và quản lý một
cách nhanh chóng và tiện lợi. Do quy mô của giải đấu ngày càng lớn nên việc tổ
chức và quản lý là không hề đơn giản và dễ dàng. Bởi thế, việc ra đời của các phần
mềm trợ giúp là cần thiết.

20
Vì vậy, nhóm chúng em chọn đề tài: “Thiết kế cơ sở dữ liệu quản lý sân
bóng” với mục đích giúp công việc tổ chức và quản lý trở nên hiệu quả và dễ dàng
hơn.

2.2. Mục đích thiết kế cơ sở dữ liệu


Việc lập ra một website riêng như vậy không những giúp cho người chơi dễ
dàng đặt giờ,xem lịch,xem thông tin sân (Cụ thể như khi khách đến chơi lần đầu họ
không hề biết được chất lượng các sân bóng như thế nào,thông tin giờ giấc ra sao
thì họ có thể lên ngay website riêng của sân bóng để tìm hiểu.Bên cạnh đó thì giờ
đây họ không cần phải gọi điện để đặt giờ như trước kia mà chỉ cần một vài thao
tác lướt web nho nhỏ thì họ có thể chọn cho mình một khung giờ hợp lí để ra sân.)

Giúp cho người quản lý sân bóng có thể kiểm soát được toàn bộ hệ thống sân
bóng,người tham gia chỉ bằng việc thao tác trên một chiếc máy tính hoặc laptop dễ
dàng

Đối với những khách hàng thân thiết lâu năm thì sân bóng sẽ có những chế
độ ưu tiên đặc biệt cho họ,chỉ cần lên website và đăng nhập vào tài khoản cá nhân
riêng của mình đã đăng kí trước đó thì hệ thống sẽ tự động cung cấp các chương
trình ưu đãi đang có.

2.3. Đối tượng sử dụng


+ Khách hàng sử dụng sân bóng
+ Quản lý sân bóng

2.4. Phân tích thiết kế cơ sở dữ liệu


2.4.1. Mô tả ứng dụng của hệ CSDL
- Quản lí danh sách người dùng (tài khoản đăng ký sử dụng)
- Quản lí danh sách các sân của khu thể thao
21
- Quản lí việc nhập xuất hóa đơn khi sân được thuê, khi hàng hóa được bán
- Quản lí các trận đấu khi sân được đặt và việc thuê các dịch vụ đi kèm
- Quản lí việc đặt sân online, hủy sân online

2.4.2. Các yêu cầu về dữ liệu cần lưu trữ


Dữ liệu về người dùng, các thông tin bao gồm: userName, password,
fullname, SĐT, ngày Sinh, giới tính, tài khoản người dùng này là thuộc client hay
admin, …
Dữ liệu về thông tin của sân cần cho thuê, gồm có: giá sân, tình trạng
sân(đang hoạt động hay đang được bảo trì), loại sân(sân 5, 7, 9, 11), ngày mở sân,

Dữ liệu về các trận đấu: ID sân, ID user, ngày diễn ra, giờ bắt đầu, giờ kết
thúc, tình trạng …
Dữ liệu về dịch vụ: mã dịch vụ, tên dịch vụ, giá của dịch vụ, mã địa điểm, ...
Dữ liệu về địa điểm: lưu trữ thông tin về địa chỉ bao gồm: số Đường,
Phường, Quận
Dữ liệu về hóa đơn: + Hóa đơn Sân gồm: ngày tạo, ID sân, giá, …
Hóa đơn hàng hóa: ngày, số lượng, giá, ID hàng ,…
2.4.3. Các chức năng của CSDL

2.4.3.1. Các chức năng lưu trữ


-Thông tin thành viên:Lưu thông tin ID,mật khẩu,giới tính,họ,tên,địa chỉ ,số
điện thoại,ngày đăng ký tài khoản,quyền làm khách hàng hay admin của thành
viên.

- Thông tin sân: Lưu trữ thông tin của sân gồm mã sân, mã địa điểm, loại
sân, ngày mở, tình trạng, ghi chú, giá sân quy định.

- Thông tin trận đấu:Lưu thông tin của trận đấu gồm mã trận,mã sân,mã địa
điểm,ID,ngày diễn ra trận đấu,giờ bắt đấu,giờ kết thúc của trận đấu,tiền sân diễn ra

22
trên trận,tình trạng trận đấu là chưa bắt đầu,đang diễn ra hay đã kết thúc của trận
đấu.

- Thông tin địa điểm:Lưu trữ thông tin địa chỉ của sân đấu bao gồm
số,đường,phường,quận,ghi chú.

-Thông tin hàng:Lưu trữ thông tin hàng hóa(thức ăn nước uống) bao gồm mã
hàng,mã địa điểm,tên hàng,tồn,đơn giá

-Thông tin chứng từ hóa đơn:Lưu thông tin chứng từ hóa đơn bao gồm số
hóa đơn,mã hàng,mã địa điểm,số lượng
-Thông tin dịch vụ:Lưu trữ thông tin dịch vụ bao gồm mã dịch vụ,mã địa
điểm
-Thông tin chứng từ dịch vụ:Lưu thông tin chứng từ dịch vụ gồm mã trận,mã
địa điểm,mã dịch vụ,số lượng.

2.4.3.2. Các chức năng tra cứu, tìm kiếm


- Thông tin sân: Lưu trữ thông tin của sân gồm mã sân, mã địa điểm, loại
sân, ngày mở, tình trạng, ghi chú, giá sân quy định.

- Thông tin trận đấu:Lưu thông tin của trận đấu gồm mã trận,mã sân,mã địa
điểm,ID,ngày diễn ra trận đấu,giờ bắt đấu,giờ kết thúc của trận đấu,tiền sân diễn ra
trên trận,tình trạng trận đấu là chưa bắt đầu,đang diễn ra hay đã kết thúc của trận
đấu

- Thông tin địa điểm:Lưu trữ thông tin địa chỉ của sân đấu bao gồm
số,đường,phường,quận,ghi chú.

- Thông tin hàng:Lưu trữ thông tin hàng hóa(thức ăn nước uống) bao gồm
mã hàng,mã địa điểm,tên hàng,tồn,đơn giá

- Thông tin chứng từ hóa đơn:Lưu thông tin chứng từ hóa đơn bao gồm số
hóa đơn,mã hàng,mã địa điểm,số lượng
23
- Thông tin dịch vụ:Lưu trữ thông tin dịch vụ bao gồm mã dịch vụ,mã địa
điểm

- Thông tin chứng từ dịch vụ:Lưu thông tin chứng từ dịch vụ gồm mã
trận,mã địa điểm,mã dịch vụ,số lượng.

2.4.3.3.Chức năng tính toán:


- Tính toán doanh thu sân bóng hàng ngày,hàng tuần,hàng tháng,từng quý và
năm
- Tính toán chi phí từ các hoạt động dịch vụ theo sân và tổng địa điểm hàng
ngày,hàng tuần,hàng tháng,từng quý và năm
- Tính toán chi phí từ việc kinh doanh hàng hóa theo sân và tổng địa điểm
hàng ngày,hàng tuần,hàng tháng,từng quý và năm
- Tính toán tổng doanh thu sân bóng(gồm tiền sân,tiền hàng hóa,tiền dịch vụ)
theo sân hàng ngày,hàng tuần,hàng tháng,từng quý và năm
- Tính toán tỷ lệ từng sân,từng địa điểm hàng ngày,hàng tuần,hàng
tháng,từng quý và năm.

2.4.3.4.Chức năng kết xuất:


- Báo cáo tình hình đặt sân từng địa điểm
- Báo cáo doanh thu sân bóng,địa điểm
- Báo cáo tỷ lệ doanh thu sân bóng,địa điểm
- Báo cáo danh sách khách hàng thân thiết(đặt sân >= trận/tháng)

2.4.3.5. Tạo tài khoản


- Ngoài cách đặt sân bằng hai cách trực tiếp là gọi điện và đến thẳng nơi ban
quản lý sân làm việc thì còn cách nhanh hơn,ít tốn thời gian và tiện lợi hơn là đặt
sân online và website quản lý sân bóng.Để đăng ký,người dùng phải tạo một tài
khoản trên website.Người dùng tạo tài khoản trên website truy cập vào website hệ
thống và tạo mật khẩu là bước bắt buộc

24
- Ngay khi truy cập vào link đăng ký tài khoản,người dùng sẽ tự cấp cho
mình 1 tên đăng nhập(ID- đảm bảo là không trùng với ID của các thành viên khác;
cũng như về số điện thoại khi đăng ký tài khoản) .Sau đó người dùng tạo mật khẩu
tài khoản đúng theo quy định khi đăng ký tài khoản

- Người dùng sau khi nhập mật khẩu sẽ được chuyển sang giao diện nhập
thông tin.Các thông tin được hệ thống yêu cầu cung cấp bao gồm
họ(HO),tên(TEN),địa chỉ(DIACHI-không bắt buộc),số điện thoại(PHONE), và
được hệ thống cấp quyền(QUYEN) là 1 tương ứng với quyền người dùng.

2.4.3.6. Hủy đăng ký tài khoản


- Người dùng đã đăng ký thành viên của website có quyền hủy đăng ký khi
có yêu cầu.Người dùng muốn hủy đăng ký sẽ cung cấp ID và đăng nhập với mật
khẩu(MK) đã được xác nhận từ hệ thống

- Người dùng khi xác thực muốn hủy tài khoản đăng ký thì sẽ được hệ thống
xử lý hủy toàn bộ dữ liệu đã đăng ký bao gồm họ(HO),tên(TEN),địa chỉ(DC),số
điện thoại(PHONE) và ID

- Khi người dùng hủy đăng ký xong thì ID đã đăng ký cũng không tồn tại dữ
liệu,nghĩa là ở trạng thái trống,người dùng tiếp theo đăng ký sẽ sử dụng ID này.

2.4.3.7. Đăng ký sân


- Người dùng muốn đăng ký sân online thì phải có tài khoản người dùng
online được đăng ký từ trước đó.Người dùng sau khi đăng nhập tài khoản thì hệ
thống sẽ tự chuyển sang giao diện đặt sân.

- Sau khi đã đăng nhập. Người dùng có thể chọn hoặc tìm kiếm sân (SAN)
theo mong muốn của chính mình. Sau khi chọn được sân, người dùng sẽ chọn ngày
và giờ của trận đấu mình sẽ đặt. Nếu thoã mãn được các yêu cầu của hệ thống thì
một dòng dữ liệu sẽ được insert vào bảng TRANDAU của CSDL

25
2.4.3.8.Hủy đăng ký sân
- Khách hàng có yêu cầu hủy sân đã đăng ký phải thực hiện yêu cầu ngay
trong ngày (Và trước giờ bắt đầu trận đấu ít nhất 60 phút).Sau một ngày tính từ thời
điểm đăng ký,hệ thống sẽ cập nhật các thông tin về sân như mã trận(MATRAN),mã
sân(MASAN),mã địa điểm(MADD),…và sao lưu trên hệ thống để tránh tình trạng
có khách hàng đăng ký sau đặt trùng

- Khi có yêu cầu hủy sân từ người dùng,hệ thống sẽ delete tất cả các thông
tin như mã trận(MATRAN),mã sân(MASAN),mã địa điểm(MADD),…ngay thời
điểm hủy để khách hàng đăng ký sau có thể thực hiện thao tác. Đồng thời, những
thông tin về việc đăng ký dịch vụ của trận đấu đó trong bảng CTDV(nếu có) cũng
sẽ được xoá bỏ.

2.4.3.9.Tính hóa đơn, tiền thuê sân, tiền dịch vụ


- Với những thành viên có đăng ký hoá đơn. Hoá đơn sẽ được thanh toàn vào
ngày hoá đơn; mà thành viên đã đăng ký. Tổng tiền hoá đơn sẽ được tính dựa vào
đơn giá ở bảng hàng hoá và số lượng ở bảng CTHD

- Tổng tiền ở mỗi trận đấu sẽ được tính dựa trên: thời gian đấu được đăng ký
trong bảng, đơn giá của sân đấu mà trận đấu đăng ký. Và tổng tiền được tính từ các
chi tiết dịch vụ mà thành viên đã đăng ký cho trận đấu đó (nếu có)

26
2.5. Mô hình quan hệ
2.5.1. Mô hình quan hệ

27
2.5.2. Mô tả các quan hệ
THANHVIEN: ID, MK, GIOITINH, HO , TEN, DC, PHONE, QUYEN,
NGAYDK
SAN: MASAN, MADD, LOAISAN, NGAYMO, TINHTRANG,
GHICHU, GIASAN
TRANDAU: MATRAN, MASAN, MADD, ID, NGAYDAT, GIOBD,
GIOKT, TINHTRANG, TONGTIEN
DIADIEM: MADD, TENDD, SO, DUONG, PHUONG, QUAN,
GHICHU
HANG: MAHANG, MADD, TON, DONGIA
DICHVU: MADV, MADD, TENDV, DONGIA, TON
HOADON: SOHD, NGAYHD, ID, TONGTIEN, TINHTRANG
CTHD: SOHD, MAHANG, MADD, SOLUONG
CTDV: MATRAN, MADV, MADD, SOLUONG

*Mô tả CSDL bằng ngôn từ


- Người quản lý của sân bóng phải nắm được thông tin việc đặt sân bóng của
các thành viên có tài khoản trên website của sân bóng.Việc đặt sân bóng bao
gồm việc đặt bao nhiêu sân,loại sân nào,và ở quận nào,huyện nào trong
thành phố,….Người quản lý còn phải tính luôn cả phụ thu cho những phí
phát sinh khác trong quá trình người chơi bóng nhận sân cho đến khi hết trận
như phí mượn áo đấu cùng màu,phí nước giải khát,đồ ăn đi kèm,…

- Bảng người dùng(THANHVIEN).Người dùng sẽ phải cung cấp tên đăng


nhập (ID), mật khẩu(MK),họ(HO),tên(TEN), giới tính(GIOITINH),địa
chỉ(DC) và số điện thoại(PHONE) và được mặc định cấp quyền(QUYEN) =
1 nghĩa là quyền thành viên,và 0 là quyền admin khi đăng ký làm thành viên,
2 là thành viên đang bị khoá

28
- Bảng trận đấu bao gồm mã trận(MATRAN-hệ thống cung cấp),mã
sân(MASAN) ,mã địa điểm(MADD) được người dùng cung cấp khi tiến
hành đặt sân.Ngày thi đấu(NGTRAN) được quy định là phải sau hoặc bằng
ngày hiện tại hệ thống .Giờ bắt đầu(GIOBD) và giờ kết thức(GIOKT) được
cung cấp sao cho hiệu GIOKT-GIOBD >=30p và phải là bội số của 5.Tình
trạng(TINHTRANG) sân gồm 3 thông số (0: trận đấu chưa bắt đầu, 1: trận
đấu đã kết thúc, 2: trận đấu bị huỷ hợp lệ), Tổng tiền (được tính bằng tổng
tiền hoá đơn (nếu có) và tiền thuê sân)

- Bảng địa điểm bao gồm mã địa điểm(MADD) được đánh số thứ tự mà hệ
thống tự cung cấp với các thông tin mà địa điễm đó toạ lạc

- Bảng sân gồm mã sân(MASAN),mã địa điểm(MADD) tương ứng với mỗi
địa điễm (MADD) sẽ có nhiều sân (MASAN). (LOAISAN) chỉ số lượng
người của mỗi đội trên sân. TINHTRANG chỉ tình trạng hoạt động của
sân(Y: sân có thể thuê, N: sân kkhông thể thuê)

- Bảng (HOADON) là thể hiện hoá đơn mua hàng (đồ ăn, thức uống) của
thành viên yêu cầu hệ thống. Tình trạng (TINHTRANG) của hoá đơn sẽ thể
hiện (hoá đơn chưa thanh toán, đã thanh toán, hay bị bỏ) . Ngày hoá đơn
(NGAYHD) sẽ là ngày tình trạng hoá đơn được quyết định.

- Bảng chi tiết hóa đơn(CTHD) gồm mã trận(MAHD),mã hàng(MAHANG),


mã địa điễm(MADD) lấy từ bảng hàng hóa (HANG) và số lượng hàng(SL).

-Bảng hàng hóa(HANG) gồm mã hàng(MAHANG-hệ thống cung cấp),mã


địa điễm(MADD) thông tin hàng hoá của địa điễm (Thể hiện, hàng hoá có
(MAHANG) ở địa điễm (DIADIEM) nào.

29
- Bảng Chi tiết dịch vụ (CTDV). Tương ứng với mỗi TRANDAU, thành
viên có thể đăng ký thêm các DICHVU của hệ thống như thuê các dụng cụ
hỗ trợ bóng đá, thuê trọng tài…

- Bảng dịch vụ (DICHVU). Với thuộc tính (MADV, MADD) sẽ thể hiện
những thông tin về dịch vụ hiện có ở những địa điểm cụ thể.

2.5.3. Mô tả thuộc tính

Table THÀNH VIÊN


STT Tên Thuộc Kiểu Ràng Giá Trị Ý Nghĩa/ Ghi
Tính Buộc Khởi Chú
Động
1 ID VARCHAR(20) Khác null ID
2 MK VARCHAR(20) Mật Khẩu
3 GIOITINH NVARCHAR(3) Giới Tính
4 HO NVARCHAR(20) Họ
5 TEN NVARCHAR(40) Tên
6 DC NVARCHAR(80) Địa Chỉ
7 PHONE VARCHAR(20) Số Điện Thoại
8 QUYEN INT Quyền
9 NGAYDK SMALLDATETIME Ngày Đăng

Table SÂN
STT Tên Thuộc Kiểu Ràng Buộc Giá Trị Ý Nghĩa/Ghi
Tính Khởi Chú
Động
1 MASAN INT Khác null Mã Sân
2 MADD INT Mã Địa Điểm
3 LOAISAN INT Loại Sân
4 NGAYMO DATE Ngày Mở
5 TINHTRANG VARCHAR(1) Tình Trạng
6 GHICHU VARCHAR(50) Ghi Chú
7 GIASAN MONEY Giá Sân

30
Table TRẬN ĐẤU
STT Tên Thuộc Kiểu Ràng Buộc Giá Trị Ý Nghĩa/Ghi Chú
Tính Khởi Động
1 MATRAN INT Khác null Mã Trận
2 MASAN INT Mã Sân
3 MADD INT Mã Địa Điểm
4 ID VARCHAR(20) ID
5 NGAYDAT DATE Ngày Đặt
6 GIOBD TIME Giờ Bắt Đầu
7 GIOKT TIME Giờ Kết Thúc
8 TINHTRANG INT Tình Trạng
9 TONGTIEN MONEY Tổng Tiền

Table ĐỊA ĐIỂM


STT Tên Thuộc Kiểu Ràng Buộc Giá Trị Ý Nghĩa/Ghi Chú
Tính Khởi Động
1 MADD INT Khác null Mã Địa Điểm
2 TENDD NVARCHAR(50) Tên Địa Điểm
3 SO NVARCHAR(5) Số
4 DUONG MVARCHAR(40) Đường
5 PHUONG NVARCHAR(30) Phường
6 QUAN NVARCHAR(20) Quận
7 GHICHU VARCHAR(50) Ghi Chú

Table HÀNG
ST Tên Thuộc Kiểu Ràng Buộc Giá Trị Ý Nghĩa/ Ghi Chú
T Tính Khởi Động
1 MAHANG INT Khác null Mã Hàng
2 MADD INT Mã Địa Điểm
3 TENHANG NVARCHAR(4 Tên Hàng
0)
4 TON INT Tồn
5 DONGIA MONEY Đơn Giá

31
Table DỊCH VỤ
STT Tên Thuộc Kiểu Ràng Buộc Giá Trị Ý Nghĩa/ Ghi Chú
Tính Khởi Động
1 MADV INT Khác null Mã Dịch Vụ
2 MADD INT Mã Điạ Điểm
3 TENDV NVARCHAR(30) Tên Dịch Vụ
4 DONGIA MONEY Đơn Giá
5 TON INT Tồn

Table HÓA ĐƠN


STT Tên Thuộc Kiểu Ràng Buộc Giá Trị Ý Nghĩa/ Ghi Chú
Tính Khởi Động
1 SOHD INT Khác null Số Hóa Đơn
2 NGAYHD DATE Ngày Hóa Đơn
3 ID VARCHAR(20) ID
4 TONGTIEN MONEY Tổng Tiền
5 TINGTRANG INT Tình Trạng

Table CTHD
STT Tên Thuộc Kiểu Ràng Buộc Giá Trị Khởi Ý Nghĩa/ Ghi Chú
Tính Động
1 SOHD INT Khác null Số Hóa Đơn
2 MAHANG INT Khác null Mã Hàng
3 MADD INT Khác null Mã Địa Điểm
4 SOLUONG INT Số Lượng

Table CTDV
STT Tên Thuộc Kiểu Ràng Buộc Giá Trị Khởi Ý Nghĩa/ Ghi Chú
Tính Động
32
1 MATRAN INT Khác null
2 MADV INT Khác null
3 MADD INT Khác null
4 SOLUONG INT

2.5.4. Mô hình ER

33
III. Máy tính và điều khiển

3.1 Tìm hiểu về máy chủ và tủ đĩa

Để chọn được loại máy chủ và tủ đĩa phù hợp cho nghiên cứu của mình, bạn cần xác định
mục đích sử dụng của hệ thống, khả năng tài chính, và yêu cầu về hiệu suất, độ tin cậy và
khả năng mở rộng của hệ thống.

Máy chủ:

 Nếu bạn cần một máy chủ có khả năng hoạt động 24/24 và hiệu suất cao, bạn có thể
chọn các máy chủ dòng server của các nhà sản xuất như Dell, HP, IBM hay các nhà
sản xuất máy chủ dành cho các mục đích đặc biệt như Supermicro.
 Nếu bạn đang muốn nghiên cứu ảo hóa, bạn có thể chọn máy chủ có khả năng hỗ trợ
công nghệ ảo hóa như Intel VT-x hoặc AMD-V.
 Một số lựa chọn phổ biến hiện nay cho máy chủ bao gồm:

 Dell PowerEdge R740


 HP ProLiant DL380 Gen10
 IBM System x3650 M5
 Supermicro SYS-1029P-WTR

Tủ đĩa:

 Nếu bạn cần một tủ đĩa có khả năng hoạt động 24/24 và hiệu suất cao, bạn có thể
chọn các loại tủ đĩa của các nhà sản xuất như Dell, HP, EMC hay các nhà sản xuất tủ
đĩa dành cho các mục đích đặc biệt như NetApp.
 Nếu bạn đang muốn nghiên cứu các hệ thống lưu trữ hiện đại, bạn có thể chọn tủ đĩa
có khả năng hỗ trợ các công nghệ lưu trữ như RAID, SAN, NAS, iSCSI.
 Một số lựa chọn phổ biến hiện nay cho tủ đĩa bao gồm:

34
 Dell EMC Unity XT 480
 HP MSA 2050
 NetApp FAS9000
 EMC Isilon X210
 Lưu ý rằng, việc chọn loại máy chủ và tủ đĩa phù hợp không chỉ phụ thuộc vào các
yếu tố kỹ thuật mà còn phải đáp ứng các yêu cầu về chi phí, kích thước và khả năng
mở rộng của hệ thống.
Hiệu suất và khả năng hoạt động liên tục của máy chủ và tủ đĩa phụ thuộc vào nhiều yếu
tố như thương hiệu, cấu hình, công nghệ sử dụng, môi trường điều kiện vận hành, ... Tuy
nhiên, ở đây tôi sẽ đưa ra vài lựa chọn thường được sử dụng để đảm bảo hiệu suất cao và
khả năng hoạt động 24/24:

Máy chủ:

 Server HP ProLiant DL380 Gen10: Đây là một trong những dòng máy chủ phổ biến
và được ưa chuộng nhất hiện nay với nhiều tính năng ưu việt như hiệu năng mạnh mẽ,
tính linh hoạt và mở rộng cao, hỗ trợ ứng dụng ảo hóa, ... Với thiết kế hệ thống cải
tiến, ProLiant DL380 Gen10 có khả năng hoạt động 24/24 với hiệu suất vượt trội.

 Server Dell PowerEdge R740: Đây là một lựa chọn khác được đánh giá cao với khả
năng xử lý tốt các tác vụ nặng, hỗ trợ ứng dụng ảo hóa, độ tin cậy cao, ... R740 cũng
được thiết kế để có khả năng hoạt động liên tục và đảm bảo hiệu suất cao.

Tủ đĩa:
 Tủ đĩa HP MSA 2050: Là một trong những lựa chọn phổ biến với thiết kế modul và
mở rộng, hỗ trợ các giao thức kết nối chuẩn như iSCSI, SAS và FC, cho phép nâng
cấp dễ dàng khi nhu cầu tăng cao. MSA 2050 cũng được đánh giá cao về khả năng
hoạt động liên tục và hiệu suất.
 Tủ đĩa Dell EMC Unity 300: Đây là một trong những tủ đĩa được ưa chuộng với khả
năng mở rộng và tính linh hoạt cao. Unity 300 có thể hỗ trợ nhiều giao thức kết nối và
35
khả năng quản lý dữ liệu đơn giản, đảm bảo khả năng hoạt động liên tục và hiệu suất
ổn định.

3.2 Tìm hiểu và nghiên cứu cấu trúc của máy chủ HP ProLiant DL380 Gen 10
3.2.1. Tổng quan về máy chủ HP ProLiant DL380 Gen 10
3.2.1.1. Giới thiệu
Máy chủ HP ProLiant DL380 Gen10 là một trong những máy chủ phổ biến nhất
của hãng HP (hiện nay là HPE) với thiết kế 2U, khả năng mở rộng cao và khả năng quản
lý đơn giản. Đây là một trong những máy chủ chủ đạo được sử dụng cho các trung tâm dữ
liệu, các doanh nghiệp và tổ chức với các yêu cầu cao về hiệu suất, tính linh hoạt và khả
năng mở rộng.

3.2.1.2. Tính năng vượt trội của máy chủ HP ProLiant DL380 Gen 10
Máy chủ HP ProLiant DL380 Gen10 có nhiều tính năng hỗ trợ như cài đặt nhanh
chóng với công cụ Intelligent Provisioning, khả năng điều khiển từ xa thông qua iLO
(Integrated Lights Out), hỗ trợ chuẩn mã hóa và xác thực dữ liệu với HPE Secure
Encryption và HPE Smart Array. Ngoài ra, máy chủ này còn được tích hợp sẵn các công
nghệ tiên tiến như VMware, Docker, Kubernetes để hỗ trợ việc ảo hóa và triển khai các
ứng dụng trên nền tảng đám mây.

 RAID: Máy chủ này có hỗ trợ cho cả RAID 0, 1, 5, 6, 10, 50, 60. RAID (Redundant
Array of Independent Disks) là một phương pháp kết hợp nhiều ổ đĩa để tăng tốc độ
truy xuất và cung cấp tính dự phòng trong trường hợp ổ đĩa bị hỏng.

 Hệ điều hành: Máy chủ này có thể chạy các hệ điều hành sau đây: Windows Server
2016, Windows Server 2019, VMware ESXi 6.5 và 6.7, Red Hat Enterprise Linux
(RHEL) 7.6 và 8.0, SUSE Linux Enterprise Server (SLES) 12 SP4 và 15, Ubuntu
Server 18.04 LTS.

36
 Máy chủ ảo: Máy chủ này có khả năng chạy các máy chủ ảo thông qua tính năng
Virtualization Technology của Intel. Nó hỗ trợ các công nghệ ảo hóa như VMware,
Microsoft Hyper-V và Xen.

3.2.1.3. Cấu trúc và thành phần của máy chủ


 CPU: Máy chủ HP ProLiant DL380 Gen10 được trang bị CPU Intel Xeon Scalable
với tùy chọn từ 8 đến 28 lõi và tần số xung nhịp từ 1.7GHz đến 3.6GHz.
 RAM: Máy chủ này hỗ trợ tối đa 3TB RAM với 24 khe cắm DIMM và tốc độ bộ nhớ
tối đa là 2933 MT/s.
 Ổ cứng: HP ProLiant DL380 Gen10 hỗ trợ tối đa 30 ổ cứng với sự kết hợp giữa ổ
cứng SAS, SATA và NVMe.
 Card mạng: Máy chủ được trang bị card mạng HPE 10Gb 2-port 562SFP+ và có thể
nâng cấp lên tối đa 4 cổng.
 Nguồn: Máy chủ có thể trang bị 2 nguồn cung cấp điện chạy độc lập và có thể thay
thế khi máy chủ đang hoạt động.
 Quạt tản nhiệt: HP ProLiant DL380 Gen10 được trang bị quạt tản nhiệt thông minh
giúp giảm thiểu tiếng ồn và tối ưu hóa luồng không khí.
cho cơ sở dữ liệu, tùy theo nhu cầu người dùng mà khả năng xử lý vượt trội hơn.

3.2.1.4. Mục đích sử dụng của máy chủ


 Máy chủ dành cho doanh nghiệp: HP ProLiant DL380 Gen10 là máy chủ rất phù hợp
cho các doanh nghiệp lớn với nhu cầu sử dụng dữ liệu lớn, công nghệ ảo hóa, truyền
thông và tính toán khoa học.
 Máy chủ dành cho cá nhân: Máy chủ này cũng có thể sử dụng cho một số cá nhân có
nhu cầu sử dụng dữ liệu lớn hoặc chạy các ứng dụng nặng.
 Máy chủ dành cho game server: Với khả năng chạy nhiều máy chủ ảo, HP ProLiant
DL380 Gen10 cũng phù hợp cho việc sử dụng làm game server.

3.2.1.5. Cách lựa chọn máy chủ


Để lựa chọn được máy chủ phù hợp với nhu cầu sử dụng, cần đưa ra các yêu cầu
và tiêu chuẩn cụ thể như:
37
 Mục đích sử dụng: máy chủ dành cho doanh nghiệp, máy chủ dành cho cá nhân, máy
chủ dành cho game server,...
 Tính ổn định và tin cậy: thời gian hoạt động liên tục (uptime), độ tin cậy của máy chủ.
 Hiệu suất: tốc độ xử lý, dung lượng lưu trữ, băng thông mạng,...
 Tính năng: hỗ trợ RAID, tính năng ảo hóa, hệ điều hành, kết nối mạng,...

Dựa trên các yêu cầu trên, ta có thể so sánh và lựa chọn máy chủ phù hợp với nhu cầu sử
dụng. Ví dụ, máy chủ HP ProLiant DL380 Gen10 có thể là lựa chọn tốt cho mục đích sử
dụng doanh nghiệp với tính năng hỗ trợ RAID đa dạng, khả năng chạy các hệ điều hành
và máy chủ ảo phổ biến,

3.2.1.6. Sự an toàn dành cho doanh nghiệp mà máy chủ HP ProLiant DL380 Gen 10
có thể mang lại
HPE ProLiant DL380 Gen10 với những ưu điểm tuyệt vời:

 Sở hữu giá trị lớn


 CPU có thể mở rộng Xeon
 Khả năng mở rộng cao
 Tùy chọn lưu trữ mở rộng
 Quản lý chất lượng iLO5
 Bảo mật mạnh.
 Máy chủ Hpe rack 2U linh hoạt nhất trên hành tinh

Không chỉ dừng lại ở Gen10, HP ProLiant DL380 Gen10 không ngừng cập nhật và phát
triển tốt hơn trong tương lai gần. Tại thời điểm hiện tại, HP ProLiant DL380 Gen10 đã
đáp ứng đầy đủ các tính năng cơ bản cũng như cập nhật thêm nhiều tính năng mới và
phong phú. Một máy chủ rack 2U mạnh mẽ và an toàn là sự lựa chọn lý tưởng của mọi
doanh nghiệp.

3.2.2. Cấu trúc HP ProLiant DL380 Gen10


3.2.2.1 Hệ thống điều khiển
a) Mặt ngoài của hệ thống
38
Hình 1 : Mặt ngoài của hệ thống

b) Mặt sau của hệ thống

Hình 2 : Mặt ngoài của hệ thống

c) Bên trong hệ thống

39
Hình 3 : Bên trong của hệ thống

3.2.2.2. Thông số kĩ thuật của máy

Bộ vi xử lý (CPU) Intel Xeon Silver 4210R (10C/20T, 2.40 GHz,


13.75MB)

RAM Support 32GB DDR4

HDD 1.2TB 10K SAS 2.5″

Bộ điều khiển RAID MR416i-P/4GB

Form Factor Rack Server (2U)

Bộ xử lý lõi có sẵn 8 lõi

Bộ nhớ cache bộ xử lý 11,00 MB L3

Tốc độ bộ xử lý 1,8 GHz

40
Bộ nhớ 16 GB DDR4 6

Khe cắm bộ nhớ 24 khe DIMM

Loại bộ nhớ HPE DDR4 SmartMemory

Loại ổ 8 LFF SAS / SATA / SSD

Khe cắm mở rộng 8, để mô tả chi tiết tham khảo QuickSpecs

Sự kiểm soát mạng lưới Bộ điều hợp Ethernet HPE 1 Gb 331i 4 cổng cho mỗi bộ
điều khiển và / hoặc FlexibleLOM tùy chọn, tùy thuộc
vào kiểu máy

Bộ điều khiển lưu trữ 1 Sảnh thông minh HPE S100i và / hoặc 1 Mảng thông
minh HPE P408i-a và / hoặc 1 Mảng thông minh HPE
P816i-a và / hoặc 1 Mảng thông minh HPE E208i-a, tùy
thuộc vào kiểu máy

Các tính năng của quạt Quạt cắm dự phòng nóng, tiêu chuẩn
hệ thống

Yếu tố hình thức 2U

Loại cung cấp điện 2 nguồn cung cấp năng lượng khe cắm linh hoạt, tối đa
tùy thuộc vào mô hình

Kích thước sản phẩm (H 17,54 x 28,75 x 3,44 inch


x W x D)
Cân nặng 32,6 lb

41
3.3 Tìm hiểu về tủ đĩa HP MSA 2050

3.3.1. Giới thiệu về tủ đĩa HP MSA 2050


Tủ đĩa HP MSA 2050 là một thiết bị lưu trữ dữ liệu hiệu suất cao được thiết kế để
đáp ứng nhu cầu lưu trữ và quản lý dữ liệu của doanh nghiệp. Thiết bị này có thể được sử
dụng cho các mục đích lưu trữ khác nhau, từ lưu trữ dữ liệu cho doanh nghiệp, backup dữ
liệu, lưu trữ video, và nhiều hơn nữa. Tủ đĩa HP MSA 2050 cung cấp tính năng lưu trữ
hiệu quả, bảo mật dữ liệu, khả năng mở rộng và độ tin cậy cao

3.3.2. Cấu trúc và thành phần của tủ đĩa HP MSA 2050


 Ổ đĩa cứng: Tủ đĩa HP MSA 2050 có thể chứa tối đa 24 ổ đĩa SAS hoặc SAS SSD,
cho phép lưu trữ lên đến 1,2 PB dữ liệu.
 Card RAID: Tủ đĩa HP MSA 2050 có tích hợp card RAID để cung cấp tính năng bảo
mật dữ liệu, tăng tốc độ truy xuất dữ liệu và khả năng phục hồi dữ liệu khi xảy ra sự
cố.
 Nguồn: Tủ đĩa HP MSA 2050 được trang bị nguồn điện kép để đảm bảo hoạt động ổn
định và liên tục.
 Quạt tản nhiệt: Thiết bị này được trang bị hệ thống quạt tản nhiệt để giải nhiệt và giữ
cho tủ đĩa luôn mát mẻ.

3.3.3. Tính năng của tủ đĩa HP MSA 2050

 RAID: Tủ đĩa HP MSA 2050 hỗ trợ RAID 0, 1, 5, 6, 10, 50, 60. RAID (Redundant
Array of Independent Disks) là một công nghệ lưu trữ dữ liệu trên nhiều ổ đĩa để tăng
tính an toàn và tốc độ truy xuất dữ liệu. Với tùy chọn RAID 5 hoặc RAID 6, tủ đĩa có
khả năng chịu được sự cố hỏng hóc của một hay nhiều ổ đĩa mà không mất dữ liệu.

 SAN/NAS: HP MSA 2050 hỗ trợ cả SAN (Storage Area Network) và NAS (Network
Attached Storage). SAN cho phép tạo một hệ thống lưu trữ riêng biệt, truy xuất dữ

42
liệu nhanh và cung cấp tính khả dụng cao. NAS cho phép chia sẻ dữ liệu trên mạng và
làm giảm chi phí cho doanh nghiệp.

 Hiệu suất cao: Tủ đĩa HP MSA 2050 có thể đạt tốc độ truy xuất dữ liệu lên tới
200.000 IOPS (Input/Output Operations Per Second) và có thể kết nối với 64 host.

3.4 Kết nối máy chủ HP ProLiant DL380 Gen10 với tủ đĩa HP MSA 2050

a. Giới thiệu
Máy chủ HP ProLiant DL380 Gen10 và tủ đĩa HP MSA 2050 là hai thiết bị quan trọng
trong hạ tầng máy chủ của doanh nghiệp. Để đạt được hiệu suất tốt nhất và đảm bảo hoạt
động liên tục 24/24, cần kết nối hai thiết bị này với nhau một cách chính xác và đúng
cách. Bài báo cáo này sẽ trình bày về cách kết nối máy chủ HP ProLiant DL380 Gen10
với tủ đĩa HP MSA 2050 để đạt hiệu suất cao và hoạt động liên tục 24/24.

b. Các bước kết nối


 Xác định cổng kết nối trên máy chủ HP ProLiant DL380 Gen10:
 Máy chủ HP ProLiant DL380 Gen10 được trang bị các cổng kết nối với các giao thức
khác nhau, bao gồm Ethernet, Fibre Channel và iSCSI. Việc kết nối tủ đĩa HP MSA
2050 với máy chủ HP ProLiant DL380 Gen10 có thể sử dụng các giao thức này, tuy
nhiên iSCSI là giao thức phổ biến nhất được sử dụng để kết nối với tủ đĩa HP MSA
2050.

 Xác định cổng kết nối trên tủ đĩa HP MSA 2050:


 Tủ đĩa HP MSA 2050 cũng được trang bị các cổng kết nối với các giao thức khác
nhau. Việc kết nối với máy chủ HP ProLiant DL380 Gen10 sẽ sử dụng cổng iSCSI.

 Cấu hình máy chủ HP ProLiant DL380 Gen10:

43
 Sau khi xác định cổng kết nối iSCSI trên máy chủ HP ProLiant DL380 Gen10, cần
cấu hình máy chủ để kết nối với tủ đĩa HP MSA 2050. Bước đầu tiên là cài đặt phần
mềm iSCSI Initiator trên máy chủ. Sau khi cài đặt xong, cần cấu hình các thông số
như địa chỉ IP của tủ đĩa HP MSA 2050 và thông số kết nối iSCSI.

 Cấu hình tủ đĩa HP MSA 2050:


 Sau khi cấu hình máy chủ HP ProLiant DL 380 Gen10, cần cấu hình tủ đĩa HP MSA
2050 để cho phép máy chủ kết nối được với nó qua giao thức iSCSI.
 Đầu tiên, cần kết nối tủ đĩa HP MSA 2050 với một mạng Ethernet và đặt địa chỉ IP
cho nó. Sau đó, cần tạo ra một iSCSI target trên tủ đĩa để cho phép máy chủ kết nối
tới. Bước này yêu cầu các thông số kết nối iSCSI được cài đặt chính xác để đảm bảo
kết nối đúng và đạt hiệu suất cao nhất.

 Kiểm tra kết nối:


 Sau khi đã cấu hình xong cả máy chủ HP ProLiant DL380 Gen10 và tủ đĩa HP MSA
2050, cần kiểm tra kết nối iSCSI để đảm bảo máy chủ có thể truy cập và sử dụng tủ
đĩa. Có thể sử dụng các công cụ kiểm tra kết nối iSCSI như Microsoft iSCSI Initiator
hoặc iSCSIadm để kiểm tra kết nối.

c. Kết luận
Kết nối máy chủ HP ProLiant DL380 Gen10 với tủ đĩa HP MSA 2050 là một quá trình
quan trọng và cần được thực hiện chính xác để đảm bảo hiệu suất cao và hoạt động liên
tục 24/24 của hệ thống. Quá trình này đòi hỏi các thông số kết nối được cấu hình chính
xác và kiểm tra kết nối để đảm bảo tính ổn định và hiệu quả của hệ thống. Nếu thực hiện
đúng cách, kết nối máy chủ HP ProLiant DL380 Gen10 với tủ đĩa HP MSA 2050 sẽ giúp
nâng cao hiệu suất và tính khả dụng của hệ thống máy chủ.

44
3.5 Tìm hiểu về ảo hóa

a. Khái niệm
Ảo hóa là một công nghệ giúp tạo ra các môi trường ảo (virtual environments) trên một hệ
thống vật lý, cho phép nhiều hệ điều hành hoặc ứng dụng chạy trên cùng một hệ thống vật
lý, tạo ra sự phân chia và tách biệt giữa các tài nguyên phần cứng và phần mềm. Các môi
trường ảo này cung cấp cho người dùng một trải nghiệm như đang sử dụng một hệ thống
riêng biệt, mặc dù thực tế chúng đang chạy trên cùng một máy chủ.

b.Các loại ảo hóa


-Ảo hóa máy chủ (Server virtualization):

 Đây là loại ảo hóa phổ biến nhất, được sử dụng để tạo ra các máy chủ ảo trên một
máy chủ vật lý. Các máy chủ ảo này có thể được quản lý, cấu hình và điều khiển như
các máy chủ vật lý thông thường. Ảo hóa máy chủ giúp tối ưu hóa sử dụng tài nguyên
của máy chủ, giảm chi phí đầu tư và tăng tính linh hoạt.

-Ảo hóa máy tính để bàn (Desktop virtualization):

 Ảo hóa máy tính để bàn cho phép tạo ra các môi trường máy tính ảo trên một máy
tính vật lý, cho phép người dùng truy cập vào các ứng dụng và tài nguyên máy tính từ
xa, trên nhiều thiết bị khác nhau. Điều này giúp cho việc quản lý và bảo trì máy tính
trở nên đơn giản hơn và tăng tính linh hoạt trong việc truy cập tài nguyên.

-Ảo hóa ứng dụng (Application virtualization):

 Ảo hóa ứng dụng cho phép tạo ra các môi trường ảo để chạy ứng dụng mà không cần
phải cài đặt chúng trên máy tính vật lý. Điều này giúp cho việc quản lý và triển khai
ứng dụng trở nên dễ dàng hơn, đồng thời tăng tính linh hoạt và đảm bảo an toàn cho
hệ thống.

45
-Ảo hóa mạng (Network virtualization):

 Ảo hóa mạng cho phép tạo ra các môi trường ảo để tạo ra các mạng ảo trên một mạng
vật lý. Các mạng ảo này có thể được quản lý và cấu hình riêng biệt, giúp cho việc
quản lý và triển khai mạng trở nên dễ dàng và linh hoạt hơn. Ngoài ra, ảo hóa mạng
cũng giúp tăng tính an toàn và bảo mật cho hệ thống.

c. Các công nghệ ảo hóa phổ biến hiện nay


 VirtualBox: là một phần mềm ảo hóa miễn phí và mã nguồn mở được phát triển bởi
Oracle. Nó cho phép người dùng tạo các máy ảo trên hệ thống của họ và chạy các hệ
điều hành khác nhau trên cùng một máy tính. VirtualBox có khả năng hỗ trợ nhiều
loại hệ điều hành như Windows, Linux, Mac OS X, Solaris và các phiên bản khác của
Unix.

 VMware: là một công ty hàng đầu trong lĩnh vực ảo hóa. Công nghệ ảo hóa của
VMware được phát triển để giúp người dùng chạy nhiều hệ điều hành trên một máy
tính. VMware có nhiều sản phẩm như VMware Workstation, VMware Fusion,
VMware ESXi, VMware vSphere, VMware Horizon View, VMware NSX, VMware
Cloud Foundation,...

 Hyper-V: là một công nghệ ảo hóa được phát triển bởi Microsoft và là một phần của
Windows Server và Windows 10. Hyper-V cho phép người dùng tạo các máy ảo trên
máy chủ của họ và chạy các hệ điều hành khác nhau trên cùng một máy tính.

 KVM (Kernel-based Virtual Machine): là một công nghệ ảo hóa mã nguồn mở được
tích hợp vào nhân Linux. KVM cho phép người dùng tạo các máy ảo trên hệ thống
của họ và chạy các hệ điều hành khác nhau trên cùng một máy tính.

46
 Xen: là một công nghệ ảo hóa mã nguồn mở được phát triển bởi Xen Project. Xen
được tích hợp vào hệ thống của người dùng và cho phép tạo các máy ảo trên cùng một
máy tính. Xen hỗ trợ nhiều loại hệ điều hành như Linux, Windows và các phiên bản
khác của Unix.

d. Lợi ích của việc sử dụng ảo hóa


 Tiết kiệm chi phí:
 Ảo hóa giúp tiết kiệm chi phí về phần cứng, bởi vì một máy chủ ảo có thể chạy nhiều
máy ảo.
 Ngoài ra, việc sử dụng máy ảo còn giảm thiểu chi phí bảo trì, bảo dưỡng và nâng cấp
hệ thống.
 Tăng tính linh hoạt và sẵn sàng của hệ thống:
 Với ảo hóa, việc di chuyển và sao chép các máy ảo trở nên dễ dàng hơn, từ đó giúp
cho việc triển khai ứng dụng nhanh chóng hơn.
 Khi sử dụng máy ảo, ta có thể dễ dàng thay đổi cấu hình của máy ảo mà không cần
phải tắt máy hay phải sửa đổi phần cứng.
 Tối ưu hóa sử dụng tài nguyên:
 Với ảo hóa, ta có thể sử dụng tài nguyên phần cứng một cách hiệu quả hơn bằng cách
chia sẻ tài nguyên giữa các máy ảo.
 Ảo hóa cũng giúp tránh tình trạng máy tính xảy ra tình trạng sử dụng tài nguyên
không hiệu quả vì chạy nhiều ứng dụng cùng lúc.
 Dễ dàng quản lý hệ thống:
 Ảo hóa giúp đơn giản hóa việc quản lý hệ thống, do ta chỉ cần quản lý một hệ thống
vật lý duy nhất và các máy ảo được tạo ra từ đó.
 Ngoài ra, việc cấu hình và bảo mật các máy ảo cũng trở nên dễ dàng hơn vì ta không
cần phải lo lắng về các ứng dụng và dữ liệu khác trong hệ thống.

47
e. Khó khăn và giải pháp khi triển khai ảo hóa
 Khó khăn khi triển khai ảo hóa:
-Độ tin cậy của hệ thống:

 Khả năng một máy chủ ảo bị lỗi có thể ảnh hưởng đến toàn bộ hệ thống ảo hóa.
 Sự cố phần cứng như đĩa cứng, bộ nhớ RAM, nguồn điện hoặc mạng có thể gây ra sự
cố cho máy chủ ảo và toàn bộ hệ thống.
 Sự cố phần mềm như lỗi phần mềm, lỗi hệ điều hành và lỗi ứng dụng có thể gây ra sự
cố cho máy chủ ảo và toàn bộ hệ thống.

-Hiệu suất và tốc độ của hệ thống:

 Khi sử dụng ảo hóa, máy chủ vật lý phải chia sẻ tài nguyên với nhiều máy chủ ảo
khác nhau, dẫn đến hiệu suất và tốc độ của hệ thống giảm.
 Sự cạnh tranh tài nguyên giữa các máy chủ ảo có thể dẫn đến tình trạng một số máy
chủ ảo chậm hơn hoặc bị gián đoạn khi các máy chủ ảo khác sử dụng tài nguyên
nhiều hơn.

-Bảo mật và an ninh hệ thống:

 Sự ảo hóa có thể dẫn đến nhiều điểm mục tiêu cho các tấn công mạng như tấn công từ
bên trong máy chủ ảo, tấn công từ bên ngoài máy chủ ảo và tấn công từ một máy chủ
ảo sang một máy chủ ảo khác.
 Các máy chủ ảo chia sẻ tài nguyên phần cứng và phần mềm với nhau, do đó, việc
kiểm soát quyền truy cập và quản lý an ninh trở nên phức tạp.

 Giải pháp cho các khó khăn khi triển khai ảo hóa:

Độ tin cậy của hệ thống:

48
 Sử dụng phần mềm ảo hóa có tính năng redundancy (dự phòng) để đảm bảo nếu một
máy chủ bị lỗi thì các máy chủ khác sẽ tự động đảm nhiệm các tác vụ của máy chủ bị
lỗi.
 Sử dụng các phần mềm giám sát hệ thống để theo dõi tình trạng hoạt động của hệ
thống và phát hiện sớm các sự cố để có biện pháp xử lý kịp thời.

Hiệu suất và tốc độ của hệ thống:

 Tối ưu hóa cấu hình phần cứng cho phù hợp với nhu cầu sử dụng của hệ thống ảo
hóa.
 Thực hiện phân vùng tài nguyên (Resource Pooling) để đảm bảo các máy ảo không
ảnh hưởng đến nhau và sử dụng tài nguyên một cách hiệu quả.
 Cân bằng tải giữa các máy chủ ảo để đảm bảo sự ổn định và hiệu quả của hệ thống.

Bảo mật và an ninh hệ thống:

 Sử dụng các phần mềm bảo mật và cập nhật các bản vá an ninh thường xuyên để đảm
bảo an toàn cho hệ thống ảo hóa.
 Sử dụng các giải pháp bảo mật mạng để ngăn chặn các cuộc tấn công từ bên ngoài và
giám sát các hoạt động trong mạng ảo.
 Thực hiện sao lưu và khôi phục dữ liệu thường xuyên để đảm bảo tính toàn vẹn của
dữ liệu khi có sự cố xảy ra.

3.6 Giới thiệu chung về hệ thống lưu trữ, microservice và monolithic

Trong thời đại công nghệ số hiện nay, hệ thống lưu trữ và mô hình Microservice và
Monolithic đang trở thành những khái niệm quan trọng và được sử dụng rộng rãi trong
lĩnh vực Công nghệ thông tin. Trong báo cáo này, tôi sẽ giới thiệu chung về những khái
niệm này để đưa ra cái nhìn tổng quan và giúp độc giả hiểu rõ hơn về chúng.

49
a) Hệ thống lưu trữ

Hệ thống lưu trữ là một phần quan trọng của hệ thống máy tính, chịu trách nhiệm lưu trữ
và quản lý các dữ liệu của hệ thống. Có nhiều loại hệ thống lưu trữ như: hệ thống tập tin,
hệ thống cơ sở dữ liệu quan hệ, hệ thống lưu trữ đối tượng, hệ thống lưu trữ dữ liệu đám
mây. Mỗi loại hệ thống lưu trữ có ưu điểm và hạn chế riêng, do đó phải dựa trên yêu cầu
cụ thể của hệ thống mà lựa chọn hệ thống lưu trữ phù hợp.

Hệ thống lưu trữ đóng vai trò quan trọng trong việc quản lý dữ liệu của một tổ chức. Để
đáp ứng nhu cầu lưu trữ ngày càng lớn, các hệ thống lưu trữ hiện đại thường sử dụng các
công nghệ ảo hóa như SAN (Storage Area Network), NAS (Network Attached Storage) và
Object Storage.

SAN là một mạng lưu trữ chung được sử dụng để kết nối các thiết bị lưu trữ vật lý như ổ
đĩa và băng từ với các máy chủ và thiết bị khác trong một mạng. SAN cung cấp khả năng
lưu trữ tập trung cho tất cả các thiết bị trong hệ thống và quản lý dữ liệu với hiệu suất
cao.

NAS là một giải pháp lưu trữ mạng thường được sử dụng cho các ứng dụng lưu trữ tệp.
NAS được kết nối với mạng LAN hoặc WAN và cung cấp dịch vụ lưu trữ đơn giản và dễ
sử dụng cho người dùng cuối.

Object Storage là một dạng lưu trữ đám mây được sử dụng để lưu trữ và quản lý các đối
tượng như hình ảnh, video và tệp văn bản. Object Storage cho phép lưu trữ dữ liệu theo
cách phi cấu trúc, cung cấp hiệu quả cao hơn và khả năng mở rộng tốt hơn so với các hệ
thống lưu trữ truyền thống.

b) Hệ thống lưu trữ trong kiến trúc monolithic

Kiến trúc monolithic là một kiểu thiết kế phần mềm truyền thống, trong đó toàn bộ ứng
dụng được đóng gói vào một tệp nhị phân duy nhất và chạy trên một máy chủ. Hệ thống

50
lưu trữ trong kiến trúc monolithic thường được triển khai bằng cách sử dụng cơ sở dữ liệu
quan hệ (Relational Database Management System - RDBMS), ví dụ như MySQL hoặc
PostgreSQL. Các bảng trong cơ sở dữ liệu được thiết kế để phù hợp với các tính năng và
chức năng của ứng dụng. Khi có nhiều phiên bản ứng dụng đang chạy trên nhiều máy
chủ, chúng có thể chia sẻ cùng một cơ sở dữ liệu.

c) Hệ thống lưu trữ trong kiến trúc microservice

Kiến trúc microservice là một kiểu thiết kế phần mềm phổ biến trong đó ứng dụng được
chia thành các dịch vụ nhỏ hơn và độc lập nhau. Mỗi dịch vụ có thể được đóng gói và
triển khai một cách độc lập, cho phép chúng có thể được phát triển và cập nhật một cách
độc lập. Hệ thống lưu trữ trong kiến trúc microservice thường được triển khai bằng cách
sử dụng các cơ sở dữ liệu phi quan hệ (NoSQL databases), ví dụ như MongoDB hoặc
Cassandra. Các cơ sở dữ liệu này được thiết kế để lưu trữ dữ liệu phân tán, giúp cho các
dịch vụ có thể chia sẻ và truy cập dữ liệu dễ dàng.

d). Sự khác biệt giữa hai kiểu kiến trúc


Kiến trúc monolithic và kiến trúc microservice có nhiều sự khác biệt về cách hệ thống lưu
trữ được tích hợp vào hệ thống phần mềm.

Trong kiến trúc monolithic, toàn bộ ứng dụng được đóng gói vào một tệp nhị phân duy
nhất và chạy trên một máy chủ. Do đó, cơ sở dữ liệu được sử dụng là cơ sở dữ liệu quan
hệ (RDBMS) để đảm bảo tính nhất quán và đồng bộ giữa các thành phần của ứng dụng.
Tuy nhiên, điều này đồng nghĩa với việc khi có sự thay đổi trong cấu trúc của ứng dụng,
cả cơ sở dữ liệu và ứng dụng đều phải được thay đổi và triển khai lại. Điều này dẫn đến
việc triển khai ứng dụng trở nên phức tạp hơn và thường yêu cầu nhiều thời gian.

Trong khi đó, trong kiến trúc microservice, ứng dụng được chia thành các dịch vụ độc lập
nhau, mỗi dịch vụ sử dụng một cơ sở dữ liệu riêng biệt. Cơ sở dữ liệu thường là cơ sở dữ
liệu phi quan hệ (NoSQL) để đáp ứng các yêu cầu về khả năng mở rộng và tính sẵn sàng

51
cao. Việc sử dụng các cơ sở dữ liệu này cho phép các dịch vụ có thể được phát triển và
triển khai một cách độc lập và không phụ thuộc vào các thành phần khác của ứng dụng.
Tuy nhiên, điều này có thể dẫn đến sự mất tính nhất quán giữa các dịch vụ, và đôi khi cần
có các cơ chế để đồng bộ dữ liệu giữa các dịch vụ.

e)Kết luận
Hệ thống lưu trữ là một phần quan trọng của hệ thống phần mềm, và cách tích hợp hệ
thống lưu trữ vào hệ thống phần mềm phụ thuộc vào kiểu kiến trúc phần mềm được sử
dụng. Kiến trúc monolithic và kiến trúc microservice có cách tiếp cận khác nhau về hệ
thống lưu trữ, và tùy vào yêu cầu của ứng dụng mà một trong hai kiểu kiến trúc có thể
được lựa chọn để triển khai.

3.7 Tìm hiểu về ESP8266 NodeMCU và lập trình đơn giản với Arduino IDE

3.7.1 Giới thiệu về ESP8266 NodeMCU.


ESP8266 NodeMCU là một board phát triển dựa trên module Wi-Fi ESP8266 của
Espressif Systems, được thiết kế với kích thước nhỏ gọn và tích hợp sẵn mô-đun Wi-Fi.
ESP8266 NodeMCU hỗ trợ giao tiếp chuẩn UART, SPI, I2C và GPIO. Với giá cả phải
chăng và khả năng kết nối mạng không dây, NodeMCU rất phù hợp cho các ứng dụng
IoT.

3.7.2 Cài đặt Arduino IDE.


Arduino IDE là môi trường lập trình được sử dụng để viết mã cho ESP8266
NodeMCU. Chúng ta có thể tải Arduino IDE từ trang chủ của Arduino và cài đặt trên máy
tính của mình.

52
3.7.3 Cài đặt thư viện ESP8266 trong Arduino IDE.
Để lập trình cho ESP8266 NodeMCU, chúng ta cần cài đặt thư viện ESP8266
trong Arduino IDE. Để cài đặt, bạn có thể làm theo các bước sau:

 Mở Arduino IDE và vào Preferences.


 Trong mục Additional Boards Manager URLs, thêm đường dẫn sau:
 http://arduino.esp8266.com/stable/package_esp8266com_index.json
 Vào Boards Manager trong mục Tools -> Boards -> Boards Manager.
 Tìm và cài đặt ESP8266 package.

3.7.4 Lập trình đơn giản với ESP8266 NodeMCU.

a. Kết nối ESP8266 NodeMCU với máy tính


Trước tiên, chúng ta cần kết nối ESP8266 NodeMCU với máy tính qua cổng USB. Sau
đó, chọn Board và Port phù hợp với ESP8266 NodeMCU trong mục Tools của Arduino
IDE.

b. Viết chương trình


Chương trình sẽ bao gồm hai phần chính:

 Phần khởi tạo: thiết lập các biến và khởi tạo kết nối Wi-Fi.
 Phần chính: kiểm tra trạng thái đèn LED và điều khiển bật/tắt đèn qua mạng Wi-Fi.
-Khai báo thư viện

 Đầu tiên, chương trình khai báo các thư viện cần thiết như ESP8266WiFi,
WiFiClient, ESP8266WebServer và ESP8266mDNS để sử dụng trong chương trình.
-Khởi tạo đối tượng

 Sau đó, chương trình khởi tạo các đối tượng cần thiết, bao gồm:

 ESP8266WebServer: để tạo một web server trên NodeMCU.


53
 String webPage: để lưu trang web HTML đơn giản để điều khiển hai đèn LED.
 const char* ssid và const char* password: để lưu tên và mật khẩu của mạng WiFi.
-Thiết lập chân I/O

 Tiếp theo, chương trình thiết lập hai chân đầu ra cho hai đèn LED.

-Thiết lập kết nối WiFi

 Sau khi khởi tạo đối tượng, chương trình tiến hành kết nối với mạng WiFi thông qua
tên và mật khẩu mà ta đã khai báo trước đó. Trong quá trình kết nối, chương trình sử
dụng hàm delay() để đợi đến khi kết nối được thiết lập.

-Khởi tạo MDNS responder

 Trong trường hợp mạng không có DNS, chương trình sử dụng MDNS responder để
giúp các thiết bị kết nối với NodeMCU thông qua tên miền (ví dụ: esp8266.local).

-Thiết lập các hàm xử lý yêu cầu

 Sau khi thiết lập xong kết nối và các thiết bị, chương trình tiếp tục thiết lập các hàm
xử lý yêu cầu HTTP từ trình duyệt. Cụ thể, chương trình sử dụng hàm server.on() để
đăng ký các đường dẫn và hàm xử lý tương ứng. Ví dụ: server.on("/socket1On", {...})
để đăng ký đường dẫn "/socket1On" và hàm xử lý khi yêu cầu đường dẫn này.

-Bắt đầu web server

 Cuối cùng, chương trình khởi động web server thông qua hàm server.begin() và bắt
đầu chạy vòng lặp chính để xử lý các yêu cầu từ trình duyệt thông qua hàm
server.handleClient().

54
3.8 Tìm hiểu về các cơ chế chấp hành
Trong thế giới Internet of Things (IoT), việc kết nối và điều khiển các thiết bị
thông qua mạng internet là một yêu cầu thiết yếu. Trong phần báo cáo này, chúng ta sẽ
tìm hiểu về các cơ cấu chấp hành như LED 7 đoạn, LCD và Rơ le và cách sử dụng chúng
với ESP8266 NodeMCU. Ngoài ra, chúng ta sẽ lập trình và thực hành với các cơ cấu chấp
hành đơn giản.

3.8.1 Các cơ cấu chấp hành.


a. LED 7 đoạn

LED 7 đoạn là một loại màn hình hiển thị đơn giản được sử dụng để hiển thị các
ký tự và số. Nó bao gồm 7 đèn LED đơn lẻ được sắp xếp theo một cấu trúc nhất định để
hiển thị các ký tự và số khác nhau. Để điều khiển LED 7 đoạn, chúng ta có thể sử dụng
các cổng GPIO của ESP8266 NodeMCU và các chân đất và điện áp.

b. LCD

Kết nối ESP8266 với màn LCD

LCD (Liquid Crystal Display) là một loại màn hình hiển thị được sử dụng để hiển
thị các ký tự, số và đồ họa. Nó có thể được điều khiển bằng các tín hiệu điện áp để điều

55
khiển các pixel của màn hình. Để sử dụng LCD với ESP8266 NodeMCU, chúng ta có thể
sử dụng các chân GPIO để điều khiển các tín hiệu điện áp cần thiết.

c . Rơ le

Rơ le là một loại công tắc điện được sử dụng để điều khiển các thiết bị điện. Nó
hoạt động bằng cách sử dụng một cộng hưởng từ để điều khiển một thiết bị điện khác. Để
điều khiển một rơ le, chúng ta có thể sử dụng các chân GPIO của ESP8266 NodeMCU và
một nguồn điện ngoài để cung cấp cho rơ le.

3.8.2 Lập trình và thực hành

Để lập trình và thực hành với các cơ cấu chấp hành, chúng ta có thể sử dụng ngôn ngữ lập
trình Arduino và môi trường phát triển Arduino IDE.

a.Lập trình LED 7 đoạn

Đầu tiên, chúng ta cần khai báo các chân GPIO được sử dụng để điều khiển LED 7
đoạn. Sau đó, chúng ta có thể sử dụng các hàm có sẵn trong thư viện Arduino để điều
khiển LED 7 đoạn. Ví dụ, để hiển thị số 0 trên LED 7 đoạn, chúng ta có thể sử dụng hàm
digitalWrite để gửi tín hiệu điện áp đến các chân GPIO tương ứng để kích hoạt các đèn
LED cần thiết.

b.Lập trình LCD

Tương tự, chúng ta cũng cần khai báo các chân GPIO được sử dụng để điều khiển
LCD và sử dụng các hàm có sẵn trong thư viện Arduino để hiển thị các ký tự và số trên
LCD. Ví dụ, để hiển thị dòng chữ "Hello, world!" trên LCD, chúng ta có thể sử dụng hàm
lcd.print() để gửi chuỗi ký tự đến LCD.

56
c.Lập trình rơ le

Để điều khiển một rơ le, chúng ta cần sử dụng một chân GPIO để điều khiển cộng
hưởng từ và một nguồn điện ngoài để cung cấp cho rơ le. Chúng ta có thể sử dụng hàm
digitalWrite để gửi tín hiệu điện áp đến chân GPIO để điều khiển rơ le.

3.9 Tìm hiểu về Timer và lập trình ngắt Timer với ESP8266 NodeMCU.

3.9.1 Giới thiệu


Trong lĩnh vực lập trình nhúng, timer là một thành phần quan trọng để xử lý các tác vụ
thời gian. Với ESP8266 NodeMCU, một board phổ biến được sử dụng trong các ứng
dụng IoT, cũng có tính năng timer tích hợp sẵn. Trong báo cáo này, chúng ta sẽ tìm hiểu
về timer và lập trình ngắt timer với ESP8266 NodeMCU.

3.9.2 Timer
Khái niệm về Timer:

Trong lập trình, Timer được sử dụng để đếm số lần xảy ra của một sự kiện hoặc để đếm
thời gian. Điều này rất hữu ích trong các ứng dụng IoT, nơi thời gian là yếu tố quan trọng.

Timer của ESP8266 NodeMCU:

ESP8266 NodeMCU có bốn bộ định thời (Timer) có thể sử dụng cho các mục đích khác
nhau. Các Timer này có độ chính xác cao và được tính bằng microsecond. Bốn Timer trên
ESP8266 NodeMCU được đánh số từ 0 đến 3.

3.9.3 Lập trình timer trong ESP8266 NODEMCU


Để lập trình timer trong ESP8266 NodeMCU, chúng ta sử dụng thư viện TimerOne. Thư
viện này cho phép chúng ta tạo và quản lý các ngắt timer trên các timer tích hợp của
board. Sau khi cài đặt thư viện TimerOne, chúng ta có thể sử dụng các hàm để đặt thời
gian và tần số cho timer, cũng như gán các hàm ngắt để thực hiện các tác vụ tương ứng.
57
3.9.4 Lập trình ngắt timer

Ngắt Timer:

Ngắt Timer là một tính năng quan trọng của Timer. Khi Timer đếm đến một giá trị xác
định, nó sẽ tạo ra một ngắt Timer. Ngắt Timer cho phép chúng ta thực hiện các hành động
khác nhau tùy thuộc vào mục đích của ứng dụng.

Lập trình ngắt Timer trên ESP8266 NodeMCU:

Chúng ta có thể sử dụng hàm attachInterrupt() để đặt một hàm ngắt Timer cho một Timer
cụ thể. Hàm này sẽ thực hiện các hành động tương ứng với ngắt Timer.

Ví dụ: Chúng ta có thể lập trình để LED trên NodeMCU nhấp nháy mỗi 1 giây bằng cách
sử dụng một timer và hàm xử lý ngắt như sau:

58
3.9.5 Ứng dụng của Timer và lập trình ngắt Timer với ESP8266 NodeMCU

Việc sử dụng Timer và lập trình ngắt Timer với ESP8266 NodeMCU rất hữu ích trong
việc xây dựng các ứng dụng IoT. Các ứng dụng có thể được phát triển để hoạt động độc
lập hoặc kết hợp với các thiết bị khác, cung cấp các giải pháp đáp ứng nhanh và linh hoạt
trong quản lý các hoạt động tự động.

Một số ứng dụng của Timer và lập trình ngắt Timer với ESP8266 NodeMCU bao gồm:

 Điều khiển đèn: Timer có thể được sử dụng để bật và tắt đèn hoặc thay đổi màu sắc
của đèn trong một khoảng thời gian nhất định. Ngắt Timer có thể được sử dụng để
báo cho hệ thống khi nào đèn cần được thay đổi hoặc bật / tắt.

 Quản lý nhiệt độ: Timer có thể được sử dụng để theo dõi nhiệt độ trong phòng và bật /
tắt máy điều hòa hoặc bật các thiết bị khác để giảm nhiệt độ trong một khoảng thời
gian nhất định.

 Kiểm soát độ ẩm: Timer có thể được sử dụng để bật / tắt máy làm mát hoặc bật các
thiết bị khác để kiểm soát độ ẩm trong một khoảng thời gian nhất định.

 Kiểm soát thời gian ăn uống: Timer có thể được sử dụng để đặt giờ cho việc ăn uống
hoặc uống nước đều đặn trong một khoảng thời gian nhất định.

 Cảnh báo sự cố: Ngắt Timer có thể được sử dụng để báo cho hệ thống khi có sự cố
xảy ra, chẳng hạn như khi nhiệt độ hoặc độ ẩm quá cao hoặc quá thấp.

59
3.10 Thiết kế hệ thống giám sát nhiệt độ và ẩm bằng ESP8266 NODEMCU +
BLYNK + DHT11

3.10.1.Cơ sở lý thuyết về module wifi ESP8266


3.10.1.1.Giới thiệu về ESP8266
 Khái niệm:Module ESP8266 là module wifi được đánh giá rất cao cho các ứng dụng liên
quan đến Internet và Wifi cũng như các ứng dụng truyền nhận sử dụng thay thế cho các
module RF khác với khoảng cách truyền lên tới 100 mét( Môi trường không có vật cản).
Trên 400m với anten và router thích hợp.
 66 cung cấp một giải pháp kết nối mạng Wi-Fi hoàn chỉnh và khép kín, cho phép nó
có thể lưu trữ các ứng dụng hoặc để giảm tải tất cả các chức năng kết nối mạng Wi-Fi từ một
bộ xử lý ứng dụng.
 ủ các ứng dụng hay khi nó chỉ là bộ vi xử lý ứng dụng có trong
thiết bị, nó có thể khởi động trực tiếp từ một flash ngoài. Nó có tích hợp bộ nhớ cache để cải
thiện hiệu suất của hệ thống trong các ứng dụng này, và để giảm thiểu các yêu cầu bộ nhớ.
 ục vụ như một bộ chuyển đổi Wi-Fi, truy cập internet không dây có thể
được thêm vào bất kỳ thiết kế vi điều khiển nào dựa trên kết nối đơn giản qua giao diện
UART hoặc giao diện cầu CPU AHB.
 ả năng lưu trữ và xử lý mạnh mẽ cho phép nó được tích hợp với các bộ cảm biến, vi
điều khiển và các thiết bị ứng dụng cụ thể khác thông qua GPIOs với chi phí tối thiểu và một
PCB tối thiểu. Với mức độ tích hợp cao trên chip, trong đó bao gồm các anten chuyển đổi
balun, bộ chuyển đổi quản lý điện năng…

3.10.1.2.Cấu tạo của NODEMCU ESP8266


Module ESP8266 có các chân dùng để cấp nguồn và thực hiện kết nối. Chức năng của các chân
như sau:

+ VCC: 3.3V lên đến 300Ma


+ GND: Chân Nối đất .
+ Tx: Chân Tx của giao thức UART, kết nối đến chân Rx của vi điều khiển.
+ Rx: Chân Rx của giao thức UART, kết nối đến chân Tx của vi điều khiển.
+ RST: chân reset, kéo xuống mass để reset.

60
+ 10 chân GPIO từ D0 – D8, có chức năng PWM, IIC, giao tiếp SPI, 1-Wire và ADC trên chân
A0
+ Kết nối mạng wifi (có thể là sử dụng như điểm truy cập và/hoặc trạm máy chủ lưu trữ một, máy
chủ web), kết nối internet để lấy hoặc tải lên dữ liệu.

Hình 1. Hình ảnh sơ đồ chân kết nối ESP8266

3.10.1.3.Tính năng của NODEMCU ESP8266


-Hỗ trợ chuẩn 802.11 b/g/n.

-Wi-Fi 2.4 GHz, hỗ trợ WPA/WPA2.

-Chuẩn điện áp hoạt động: 3.3V.

-Chuẩn giao tiếp nối tiếp UART với tốc độ Baud lên đến115200

-Tích hợp ngăn xếp giao thứcTCP / IP.

-Tích hợp chuyển đổi TR, balun, LNA, bộ khuếch đại công suất và phù hợp với mạng.

-Tích hợp PLL, bộ quản lý, và các đơn vị quản lý điện năng.

-Công suất đầu ra +19.5dBm trong chế độ 802.11b.

61
-Tích hợp cảm biến nhiệt độ.

-Hỗ trợ nhiều loại anten.

-Wake up và truyền các gói dữ liệu trong <2ms.

3.10.1.4. Đặc điểm cảm biến DHT11


-DHT11 là cảm biến nhiệt độ và độ ẩm. Nó ra đời sau và được sử dụng thay thế cho dòng SHT1x
ở những nơi không cần độ chính xác cao về nhiệt độ và độ ẩm.

-DHT11 có cấu tạo 4 chân như hình. Nó sử dụng giao tiếp số theo chuẩn 1 dây.

-Thông số kỹ thuật:

+ Do độ ẩm: 20%-95%

+ Nhiệt độ: 0-50ºC

+ Sai số độ ẩm ±5%

+ Sai số nhiệt độ: ±2ºC

-Sơ đồ kết nối vi xử lý:

62
Hình 2. Sơ đồ nguyên lý DTH11 kết nối MCU

-Nguyên lý hoạt động:

Để có thể giao tiếp với DHT11 theo chuẩn 1 chân vi xử lý thực hiện theo 2 bước:

oGửi tin hiệu muốn đo (Start) tới DHT11, sau đó DHT11 xác nhận lại.

oKhi đã giao tiếp được với DHT11, Cảm biến sẽ gửi lại 5 byte dữ liệu và nhiệt độ đo được.

- Bước 1: gửi tín hiệu Start

o MCU thiết lập chân DATA là Output, kéo chân DATA xuống 0 trong khoảng thời gian >18ms.
Khi đó DHT11 sẽ hiểu MCU muốn đo giá trị nhiệt độ và độ ẩm.

oMCU đưa chân DATA lên 1, sau đó thiết lập lại là chân đầu vào.

oSau khoảng 20-40us, DHT11 sẽ kéo chân DATA xuống thấp. Nếu >40us mà chân DATA ko
được kéo xuống thấp nghĩa là ko giao tiếp được với DHT11.

oChân DATA sẽ ở mức thấp 80us sau đó nó được DHT11 kéo nên cao trong 80us. Bằng việc
giám sát chân DATA, MCU có thể biết được có giao tiếp được với DHT11 ko. Nếu tín hiệu đo
được DHT11 lên cao, khi đó hoàn thiện quá trình giao tiếp của MCU với DHT.

- Bước 2: đọc giá trị trên DHT11


63
o DHT11 sẽ trả giá trị nhiệt độ và độ ẩm về dưới dạng 5 byte. Trong đó: Byte 1: giá trị phần
nguyên của độ ẩm (RH%)

Byte 2: giá trị phần thập phân của độ ẩm (RH%) Byte 3: giá trị phần nguyên của nhiệt độ (TC)
Byte 4 : giá trị phần thập phân của nhiệt độ (TC)

Byte 5 : kiểm tra tổng.

-> Nếu Byte 5 = (8 bit) (Byte1 +Byte2 +Byte3 + Byte4) thì giá trị độ ẩm và nhiệt độ là chính xác,
nếu sai thì kết quả đo không có nghĩa.

Sau khi tín hiệu được đưa về 0, ta đợi chân DATA của MCU được DHT11 kéo lên

1. Nếu chân DATA là 1 trong khoảng 26-28 us thì là 0, còn nếu tồn tại 70us là 1. Do đó trong lập
trình ta bắt sườn lên của chân DATA, sau đó delay 50us. Nếu giá trị đo được là 0 thì ta đọc được
bit 0, nếu giá trị đo được là 1 thì giá trị đo được là

1. Cứ như thế ta đọc các bit tiếp theo.

3.10.1.5. Cơ sở lý thuyết về APP Blynk


Blynk là một nền tảng có ứng dụng iOS, Android cho phép điều khiển Arduino, Raspberry Pi,
ESP8266. Bạn có thể xây dựng ứng dụng điều khiển bằng cách kéo, thả các Widget.

Cách hoạt động

Blynk được thiết kế cho IoT, nó có thể điều khiển phần cứng từ xa, hiển thị dữ liệu cảm biến, lưu
trữ dữ liệu và có thể làm một vài điều khác khá thú vị. Blynk gồm 3 phần:

Blynk App: cho phép tạo các giao diện từ Widget có sẵn

Blynk Server: truyền tải thông tin giữa Smarthome và thiết bị. Blynk Server có thể là 1 đám mây
của Blynk hoặc có thể cài đặt trên máy cá nhân. Có thể cài đặt trên Raspberry Pi.

Blynk Libraries: thư viện cung cấp kết nối phần cứng đến server, xử lý các lệnh đến và đi.

64
Để bắt đầu Blynk cần cái gì?

1.Thiết bị

Thiết bị dùng các bộ kit phát triển như Arduino, Raspberry, ESP8266. Blynk hoạt động trên
Internet vì vậy các thiết bị

2.Smartphone

Ứng dụng Blynk có thể hoạt động trên iOS và Android. Có thể download từ trên điện thoại.

Thư viện Blynk cho Arduino: https://github.com/blynkkk/blynk- library/releases/latest

Trong Arduino IDE có thể thêm thư viện này từ Manager Libraries bằng cách tìm kiếm từ khóa
Blynk và cài đặt.

Blynk thực ra là một cái app trên điện thoại, cho phép người dùng có thể tạo ra giao diện và
điều khiển thiết bị theo ý thích của cá nhân. Mình lựa chọn Blynk vì một số lý do sau:

65
 Dễ sử dụng: Quá đơn giản, chỉ việc vào store, cài đặt, sau đó đăng ký tài khoản và mất không
quá 5 phút để làm quen.
 Đẹp và đầy đủ: Giao diện của Blynk quá tuyệt vời, sử dụng bằng cách kéo thả, bạn cần nút
bấm, kéo thả nút bấm, bạn cần đồ thị, kéo thả đồ thị, bạn cần LCD, kéo thả LCD, tóm lại là
bạn cần gì thì kéo thả cái đó.
 Không phải lập trình android hay ios: Nếu như không có kiên thức về làm app trên điện thoại
thì việc điều khiển thiết bị từ chính smartphone của mình quả là điều vô cùng khó khăn và
phức tạp. Nhờ blynk thì chúng ta có thể bỏ qua bước lập trình tạo app. Có thể thử nhanh
chóng và ứng dụng được dự án của mình vào thực tế.
 Thử nghiệm nhanh chóng, có thể điều khiển giám sát ở bất kỳ nơi nào có internet.

3.10.2. Phân tích thiết kế hệ thống


a.Mô tả hoạt động của hệ thống

Hệ thống hoạt động dựa trên sự kết hợp của Module Nodemcu Esp8266 và app Blynk trên
smartphone . Blynk sẽ lưu dữ liệu . App Blynk ngoài chức năng lưu trữ dữ liệu từ mạch đo gửi
lên còn có chức năng hiển thị giao diện điều khiển thiết bị, dữ liệu về nhiệt độ, độ ẩm ra giao diện
người dùng.

-Khi nhận được tín hiệu nhiệt độ báo về từ cảm biến thì bộ vi xử lý của hệ thống module
Nodemcu Wifi ESP8266 sẽ xử lý tín hiệu và sau đó truyền lên phần mềm blynk thông qua môi
trường ko dây wifi.

-Khi module wifi ESP8266 gửi tín hiệu lên App blynk người dùng có thể truy cập vào hệ thống
để điều khiển thiết bị trong gia đình và giám sát nhiệt độ, độ ẩm từ xa có mạng internet.

-Tại Blynk , thông qua mạng LAN (nội bộ) hoặc thông qua internet, nhà quản lý có thể :

+ Giám sát nhiệt độ liên tục tại các thời điểm trong ngày. Có thể xem nhiệt độ tại các điểm đo
trong cùng một thời điểm

+ Hiển thị nhiệt độ cao nhất và thơi điểm nhiệt độ cao nhất, thuận tiên cho việc theo dõi nhiệt độ
vượt ngưỡng

b. Yêu cầu của hệ thống

Module đo nhiệt độ
66
+Yêu cầu chức năng

-Kết nối với mạng internet qua wifi sử dụng module wifi8266.

-Module đo có chức năng đọc tham số như là nhiệt độ, độ ẩm từ cảm biến DHT11 sau đó gửi qua
module wifi ESP8266 để truyền lên webserver.

-Điều khiển cơ cấu chấp hành qua relay để điều khiển các thiết bị điện trong nhà như: quạt, bóng
đèn, điều hòa, tivi...

-Điều khiển thiết bị: Người dùng có thể điều khiển bật tắt thiết bị điện từ giao diện web phù hợp
với tất cả các thiết bị như PC, laptop, máy tính bảng, điện thoại thông qua internet.

+Yêu cầu phi chức năng

-Hoạt động ổn định, chính xác.

-Sản phẩm nhỏ gọn, dễ sử dụng và đẹp mắt.

-Hệ thống chạy ổn định.

3.10.3 Mô phỏng và xây dựng hệ thống thực nghiệm


a.Bài toán đặt ra

Trong quá trình hiện đại hóa , công nghiệp hóa ngày nay : Người tiêu dùng ưa thích sự
tiện lợi , phát triển nhất và đất nước ta người dân đang có xu hướng xây dựng các ngôi
nhà thông minh hướng tới 10-15 năm sau vẫn sẽ không lỗi thời khi áp dụng các kĩ thuật
điều khiển từ xa và tự động. Vì vậy , nhóm chúng em xin tìm hiểu về chủ đề : giám sát
nhiệt độ và điều khiển thiết bị từ xa . Yêu cầu của mô phỏng là : phải giám sát được nhiệt
độ , độ ẩm trong phòng và điều khiển được thiết bị thông qua mạng internet .

b.Thiết kế hệ thống

-Khối vi điều khiển có chức năng điều khiển mọi hoạt động của mạch. Đọc nhiệt độ, độ
ẩm từ cảm biến gửi ra module wifi để truyền lên App . Ngoài ra khối vi điều khiển còn có
nhiệm vụ đọc và giải mã lệnh nhận được từ giao diện trên Blynk người dùng để đưa ra
67
lệnh điều khiển tương ứng để điều chỉnh nhiệt độ. Kit wifi vai trò giao tiếp giữa mạch và
internet, vận chuyển dữ liệu giữa hai module Nodemcu và App blynk

-Khối cảm biến nhiệt độ sử dụng cảm biến DHT11 có khả năng đo cả 2 thông số nhiệt độ
và độ ẩm.

-Đối tượng điều khiển : sử dụng led red (có thể thay thế bằng thiết bị khác)

c.Cài đặt cấu hình giao diện trên Blynk:

68
=>Tạo ra ba biến để nhận tín hiệu từ modul và hiển thị ra giao diện .

* Kết nối app blink trên điện thoại với Modul ESP 8266:

69
70
d.Viết chương trình code cho Vi điều khiển NODEMCU

Để sử dụng được blynk thì cần phải tải thư viện của nó thông qua Arduino IDE Chọn
Sketch -> Include Library -> Manage Libraries, tìm kiếm blynk và install.

*Thêm Thư viện simple DHT11 cho Arduino1.8.5

71
*Chọn Tool -> Board rồi chọn Nodemcu 1.0

Code chương trình điều khiển thiết bị và giám sát nhiệt độ , độ ẩm :

72
73
74

You might also like