Hình 3.31: Kết nối mạch Raspberry Pi với DHT22
Trong kết nối giao tiếp giữa Raspberry Pi và DHT22 có sử dụng thêm một điện trở mắc giữa chân Vcc và chân Data để khi không có tín hiệu truyền trên dây Data (thường là trạng thái nghỉ) thì Data được kéo lên mức tín hiệu cao (Hình 3.31, Bảng 3.6).
Cảm biến nhiệt độ, độ ẩm DS18B20:
Hình 3.32: Kết nối giao tiếp giữa Raspberry Pi và DS18B20
Tương tự như kết nối với DHT22, một điện trở kết nối giữa hai chân Vcc và Data để thực hiện kéo mức tín hiệu chân Data lên cao khi không có tín hiệu truyền trên đó (Hình 3.32, Bảng 3.7).
Cảm biến khói, khí gây cháy MQ2:
Việc kết nối giữa Raspberry Pi với cảm biến khí MQ2 có 2 phương thức: Lấy dữ liệu Digital hoặc dữ liệu Analog. Ở đây tôi sẽ thực hiện lấy dữ liệu Digital để làm việc với Pi. Kết nối chân như Bảng 3.8.
Bảng 3.8. Kết nối chân PI, AMS1117 và module MQ2
Chức năng Chân GPIO trên Pi Mạch giảm áp 3v3 AMS1117 Chân MQ2 Vcc 2 Vcc
Data 13 Vout Vin DO
GND 6 GND GND GND Chức năng Tên gọi vật lý GPIO trên Pi Chỉ số chân DHT22 Vcc 1 1 Data 7 2 GND 6 4 Chức năng Tên gọi vật lý GPIO trên Pi Chân DS18B20 Vcc 2 3 Data 7 2 GND 6 1 Bảng 3.7. Kết nối chân Pi và DS18B20
Chân nhận tín hiệu số, chân 13 của Pi được cấu hình hoạt động ở chế độ Input và mức tín hiệu ở mức cao nếu chân hở (PULL_DOWN).
Nguyên lý làm việc của khối như sau:
- Khi có loại khí làm MQ2 bị kích thích vượt ngưỡng (ngưỡng được điều chỉnh bằng biến trở trên module MQ2) chân DO của MQ2 sẽ chuyển lên trạng thái mức cao (5V DC). Chân DO được nối vào Vin của mạch AMS1117 sẽ cho Vout tương ứng có mức điện áp 3.3V DC.
- Chân nhận tín hiệu số 13 của Pi nối vào chân Vout trên AMS 1117 khi MQ2 bị kích thích vượt ngưỡng, mức điện áp vào chân 13 là 3.3 V, Pi sẽ hiểu tín hiệu ở mức "1", tương đương với trạng thái có khói hoặc khí gây cháy.
Cảm biến điện lưới sử dụng Adapter 5 V DC kết hợp relay: Sơ đồ chân kết nối giữa các thiết bị như Bảng 3.9.
Bảng 3.9. Kết nối chân PI, rờ le và adapter 5VDC
Chức năng
Chân GPIO trên Raspberry Pi Rờ le thường đóng, kích mức thấp Adapter 5V Output Data 11 COM DC+ Vcc GND 6 NC DC- GND Kích Rơ le NO IN GND
Tương tự cho chân nhận tín hiệu số, chân 11 của Pi được cấu hình hoạt động ở chế độ Input và mức tín hiệu ở mức cao nếu chân hở (PULL_UP).
Nguyên lý hoạt động như sau:
- Khi có điện lưới (điện xoay chiều 220 V):
o Adapter chuyển ra điệp áp 5V DC nuôi Rơ le đồng thời chân GND của Adapter nối vào chân tín hiệu của Rơ le. Do rơ le được cấu hình kích mức thấp nên Rơ le ở trạng thái tích cực, tiếp điểm thường đóng (NC) được nối với tiếp điểm COM.
o Chân nhận tín hiệu số 11 của Pi nối vào COM của Rơle sẽ thông với GND ở chân số 6 của Pi. Pi nhận mức tín hiệu "0" ở chân 11, tương đương với trạng thái có điện lưới.
- Khi mất điện lưới:
o Chân nhận tín hiệu số 11 của Pi lúc này hở mạch, tín hiệu nhận ở mức "1", tương đương với trạng thái mất điện lưới.
3.3 XÂY DỰNG LƯU ĐỒ GIẢI THUẬT VÀ LẬP TRÌNH 3.3.1 Module thu thập dữ liệu từ các cảm biến môi trường 3.3.1 Module thu thập dữ liệu từ các cảm biến môi trường
Các thông số môi trường về nhiệt độ và độ ẩm định, khói định kỳ được báo cáo về Server tập trung mỗi 15 phút. Trong quá trình thu thập dữ liệu, nếu trạng thái nhiệt độ, độ ẩm hay khói thay đổi thì ngap lập tức báo cáo về server. Lưu đồ giải thuật cơ bản như sau:
Bắt đầu
Thu thập, xử lý dữ liệu nhiệt độ, độ ẩm, khói, điện lưới
Xác định trạng thái hiện tại dựa trên dữ liệu và ngưỡng giá trị cảnh báo
Trạng thái có thay đổi
Gửi Report lên Server Không Có Đã 15' chưa Rồi Chưa Reset bộ định thời Start bộ định thời Có dừng chương trình? Kết thúc Có Không
3.3.2 Module kết nối nhận sự kiện từ khối Giám sát ra vào
Yêu cầu đặt ra cho module giám sát ra vào đầu tiên là ghi nhận các sự kiện ra vào, tiếp theo là giám sát được trường hợp mất kết nối, một số hành vi xâm nhập trái phép. Lưu đồ giải thuật của module cơ bản như sau:
Bắt đầu
Có sự kiện nào không?
Gửi Report lên Server Không Có Kết nối thiết bị Ra vào Xử lý thông tin sự kiện Có dừng chương trình? Kết thúc Có Không
3.3.3 Module Giám sát an ninh, phát hiện chuyển động
Cấu hình cho đầu ghi camera cần làm các bước cơ bản: - Cấu hình mạng
- Thiết lập ghi theo chuyển động và trỏ đến server FTP trên RPi bằng tài khoản người dùng camera đã tạo ở trên.
Bắt đầu
Có file chuyển động không?
Gửi Report lên Server Không Có Xử lý thông tin sự kiện Có dừng chương trình? Kết thúc Có Không
3.3.4 Module báo cáo trạng thái về Server qua giao thức MQTT
Trong các lưu đồ giải thuật của các module chức năng có hàm Gửi Report lên
Server, hàm này sẽ thực hiện gửi thông điệp trạng thái của module chức năng về cho
server thông qua phương thức publish trên giao thức MQTT. Như vậy hàm "Gửi Report
lên Server sẽ thực hiện vai trò là client, server sẽ đóng vai trò là broker nhận và phân
phối lại các thông điệp.
Module Report sử dụng như sau:
- Bước 1: Thực hiện gọi hàm kết nối connect, kết quả kết nối sẽ được trả về thông
qua hàm callback on_connect.
- Bước 2: Thực hiện gửi thông điệp về broker thông qua hàm send_report với giá
trị đầu vào là các tham số đặc trưng của một thông điệp MQTT:
o Topic: Chủ đề mà thông điệp publish đến.
o Data: Thông điệp
o Qos (Quality of service): Ở đây ta có thể hiểu là cấp xác nhận giữa broker
và client khi trao đổi thông điệp.
o Retain: Có giữ thông điệp trên topic hay không.
Ứng dụng web giám sát cục bộ được viết bằng ngôn ngữ Python trên nền tảng mã nguồn mở Django, một nền tảng web server nhẹ, phát triển nhanh [15]. Server được chạy ngay trên board Raspberry Pi và ứng dụng web này dành cho người quản lý phòng máy để xem một số thông tin:
- Tên thiết bị: Để khỏi nhầm lẫn giữa các thiết bị giám sát ở phòng máy khác. - Thời gian hoạt động của hệ thống: Để xem thiết bị có bị khởi động lại bất thường. - Trạng thái giám sát: Các thông số môi trường, an ninh hiện tại và trạng thái kết
nối về server quản lý tập trung.
Đồng thời, module cho phép người quản lý thực hiện thiết lập các thông số về: - Tên thiết bị.
- Thông tin mô tả vị trí các loại cảm biến trong phòng. - Ngưỡng cảnh báo của các loại cảm biến (Nhiệt, độ ẩm). - Địa chỉ IP của thiết bị giám sát và xử lý cục bộ.
- Kích hoạt và thay đổi địa chỉ IP của thiết bị giám sát ra vào. - Kích hoạt và thay đổi địa chỉ IP của camera giám sát.
- Kích hoạt và thay đổi các tổ hợp (nhiệt, khói, mất điện) trạng thái làm chuông báo kêu.
Người quản lý phòng máy
Đăng nhập
Xem trạng thái
Cấu hình thông số Thay đổi tên thiết bị
<<extend>>
Thay đổi thông tin cảm biến
Thay đổi thông tin IP <<extend>> <<extend>> Thay đổi tổ hợp kích hoạt chuông báo <<extend>>
Xem thông tin
Xem tên thiết bị
Xem thời gian hệ thống hoạt động bao lâu
<<extend>>
<<extend>>
Xem nhiệt độ, độ ẩm, khói, điện
<<extend>> Xem trạng thái ra vào, camera Xem trạng thái kết nối mạng <<extend>> <<extend>> Đổi mật khẩu Xem trạng thái chuông báo <<extend>>
Giao diện trang web đáp ứng (responsive) hiển thị trên cả máy tính và các thiết bị điện thoại:
Trang đăng nhập:
Người dùng thực hiện xác thực để có thể truy cập các trang trạng thái và cấu hình (Hình 3.33).
Trang xem thông tin:
Hình 3.34: Giao diện trang xem thông tin thiết bị
Người dùng có thể xem một số thông tin thiết bị như: tên, phòng máy, giờ trên hệ thống và tổng thời gian hoạt động của hệ thống từ lúc khởi động (Hình 3.34). Trang xem trạng thái:
Tại trang trạng thái ta có thể xem các giá trị cảm biến và trạng thái realtime của các khối chức năng. Các thông số trạng thái có màu sắc thay đổi theo trạng thái: Xanh (trạng thái bình thường – Normal), Cam (trạng thái hơi cao – Warning) và Đỏ (trạng thái báo động – Critical) như Hình 3.35.
Hình 3.35: Giao diện trang xem trạng thái
Trang cấu hình thông số:
- Thông tin điện lưới phòng máy: Có thể thiết lập tên phòng máy, số pha điện
Hình 3.36: Giao diện trang cấu hình thông tin phòng máy
- An ninh: Cấu hình kích hoạt kết nối giữa Pi với các khối giám sát ra vào và
an ninh camera (Hình 3.37).
Hình 3.37: Giao diện trang cấu hình thông tin các thiết bị an ninh
- Chuông báo: Chuông báo động có thể được cấu hình kích hoạt khi xảy ra một
trong các trạng thái mất điện lưới, nhiệt độ rất cao, phát hiện khói (Hình 3.38).
Hình 3.38: Giao diện trang cấu hình các điều kiện kích hoạt chuông báo
3.4 TRIỂN KHAI VÀ THEO DÕI KẾT QUẢ:
- Lập trình ứng dụng thu thập các thông số cảm biến, bao gồm toàn bộ các khối chức năng Giám sát. Các khối này đòi hỏi thời gian đáp ứng các sự kiện thời gian thực, nhanh nên tôi sử dụng kỹ thuật xử lý đa luồng – multithreading.
- Lập trình ứng dụng giao diện xem trạng thái và cấu hình trên nền tảng Django, bao gồm các giao diện xem, khai báo và cấu hình các thông số của các khối Giám sát.
- Thiết kế và dựng database lưu trữ nền tảng Sql Server. - Dựng Mqtt broker cho module Report.
- Lập trình dịch vụ nhận sự kiện và lưu trữ vào database lưu trữ. - Lập trình dịch vụ cảnh báo cho nhân sự quản lý.
CHƯƠNG 4: ĐÁNH GIÁ VÀ KẾT LUẬN
4.1ĐÁNH GIÁ:
4.1.1 Đánh giá kết quả thử nghiệm:
Sau thời gian thực nghiệm để kiểm tra độ ổn định của hệ thống và thực hiện một số giả lập sự kiện. Hệ thống cho kết quả hoạt động ở độ ổn định cao, các thông số định kỳ cũng như trạng thái sự kiện được báo cáo như kỳ vọng.
4.1.2 Ưu điểm của hệ thống:
Hệ thống giám sát điều kiện môi trường và an ninh phòng máy cho SCTV được xây dựng dựa trên kiến trúc công nghệ Internet of Things có nhiều ưu điểm được tóm gọn:
- Tính ứng dụng cao: Xuất phát từ nhu cầu vận hành, kết hợp các tiêu chuẩn kỹ
thuật và kinh nghiệm quản lý thực tiễn, hệ thống được xây dựng có tính ứng dụng cao giúp tối ưu nhiều công đoạn trong qui trình vận hành, sản xuất.
- Tính mở rộng: Thiết bị phần cứng gateway là Raspberry Pi và giao thức truyền
thông về phía cloud là MQTT làm cho hệ thống có tính mở không giới hạn (như đã trình bày ở chương 3).
4.1.3 Hạn chế của hệ thống:
Hệ thống có rất nhiều ưu điểm nếu như hoàn thiện, tuy nhiên trong phạm vi luận văn và tại thời điểm hiện tại hệ thống vẫn còn tồn tại nhiều hạn chế, cụ thể:
- Bảo mật: Trong kiến trúc Internet of Things, bảo mật là một trong các yếu tố được
quan tâm hàng đầu. Hệ thống hiện tại chưa triển khai một số công nghệ, phương pháp để tăng độ tin cậy cho hệ thống.
- Công nghệ: Công nghệ lớp vật lý hiện tại kết nối giữa các sensor và gateway là
có dây, cũng như tính bảo mật, công nghệ không dây cũng là một công nghệ lõi của Internet of Things, việc triển khai ứng dụng công nghệ này vào hệ thống giúp tối ưu không gian, thẩm mỹ cũng như công đoạn đi dây trong phòng máy chật chội.
- Mở rộng: Trong phòng máy hiện có rất nhiều thông số cần thu thập giám sát, dự
báo cũng như điều khiển như battery, UPS, tải điện, server, router…
4.2KẾT LUẬN:
Sự hội tụ của các công nghệ lõi hình thành công nghệ Internet of Things, đặc biệt là công nghệ vi cơ điện tử giúp việc xây dựng các hệ thống tự động như hệ thống thông
hơn bao giờ hết. Với chi phí phải chăng và tính ứng dụng cao, hệ thống khi được phát triển hoàn chỉnh giúp các doanh nghiệp viễn thông như SCTV giảm thiểu được rất nhiều nguồn nhân lực vận hành các phòng, góp phần đảm bảo an ninh, an toàn truyền dẫn phát sóng.
PHỤ LỤC
A. Chương trình mẫu lấy dữ liệu nhiệt độ và in tất cả nhiệt độ của các cảm biến nhiệt độ DS18B20 lên màn hình:
1. from subprocess import Popen,PIPE 2.
3. class Temp_Sensor(object):
4. SensorList = []
5. def __init__(self,serial):
6. self.serial = serial #serial: địa chỉ nhận dạng cảm biến 7. self.value = 0
8. Temp_Sensor.SensorList.append(self) 9.
10. def get_temp(self):
11. '''Lấy dữ liệu nhiệt độ theo độ Celsius từ cảm biến'''
12. data = Popen('cat /sys/bus/w1/devices/' + self.serial +
'/w1_slave'],shell=True,stdout=PIPE, stderr=PIPE)
13. out,err = data.communicate() 14. if err=='' and out !='':
15. val = round(float(out.decode('utf-
8').split('\n')[1].split('=')[1])/1000,1)
16. self.value = val 17. def show_me(self):
18. print (f"-{self.serial}:{self.value}")
19.
20. def get_sensor(): 21. import os
22. rootpath = '/sys/bus/w1/devices/'
23. for temp_sensor in os.listdir(rootpath): 24. if temp_sensor.startswith("28-"):
25. Temp_Sensor(temp_sensor) 26.
27. def show_temp():
28. for sensor in Temp_Sensor.SensorList: 29. sensor.get_temp() 30. sensor.show_me() 31. 32. if __name__=="__main__": 33. get_sensor() 34. show_temp()
B. Chương trình mẫu kết nối thiết bị An ninh ra vào để lấy sự kiện.
1. #Author: Loctt
2. #Released Date: 07/06/2020 3.
4. from Constants import StatusMessage,AccessStatusDict 5. import report_service 6. 7. def run(ip): 8. import zk 9. status=0 10. event_status = '' 11. attendance_status = None 12. needReport = False
13. myClient = zk.ZK(ip,timeout=5) 14. if myClient.helper.test_ping(): 15. try: 16. myClient.connect() 17. needReport = False 18. if len(AccessControl.zkClient.get_serialnumber()): 19. status = AccessStatusDict.status_connect_sucessfully 20. for attendance,data in
AccessControl.zkClient.live_capture():#Theo dõi sự kiện
21. if attendance is None:
22. if len(data) == 16:
23. if data[9] == '1':#Quên đóng cửa
24. event_status = AccessStatusDict.status_open_door_alarm 25. elif len(data) == 8: 26. event_status =
AccessStatusDict.status_hack_device
27. print("Phát hiện hành vi tác động vào thiết bị")
28. elif len(data) == 0:
29. if not myClient.helper.test_ping(): break
30. else:
31. if attendance.status == 1: #Truy cập bằng vân tay
32. event_status = AccessStatusDict.status_access_by_finger
33. elif attendance.status == 3: #Truy cập bằng pass
34. event_status = AccessStatusDict.status_access_by_pass
35. else: #Truy cập bằng RFID card
36. event_status = AccessStatusDict.status_access_by_card 37. except Exception as e:
38. print ("Có lỗi bất thường: {}".format(e))
39. else:
40. status = AccessStatusDict.status_ping_not_ok 41. if __name__=="__main__":
42. run('192.168.1.102')
C. Chương trình mẫu kiểm tra file chuyển động của camera trong thư mục cho trước:
1. #Author: Loctt
2. #Released Date: 16/08/2020
3. import os, platform
4. import report_service 5.
6. list_files = [] 7.
8. def getFullPathOfAllFilesInFolder(rootpath):
9. '''Hàm đệ quy lấy toàn bộ đường dẫn File trong thư mục rootPath''' 10. import re,time
11. today = time.strftime("%Y-%m-%d",time.localtime())
12. for item in os.listdir(rootpath):
13. itemFullPath = os.path.join(rootpath,item)
14. if re.search("\d{4}-\d{2}-\d{2}",item) and today != item: 15. os.system (f"rm -rf {itemFullPath}")
16. else:
18. elif itemFullPath.endswith('h264'): list_files.append(itemFullPath) 19. list_files.sort() 20. return list_files 21. 22. def getbase64contentFile(contentFileInBytes):
23. '''Hàm convert dữ liệu từ Byte sang Base64 cho việc chuyển thông tin về server trong MQTT'''
24. import base64
25. return base64.b64encode(contentFileInBytes).decode('ascii')
26.
27. def run():
28. from Constants import CameraStatusDict 29. cameraName = ""
30. while True:
31. list_files = []
32. getFullPathOfAllFilesInFolder(record_files_dir) 33. today = time.strftime("%Y-%m-%d",time.localtime())
34. for recFileFullPath in list_files: 35. #Xem hom nay co file nao khong