BỘ GIÁO DỤC & ĐÀO TẠO
TRƢỜNG ĐẠI HỌC SƢ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
---------------------------------
ĐỒ ÁN TỐT NGHIỆP
NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG
ĐỀ TÀI:
ỨNG DỤNG CHATBOT VÀO
ĐIỀU KHIỂN NHÀ THÔNG MINH
GVHD: TS. Nguyễn Mạnh Hùng
SVTH: Nguyễn Minh Hùng MSSV: 14141139
Tp. Hồ Chí Minh - 06/2018
i
BỘ GIÁO DỤC & ĐÀO TẠO
TRƢỜNG ĐẠI HỌC SƢ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
---------------------------------
ĐỒ ÁN TỐT NGHIỆP
NGÀNH KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG
ĐỀ TÀI:
ỨNG DỤNG CHATBOT VÀO ĐIỀU
KHIỂN NHÀ THÔNG MINH
GVHD: TS. Nguyễn Mạnh Hùng
SVTH: Nguyễn Minh Hùng MSSV: 14141139
Tp. Hồ Chí Minh - 06/2018
ii
TRƢỜNG ĐH SPKT TP. HỒ CHÍ MINH
KHOA ĐIỆN-ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
ĐỘC LẬP - TỰ DO - HẠNH PHÚC
----o0o----
Tp. HCM, ngày 28 tháng 06 năm 2018
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
Họ tên sinh viên: Nguyễn Minh Hùng MSSV: 14141139
Chuyên ngành: Kỹ thuật Điện Tử Truyền Thông Mã ngành: 14141
Hệ đào tạo: Đại học chính quy Mã hệ: 1
Khóa: 2014 Lớp: 14141DT3B
I. TÊN ĐỀ TÀI: ỨNG DỤNG CHATBOT VÀO ĐIỀU KHIỂN NHÀ THÔNG MINH
II. NHIỆM VỤ
1. Các số liệu ban đầu:
- 1 chatbot đƣợc tạo ra trên nền tảng Dialogflow.
- 1 kit raspberry Pi3 B.
- 1 Mạch dimmer điều khiển độ sáng của bóng đèn.
- 2 Module Relay 5V 2 kênh điều khiển đóng/mở đèn, quạt.
- 1 động cơ servo MG90S điều khiển đóng/mở cửa.
- 1 Module cảm biến nhiệt độ, độ ẩm DHT11.
2. Nội dung thực hiện:
- Tìm hiểu nền tảng Dialogflow và tạo ra chatbot dựa trên nền tảng này.
- Tìm hiểu kit Raspberry Pi 3 và ngôn ngữ lập trình Python.
- Tạo webhook để nhận dữ liệu từ Dialogflow, xử lí dữ liệu để trả lại đồng thời điều
khiển thiết bị trong nhà.
- Thiết kế và thi công mạch điều khiển dimmer.
- Tìm hiểu cách điều khiển động cơ servo, cảm biến nhiệt độ, độ ẩm DHT11.
- Thi công mô hình nhà thông minh, kết nối các module lại với nhau.
III. NGÀY GIAO NHIỆM VỤ: 16/03/2018
IV. NGÀY HOÀN THÀNH NHIỆM VỤ: 28/06/2018
V. HỌ VÀ TÊN CÁN BỘ HƢỚNG DẪN: TS. Nguyễn Mạnh Hùng
CÁN BỘ HƢỚNG DẪN BM. ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
iii
TRƢỜNG ĐH SPKT TP. HỒ CHÍ MINH
KHOA ĐIỆN-ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
ĐỘC LẬP - TỰ DO - HẠNH PHÚC
----o0o----
Tp. HCM, ngày 28 tháng 06 năm 2018
LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP
Họ tên sinh viên: Nguyễn Minh Hùng
Lớp: 14141DT3B MSSV: 14141139
Tên đề tài: Ứng dụng chatbot và điều khiển nhà thông minh
Tuần/ngày Nội dung
Xác nhận
GVHD
Tuần 1
(16/03 - 23/03)
Gặp GVHD để nghe phổ biến yêu cầu làm đồ án,
tiến hành chọn đồ án
Tuần 2 GVHD tiến hành xét duyệt đề tài
Tuần 3 Viết tóm tắt yêu cầu đề tài đã chọn: đề tài làm cái
gì, nội dung thiết kế, các thông số giới hạn của đề
tài
Tuần 4 Tiến hành thiết kế sơ đồ khối, giải thích chức
năng các khối
Tuần 5 - Tìm hiểu các khái niệm liên quan đến đề tài
nhƣ API, webhook
- Thực hiên thiết kế trên Dialogflow
Tuần 6 - Cài đặt các gói thƣ viện cần thiết cho Raspberry
- Thực hiện tạo webhook và xử lí dữ liệu nhận
đƣợc
Tuần 7 - Thực hiện code phần back-end để hoàn thiện
yêu cầu xử lí trả về dữ liệu cho Dialogflow, điều
khiển phần cứng.
- Sử dụng ngrok để public server online
Tuần 8
Tuần 9
iv
Tuần 10 - Thiết kế sơ đồ nguyên lí mạch dimmer
- Tiến hành vẽ PCB, chọn linh kiện
- Tiến hành thi công mạch
- Kiểm tra mạch thi công
Tuần 11 - Thi công mô hình đồ án
- Kiểm tra, đánh giá mô hìnhTuần 12
Tuần 13 - Viết báo cáo những nội dung đã làm
- Hoàn thiện báo cáo và gởi cho GVHD để xem
xét góp ý lần cuối trƣớc khi in và báo cáo
Tuần 14
Tuần 15 Tiến hành làm silde báo cáo và các nhiệm vụ liên
quan đến đồ án tốt nghiệp
GV HƢỚNG DẪN
(Ký và ghi rõ họ và tên)
v
LỜI CAM ĐOAN
-----  -----
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi và đƣợc sự hƣớng
dẫn khoa học của Ts. Nguyễn Mạnh Hùng. Các nội dung nghiên cứu, kết quả trong
đề tài này là do tôi tự thực hiện dựa vào một số tài liệu trƣớc đó và không sao chép
từ tài liệu hay công trình đã có trƣớc đó. Những thông tin phục vụ cho đề tài đƣợc
chính tác giả thu thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham
khảo.
Tôi xin chịu mọi trách nhiệm về công trình nghiên cứu của riêng mình!
Sinh viên thực hiện
Nguyễn Minh Hùng
vi
LỜI CẢM ƠN
-----  -----
Trong thời gian làm đồ án tốt môn học, em đã nhận đƣợc nhiều sự giúp đỡ,
đóng góp ý kiến và chỉ bảo nhiệt tình của thầy cô, gia đình và bạn bè.
Em xin gửi lời cảm ơn chân thành đến Ts. Nguyễn Mạnh Hùng, giảng viên Bộ
môn Điện Tử Công Nghiệp – Y Sinh - Trƣờng ĐH Sƣ Phạm Kỹ Thuật TP.HCM,
ngƣời đã tận tình hƣớng dẫn, chỉ bảo em trong suốt quá trình làm đồ án.
Em cũng xin chân thành cảm ơn các thầy cô giáo trong trƣờng ĐH Sƣ Phạm
Kỹ Thuật TP.HCM nói chung, các thầy cô trong Bộ môn Điện Tử Công Nghiệp – Y
Sinh nói riêng đã dạy dỗ cho em kiến thức về các môn đại cƣơng cũng nhƣ các môn
chuyên ngành, giúp em có đƣợc cơ sở lý thuyết vững vàng và tạo điều kiện giúp đỡ
em trong suốt quá trình học tập.
Cuối cùng, em xin chân thành cảm ơn gia đình và bạn bè, đã luôn tạo điều
kiện, quan tâm, giúp đỡ, động viên em trong suốt quá trình học tập và hoàn thành
đồ án môn học.
Sinh viên thực hiện
Nguyễn Minh Hùng
vii
MỤC LỤC
Trang bìa ..................................................................................................................... i
Nhiệm vụ đồ án .......................................................................................................... ii
Lịch trình................................................................................................................... iii
Cam đoan.....................................................................................................................v
Lời cảm ơn ................................................................................................................ vi
Mục lục..................................................................................................................... vii
Liệt kê hình vẽ........................................................................................................... xi
Liệt kê bảng vẽ........................................................................................................ xiv
Tóm tắt ......................................................................................................................xv
Chƣơng 1. TỔNG QUAN .........................................................................................1
1.1 ĐẶT VẤN ĐỀ...............................................................................................1
1.2 MỤC TIÊU....................................................................................................1
1.3 NỘI DUNG NGHIÊN CỨU .........................................................................2
1.4 GIỚI HẠN .....................................................................................................2
1.5 BỐ CỤC ........................................................................................................3
Chƣơng 2. CƠ SỞ LÝ THUYẾT.............................................................................4
2.1 TỔNG QUAN VỀ CHATBOT .....................................................................4
2.1.1 Khái niệm về chatbot..............................................................................4
2.1.2 Phân loại chatbot.....................................................................................4
2.1.3 Xử lý ngôn ngữ tự nhiên (Natural Language Processing)......................5
2.2 TỔNG QUAN VỀ API..................................................................................5
2.2.1 Khái niệm về API ...................................................................................5
2.2.2 Mô hình của một API..............................................................................6
2.2.3 Các tác vụ thực hiện qua API .................................................................6
2.3 WEBHOOK...................................................................................................7
2.3.1 Khái niệm Webhook ...............................................................................7
2.3.2 Hoạt động của Webhook.........................................................................7
2.4 TỔNG QUAN VỀ DIALOGFLOW .............................................................8
2.4.1 Giới thiệu về Dialogflow ........................................................................8
2.4.2 Cấu trúc của Dialogflow.........................................................................9
a. Agent ...........................................................................................................10
viii
b. Intent ...........................................................................................................10
c. Entities.........................................................................................................15
d. Fulfillment...................................................................................................17
e. Integrations..................................................................................................17
2.5 RASPBERRY PI 3 ......................................................................................18
2.5.1 Giới thiệu về Board Raspberry Pi.........................................................18
2.5.2 Phần cứng của Raspberry Pi 3 ..............................................................18
a. Nguồn cung cấp...........................................................................................20
b. Các cổng giao tiếp.......................................................................................20
c. Các chân giao tiếp GPIO của kit.................................................................22
2.5.3 Hệ điều hành Raspbian cho kit Raspberry Pi .......................................23
2.6 ĐỘNG CƠ SERVO.....................................................................................24
2.6.1 Giới thiệu động cơ servo.......................................................................24
2.6.2 Nguyên lý hoạt động của động cơ servo...............................................25
2.7 CẢM BIẾN NHIỆT ĐỘ DHT11.................................................................27
2.8 MODULE RELAY 2 CHANNEL 5V.........................................................27
2.9 MOSFET .....................................................................................................28
2.9.1 Cấu tạo Mosfet......................................................................................29
2.9.2 Nguyên lí hoạt động..............................................................................30
Chƣơng 3. TÍNH TOÁN VÀ THIẾT KẾ..............................................................31
3.1 GIỚI THIỆU................................................................................................31
3.2 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG ................................................31
3.2.1 Thiết kế sơ đồ khối hệ thống ................................................................31
a. Sơ đồ khối hệ thống ....................................................................................31
b. Sơ đồ mô hình hệ thống ..............................................................................32
3.2.2 Tính toán và thiết kế mạch....................................................................32
a. Thiết kế khối Dialogflow ............................................................................33
b. Thiết kế khối điều khiển raspberry .............................................................33
c. Thiết kế khối điều khiển động lực...............................................................33
d. Thiết kế khối nguồn ....................................................................................35
Chƣơng 4. THI CÔNG HỆ THỐNG.....................................................................36
4.1 GIỚI THIỆU................................................................................................36
ix
4.2 THIẾT KẾ DIALOGFLOW........................................................................36
4.2.1 Lƣu đồ giải thuật...................................................................................36
4.2.2 Thiết kế cho yêu cầu điều khiển ON-OFF............................................37
a. Tạo mới Agent.............................................................................................37
b. Tạo entities..................................................................................................38
c. Tạo Intent ....................................................................................................39
d. Fulfillment...................................................................................................42
e. Integrations..................................................................................................43
4.2.3 Mở rộng cho điều khiển ON-OFF ........................................................44
a. Thêm mới entities........................................................................................44
b. Thêm mới intent..........................................................................................45
4.2.4 Kết quả hoàn chỉnh trên Dialogflow.....................................................46
a. Intents..........................................................................................................46
b. Entities ........................................................................................................46
4.3 LẬP TRÌNH TRÊN RASPBERRY PI 3.....................................................46
4.3.1 Giới thiệu ngôn ngữ lập trình Python ...................................................46
a. Lịch sử của Python......................................................................................47
b. Các phiên bản Python đã phát hành............................................................47
c. Đặc điểm của ngôn ngữ lập trình Python....................................................48
4.3.2 Giới thiệu phần mềm lập trình Python 3 IDLE ....................................49
4.3.3 Lƣu đồ giải thuật...................................................................................50
4.3.4 Viết chƣơng trình hệ thống...................................................................51
4.3.5 Public server lên internet bằng ngrok ...................................................52
4.4 THI CÔNG MẠCH ĐIỀU KHIỂN DIMMER............................................53
4.4.1 Sơ đồ mạch PCB Dimmer.....................................................................54
4.4.2 Thi công mạch ......................................................................................55
4.5 ĐÓNG GÓI VÀ THI CÔNG MÔ HÌNH ....................................................56
4.5.1 Đóng gói bộ điều khiển.........................................................................56
4.5.2 Thi công mô hình..................................................................................57
4.6 KẾT QUẢ VẬN HÀNH HỆ THỐNG ........................................................61
4.7 TÀI LIỆU HƢỚNG DẪN, THAO TÁC.....................................................63
4.7.1 Tài liệu hƣớng dẫn sử dụng ..................................................................63
x
4.7.2 Quy trình thao tác .................................................................................63
Chƣơng 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ................................................65
5.1 DIALOGFLOW...........................................................................................65
5.1.1 Dialogflow ............................................................................................65
5.1.2 Các khái niệm liên quan........................................................................65
5.2 RASPBERRY PI 3 ......................................................................................66
5.2.1 Raspberry Pi 3.......................................................................................66
5.2.2 Công cụ ngrok.......................................................................................66
5.3 PHẦN CỨNG..............................................................................................66
5.3.1 Mạch điều khiển dimmer......................................................................66
5.3.2 Động cơ Servo ......................................................................................67
5.3.3 Module Relay 2 kênh 5V......................................................................67
5.3.4 Module cảm biến DHT11 .....................................................................67
5.4 NHẬN XÉT VÀ ĐÁNH GIÁ .....................................................................67
Chƣơng 6. KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN..........................................69
6.1 KẾT LUẬN .................................................................................................69
6.2 HƢỚNG PHÁT TRIỂN ..............................................................................69
TÀI LIỆU THAM KHẢO ......................................................................................70
PHỤ LỤC.................................................................................................................71
xi
LIỆT KÊ HÌNH VẼ
Hình Trang
Hình 2.1: Khái niệm chatbot.......................................................................................4
Hình 2.2: Khái niệm về API........................................................................................5
Hình 2.3: Giới thiệu Dialogflow .................................................................................8
Hình 2.4: Các phần của Dialogflow............................................................................9
Hình 2.5: Các mục trong một Intent .........................................................................10
Hình 2.6: Hình ảnh mục context ...............................................................................11
Hình 2.7: Hình ảnh mục Events................................................................................12
Hình 2.8: Hình ảnh mục Training Phrases................................................................12
Hình 2.9: Hình ảnh của mục Action & Parameters...................................................13
Hình 2.10: Hình ảnh mục Responses........................................................................14
Hình 2.11: Hình ảnh của mục Fulfillment ................................................................15
Hình 2.12: Hình ảnh của mục Entities ......................................................................16
Hình 2.13: Các nền tảng tích hợp trong Integrations................................................17
Hình 2.14: Board Raspberry Pi .................................................................................18
Hình 2.15: Phần cứng của Raspberry Pi ...................................................................19
Hình 2.16: Các cổng giao tiếp trên Raspberry..........................................................21
Hình 2.17: Sơ đồ chân GPIO ....................................................................................22
Hình 2.18: Hình ảnh thực tế các chân GPIO.............................................................23
Hình 2.19: Giao diện hệ điều hành Raspbian............................................................24
Hình 2.20: Hình ảnh động cơ Servo..........................................................................24
Hình 2.21: Điều khiển động cơ servo bằng Duty Cycle ...........................................26
Hình 2.22: Cảm biến nhiệt độ - độ ẩm DHT11.........................................................27
Hình 2.23: Module Relay 2 channel 5V ...................................................................28
Hình 2.24: Hình ảnh Mosfet......................................................................................29
Hình 2.25: Các cực của Mosfet.................................................................................29
Hình 2.26: Hình ảnh các loại Mosfet ........................................................................30
Hình 3.1: Sơ đồ khối hệ thống ..................................................................................31
Hình 3.2: Sơ đồ thiết kế mô hình ..............................................................................32
Hình 3.3: Sơ đồ các khối điều khiển động lực..........................................................33
Hình 3.4: Sơ đồ nguyên lí mạch dimmer ..................................................................34
xii
Hình 4.1: Lƣu đồ thiết kế trên Dialogflow................................................................36
Hình 4.2: Tạo mới Agent ..........................................................................................37
Hình 4.3: Cài đặt các thông số cho Agent.................................................................38
Hình 4.4: Thực hiện tạo mới Entities........................................................................38
Hình 4.5: Hình ảnh entities on-off ............................................................................39
Hình 4.6: Hình ảnh entities led .................................................................................39
Hình 4.7: Tạo mới intents .........................................................................................40
Hình 4.8: Bảng Action và Parameters.......................................................................41
Hình 4.9: Mục Responses .........................................................................................41
Hình 4.10: Kích hoạt Fulfillment cho Intent.............................................................42
Hình 4.11: Đặt link webhook trong mục Fulfillment................................................42
Hình 4.12: Tùy chỉnh trong Integrations...................................................................43
Hình 4.13: Giao diện trò chuyện chatbot ..................................................................43
Hình 4.14: Thêm mới entities room..........................................................................44
Hình 4.15: Thêm mới entities status .........................................................................44
Hình 4.16: Thêm mới Intent on-off:condition ..........................................................45
Hình 4.17: Kết quả thao tác trên Intent mới..............................................................45
Hình 4.18: Kết quả hoàn thành Intent.......................................................................46
Hình 4.19: Kết quả hoàn thành Entities ....................................................................46
Hình 4.20: Ngôn ngữ Python ....................................................................................47
Hình 4.21: Giao diện Python 3 IDLE .......................................................................49
Hình 4.22: Thao tác file trên giao diện Python 3 IDLE............................................49
Hình 4.23: Các phần của giao diện ...........................................................................50
Hình 4.24: Lƣu đồ điều khiển trên Raspberry Pi ......................................................51
Hình 4.25: Giới thiệu ngrok......................................................................................53
Hình 4.26: Hình ảnh chạy ngrok...............................................................................53
Hình 4.27: Sơ đồ mạch in PCB.................................................................................54
Hình 4.28: Sơ đồ linh kiện 3D ..................................................................................54
Hình 4.29: Hình ảnh mạch thi công ..........................................................................55
Hình 4.30: Hình ảnh mạch sau thi công....................................................................56
Hình 4.31: Đóng gói bộ điều khiển...........................................................................56
Hình 4.32: Thi công khối đèn xoay chiều.................................................................57
xiii
Hình 4.33: Kết nối đèn với module Relay ................................................................57
Hình 4.34: Kết nối đèn với mạch dimmer.................................................................58
Hình 4.35: Kết nối Module DHT11 vào đúng vị trí..................................................59
Hình 4.36: Đặt đúng động cơ servo vào vị trí...........................................................59
Hình 4.37: Kết nối với Raspberry Pi.........................................................................60
Hình 4.38: Hình ảnh mô hình thi công hoàn chỉnh...................................................60
Hình 4.39: Điều khiển thiết bị thông qua giao diện..................................................61
Hình 4.40: Kết quả sau khi nhận yêu cầu điều khiển................................................61
Hình 4.41: Yêu cầu điều khiển đóng mở cửa............................................................62
Hình 4.42: Thực hiện mở cửa ...................................................................................62
Hình 4.43: Truy vấn thông tin nhiệt độ.....................................................................63
Hình 4.44: Lƣu đồ hƣớng dẫn sử dụng .....................................................................64
xiv
LIỆT KÊ BẢNG
Bảng Trang
Bảng 2.1: Bảng thông số kỹ thuật của Raspberry Pi.................................................20
Bảng 2.2: Các chân của Servo...................................................................................25
Bảng 2.3: Hình ảnh xung tƣơng ứng với góc quay...................................................26
Bảng 4.1: Các phiên bản Python đã phát hành .........................................................47
Bảng 4.2: Danh sách linh kiện ..................................................................................55
xv
TÓM TẮT
Trong những năm gần đây ngƣời ta thƣờng nhắc nhiều đến AI (trí tuệ nhân
tạo) và những ứng dụng rộng rãi của chúng. Nhóm em rất thích thú khi biết những
thành tựu mà AI(trí tuệ nhân tạo) sẽ mang lại trong tƣơng lai, đặc biệt là những ứng
dụng hiệu quả của chatbot trong kinh doanh và khoa học kỹ thuật. Và để bắt kịp xu
hƣớng đó, nhóm chúng em quyết định chọn chatbot làm đối tƣợng nghiên cứu và
ứng dụng cụ thể vào điều khiển nhà thông minh.
Nhà thông minh đƣợc thiết kế sử dụng Raspberry Pi 3 cho việc điều khiển và
giám sát những thiết bị trong nhà thông qua việc giao tiếp với chatbot. Việc mô
phỏng các thiết bị trong nhà đƣợc thể hiện bằng làm mô hình ngôi nhà và các thiết
bị điện bên trong. Một số thiết bị đƣợc điều khiển thông qua việc trò chuyện với
chatbot:
 Điều khiển mở/tắt các thiết bị dân dụng.
 Điều khiển tuyến tính các thiết bị.
 Giám sát nhiệt độ và độ ẩm trong nhà.
 Có thể mở/tắt tất cả các thiết bị cùng 1 lúc hoặc từng thiết bị.
 Đóng mở cửa bằng động cơ servo.
CHƢƠNG 1. TỔNG QUAN
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 1
Chƣơng 1. TỔNG QUAN
1.1 ĐẶT VẤN ĐỀ
Trong những năm gần đây ngƣời ta thƣờng nhắc nhiều đến AI (trí tuệ nhân
tạo) và những ứng dụng rộng rãi của chúng. Nhóm em rất thích thú khi biết những
thành tựu mà AI (trí tuệ nhân tạo) sẽ mang lại trong tƣơng lai, đặc biệt là những ứng
dụng hiệu quả của chatbot trong kinh doanh và khoa học kỹ thuật. Và để bắt kịp xu
hƣớng đó, nhóm chúng em quyết định chọn chatbot làm đối tƣợng nghiên cứu và
ứng dụng cụ thể vào điều khiển nhà thông minh.
Chatbot là một lĩnh vực của trí tuệ nhân tạo, chatbot thực hiện hội thoại thông
minh giữa máy tính với ngƣời dùng thông qua trò chuyện trực tiếp. Với việc cung
cấp thông tin cho từng ngữ cảnh để điều khiển các thiết bị khác nhau qua internet.
Đồng thời ngày nay mạng lƣới Internet đang ngày càng trở nên phổ biến, điều đó
khiến cho việc điều khiển thiết bị từ xa qua mạng Internet trở nên dễ dàng và tiện
lợi hơn.
Nhà thông minh đƣợc thiết kế sử dụng Raspberry Pi 3 cho việc điều khiển và
giám sát những thiết bị trong nhà thông qua việc giao tiếp với chatbot. Ngoài việc
điều khiển các thiết bị trong nhà bằng app android nhƣ những đề tài về smarthome
đã có, ngƣời dùng có thể giao tiếp với chatbot về mọi thứ và điều khiển thiết bị
trong gia đình thông qua việc trò chuyện với chatbot. So với việc điều khiển bằng
thao tác cứng nhắt trên các app android thông thƣờng nhƣ các đề tài về IoT đã có
trƣớc đây, ngƣời dùng có thể trò chuyện với chatbot nhƣ một trợ lí ảo giúp ngƣời
dùng quản lí và điều khiển hoạt động của ngôi nhà. Vì những lý do đó, nhóm sinh
viên quyết định thực hiện đề tài “Ứng dụng chatbot vào điều khiển nhà thông
minh”.
1.2 MỤC TIÊU
Tạo ra đƣợc chatbot giao tiếp với ngƣời dùng và thực hiện nhiệm vụ khi có
yêu cầu từ ngƣời dùng thông qua mạng internet. Đồ án đƣợc nghiên cứu, khảo sát,
xây dựng với mục định áp dụng những kiến thức đã học và tìm hiểu đƣợc để thiết
kế, tạo ra một hệ thống chatbot để điều khiển thiết bị 1 cách hoàn chỉnh.
CHƢƠNG 1. TỔNG QUAN
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 2
Một số chức năng của hệ thống điều khiển bằng hệ thống chatbot:
 Điều khiển mở/tắt các thiết bị dân dụng.
 Điều khiển tuyến tính các thiết bị.
 Giám sát nhiệt độ và độ ẩm trong nhà.
 Có thể mở/tắt tất cả các thiết bị cùng 1 lúc hoặc từng thiết bị.
1.3 NỘI DUNG NGHIÊN CỨU
 NỘI DUNG 1: Tìm hiểu về khái niệm chatbot và cách tạo ra chatbot.
 NỘI DUNG 2: Tìm hiểu về các khái niệm về API, Webhook và trang
dialogflow.com (tiền thân là API.AI).
 NỘI DUNG 3: Tìm hiểu các khái niệm intent, entity, fulfillment,.... và tạo ra
một chatbot từ Dialogflow để phục vụ đề tài.
 NỘI DUNG 4: Tìm hiểu định dạng Json và cách trích xuất dữ liệu liệu để
nhận biết yêu cầu từ ngƣời dùng.
 NỘI DUNG 5: Tìm hiểu về kit raspberry pi 3 và ngôn ngữ lập trình python.
 NỘI DUNG 6: Lập trình giao tiếp giữa raspberry pi 3 với chatbot bằng
webhook thông qua mạng internet.
 NỘI DUNG 7: Thiết kế, thi công và lập trình khối điều khiển công suất, cảm
biến trong nhà.
 NỘI DUNG 8: Thiết kế, thi công mô hình nhà thông minh.
 NỘI DUNG 9: Chạy thử nghiệm và cân chỉnh hệ thống.
 NỘI DUNG 10: Đánh giá kết quả thực hiện.
1.4 GIỚI HẠN
 Tạo ra chatbot cơ bản có thể trò chuyện với ngƣời dùng và thực hiện điều
khiển thiết bị trong nhà khi có yêu cầu từ ngƣời dùng.
 Thiết kế mô hình ngôi nhà thông minh.
 Giám sát ngôi nhà bằng cảm biến và giao tiếp với ngƣời dùng qua chatbot.
 Dùng chatbot để điều khiển đèn, quạt, đóng mở cửa.... để mô phỏng ngôi nhà
thông minh.
 Hệ thống hoạt động thông qua mạng internet, chatbot giao tiếp đơn giản.
CHƢƠNG 1. TỔNG QUAN
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 3
1.5 BỐ CỤC
 Chƣơng 1: Tổng Quan
Chƣơng này trình bày đặt vấn đề dẫn nhập lý do chọn đề tài, mục tiêu, nội
dung nghiên cứu, các giới hạn thông số và bố cục đồ án.
 Chƣơng 2: Cơ Sở Lý Thuyết
Chƣơng này trình bày tổng quát về các lý thuyết có liên quan đến các vấn đề
mà đề tài sẽ dùng để thực hiện thiết kế, thi công cho đề tài. Tìm hiểu về nền tảng
Dialogflow.com, các khái niệm API, webhook và tìm hiểu rõ về kit Raspberry pi 3.
 Chƣơng 3: Thiết Kế và Tính Toán
Giới thiệu tổng quan về các yêu cầu của đề tài mà mình thiết kế và các tính
toán, thiết kế sơ đồ khối hệ thống và các khối .
 Chƣơng 4: Thi Công Hệ Thống
