Cài đặt và thử nghiệm IoT và RFID

Một phần của tài liệu Đề tài xây dựng hệ thống kiểm soát ra vào toà nhà theo phương pháp lập trình hướng đối tượng (Trang 26)

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) { (adsbygoogle = window.adsbygoogle || []).push({});

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"; } (adsbygoogle = window.adsbygoogle || []).push({});

};

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; (adsbygoogle = window.adsbygoogle || []).push({});

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; } (adsbygoogle = window.adsbygoogle || []).push({});

}

}

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: (adsbygoogle = window.adsbygoogle || []).push({});

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"; } (adsbygoogle = window.adsbygoogle || []).push({});

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) { (adsbygoogle = window.adsbygoogle || []).push({});

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"; (adsbygoogle = window.adsbygoogle || []).push({});

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. (adsbygoogle = window.adsbygoogle || []).push({});

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

Một phần của tài liệu Đề tài xây dựng hệ thống kiểm soát ra vào toà nhà theo phương pháp lập trình hướng đối tượng (Trang 26)