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.
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, chuyển sang tab entities để thiết lập các thực thể cần thiết Cần xác định hai thực thể quan trọng là điều khiển đèn nào và trạng thái của đèn đó Từ đó, tạo ra hai thực thể @on-off và @led, với tên gọi do lập trình viên đặt sao cho dễ hiểu và thuận tiện trong sử dụng.
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
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 38
Sau khi nhấn vào tạo mới, chúng ta cần đặt tên cho entity và nhập các giá trị tương ứng Đối với đèn chỉ có hai trạng thái ON và OFF, ta điền các giá trị này vào reference value Đồng thời, trong phần synonym, hãy nhập các từ đồng nghĩa hoặc các cụm từ thể hiện việc điều khiển trạng thái ON hoặc OFF của đèn.
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
Ta tiến hành tạo mới intent để phân tích câu nói của người dùng, từ đó xử lý và cung cấp kết quả phù hợp Quá trình này tương tự như việc tạo mới intent.
Enities, ta nhấp chọn Create Intent để tạo mới Intent.
Ta thực hiện các bước để tạo ra Intent on-off, giúp chatbot nhận diện yêu cầu bật hoặc tắt các thiết bị từ người dùng và phản hồi bằng những hành động phù hợp.
Trong phần Training Phrases, người dùng cần nhập các câu nói có thể được sử dụng để điều khiển thiết bị Dialogflow sẽ tự động làm nổi bật các giá trị tham số trong các entities đã tạo, giúp trích xuất dữ liệu từ câu nói của người dùng để xử lý và đưa ra kết quả phù hợp Ngoài ra, người dùng cũng có thể chỉnh sửa thủ công bằng cách chọn các từ cần gán tham số Các giá trị tham số trong Training Phrases sẽ được hiển thị trong phần Action and parameters.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 40
Bảng Action và Parameters cho phép xác định hành động on:off, giúp nhận diện Intent gửi tới webhook để xử lý yêu cầu người dùng Hai tham số on-off và led được tạo trong entity sẽ lấy giá trị dữ liệu từ người dùng Để đảm bảo thông tin đầy đủ, người dùng cần tích vào mục Required.
Mục Response là nơi chúng ta cung cấp câu trả lời cho người dùng khi Intent được kích hoạt Nhóm chúng tôi sử dụng giá trị tham số từ câu nói của người dùng để tạo phản hồi Ví dụ, khi người dùng yêu cầu “Turn on led 1”, chatbot sẽ đáp ứng theo định dạng đã được thiết lập trong phần Text response.
Finally, in the fulfillment section, click on “Enable webhook call for this intent” to send information in JSON format to the webhook when the intent is triggered The server will then receive and process this information, ultimately providing the user with a tailored response to their query instead of the default reply specified in the Response section above.
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
Để thiết lập webhook trong mục Fulfillment, bạn cần nhập địa chỉ link của webhook Mỗi khi một Intent kích hoạt webhook, Dialogflow sẽ gọi đến địa chỉ này để tiếp nhận thông tin Điều này cho phép server xử lý dữ liệu và trả lại kết quả cho Dialogflow, từ đó hiển thị thông tin 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.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 42 e Integrations
Chúng tôi đã tích hợp chatbot vào các nền tảng nhắn tin, sử dụng webdemo do Dialogflow hỗ trợ để tạo giao diện trò chuyện với người dùng Để kích hoạt tính năng này, hãy bật web demo.
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.
Mở rộng cho điều khiển ON-OFF
Trong một số tình huống, người dùng có thể yêu cầu bật hoặc tắt đèn ở một phòng cụ thể vào thời điểm nhất định thay vì điều khiển trực tiếp Do đó, việc lập trình chatbot để hiểu rõ nhu cầu của người dùng là rất quan trọng, nhằm đáp ứng chính xác yêu cầu của họ.
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
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 44 b Thêm mới intent
Chúng ta sẽ thêm mới một Intent và thực hiện các bước tương tự như trước Nhóm em đã tạo Intent có tên là on-off:condition Dưới đây là hình ảnh minh họa cho Intent này:
Hình 4.16: Thêm mới Intent on-off:condition
Khi người dùng cung cấp thông tin không đầy đủ, chatbot sẽ tự động đặt câu hỏi để thu thập thêm dữ liệu cần thiết, tương tự như chức năng ON-OFF thông thường.
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.
Kết quả hoàn chỉnh trên Dialogflow
Chúng ta cần thực hiện các bước tương tự để đáp ứng yêu cầu của người dùng, bao gồm việc đóng mở thiết bị, điều khiển dimmer và đọc giá trị từ cảm biến Dưới đây là một số hình ảnh thực hành hoàn chỉnh trên Dialogflow.
Hình 4.18: Kết quả hoàn thành Intent b Entities
LẬP TRÌNH TRÊN RASPBERRY PI 3
Giới thiệu ngôn ngữ lập trình Python
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 46
Python là ngôn ngữ lập trình hướng đối tượng, cấp cao, được phát triển bởi Guido van Rossum, nổi bật với khả năng dễ học và thân thiện cho người mới bắt đầu Với kiểu dữ liệu động và cơ chế quản lý bộ nhớ tự động, Python cung cấp cấu trúc dữ liệu mạnh mẽ và phương pháp lập trình hiệu quả Cú pháp rõ ràng và dễ hiểu của Python làm cho nó trở thành lựa chọn lý tưởng cho việc viết script và phát triển ứng dụng trên nhiều nền tảng khác nhau.
Python là một ngôn ngữ lập trình có lịch sử lâu đời, được phát triển bởi Guido Van Rossum Quá trình thiết kế bắt đầu vào cuối những năm 1980, và phiên bản đầu tiên của nó đã được phát hành 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
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)
Bảng 4.1: Các phiên bản Python đã phát hành c Đặc điểm của ngôn ngữ lập trình Python
Python là ngôn ngữ lập trình đơn giản và dễ học, với cú pháp rõ ràng giúp người dùng dễ dàng đọc và viết mã So với các ngôn ngữ lập trình khác như C++, Java hay C#, Python tỏ ra vượt trội về tính dễ sử dụng.
Python là một ngôn ngữ lập trình miễn phí và mã nguồn mở, cho phép người dùng tự do sử dụng, phân phối và thậm chí áp dụng cho mục đích thương mại Với tính năng mã nguồn mở, bạn không chỉ có thể sử dụng các phần mềm và chương trình được viết bằng Python mà còn có khả năng thay đổi mã nguồn của chúng Cộng đồng Python rộng lớn luôn nỗ lực cải thiện và cập nhật ngôn ngữ này, đảm bảo rằng nó luôn phát triển và đáp ứng nhu cầu của người dùng.
Python có khả năng di chuyển linh hoạt giữa các nền tảng khác nhau mà không cần thay đổi mã nguồn Ngôn ngữ lập trình này có thể chạy trên hầu hết các hệ điều hành như Windows, macOS và Linux.
Khả năng mở rộng và tích hợp của Python cho phép bạn dễ dàng kết hợp các đoạn mã từ C, C++ và các ngôn ngữ khác vào ứng dụng của mình Điều này không chỉ nâng cao tính năng của ứng dụng mà còn mang lại khả năng scripting linh hoạt, điều mà nhiều ngôn ngữ lập trình khác khó có thể đạt được.
Python là một ngôn ngữ lập trình thông dịch cấp cao, giúp lập trình viên không phải lo lắng về các nhiệm vụ phức tạp như quản lý bộ nhớ hay dọn dẹp dữ liệu không cần thiết Khi chạy mã Python, ngôn ngữ này tự động chuyển đổi mã sang ngôn ngữ máy tính, cho phép người dùng tập trung vào việc phát triển ứng dụng mà không cần quan tâm đến các hoạt động ở cấp thấp.
Python sở hữu một bộ thƣ viện tiêu chuẩn phong phú, giúp đơn giản hóa quá trình lập trình Nhờ vào những thƣ viện này, bạn không cần phải tự viết toàn bộ mã nguồn, tiết kiệm thời gian và công sức Các thƣ viện đã được kiểm tra kỹ lưỡng và được hàng trăm lập trình viên tin dùng.
Lập trình hướng đối tượng (OOP) trong Python cho phép giải quyết các vấn đề phức tạp một cách trực quan Bằng cách sử dụng OOP, bạn có thể chia nhỏ những vấn đề này thành các tập hợp nhỏ hơn thông qua việc tạo ra các đối tượng.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 48
Giới thiệu phần mềm lập trình Python 3 IDLE
Cả Python 2 và Python 3 đều được cài sẵn trên hệ điều hành Raspbian, cho phép người dùng lập trình bằng cả hai ngôn ngữ Để khởi động phần mềm lập trình Python 3 IDLE, người dùng chỉ cần chọn: Start => programming => Python 3 (IDLE), và giao diện IDLE sẽ ngay lập tức hiển thị.
Hình 4.21: Giao diện Python 3 IDLE
Giao diện IDLE rất thân thiện và dễ sử dụng Để tạo file mới hoặc mở file đã có, người dùng chỉ cần nhấp vào mục File và chọn các tùy chọn phù hợp.
Hình 4.22: Thao tác file trên giao diện Python 3 IDLE
Hình dưới đây chỉ ra chức năng các phần và thanh công cụ của Python 3IDLE:
Lưu đồ giải thuật
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.
Sau khi khởi tạo hệ thống, nếu nhận được dữ liệu từ Dialogflow, hệ thống sẽ tiến hành xử lý và phân tích dữ liệu đó Kết quả của quá trình này sẽ cho phép 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 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:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 50
Xử lý phân tích Điều khiển thiết bị
Viết chương trình hệ thống
Chúng tôi sẽ viết chương trình tạo webhook để nhận dữ liệu từ Dialogflow, sử dụng dữ liệu này để điều khiển khối điều khiển động lực và gửi phản hồi về Dialogflow Do mã nguồn khá dài, chúng tôi sẽ cung cấp đầy đủ trong phần phụ lục.
#!/usr/bin/env python import urllib import json import os import RPi.GPIO as GPIO import Adafruit_DHT
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 )
The code snippet defines a Flask route for a webhook that processes incoming POST requests It retrieves the JSON data from the request, logs the formatted request to the console, and generates a response using the `makeWebhookResult` function Finally, it formats the response in JSON and prints it for verification.
#t = str(res["speech"]) r = make_response(res)
#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')
Public server lên internet bằng ngrok
Ngrok là công cụ tạo đường hầm giữa localhost và internet, cho phép người khác truy cập localhost của bạn thông qua một tên miền tùy chỉnh Để công khai server lên internet, bạn cần sử dụng ngrok, giúp kết nối dễ dàng và thuận tiện hơn.
Ngrok cung cấp cả phiên bản miễn phí và trả phí, nhưng phiên bản miễn phí có nhiều hạn chế Để sử dụng ngrok, người dùng cần thực hiện một số bước nhất định.
- Đă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:
THI CÔNG MẠCH ĐIỀU KHIỂN DIMMER
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:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 54
Tên linh kiện Opto 4N35 Điện trở Điện trở
Tụ điện Điện trở Diode Bridge Diode
ZennerHeader 2 pinMOSFET IRF840Domino
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
ĐÓNG GÓI VÀ THI CÔNG MÔ HÌNH
Đóng gói bộ điều khiển
Để bảo vệ Raspberry Pi 3 khỏi các tác động bên ngoài, chúng tôi đã sử dụng vỏ nhựa chắc chắn Vỏ này còn được trang bị quạt tản nhiệt mini, giúp Raspberry Pi hoạt động hiệu quả hơn Dưới đây là một số hình ảnh minh họa.
Hình 4.31: Đóng gói bộ điều khiển
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 56
Thi công mô hình
Để xây dựng mô hình nhà thông minh, nhóm chúng em đã sử dụng bìa cứng làm vật liệu chính Chúng em cắt ghép các phần lại với nhau để hoàn thiện mô hình ngôi nhà Ngoài ra, chúng em cũng gắn các thiết bị đèn vào một khối cố định để tạo nên sự hoàn chỉnh cho sản phẩm.
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
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í.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 58
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í
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
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 60
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
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
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 62
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 độ
TÀI LIỆU HƯỚNG DẪN, THAO TÁC
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
- 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:
Hình 4.44: Lưu đồ hướng dẫn sử dụng
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 64
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.
Sử dụng và khai thác sức mạnh của Dialogflow giúp lập trình viên phát triển chatbot thông minh Hiểu rõ ý nghĩa của từng phần trong Dialogflow là điều cần thiết để tối ưu hóa khả năng tương tác của chatbot.
5.1.2 Các khái niệm liên quan
Hiểu rõ các khái niệm như API, webhook và định dạng file JSON là rất quan trọng Việc trích xuất dữ liệu từ file JSON sẽ giúp đáp ứng các yêu cầu của đề tài một cách hiệu quả.
Để điều khiển Raspberry Pi 3 qua VNC mà không cần kết nối mạng, bạn cần biết cách cài đặt hệ điều hành cho Raspberry và thiết lập IP tĩnh cho mạng LAN Việc này giúp bạn truy cập và quản lý Raspberry Pi một cách hiệu quả ngay cả khi không có mạng Internet.
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ƣ:
Điện áp cấp từ Raspberry Pi 3 và ý nghĩa của các chân trên thiết bị này rất quan trọng Các chân của Raspberry Pi chỉ có khả năng đọc tín hiệu Digital, không giống như Arduino có thể đọc tín hiệu Analog Ngoài ra, việc tìm hiểu các chuẩn giao tiếp trên Raspberry cũng là điều cần thiết để tối ưu hóa việc sử dụng thiết bị.
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.
Tìm hiểu nguyên lý hoạt động của dimmer giúp bạn thực hành lắp ráp mạch mô phỏng dimmer để điều khiển thiết bị hiệu quả Qua đó, bạn cũng có cơ hội ôn tập kiến thức về các linh kiện điện tử như Triac và Mosfet.
Biết cách sử dụng phần mềm Altium Designer để vẽ mạch PBC phục vụ cho đề tài.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
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.
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.
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ị.
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ƣ:
Trong những năm gần đây, việc ứng dụng trí tuệ nhân tạo (AI) và học máy (Machine Learning) vào các lĩnh vực đời sống đã trở nên phổ biến và mang lại hiệu quả cao Đề tài này không chỉ có tính thực tiễn cao mà còn phản ánh xu hướng phát triển mạnh mẽ của công nghệ trong xã hội hiện đại.
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 thân thiện và dễ sử dụng, cho phép tích hợp với nhiều nền tảng nhắn tin phổ biến như Facebook Messenger, Skype và Slack, nhằm nâng cao tính thực tiễn và sự 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ƣ:
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.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 68
Chương 6 KẾT LUẬN VÀ HƯỚNG
Dựa trên các yêu cầu trong chương 1, nhóm thực hiện đề tài nhận thấy hệ thống hoạt động ổn định và đáp ứng đầy đủ các tiêu chí đã đề ra Hệ thống cho phép người dùng điều khiển thiết bị trong nhà thông qua chatbot, với giao diện đơn giản và dễ sử dụng, tạo điều kiện thuận lợi cho việc tương tác.
Mô hình thiết kế nhà thông minh mang đến hình ảnh rõ ràng và dễ hình dung cho ngôi nhà thực tế, với việc bố trí các module và thiết bị một cách hợp lý Hệ thống đảm bảo tính an toàn cho người sử dụng; tuy nhiên, nó cũng gặp một số hạn chế như phụ thuộc vào đường truyền internet và tính bảo mật chưa cao Bên cạnh đó, chatbot trong hệ thống chỉ có khả năng trò chuyện đơn giản, không đáp ứng tốt với các yêu cầu phức tạp từ người dùng.
Tích hợp chatbot vào nền tảng nhắn tin mang lại sự thân thiện và tiện lợi cho người dùng Ngoài khả năng trò chuyện đơn giản, việc tích hợp các API như thời tiết, đọc báo, mua sắm và đặc biệt là API simsimi giúp chatbot trở nên thông minh hơn, cho phép nó phản hồi như một con người thực thụ Nhờ đó, chatbot không chỉ là một công cụ giao tiếp mà còn là trợ lý thông minh, hỗ trợ người dùng trong mua sắm, cung cấp thông tin và tin tức.
Có thể tích hợp API Voice vào chatbot để giao tiếp với người dùng qua giọng nói, thay vì chỉ sử dụng tin nhắn văn bản Điều này cho phép linh hoạt mở rộng khả năng điều khiển cho nhiều thiết bị khác nhau trong các ngôi nhà và dự án đa dạng.
[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
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 70
#!/usr/bin/env python import urllib import json import os import RPi.GPIO as GPIO import Adafruit_DHT
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 )
The code defines a webhook route using the Flask framework, which listens for POST requests at the '/webhook' endpoint Upon receiving a request, it retrieves the JSON data, logs the request details, and processes the data to generate a response Finally, it formats the response as a JSON string and prints it for verification.
#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":
#if req.get("queryResult").get("action") != "on-off.condition":
The code snippet processes a request to control devices based on user parameters It retrieves the action and parameters such as "on-off," "led," "status," "percentage," "status-door," "temperature," "unit-temperature," "humidity," "room," and "hot-cold." If the action is "on-off" and the lengths of the "on-off" and "led" parameters match, it iterates through the values For each corresponding pair, if the action is "on" and the LED setting is "all," the system prepares to execute the command.
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":
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 72
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":
In this code snippet, the GPIO pin 25 is set to a LOW state, while the variable `sp8` is constructed by concatenating values from two lists, `val` and `val2` A speech output is generated by combining multiple speech components (`sp1` through `sp12`) into a single string Additionally, there is a conditional check for an action named "on-off:condition," which suggests further logic based on the value of `val3`.
#if if val3 if if if
#if speech elif req.get("queryResult").get("action") == "action.dimmer": a="" for i in val4: if i =="%": break a=a+i