Chƣơng này trình bày kết quả thi công trên phần mềm và phần cứng, quá
trình thi công mạch PCB. Xây dựng mô hình nhà thông minh và thực hiện kết nối
các module với nhau.
 Chƣơng 5: Kết Quả, Nhận Xét và Đánh Giá
Chƣơng này trình bày kết quả của cả quá trình nghiên cứu làm đề tài, nêu lên
những kiến thức đã học đƣợc từ quá trình làm đồ án, nhận xét và đánh giá sản
phẩm.
 Chƣơng 6: Kết Luận và Hƣớng Phát Triển
Trình bày ngắn gọn những kết quả thu đƣợc từ đó tiến hành kết luận, đánh
giá sản phẩm có đạt hay không, từ đó đƣa ra hƣớng phát triển để tăng chức năng,
khả năng cho sản phẩm.
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 4
Chƣơng 2. CƠ SỞ LÝ THUYẾT
2.1 TỔNG QUAN VỀ CHATBOT
2.1.1 Khái niệm về chatbot
Định nghĩa một cách đơn giản nhất, chatbot là một chƣơng trình máy tính
tƣơng tác với ngƣời dùng bằng ngôn ngữ tự nhiên dƣới một giao diện đơn giản, âm
thanh hoặc dƣới dạng tin nhắn.
Hình 2.1: Khái niệm chatbot
Về cơ bản, chatbot là một hình thức thô sơ của phần mềm trí tuệ nhân tạo. Nó
hoạt động độc lập, có thể tự động trả lời những câu hỏi hoặc xử lý tình huống càng
thật càng tốt. Phạm vi và sự phức tạp của chatbot đƣợc xác định bởi thuật toán của
ngƣời tạo nên chúng.
Chatbot là sự kết hợp của các kịch bản có trƣớc và tự học trong quá trình
tƣơng tác. Với các câu hỏi đƣợc đặt ra, chatbot sẽ dự đoán và phản hồi chính xác
nhất có thể. Nếu tình huống đó chƣa xảy ra (không có trong dữ liệu), chatbot sẽ bỏ
qua nhƣng sẽ đồng thời “bắt chƣớc” để áp dụng cho các cuộc trò chuyện thƣờng
xuyên (lặp đi lặp lại nhiều lần) về sau.
2.1.2 Phân loại chatbot
Theo đúng cách mà chúng tƣơng tác với ngƣời dùng, các chatbot thƣờng đƣợc
chia thành 2 loại:
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 5
- Audiotory (âm thanh):
+ Siri (Apple).
+ Google Assistant (Google).
+ Cortana (Microsoft).
+ Javis của Tony – Stark.
- Textual (tin nhắn):
+ Thời trang - tƣ vấn quần áo (H&M).
+ Thực phẩm - order pizza (Dominos Pizza).
+ Làm đẹp - stylish cá nhân (Sephora).
+ Giao thông - thông tin tàu điện vùng Kanto (qmau.me).
2.1.3 Xử lý ngôn ngữ tự nhiên (Natural Language Processing)
Để chatbot có thể hiểu đƣợc ngƣời dùng nói gì thì ta phải dùng đến NLP
(Natural Language Processing). Xử lý ngôn ngữ tự nhiên (NLP) là một nhánh của
Trí tuệ nhân tạo, tập trung vào việc nghiên cứu sự tƣơng tác giữa máy tính và ngôn
ngữ tự nhiên của con ngƣời. Mục tiêu của lĩnh vực này là giúp máy tính hiểu và
thực hiện hiệu quả những nhiệm vụ liên quan đến ngôn ngữ của con ngƣời nhƣ:
tƣơng tác giữa ngƣời và máy, cải thiện hiệu quả giao tiếp giữa con ngƣời với con
ngƣời, hoặc đơn giản là nâng cao hiệu quả xử lý văn bản và lời nói. NLP đƣợc
Dialogflow sử dụng để tạo ra những chatbot thông minh.
2.2 TỔNG QUAN VỀ API
2.2.1 Khái niệm về API
Hình 2.2: Khái niệm về API
API (Application Programming Interface) là một giao diện lập trình ứng
dụng mà một hệ thống máy tính hay ứng dụng cung cấp để cho phép các yêu cầu
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 6
dịch vụ có thể đƣợc tạo ra từ các chƣơng trình máy tính khác, và/hoặc cho phép dữ
liệu có thể đƣợc trao đổi qua lại giữa chúng.
2.2.2 Mô hình của một API
API bao gồm ba phần:
- Ngƣời dùng: ngƣời đƣa ra yêu cầu.
- Máy khách: máy tính gửi yêu cầu tới máy chủ.
- Máy chủ: máy tính phản hồi yêu cầu.
Máy chủ đƣợc xây dựng nó thu thập và lƣu trữ dữ liệu. Khi máy chủ đó đang
chạy, các lập trình viên tạo ra dữ liệu, bao gồm các end point (điểm cuối) nơi có thể
tìm thấy dữ liệu cụ thể. Sau đó, ngƣời dùng bên ngoài có thể truy vấn (hoặc tìm
kiếm) dữ liệu trên máy chủ hoặc xây dựng một chƣơng trình chạy tìm kiếm trên cơ
sở dữ liệu và biến thông tin đó thành định dạng có thể sử dụng khác.
Nhiều công ty sử dụng các API mở từ các công ty lớn hơn nhƣ Google và
Facebook để truy cập dữ liệu không có sẵn. Trong trƣờng hợp này các API làm
giảm đáng kể các rào cản phát triển đối với các công ty nhỏ hơn.
2.2.3 Các tác vụ thực hiện qua API
API là cách để hai máy tính (phần mềm) giao tiếp với nhau. Có bốn loại hành
động mà API có thể thực hiện:
 GET: yêu cầu dữ liệu từ máy chủ.
 POST: gửi các thay đổi từ máy khách đến máy chủ khi thêm thông tin
vào máy chủ, nhƣ tạo một mục mới.
 PUT: sửa đổi hoặc thêm vào thông tin hiện có.
 DELETE: xóa thông tin hiện có.
Khi bạn kết hợp các end point (điểm cuối) với các hành động này, bạn có thể
tìm kiếm hoặc cập nhật mọi thông tin có sẵn trên API. Bạn sẽ cần phải kiểm tra tài
liệu API để tìm hiểu cách mã hóa các hành động này, vì chúng hoàn toàn khác nhau.
- Thực hiện một yêu cầu trên một máy chủ:
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 7
HTTP: giao thức truyền siêu văn bản. Đây là cách bạn truy cập trang web
bằng cách nhập URL vào thanh tìm kiếm trong trình duyệt của bạn. Đây là một cách
thực sự dễ dàng để truy cập dữ liệu.
Định dạng văn bản: XML, JSON. Đây là những ngôn ngữ chính để truy cập
dữ liệu qua API. Khi bạn nhận đƣợc dữ liệu của mình, bạn sẽ cần phải biết đọc mã
XML hoặc JSON để hiểu những gì máy chủ đã cung cấp cho bạn.
- Ý tƣởng và các bƣớc trong quy trình API:
 Hầu hết các API đều yêu cầu key (mã khóa) API. Khi bạn tìm thấy API
bạn muốn sử dụng, hãy xem tài liệu về các yêu cầu truy cập. Hầu hết
các API sẽ yêu cầu bạn hoàn tất xác minh danh tính, chẳng hạn nhƣ
đăng nhập bằng tài khoản Google của bạn. Bạn sẽ nhận đƣợc một chuỗi
ký tự và số duy nhất để sử dụng khi truy cập API, thay vì chỉ thêm
email và mật khẩu của bạn.
 Các công cụ sẵn có (và thƣờng miễn phí) giúp bạn điều hƣớng các yêu
cầu của mình để truy cập các API hiện có bằng key API mà bạn nhận
đƣợc. Bạn vẫn sẽ cần phải biết một số cú pháp từ tài liệu, nhƣng có rất
ít kiến thức mã hóa cần thiết.
 Cách tốt nhất tiếp theo để lấy dữ liệu từ API là tạo URL từ tài liệu API
hiện có.
Nhìn chung, yêu cầu API trông không khác nhiều so với URL trình duyệt
thông thƣờng, nhƣng dữ liệu đƣợc trả về sẽ ở dạng dễ đọc cho máy tính.
2.3 WEBHOOK
2.3.1 Khái niệm Webhook
Webhook là một HTTP callback: là 1 công cụ để truy vấn và lƣu trữ dữ liệu
của một Event xác định. Khi một trong những sự kiện đƣợc kích hoạt, nó sẽ gửi một
HTTP POST đến URL đã đƣợc cấu hình webhook.
2.3.2 Hoạt động của Webhook
Một ứng dụng web đang triển khai Webhook sẽ POST một thông báo tới một
URL khi một event xảy ra. Events này do ngƣời dùng cấu hình và URL này đƣợc
ngƣời dùng đăng ký với trang web. Hay nói cách khác, bằng cách cho phép ngƣời
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 8
dùng chỉ định một URL cho các sự kiện khác nhau, ứng dụng sẽ POST dữ liệu tới
các URL đó khi các sự kiện xảy ra. Sau khi nhận đƣợc thông báo thành công,
webhook sẽ trả về status code 200 OK về cho trang web.
Những đặc điểm của webhook:
 Push: nhận dữ liệu theo thời gian thực
Bất cứ khi nào một events đã đƣợc cấu hình trƣớc xảy ra thì ngay lập
tức dữ liệu sẽ gửi đến URL đã đăng ký ngay lập tức với thời gian thực.
 Pipes: nhận dữ liệu và truyền đi
Một Pipe xảy ra khi WebHook của bạn không chỉ nhận dữ liệu thời
gian thực, mà còn tiếp tục thực hiện khi có một event mới, kích hoạt các
hành động không liên quan đến sự kiện ban đầu.
 Plugins: xử lý dữ liệu và trả lại thứ gì đó
Đây là nơi mà toàn bộ web trở thành một nền tảng lập trình. Bạn có thể
sử dụng Webhook này để cho phép ngƣời khác mở rộng ứng dụng của
bạn. Ý tƣởng chung là một ứng dụng web gửi dữ liệu qua Webhook cũng sẽ
sử dụng phản hồi từ webhooks để sửa đổi dữ liệu của riêng nó. Theo cách
này, webhook thay đổi ứng dụng của bạn nếu bạn muốn cho phép những
ngƣời khác thực sự mở rộng và nâng cao khả năng của ứng dụng của bạn.
2.4 TỔNG QUAN VỀ DIALOGFLOW
2.4.1 Giới thiệu về Dialogflow
Hình 2.3: Giới thiệu Dialogflow
Dialogflow.com (tiền thân là API.AI) là một API do Google cung cấp nhằm
giúp các lập trình viên dễ dàng hơn khi lập trình các sản phẩm có giao tiếp giữa
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 9
ngƣời dùng với sản phẩm thông qua các đoạn hội thoại bằng văn bản (text) hoặc
giọng nói (voice).
Dialogflow là nền tảng về công nghệ tƣơng tác giữa con ngƣời và máy tính
dựa trên các cuộc trò truyện bằng ngôn ngữ tự nhiên và có thể đƣợc sử dụng để phát
hiện các từ khóa và ý định trong câu của ngƣời dùng. Vai trò của nó là giúp xây
dựng chatbots sử dụng Machine Learning.
Với DialogFlow hỗ trợ các tích hợp với các nền tảng, dịch vụ khác nhau nhƣ
Facebook Messenger, các nền tảng Google, Skype, v.v... chatbot của bạn sẽ làm
việc với mọi nền tảng này nếu bạn thiết lập tích hợp đúng cách.
Dialogflow sử dụng trí tuệ nhân tạo (AI) giúp phân tích ngôn ngữ tự nhiên để
hiểu đƣợc những gì ngƣời dùng đƣa vào.
Hiện Dialogflow có 2 phiên bản:
- Standad: Hoàn toàn miễn phí để sử dụng
- Và Enterprise: Cần trả một ít tiền
2.4.2 Cấu trúc của Dialogflow
Dialogflow gồm có 5 phần chính là Agent, Intent, Entities, Fulfillment và
Intergrations.
Hình 2.4: Các phần của Dialogflow
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 10
a. Agent
Agent là khái niệm đƣợc dùng để đại diện cho một mô-đun (module) NLU
(Natural Language Understanding – Phân tích để hiểu ngôn ngữ tự nhiên).
Agent giúp bạn phân tích những những gì ngƣời dùng đƣa vào (text hoặc
voice) để chuyển thành những dữ liệu mà bạn có thể xử lý đƣợc bằng lập trình.
Bạn sẽ sử dụng một Agent để quản lý các đoạn hội thoại thông qua Intents,
Entities.
b. Intent
Intent là đại diện cho một ánh xạ giữa những gì ngƣời dùng đƣa vào và hành
động sẽ đƣợc thực hiện bởi phần mềm. Một Intent là một tập những gì ngƣời dùng
nói mà chúng có cùng một ý nghĩa.
Hình 2.5: Các mục trong một Intent
Giao diện intent có các phần nhƣ sau:
 Contexts
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 11
 Events
 Training phrases
 Action and parameters
 Responses
 Fulfillment
Contexts
Contexts thể hiện ngữ cảnh hiện tại của yêu cầu ngƣời dùng. Điều này giúp
cho chatbot hiểu ngƣời dùng đang nói gì bằng việc phân biệt các cụm từ mơ hồ
hoặc có ý nghĩa khác nhau. Trong một Intent của Dialogflow có input context và
output context nhƣ hình dƣới đây:
Hình 2.6: Hình ảnh mục context
Input context có nhiệm vụ giúp Dialogflow xác định Intent này chỉ đƣợc thực
hiện khi đang có các context tƣơng ứng.
Output context đƣợc tạo ra khi một intent đƣợc gọi và dùng để xác định đâu là
intent tiếp theo.
Mặc định, một context của Dialogflow sẽ hết hạn sau 5 lần requests hoặc 10
phút kể từ khi nó đƣợc tạo ra
Events
Events là một tính năng cho phép bạn gọi các intents theo tên sự kiện thay vì
truy vấn từ ngƣời dùng. Dƣới đây là các tên event đƣợc Dialogflow hỗ trợ khi ngƣời
dùng click vào các nền tảng nhắn tin.
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 12
Hình 2.7: Hình ảnh mục Events
Training Phrases
Là những gì mà ngƣời dùng có thể nói để thực hiện một yêu cầu nhất định.
Có 2 loại user say trong Dialogflow:
@ Là những mẫu (template) văn bản mà nó sẽ tham chiếu đến các
entities.
“ Là những ví dụ (example) mà ngƣời dùng sẽ có thể nói.
Hình 2.8: Hình ảnh mục Training Phrases
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 13
Mặc dù Dialogflow hỗ trợ cả hai loại hình trên, nhƣng khuyến cáo chúng ta
chỉ nên sử dụng loại số 2 (example) vì nó giúp cho việc học cũng nhƣ xử lý của
Dialogflow hoạt động nhanh & tối ƣu hơn. Ngoài ra, chúng ta hãy ghi nhớ khi tạo
intents, nếu nhập đƣợc càng nhiều các ví dụ ở user say thì càng giúp cho Chatbot
càng “thông minh” hơn.
Action and parameters
Action (hành động) chính là giá trị mà Dialogflow hỗ trợ để giúp lập trình viên
phân biệt đƣợc trong trƣờng hợp này đâu là các văn bản liên quan đến Intent đề cập
và đâu là các văn bản khác. Đi kèm với Action là các Parameter (tham số).
Hình 2.9: Hình ảnh của mục Action & Parameters
Parameters là các tham số thƣờng đƣợc trích xuất trong câu nói của ngƣời
dùng, đƣợc liên kết với các entities. Mỗi tham số là giá trị đƣợc trích xuất từ văn
bản của ngƣời dùng thông qua việc sử dụng các entities tƣơng ứng, ví dụ: Tham số
address, kiểu @sys.location, khi đó, trong văn bản của ngƣời dùng có Hà Nội, hay
Đà Nẵng, Tokyo, New York, Paris,… thì sẽ đƣợc Dialogflow xử lý để gán vào cho
tham số address.
Khi định nghĩa các tham số, có các thông tin mà chúng ta cần quan tâm:
 Constant: Là giá trị mà chúng ta nhập vào ô value, tham số sẽ luôn luôn
mang giá trị này.
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 14
 Default: Là giá trị mặc định đƣợc gán cho tham số nếu trong văn bản
của ngƣời dùng không đề cập đến.
 IsList: giúp Dialogflow xác định cả 3 giá trị sẽ đƣợc gán vào cho cùng
1 tham số.
 Required: Khi required đƣợc lựa chọn, nếu trong văn bản của ngƣời
dùng mà Dialogflow không tìm đƣợc giá trị để gán vào cho tham số,
Dialogflow sẽ đánh dấu để yêu cầu ngƣời dùng đƣa vào. Khi đó câu hỏi
từ chatbot để yêu cầu ngƣời dùng cung cấp thông tin sẽ đƣợc viết tại
mục Prompt.
Respone
Respone là những câu trả lời tƣơng ứng với những câu hỏi ngƣời dùng đặt ra ở
trên, chúng ta có thể sử dụng giá trị của parameters để trả lời cho ngƣời dùng. Để sử
dụng , chúng ta sử dụng theo định dạng $parameter_name.
Hình 2.10: Hình ảnh mục Responses
Fulfillment
Cài đặt để cho phép bạn gửi thông tin từ intent đó khi nó đƣợc ngƣời dùng yêu
cầu đến web service và nhận thông tin xử lí từ nó. Thông tin đƣợc gửi dƣới định
dạng Json có cấu trúc nhƣ sau:
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 15
Hình 2.11: Hình ảnh của mục Fulfillment
Trong đó, có 4 mục chính là:
 responseId : Id duy nhất cho mỗi yêu cầu.
 session: Id làm việc duy nhất.
 queryResult: Kết quả của yêu cầu đoạn hội thoại.
 originalDetectIntentRequest: Yêu cầu đến từ một nền tảng tích hợp.
c. Entities
Khái niệm
Entities là những công cụ đƣợc sử dụng để trích xuất các giá trị của tham số từ
ngôn ngữ tự nhiên. Bất kỳ những gì mà bạn muốn biết từ nội dung của ngƣời dùng
đều sẽ có một Entity tƣơng ứng.
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 16
Hình 2.12: Hình ảnh của mục Entities
Phân loại
Dialogflow định nghĩa ra ba loại Entities:
 System (là các entities đƣợc tạo bởi Dialogflow)
 Developer (là các entities đƣợc tạo bởi lập trình viên)
 User (là entities đƣợc tạo ra cho mỗi lần hỏi của ngƣời dùng)
System Entities
Đây là những entities đƣợc tạo sẵn bởi Dialogflow (giống nhƣ trong ngôn ngữ
lập trình thì String, Number,… là những kiểu dữ liệu đƣợc tạo sẵn bởi ngôn ngữ lập
trình) để tạo điều kiện cho lập trình viên dễ dàng hơn trong việc xử lý những nghiệp
vụ cơ bản của mọi loại Chatbot. Tùy thuộc vào ngôn ngữ là Tiếng Anh, tiếng Pháp,
hay tiếng Nhật,… mà số lƣợng system entities của mỗi ngôn ngữ sẽ khác nhau.
Developer Entities
Đây là những entities do lập trình viên tạo ra.
Cấu tạo của entities
Cấu tạo entities kiểu mapping gồm 2 thành phần:
 Reference value (Là giá trị mà developer cần nhận đƣợc)
 Synonyms (Là những từ đồng nghĩa)
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 17
Ý nghĩa của nó là khi ngƣời dùng nói có đề cập đến bất kỳ văn bản nào giống
nhƣ những văn bản trong phần synonyms thì nó đều đƣợc ánh xạ về giá trị
reference.
d. Fulfillment
Fulfillment (hay Webhook) là một API ở Backend mà chúng ta cần cung cấp
để Dialogflow gọi đến khi cần xử lý nghiệp vụ trƣớc khi Dialogflow trả lời lại cho
ngƣời dùng. Service của bạn sẽ nhận POST request từ Dialogflow bất kỳ khi nào
ngƣời dùng nhắn tin đến Dialogflow.
e. Integrations
Đây là mục để tích hợp Dialogflow vào các nền tảng nhắn tin khác. Có rất
nhiều nền tảng đƣợc Dialogflow hỗ trợ.
Hình 2.13: Các nền tảng tích hợp trong Integrations
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 18
2.5 RASPBERRY PI 3
2.5.1 Giới thiệu về Board Raspberry Pi
Hình 2.14: Board Raspberry Pi
Raspberry Pi là một chiếc máy tính tí hon giá chỉ từ 35$ chạy hệ điều hành
Linux ra mắt vào tháng 2 năm 2012. Ban đầu Raspberry Pi đƣợc phát triển dựa trên
ý tƣởng tiến sĩ Eben Upton tại đại học Cambridge muốn tạo ra một chiếc máy tính
giá rẻ để học sinh có thể dễ dàng tiếp cận và khám phá thế giới tin học. Raspberry
Pi (RPi) là một máy tính siêu nhỏ, chỉ có kích thƣớc nhƣ 1 chiếc thẻ ATM rút tiền.
Bạn chỉ cần 1 bàn phím, 1 tivi hoặc 1 màn hình có cổng HDMI/DVI, 1 nguồn USB
5V và 1 dây micro USB là đã có thể sử dụng RPi nhƣ 1 máy tính bình thƣờng. Với
RPi, bạn có thể sử dụng các ứng dụng văn phòng, nghe nhạc, xem phim độ nét cao
(tới 1024p).
2.5.2 Phần cứng của Raspberry Pi 3
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 19
Hình 2.15: Phần cứng của Raspberry Pi
Thông số kỹ thuật Nội dung
Nguồn cung cấp
5V DC, dòng cấp tối thiểu
800 mA.
SoC Broadcom BCM2836.
CPU
ARM Cortex-A7 lõi tứ,
xung nhịp 900 MHz.
GPU
Broadcom VideoCore IV
xung nhịp 250 MHz.
OpenGL ES 2.0 (tốc độ
24 GFLOPS).
MPEG-2 và VC-1,
1080p30 H.264/MPEG-4
AVC.
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 20
RAM
1 Gb SDRAM (đƣợc chia
sẻ giữa GPU và CPU).
Cổng USB 4 cổng USB 2.0.
Ngõ vào video
Cổng CSI (15 chân) sử
dụng chung với module
camera.
Ngõ ra video HDMI (rev 1.3.và 1.4).
Ngõ ra audio
Cổng audio 3.5 mm hoặc
cổng HDMI.
Khe cắm thẻ nhớ Hỗ trợ thẻ MicroSD
Kết nối mạng
Cổng Ethernet 10/100
Mbit/s, chuẩn RJ45.
Ngõ ra khác 17 chân GPIO.
Bảng 2.1: Bảng thông số kỹ thuật của Raspberry Pi
Trung tâm của RPi là vi xử lý Broadcom BCM2835 chạy ở tốc độ 700mHz.
Đây là vi xử lý SoC (system-on-chip) tức là hầu hết mọi thành phần của hệ thống
gồm CPU, GPU cũng nhƣ audio, communication chip đều đƣợc tích hợp trong một.
Chip SoC này nằm ngay bên dƣới chip memory Hynix 512 MB màu đen ở giữa
board.
a. Nguồn cung cấp
Kit Raspberry Pi 3 model B (gọi tắt là kit raspberry Pi 3) đƣợc cấp nguồn qua
cổng microUSB nhƣ hình 2.1, với mức điện áp là 5V DC, dòng cấp khuyến nghị là
800 mA khi không gắn ngoại vi. Các trƣờng hợp còn lại, ta nên sử dụng nguồn có
dòng cấp từ 1000 mA đến 2000 mA.
b. Các cổng giao tiếp
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 21
Hình 2.16: Các cổng giao tiếp trên Raspberry
Trên kit sử dụng các cổng giao tiếp sau:
 HDMI: Hỗ trợ các độ phân giải từ 640x350 đến 1920x1200 theo cả 2
chuẩn màu PAL và NTSC. Dòng cấp cho cổng HDMI là 50 mA.
 CSI: Trên kit có cổng kết nối với module camera thƣờng hoặc camera
NoIR (dành riêng cho kit Raspberry Pi) gồm 15 chân. Dòng cấp cho
camera là khoảng 250 mA.
 Audio: Kit hỗ trợ xuất âm thanh qua cổng Audio chuẩn 3.5 mm.
 Cổng Ethernet: Chuẩn giao tiếp RJ45, tốc độ 10/100 Mbit/s.
 Khe cắm thẻ nhớ microSD: Mọi dữ liệu, bao gồm cả hệ điều hành của
kit đƣợc lƣu trữ trên thẻ nhớ. Ta nên sử dụng thẻ nhớ microSD class 10,
dung lƣợng tối thiểu là 8Gb để đảm bảo tốc độ cũng nhƣ không gian
lƣu trữ.
 Cổng USB: Trên kit có 4 cổng USB chuẩn A. Mặc định dòng cấp tối đa
ở các cổng này là 600 mA. Kit sử dụng IC AP2553W6 để quản lý năng
lƣợng trên các cổng USB, do đó ta có thể thay đổi dòng cung cấp từ
0.6A đến 1.2A bằng cách thay đổi giá trị trong tập tin /boot/config.txt.
Việc cấu hình sai có thể gây hại cho kit.
 TFT Touch Screen: nơi đây sẽ giúp cho bạn có thể kết nối Raspberry
Pi với màn hình cảm ứng để hiển thị và sử dụng Raspberry một cách
trực quan nhất. Chúng ta có thể thực hiện các tác vụ tƣơng đƣơng nhƣ
khi sử dụng chuột và bàn phím.
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 22
 TV: dùng để kết nối và phát tín hiệu hình ảnh lên Tivi.
