5.2.1 IoT
Nguyên lý lắp đặt Iot
- Chúng ta có thể vận dụng để lắp đặt cửa tự động ra vào tòa nhà khi có người đi ra/ vào:
Có nhiều loại cửa tự động tuy nhiên phổ biến nhất là cửa trượt tự động. Sử dụng rail trượt đóng mở tự động bằng mắt thần cảm biến; nút bấm, đầu đọc kiểm soát sử dụng cho cửa 1 cánh hoặc 2 cánh sử dụng Motor để đóng mở cửa tự động.
Trong các hãng cửa tự động hiện nay trên thị trường cửa trượt tự động TC-125B được đánh giá cao về chất lượng và khả năng hoạt động, vận hành.
- Chức năng nút bấm và mắt cảm biến mở cửa sử dụng cho những không gian hẹp hay các vị trí cửa gần với vị trí hay có người qua lại như mặt đường, hành lang cầu thang.v.v.v
- Cảm biến không tiếp xúc (đưa tay để mở cửa không chạm) sử dụng cho cửa tại các phòng mổ, cửa phòng sạch tại các nhà máy hay bệnh viện
- Cảm biến an toàn sử dụng cho cửa tự động khắc phục điểm đen giữa 2 cánh kính ~ 30cm khi có người đứng cửa sẽ không đóng lại hay còn được gọi là cảm biến chống kẹp . Khác với cảm biến dành cho cổng tự động cảm biến cửa tự động nhỏ hơn và được gắn vào hai bên cửa thường những cửa tự động sử dụng đầu đọc vân tay hoặc nút bấm sử dụng cảm biến an toàn để tăng mức độ an toàn trong quá trình sử dụng.
- Gắn camera theo dõi ở thang máy bộ phận bảo vệ sẽ tiếp nhận công việc theo dõi này
5.2.2 RFID
Hệ thống thẻ RFID được dùng làm thẻ cho nhân viên, khách khi được cấp tạm thời để ra/ vào cửa kiểm soát và ra/ vào tháng máy để thu thập dữ liệu và xác minh danh tính
Mô tả cụ thể: hệ thống thẻ đều được gắn chip RFID, sau đó đưa tới bộ phận kĩ thuật (lập trình). Tại đây chip RFID sẽ được nạp các thông tin cần thiết (họ tên, cmnd…). Chíp gắn trên thẻ sau khi nạp thông tin sẽ luôn ở trạng thái đã được kích hoạt; sau đó chuyển cho mọi người để sử dụng, đối với thẻ tạm thời lễ tân sẽ trực tiếp nhập thông tin theo khuôn mẫu được lập trình từ trước để đền đầy đủ thông tin của khác (thông tin này lễ tân có thể sửa đổi để dùng cho những lần sau)
Khi qua cửa sẽ thực hiện quét thẻ và máy tự động nhận dạng tài liệu theo các thông tin đã được lập trình trên chip RFID và xác nhận cho vào / ra. Đồng thời chip RFID gắn trên thẻ sẽ được bỏ kích hoạt (de-activated) tính năng chống trộm (EAS) và bạn có thể đi vào cửa
Bộ phận nhận thông tin thông tin sẽ tiếp nhận dữ liệu từ máy sau đó kiểm tra thông tin tài liệu trên cơ sở dữ liệu. Sau khi nhận dạng đúng danh tính của mọi người nó sẽ tự động bật hiển thị thời gian vào và ra sau đó (nếu nhận được thông tin lần 2)
Và thang máy cũng tương tự như vậy. Tuy nhiên các dữ liệu sẽ được chia cụ thể hơn để có thể phân các tầng theo chức năng sử dụng và giới hạn người dùng
Hiện nay việc ứng dụng IoT và RFID đang được phổ biến rộng rãi và gần như tốt ưu đạt hiệu quả vô cùng tốt. Chắc chắn đây là lựa chọn không thể thiếu khi lắp đặt các hệ thống. 5.2 Phần mềm quản lW 5.2.1 Code #include <bits/stdc++.h> #include <windows. h> using namespace std;
/ Lấy thời gian hiện tại, dạng: YYYY-MM-DD.HH:mm:ss string currentDateTime() {
time_t now =time(0); struct
tmtstruct; char buf[80];
tstruct = *gmtime(&now);
tstruct.tm_hour += 7;
strftime(buf, sizeof(buf), "%Y-%m-%d.%X", &tstruct);return buf; } class Nguoi { protected: string hoten; int soCMT; int id;
static inline vector<int> ids;
public:
string getHoTen () { return this->hoten; }
void setHoTen( string hoten) { this->hoten = hoten; } int
getsoCMT() { return this->soCMT; } void setsoCMT( int soCMT) { this->soCMT; }
int getId() { return this->id; }
void setId(int id) { this->id = id; }
// Kiểm tra ID
static bool checkID(int id) {
for (int i : ids) {
if (id == i) { return true; } } return false; } // Tạo ID
static int crea teID() {
int id = (r and() % (999 - 1 + 1)) + 1;
while (checkID(id) && ids.size() > 0) {
id = (r and() % (999 - 1 + 1)) + 1; } ids.push_ba ck(id); return id; } };
class NhanVien : public Nguoi {
public:
NhanVien() { string hoten;
int soCMT;
cout << "Nhap thong tin nhan vien\n"; cout << "Ho ten nhan vien: ";
cin >> hoten;
cout << "So CMT nhan vien: "; cin >> soCMT;
cin.ignore (1);
this->setHoTen(hoten);
this->setsoCMT(soCMT);
this->setId(Nguoi:: createID());
cout << "Id cua nhan vien la " << this->getId() << "\n"; }
};
class CuDan : public Nguoi
{ public: CuDan() {
string hoten; int
soCMT;
cout << "Nhap thong tin cu dan\n"; cout << "Ho ten cu dan: ";
cin >> hoten;
cout << "So CMT cu dan: "; cin >> soCMT; cin.ignore
();this->setHoTen(hoten);
this->setsoCMT(soCMT);
this->setId(Nguoi:: createID());
cout << "Id cua cu dan la " << this->getId () << "\n"; }
};
class QuanLy : public Nguoi
{ public: QuanLy() {
string hoten; int
soCMT;
cout << "Nhap thong tin quan ly\n";
cout << "Ho ten quan ly: "; cin >> hoten;
cout << "So CMT quan ly: "; cin >> soCMT;
cin.ignore ();
this->setHoTen(hoten);
this->setsoCMT(soCMT);
this->setId(Nguoi:: createID());
cout << "Id cua Quan Ly la " << this->getId() << "\n"; }
};
class Khach : public Nguoi
{ public: Khach() {
string hoten; int
soCMT;
cout << "Nhap thong tin khach\n"; cout << "Ho ten khach: ";
cin >> hoten;
cout << "So CMT khach: "; cin >> soCMT; cin.ignore
();this->setHoTen(hoten);
this->setsoCMT(soCMT);
this->setId(Nguoi:: createID());
cout << "Id cua khach la " << this->getId() << "\n"; }
};
class Shipper : public Nguoi {
public: Shipper() {
string hoten;
int soCMT;
cout << "Nhap thong tin shipper\n"; cout << "Ho ten shipper: ";
cin >> hoten;
cout << "So CMT shipper: "; cin >> soCMT;
cin.ignore ();
this->setHoTen(hoten);
this->setsoCMT(soCMT);
this->setId(Nguoi:: createID());
cout << "Id cua shipper la " << this->getId() << "\n"; } }; class Logs { private: Nguoi nguoi; string timeVao;
string timeRa;
bool status;
public:
Logs(Nguoi nguoi, string timeVao) {
this->nguoi = nguoi;
this->timeVao = timeVao;
this->timeRa = "Chua Ra\t\t";
this->status = false; }
void diRa() {
this->timeRa = currentDateTime();
this->status = true; }
int getID() { return nguoi.getId(); }
string getHoTen () { return nguoi.getHoTen(); } string getTimeVao() { return this->timeVao; } string
getTimeRa() { return this->timeRa; }bool getStatus () { return this->status; }
};
// Danh sách
vector<CuDan> dsCuDan; vector<NhanVien> dsNhanVien; vector<QuanLy> dsQuanLy; vector<Khach> dsKhach; vector<Shipper> dsShipper; vector<Logs> logs;
bool checkQuyen(int id, int role) { if (role == 1) {
for (CuDan i : dsCuDan) { if (id == i.getId ()) { return true; } } } if (role == 2) { for (NhanVien i : dsNhanVien) { if (id == i.getId()) { return true; } } } if (role == 3) {
for (QuanLy i : dsQuanLy) {
if (id == i.getId()) {
return true; }
}
}
if (role == 4) {
for (Khach i : dsKhach) { if (id == i.getId ()) { return true; } } } if (role == 5) {
for (Shipper i : dsShipper) { if (id == i .getId()) { return true; } } } return false; } int checkID() { int id;
cout << "Moi ban nhap id: "; cin >> id;
cin.ignore(1);
if (!Nguoi::che ckID(id)) { cout << "\a";
cout << "Id khong ton tai\n"; cout << "Nhan Enter de tiep tuc";
cin.ignore (); return -1; } return id; } void themNguoi () { int id = checkID(); if (id == -1) { return; }
if (!(checkQuyen(id, 2) || checkQuyen(id, 3))) {cout <<
"\a";
cout << "Ban khong du tham quyen de thuc hien chuc nang nay\n"; return; }
cout << "Chon quyen cho nguoi muon them:\n"; cout << "1- Cu dan\n";
cout << "2- Nhan vien (le tan, bao ve ...)\n"; cout << "3- Quan ly\n";
cout << "4- Khach\n"; cout << "5- Shipper\n";
int input;
cin >> input;
cin.ignore(1);
switch (input) {
case 1:
dsCuDan .push_back (CuDan());
break;
case 2:
dsNhanVien.push_back(NhanVien());
break;
case 3:
dsQuanLy.push_back (QuanLy());
break;
case 4:
dsKhach.push_back(Khach());
break;
case 5:
dsShippe r.push_back (Shipper());
break; } } void raVao() { int id = checkID(); if (id == -1) { return; } if (logs.size() > 0) {
for (int i = 0; i <= logs.size(); ++i) {
if (id == logs[ i].getID() && logs[i].getStatus() == false) { logs[i].diRa();
Beep(1538,2000 );
cout << "Da xac nhan di ra.\n"; cout << "Nhan Enter de tiep tuc";
cin.ignore(); return; } } } Nguoi nguoi;
bool flag = false;
// Tìm người
for (CuDan i : dsCuDan) {
if (id == i.getId()) { nguoi = i; flag = true; } } if (!flag) { for (NhanVien i : dsNhanVien) { if (id == i.getId()) {
nguoi = i; flag = true; } } } if (!flag) {
for (QuanLy i : dsQuanLy) {
if (id == i.getId()) { nguoi = i; } } } if (!flag) {
for (Khach i : dsKhach) { if (id == i.getId ()) { nguoi = i; } } } if (!flag) {
for (Shipper i : dsShipper) {
if (id == i.getId()) {
nguoi = i;
} } }
logs.push_back(Logs(nguoi , currentDateTime()));
Beep(1538,2000);
cout << "Da xac nhan di vao.\n"; cout << "Nhan Enter de tiep tuc";
cin.ignore(); } void danhsachRaVao() { int id = checkID(); if (id == -1) { return; } if (!checkQuyen (id, 3)) { cout << "\a";
cout << "Ban khong du tham quyen de thuc hien chuc nang nay. \n"; return; }
cout << "ID\t\tHo ten\t\t\tTime Vao\t\t\tTime Ra\t\t\t\t\tStatus\n"; for (Logs i : logs) { cout << i. getID() << "\t\t" << i. getHoTen() << "\t\t\t" << i.getTime Vao()
< "\t\t" << i .getTimeRa() << "\t\t\t" << i.getStatus()
< "\n"; }
cout << "Nhan Enter de tiep tuc";
cin.ignore(); } void thangMayChuyenDung() { int id = checkID(); if (id == -1) { return; }
if (!(checkQuyen(id, 1)||checkQuyen(id, 2)|| checkQuyen(id, 3))) {cout << "\a"; cout << "Ban khong du tham quyen de thuc hien chuc nang nay\n"; return; }
if (logs.size() > 0) {
for (int i = 0; i <= logs.size(); ++i) {
if (id == logs[ i].getID() && logs[i].getStatus() == false) { logs[i].diRa();
Beep(1538,2000 );
cout << "Da xac nhan di ra.\n"; cout << "Press Enter to Continue";
cin.ignore(); return; } } } Nguoi nguoi;
bool flag = false;
// tim ng
for (CuDan i : dsCuDan) {
if (id == i.getId()) { nguoi = i; flag = true; } } if (!flag) { for (NhanVien i : dsNhanVien) { if (id == i.getId()) { nguoi = i; flag = true; } } } if (!flag) {
for (QuanLy i : dsQuanLy) {
if (id == i.getId()) {
nguoi = i;
} } }
if (!flag) {
for (Khach i : dsKhach) { if (id == i.getId ()) { nguoi = i; } } } if (!flag) {
for (Shipper i : dsShipper) {
if (id == i.getId()) {
nguoi = i;
} } }
logs.push_back(Logs(nguoi , currentDateTime()));
Beep(1538,2000);
cout << "Da xac nhan di vao.\n"; cout << "Nhan Enter de tiep tuc";
cin.ignore(); } void thangMayKhach() { int id = checkID(); if (id == -1) { return; }
if (!(checkQuyen(id, 1)||checkQuyen(id, 2)|| checkQuyen(id, 3)||checkQuyen( id, 4))) { cout << "\a";
cout << "Ban khong du tham quyen de thuc hien chuc nang nay\n"; return; }
if (logs.size() > 0) {
for (int i = 0; i <= logs.size(); ++i) {
if (id == logs[ i].getID() && logs[i].getStatus() == false) { logs[i].diRa();
Beep(1538,2000 );
cout << "Da xac nhan di ra.\n"; cout << "Press Enter to Continue";
cin.ignore(); return; } } } Nguoi nguoi;
bool flag = false;
// tim ng
for (CuDan i : dsCuDan) {
if (id == i.getId()) { nguoi = i; flag = true; } } if (!flag) { for (NhanVien i : dsNhanVien) { if (id == i.getId()) { nguoi = i; flag = true; } } } if (!flag) {
for (QuanLy i : dsQuanLy) {
if (id == i.getId()) { nguoi = i; } } } if (!flag) {
for (Khach i : dsKhach) { if (id == i.getId ()) { nguoi = i; } } } if (!flag) {
for (Shipper i : dsShipper) {
if (id == i.getId()) {
nguoi = i;
} } }
logs.push_back(Logs(nguoi , currentDateTime()));
Beep(1538,2000);
cout << "Da xac nhan di vao.\n"; cout << "Nhan Enter de tiep tuc";
cin.ignore(); }
int main() {
cout<< "\n\tCHAO MUNG BAN DEN VOI HE THONG QUAN LY RA VAO TOA NHA
\n\n"; cout<< " ---\n\n" ;
dsQuanLy.push_back(QuanLy ());
int input, thangmay;
while (true) {
cout << "\nMenu\n"; cout << "1- Ra Vao\n";
cout << "2- Them Nguoi dung\n";
cout << "3- Danh sach ra vao\n"; cout << "4- Su dung thang may\n"; cout << "5- Thoat\n"; cin >> input; cin. ignore( 1); switch (input) { ca se 1: raVao(); break; ca se 2: themNguoi(); break; ca se 3: danhsachRaVao(); break; ca se 4: {
cout << "Moi ban chon che do thang may:\n"; cout << "1- Thang may chuyen dung\n"; cout << "2- Thang may khach\n";
cin >> thangmay; cin. ignore(1); switch (thangmay){ case 1: thangMayChuyenDung(); break; case 2: thangMayKhach(); break; } } break; ca se 5: break; } } }
5.2.2. Mô tả cách thức và quy trình hoạt động của hệ thống
Khi bắt đầu chạy chương trình, hệ thống hiện thị ra màn hình.
CHAO MUNG BAN DEN VOI HE THONG QUAN LY RA VAO TOA NHA
Nhap thong tin quan ly Ho ten quan ly:
Hệ thống yêu cầu nhập thông tin người quản lý, đầu tiên là nhập họ tên Sau khi nhập họ tên, hệ thống sẽ tiếp tục yêu cầu người dùng nhập số Chứng Minh Thư Nhân Dân.
CHAO MUNG BAN DEN VOI HE THONG QUAN LY RA VAO TOA NHA
Nhap thong tin quan ly Ho ten quan ly: Yen So CMT quan ly:
Sau khi nhập số chứng minh thư, hệ thống sẽ lưu lại thông tin của người Quản lý và cấp cho người đó một số ID và hiện ra Menu của hệ thống.
Nhap thong tin quan ly Ho ten quan ly: Yen
So CMT quan ly: 11195920 Id cua Quan Ly la 42
Menu 1- Ra Vao 2- Them Nguoi dung 3- Danh sach ra vao
4- Su dung thang may 5- Thoat
Cách hoạt động của từng chức năng trong Menu 1. Ra Vào.
Khi bạn chọn chức năng ra vào, hệ thống sẽ yêu cầu bạn nhập ID. ID có thể được nhập thủ công hoặc được nhập tự động vào hệ thống thông qua công nghệ RFID (khi hệ thống hoàn thiện)
Với ID chưa tồn tại, hệ thống sẽ hiển thị thông báo trên màn hình kèm âm thanh thông báo.
Menu 1- Ra Vao 2- Them Nguoi dung 3- Danh sach ra vao
4- Su dung thang may 5- Thoat 1
Moi ban nhap id: 12 Id khong ton tai
Nhan Enter de tiep tuc
Với ID đúng hệ thống sẽ xác nhận đối tượng đã được xác nhận đi vào hoặc đi ra kèm âm thanh thông báo.
Menu 1- Ra Vao 2- Them Nguoi dung 3- Danh sach ra vao
4- Su dung thang may 5- Thoat 1
Moi ban nhap id: 42 Da xac nhan di vao.
2.Thêm người dùng
Khi bạn chọn chức năng này hệ thống sẽ yêu cầu bạn nhập ID, cùng tương tự như chức năng 1, nếu bạn nhập sai ID hệ thống sẽ in ra và hình thông báo kèm âm thanh.
Menu 1- Ra Vao 2- Them Nguoi dung 3- Danh sach ra vao
4- Su dung thang may 5- Thoat 2
Moi ban nhap id: 12 Id khong ton tai Nh E t d ti t
Nếu nhập đúng ID đã tồn tại, hệ thống sẽ kiểm tra bạn có đủ thẩm quyền thêm người hay không.
Nếu không có đủ thầm quyền, hệ thống sẽ in ra thông báo kèm âm thanh. 2
Moi ban nhap id: 341
Ban khong du tham quyen de thuc hien chuc nang nay Menu
1- Ra Vao 2- Them Nguoi dung 3- Danh sach ra vao
4- Su dung thang
Nếu đủ thầm quyền hệ thống sẽ hiển thị giao diện để bạn lựa chọn đối tượng muốn thêm và nhập thông tin của đối tượng đó.
2
Moi ban nhap id: 42
Chon quyen cho nguoi muon them: 1- Cu dan
2- Nhan vien (le tan, bao ve ...) 3- Quan ly
4- Khach 5- Shipper
Sau đó bạn tiến hành nhập thông tin, khi hoàn tất các thông tin yêu cầu, hệ thống sẽ hiện thị ra màn hình ID của đối tượng vừa được nhập thông
Chon quyen cho nguoi muon them: 1- Cu dan
2- Nhan vien (le tan, bao ve ...) 3- Quan ly
4- Khach