c. Các chân giao tiếp GPIO của kit
Raspberry PI 2 có 40 chân giao tiếp nhƣ hình 2.17 bên dƣới. Các GPIO có thể
đƣợc sử dụng để điều khiển ngoại vi nhƣ LEDs, động cơ, relays,…Nó cũng có thể
đƣợc sử dụng để đọc trạng thái của nút nhấn, switch, hoặc các cảm biến nhƣ cảm
biến nhiệt độ, độ ẩm, các module RFID, module cảm biến gia tốc,…
Lƣu ý là các chân GPIO xuất tín hiệu ở mức điện áp là 3.3V, tổng dòng cấp
đồng thời cho tất cả các chân là 50 mA. Nhƣ vậy mỗi chân GPIO có dòng ngõ ra
dao động trong khoảng 2mA đến 16 mA. GPIO không đƣợc thiết kế để kéo tải có
công suất lớn. Chân nguồn số 2 và số 4 có thể sử dụng để cấp nguồn. Các chân này
có dòng cấp phụ thuộc vào nguồn cung cấp cho kit hoạt động. Ví dụ: nguồn cung
cấp là 1000 mA thì chúng có thể cung cấp dòng vào khoảng 300 mA. Để lập trình
giao tiếp có các GPIO này, ta cần có thƣ viện chân của chúng. Tùy thuộc vào ngôn
ngữ lập trình đang sử dụng là C hay Python mà có thƣ viện tƣơng ứng. Đối với
ngôn ngữ C, ta cài đặt thƣ viện BCM2835 do Mike McCauley phát triển, tƣơng ứng
với Python là thƣ viện RPi.GPIO.
Hình 2.17: Sơ đồ chân GPIO
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 23
GPIO: Raspberry Pi cung cấp nhiều cổng GPIO, giao tiếp SPI, I2C, Serial.
Các cổng GPIO đƣợc sử dụng để xuất/nhận giá trị 0/1 ra/vào từ bên ngoài. Giao tiếp
SPI, I2C, Serial có thể đƣợc dùng để kết nối trực tiếp với các vi điều khiển
khác. Đặc biệt phù hợp cho những ai cần điều khiển các thiết bị điện tử ngoại vi.
Hình 2.18: Hình ảnh thực tế các chân GPIO
2.5.3 Hệ điều hành Raspbian cho kit Raspberry Pi
Các Raspberry Pi sử dụng hệ điều hành dựa trên nền tảng Linux. Phần cứng
GPU đƣợc truy cập thông qua Image Firmware đƣợc nạp vào GPU vào lúc khởi
động từ thẻ SD. Linux là tên gọi của một họ các hệ điều hành mã nguồn mở. Lúc
đầu, nó đƣợc phát triển để chạy trên các máy tính PC dựa trên kiến trúc Intel X86
nhƣng hiện nay, Linux đã đƣợc port qua nhiều kiến trúc khác. Cái tên Linux đƣợc
gọi do nó sử dụng nhân hệ điều hành là Linux kernel. Linux kernel đƣợc giới thiệu
lần đầu vào tháng 10 năm 1991, đƣợc viết và duy trì bởi Linus Torvalds. Từ Linux,
ngƣời ta đã phát triển nhiều hệ điều hành khác nhau nhƣ Ubuntu, Debian, CentOS,
Red Hat,…gọi chung là các bản phân phối.
Raspbian là một bản phân phối mã nguồn mở, đƣợc xây dựng dựa trên
Debian, nhƣng đƣợc tối ƣu để phù hợp với phần cứng của kit Raspberry Pi. Phiên
bản đầu tiên ra đời vào tháng 6 năm 2012. Hiện nay, Raspbian vẫn đang là một
trong những bản phân phối phổ biến và đƣợc cộng đồng hỗ trợ nhiều nhất dành cho
Raspberry Pi, với hơn 35000 gói phần mềm có sẵn.
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 24
Raspbian sử dụng môi trƣờng Desktop (Desktop Evironments) là MATE. Nó
đƣợc phát triển từ giao diện GNOME 2, cung cấp một giao diện ngƣời dùng (GUI)
hoàn chỉnh bằng cách sử dụng chung một toolkit và thƣ viện để xây dựng các thành
phần đồ họa.
Hình 2.19: Giao diện hệ điều hành Raspbian
Trên kit Raspberry Pi, quá trình boot hệ điều hành Raspbian đƣợc trợ giúp bởi
GPU nằm trên SoC. GPU chứa một lõi RISC nhỏ để có thể chạy các đoạn code nằm
trên ROM của nó. Nhờ những đoạn code này, GPU có thể khởi tạo cho chính bản
thân nó cũng nhƣ cho thẻ nhớ SD-nơi chứa hệ điều hành của kit.
2.6 ĐỘNG CƠ SERVO
2.6.1 Giới thiệu động cơ servo
Servo là một dạng động cơ điện đặc biệt. Không giống nhƣ động cơ thông
thƣờng cứ cắm điện vào là quay liên tục, servo chỉ quay khi đƣợc điều khiển (bằng
xung PWM) với góc quay nằm trong khoảng bất kì từ 0o -
180o
, tuy nhiên còn có
loại quay đƣợc từ 0o -
360o
. Mỗi loại servo có kích thƣớc, khối lƣợng và cấu tạo
khác nhau. Có loại thì nặng chỉ 9g (chủ yếu dùng trên máy bay mô mình), có loại
thì sở hữu một momen lực lớn (vài chục Newton/m), hoặc có loại thì khỏe và nhông
sắc chắc chắn,...
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 25
Hình 2.20: Hình ảnh động cơ Servo
2.6.2 Nguyên lý hoạt động của động cơ servo
Động cơ servo đƣợc thiết kế những hệ thống hồi tiếp vòng kín. Tín hiệu ra của
động cơ đƣợc nối với một mạch điều khiển. Khi động cơ quay, vận tốc và vị trí sẽ
đƣợc hồi tiếp về mạch điều khiển này. Nếu có bầt kỳ lý do nào ngăn cản chuyển
động quay của động cơ, cơ cấu hồi tiếp sẽ nhận thấy tín hiệu ra chƣa đạt đƣợc vị trí
mong muốn. Mạch điều khiển tiếp tục chỉnh sai lệch cho động cơ đạt đƣợc điểm
chính xác.
- Sơ đồ chân:
Chân Màu (thƣờng gặp)
VCC (+5v) Đỏ
GND Đen, Nâu
Tín hiệu điều khiển Cam, Vàng
Bảng 2.2: Các chân của Servo
- Điều khiển động cơ servo bằng pwm:
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 26
Hình 2.21: Điều khiển động cơ servo bằng Duty Cycle
- Công thức tính:
Duty Cycle =
- Quy định góc quay:
Duty Cycle Góc quay
2.5 % 00
7.5 % 900
12.5 % 1800
Bảng 2.3: Hình ảnh xung tƣơng ứng với góc quay
Duty Cycle là phần trăm ở mức cao của xung trong 1 chu kỳ xung.
Ví dụ: tần số f = 50 hz => T = 1/f = 1/50 = 20 ms.
Duty Cycle = time/20ms = 2.5% => time = 0.5 ms (góc 0o
).
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 27
2.7 CẢM BIẾN NHIỆT ĐỘ DHT11
DHT11 Là cảm biến nhiệt độ, độ ẩm rất thông dụng hiện nay, lấy dữ liệu
thông qua giao tiếp 1-wire ( giao tiếp digital 1-wire truyền dữ liệu duy nhất). Cảm
biến đƣợc tích hợp bộ tiền xử lý tín hiệu giúp dữ liệu nhận về đƣợc chính xác mà
không cần phải qua bất kỳ tính toán nào.
Đặc điểm:
- Điện áp hoạt động : 3V - 5V (DC)
- Dải độ ẩm hoạt động : 20% - 90% RH, sai số ±5%RH
- Dải nhiệt độ hoạt động : 0°C ~ 50°C, sai số ±2°C
- Tần số lấy mẫu tối đa: 1 Hz
- Khoảng cách truyển tối đa: 20m
Sơ đồ chân Cảm biến DHT11 gồm 2 chân cấp nguồn, và 1 chân tín hiệu. Xem
hình dƣới:
Hình 2.22: Cảm biến nhiệt độ - độ ẩm DHT11
2.8 MODULE RELAY 2 CHANNEL 5V
Module Relay 2-Channel 5V đƣợc dùng nhiều trong các ứng dụng đóng ngắt
các thiết bị tiêu thụ dòng điện lớn (<10A). Module có thể đóng ngắt cùng lúc hai
kênh bằng tín hiệu điều khiển ( với mức điện áp 3V3 hoặc 5V) từ các vi điều khiển
khác nhau nhƣ: Arduino, 8051, AVR, PIC, DSP, ARM, ARM, MSP430, logic TTL,
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 28
đồng thời module đƣợc cách ly bằng optocoupler giúp bảo vệ tốt hơn cho các vi
điều khiển.
Hình 2.23: Module Relay 2 channel 5V
Module đƣợc kết nối với các board điều khiển bằng 4 chân header nhƣ sau:
- VCC cung cấp nguồn cho các opto.
- GND kết nối với GND của board điều khiển.
- IN1 và IN2 dùng để điều khiển relay 1 và relay 2, tích cực mức thấp
Ngoài ra còn một 3 chân header đƣợc dùng để cấp nguồn cho relay, header
này sẽ có một jumper dùng để kết nối chân VCC với chân RY_VCC mục đích dùng
chung nguồn VCC (5V) từ header 4 chân cho relay, thông thƣờng jumper đƣợc nối
lại với nhau. Nếu nhƣ muốn cách ly tín hiệu điều khiển với nguồn cấp cho relay thì
có thể bỏ jumper này ra và cấp nguồn riêng 5V cho chân RY_VCC.
Thông số kỹ thuật:
 Đóng ngắt đƣợc dòng điện cao: AC250V 10A, DC30V 10A
 2 led báo trạng thái relay
 Điện áp điều khiển: 5V
 Mạch cách ly bằng opto
 Kích thƣớc: 50x45 mm
2.9 MOSFET
Mosfet là Transistor hiệu ứng trƣờng (Metal Oxide Semiconductor Field
Effect Transistor) là một Transistor đặc biệt có cấu tạo và hoạt động khác với
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 29
Transistor thông thƣờng mà ta đã biết. Mosfet thƣờng có công suất lớn hơn rất
nhiều so với BJT. Đối với tín hiệu 1 chiều thì nó coi nhƣ là 1 khóa đóng mở. Mosfet
có nguyên tắc hoạt động dựa trên hiệu ứng từ trƣờng để tạo ra dòng điện, là linh
kiện có trở kháng đầu vào lớn thích hợp cho khuyếch đại các nguồn tín hiệu yếu.
Hình 2.24: Hình ảnh Mosfet
2.9.1 Cấu tạo Mosfet
Mosfet có cấu trúc bán dẫn cho phép điều khiển bằng điện áp với dòng điện
điều khiển cực nhỏ.
Hình 2.25: Các cực của Mosfet
Cấu tạo của Mosfet ngƣợc Kênh N
 G : Gate gọi là cực cổng
 S : Source gọi là cực nguồn
 D : Drain gọi là cực máng
Trong đó : G là cực điều khiển đƣợc cách lý hoàn toàn với cấu trúc bán dẫn
còn lại bởi lớp điện môi cực mỏng nhƣng có độ cách điện cực lớn dioxit-silic
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 30
(Sio2). Hai cực còn lại là cực gốc (S) và cực máng (D). Cực máng là cực đón các
hạt mang điện.
Mosfet có điện trở giữa cực G với cực S và giữa cực G với cực D là vô cùng
lớn , còn điện trở giữa cực D và cực S phụ thuộc vào điện áp chênh lệch giữa cực G
và cực S ( UGS )
Khi điện áp UGS = 0 thì điện trở RDS rất lớn, khi điện áp UGS > 0 => do hiệu
ứng từ trƣờng làm cho điện trở RDS giảm, điện áp UGS càng lớn thì điện trở RDS
càng nhỏ.
Kí hiệu Mosfet:
Hình 2.26: Hình ảnh các loại Mosfet
2.9.2 Nguyên lí hoạt động
Mosfet hoạt động ở 2 chế độ đóng và mở. Do là một phần tử với các hạt mang
điện cơ bản nên Mosfet có thể đóng cắt với tần số rất cao. Nhƣng mà để đảm bảo
thời gian đóng cắt ngắn thì vấn đề điều khiển lại là vẫn đề quan trọng.
 Đối với kênh P : Điện áp điều khiển mở Mosfet là Ugs0. Dòng điện sẽ
đi từ S đến D.
 Đối với kênh N : Điện áp điều khiển mở Mosfet là Ugs >0. Điện áp
điều khiển đóng là Ugs<=0. Dòng điện sẽ đi từ D xuống S.
Do đảm bảo thời gian đóng cắt là ngắn nhất ngƣời ta thƣờng : Đối với Mosfet
Kênh N điện áp khóa là Ugs = 0 V còn Kênh P thì Ugs=~0.
CHƢƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 31
Chƣơng 3. TÍNH TOÁN VÀ THIẾT KẾ
3.1 GIỚI THIỆU
Nhà thông minh đƣợc thiết kế sử dụng raspberry pi 3 cho việc điều khiển và
giám sát những thiết bị trong nhà thông qua việc giao tiếp với chatbot. Sau khi nhận
đƣợc yêu cầu của ngƣời dùng, chatbot gửi thông tin đến raspberry để thực hiện điều
khiển phần cứng, đồng thời xử lí đƣa ra câu trả lời cho ngƣời dùng.
Các yêu cầu điều khiển từ ngƣời dùng bao gồm :
- Đóng mở các thiết bị nhƣ đèn, quạt.
- Điều khiển dimmer để điều khiển độ sáng của bóng đèn.
- Thực hiện đóng mở cửa bằng động cơ servo
- Gửi thông tin về nhiệt độ, độ ẩm của căn phòng khi có yêu cầu của
ngƣời dùng.
3.2 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG
3.2.1 Thiết kế sơ đồ khối hệ thống
a. Sơ đồ khối hệ thống
User Dialogflow Fulfillment Webhook
Raspberry
(Python)
Device
Request
Response
POST
200 OK
Khối
nguồn
Hình 3.1: Sơ đồ khối hệ thống
CHƢƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 32
 User: Là ngƣời dùng trò chuyện trực tiếp với chatbot.
 Dialogflow: Nhận yêu cầu của ngƣời dùng, và sau khi xử lí thì sẽ trả
lời cho yêu cầu của ngƣời dùng.
 Fulfillment: Là nơi cho phép Dialogflow gửi thông tin đến webhook.
 Webhook: Là nơi tiếp nhận thông tin từ Dialogflow.
 Rasberry Pi: Xử lí thông tin nhận đƣợc để điều khiển phần cứng, đồng
thời trả về response ngƣợc lại cho Dialogflow.
 Divice: Là khối công suất, thực hiện yêu cầu điều khiển của ngƣời
dùng.
 Khối nguồn: Cung cấp nguồn cho raspberry và khối công suất hoạt
động.
b. Sơ đồ mô hình hệ thống
Hình 3.2: Sơ đồ thiết kế mô hình
3.2.2 Tính toán và thiết kế mạch
Phần này, nhóm tiến hành thiết kế, tính toán ra sơ đồ nguyên lí cho từng khối.
CHƢƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 33
a. Thiết kế khối Dialogflow
Đây là khối giúp chatbot trò chuyện với ngƣời dùng và phân tích câu nói của
ngƣời dùng bằng Natural Language Processing(NLP) thành dữ liệu dƣới định dạng
file Json, từ đó gửi đến webhook để xử lí và nhận câu trả lời tƣơng ứng từ webhook
để hiển thị cho ngƣời dùng.
b. Thiết kế khối điều khiển raspberry
Là khối quan trọng nhất, có chức năng tạo ra webhook để nhận dữ liệu đƣợc
gửi từ Dialogflow thông qua internet, từ đó tiến hành phân tích, xử lí dữ liệu để điều
khiển thiết bị trong nhà theo yêu cầu của ngƣời dùng, đồng thời xử lí để gửi lại câu
trả lời cho Dialogflow.
c. Thiết kế khối điều khiển động lực
Sơ đồ các khối trong mạch điều khiển động lực :
Module
Relay
Mạch
Dimmer
Servo
Raspberry Pi 3
Cảm biến
Hình 3.3: Sơ đồ các khối điều khiển động lực
Module Relay:
Các thiết bị trong nhà sử dụng điện áp xoay chiều 220V nên để điều khiển
đóng ngắt, ta dùng Module Relay. Vì ngõ ra điều khiển của raspberry là 3,3V nên ta
chọn mạch Relay có áp điều khiển là 5V.
Ta có cƣờng độ dòng điện định mức qua đèn là : Iđm = = = 0.05 A (3.1)
Ta chọn ICont > 2.5 x Iđm = 0.125 A. Ta chọn Module relay có I = 10 A (3.2)
CHƢƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 34
Mạch dimmer :
Sơ đồ nguyên lí :
Hình 3.4: Sơ đồ nguyên lí mạch dimmer
Giá trị điện áp trung bình sau khi qua cầu chỉnh lƣu:
VAVG = √ .VRMS )/ = 0.9 x 220 = 198 V (3.3)
Cƣờng độ dòng điện khi Mosfet ngƣng dẫn là :
I = = 1.9 mA (3.4)
Cƣờng độ dòng điện qua led phát quang oppto : I = = = 10 mA (3.5)
Khối cảm biến :
Để giám sát nhiệt độ, độ ẩm trong nhà và trả về kết quả khi có yêu cầu của
ngƣời dùng, ta dùng một cảm biến DHT11. DHT11 sử dụng nguồn đƣợc cấp trực
tiếp từ Raspberry Pi.
Khối Servo :
CHƢƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 35
Để thực hiện yêu cầu đóng mở cửa, ta sử dụng động cơ servo MG90S để điều
khiển góc quay phù hợp thực hiện yêu cầu đóng mở cửa.
d. Thiết kế khối nguồn
Sử dụng nguồn 220V AC cung cấp trực tiếp cho raspberry pi3 và các thiết bị
sử dụng điện xoay chiều.
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 36
Chƣơng 4. THI CÔNG HỆ THỐNG
4.1 GIỚI THIỆU
Chƣơng này gồm phần thi công trên màn hình và kết quả thi công mạch
dimmer và xây dựng mô hình nhà thông minh.
4.2 THIẾT KẾ DIALOGFLOW
4.2.1 Lƣu đồ giải thuật
Lƣu đồ khi ngƣời dùng yêu cầu điều khiển các thiết bị đến chatbot thông qua
text trò chuyện :
Yêu cầu điều khiển
thiết bị
Can you help you?
Nhận dữ liệu đã xử lí
ở Webhook
N
Y
N
Y
Gửi dữ liệu đến
Webhook
N
Ngƣời dùng nhập đầy
đủ thông tin
Hiển thị Reponse
Y
Y
Prompt
Hình 4.1: Lƣu đồ thiết kế trên Dialogflow
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 37
Giải thích lƣu đồ:
Bƣớc 1: Để trò chuyện đƣợc với chatbot, ngƣời dùng phải truy cập đƣợc
internet và có đƣợc link để trò chuyện với chatbot.
Bƣớc 2: Phân tích câu nói ngƣời dùng để phát hiện yêu cầu điều khiển thiết bị,
nếu ngƣời dùng nhập chƣa đầy đủ thông tin để điều khiển thì chatbot sẽ hỏi lại
ngƣời dùng để ngƣời dùng cung cấp đầy đủ thông tin.
Bƣớc 3: Lƣu thông tin dƣới dạng file Json rồi gửi đến địa chỉ webhook đã lƣu
ở mục Fulfillment để xử lí.
Bƣớc 4: Nhận kết quả trả lại từ webhook và hiển thị cho ngƣời dùng.
Bƣớc 5: Sẵn sàng nhận yêu cầu trò chuyện hay điều khiển tiếp theo từ ngƣời
dùng.
4.2.2 Thiết kế cho yêu cầu điều khiển ON-OFF
a. Tạo mới Agent
Để bắt đầu với Dialogflow, ta tiến hành tạo mới Agent. Ở đây, nhóm em tạo
Agent tên là finalproject, sau khi chọn các cài đặt cần thiết nhƣ múi giờ +7 thì tiến
hành lƣu lại Agent.
Hình 4.2: Tạo mới Agent
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 38
Tiến hành chuyển sang tab Languages để chỉnh ngôn ngữ là English.
Hình 4.3: Cài đặt các thông số cho Agent
Sau khi đã thiết lập các thông số, tiến hành lƣu lại và chuyển sang phần giao
diện hỗ trợ cho lập trình viên để tạo 1 chatbot.
b. Tạo entities
Sau khi đã tạo mới Agent, ta chuyển sang tab entities để tạo mới. Ở đây, ta
cần xác định 2 thực thể cần làm việc là điều khiển đèn nào và trạng thái cần điều
khiển của đèn đó. Từ đó ta tạo ra 2 thực thể là @on-off và @led (tên entity do
ngƣời lập trình viên tự đặt sao cho dễ hiểu và sử dụng nhất).
Sau khi đã xác định đƣợc những entities cần tạo, ta tiến hành tạo mới entities.
Hình 4.4: Thực hiện tạo mới Entities
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 39
Sau khi nhấn vào tạo mới, ta tiến hành đặt tên cho entity và tiến hành nhập vào
các giá trị. Nhƣ hình dƣới đây, đèn chỉ có 2 trạng thái là ON và OFF nên ta điền giá
trị ON và OFF vào refence value, còn phần synonym, ta điền vào các từ đồng
nghĩa hoặc ngầm hiểu là điều khiển on hoặc off đèn tƣơng ứng nhƣ hình dƣới đây:
Hình 4.5: Hình ảnh entities on-off
Sau khi đã hoàn thành, ta tiến hành nhấn Save để lƣu lại. Ta cũng thực hiện
tƣơng tự đối với entity @led.
Hình 4.6: Hình ảnh entities led
c. Tạo Intent
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 40
Ta tiến hành tạo mới intent để phân tích câu nói của ngƣời dùng đƣa vào, từ
đó ta xử lí và đƣa ra kết quả phù hợp cho ngƣời dùng. Tƣơng tự nhƣ tạo mới
Enities, ta nhấp chọn Create Intent để tạo mới Intent.
Ta tiến hành thao tác để tạo ra Intent on-off giúp chatbot hiểu yêu cầu ON-
OFF các thiết bị từ ngƣời dùng và đƣa ra hành động hợp lí.
Hình 4.7: Tạo mới intents
Ở mục Training Phrases, ta tiến hành nhập các câu nói mà ngƣời dùng có thể
nói để điều khiển thiết bị, Dialogflow sẽ tự động hightlight các giá trị của tham số
trong entities vừa tạo ở trên để trích xuất lấy dữ liệu từ câu nói của ngƣời dùng, từ
đó xử lí và đƣa ra kết quả phù hợp. Ta cũng có thể chỉnh sửa thủ công bằng cách bôi
đen các từ muốn Dialogflow gắn tham số. Các giá trị tham số của Training Phrases
sẽ đƣợc hiển thị trong phần Action and parameters.
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 41
Hình 4.8: Bảng Action và Parameters
Ở đây action là on:off. Action này sẽ giúp chúng ta xác định đâu là Intent
đƣợc gửi tới webhook để có thể xử lí và đƣa ra kết quả phù hợp đối với yêu cầu
ngƣời dùng. Và nhƣ ta thấy ở trên thì hai tham số là on-off và led vừa tạo ở entity
đƣợc sử dụng để lấy giá trị dữ liệu từ ngƣời dùng. Ở đây, ta yêu cầu ngƣời dùng
cung cấp đầy đủ thông tin bằng việc tích vào mục Required.
Tiếp theo là mục Response, đây là nơi chúng ta sẽ trả lời đáp án tƣơng ứng
cho ngƣời dùng mỗi khi Intent đƣợc gọi. Ở đây, nhóm em sử dụng giá trị của tham
số trong chính câu nói của ngƣời dùng để trả lời. Nhƣ hình dƣới đây, ta có thể thấy
đƣợc sau khi ngƣời dùng yêu cầu “Turn on led 1” thì chatbot sẽ trả lời đáp ứng yêu
cầu của ngƣời dùng theo định dạng ta đã đặt ở Text response.
Hình 4.9: Mục Responses
Cuối cùng là mục fulfillment, click on “Enable webhook call for this intent”
để khi Intent đƣợc gọi thì sẽ chuyển thông tin dƣới dạng Json đến webhook, server
sẽ nhận và xử lí thông tin và cuối cùng trả về cho ngƣời dùng câu trả lời cho câu hỏi
tƣơng ứng của ngƣời dùng thay vì trả lời theo định dạng mặc định ở mục Response
ở trên.
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 42
Hình 4.10: Kích hoạt Fulfillment cho Intent
Sau khi đã hoàn thành, ta nhấn Save để lƣu mới Intent.
d. Fulfillment
Hình 4.11: Đặt link webhook trong mục Fulfillment
Đây là nơi đặt link của webhook, Dialogflow sẽ gọi đến địa chỉ này mỗi khi có
Intent đã kích hoạt webhook đƣợc gọi đến. Đây sẽ là nơi tiếp nhận thông tin để
serve có thể xử lí và trả lại kết quả cho Dialogflow để hiển thị cho ngƣời dùng.
Ta cần kích hoạt Enable ở mục webhook và đặt link của webhook cần gọi vào
mục URL, tiến hành nhấn Save để hoàn tất.
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 43
e. Integrations
Ta tích hợp chatbot vào các nền tảng nhắn tin, ở đây nhóm em sử dụng
webdemo do Dialogflow hỗ trợ để tạo giao diện nhắn tin với ngƣời dùng. Enable
web demo để kích hoạt tính năng này.
Hình 4.12: Tùy chỉnh trong Integrations
Sau khi enable web demo, chúng ta sẽ thấy đƣờng link. Chúng ta sẽ trò chuyện
với chatbot thông qua đƣờng link này.
Hình 4.13: Giao diện trò chuyện chatbot
Đây là giao diện khi ta click vào đƣờng dẫn ở trên, ta trò chuyện với chatbot
thông qua hộp thoại này.
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 44
4.2.3 Mở rộng cho điều khiển ON-OFF
a. Thêm mới entities
Trong một số trƣờng hợp ngƣời dùng thay vì yêu cầu điều khiển trực tiếp các
đèn thì ngƣời dùng có thể yêu cầu thắp sáng hay tắt thiết bị ở phòng nào, lúc nào
chúng ta cần lập trình cho chatbot hiểu đƣợc ngƣời dùng đang muốn gì để đáp ứng
đúng yêu cầu ngƣời dùng.
Lúc này ta phải tạo mới 2 enities là @room và @status để đáp ứng nhu cầu
thắp sáng hay tắt của từng phòng.
Hình 4.14: Thêm mới entities room
Hình 4.15: Thêm mới entities status
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 45
b. Thêm mới intent
Chúng ta tiến hành thêm mới Intent và thao tác tƣơng tự nhƣ các bƣớc ở trên.
Ở đây nhóm em đã tạo ra Intent on-off:condition. Sau đây là hình ảnh của Intent
này:
Hình 4.16: Thêm mới Intent on-off:condition
Vẫn tƣơng tự nhƣ trƣờng hợp ON-OFF thông thƣờng ở trên, khi ngƣời dùng
cung cấp thiếu thông tin thì chatbot sẽ hỏi ngƣời dùng để cung cấp đầy đủ thông tin.
Hình 4.17: Kết quả thao tác trên Intent mới
Các bƣớc tiếp theo, nhóm em thực hiện tƣơng tự nhƣ trƣờng hợp ON-OFF
thông thƣờng ở trên.
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 46
4.2.4 Kết quả hoàn chỉnh trên Dialogflow
Chúng ta thực hiện tƣơng tự nhƣ các bƣớc ở trên để đáp ứng những yêu cầu
của ngƣời dùng nhƣ đóng mở thiết bị, điều khiển dimmer hay đọc giá trị từ cảm
biến. Sau đây là một số hình ảnh thực hành hoàn chỉnh trên Dialogflow.
a. Intents
Hình 4.18: Kết quả hoàn thành Intent
b. Entities
Hình 4.19: Kết quả hoàn thành Entities
4.3 LẬP TRÌNH TRÊN RASPBERRY PI 3
4.3.1 Giới thiệu ngôn ngữ lập trình Python
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 47
Python là ngôn ngữ lập trình hƣớng đối tƣợng, cấp cao, mạnh mẽ, đƣợc tạo ra
bởi Guido van Rossum. Nó dễ dàng để tìm hiểu và đang nổi lên nhƣ một trong
những ngôn ngữ lập trình nhập môn tốt nhất cho ngƣời lần đầu tiếp xúc với ngôn
ngữ lập trình. Python hoàn toàn tạo kiểu động và sử dụng cơ chế cấp phát bộ nhớ tự
động. Python có cấu trúc dữ liệu cấp cao mạnh mẽ và cách tiếp cận đơn giản nhƣng
hiệu quả đối với lập trình hƣớng đối tƣợng. Cú pháp lệnh của Python là điểm cộng
vô cùng lớn vì sự rõ ràng, dễ hiểu và cách gõ linh động làm cho nó nhanh chóng trở
thành một ngôn ngữ lý tƣởng để viết script và phát triển ứng dụng trong nhiều lĩnh
vực, ở hầu hết các nền tảng.
a. Lịch sử của Python
Python là một ngôn ngữ khá cũ đƣợc tạo ra bởi Guido Van Rossum. Thiết kế
bắt đầu vào cuối những năm 1980 và đƣợc phát hành lần đầu tiên vào tháng 2 năm
1991.
Hình 4.20: Ngôn ngữ Python
b. Các phiên bản Python đã phát hành
Phiên bản Ngày phát hành
Python 1.0 (bản phát hành chuẩn đầu tiên)
Python 1.6 (Phiên bản 1.x cuối cùng)
01/1994
05/09/2000
Python 2.0 (Giới thiệu list comprehension)
Python 2.7 (Phiên bản 2.x cuối cùng)
16/10/2000
03/07/2010
Python 3.0 (Loại bỏ cấu trúc và mô-đun trùng lặp)
Python 3.6 (Bản mới nhất tính đến thời điểm viết bài)
03/12/2008
23/12/2016
Bảng 4.1: Các phiên bản Python đã phát hành
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 48
c. Đặc điểm của ngôn ngữ lập trình Python
- Ngôn ngữ lập trình đơn giản, dễ học: Python có cú pháp rất đơn giản, rõ
ràng. Nó dễ đọc và viết hơn rất nhiều khi so sánh với những ngôn ngữ lập trình khác
nhƣ C++, Java, C#.
- Miễn phí, mã nguồn mở: Bạn có thể tự do sử dụng và phân phối Python,
thậm chí là dùng cho mục đích thƣơng mại. Vì là mã nguồn mở, bạn không những
có thể sử dụng các phần mềm, chƣơng trình đƣợc viết trong Python mà còn có thể
thay đổi mã nguồn của nó. Python có một cộng đồng rộng lớn, không ngừng cải
thiện nó mỗi lần cập nhật.
- Khả năng di chuyển: Các chƣơng trình Python có thể di chuyển từ nền tảng
này sang nền tảng khác và chạy nó mà không có bất kỳ thay đổi nào. Nó chạy trên
hầu hết tất cả các nền tảng nhƣ Windows, macOS, Linux.
- Khả năng mở rộng và có thể nhúng: Giả sử một ứng dụng đòi hỏi sự phức
tạp rất lớn,bạn có thể dễ dàng kết hợp các phần code bằng C, C++ và những ngôn
ngữ khác (có thể gọi đƣợc từ C) vào code Python. Điều này sẽ cung cấp cho ứng
dụng của bạn những tính năng tốt hơn cũng nhƣ khả năng scripting mà những ngôn
ngữ lập trình khác khó có thể làm đƣợc.
- Ngôn ngữ thông dịch cấp cao: Không giống nhƣ C/C++, với Python, bạn
không phải lo lắng những nhiệm vụ khó khăn nhƣ quản lý bộ nhớ, dọn dẹp những
dữ liệu vô nghĩa,... Khi chạy code Python, nó sẽ tự động chuyển đổi code sang ngôn
ngữ máy tính có thể hiểu. Bạn không cần lo lắng về bất kỳ hoạt động ở cấp thấp
nào.
- Thƣ viện tiêu chuẩn lớn để giải quyết những tác vụ phổ biến: Python có một
số lƣợng lớn thƣ viện tiêu chuẩn giúp cho công việc lập trình của bạn trở nên dễ thở
hơn rất nhiều, đơn giản vì không phải tự viết tất cả code. Những thƣ viện này đƣợc
kiểm tra kỹ lƣỡng và đƣợc sử dụng bởi hàng trăm ngƣời.
- Hƣớng đối tƣợng: Mọi thứ trong Python đều là hƣớng đối tƣợng. Lập trình
hƣớng đối tƣợng (OOP) giúp giải quyết những vấn đề phức tạp một cách trực quan.
Với OOP, bạn có thể phân chia những vấn đề phức tạp thành những tập nhỏ hơn
bằng cách tạo ra các đối tƣợng.
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 49
4.3.2 Giới thiệu phần mềm lập trình Python 3 IDLE
Cả ngôn ngữ lập trình Python 2 và Python 3 đều đƣợc cài đặt sẵn khi cài hệ
điều hành Raspbian nên ta có thể sử dụng cả Python 2 và Python 3 để lập trình. Để
khởi động phần mềm lập trình Python 3 IDLE, ta tiến hành click chọn : Start =>
programing => Python 3 (IDLE). Ngay lập tức giao diện IDLE sẽ đƣợc hiển thị.
Hình 4.21: Giao diện Python 3 IDLE
Giao diện IDLE rất đơn giản và dễ sử dụng, để tạo File mới hoặc Open một
file có sẵn ta click chọn File rồi chọn các mục tƣơng ứng.
Hình 4.22: Thao tác file trên giao diện Python 3 IDLE
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 50
Hình dƣới đây chỉ ra chức năng các phần và thanh công cụ của Python 3
IDLE:
Hình 4.23: Các phần của giao diện
4.3.3 Lƣu đồ giải thuật
Giải thích lƣu đồ:
Các bƣớc thực hiện đƣợc miêu tả bởi lƣu đồ dƣới (Hình 4.24).
Bƣớc 1: Ta cấp nguồn cho hệ thống, hệ thống bắt đầu khởi động và kết nối với
mạng internet.
Bƣớc 2: Sau khi khởi tạo hệ thống, nếu có dữ liệu đƣợc từ Dialogflow gửi đến
thì hệ thống sẽ thực hiện xử lí, phân tích dữ liệu nhận đƣợc, từ đó thực hiện yêu cầu
điều khiển thiết bị và tạo ra câu trả lời phù hợp với từng yêu cầu điều khiển từ
ngƣời dùng.
Bƣớc 3: Tiếp đến raspberry sẽ gửi câu trả lời đến Dialogflow để hiển thị câu
trả lời cho ngƣời dùng.
Bƣớc 4: Sẵn sàng nhận dữ liệu tiếp theo từ Dialogflow để xử lí và điều khiển
thiết bị.
Lƣu đồ điều khiển trên raspberry:
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 51
Nhận dữ liệu từ
Webhook
Bắt đầu
Gửi dữ liệu cho
Dialogflow
N
Y
N
Y
Khởi tạo hệ thống
Xử lý phân tích
Điều khiển thiết bị
N
Hình 4.24: Lƣu đồ điều khiển trên Raspberry Pi
4.3.4 Viết chƣơng trình hệ thống
Ở đây ta tiến hành viết chƣơng trình tạo webhook để nhận dữ liệu từ
Dialogflow và sử dụng dữ liệu đó để điều khiển khối điều khiển động lực, đồng thời
gửi phản hồi về cho Dialogflow. Dƣới đây là một đoạn ngắn của chƣơng trình tạo
webhook, vì soucre code khá dài nên nhóm em xin phép để đầy đủ source code ở
phần phụ lục.
#!/usr/bin/env python
import urllib
import json
import os
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 52
import RPi.GPIO as GPIO
import Adafruit_DHT
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(16, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)
GPIO.setup(25, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
pwm = GPIO.PWM(18, 500)
pwm.start(100)
GPIO.setup(13, GPIO.OUT)
pwm1 = GPIO.PWM(13, 50)
from flask import Flask
from flask import request
from flask import make_response
# Flask app should start in global layout
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
req = request.get_json(silent=True, force=True)
print("Request:")
print(json.dumps(req, indent=4))
res = makeWebhookResult(req)
res = json.dumps(res, indent=4)
print(res)
#t = str(res["speech"])
r = make_response(res)
#t= str(r.decode('utf-8'))
print("*")
print (r)
#print ("*")
r.headers['Content-Type'] = 'application/json'
return r
if __name__ == '__main__':
port = int(os.getenv('PORT', 5000))
print("Starting app on port %d" %(port))
app.run(debug=True, port=port, host='0.0.0.0')
4.3.5 Public server lên internet bằng ngrok
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 53
Ở phần trên ta chỉ mới tạo ra webhook ở local host, để public server lên
internet ta cần dùng ngrok. Vậy ngrok là gì ? Ngrok là công cụ tạo đƣờng hầm
(tunnel) giữa localhost của bạn và internet. Giúp ngƣời khác mạng có thể truy cập
đƣợc localhost của bạn thông qua custom domain của ngrok.
Hình 4.25: Giới thiệu ngrok
Ngrok có bản trả phí lẫn miễn phí, tuy nhiên bản miễn phí sẽ có nhiều hạn chế.
Để có thể sử dụng ngrok ta tiến hành các bƣớc sau:
- Đăng ký tài khoản free trên trang web: https://ngrok.com/
- Download ngrok về máy, tiến hành giải nén.
- Vào folder bạn vừa giải nén, chạy câu lệnh ./ngrok http [port bạn muốn
mở].
Ví dụ kết quả sau khi chạy port 5000 nhƣ hình dƣới:
Hình 4.26: Hình ảnh chạy ngrok
4.4 THI CÔNG MẠCH ĐIỀU KHIỂN DIMMER
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 54
4.4.1 Sơ đồ mạch PCB Dimmer
Hình 4.27: Sơ đồ mạch in PCB
Hình 4.28: Sơ đồ linh kiện 3D
Dƣới đây là danh sách các linh kiện:
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 55
Tên linh
kiện
Kí
hiệu Giá trị
Opto 4N35 OP1
Điện trở R3 6k8
Điện trở R1 100k
Tụ điện C1 100uF/450V
Điện trở R4 330 Ohm
Diode Bridge D1 2A
Diode D2 Diode
Zenner R2 DIODE Zener
Header 2 pin C2 Header2
MOSFET IRF840 Q1 IRF840
Domino J1, J2 KF2
Bảng 4.2: Danh sách linh kiện
4.4.2 Thi công mạch
Một số hình ảnh thi công mạch hoàn chỉnh
Hình 4.29: Hình ảnh mạch thi công
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 56
Hình 4.30: Hình ảnh mạch sau thi công
4.5 ĐÓNG GÓI VÀ THI CÔNG MÔ HÌNH
4.5.1 Đóng gói bộ điều khiển
Để bảo vệ raspberry pi 3 khỏi tác động bên ngoài, chúng em dùng vỏ nhựa để
bảo vệ raspberry. Đồng thời trên vỏ cũng trang bị quạt tản nhiệt mini để giúp
raspberry hoạt động tốt hơn. Dƣới đây là một số hình ảnh :
Hình 4.31: Đóng gói bộ điều khiển
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 57
4.5.2 Thi công mô hình
Để tạo mô hình nhà thông minh, nhóm em sử dụng vật liệu là bìa cứng. Sử
dụng các dụng cụ để cắt ghép các phần lại với nhau để tạo mô hình ngôi nhà hoàn
chỉnh. Thực hiện đính các thiết bị đèn vào một khối cố định nhƣ hình dƣới.
Hình 4.32: Thi công khối đèn xoay chiều
Sau đó kết nối đèn với thiết bị điều khiển công suất Relay, dimmer.
Hình 4.33: Kết nối đèn với module Relay
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 58
Hình 4.34: Kết nối đèn với mạch dimmer
Tiếp đến là rắp ráp cảm biến DHT11 và động cơ servo vào đúng vị trí.
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 59
Hình 4.35: Kết nối Module DHT11 vào đúng vị trí
Hình 4.36: Đặt đúng động cơ servo vào vị trí
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 60
Cuối cùng ta kết nối các bộ phận với bộ điều khiển raspberry pi 3.
Hình 4.37: Kết nối với Raspberry Pi
Hình 4.38: Hình ảnh mô hình thi công hoàn chỉnh
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 61
4.6 KẾT QUẢ VẬN HÀNH HỆ THỐNG
Sau khi ngƣời dùng nhập “Turn on led 2” thì ngay lập tức đèn 2 mở, đồng thời
chatbot trả lời lại cho ngƣời dùng.
Hình 4.39: Điều khiển thiết bị thông qua giao diện
Hình 4.40: Kết quả sau khi nhận yêu cầu điều khiển
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 62
Tƣơng tự khi ngƣời dùng yêu cầu mở cửa.
Hình 4.41: Yêu cầu điều khiển đóng mở cửa
Hình 4.42: Thực hiện mở cửa
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 63
Và trả lời thông tin nhiệt độ, độ ẩm khi đƣợc ngƣời dùng yêu cầu.
Hình 4.43: Truy vấn thông tin nhiệt độ
4.7 TÀI LIỆU HƢỚNG DẪN, THAO TÁC
4.7.1 Tài liệu hƣớng dẫn sử dụng
- Bƣớc 1: Cấp nguồn cho hệ thống, hệ thống hoạt động sử dụng nguồn 220V
AC.
- Bƣớc 2: Sau khi khởi động hệ thống, tiến hành mở ứng dụng chatbot và trò
chuyện với chatbot thông qua text message.
- Bƣớc 3: Trò chuyện và yêu cầu điều khiển thiết bị đối với chatbot.
4.7.2 Quy trình thao tác
Để giúp ngƣời sử dụng dễ dàng thao tác, dƣới đây là lƣu đồ quy trình vận hành
hệ thống:
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 64
Hình 4.44: Lƣu đồ hƣớng dẫn sử dụng
CHƢƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 65
Chƣơng 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
Để thực hiện yêu cầu đề tài, nhóm em đã tập trung ghiên cứu và hoàn thiện đề
tài đƣợc giao. Quá trình nghiên cứu đƣợc thực hiện trong 15 tuần, trong quá trình đó
nhóm em không những biết đƣợc nhiều kiến thức mới mà còn ôn lại nhiều kiến thức
cũ đã quên. Dƣới đây là những kiến thức mà chúng em học đƣợc.
5.1 DIALOGFLOW
5.1.1 Dialogflow
Biết đƣợc cách sử dụng và khai thác sức mạnh của Dialogflow cung cấp cho
ngƣời lập trình để tạo ra một chatbot thông minh. Biết đƣợc ý nghĩa của từng phần
trong Dialogflow nhƣ:
 Agent
 Intents
 Contexts
 Events
 Training Phrases
 Action and parameters
 Responses
 Fulfillment
 Entities
 Integrations
 Training
 History
 Analytics
 Prebuilt Agents
5.1.2 Các khái niệm liên quan
CHƢƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 66
Hiểu đƣợc các khái niệm nhƣ API, webhook, định dạng file Json và cách trích
xuất dữ liệu từ định dạng file Json để phục vụ cho yêu cầu của đề tài.
5.2 RASPBERRY PI 3
5.2.1 Raspberry Pi 3
Biết cách cài đặt hệ điều hành cho raspberry, thiết lập IP tĩnh cho mạng Lan để
điều khiển raspberry qua VNC khi raspberry pi 3 không có kết nối mạng.
Thực hiện cài đặt, cập nhật các gói (package) cần thiết cho raspberry.
Sử dụng ngôn ngữ Python để lập trình, cài đặt các thƣ viện Python cần thiết để
lập trình phục vụ đề tài.
Biết cách sử dụng các hàm các của thƣ viện nhƣ:
GPIO.setwarnings()
GPIO.setmode()
GPIO.setup()
GPIO.PWM()
Hiểu đƣợc điện áp cấp từ Raspberry Pi 3 cũng nhƣ ý nghĩa các chân trên
Raspberry, chẳng hạn nhƣ các chân của Raspberry chỉ đọc đƣợc Input là tín hiệu
Digital, không có chân đọc Analog nhƣ Arduino. Cũng nhƣ tìm hiểu các chuẩn giao
tiếp trên Raspberry.
5.2.2 Công cụ ngrok
Biết cách sử dụng ngrok để public server, thực hiện xem xét quản lí những tác
vụ đã thực hiện trên server.
5.3 PHẦN CỨNG
5.3.1 Mạch điều khiển dimmer
Tìm hiểu nguyên lí của dimmer từ đó thực hành làm mạch mô phỏng dimmer
để điều khiển thiết bị. Từ đó, ôn lại các kiến thức về linh kiện nhƣ Triac, Mosfet.
Biết cách sử dụng phần mềm Altium Designer để vẽ mạch PBC phục vụ cho
đề tài.
CHƢƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 67
Biết cách hoàn thiện một mạch điện tử qua nhiều công đoạn khác nhau.
5.3.2 Động cơ Servo
Tìm hiểu nguyên lí điều khiển động cơ servo bằng PWM để từ đó thực hiện
yêu cầu điều khiển góc quay để đóng mở cửa.
5.3.3 Module Relay 2 kênh 5V
Hiểu đƣợc cách hoạt động của module Relay, tính toán đƣợc dòng cần thiết để
kích hoạt Relay. Từ đó thực hiện tác vụ điều khiển thiết bị.
5.3.4 Module cảm biến DHT11
Biết cách sử dụng module cảm biến nhiệt độ, độ ẩm DHT11 để cung cấp dữ
liệu về nhiệt độ, độ ẩm hiện tại cho đề tài.
5.4 NHẬN XÉT VÀ ĐÁNH GIÁ
Nhóm thực hiện đề tài đã hoàn thành những yêu cầu của đề tài đặt ra, đồ án
nghiên cứu có những ƣu điểm nhƣ:
 Đề tài có tính thực tế cao, đặc biệt là trong những năm gần đây việc
ứng dụng các lĩnh vực liên quan đến AI, Machine Learning vào các lĩnh
vực đời sống ngày càng nhiều và đem lại hiệu quả cao.
 Chi phí xây dựng hệ thống không cao, tƣơng đối dễ sử dụng và vận
hành. Qúa trình bảo trì hệ thống cũng khá đơn giản.
 Giao diện chatbot dễ sử dụng, đặc biệt có thể tích hợp với các nền tảng
nhắn tin nhƣ Facebook message, Skype, Slack,... để tăng tính thiết thực,
gần gũi với ngƣời dùng.
 Hệ thống điều khiển trên thời gian thực, khi có yêu cầu điều khiển của
ngƣời dùng thì ngay lập tức điều khiển các thiết bị trong ngôi nhà.
 Dựa trên lịch sử chat, ngƣời dùng có thể xem xét lịch sử đóng mở các
thiết bị trong nhà.
Tuy nhiên, hệ thống cũng có những hạn chế nhƣ:
CHƢƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 68
 Hệ thống điều khiển thông qua internet nên yêu cầu phải có đƣờng
truyền mạng ổn định và duy trì lâu dày.
 Tính bảo mật hệ thống không cao, bất cứ ai có link trò chuyện đều sẽ
trò chuyện đƣợc với chatbot.
 Hệ thống sử dụng API Dialogflow của google để lập trình, nếu google
ngƣng cung cấp API này thì hệ thống không hoạt động.
 Sử dụng mới ngrok sẽ cho địa chỉ url khác nhau nên mỗi lần thay đổi
cần phải cung cấp địa chỉ webhook mới trong phần fulfillment của
Dialogflow.
 Độ trễ của hệ thống phụ thuộc vào tốc độ và độ ổn định của đƣờng
truyền.
CHƢƠNG 6. KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 69
Chƣơng 6. KẾT LUẬN VÀ HƢỚNG PHÁT
TRIỂN
6.1 KẾT LUẬN
Từ những yêu cầu đã đặt ra ở chƣơng 1, nhóm thực hiện đề tài nhận xét hệ
thống hoạt động khá ổn định và đáp ứng những yêu cầu của đề tài đặt ra. Đó là hệ
thống thông qua việc trò chuyện với chatbot để điều khiển các thiết bị trong nhà với
giao diện đơn giản, dễ sử dụng và có thể trò chuyện với ngƣời dùng.
Mô hình thiết kế nhà thông minh đơn giản, dễ nhìn giúp dễ dàng hình dung
hình ảnh ngôi nhà ngoài thực tế. Việc bố trí các module cũng nhƣ các thiết bị khá
hợp lí. Tính an toàn của hệ thống đƣợc đảm bảo, an toàn cho ngƣời sử dụng. Tuy
nhiên, hệ thống còn có những hạn chế là phụ thuộc vào đƣờng truyền internet, tính
bảo mật chƣa đƣợc cao, chatbot có thể trò chuyện với ngƣời dùng những câu trò
chuyện đơn giản, không thông minh khi yêu cầu ngƣời dùng phức tạp, khó hiểu.
6.2 HƢỚNG PHÁT TRIỂN
Tích hợp chatbot vào các nền tảng nhắn tin để thân thiện và tiện lợi hơn cho
ngƣời dùng. Đồng thời, ngoài việc trò chuyện đơn giản với ngƣời dùng thì chúng ta
có thể tích hợp thêm nhiều API khác để chatbot thông minh hơn và sẽ trả lời đƣợc
hết những đoạn thoại của ngƣời dùng nhƣ một con ngƣời thật sự. Đó là các API về
thời tiết, API về đọc báo, API về mua sắm, vv và đặc biệt là tích hợp API simsimi
của ứng dụng chatbot nhắn tin nổi tiếng. Từ đó, chatbot đƣợc xem nhƣ một trợ lí
của ngôi nhà, trò chuyện, hỗ trợ mua sắm, cung cấp thông tin, báo chí cho ngƣời
dùng.
Có thể tích hợp thêm API Voice để chatbot giao tiếp với ngƣời dùng bằng lời
nói thay vì nhắn tin text thông thƣờng. Có thể linh hoạt mở rộng thêm nhiều thiết bị
cần điều khiển đối với những ngôi nhà, dự án khác nhau.
TÀI LIỆU THAM KHẢO
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 70
TÀI LIỆU THAM KHẢO
[1] Trần Thu Hà, “Giáo trình điện tử cơ bản”, NXB ĐH Quốc Gia Tp.HCM, 2013.
[2] Hoàng Ngọc Văn, “Giáo trình thực hành điện tử công suất”, Trƣờng ĐH Sƣ
Phạm Kỹ Thuật Tp.HCM, 2015.
[3] Matt Richardson and Shawn Wallace, “Getting Started with Raspberry Pi”,
Pushlished by O’Reilly Media, Inc., 2012.
[4] Cao Văn Tiến và Nguyễn Văn Nghĩa, “Điều khiển thiết bị qua internet dùng
raspberry pi 2 thông qua wifi”, Trƣờng ĐH SPKT Tp.HCM, 2016.
[5] Nick Quinlan, “What’s a webhook”, www.sendgrid.com, 2014.
[6] Sachin Kumar, “How to create a chatbot using Dialogflow Enterprise Edition
and Dialogflow API V2”, 2018.
[7] Jestin Cubetech, “Safe and simple AC pwm dimmer for Arduino/ Raspberry pi”,
2013.
[8] Tài liệu trên website Dialogflow: https://dialogflow.com/docs/getting-started
[9] Trang chủ của Raspberry : https://www.raspberrypi.org
[10] Website datasheet linh kiện: alldatasheet.com
PHỤ LỤC
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 71
PHỤ LỤC
#!/usr/bin/env python
import urllib
import json
import os
import RPi.GPIO as GPIO
import Adafruit_DHT
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(16, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)
GPIO.setup(25, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
pwm = GPIO.PWM(18, 500)
pwm.start(100)
GPIO.setup(13, GPIO.OUT)
pwm1 = GPIO.PWM(13, 50)
from flask import Flask
from flask import request
from flask import make_response
# Flask app should start in global layout
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
req = request.get_json(silent=True, force=True)
print("Request:")
print(json.dumps(req, indent=4))
res = makeWebhookResult(req)
res = json.dumps(res, indent=4)
print(res)
#t = str(res["speech"])
r = make_response(res)
#t= str(r.decode('utf-8'))
print("*")
print (r)
#print ("*")
r.headers['Content-Type'] = 'application/json'
return r
def makeWebhookResult(req):
#if req.get("queryResult").get("action") != "on-off":
# return {}
#if req.get("queryResult").get("action") != "on-off.condition":
# return {}
sp1=""
sp2=""
sp3=""
PHỤ LỤC
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 72
sp4=""
sp5=""
sp6=""
sp7=""
sp8=""
sp9=""
sp10=""
sp11=""
sp12=""
sp13=""
sp14=""
result = req.get("queryResult")
parameters = result.get("parameters")
val = parameters.get("on-off")
val2 = parameters.get("led")
val3 = parameters.get("status")
val4 = parameters.get("percentage")
val5 = parameters.get("status-door")
val6 = parameters.get("temperature")
val7 = parameters.get("unit-temperature")
val8 = parameters.get("humidity")
val9 = parameters.get("room")
val10 = parameters.get("hot-cold")
if req.get("queryResult").get("action") == "on-off":
if len(val)==len(val2):
for i in range (0, len(val)):
for j in range (0, len(val2)):
if i == j:
if val[i] =="on":
if val2[j] == "all":
GPIO.output(16, GPIO.HIGH)
GPIO.output(23, GPIO.HIGH)
GPIO.output(24, GPIO.HIGH)
GPIO.output(25, GPIO.HIGH)
sp11 = "turn on all"
if val2[j] == "led 1":
GPIO.output(16, GPIO.HIGH)
sp1 = val[i] + " " + val2[j]
if val2[j] == "led 2":
GPIO.output(23, GPIO.HIGH)
sp2 = val[i] + " " + val2[j]
if val2[j] == "led 3":
GPIO.output(24, GPIO.HIGH)
sp3 = val[i] + " " + val2[j]
if val2[j] == "fan":
GPIO.output(25, GPIO.HIGH)
sp4 = val[i] + " " + val2[j]
if val[i] =="off":
if val2[j] == "all":
GPIO.output(16, GPIO.LOW)
GPIO.output(23, GPIO.LOW)
GPIO.output(24, GPIO.LOW)
GPIO.output(25, GPIO.LOW)
sp12 = "turn off all"
if val2[j] == "led 1":
GPIO.output(16, GPIO.LOW)
sp5 = val[i] + " " + val2[j]
if val2[j] == "led 2":
GPIO.output(23, GPIO.LOW)
sp6 = val[i] + " " + val2[j]
if val2[j] == "led 3":
PHỤ LỤC
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 73
GPIO.output(24, GPIO.LOW)
sp7 = val[i] + " " + val2[j]
if val2[j] == "fan":
GPIO.output(25, GPIO.LOW)
sp8 = val[i] + " " + val2[j]
else:
for i in range (0,len(val)):
for j in range (0, len(val2)):
if val[i] =="on":
if val2[j] == "led 1":
GPIO.output(16, GPIO.HIGH)
sp1 = val[i] + " " + val2[j]
if val2[j] == "led 2":
GPIO.output(23, GPIO.HIGH)
sp2 = val[i] + " " + val2[j]
if val2[j] == "led 3":
GPIO.output(24, GPIO.HIGH)
sp3 = val[i] + " " + val2[j]
if val2[j] == "fan":
GPIO.output(25, GPIO.HIGH)
sp4 = val[i] + " " + val2[j]
if val[i] =="off":
if val2[j] == "led 1":
GPIO.output(16, GPIO.LOW)
sp5 = val[i] + " " + val2[j]
if val2[j] == "led 2":
GPIO.output(23, GPIO.LOW)
sp6 = val[i] + " " + val2[j]
if val2[j] == "led 3":
GPIO.output(24, GPIO.LOW)
sp7 = val[i] + " " + val2[j]
if val2[j] == "fan":
GPIO.output(25, GPIO.LOW)
sp8 = val[i] + " " + val2[j]
speech = "OKK, " + sp1 + " " + sp2 + " " + sp3 + " " + sp4 + " "
+ sp5 + " " + sp6 + " " + sp7 + " " + sp8 + " " + sp11 + " " + sp12
elif req.get("queryResult").get("action") == "on-off:condition":
if val3 =="light":
if val9 == "room 1":
GPIO.output(16, GPIO.HIGH)
if val9 == "room 2":
GPIO.output(23, GPIO.HIGH)
if val9 == "room 3":
GPIO.output(24, GPIO.HIGH)
#if val2 == "room 4":
#GPIO.output(25, GPIO.HIGH)
if val3 =="dark":
if val9 == "room 1":
GPIO.output(16, GPIO.LOW)
if val9 == "room 2":
GPIO.output(23, GPIO.LOW)
if val9 == "room 3":
GPIO.output(24, GPIO.LOW)
#if val2 == "room 4":
#GPIO.output(25, GPIO.LOW)
speech = "OKK, " + val3 + " " + val9
PHỤ LỤC
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 74
elif req.get("queryResult").get("action") == "action.dimmer":
a=""
for i in val4:
if i =="%":
break
a=a+i
#print a
dc = 100.0 - float(a)
pwm.ChangeDutyCycle(dc)
speech = "OK, dimmer " + a + "%"
elif req.get("queryResult").get("action") == "action.door":
if val5 == "open":
pwm1.start(5)
if val5 == "close":
pwm1.start(10)
speech = "OK, " + val5 + " door"
elif req.get("queryResult").get("action") == "action.temperature":
if val6 == "temperature":
if val7 == "C":
humidity, temperature = Adafruit_DHT.read_retry(11, 27)
sp9 = "temperature is " + str(temperature) + " C"
if val7 == "F":
humidity, temperature = Adafruit_DHT.read_retry(11, 27)
temperature1 = temperature*1.8 + 32
sp10 = "temperature is " + str(temperature1) + " F"
speech = sp9 + " " + sp10
elif req.get("queryResult").get("action") == "action.humidity":
if val8 == "humidity":
humidity, temperature = Adafruit_DHT.read_retry(11, 27)
speech = "the humidity is " + str(humidity) + "%"
elif req.get("queryResult").get("action") == "action.dht11":
if val6 == "temperature" and val8 == "humidity":
humidity, temperature = Adafruit_DHT.read_retry(11, 27)
speech = " The temperature is " + str(temperature) + " C and the
humidity is " + str(humidity) + "%"
elif req.get("queryResult").get("action") == "action.fan":
if val10 == "hot":
GPIO.output(25, GPIO.HIGH)
sp13 = "i turn on fan"
if val10 == "cold":
GPIO.output(25, GPIO.LOW)
sp14 = "i turn off fan"
speech = "OK, " + sp13 + " " + sp14
else:
return {}
print("Response:")
print(speech)
return {
"fulfillmentText": speech,
#"fulfillmentMessages": speech ,
#"data": {},
#"contextOut": [],
#"source": "BankRates"
}
if __name__ == '__main__':
port = int(os.getenv('PORT', 5000))
print("Starting app on port %d" %(port))
app.run(debug=True, port=port, host='0.0.0.0')
PHỤ LỤC
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 75

Đề tài: Ứng dụng chatbot vào điều khiển nhà thông minh, HAY

  • 1.
    BỘ GIÁO DỤC& ĐÀO TẠO TRƢỜNG ĐẠI HỌC SƢ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH --------------------------------- ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: ỨNG DỤNG CHATBOT VÀO ĐIỀU KHIỂN NHÀ THÔNG MINH GVHD: TS. Nguyễn Mạnh Hùng SVTH: Nguyễn Minh Hùng MSSV: 14141139 Tp. Hồ Chí Minh - 06/2018
  • 2.
    i BỘ GIÁO DỤC& ĐÀO TẠO TRƢỜNG ĐẠI HỌC SƢ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH --------------------------------- ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: ỨNG DỤNG CHATBOT VÀO ĐIỀU KHIỂN NHÀ THÔNG MINH GVHD: TS. Nguyễn Mạnh Hùng SVTH: Nguyễn Minh Hùng MSSV: 14141139 Tp. Hồ Chí Minh - 06/2018
  • 3.
    ii TRƢỜNG ĐH SPKTTP. HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC ----o0o---- Tp. HCM, ngày 28 tháng 06 năm 2018 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Minh Hùng MSSV: 14141139 Chuyên ngành: Kỹ thuật Điện Tử Truyền Thông Mã ngành: 14141 Hệ đào tạo: Đại học chính quy Mã hệ: 1 Khóa: 2014 Lớp: 14141DT3B I. TÊN ĐỀ TÀI: ỨNG DỤNG CHATBOT VÀO ĐIỀU KHIỂN NHÀ THÔNG MINH II. NHIỆM VỤ 1. Các số liệu ban đầu: - 1 chatbot đƣợc tạo ra trên nền tảng Dialogflow. - 1 kit raspberry Pi3 B. - 1 Mạch dimmer điều khiển độ sáng của bóng đèn. - 2 Module Relay 5V 2 kênh điều khiển đóng/mở đèn, quạt. - 1 động cơ servo MG90S điều khiển đóng/mở cửa. - 1 Module cảm biến nhiệt độ, độ ẩm DHT11. 2. Nội dung thực hiện: - Tìm hiểu nền tảng Dialogflow và tạo ra chatbot dựa trên nền tảng này. - Tìm hiểu kit Raspberry Pi 3 và ngôn ngữ lập trình Python. - Tạo webhook để nhận dữ liệu từ Dialogflow, xử lí dữ liệu để trả lại đồng thời điều khiển thiết bị trong nhà. - Thiết kế và thi công mạch điều khiển dimmer. - Tìm hiểu cách điều khiển động cơ servo, cảm biến nhiệt độ, độ ẩm DHT11. - Thi công mô hình nhà thông minh, kết nối các module lại với nhau. III. NGÀY GIAO NHIỆM VỤ: 16/03/2018 IV. NGÀY HOÀN THÀNH NHIỆM VỤ: 28/06/2018 V. HỌ VÀ TÊN CÁN BỘ HƢỚNG DẪN: TS. Nguyễn Mạnh Hùng CÁN BỘ HƢỚNG DẪN BM. ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
  • 4.
    iii TRƢỜNG ĐH SPKTTP. HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC ----o0o---- Tp. HCM, ngày 28 tháng 06 năm 2018 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Minh Hùng Lớp: 14141DT3B MSSV: 14141139 Tên đề tài: Ứng dụng chatbot và điều khiển nhà thông minh Tuần/ngày Nội dung Xác nhận GVHD Tuần 1 (16/03 - 23/03) Gặp GVHD để nghe phổ biến yêu cầu làm đồ án, tiến hành chọn đồ án Tuần 2 GVHD tiến hành xét duyệt đề tài Tuần 3 Viết tóm tắt yêu cầu đề tài đã chọn: đề tài làm cái gì, nội dung thiết kế, các thông số giới hạn của đề tài Tuần 4 Tiến hành thiết kế sơ đồ khối, giải thích chức năng các khối Tuần 5 - Tìm hiểu các khái niệm liên quan đến đề tài nhƣ API, webhook - Thực hiên thiết kế trên Dialogflow Tuần 6 - Cài đặt các gói thƣ viện cần thiết cho Raspberry - Thực hiện tạo webhook và xử lí dữ liệu nhận đƣợc Tuần 7 - Thực hiện code phần back-end để hoàn thiện yêu cầu xử lí trả về dữ liệu cho Dialogflow, điều khiển phần cứng. - Sử dụng ngrok để public server online Tuần 8 Tuần 9
  • 5.
    iv Tuần 10 -Thiết kế sơ đồ nguyên lí mạch dimmer - Tiến hành vẽ PCB, chọn linh kiện - Tiến hành thi công mạch - Kiểm tra mạch thi công Tuần 11 - Thi công mô hình đồ án - Kiểm tra, đánh giá mô hìnhTuần 12 Tuần 13 - Viết báo cáo những nội dung đã làm - Hoàn thiện báo cáo và gởi cho GVHD để xem xét góp ý lần cuối trƣớc khi in và báo cáo Tuần 14 Tuần 15 Tiến hành làm silde báo cáo và các nhiệm vụ liên quan đến đồ án tốt nghiệp GV HƢỚNG DẪN (Ký và ghi rõ họ và tên)
  • 6.
    v LỜI CAM ĐOAN ----- ----- Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi và đƣợc sự hƣớng dẫn khoa học của Ts. Nguyễn Mạnh Hùng. Các nội dung nghiên cứu, kết quả trong đề tài này là do tôi tự thực hiện dựa vào một số tài liệu trƣớc đó và không sao chép từ tài liệu hay công trình đã có trƣớc đó. Những thông tin phục vụ cho đề tài đƣợc chính tác giả thu thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo. Tôi xin chịu mọi trách nhiệm về công trình nghiên cứu của riêng mình! Sinh viên thực hiện Nguyễn Minh Hùng
  • 7.
    vi LỜI CẢM ƠN ----- ----- Trong thời gian làm đồ án tốt môn học, em đã nhận đƣợc nhiều sự giúp đỡ, đóng góp ý kiến và chỉ bảo nhiệt tình của thầy cô, gia đình và bạn bè. Em xin gửi lời cảm ơn chân thành đến Ts. Nguyễn Mạnh Hùng, giảng viên Bộ môn Điện Tử Công Nghiệp – Y Sinh - Trƣờng ĐH Sƣ Phạm Kỹ Thuật TP.HCM, ngƣời đã tận tình hƣớng dẫn, chỉ bảo em trong suốt quá trình làm đồ án. Em cũng xin chân thành cảm ơn các thầy cô giáo trong trƣờng ĐH Sƣ Phạm Kỹ Thuật TP.HCM nói chung, các thầy cô trong Bộ môn Điện Tử Công Nghiệp – Y Sinh nói riêng đã dạy dỗ cho em kiến thức về các môn đại cƣơng cũng nhƣ các môn chuyên ngành, giúp em có đƣợc cơ sở lý thuyết vững vàng và tạo điều kiện giúp đỡ em trong suốt quá trình học tập. Cuối cùng, em xin chân thành cảm ơn gia đình và bạn bè, đã luôn tạo điều kiện, quan tâm, giúp đỡ, động viên em trong suốt quá trình học tập và hoàn thành đồ án môn học. Sinh viên thực hiện Nguyễn Minh Hùng
  • 8.
    vii MỤC LỤC Trang bìa..................................................................................................................... i Nhiệm vụ đồ án .......................................................................................................... ii Lịch trình................................................................................................................... iii Cam đoan.....................................................................................................................v Lời cảm ơn ................................................................................................................ vi Mục lục..................................................................................................................... vii Liệt kê hình vẽ........................................................................................................... xi Liệt kê bảng vẽ........................................................................................................ xiv Tóm tắt ......................................................................................................................xv Chƣơng 1. TỔNG QUAN .........................................................................................1 1.1 ĐẶT VẤN ĐỀ...............................................................................................1 1.2 MỤC TIÊU....................................................................................................1 1.3 NỘI DUNG NGHIÊN CỨU .........................................................................2 1.4 GIỚI HẠN .....................................................................................................2 1.5 BỐ CỤC ........................................................................................................3 Chƣơng 2. CƠ SỞ LÝ THUYẾT.............................................................................4 2.1 TỔNG QUAN VỀ CHATBOT .....................................................................4 2.1.1 Khái niệm về chatbot..............................................................................4 2.1.2 Phân loại chatbot.....................................................................................4 2.1.3 Xử lý ngôn ngữ tự nhiên (Natural Language Processing)......................5 2.2 TỔNG QUAN VỀ API..................................................................................5 2.2.1 Khái niệm về API ...................................................................................5 2.2.2 Mô hình của một API..............................................................................6 2.2.3 Các tác vụ thực hiện qua API .................................................................6 2.3 WEBHOOK...................................................................................................7 2.3.1 Khái niệm Webhook ...............................................................................7 2.3.2 Hoạt động của Webhook.........................................................................7 2.4 TỔNG QUAN VỀ DIALOGFLOW .............................................................8 2.4.1 Giới thiệu về Dialogflow ........................................................................8 2.4.2 Cấu trúc của Dialogflow.........................................................................9 a. Agent ...........................................................................................................10
  • 9.
    viii b. Intent ...........................................................................................................10 c.Entities.........................................................................................................15 d. Fulfillment...................................................................................................17 e. Integrations..................................................................................................17 2.5 RASPBERRY PI 3 ......................................................................................18 2.5.1 Giới thiệu về Board Raspberry Pi.........................................................18 2.5.2 Phần cứng của Raspberry Pi 3 ..............................................................18 a. Nguồn cung cấp...........................................................................................20 b. Các cổng giao tiếp.......................................................................................20 c. Các chân giao tiếp GPIO của kit.................................................................22 2.5.3 Hệ điều hành Raspbian cho kit Raspberry Pi .......................................23 2.6 ĐỘNG CƠ SERVO.....................................................................................24 2.6.1 Giới thiệu động cơ servo.......................................................................24 2.6.2 Nguyên lý hoạt động của động cơ servo...............................................25 2.7 CẢM BIẾN NHIỆT ĐỘ DHT11.................................................................27 2.8 MODULE RELAY 2 CHANNEL 5V.........................................................27 2.9 MOSFET .....................................................................................................28 2.9.1 Cấu tạo Mosfet......................................................................................29 2.9.2 Nguyên lí hoạt động..............................................................................30 Chƣơng 3. TÍNH TOÁN VÀ THIẾT KẾ..............................................................31 3.1 GIỚI THIỆU................................................................................................31 3.2 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG ................................................31 3.2.1 Thiết kế sơ đồ khối hệ thống ................................................................31 a. Sơ đồ khối hệ thống ....................................................................................31 b. Sơ đồ mô hình hệ thống ..............................................................................32 3.2.2 Tính toán và thiết kế mạch....................................................................32 a. Thiết kế khối Dialogflow ............................................................................33 b. Thiết kế khối điều khiển raspberry .............................................................33 c. Thiết kế khối điều khiển động lực...............................................................33 d. Thiết kế khối nguồn ....................................................................................35 Chƣơng 4. THI CÔNG HỆ THỐNG.....................................................................36 4.1 GIỚI THIỆU................................................................................................36
  • 10.
    ix 4.2 THIẾT KẾDIALOGFLOW........................................................................36 4.2.1 Lƣu đồ giải thuật...................................................................................36 4.2.2 Thiết kế cho yêu cầu điều khiển ON-OFF............................................37 a. Tạo mới Agent.............................................................................................37 b. Tạo entities..................................................................................................38 c. Tạo Intent ....................................................................................................39 d. Fulfillment...................................................................................................42 e. Integrations..................................................................................................43 4.2.3 Mở rộng cho điều khiển ON-OFF ........................................................44 a. Thêm mới entities........................................................................................44 b. Thêm mới intent..........................................................................................45 4.2.4 Kết quả hoàn chỉnh trên Dialogflow.....................................................46 a. Intents..........................................................................................................46 b. Entities ........................................................................................................46 4.3 LẬP TRÌNH TRÊN RASPBERRY PI 3.....................................................46 4.3.1 Giới thiệu ngôn ngữ lập trình Python ...................................................46 a. Lịch sử của Python......................................................................................47 b. Các phiên bản Python đã phát hành............................................................47 c. Đặc điểm của ngôn ngữ lập trình Python....................................................48 4.3.2 Giới thiệu phần mềm lập trình Python 3 IDLE ....................................49 4.3.3 Lƣu đồ giải thuật...................................................................................50 4.3.4 Viết chƣơng trình hệ thống...................................................................51 4.3.5 Public server lên internet bằng ngrok ...................................................52 4.4 THI CÔNG MẠCH ĐIỀU KHIỂN DIMMER............................................53 4.4.1 Sơ đồ mạch PCB Dimmer.....................................................................54 4.4.2 Thi công mạch ......................................................................................55 4.5 ĐÓNG GÓI VÀ THI CÔNG MÔ HÌNH ....................................................56 4.5.1 Đóng gói bộ điều khiển.........................................................................56 4.5.2 Thi công mô hình..................................................................................57 4.6 KẾT QUẢ VẬN HÀNH HỆ THỐNG ........................................................61 4.7 TÀI LIỆU HƢỚNG DẪN, THAO TÁC.....................................................63 4.7.1 Tài liệu hƣớng dẫn sử dụng ..................................................................63
  • 11.
    x 4.7.2 Quy trìnhthao tác .................................................................................63 Chƣơng 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ................................................65 5.1 DIALOGFLOW...........................................................................................65 5.1.1 Dialogflow ............................................................................................65 5.1.2 Các khái niệm liên quan........................................................................65 5.2 RASPBERRY PI 3 ......................................................................................66 5.2.1 Raspberry Pi 3.......................................................................................66 5.2.2 Công cụ ngrok.......................................................................................66 5.3 PHẦN CỨNG..............................................................................................66 5.3.1 Mạch điều khiển dimmer......................................................................66 5.3.2 Động cơ Servo ......................................................................................67 5.3.3 Module Relay 2 kênh 5V......................................................................67 5.3.4 Module cảm biến DHT11 .....................................................................67 5.4 NHẬN XÉT VÀ ĐÁNH GIÁ .....................................................................67 Chƣơng 6. KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN..........................................69 6.1 KẾT LUẬN .................................................................................................69 6.2 HƢỚNG PHÁT TRIỂN ..............................................................................69 TÀI LIỆU THAM KHẢO ......................................................................................70 PHỤ LỤC.................................................................................................................71
  • 12.
    xi LIỆT KÊ HÌNHVẼ Hình Trang Hình 2.1: Khái niệm chatbot.......................................................................................4 Hình 2.2: Khái niệm về API........................................................................................5 Hình 2.3: Giới thiệu Dialogflow .................................................................................8 Hình 2.4: Các phần của Dialogflow............................................................................9 Hình 2.5: Các mục trong một Intent .........................................................................10 Hình 2.6: Hình ảnh mục context ...............................................................................11 Hình 2.7: Hình ảnh mục Events................................................................................12 Hình 2.8: Hình ảnh mục Training Phrases................................................................12 Hình 2.9: Hình ảnh của mục Action & Parameters...................................................13 Hình 2.10: Hình ảnh mục Responses........................................................................14 Hình 2.11: Hình ảnh của mục Fulfillment ................................................................15 Hình 2.12: Hình ảnh của mục Entities ......................................................................16 Hình 2.13: Các nền tảng tích hợp trong Integrations................................................17 Hình 2.14: Board Raspberry Pi .................................................................................18 Hình 2.15: Phần cứng của Raspberry Pi ...................................................................19 Hình 2.16: Các cổng giao tiếp trên Raspberry..........................................................21 Hình 2.17: Sơ đồ chân GPIO ....................................................................................22 Hình 2.18: Hình ảnh thực tế các chân GPIO.............................................................23 Hình 2.19: Giao diện hệ điều hành Raspbian............................................................24 Hình 2.20: Hình ảnh động cơ Servo..........................................................................24 Hình 2.21: Điều khiển động cơ servo bằng Duty Cycle ...........................................26 Hình 2.22: Cảm biến nhiệt độ - độ ẩm DHT11.........................................................27 Hình 2.23: Module Relay 2 channel 5V ...................................................................28 Hình 2.24: Hình ảnh Mosfet......................................................................................29 Hình 2.25: Các cực của Mosfet.................................................................................29 Hình 2.26: Hình ảnh các loại Mosfet ........................................................................30 Hình 3.1: Sơ đồ khối hệ thống ..................................................................................31 Hình 3.2: Sơ đồ thiết kế mô hình ..............................................................................32 Hình 3.3: Sơ đồ các khối điều khiển động lực..........................................................33 Hình 3.4: Sơ đồ nguyên lí mạch dimmer ..................................................................34
  • 13.
    xii Hình 4.1: Lƣuđồ thiết kế trên Dialogflow................................................................36 Hình 4.2: Tạo mới Agent ..........................................................................................37 Hình 4.3: Cài đặt các thông số cho Agent.................................................................38 Hình 4.4: Thực hiện tạo mới Entities........................................................................38 Hình 4.5: Hình ảnh entities on-off ............................................................................39 Hình 4.6: Hình ảnh entities led .................................................................................39 Hình 4.7: Tạo mới intents .........................................................................................40 Hình 4.8: Bảng Action và Parameters.......................................................................41 Hình 4.9: Mục Responses .........................................................................................41 Hình 4.10: Kích hoạt Fulfillment cho Intent.............................................................42 Hình 4.11: Đặt link webhook trong mục Fulfillment................................................42 Hình 4.12: Tùy chỉnh trong Integrations...................................................................43 Hình 4.13: Giao diện trò chuyện chatbot ..................................................................43 Hình 4.14: Thêm mới entities room..........................................................................44 Hình 4.15: Thêm mới entities status .........................................................................44 Hình 4.16: Thêm mới Intent on-off:condition ..........................................................45 Hình 4.17: Kết quả thao tác trên Intent mới..............................................................45 Hình 4.18: Kết quả hoàn thành Intent.......................................................................46 Hình 4.19: Kết quả hoàn thành Entities ....................................................................46 Hình 4.20: Ngôn ngữ Python ....................................................................................47 Hình 4.21: Giao diện Python 3 IDLE .......................................................................49 Hình 4.22: Thao tác file trên giao diện Python 3 IDLE............................................49 Hình 4.23: Các phần của giao diện ...........................................................................50 Hình 4.24: Lƣu đồ điều khiển trên Raspberry Pi ......................................................51 Hình 4.25: Giới thiệu ngrok......................................................................................53 Hình 4.26: Hình ảnh chạy ngrok...............................................................................53 Hình 4.27: Sơ đồ mạch in PCB.................................................................................54 Hình 4.28: Sơ đồ linh kiện 3D ..................................................................................54 Hình 4.29: Hình ảnh mạch thi công ..........................................................................55 Hình 4.30: Hình ảnh mạch sau thi công....................................................................56 Hình 4.31: Đóng gói bộ điều khiển...........................................................................56 Hình 4.32: Thi công khối đèn xoay chiều.................................................................57
  • 14.
    xiii Hình 4.33: Kếtnối đèn với module Relay ................................................................57 Hình 4.34: Kết nối đèn với mạch dimmer.................................................................58 Hình 4.35: Kết nối Module DHT11 vào đúng vị trí..................................................59 Hình 4.36: Đặt đúng động cơ servo vào vị trí...........................................................59 Hình 4.37: Kết nối với Raspberry Pi.........................................................................60 Hình 4.38: Hình ảnh mô hình thi công hoàn chỉnh...................................................60 Hình 4.39: Điều khiển thiết bị thông qua giao diện..................................................61 Hình 4.40: Kết quả sau khi nhận yêu cầu điều khiển................................................61 Hình 4.41: Yêu cầu điều khiển đóng mở cửa............................................................62 Hình 4.42: Thực hiện mở cửa ...................................................................................62 Hình 4.43: Truy vấn thông tin nhiệt độ.....................................................................63 Hình 4.44: Lƣu đồ hƣớng dẫn sử dụng .....................................................................64
  • 15.
    xiv LIỆT KÊ BẢNG BảngTrang Bảng 2.1: Bảng thông số kỹ thuật của Raspberry Pi.................................................20 Bảng 2.2: Các chân của Servo...................................................................................25 Bảng 2.3: Hình ảnh xung tƣơng ứng với góc quay...................................................26 Bảng 4.1: Các phiên bản Python đã phát hành .........................................................47 Bảng 4.2: Danh sách linh kiện ..................................................................................55
  • 16.
    xv TÓM TẮT Trong nhữngnăm gần đây ngƣời ta thƣờng nhắc nhiều đến AI (trí tuệ nhân tạo) và những ứng dụng rộng rãi của chúng. Nhóm em rất thích thú khi biết những thành tựu mà AI(trí tuệ nhân tạo) sẽ mang lại trong tƣơng lai, đặc biệt là những ứng dụng hiệu quả của chatbot trong kinh doanh và khoa học kỹ thuật. Và để bắt kịp xu hƣớng đó, nhóm chúng em quyết định chọn chatbot làm đối tƣợng nghiên cứu và ứng dụng cụ thể vào điều khiển nhà thông minh. Nhà thông minh đƣợc thiết kế sử dụng Raspberry Pi 3 cho việc điều khiển và giám sát những thiết bị trong nhà thông qua việc giao tiếp với chatbot. Việc mô phỏng các thiết bị trong nhà đƣợc thể hiện bằng làm mô hình ngôi nhà và các thiết bị điện bên trong. Một số thiết bị đƣợc điều khiển thông qua việc trò chuyện với chatbot:  Điều khiển mở/tắt các thiết bị dân dụng.  Điều khiển tuyến tính các thiết bị.  Giám sát nhiệt độ và độ ẩm trong nhà.  Có thể mở/tắt tất cả các thiết bị cùng 1 lúc hoặc từng thiết bị.  Đóng mở cửa bằng động cơ servo.
  • 17.
    CHƢƠNG 1. TỔNGQUAN BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 1 Chƣơng 1. TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ Trong những năm gần đây ngƣời ta thƣờng nhắc nhiều đến AI (trí tuệ nhân tạo) và những ứng dụng rộng rãi của chúng. Nhóm em rất thích thú khi biết những thành tựu mà AI (trí tuệ nhân tạo) sẽ mang lại trong tƣơng lai, đặc biệt là những ứng dụng hiệu quả của chatbot trong kinh doanh và khoa học kỹ thuật. Và để bắt kịp xu hƣớng đó, nhóm chúng em quyết định chọn chatbot làm đối tƣợng nghiên cứu và ứng dụng cụ thể vào điều khiển nhà thông minh. Chatbot là một lĩnh vực của trí tuệ nhân tạo, chatbot thực hiện hội thoại thông minh giữa máy tính với ngƣời dùng thông qua trò chuyện trực tiếp. Với việc cung cấp thông tin cho từng ngữ cảnh để điều khiển các thiết bị khác nhau qua internet. Đồng thời ngày nay mạng lƣới Internet đang ngày càng trở nên phổ biến, điều đó khiến cho việc điều khiển thiết bị từ xa qua mạng Internet trở nên dễ dàng và tiện lợi hơn. Nhà thông minh đƣợc thiết kế sử dụng Raspberry Pi 3 cho việc điều khiển và giám sát những thiết bị trong nhà thông qua việc giao tiếp với chatbot. Ngoài việc điều khiển các thiết bị trong nhà bằng app android nhƣ những đề tài về smarthome đã có, ngƣời dùng có thể giao tiếp với chatbot về mọi thứ và điều khiển thiết bị trong gia đình thông qua việc trò chuyện với chatbot. So với việc điều khiển bằng thao tác cứng nhắt trên các app android thông thƣờng nhƣ các đề tài về IoT đã có trƣớc đây, ngƣời dùng có thể trò chuyện với chatbot nhƣ một trợ lí ảo giúp ngƣời dùng quản lí và điều khiển hoạt động của ngôi nhà. Vì những lý do đó, nhóm sinh viên quyết định thực hiện đề tài “Ứng dụng chatbot vào điều khiển nhà thông minh”. 1.2 MỤC TIÊU Tạo ra đƣợc chatbot giao tiếp với ngƣời dùng và thực hiện nhiệm vụ khi có yêu cầu từ ngƣời dùng thông qua mạng internet. Đồ án đƣợc nghiên cứu, khảo sát, xây dựng với mục định áp dụng những kiến thức đã học và tìm hiểu đƣợc để thiết kế, tạo ra một hệ thống chatbot để điều khiển thiết bị 1 cách hoàn chỉnh.
  • 18.
    CHƢƠNG 1. TỔNGQUAN BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 2 Một số chức năng của hệ thống điều khiển bằng hệ thống chatbot:  Điều khiển mở/tắt các thiết bị dân dụng.  Điều khiển tuyến tính các thiết bị.  Giám sát nhiệt độ và độ ẩm trong nhà.  Có thể mở/tắt tất cả các thiết bị cùng 1 lúc hoặc từng thiết bị. 1.3 NỘI DUNG NGHIÊN CỨU  NỘI DUNG 1: Tìm hiểu về khái niệm chatbot và cách tạo ra chatbot.  NỘI DUNG 2: Tìm hiểu về các khái niệm về API, Webhook và trang dialogflow.com (tiền thân là API.AI).  NỘI DUNG 3: Tìm hiểu các khái niệm intent, entity, fulfillment,.... và tạo ra một chatbot từ Dialogflow để phục vụ đề tài.  NỘI DUNG 4: Tìm hiểu định dạng Json và cách trích xuất dữ liệu liệu để nhận biết yêu cầu từ ngƣời dùng.  NỘI DUNG 5: Tìm hiểu về kit raspberry pi 3 và ngôn ngữ lập trình python.  NỘI DUNG 6: Lập trình giao tiếp giữa raspberry pi 3 với chatbot bằng webhook thông qua mạng internet.  NỘI DUNG 7: Thiết kế, thi công và lập trình khối điều khiển công suất, cảm biến trong nhà.  NỘI DUNG 8: Thiết kế, thi công mô hình nhà thông minh.  NỘI DUNG 9: Chạy thử nghiệm và cân chỉnh hệ thống.  NỘI DUNG 10: Đánh giá kết quả thực hiện. 1.4 GIỚI HẠN  Tạo ra chatbot cơ bản có thể trò chuyện với ngƣời dùng và thực hiện điều khiển thiết bị trong nhà khi có yêu cầu từ ngƣời dùng.  Thiết kế mô hình ngôi nhà thông minh.  Giám sát ngôi nhà bằng cảm biến và giao tiếp với ngƣời dùng qua chatbot.  Dùng chatbot để điều khiển đèn, quạt, đóng mở cửa.... để mô phỏng ngôi nhà thông minh.  Hệ thống hoạt động thông qua mạng internet, chatbot giao tiếp đơn giản.
  • 19.
    CHƢƠNG 1. TỔNGQUAN BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 3 1.5 BỐ CỤC  Chƣơng 1: Tổng Quan Chƣơng này trình bày đặt vấn đề dẫn nhập lý do chọn đề tài, mục tiêu, nội dung nghiên cứu, các giới hạn thông số và bố cục đồ án.  Chƣơng 2: Cơ Sở Lý Thuyết Chƣơng này trình bày tổng quát về các lý thuyết có liên quan đến các vấn đề mà đề tài sẽ dùng để thực hiện thiết kế, thi công cho đề tài. Tìm hiểu về nền tảng Dialogflow.com, các khái niệm API, webhook và tìm hiểu rõ về kit Raspberry pi 3.  Chƣơng 3: Thiết Kế và Tính Toán Giới thiệu tổng quan về các yêu cầu của đề tài mà mình thiết kế và các tính toán, thiết kế sơ đồ khối hệ thống và các khối .  Chƣơng 4: Thi Công Hệ Thống Chƣơng này trình bày kết quả thi công trên phần mềm và phần cứng, quá trình thi công mạch PCB. Xây dựng mô hình nhà thông minh và thực hiện kết nối các module với nhau.  Chƣơng 5: Kết Quả, Nhận Xét và Đánh Giá Chƣơng này trình bày kết quả của cả quá trình nghiên cứu làm đề tài, nêu lên những kiến thức đã học đƣợc từ quá trình làm đồ án, nhận xét và đánh giá sản phẩm.  Chƣơng 6: Kết Luận và Hƣớng Phát Triển Trình bày ngắn gọn những kết quả thu đƣợc từ đó tiến hành kết luận, đánh giá sản phẩm có đạt hay không, từ đó đƣa ra hƣớng phát triển để tăng chức năng, khả năng cho sản phẩm.
  • 20.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 4 Chƣơng 2. CƠ SỞ LÝ THUYẾT 2.1 TỔNG QUAN VỀ CHATBOT 2.1.1 Khái niệm về chatbot Định nghĩa một cách đơn giản nhất, chatbot là một chƣơng trình máy tính tƣơng tác với ngƣời dùng bằng ngôn ngữ tự nhiên dƣới một giao diện đơn giản, âm thanh hoặc dƣới dạng tin nhắn. Hình 2.1: Khái niệm chatbot Về cơ bản, chatbot là một hình thức thô sơ của phần mềm trí tuệ nhân tạo. Nó hoạt động độc lập, có thể tự động trả lời những câu hỏi hoặc xử lý tình huống càng thật càng tốt. Phạm vi và sự phức tạp của chatbot đƣợc xác định bởi thuật toán của ngƣời tạo nên chúng. Chatbot là sự kết hợp của các kịch bản có trƣớc và tự học trong quá trình tƣơng tác. Với các câu hỏi đƣợc đặt ra, chatbot sẽ dự đoán và phản hồi chính xác nhất có thể. Nếu tình huống đó chƣa xảy ra (không có trong dữ liệu), chatbot sẽ bỏ qua nhƣng sẽ đồng thời “bắt chƣớc” để áp dụng cho các cuộc trò chuyện thƣờng xuyên (lặp đi lặp lại nhiều lần) về sau. 2.1.2 Phân loại chatbot Theo đúng cách mà chúng tƣơng tác với ngƣời dùng, các chatbot thƣờng đƣợc chia thành 2 loại:
  • 21.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 5 - Audiotory (âm thanh): + Siri (Apple). + Google Assistant (Google). + Cortana (Microsoft). + Javis của Tony – Stark. - Textual (tin nhắn): + Thời trang - tƣ vấn quần áo (H&M). + Thực phẩm - order pizza (Dominos Pizza). + Làm đẹp - stylish cá nhân (Sephora). + Giao thông - thông tin tàu điện vùng Kanto (qmau.me). 2.1.3 Xử lý ngôn ngữ tự nhiên (Natural Language Processing) Để chatbot có thể hiểu đƣợc ngƣời dùng nói gì thì ta phải dùng đến NLP (Natural Language Processing). Xử lý ngôn ngữ tự nhiên (NLP) là một nhánh của Trí tuệ nhân tạo, tập trung vào việc nghiên cứu sự tƣơng tác giữa máy tính và ngôn ngữ tự nhiên của con ngƣời. Mục tiêu của lĩnh vực này là giúp máy tính hiểu và thực hiện hiệu quả những nhiệm vụ liên quan đến ngôn ngữ của con ngƣời nhƣ: tƣơng tác giữa ngƣời và máy, cải thiện hiệu quả giao tiếp giữa con ngƣời với con ngƣời, hoặc đơn giản là nâng cao hiệu quả xử lý văn bản và lời nói. NLP đƣợc Dialogflow sử dụng để tạo ra những chatbot thông minh. 2.2 TỔNG QUAN VỀ API 2.2.1 Khái niệm về API Hình 2.2: Khái niệm về API API (Application Programming Interface) là một giao diện lập trình ứng dụng mà một hệ thống máy tính hay ứng dụng cung cấp để cho phép các yêu cầu
  • 22.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 6 dịch vụ có thể đƣợc tạo ra từ các chƣơng trình máy tính khác, và/hoặc cho phép dữ liệu có thể đƣợc trao đổi qua lại giữa chúng. 2.2.2 Mô hình của một API API bao gồm ba phần: - Ngƣời dùng: ngƣời đƣa ra yêu cầu. - Máy khách: máy tính gửi yêu cầu tới máy chủ. - Máy chủ: máy tính phản hồi yêu cầu. Máy chủ đƣợc xây dựng nó thu thập và lƣu trữ dữ liệu. Khi máy chủ đó đang chạy, các lập trình viên tạo ra dữ liệu, bao gồm các end point (điểm cuối) nơi có thể tìm thấy dữ liệu cụ thể. Sau đó, ngƣời dùng bên ngoài có thể truy vấn (hoặc tìm kiếm) dữ liệu trên máy chủ hoặc xây dựng một chƣơng trình chạy tìm kiếm trên cơ sở dữ liệu và biến thông tin đó thành định dạng có thể sử dụng khác. Nhiều công ty sử dụng các API mở từ các công ty lớn hơn nhƣ Google và Facebook để truy cập dữ liệu không có sẵn. Trong trƣờng hợp này các API làm giảm đáng kể các rào cản phát triển đối với các công ty nhỏ hơn. 2.2.3 Các tác vụ thực hiện qua API API là cách để hai máy tính (phần mềm) giao tiếp với nhau. Có bốn loại hành động mà API có thể thực hiện:  GET: yêu cầu dữ liệu từ máy chủ.  POST: gửi các thay đổi từ máy khách đến máy chủ khi thêm thông tin vào máy chủ, nhƣ tạo một mục mới.  PUT: sửa đổi hoặc thêm vào thông tin hiện có.  DELETE: xóa thông tin hiện có. Khi bạn kết hợp các end point (điểm cuối) với các hành động này, bạn có thể tìm kiếm hoặc cập nhật mọi thông tin có sẵn trên API. Bạn sẽ cần phải kiểm tra tài liệu API để tìm hiểu cách mã hóa các hành động này, vì chúng hoàn toàn khác nhau. - Thực hiện một yêu cầu trên một máy chủ:
  • 23.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 7 HTTP: giao thức truyền siêu văn bản. Đây là cách bạn truy cập trang web bằng cách nhập URL vào thanh tìm kiếm trong trình duyệt của bạn. Đây là một cách thực sự dễ dàng để truy cập dữ liệu. Định dạng văn bản: XML, JSON. Đây là những ngôn ngữ chính để truy cập dữ liệu qua API. Khi bạn nhận đƣợc dữ liệu của mình, bạn sẽ cần phải biết đọc mã XML hoặc JSON để hiểu những gì máy chủ đã cung cấp cho bạn. - Ý tƣởng và các bƣớc trong quy trình API:  Hầu hết các API đều yêu cầu key (mã khóa) API. Khi bạn tìm thấy API bạn muốn sử dụng, hãy xem tài liệu về các yêu cầu truy cập. Hầu hết các API sẽ yêu cầu bạn hoàn tất xác minh danh tính, chẳng hạn nhƣ đăng nhập bằng tài khoản Google của bạn. Bạn sẽ nhận đƣợc một chuỗi ký tự và số duy nhất để sử dụng khi truy cập API, thay vì chỉ thêm email và mật khẩu của bạn.  Các công cụ sẵn có (và thƣờng miễn phí) giúp bạn điều hƣớng các yêu cầu của mình để truy cập các API hiện có bằng key API mà bạn nhận đƣợc. Bạn vẫn sẽ cần phải biết một số cú pháp từ tài liệu, nhƣng có rất ít kiến thức mã hóa cần thiết.  Cách tốt nhất tiếp theo để lấy dữ liệu từ API là tạo URL từ tài liệu API hiện có. Nhìn chung, yêu cầu API trông không khác nhiều so với URL trình duyệt thông thƣờng, nhƣng dữ liệu đƣợc trả về sẽ ở dạng dễ đọc cho máy tính. 2.3 WEBHOOK 2.3.1 Khái niệm Webhook Webhook là một HTTP callback: là 1 công cụ để truy vấn và lƣu trữ dữ liệu của một Event xác định. Khi một trong những sự kiện đƣợc kích hoạt, nó sẽ gửi một HTTP POST đến URL đã đƣợc cấu hình webhook. 2.3.2 Hoạt động của Webhook Một ứng dụng web đang triển khai Webhook sẽ POST một thông báo tới một URL khi một event xảy ra. Events này do ngƣời dùng cấu hình và URL này đƣợc ngƣời dùng đăng ký với trang web. Hay nói cách khác, bằng cách cho phép ngƣời
  • 24.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 8 dùng chỉ định một URL cho các sự kiện khác nhau, ứng dụng sẽ POST dữ liệu tới các URL đó khi các sự kiện xảy ra. Sau khi nhận đƣợc thông báo thành công, webhook sẽ trả về status code 200 OK về cho trang web. Những đặc điểm của webhook:  Push: nhận dữ liệu theo thời gian thực Bất cứ khi nào một events đã đƣợc cấu hình trƣớc xảy ra thì ngay lập tức dữ liệu sẽ gửi đến URL đã đăng ký ngay lập tức với thời gian thực.  Pipes: nhận dữ liệu và truyền đi Một Pipe xảy ra khi WebHook của bạn không chỉ nhận dữ liệu thời gian thực, mà còn tiếp tục thực hiện khi có một event mới, kích hoạt các hành động không liên quan đến sự kiện ban đầu.  Plugins: xử lý dữ liệu và trả lại thứ gì đó Đây là nơi mà toàn bộ web trở thành một nền tảng lập trình. Bạn có thể sử dụng Webhook này để cho phép ngƣời khác mở rộng ứng dụng của bạn. Ý tƣởng chung là một ứng dụng web gửi dữ liệu qua Webhook cũng sẽ sử dụng phản hồi từ webhooks để sửa đổi dữ liệu của riêng nó. Theo cách này, webhook thay đổi ứng dụng của bạn nếu bạn muốn cho phép những ngƣời khác thực sự mở rộng và nâng cao khả năng của ứng dụng của bạn. 2.4 TỔNG QUAN VỀ DIALOGFLOW 2.4.1 Giới thiệu về Dialogflow Hình 2.3: Giới thiệu Dialogflow Dialogflow.com (tiền thân là API.AI) là một API do Google cung cấp nhằm giúp các lập trình viên dễ dàng hơn khi lập trình các sản phẩm có giao tiếp giữa
  • 25.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 9 ngƣời dùng với sản phẩm thông qua các đoạn hội thoại bằng văn bản (text) hoặc giọng nói (voice). Dialogflow là nền tảng về công nghệ tƣơng tác giữa con ngƣời và máy tính dựa trên các cuộc trò truyện bằng ngôn ngữ tự nhiên và có thể đƣợc sử dụng để phát hiện các từ khóa và ý định trong câu của ngƣời dùng. Vai trò của nó là giúp xây dựng chatbots sử dụng Machine Learning. Với DialogFlow hỗ trợ các tích hợp với các nền tảng, dịch vụ khác nhau nhƣ Facebook Messenger, các nền tảng Google, Skype, v.v... chatbot của bạn sẽ làm việc với mọi nền tảng này nếu bạn thiết lập tích hợp đúng cách. Dialogflow sử dụng trí tuệ nhân tạo (AI) giúp phân tích ngôn ngữ tự nhiên để hiểu đƣợc những gì ngƣời dùng đƣa vào. Hiện Dialogflow có 2 phiên bản: - Standad: Hoàn toàn miễn phí để sử dụng - Và Enterprise: Cần trả một ít tiền 2.4.2 Cấu trúc của Dialogflow Dialogflow gồm có 5 phần chính là Agent, Intent, Entities, Fulfillment và Intergrations. Hình 2.4: Các phần của Dialogflow
  • 26.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 10 a. Agent Agent là khái niệm đƣợc dùng để đại diện cho một mô-đun (module) NLU (Natural Language Understanding – Phân tích để hiểu ngôn ngữ tự nhiên). Agent giúp bạn phân tích những những gì ngƣời dùng đƣa vào (text hoặc voice) để chuyển thành những dữ liệu mà bạn có thể xử lý đƣợc bằng lập trình. Bạn sẽ sử dụng một Agent để quản lý các đoạn hội thoại thông qua Intents, Entities. b. Intent Intent là đại diện cho một ánh xạ giữa những gì ngƣời dùng đƣa vào và hành động sẽ đƣợc thực hiện bởi phần mềm. Một Intent là một tập những gì ngƣời dùng nói mà chúng có cùng một ý nghĩa. Hình 2.5: Các mục trong một Intent Giao diện intent có các phần nhƣ sau:  Contexts
  • 27.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 11  Events  Training phrases  Action and parameters  Responses  Fulfillment Contexts Contexts thể hiện ngữ cảnh hiện tại của yêu cầu ngƣời dùng. Điều này giúp cho chatbot hiểu ngƣời dùng đang nói gì bằng việc phân biệt các cụm từ mơ hồ hoặc có ý nghĩa khác nhau. Trong một Intent của Dialogflow có input context và output context nhƣ hình dƣới đây: Hình 2.6: Hình ảnh mục context Input context có nhiệm vụ giúp Dialogflow xác định Intent này chỉ đƣợc thực hiện khi đang có các context tƣơng ứng. Output context đƣợc tạo ra khi một intent đƣợc gọi và dùng để xác định đâu là intent tiếp theo. Mặc định, một context của Dialogflow sẽ hết hạn sau 5 lần requests hoặc 10 phút kể từ khi nó đƣợc tạo ra Events Events là một tính năng cho phép bạn gọi các intents theo tên sự kiện thay vì truy vấn từ ngƣời dùng. Dƣới đây là các tên event đƣợc Dialogflow hỗ trợ khi ngƣời dùng click vào các nền tảng nhắn tin.
  • 28.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 12 Hình 2.7: Hình ảnh mục Events Training Phrases Là những gì mà ngƣời dùng có thể nói để thực hiện một yêu cầu nhất định. Có 2 loại user say trong Dialogflow: @ Là những mẫu (template) văn bản mà nó sẽ tham chiếu đến các entities. “ Là những ví dụ (example) mà ngƣời dùng sẽ có thể nói. Hình 2.8: Hình ảnh mục Training Phrases
  • 29.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 13 Mặc dù Dialogflow hỗ trợ cả hai loại hình trên, nhƣng khuyến cáo chúng ta chỉ nên sử dụng loại số 2 (example) vì nó giúp cho việc học cũng nhƣ xử lý của Dialogflow hoạt động nhanh & tối ƣu hơn. Ngoài ra, chúng ta hãy ghi nhớ khi tạo intents, nếu nhập đƣợc càng nhiều các ví dụ ở user say thì càng giúp cho Chatbot càng “thông minh” hơn. Action and parameters Action (hành động) chính là giá trị mà Dialogflow hỗ trợ để giúp lập trình viên phân biệt đƣợc trong trƣờng hợp này đâu là các văn bản liên quan đến Intent đề cập và đâu là các văn bản khác. Đi kèm với Action là các Parameter (tham số). Hình 2.9: Hình ảnh của mục Action & Parameters Parameters là các tham số thƣờng đƣợc trích xuất trong câu nói của ngƣời dùng, đƣợc liên kết với các entities. Mỗi tham số là giá trị đƣợc trích xuất từ văn bản của ngƣời dùng thông qua việc sử dụng các entities tƣơng ứng, ví dụ: Tham số address, kiểu @sys.location, khi đó, trong văn bản của ngƣời dùng có Hà Nội, hay Đà Nẵng, Tokyo, New York, Paris,… thì sẽ đƣợc Dialogflow xử lý để gán vào cho tham số address. Khi định nghĩa các tham số, có các thông tin mà chúng ta cần quan tâm:  Constant: Là giá trị mà chúng ta nhập vào ô value, tham số sẽ luôn luôn mang giá trị này.
  • 30.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 14  Default: Là giá trị mặc định đƣợc gán cho tham số nếu trong văn bản của ngƣời dùng không đề cập đến.  IsList: giúp Dialogflow xác định cả 3 giá trị sẽ đƣợc gán vào cho cùng 1 tham số.  Required: Khi required đƣợc lựa chọn, nếu trong văn bản của ngƣời dùng mà Dialogflow không tìm đƣợc giá trị để gán vào cho tham số, Dialogflow sẽ đánh dấu để yêu cầu ngƣời dùng đƣa vào. Khi đó câu hỏi từ chatbot để yêu cầu ngƣời dùng cung cấp thông tin sẽ đƣợc viết tại mục Prompt. Respone Respone là những câu trả lời tƣơng ứng với những câu hỏi ngƣời dùng đặt ra ở trên, chúng ta có thể sử dụng giá trị của parameters để trả lời cho ngƣời dùng. Để sử dụng , chúng ta sử dụng theo định dạng $parameter_name. Hình 2.10: Hình ảnh mục Responses Fulfillment Cài đặt để cho phép bạn gửi thông tin từ intent đó khi nó đƣợc ngƣời dùng yêu cầu đến web service và nhận thông tin xử lí từ nó. Thông tin đƣợc gửi dƣới định dạng Json có cấu trúc nhƣ sau:
  • 31.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 15 Hình 2.11: Hình ảnh của mục Fulfillment Trong đó, có 4 mục chính là:  responseId : Id duy nhất cho mỗi yêu cầu.  session: Id làm việc duy nhất.  queryResult: Kết quả của yêu cầu đoạn hội thoại.  originalDetectIntentRequest: Yêu cầu đến từ một nền tảng tích hợp. c. Entities Khái niệm Entities là những công cụ đƣợc sử dụng để trích xuất các giá trị của tham số từ ngôn ngữ tự nhiên. Bất kỳ những gì mà bạn muốn biết từ nội dung của ngƣời dùng đều sẽ có một Entity tƣơng ứng.
  • 32.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 16 Hình 2.12: Hình ảnh của mục Entities Phân loại Dialogflow định nghĩa ra ba loại Entities:  System (là các entities đƣợc tạo bởi Dialogflow)  Developer (là các entities đƣợc tạo bởi lập trình viên)  User (là entities đƣợc tạo ra cho mỗi lần hỏi của ngƣời dùng) System Entities Đây là những entities đƣợc tạo sẵn bởi Dialogflow (giống nhƣ trong ngôn ngữ lập trình thì String, Number,… là những kiểu dữ liệu đƣợc tạo sẵn bởi ngôn ngữ lập trình) để tạo điều kiện cho lập trình viên dễ dàng hơn trong việc xử lý những nghiệp vụ cơ bản của mọi loại Chatbot. Tùy thuộc vào ngôn ngữ là Tiếng Anh, tiếng Pháp, hay tiếng Nhật,… mà số lƣợng system entities của mỗi ngôn ngữ sẽ khác nhau. Developer Entities Đây là những entities do lập trình viên tạo ra. Cấu tạo của entities Cấu tạo entities kiểu mapping gồm 2 thành phần:  Reference value (Là giá trị mà developer cần nhận đƣợc)  Synonyms (Là những từ đồng nghĩa)
  • 33.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 17 Ý nghĩa của nó là khi ngƣời dùng nói có đề cập đến bất kỳ văn bản nào giống nhƣ những văn bản trong phần synonyms thì nó đều đƣợc ánh xạ về giá trị reference. d. Fulfillment Fulfillment (hay Webhook) là một API ở Backend mà chúng ta cần cung cấp để Dialogflow gọi đến khi cần xử lý nghiệp vụ trƣớc khi Dialogflow trả lời lại cho ngƣời dùng. Service của bạn sẽ nhận POST request từ Dialogflow bất kỳ khi nào ngƣời dùng nhắn tin đến Dialogflow. e. Integrations Đây là mục để tích hợp Dialogflow vào các nền tảng nhắn tin khác. Có rất nhiều nền tảng đƣợc Dialogflow hỗ trợ. Hình 2.13: Các nền tảng tích hợp trong Integrations
  • 34.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 18 2.5 RASPBERRY PI 3 2.5.1 Giới thiệu về Board Raspberry Pi Hình 2.14: Board Raspberry Pi Raspberry Pi là một chiếc máy tính tí hon giá chỉ từ 35$ chạy hệ điều hành Linux ra mắt vào tháng 2 năm 2012. Ban đầu Raspberry Pi đƣợc phát triển dựa trên ý tƣởng tiến sĩ Eben Upton tại đại học Cambridge muốn tạo ra một chiếc máy tính giá rẻ để học sinh có thể dễ dàng tiếp cận và khám phá thế giới tin học. Raspberry Pi (RPi) là một máy tính siêu nhỏ, chỉ có kích thƣớc nhƣ 1 chiếc thẻ ATM rút tiền. Bạn chỉ cần 1 bàn phím, 1 tivi hoặc 1 màn hình có cổng HDMI/DVI, 1 nguồn USB 5V và 1 dây micro USB là đã có thể sử dụng RPi nhƣ 1 máy tính bình thƣờng. Với RPi, bạn có thể sử dụng các ứng dụng văn phòng, nghe nhạc, xem phim độ nét cao (tới 1024p). 2.5.2 Phần cứng của Raspberry Pi 3
  • 35.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 19 Hình 2.15: Phần cứng của Raspberry Pi Thông số kỹ thuật Nội dung Nguồn cung cấp 5V DC, dòng cấp tối thiểu 800 mA. SoC Broadcom BCM2836. CPU ARM Cortex-A7 lõi tứ, xung nhịp 900 MHz. GPU Broadcom VideoCore IV xung nhịp 250 MHz. OpenGL ES 2.0 (tốc độ 24 GFLOPS). MPEG-2 và VC-1, 1080p30 H.264/MPEG-4 AVC.
  • 36.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 20 RAM 1 Gb SDRAM (đƣợc chia sẻ giữa GPU và CPU). Cổng USB 4 cổng USB 2.0. Ngõ vào video Cổng CSI (15 chân) sử dụng chung với module camera. Ngõ ra video HDMI (rev 1.3.và 1.4). Ngõ ra audio Cổng audio 3.5 mm hoặc cổng HDMI. Khe cắm thẻ nhớ Hỗ trợ thẻ MicroSD Kết nối mạng Cổng Ethernet 10/100 Mbit/s, chuẩn RJ45. Ngõ ra khác 17 chân GPIO. Bảng 2.1: Bảng thông số kỹ thuật của Raspberry Pi Trung tâm của RPi là vi xử lý Broadcom BCM2835 chạy ở tốc độ 700mHz. Đây là vi xử lý SoC (system-on-chip) tức là hầu hết mọi thành phần của hệ thống gồm CPU, GPU cũng nhƣ audio, communication chip đều đƣợc tích hợp trong một. Chip SoC này nằm ngay bên dƣới chip memory Hynix 512 MB màu đen ở giữa board. a. Nguồn cung cấp Kit Raspberry Pi 3 model B (gọi tắt là kit raspberry Pi 3) đƣợc cấp nguồn qua cổng microUSB nhƣ hình 2.1, với mức điện áp là 5V DC, dòng cấp khuyến nghị là 800 mA khi không gắn ngoại vi. Các trƣờng hợp còn lại, ta nên sử dụng nguồn có dòng cấp từ 1000 mA đến 2000 mA. b. Các cổng giao tiếp
  • 37.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 21 Hình 2.16: Các cổng giao tiếp trên Raspberry Trên kit sử dụng các cổng giao tiếp sau:  HDMI: Hỗ trợ các độ phân giải từ 640x350 đến 1920x1200 theo cả 2 chuẩn màu PAL và NTSC. Dòng cấp cho cổng HDMI là 50 mA.  CSI: Trên kit có cổng kết nối với module camera thƣờng hoặc camera NoIR (dành riêng cho kit Raspberry Pi) gồm 15 chân. Dòng cấp cho camera là khoảng 250 mA.  Audio: Kit hỗ trợ xuất âm thanh qua cổng Audio chuẩn 3.5 mm.  Cổng Ethernet: Chuẩn giao tiếp RJ45, tốc độ 10/100 Mbit/s.  Khe cắm thẻ nhớ microSD: Mọi dữ liệu, bao gồm cả hệ điều hành của kit đƣợc lƣu trữ trên thẻ nhớ. Ta nên sử dụng thẻ nhớ microSD class 10, dung lƣợng tối thiểu là 8Gb để đảm bảo tốc độ cũng nhƣ không gian lƣu trữ.  Cổng USB: Trên kit có 4 cổng USB chuẩn A. Mặc định dòng cấp tối đa ở các cổng này là 600 mA. Kit sử dụng IC AP2553W6 để quản lý năng lƣợng trên các cổng USB, do đó ta có thể thay đổi dòng cung cấp từ 0.6A đến 1.2A bằng cách thay đổi giá trị trong tập tin /boot/config.txt. Việc cấu hình sai có thể gây hại cho kit.  TFT Touch Screen: nơi đây sẽ giúp cho bạn có thể kết nối Raspberry Pi với màn hình cảm ứng để hiển thị và sử dụng Raspberry một cách trực quan nhất. Chúng ta có thể thực hiện các tác vụ tƣơng đƣơng nhƣ khi sử dụng chuột và bàn phím.
  • 38.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 22  TV: dùng để kết nối và phát tín hiệu hình ảnh lên Tivi. c. Các chân giao tiếp GPIO của kit Raspberry PI 2 có 40 chân giao tiếp nhƣ hình 2.17 bên dƣới. Các GPIO có thể đƣợc sử dụng để điều khiển ngoại vi nhƣ LEDs, động cơ, relays,…Nó cũng có thể đƣợc sử dụng để đọc trạng thái của nút nhấn, switch, hoặc các cảm biến nhƣ cảm biến nhiệt độ, độ ẩm, các module RFID, module cảm biến gia tốc,… Lƣu ý là các chân GPIO xuất tín hiệu ở mức điện áp là 3.3V, tổng dòng cấp đồng thời cho tất cả các chân là 50 mA. Nhƣ vậy mỗi chân GPIO có dòng ngõ ra dao động trong khoảng 2mA đến 16 mA. GPIO không đƣợc thiết kế để kéo tải có công suất lớn. Chân nguồn số 2 và số 4 có thể sử dụng để cấp nguồn. Các chân này có dòng cấp phụ thuộc vào nguồn cung cấp cho kit hoạt động. Ví dụ: nguồn cung cấp là 1000 mA thì chúng có thể cung cấp dòng vào khoảng 300 mA. Để lập trình giao tiếp có các GPIO này, ta cần có thƣ viện chân của chúng. Tùy thuộc vào ngôn ngữ lập trình đang sử dụng là C hay Python mà có thƣ viện tƣơng ứng. Đối với ngôn ngữ C, ta cài đặt thƣ viện BCM2835 do Mike McCauley phát triển, tƣơng ứng với Python là thƣ viện RPi.GPIO. Hình 2.17: Sơ đồ chân GPIO
  • 39.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 23 GPIO: Raspberry Pi cung cấp nhiều cổng GPIO, giao tiếp SPI, I2C, Serial. Các cổng GPIO đƣợc sử dụng để xuất/nhận giá trị 0/1 ra/vào từ bên ngoài. Giao tiếp SPI, I2C, Serial có thể đƣợc dùng để kết nối trực tiếp với các vi điều khiển khác. Đặc biệt phù hợp cho những ai cần điều khiển các thiết bị điện tử ngoại vi. Hình 2.18: Hình ảnh thực tế các chân GPIO 2.5.3 Hệ điều hành Raspbian cho kit Raspberry Pi Các Raspberry Pi sử dụng hệ điều hành dựa trên nền tảng Linux. Phần cứng GPU đƣợc truy cập thông qua Image Firmware đƣợc nạp vào GPU vào lúc khởi động từ thẻ SD. Linux là tên gọi của một họ các hệ điều hành mã nguồn mở. Lúc đầu, nó đƣợc phát triển để chạy trên các máy tính PC dựa trên kiến trúc Intel X86 nhƣng hiện nay, Linux đã đƣợc port qua nhiều kiến trúc khác. Cái tên Linux đƣợc gọi do nó sử dụng nhân hệ điều hành là Linux kernel. Linux kernel đƣợc giới thiệu lần đầu vào tháng 10 năm 1991, đƣợc viết và duy trì bởi Linus Torvalds. Từ Linux, ngƣời ta đã phát triển nhiều hệ điều hành khác nhau nhƣ Ubuntu, Debian, CentOS, Red Hat,…gọi chung là các bản phân phối. Raspbian là một bản phân phối mã nguồn mở, đƣợc xây dựng dựa trên Debian, nhƣng đƣợc tối ƣu để phù hợp với phần cứng của kit Raspberry Pi. Phiên bản đầu tiên ra đời vào tháng 6 năm 2012. Hiện nay, Raspbian vẫn đang là một trong những bản phân phối phổ biến và đƣợc cộng đồng hỗ trợ nhiều nhất dành cho Raspberry Pi, với hơn 35000 gói phần mềm có sẵn.
  • 40.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 24 Raspbian sử dụng môi trƣờng Desktop (Desktop Evironments) là MATE. Nó đƣợc phát triển từ giao diện GNOME 2, cung cấp một giao diện ngƣời dùng (GUI) hoàn chỉnh bằng cách sử dụng chung một toolkit và thƣ viện để xây dựng các thành phần đồ họa. Hình 2.19: Giao diện hệ điều hành Raspbian Trên kit Raspberry Pi, quá trình boot hệ điều hành Raspbian đƣợc trợ giúp bởi GPU nằm trên SoC. GPU chứa một lõi RISC nhỏ để có thể chạy các đoạn code nằm trên ROM của nó. Nhờ những đoạn code này, GPU có thể khởi tạo cho chính bản thân nó cũng nhƣ cho thẻ nhớ SD-nơi chứa hệ điều hành của kit. 2.6 ĐỘNG CƠ SERVO 2.6.1 Giới thiệu động cơ servo Servo là một dạng động cơ điện đặc biệt. Không giống nhƣ động cơ thông thƣờng cứ cắm điện vào là quay liên tục, servo chỉ quay khi đƣợc điều khiển (bằng xung PWM) với góc quay nằm trong khoảng bất kì từ 0o - 180o , tuy nhiên còn có loại quay đƣợc từ 0o - 360o . Mỗi loại servo có kích thƣớc, khối lƣợng và cấu tạo khác nhau. Có loại thì nặng chỉ 9g (chủ yếu dùng trên máy bay mô mình), có loại thì sở hữu một momen lực lớn (vài chục Newton/m), hoặc có loại thì khỏe và nhông sắc chắc chắn,...
  • 41.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 25 Hình 2.20: Hình ảnh động cơ Servo 2.6.2 Nguyên lý hoạt động của động cơ servo Động cơ servo đƣợc thiết kế những hệ thống hồi tiếp vòng kín. Tín hiệu ra của động cơ đƣợc nối với một mạch điều khiển. Khi động cơ quay, vận tốc và vị trí sẽ đƣợc hồi tiếp về mạch điều khiển này. Nếu có bầt kỳ lý do nào ngăn cản chuyển động quay của động cơ, cơ cấu hồi tiếp sẽ nhận thấy tín hiệu ra chƣa đạt đƣợc vị trí mong muốn. Mạch điều khiển tiếp tục chỉnh sai lệch cho động cơ đạt đƣợc điểm chính xác. - Sơ đồ chân: Chân Màu (thƣờng gặp) VCC (+5v) Đỏ GND Đen, Nâu Tín hiệu điều khiển Cam, Vàng Bảng 2.2: Các chân của Servo - Điều khiển động cơ servo bằng pwm:
  • 42.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 26 Hình 2.21: Điều khiển động cơ servo bằng Duty Cycle - Công thức tính: Duty Cycle = - Quy định góc quay: Duty Cycle Góc quay 2.5 % 00 7.5 % 900 12.5 % 1800 Bảng 2.3: Hình ảnh xung tƣơng ứng với góc quay Duty Cycle là phần trăm ở mức cao của xung trong 1 chu kỳ xung. Ví dụ: tần số f = 50 hz => T = 1/f = 1/50 = 20 ms. Duty Cycle = time/20ms = 2.5% => time = 0.5 ms (góc 0o ).
  • 43.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 27 2.7 CẢM BIẾN NHIỆT ĐỘ DHT11 DHT11 Là cảm biến nhiệt độ, độ ẩm rất thông dụng hiện nay, lấy dữ liệu thông qua giao tiếp 1-wire ( giao tiếp digital 1-wire truyền dữ liệu duy nhất). Cảm biến đƣợc tích hợp bộ tiền xử lý tín hiệu giúp dữ liệu nhận về đƣợc chính xác mà không cần phải qua bất kỳ tính toán nào. Đặc điểm: - Điện áp hoạt động : 3V - 5V (DC) - Dải độ ẩm hoạt động : 20% - 90% RH, sai số ±5%RH - Dải nhiệt độ hoạt động : 0°C ~ 50°C, sai số ±2°C - Tần số lấy mẫu tối đa: 1 Hz - Khoảng cách truyển tối đa: 20m Sơ đồ chân Cảm biến DHT11 gồm 2 chân cấp nguồn, và 1 chân tín hiệu. Xem hình dƣới: Hình 2.22: Cảm biến nhiệt độ - độ ẩm DHT11 2.8 MODULE RELAY 2 CHANNEL 5V Module Relay 2-Channel 5V đƣợc dùng nhiều trong các ứng dụng đóng ngắt các thiết bị tiêu thụ dòng điện lớn (<10A). Module có thể đóng ngắt cùng lúc hai kênh bằng tín hiệu điều khiển ( với mức điện áp 3V3 hoặc 5V) từ các vi điều khiển khác nhau nhƣ: Arduino, 8051, AVR, PIC, DSP, ARM, ARM, MSP430, logic TTL,
  • 44.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 28 đồng thời module đƣợc cách ly bằng optocoupler giúp bảo vệ tốt hơn cho các vi điều khiển. Hình 2.23: Module Relay 2 channel 5V Module đƣợc kết nối với các board điều khiển bằng 4 chân header nhƣ sau: - VCC cung cấp nguồn cho các opto. - GND kết nối với GND của board điều khiển. - IN1 và IN2 dùng để điều khiển relay 1 và relay 2, tích cực mức thấp Ngoài ra còn một 3 chân header đƣợc dùng để cấp nguồn cho relay, header này sẽ có một jumper dùng để kết nối chân VCC với chân RY_VCC mục đích dùng chung nguồn VCC (5V) từ header 4 chân cho relay, thông thƣờng jumper đƣợc nối lại với nhau. Nếu nhƣ muốn cách ly tín hiệu điều khiển với nguồn cấp cho relay thì có thể bỏ jumper này ra và cấp nguồn riêng 5V cho chân RY_VCC. Thông số kỹ thuật:  Đóng ngắt đƣợc dòng điện cao: AC250V 10A, DC30V 10A  2 led báo trạng thái relay  Điện áp điều khiển: 5V  Mạch cách ly bằng opto  Kích thƣớc: 50x45 mm 2.9 MOSFET Mosfet là Transistor hiệu ứng trƣờng (Metal Oxide Semiconductor Field Effect Transistor) là một Transistor đặc biệt có cấu tạo và hoạt động khác với
  • 45.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 29 Transistor thông thƣờng mà ta đã biết. Mosfet thƣờng có công suất lớn hơn rất nhiều so với BJT. Đối với tín hiệu 1 chiều thì nó coi nhƣ là 1 khóa đóng mở. Mosfet có nguyên tắc hoạt động dựa trên hiệu ứng từ trƣờng để tạo ra dòng điện, là linh kiện có trở kháng đầu vào lớn thích hợp cho khuyếch đại các nguồn tín hiệu yếu. Hình 2.24: Hình ảnh Mosfet 2.9.1 Cấu tạo Mosfet Mosfet có cấu trúc bán dẫn cho phép điều khiển bằng điện áp với dòng điện điều khiển cực nhỏ. Hình 2.25: Các cực của Mosfet Cấu tạo của Mosfet ngƣợc Kênh N  G : Gate gọi là cực cổng  S : Source gọi là cực nguồn  D : Drain gọi là cực máng Trong đó : G là cực điều khiển đƣợc cách lý hoàn toàn với cấu trúc bán dẫn còn lại bởi lớp điện môi cực mỏng nhƣng có độ cách điện cực lớn dioxit-silic
  • 46.
    CHƢƠNG 2. CƠSỞ LÝ THUYẾT BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 30 (Sio2). Hai cực còn lại là cực gốc (S) và cực máng (D). Cực máng là cực đón các hạt mang điện. Mosfet có điện trở giữa cực G với cực S và giữa cực G với cực D là vô cùng lớn , còn điện trở giữa cực D và cực S phụ thuộc vào điện áp chênh lệch giữa cực G và cực S ( UGS ) Khi điện áp UGS = 0 thì điện trở RDS rất lớn, khi điện áp UGS > 0 => do hiệu ứng từ trƣờng làm cho điện trở RDS giảm, điện áp UGS càng lớn thì điện trở RDS càng nhỏ. Kí hiệu Mosfet: Hình 2.26: Hình ảnh các loại Mosfet 2.9.2 Nguyên lí hoạt động Mosfet hoạt động ở 2 chế độ đóng và mở. Do là một phần tử với các hạt mang điện cơ bản nên Mosfet có thể đóng cắt với tần số rất cao. Nhƣng mà để đảm bảo thời gian đóng cắt ngắn thì vấn đề điều khiển lại là vẫn đề quan trọng.  Đối với kênh P : Điện áp điều khiển mở Mosfet là Ugs0. Dòng điện sẽ đi từ S đến D.  Đối với kênh N : Điện áp điều khiển mở Mosfet là Ugs >0. Điện áp điều khiển đóng là Ugs<=0. Dòng điện sẽ đi từ D xuống S. Do đảm bảo thời gian đóng cắt là ngắn nhất ngƣời ta thƣờng : Đối với Mosfet Kênh N điện áp khóa là Ugs = 0 V còn Kênh P thì Ugs=~0.
  • 47.
    CHƢƠNG 3. TÍNHTOÁN VÀ THIẾT KẾ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 31 Chƣơng 3. TÍNH TOÁN VÀ THIẾT KẾ 3.1 GIỚI THIỆU Nhà thông minh đƣợc thiết kế sử dụng raspberry pi 3 cho việc điều khiển và giám sát những thiết bị trong nhà thông qua việc giao tiếp với chatbot. Sau khi nhận đƣợc yêu cầu của ngƣời dùng, chatbot gửi thông tin đến raspberry để thực hiện điều khiển phần cứng, đồng thời xử lí đƣa ra câu trả lời cho ngƣời dùng. Các yêu cầu điều khiển từ ngƣời dùng bao gồm : - Đóng mở các thiết bị nhƣ đèn, quạt. - Điều khiển dimmer để điều khiển độ sáng của bóng đèn. - Thực hiện đóng mở cửa bằng động cơ servo - Gửi thông tin về nhiệt độ, độ ẩm của căn phòng khi có yêu cầu của ngƣời dùng. 3.2 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG 3.2.1 Thiết kế sơ đồ khối hệ thống a. Sơ đồ khối hệ thống User Dialogflow Fulfillment Webhook Raspberry (Python) Device Request Response POST 200 OK Khối nguồn Hình 3.1: Sơ đồ khối hệ thống
  • 48.
    CHƢƠNG 3. TÍNHTOÁN VÀ THIẾT KẾ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 32  User: Là ngƣời dùng trò chuyện trực tiếp với chatbot.  Dialogflow: Nhận yêu cầu của ngƣời dùng, và sau khi xử lí thì sẽ trả lời cho yêu cầu của ngƣời dùng.  Fulfillment: Là nơi cho phép Dialogflow gửi thông tin đến webhook.  Webhook: Là nơi tiếp nhận thông tin từ Dialogflow.  Rasberry Pi: Xử lí thông tin nhận đƣợc để điều khiển phần cứng, đồng thời trả về response ngƣợc lại cho Dialogflow.  Divice: Là khối công suất, thực hiện yêu cầu điều khiển của ngƣời dùng.  Khối nguồn: Cung cấp nguồn cho raspberry và khối công suất hoạt động. b. Sơ đồ mô hình hệ thống Hình 3.2: Sơ đồ thiết kế mô hình 3.2.2 Tính toán và thiết kế mạch Phần này, nhóm tiến hành thiết kế, tính toán ra sơ đồ nguyên lí cho từng khối.
  • 49.
    CHƢƠNG 3. TÍNHTOÁN VÀ THIẾT KẾ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 33 a. Thiết kế khối Dialogflow Đây là khối giúp chatbot trò chuyện với ngƣời dùng và phân tích câu nói của ngƣời dùng bằng Natural Language Processing(NLP) thành dữ liệu dƣới định dạng file Json, từ đó gửi đến webhook để xử lí và nhận câu trả lời tƣơng ứng từ webhook để hiển thị cho ngƣời dùng. b. Thiết kế khối điều khiển raspberry Là khối quan trọng nhất, có chức năng tạo ra webhook để nhận dữ liệu đƣợc gửi từ Dialogflow thông qua internet, từ đó tiến hành phân tích, xử lí dữ liệu để điều khiển thiết bị trong nhà theo yêu cầu của ngƣời dùng, đồng thời xử lí để gửi lại câu trả lời cho Dialogflow. c. Thiết kế khối điều khiển động lực Sơ đồ các khối trong mạch điều khiển động lực : Module Relay Mạch Dimmer Servo Raspberry Pi 3 Cảm biến Hình 3.3: Sơ đồ các khối điều khiển động lực Module Relay: Các thiết bị trong nhà sử dụng điện áp xoay chiều 220V nên để điều khiển đóng ngắt, ta dùng Module Relay. Vì ngõ ra điều khiển của raspberry là 3,3V nên ta chọn mạch Relay có áp điều khiển là 5V. Ta có cƣờng độ dòng điện định mức qua đèn là : Iđm = = = 0.05 A (3.1) Ta chọn ICont > 2.5 x Iđm = 0.125 A. Ta chọn Module relay có I = 10 A (3.2)
  • 50.
    CHƢƠNG 3. TÍNHTOÁN VÀ THIẾT KẾ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 34 Mạch dimmer : Sơ đồ nguyên lí : Hình 3.4: Sơ đồ nguyên lí mạch dimmer Giá trị điện áp trung bình sau khi qua cầu chỉnh lƣu: VAVG = √ .VRMS )/ = 0.9 x 220 = 198 V (3.3) Cƣờng độ dòng điện khi Mosfet ngƣng dẫn là : I = = 1.9 mA (3.4) Cƣờng độ dòng điện qua led phát quang oppto : I = = = 10 mA (3.5) Khối cảm biến : Để giám sát nhiệt độ, độ ẩm trong nhà và trả về kết quả khi có yêu cầu của ngƣời dùng, ta dùng một cảm biến DHT11. DHT11 sử dụng nguồn đƣợc cấp trực tiếp từ Raspberry Pi. Khối Servo :
  • 51.
    CHƢƠNG 3. TÍNHTOÁN VÀ THIẾT KẾ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 35 Để thực hiện yêu cầu đóng mở cửa, ta sử dụng động cơ servo MG90S để điều khiển góc quay phù hợp thực hiện yêu cầu đóng mở cửa. d. Thiết kế khối nguồn Sử dụng nguồn 220V AC cung cấp trực tiếp cho raspberry pi3 và các thiết bị sử dụng điện xoay chiều.
  • 52.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 36 Chƣơng 4. THI CÔNG HỆ THỐNG 4.1 GIỚI THIỆU Chƣơng này gồm phần thi công trên màn hình và kết quả thi công mạch dimmer và xây dựng mô hình nhà thông minh. 4.2 THIẾT KẾ DIALOGFLOW 4.2.1 Lƣu đồ giải thuật Lƣu đồ khi ngƣời dùng yêu cầu điều khiển các thiết bị đến chatbot thông qua text trò chuyện : Yêu cầu điều khiển thiết bị Can you help you? Nhận dữ liệu đã xử lí ở Webhook N Y N Y Gửi dữ liệu đến Webhook N Ngƣời dùng nhập đầy đủ thông tin Hiển thị Reponse Y Y Prompt Hình 4.1: Lƣu đồ thiết kế trên Dialogflow
  • 53.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 37 Giải thích lƣu đồ: Bƣớc 1: Để trò chuyện đƣợc với chatbot, ngƣời dùng phải truy cập đƣợc internet và có đƣợc link để trò chuyện với chatbot. Bƣớc 2: Phân tích câu nói ngƣời dùng để phát hiện yêu cầu điều khiển thiết bị, nếu ngƣời dùng nhập chƣa đầy đủ thông tin để điều khiển thì chatbot sẽ hỏi lại ngƣời dùng để ngƣời dùng cung cấp đầy đủ thông tin. Bƣớc 3: Lƣu thông tin dƣới dạng file Json rồi gửi đến địa chỉ webhook đã lƣu ở mục Fulfillment để xử lí. Bƣớc 4: Nhận kết quả trả lại từ webhook và hiển thị cho ngƣời dùng. Bƣớc 5: Sẵn sàng nhận yêu cầu trò chuyện hay điều khiển tiếp theo từ ngƣời dùng. 4.2.2 Thiết kế cho yêu cầu điều khiển ON-OFF a. Tạo mới Agent Để bắt đầu với Dialogflow, ta tiến hành tạo mới Agent. Ở đây, nhóm em tạo Agent tên là finalproject, sau khi chọn các cài đặt cần thiết nhƣ múi giờ +7 thì tiến hành lƣu lại Agent. Hình 4.2: Tạo mới Agent
  • 54.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 38 Tiến hành chuyển sang tab Languages để chỉnh ngôn ngữ là English. Hình 4.3: Cài đặt các thông số cho Agent Sau khi đã thiết lập các thông số, tiến hành lƣu lại và chuyển sang phần giao diện hỗ trợ cho lập trình viên để tạo 1 chatbot. b. Tạo entities Sau khi đã tạo mới Agent, ta chuyển sang tab entities để tạo mới. Ở đây, ta cần xác định 2 thực thể cần làm việc là điều khiển đèn nào và trạng thái cần điều khiển của đèn đó. Từ đó ta tạo ra 2 thực thể là @on-off và @led (tên entity do ngƣời lập trình viên tự đặt sao cho dễ hiểu và sử dụng nhất). Sau khi đã xác định đƣợc những entities cần tạo, ta tiến hành tạo mới entities. Hình 4.4: Thực hiện tạo mới Entities
  • 55.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 39 Sau khi nhấn vào tạo mới, ta tiến hành đặt tên cho entity và tiến hành nhập vào các giá trị. Nhƣ hình dƣới đây, đèn chỉ có 2 trạng thái là ON và OFF nên ta điền giá trị ON và OFF vào refence value, còn phần synonym, ta điền vào các từ đồng nghĩa hoặc ngầm hiểu là điều khiển on hoặc off đèn tƣơng ứng nhƣ hình dƣới đây: Hình 4.5: Hình ảnh entities on-off Sau khi đã hoàn thành, ta tiến hành nhấn Save để lƣu lại. Ta cũng thực hiện tƣơng tự đối với entity @led. Hình 4.6: Hình ảnh entities led c. Tạo Intent
  • 56.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 40 Ta tiến hành tạo mới intent để phân tích câu nói của ngƣời dùng đƣa vào, từ đó ta xử lí và đƣa ra kết quả phù hợp cho ngƣời dùng. Tƣơng tự nhƣ tạo mới Enities, ta nhấp chọn Create Intent để tạo mới Intent. Ta tiến hành thao tác để tạo ra Intent on-off giúp chatbot hiểu yêu cầu ON- OFF các thiết bị từ ngƣời dùng và đƣa ra hành động hợp lí. Hình 4.7: Tạo mới intents Ở mục Training Phrases, ta tiến hành nhập các câu nói mà ngƣời dùng có thể nói để điều khiển thiết bị, Dialogflow sẽ tự động hightlight các giá trị của tham số trong entities vừa tạo ở trên để trích xuất lấy dữ liệu từ câu nói của ngƣời dùng, từ đó xử lí và đƣa ra kết quả phù hợp. Ta cũng có thể chỉnh sửa thủ công bằng cách bôi đen các từ muốn Dialogflow gắn tham số. Các giá trị tham số của Training Phrases sẽ đƣợc hiển thị trong phần Action and parameters.
  • 57.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 41 Hình 4.8: Bảng Action và Parameters Ở đây action là on:off. Action này sẽ giúp chúng ta xác định đâu là Intent đƣợc gửi tới webhook để có thể xử lí và đƣa ra kết quả phù hợp đối với yêu cầu ngƣời dùng. Và nhƣ ta thấy ở trên thì hai tham số là on-off và led vừa tạo ở entity đƣợc sử dụng để lấy giá trị dữ liệu từ ngƣời dùng. Ở đây, ta yêu cầu ngƣời dùng cung cấp đầy đủ thông tin bằng việc tích vào mục Required. Tiếp theo là mục Response, đây là nơi chúng ta sẽ trả lời đáp án tƣơng ứng cho ngƣời dùng mỗi khi Intent đƣợc gọi. Ở đây, nhóm em sử dụng giá trị của tham số trong chính câu nói của ngƣời dùng để trả lời. Nhƣ hình dƣới đây, ta có thể thấy đƣợc sau khi ngƣời dùng yêu cầu “Turn on led 1” thì chatbot sẽ trả lời đáp ứng yêu cầu của ngƣời dùng theo định dạng ta đã đặt ở Text response. Hình 4.9: Mục Responses Cuối cùng là mục fulfillment, click on “Enable webhook call for this intent” để khi Intent đƣợc gọi thì sẽ chuyển thông tin dƣới dạng Json đến webhook, server sẽ nhận và xử lí thông tin và cuối cùng trả về cho ngƣời dùng câu trả lời cho câu hỏi tƣơng ứng của ngƣời dùng thay vì trả lời theo định dạng mặc định ở mục Response ở trên.
  • 58.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 42 Hình 4.10: Kích hoạt Fulfillment cho Intent Sau khi đã hoàn thành, ta nhấn Save để lƣu mới Intent. d. Fulfillment Hình 4.11: Đặt link webhook trong mục Fulfillment Đây là nơi đặt link của webhook, Dialogflow sẽ gọi đến địa chỉ này mỗi khi có Intent đã kích hoạt webhook đƣợc gọi đến. Đây sẽ là nơi tiếp nhận thông tin để serve có thể xử lí và trả lại kết quả cho Dialogflow để hiển thị cho ngƣời dùng. Ta cần kích hoạt Enable ở mục webhook và đặt link của webhook cần gọi vào mục URL, tiến hành nhấn Save để hoàn tất.
  • 59.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 43 e. Integrations Ta tích hợp chatbot vào các nền tảng nhắn tin, ở đây nhóm em sử dụng webdemo do Dialogflow hỗ trợ để tạo giao diện nhắn tin với ngƣời dùng. Enable web demo để kích hoạt tính năng này. Hình 4.12: Tùy chỉnh trong Integrations Sau khi enable web demo, chúng ta sẽ thấy đƣờng link. Chúng ta sẽ trò chuyện với chatbot thông qua đƣờng link này. Hình 4.13: Giao diện trò chuyện chatbot Đây là giao diện khi ta click vào đƣờng dẫn ở trên, ta trò chuyện với chatbot thông qua hộp thoại này.
  • 60.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 44 4.2.3 Mở rộng cho điều khiển ON-OFF a. Thêm mới entities Trong một số trƣờng hợp ngƣời dùng thay vì yêu cầu điều khiển trực tiếp các đèn thì ngƣời dùng có thể yêu cầu thắp sáng hay tắt thiết bị ở phòng nào, lúc nào chúng ta cần lập trình cho chatbot hiểu đƣợc ngƣời dùng đang muốn gì để đáp ứng đúng yêu cầu ngƣời dùng. Lúc này ta phải tạo mới 2 enities là @room và @status để đáp ứng nhu cầu thắp sáng hay tắt của từng phòng. Hình 4.14: Thêm mới entities room Hình 4.15: Thêm mới entities status
  • 61.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 45 b. Thêm mới intent Chúng ta tiến hành thêm mới Intent và thao tác tƣơng tự nhƣ các bƣớc ở trên. Ở đây nhóm em đã tạo ra Intent on-off:condition. Sau đây là hình ảnh của Intent này: Hình 4.16: Thêm mới Intent on-off:condition Vẫn tƣơng tự nhƣ trƣờng hợp ON-OFF thông thƣờng ở trên, khi ngƣời dùng cung cấp thiếu thông tin thì chatbot sẽ hỏi ngƣời dùng để cung cấp đầy đủ thông tin. Hình 4.17: Kết quả thao tác trên Intent mới Các bƣớc tiếp theo, nhóm em thực hiện tƣơng tự nhƣ trƣờng hợp ON-OFF thông thƣờng ở trên.
  • 62.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 46 4.2.4 Kết quả hoàn chỉnh trên Dialogflow Chúng ta thực hiện tƣơng tự nhƣ các bƣớc ở trên để đáp ứng những yêu cầu của ngƣời dùng nhƣ đóng mở thiết bị, điều khiển dimmer hay đọc giá trị từ cảm biến. Sau đây là một số hình ảnh thực hành hoàn chỉnh trên Dialogflow. a. Intents Hình 4.18: Kết quả hoàn thành Intent b. Entities Hình 4.19: Kết quả hoàn thành Entities 4.3 LẬP TRÌNH TRÊN RASPBERRY PI 3 4.3.1 Giới thiệu ngôn ngữ lập trình Python
  • 63.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 47 Python là ngôn ngữ lập trình hƣớng đối tƣợng, cấp cao, mạnh mẽ, đƣợc tạo ra bởi Guido van Rossum. Nó dễ dàng để tìm hiểu và đang nổi lên nhƣ một trong những ngôn ngữ lập trình nhập môn tốt nhất cho ngƣời lần đầu tiếp xúc với ngôn ngữ lập trình. Python hoàn toàn tạo kiểu động và sử dụng cơ chế cấp phát bộ nhớ tự động. Python có cấu trúc dữ liệu cấp cao mạnh mẽ và cách tiếp cận đơn giản nhƣng hiệu quả đối với lập trình hƣớng đối tƣợng. Cú pháp lệnh của Python là điểm cộng vô cùng lớn vì sự rõ ràng, dễ hiểu và cách gõ linh động làm cho nó nhanh chóng trở thành một ngôn ngữ lý tƣởng để viết script và phát triển ứng dụng trong nhiều lĩnh vực, ở hầu hết các nền tảng. a. Lịch sử của Python Python là một ngôn ngữ khá cũ đƣợc tạo ra bởi Guido Van Rossum. Thiết kế bắt đầu vào cuối những năm 1980 và đƣợc phát hành lần đầu tiên vào tháng 2 năm 1991. Hình 4.20: Ngôn ngữ Python b. Các phiên bản Python đã phát hành Phiên bản Ngày phát hành Python 1.0 (bản phát hành chuẩn đầu tiên) Python 1.6 (Phiên bản 1.x cuối cùng) 01/1994 05/09/2000 Python 2.0 (Giới thiệu list comprehension) Python 2.7 (Phiên bản 2.x cuối cùng) 16/10/2000 03/07/2010 Python 3.0 (Loại bỏ cấu trúc và mô-đun trùng lặp) Python 3.6 (Bản mới nhất tính đến thời điểm viết bài) 03/12/2008 23/12/2016 Bảng 4.1: Các phiên bản Python đã phát hành
  • 64.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 48 c. Đặc điểm của ngôn ngữ lập trình Python - Ngôn ngữ lập trình đơn giản, dễ học: Python có cú pháp rất đơn giản, rõ ràng. Nó dễ đọc và viết hơn rất nhiều khi so sánh với những ngôn ngữ lập trình khác nhƣ C++, Java, C#. - Miễn phí, mã nguồn mở: Bạn có thể tự do sử dụng và phân phối Python, thậm chí là dùng cho mục đích thƣơng mại. Vì là mã nguồn mở, bạn không những có thể sử dụng các phần mềm, chƣơng trình đƣợc viết trong Python mà còn có thể thay đổi mã nguồn của nó. Python có một cộng đồng rộng lớn, không ngừng cải thiện nó mỗi lần cập nhật. - Khả năng di chuyển: Các chƣơng trình Python có thể di chuyển từ nền tảng này sang nền tảng khác và chạy nó mà không có bất kỳ thay đổi nào. Nó chạy trên hầu hết tất cả các nền tảng nhƣ Windows, macOS, Linux. - Khả năng mở rộng và có thể nhúng: Giả sử một ứng dụng đòi hỏi sự phức tạp rất lớn,bạn có thể dễ dàng kết hợp các phần code bằng C, C++ và những ngôn ngữ khác (có thể gọi đƣợc từ C) vào code Python. Điều này sẽ cung cấp cho ứng dụng của bạn những tính năng tốt hơn cũng nhƣ khả năng scripting mà những ngôn ngữ lập trình khác khó có thể làm đƣợc. - Ngôn ngữ thông dịch cấp cao: Không giống nhƣ C/C++, với Python, bạn không phải lo lắng những nhiệm vụ khó khăn nhƣ quản lý bộ nhớ, dọn dẹp những dữ liệu vô nghĩa,... Khi chạy code Python, nó sẽ tự động chuyển đổi code sang ngôn ngữ máy tính có thể hiểu. Bạn không cần lo lắng về bất kỳ hoạt động ở cấp thấp nào. - Thƣ viện tiêu chuẩn lớn để giải quyết những tác vụ phổ biến: Python có một số lƣợng lớn thƣ viện tiêu chuẩn giúp cho công việc lập trình của bạn trở nên dễ thở hơn rất nhiều, đơn giản vì không phải tự viết tất cả code. Những thƣ viện này đƣợc kiểm tra kỹ lƣỡng và đƣợc sử dụng bởi hàng trăm ngƣời. - Hƣớng đối tƣợng: Mọi thứ trong Python đều là hƣớng đối tƣợng. Lập trình hƣớng đối tƣợng (OOP) giúp giải quyết những vấn đề phức tạp một cách trực quan. Với OOP, bạn có thể phân chia những vấn đề phức tạp thành những tập nhỏ hơn bằng cách tạo ra các đối tƣợng.
  • 65.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 49 4.3.2 Giới thiệu phần mềm lập trình Python 3 IDLE Cả ngôn ngữ lập trình Python 2 và Python 3 đều đƣợc cài đặt sẵn khi cài hệ điều hành Raspbian nên ta có thể sử dụng cả Python 2 và Python 3 để lập trình. Để khởi động phần mềm lập trình Python 3 IDLE, ta tiến hành click chọn : Start => programing => Python 3 (IDLE). Ngay lập tức giao diện IDLE sẽ đƣợc hiển thị. Hình 4.21: Giao diện Python 3 IDLE Giao diện IDLE rất đơn giản và dễ sử dụng, để tạo File mới hoặc Open một file có sẵn ta click chọn File rồi chọn các mục tƣơng ứng. Hình 4.22: Thao tác file trên giao diện Python 3 IDLE
  • 66.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 50 Hình dƣới đây chỉ ra chức năng các phần và thanh công cụ của Python 3 IDLE: Hình 4.23: Các phần của giao diện 4.3.3 Lƣu đồ giải thuật Giải thích lƣu đồ: Các bƣớc thực hiện đƣợc miêu tả bởi lƣu đồ dƣới (Hình 4.24). Bƣớc 1: Ta cấp nguồn cho hệ thống, hệ thống bắt đầu khởi động và kết nối với mạng internet. Bƣớc 2: Sau khi khởi tạo hệ thống, nếu có dữ liệu đƣợc từ Dialogflow gửi đến thì hệ thống sẽ thực hiện xử lí, phân tích dữ liệu nhận đƣợc, từ đó thực hiện yêu cầu điều khiển thiết bị và tạo ra câu trả lời phù hợp với từng yêu cầu điều khiển từ ngƣời dùng. Bƣớc 3: Tiếp đến raspberry sẽ gửi câu trả lời đến Dialogflow để hiển thị câu trả lời cho ngƣời dùng. Bƣớc 4: Sẵn sàng nhận dữ liệu tiếp theo từ Dialogflow để xử lí và điều khiển thiết bị. Lƣu đồ điều khiển trên raspberry:
  • 67.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 51 Nhận dữ liệu từ Webhook Bắt đầu Gửi dữ liệu cho Dialogflow N Y N Y Khởi tạo hệ thống Xử lý phân tích Điều khiển thiết bị N Hình 4.24: Lƣu đồ điều khiển trên Raspberry Pi 4.3.4 Viết chƣơng trình hệ thống Ở đây ta tiến hành viết chƣơng trình tạo webhook để nhận dữ liệu từ Dialogflow và sử dụng dữ liệu đó để điều khiển khối điều khiển động lực, đồng thời gửi phản hồi về cho Dialogflow. Dƣới đây là một đoạn ngắn của chƣơng trình tạo webhook, vì soucre code khá dài nên nhóm em xin phép để đầy đủ source code ở phần phụ lục. #!/usr/bin/env python import urllib import json import os
  • 68.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 52 import RPi.GPIO as GPIO import Adafruit_DHT GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(16, GPIO.OUT) GPIO.setup(23, GPIO.OUT) GPIO.setup(24, GPIO.OUT) GPIO.setup(25, GPIO.OUT) GPIO.setup(18, GPIO.OUT) pwm = GPIO.PWM(18, 500) pwm.start(100) GPIO.setup(13, GPIO.OUT) pwm1 = GPIO.PWM(13, 50) from flask import Flask from flask import request from flask import make_response # Flask app should start in global layout app = Flask(__name__) @app.route('/webhook', methods=['POST']) def webhook(): req = request.get_json(silent=True, force=True) print("Request:") print(json.dumps(req, indent=4)) res = makeWebhookResult(req) res = json.dumps(res, indent=4) print(res) #t = str(res["speech"]) r = make_response(res) #t= str(r.decode('utf-8')) print("*") print (r) #print ("*") r.headers['Content-Type'] = 'application/json' return r if __name__ == '__main__': port = int(os.getenv('PORT', 5000)) print("Starting app on port %d" %(port)) app.run(debug=True, port=port, host='0.0.0.0') 4.3.5 Public server lên internet bằng ngrok
  • 69.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 53 Ở phần trên ta chỉ mới tạo ra webhook ở local host, để public server lên internet ta cần dùng ngrok. Vậy ngrok là gì ? Ngrok là công cụ tạo đƣờng hầm (tunnel) giữa localhost của bạn và internet. Giúp ngƣời khác mạng có thể truy cập đƣợc localhost của bạn thông qua custom domain của ngrok. Hình 4.25: Giới thiệu ngrok Ngrok có bản trả phí lẫn miễn phí, tuy nhiên bản miễn phí sẽ có nhiều hạn chế. Để có thể sử dụng ngrok ta tiến hành các bƣớc sau: - Đăng ký tài khoản free trên trang web: https://ngrok.com/ - Download ngrok về máy, tiến hành giải nén. - Vào folder bạn vừa giải nén, chạy câu lệnh ./ngrok http [port bạn muốn mở]. Ví dụ kết quả sau khi chạy port 5000 nhƣ hình dƣới: Hình 4.26: Hình ảnh chạy ngrok 4.4 THI CÔNG MẠCH ĐIỀU KHIỂN DIMMER
  • 70.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 54 4.4.1 Sơ đồ mạch PCB Dimmer Hình 4.27: Sơ đồ mạch in PCB Hình 4.28: Sơ đồ linh kiện 3D Dƣới đây là danh sách các linh kiện:
  • 71.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 55 Tên linh kiện Kí hiệu Giá trị Opto 4N35 OP1 Điện trở R3 6k8 Điện trở R1 100k Tụ điện C1 100uF/450V Điện trở R4 330 Ohm Diode Bridge D1 2A Diode D2 Diode Zenner R2 DIODE Zener Header 2 pin C2 Header2 MOSFET IRF840 Q1 IRF840 Domino J1, J2 KF2 Bảng 4.2: Danh sách linh kiện 4.4.2 Thi công mạch Một số hình ảnh thi công mạch hoàn chỉnh Hình 4.29: Hình ảnh mạch thi công
  • 72.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 56 Hình 4.30: Hình ảnh mạch sau thi công 4.5 ĐÓNG GÓI VÀ THI CÔNG MÔ HÌNH 4.5.1 Đóng gói bộ điều khiển Để bảo vệ raspberry pi 3 khỏi tác động bên ngoài, chúng em dùng vỏ nhựa để bảo vệ raspberry. Đồng thời trên vỏ cũng trang bị quạt tản nhiệt mini để giúp raspberry hoạt động tốt hơn. Dƣới đây là một số hình ảnh : Hình 4.31: Đóng gói bộ điều khiển
  • 73.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 57 4.5.2 Thi công mô hình Để tạo mô hình nhà thông minh, nhóm em sử dụng vật liệu là bìa cứng. Sử dụng các dụng cụ để cắt ghép các phần lại với nhau để tạo mô hình ngôi nhà hoàn chỉnh. Thực hiện đính các thiết bị đèn vào một khối cố định nhƣ hình dƣới. Hình 4.32: Thi công khối đèn xoay chiều Sau đó kết nối đèn với thiết bị điều khiển công suất Relay, dimmer. Hình 4.33: Kết nối đèn với module Relay
  • 74.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 58 Hình 4.34: Kết nối đèn với mạch dimmer Tiếp đến là rắp ráp cảm biến DHT11 và động cơ servo vào đúng vị trí.
  • 75.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 59 Hình 4.35: Kết nối Module DHT11 vào đúng vị trí Hình 4.36: Đặt đúng động cơ servo vào vị trí
  • 76.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 60 Cuối cùng ta kết nối các bộ phận với bộ điều khiển raspberry pi 3. Hình 4.37: Kết nối với Raspberry Pi Hình 4.38: Hình ảnh mô hình thi công hoàn chỉnh
  • 77.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 61 4.6 KẾT QUẢ VẬN HÀNH HỆ THỐNG Sau khi ngƣời dùng nhập “Turn on led 2” thì ngay lập tức đèn 2 mở, đồng thời chatbot trả lời lại cho ngƣời dùng. Hình 4.39: Điều khiển thiết bị thông qua giao diện Hình 4.40: Kết quả sau khi nhận yêu cầu điều khiển
  • 78.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 62 Tƣơng tự khi ngƣời dùng yêu cầu mở cửa. Hình 4.41: Yêu cầu điều khiển đóng mở cửa Hình 4.42: Thực hiện mở cửa
  • 79.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 63 Và trả lời thông tin nhiệt độ, độ ẩm khi đƣợc ngƣời dùng yêu cầu. Hình 4.43: Truy vấn thông tin nhiệt độ 4.7 TÀI LIỆU HƢỚNG DẪN, THAO TÁC 4.7.1 Tài liệu hƣớng dẫn sử dụng - Bƣớc 1: Cấp nguồn cho hệ thống, hệ thống hoạt động sử dụng nguồn 220V AC. - Bƣớc 2: Sau khi khởi động hệ thống, tiến hành mở ứng dụng chatbot và trò chuyện với chatbot thông qua text message. - Bƣớc 3: Trò chuyện và yêu cầu điều khiển thiết bị đối với chatbot. 4.7.2 Quy trình thao tác Để giúp ngƣời sử dụng dễ dàng thao tác, dƣới đây là lƣu đồ quy trình vận hành hệ thống:
  • 80.
    CHƢƠNG 4. THICÔNG HỆ THỐNG BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 64 Hình 4.44: Lƣu đồ hƣớng dẫn sử dụng
  • 81.
    CHƢƠNG 5. KẾTQUẢ_NHẬN XÉT_ĐÁNH GIÁ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 65 Chƣơng 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Để thực hiện yêu cầu đề tài, nhóm em đã tập trung ghiên cứu và hoàn thiện đề tài đƣợc giao. Quá trình nghiên cứu đƣợc thực hiện trong 15 tuần, trong quá trình đó nhóm em không những biết đƣợc nhiều kiến thức mới mà còn ôn lại nhiều kiến thức cũ đã quên. Dƣới đây là những kiến thức mà chúng em học đƣợc. 5.1 DIALOGFLOW 5.1.1 Dialogflow Biết đƣợc cách sử dụng và khai thác sức mạnh của Dialogflow cung cấp cho ngƣời lập trình để tạo ra một chatbot thông minh. Biết đƣợc ý nghĩa của từng phần trong Dialogflow nhƣ:  Agent  Intents  Contexts  Events  Training Phrases  Action and parameters  Responses  Fulfillment  Entities  Integrations  Training  History  Analytics  Prebuilt Agents 5.1.2 Các khái niệm liên quan
  • 82.
    CHƢƠNG 5. KẾTQUẢ_NHẬN XÉT_ĐÁNH GIÁ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 66 Hiểu đƣợc các khái niệm nhƣ API, webhook, định dạng file Json và cách trích xuất dữ liệu từ định dạng file Json để phục vụ cho yêu cầu của đề tài. 5.2 RASPBERRY PI 3 5.2.1 Raspberry Pi 3 Biết cách cài đặt hệ điều hành cho raspberry, thiết lập IP tĩnh cho mạng Lan để điều khiển raspberry qua VNC khi raspberry pi 3 không có kết nối mạng. Thực hiện cài đặt, cập nhật các gói (package) cần thiết cho raspberry. Sử dụng ngôn ngữ Python để lập trình, cài đặt các thƣ viện Python cần thiết để lập trình phục vụ đề tài. Biết cách sử dụng các hàm các của thƣ viện nhƣ: GPIO.setwarnings() GPIO.setmode() GPIO.setup() GPIO.PWM() Hiểu đƣợc điện áp cấp từ Raspberry Pi 3 cũng nhƣ ý nghĩa các chân trên Raspberry, chẳng hạn nhƣ các chân của Raspberry chỉ đọc đƣợc Input là tín hiệu Digital, không có chân đọc Analog nhƣ Arduino. Cũng nhƣ tìm hiểu các chuẩn giao tiếp trên Raspberry. 5.2.2 Công cụ ngrok Biết cách sử dụng ngrok để public server, thực hiện xem xét quản lí những tác vụ đã thực hiện trên server. 5.3 PHẦN CỨNG 5.3.1 Mạch điều khiển dimmer Tìm hiểu nguyên lí của dimmer từ đó thực hành làm mạch mô phỏng dimmer để điều khiển thiết bị. Từ đó, ôn lại các kiến thức về linh kiện nhƣ Triac, Mosfet. Biết cách sử dụng phần mềm Altium Designer để vẽ mạch PBC phục vụ cho đề tài.
  • 83.
    CHƢƠNG 5. KẾTQUẢ_NHẬN XÉT_ĐÁNH GIÁ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 67 Biết cách hoàn thiện một mạch điện tử qua nhiều công đoạn khác nhau. 5.3.2 Động cơ Servo Tìm hiểu nguyên lí điều khiển động cơ servo bằng PWM để từ đó thực hiện yêu cầu điều khiển góc quay để đóng mở cửa. 5.3.3 Module Relay 2 kênh 5V Hiểu đƣợc cách hoạt động của module Relay, tính toán đƣợc dòng cần thiết để kích hoạt Relay. Từ đó thực hiện tác vụ điều khiển thiết bị. 5.3.4 Module cảm biến DHT11 Biết cách sử dụng module cảm biến nhiệt độ, độ ẩm DHT11 để cung cấp dữ liệu về nhiệt độ, độ ẩm hiện tại cho đề tài. 5.4 NHẬN XÉT VÀ ĐÁNH GIÁ Nhóm thực hiện đề tài đã hoàn thành những yêu cầu của đề tài đặt ra, đồ án nghiên cứu có những ƣu điểm nhƣ:  Đề tài có tính thực tế cao, đặc biệt là trong những năm gần đây việc ứng dụng các lĩnh vực liên quan đến AI, Machine Learning vào các lĩnh vực đời sống ngày càng nhiều và đem lại hiệu quả cao.  Chi phí xây dựng hệ thống không cao, tƣơng đối dễ sử dụng và vận hành. Qúa trình bảo trì hệ thống cũng khá đơn giản.  Giao diện chatbot dễ sử dụng, đặc biệt có thể tích hợp với các nền tảng nhắn tin nhƣ Facebook message, Skype, Slack,... để tăng tính thiết thực, gần gũi với ngƣời dùng.  Hệ thống điều khiển trên thời gian thực, khi có yêu cầu điều khiển của ngƣời dùng thì ngay lập tức điều khiển các thiết bị trong ngôi nhà.  Dựa trên lịch sử chat, ngƣời dùng có thể xem xét lịch sử đóng mở các thiết bị trong nhà. Tuy nhiên, hệ thống cũng có những hạn chế nhƣ:
  • 84.
    CHƢƠNG 5. KẾTQUẢ_NHẬN XÉT_ĐÁNH GIÁ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 68  Hệ thống điều khiển thông qua internet nên yêu cầu phải có đƣờng truyền mạng ổn định và duy trì lâu dày.  Tính bảo mật hệ thống không cao, bất cứ ai có link trò chuyện đều sẽ trò chuyện đƣợc với chatbot.  Hệ thống sử dụng API Dialogflow của google để lập trình, nếu google ngƣng cung cấp API này thì hệ thống không hoạt động.  Sử dụng mới ngrok sẽ cho địa chỉ url khác nhau nên mỗi lần thay đổi cần phải cung cấp địa chỉ webhook mới trong phần fulfillment của Dialogflow.  Độ trễ của hệ thống phụ thuộc vào tốc độ và độ ổn định của đƣờng truyền.
  • 85.
    CHƢƠNG 6. KẾTLUẬN VÀ HƢỚNG PHÁT TRIỂN BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 69 Chƣơng 6. KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 6.1 KẾT LUẬN Từ những yêu cầu đã đặt ra ở chƣơng 1, nhóm thực hiện đề tài nhận xét hệ thống hoạt động khá ổn định và đáp ứng những yêu cầu của đề tài đặt ra. Đó là hệ thống thông qua việc trò chuyện với chatbot để điều khiển các thiết bị trong nhà với giao diện đơn giản, dễ sử dụng và có thể trò chuyện với ngƣời dùng. Mô hình thiết kế nhà thông minh đơn giản, dễ nhìn giúp dễ dàng hình dung hình ảnh ngôi nhà ngoài thực tế. Việc bố trí các module cũng nhƣ các thiết bị khá hợp lí. Tính an toàn của hệ thống đƣợc đảm bảo, an toàn cho ngƣời sử dụng. Tuy nhiên, hệ thống còn có những hạn chế là phụ thuộc vào đƣờng truyền internet, tính bảo mật chƣa đƣợc cao, chatbot có thể trò chuyện với ngƣời dùng những câu trò chuyện đơn giản, không thông minh khi yêu cầu ngƣời dùng phức tạp, khó hiểu. 6.2 HƢỚNG PHÁT TRIỂN Tích hợp chatbot vào các nền tảng nhắn tin để thân thiện và tiện lợi hơn cho ngƣời dùng. Đồng thời, ngoài việc trò chuyện đơn giản với ngƣời dùng thì chúng ta có thể tích hợp thêm nhiều API khác để chatbot thông minh hơn và sẽ trả lời đƣợc hết những đoạn thoại của ngƣời dùng nhƣ một con ngƣời thật sự. Đó là các API về thời tiết, API về đọc báo, API về mua sắm, vv và đặc biệt là tích hợp API simsimi của ứng dụng chatbot nhắn tin nổi tiếng. Từ đó, chatbot đƣợc xem nhƣ một trợ lí của ngôi nhà, trò chuyện, hỗ trợ mua sắm, cung cấp thông tin, báo chí cho ngƣời dùng. Có thể tích hợp thêm API Voice để chatbot giao tiếp với ngƣời dùng bằng lời nói thay vì nhắn tin text thông thƣờng. Có thể linh hoạt mở rộng thêm nhiều thiết bị cần điều khiển đối với những ngôi nhà, dự án khác nhau.
  • 86.
    TÀI LIỆU THAMKHẢO BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 70 TÀI LIỆU THAM KHẢO [1] Trần Thu Hà, “Giáo trình điện tử cơ bản”, NXB ĐH Quốc Gia Tp.HCM, 2013. [2] Hoàng Ngọc Văn, “Giáo trình thực hành điện tử công suất”, Trƣờng ĐH Sƣ Phạm Kỹ Thuật Tp.HCM, 2015. [3] Matt Richardson and Shawn Wallace, “Getting Started with Raspberry Pi”, Pushlished by O’Reilly Media, Inc., 2012. [4] Cao Văn Tiến và Nguyễn Văn Nghĩa, “Điều khiển thiết bị qua internet dùng raspberry pi 2 thông qua wifi”, Trƣờng ĐH SPKT Tp.HCM, 2016. [5] Nick Quinlan, “What’s a webhook”, www.sendgrid.com, 2014. [6] Sachin Kumar, “How to create a chatbot using Dialogflow Enterprise Edition and Dialogflow API V2”, 2018. [7] Jestin Cubetech, “Safe and simple AC pwm dimmer for Arduino/ Raspberry pi”, 2013. [8] Tài liệu trên website Dialogflow: https://dialogflow.com/docs/getting-started [9] Trang chủ của Raspberry : https://www.raspberrypi.org [10] Website datasheet linh kiện: alldatasheet.com
  • 87.
    PHỤ LỤC BỘ MÔNĐIỆN TỬ CÔNG NGHIỆP – Y SINH 71 PHỤ LỤC #!/usr/bin/env python import urllib import json import os import RPi.GPIO as GPIO import Adafruit_DHT GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(16, GPIO.OUT) GPIO.setup(23, GPIO.OUT) GPIO.setup(24, GPIO.OUT) GPIO.setup(25, GPIO.OUT) GPIO.setup(18, GPIO.OUT) pwm = GPIO.PWM(18, 500) pwm.start(100) GPIO.setup(13, GPIO.OUT) pwm1 = GPIO.PWM(13, 50) from flask import Flask from flask import request from flask import make_response # Flask app should start in global layout app = Flask(__name__) @app.route('/webhook', methods=['POST']) def webhook(): req = request.get_json(silent=True, force=True) print("Request:") print(json.dumps(req, indent=4)) res = makeWebhookResult(req) res = json.dumps(res, indent=4) print(res) #t = str(res["speech"]) r = make_response(res) #t= str(r.decode('utf-8')) print("*") print (r) #print ("*") r.headers['Content-Type'] = 'application/json' return r def makeWebhookResult(req): #if req.get("queryResult").get("action") != "on-off": # return {} #if req.get("queryResult").get("action") != "on-off.condition": # return {} sp1="" sp2="" sp3=""
  • 88.
    PHỤ LỤC BỘ MÔNĐIỆN TỬ CÔNG NGHIỆP – Y SINH 72 sp4="" sp5="" sp6="" sp7="" sp8="" sp9="" sp10="" sp11="" sp12="" sp13="" sp14="" result = req.get("queryResult") parameters = result.get("parameters") val = parameters.get("on-off") val2 = parameters.get("led") val3 = parameters.get("status") val4 = parameters.get("percentage") val5 = parameters.get("status-door") val6 = parameters.get("temperature") val7 = parameters.get("unit-temperature") val8 = parameters.get("humidity") val9 = parameters.get("room") val10 = parameters.get("hot-cold") if req.get("queryResult").get("action") == "on-off": if len(val)==len(val2): for i in range (0, len(val)): for j in range (0, len(val2)): if i == j: if val[i] =="on": if val2[j] == "all": GPIO.output(16, GPIO.HIGH) GPIO.output(23, GPIO.HIGH) GPIO.output(24, GPIO.HIGH) GPIO.output(25, GPIO.HIGH) sp11 = "turn on all" if val2[j] == "led 1": GPIO.output(16, GPIO.HIGH) sp1 = val[i] + " " + val2[j] if val2[j] == "led 2": GPIO.output(23, GPIO.HIGH) sp2 = val[i] + " " + val2[j] if val2[j] == "led 3": GPIO.output(24, GPIO.HIGH) sp3 = val[i] + " " + val2[j] if val2[j] == "fan": GPIO.output(25, GPIO.HIGH) sp4 = val[i] + " " + val2[j] if val[i] =="off": if val2[j] == "all": GPIO.output(16, GPIO.LOW) GPIO.output(23, GPIO.LOW) GPIO.output(24, GPIO.LOW) GPIO.output(25, GPIO.LOW) sp12 = "turn off all" if val2[j] == "led 1": GPIO.output(16, GPIO.LOW) sp5 = val[i] + " " + val2[j] if val2[j] == "led 2": GPIO.output(23, GPIO.LOW) sp6 = val[i] + " " + val2[j] if val2[j] == "led 3":
  • 89.
    PHỤ LỤC BỘ MÔNĐIỆN TỬ CÔNG NGHIỆP – Y SINH 73 GPIO.output(24, GPIO.LOW) sp7 = val[i] + " " + val2[j] if val2[j] == "fan": GPIO.output(25, GPIO.LOW) sp8 = val[i] + " " + val2[j] else: for i in range (0,len(val)): for j in range (0, len(val2)): if val[i] =="on": if val2[j] == "led 1": GPIO.output(16, GPIO.HIGH) sp1 = val[i] + " " + val2[j] if val2[j] == "led 2": GPIO.output(23, GPIO.HIGH) sp2 = val[i] + " " + val2[j] if val2[j] == "led 3": GPIO.output(24, GPIO.HIGH) sp3 = val[i] + " " + val2[j] if val2[j] == "fan": GPIO.output(25, GPIO.HIGH) sp4 = val[i] + " " + val2[j] if val[i] =="off": if val2[j] == "led 1": GPIO.output(16, GPIO.LOW) sp5 = val[i] + " " + val2[j] if val2[j] == "led 2": GPIO.output(23, GPIO.LOW) sp6 = val[i] + " " + val2[j] if val2[j] == "led 3": GPIO.output(24, GPIO.LOW) sp7 = val[i] + " " + val2[j] if val2[j] == "fan": GPIO.output(25, GPIO.LOW) sp8 = val[i] + " " + val2[j] speech = "OKK, " + sp1 + " " + sp2 + " " + sp3 + " " + sp4 + " " + sp5 + " " + sp6 + " " + sp7 + " " + sp8 + " " + sp11 + " " + sp12 elif req.get("queryResult").get("action") == "on-off:condition": if val3 =="light": if val9 == "room 1": GPIO.output(16, GPIO.HIGH) if val9 == "room 2": GPIO.output(23, GPIO.HIGH) if val9 == "room 3": GPIO.output(24, GPIO.HIGH) #if val2 == "room 4": #GPIO.output(25, GPIO.HIGH) if val3 =="dark": if val9 == "room 1": GPIO.output(16, GPIO.LOW) if val9 == "room 2": GPIO.output(23, GPIO.LOW) if val9 == "room 3": GPIO.output(24, GPIO.LOW) #if val2 == "room 4": #GPIO.output(25, GPIO.LOW) speech = "OKK, " + val3 + " " + val9
  • 90.
    PHỤ LỤC BỘ MÔNĐIỆN TỬ CÔNG NGHIỆP – Y SINH 74 elif req.get("queryResult").get("action") == "action.dimmer": a="" for i in val4: if i =="%": break a=a+i #print a dc = 100.0 - float(a) pwm.ChangeDutyCycle(dc) speech = "OK, dimmer " + a + "%" elif req.get("queryResult").get("action") == "action.door": if val5 == "open": pwm1.start(5) if val5 == "close": pwm1.start(10) speech = "OK, " + val5 + " door" elif req.get("queryResult").get("action") == "action.temperature": if val6 == "temperature": if val7 == "C": humidity, temperature = Adafruit_DHT.read_retry(11, 27) sp9 = "temperature is " + str(temperature) + " C" if val7 == "F": humidity, temperature = Adafruit_DHT.read_retry(11, 27) temperature1 = temperature*1.8 + 32 sp10 = "temperature is " + str(temperature1) + " F" speech = sp9 + " " + sp10 elif req.get("queryResult").get("action") == "action.humidity": if val8 == "humidity": humidity, temperature = Adafruit_DHT.read_retry(11, 27) speech = "the humidity is " + str(humidity) + "%" elif req.get("queryResult").get("action") == "action.dht11": if val6 == "temperature" and val8 == "humidity": humidity, temperature = Adafruit_DHT.read_retry(11, 27) speech = " The temperature is " + str(temperature) + " C and the humidity is " + str(humidity) + "%" elif req.get("queryResult").get("action") == "action.fan": if val10 == "hot": GPIO.output(25, GPIO.HIGH) sp13 = "i turn on fan" if val10 == "cold": GPIO.output(25, GPIO.LOW) sp14 = "i turn off fan" speech = "OK, " + sp13 + " " + sp14 else: return {} print("Response:") print(speech) return { "fulfillmentText": speech, #"fulfillmentMessages": speech , #"data": {}, #"contextOut": [], #"source": "BankRates" } if __name__ == '__main__': port = int(os.getenv('PORT', 5000)) print("Starting app on port %d" %(port)) app.run(debug=True, port=port, host='0.0.0.0')
  • 91.
    PHỤ LỤC BỘ MÔNĐIỆN TỬ CÔNG NGHIỆP – Y SINH 75