Node cảm biến có nhiệm vụ thu thập giá trị nhiệt độ, độ ẩm và khí gas để gửi về getway. Đồng thời phát cảnh báo khi giá trị khí gas vượt quá ngưỡng quy định
Từ nhiệm vụ trên ta chọn các linh kiện: - Vi điều khiển trung tâm: Arduino Nano - Mạch thu phát RF ZigBee CC2530 - Cảm biến nhiệt độ, độ ẩm: DHT22 - Cảm biến khí gas MQ2
- Màn hình LCD 16x2 - Còi báo 5V…
Tính chọn nguồn cho thiết bị:
Ta có bảng giá trị tiêu thụ điện của các linh kiện
Tên linh kiện Dòng tiêu thụ
Arduino Nano 40 mA
DHT22 2.5 mA
ZigBee CC2530 30 mA
Màn hình LCD 16 mA
Bảng 3.1. Giá trị tiêu thụ điên của linh kiện node cảm biến Từ bảng trên ta lựa chọn cấp nguồn cho mạch bằng adapter 5v – 1A
Lưu đồ thuật toán:
Hình 3.2. Lưu đồ thuật toán Node cảm biến.
Khi cấp nguồn thiết bị sẽ khởi tạo các giá trị cần thiết để cảm biến, Lcd và ZigBee hoạt động. Thiết bị tiến hành đọc các giá trị của cảm biến sau đó hiện thị ra Lcd để người dùng có thể giám sát các thông số đo đạt. Nếu phát hiện giá trị khí gas vượt quá mức giá trị mà ta set, thiết bị sẽ phát ra giá trị cảnh báo bằng còi để người dùng có thể kịp thời khắc phục sự cố. Đồng thời thiết bị cũng gửi giá trị đến Getway liên tục 4 giây một lần khi có thay đổi để người dùng giám sát từ xa.
Sơ đồ nguyên lý:
Hình 3.3 Sơ đồ nguyên lý Node cảm biến. Mạch Pcb:
Hình ảnh thực tế:
Hình 3.5 Hình ảnh thực tế node cảm biến 3.2.2. Tính toán, thiết kế node điều khiển tải
Node cảm biến tiếp nhận tín hiệu điều khiển từ getway gửi về đề điều khiển thiết bị và sẽ trả về getway trạng thái của thiết bị nếu có tác động bật tắt từ nút nhấn cơ. Ta chọn các linh kiện cho mạch:
- Vi điều khiển trung tâm: Arduino Nano. - Mạch thu phát RF ZigBee CC2530.
- Relay 5V.
- Opto quang Pc817. - Điện trở, led….
Tính toán nguồn cấp cho mạch:
Ta có bảng giá trị dòng tiêu thụ của các linh kiện
Tên linh kiện Dòng tiêu thụ
Arduino Nano 40 mA
ZigBee CC2530 30 mA
Led 20 mA
Relay 5 mA
Bảng 3.2. Dòng tiêu thụ của node nút nhấn.
Dựa vào bảng giá trị trên ta chọn nguồn cấp cho mạch là: mạch nguồn 5v - 0,5A Mạch PCB:
Hình ảnh thực tế:
Hình 3.6. Hình ảnh thực tế node điều khiển tải. Sơ đồ nguyên lý:
Hình 3.6. Sơ đồ nguyên lý Node nút nhấn. Lưu đồ thuật toán:
Hình 3.7. Lưu đồ thuật toán Node điều khiển tải.
Khi cấp nguồn mạch sẽ khởi tạo các giá trị để có thể giao tiếp giữa các module ZigBee với nhau. Khi bộ đệm Serial nhận được giá trị có chứa ký tự A ở sau cùng thì gói tin này là được gửi cho Node điều khiển tải. Khi đó Arduino sẽ tiến hành phân tích gói tin nhận được để lấy các dữ liệu điều khiển thiết bị gửi về. Nếu bộ đệm có gói tin nhưng không phải của nó thì Node sẽ bỏ qua gói tin đó và tiếp tục chờ để nhận gói tin điều khiển. Song song với việc đợi nhận gói tin điều khiển thì Node còn liên tục đọc giá trị của nút nhấn bằng ngắt timer1. Nếu có sự kiện nhấn nút thì Node sẽ tiến hành đọc giá trị của nút nhấn và tương ứng với nút nhấn để điều khiển tải cần thiết. Sau đó Node
sẽ gửi giá trị thay đổi của nút nhấn về Getway để đồng bộ trạng thái bật tắt của thiết bị trên app điện thoại và máy tính.
3.2.3. Tính toán, thiết kế getway
Getway là trung tâm gửi và nhận tín hiệu giữa các node song song với đó là truyền nhận dữ liệu với google firebase để điều khiển thiết bị. nên ta chọn các linh kiện: - Vi điều khiển: Esp 8266 Node mcu
- ZigBee CC2530
Mạch tiêu thụ dòng nhỏ nên có thể cấp nguồn trực tiếp qua cổng USB của Esp 8266 node mcu
Sơ đồ nguyên lý:
Hình 3.8. Sơ đồ nguyên lý Getway. Lưu đồ thuật toán:
Hình 3.9. Lưu đồ thuật toán Getway.
Khi cấp nguồn Getway sẽ khỏi tạo các thông số cần thiết để giao tiếp với Module ZigBee. Sau đó sẽ cập nhật các giá trị thay đổi trên Google Firebase để gửi đến Node điều khiển tải bật tắt thiết bị. Sau đó Getway sẽ chờ để nhận các gói tin từ các node, nếu gói tin nhận được có ký tự cuối là dấu “#” Getway sẽ hiều đây là gói tin của Node
cảm biến gửi về sau đó tiến hành phân tích chuỗi để nhận được các giá trị nhiệt độ, độ ẩm, khí gas gửi về Google Firebase để hiển thị giá trị thay đổi trên app. Ngược lại nếu gói tin không có ký tự "#"”ở cuối thì nó sẽ hiều là gói tin từ node điều khiển tải gửi về và tiến hành phân tích chuỗi để cập nhận giá trị lên Google firebase đề đồng bộ giá trị nút nhấn trên app.
Mạch PCB:
Hình 3.10. Mạch Pcb Getway. Hình ảnh thực tế:
3.3. Xây dựng thuật toán và code ứng dụng. 3.3.1. Phần mềm quản lý và cài đặt người dùng. 3.3.1. Phần mềm quản lý và cài đặt người dùng.
Phần mềm quản lý gồm các chức năng dành cho người quản lý hệ thống người dùng. Vì vậy phần mềm này sẽ có các chức năng chính là: Tạo tài khoản mới cho người dùng, đăng nhập vào tài khoản người dùng, trình điều khiển đề kiểm tra kết nối khi lắp đặt thiết bị, trình quản lý tài khoản người dùng nhằm hỗ trợ khách hàng khi quên mật khẩu, xử lý tình huống cấp bách khi khách hàng yêu cầu.
3.3.2. thuật toán và giao diện cho form Login.
Form Login là form cơ bản của hầu hết các ứng dụng yêu cầu tài khoản User hiện nay nhằm để quản lý người dùng nhằm bảo mật thông tin dành cho người dùng và tạo sự an toàn về thông tin cho người sử dụng. Các tài khoản đăng nhập vào form login phải được đăng kí trước, có thể đăng kí trong form đăng kí của phần mềm hoặc có thể đăng kí trực tiếp trên sever firebase.
Hình 4.1 Form Login ứng dụng.
Form login bao gồm các chức năng chính là đăng nhập vào tài khoản đã có, đăng kí tài khoản mới và load tất cả tài khoản hiện có từ sever.
Phần nhập tên đăng nhập và mật khẩu là các textbox cho phép người dùng nhập dữ liệu từ bàn phím vào. Với các thuộc tính cơ bản của textbox như font size, font style, Opacity, … Và chức năng đơn giản khi người dùng click vào để nhập thì dữ liệu sẽ xóa dữ liệu hiện có.
Nếu nhấn đăng ký thì form đăng kí tài khoản sẽ mở ra để người dùng thực hiện đăng ký. Nếu nhấn Load dữ liệu người dùng thì sẽ mở ra form để load tài khoản người dùng hiện đã đăng ký từ sever.
Nếu nhấn đăng nhập thì một chuỗi thuật toán sẽ được thực hiện. Đầu tiên nó sẽ kiểm tra dữ liệu đã nhập vào các textbox hay chưa. Nếu một trong hai textbox nhập tài khoản hoặc mật khẩu trống thì khi ấn đăng nhập sẽ có thông báo “không được để trống” Nếu cả 2 đều không trống thì dữ liệu sẽ load data từ sever xuống và kiểm tra. Nếu mật khẩu nhập vào khác với dữ liệu mật khẩu từ sever thì sẽ có thông báo “mật khẩu không chính xác”. Nếu cả mật khẩu và tài khoản đều trùng khớp với dữ liệu trên sever thì form login sẽ đóng lại và mở form control app lên và truyền vào đó tài khoản người dùng vừa được đăng nhập vào từ form Login. Nếu tất cả điều trên đều không thỏa hoặc người dùng tạo ra lỗi thì sẽ hiển thị “Người dùng không tồn tại”.
Lưu đồ thuật toán:
Hình 4.2 Thuật toán cho form login.
Quá trình login sẽ kiểm tra qua nhiều giai đoạn. Tuy nhiên ở đây vẫn chưa đầy đủ. Bởi vì hàm try – catch thực hiện luôn có những lỗi phát sinh do người dung xảy ra. Nhưng ở đây em đã thực hiện việc in ra message show là tài khoản không tồn tại cho
catch. Tuy chưa hợp lý nhưng nó giúp chống lỗi do người dùng tạo ra và giúp cho chương trình vẫn tiếp tục hoạt động.
3.3.3. thuật toán và giao diện của form Register.
Form Register gồm các Label với nội dung là UserName, Password và Confirm Password, bên cạnh đó là các TextBox để ghi vào tài khoản cần tạo mới. Và các nút nhấn Register để đăng ký và nút nhấn Exit để đóng form.
Chức năng Register chỉ cung cấp cho nhà sản xuất nhằm mục đích không bị người dùng tạo nhiều tài khoản và đánh sập sever bằng cách tạo mới tại khoản liên tục và đăng nhập liên tục bằng tool. Vì vậy hiện nay các dịch vụ thường do bên phía quản lý cung cấp nhằm mục đích tránh sự phá hoại từ bên ngoài và tăng tính bảo mật cho người dùng.
Hình 4.3 Form Register
Resgister có hai nút nhấn là exit để thoát chương trình và Regis để đăng ký. Khi nhấn Register thì điều đầu tiên thực hiện là kiểm tra xem các ô nhập vào có trống hay không. Nếu trống thì thông báo cho người dùng “Mục này không thể để trống”. Nếu
không trống thì sẽ tiếp tục kiểm tra liệu password nhập vào và confirm password có giống nhau hay không. Nếu không thì thông báo cho người dùng “Confirm to not true”. Nếu confirm đúng thì sẽ load data từ người dùng chưa đăng ký để kiểm tra xem
nó có tồn tại không. Nếu có thì thông báo cho người dùng “Tài khoản đã tồn tại” Nếu tất cả đều thỏa thì việc tạo một User mới với tên đăng nhập và mật khẩu vừa nhập
được thông qua. Đồng thời sẽ khởi tạo các giá trị nhiệt độ, độ ẩm, khí ga, thiết bị 1, …. Sau khi đăng ký thì có thể ấn vào Exit để thoát form và thực hiện đăng nhập để kiểm tra. Các giá trị của nhiệt độ, độ ẩm, khí ga và các thiết bị khác sẽ lưu giá trị mặc định là “0” lúc này phần mềm chưa connect với phần cứng.
3.3.4. thuật toán và giao diện của form load account.
Hình 4.5 Form load account.
Form load account chỉ gồm 1 nút nhấn và 1 data grid. Khi click vào load account thì sẽ có hàm foreach. Hàm này sẽ đếm được tất cả các phần từ trong sever và load tất cả chúng ra để show trong data grid view. Tuy nhiên đây là vấn đề ảnh hưởng tới sự bảo mật của người dùng và hiện tại sản phẩm đang nằm ở mức độ đề tài. Nếu thương mại thì việc show account user là việc quan trọng chỉ dành cho một số bộ phận quan trọng trong tiếp quản hệ thống mới được sử dụng nhằm mục đích bảo vệ quyền lợi người dùng. 3.3.5. thuật toán và giao diện form control
Form Control sẽ gồm 2 TabItem trong đó có:
TabItem giao diện hiển thị nhiệt độ, độ ẩm khí ga. Ba giá trị này sẽ được liên tục cập nhập từ sever của firebase và nó hoàn toàn thỏa mãn vấn đề read time.
TabItem giao diện điều khiển các thiết bị. Ở đây mặc định là 5 thiết bị và trạng thái của 5 thiết bị đó tượng trưng cho 5 bóng đèn. Màu vàng biểu thị trạng thái On và màu đỏ biểu thị cho trạng thái Off. Các nút nhấn On, Off sẽ trực tiếp gửi giá trị sau khi được
click từ tài khoản đăng nhập hiện tại lên sever và sau đó bóng đèn trạng thái của thiết bị đó sẽ đọc các trạng thái từ sever để update trạng thái hiện tại sau đó cập nhật trạng thái bằng cách thay đổi màu của nó.
Hình 4. 6 Form load giá trị nhiệt độ phòng.
Hình 4.8 Listener event from firebase.
Mỗi lần đăng nhập thành công. Form Login sẽ bị đóng lại và bắt đầu mở form Control, việc đầu tiên sau khi form control bắt đầu mở lên là load tất cả dữ liệu từ sever của tài khoản vừa đăng nhập đó về và update vào tất cả các status hiện có.
Đối với TabItem show các giá trị nhiệt độ, độ ẩm, khí ga thì các giá trị sẽ thay đổi khi load dữ liệu lần đầu khi login thành công. Sau đó mỗi khi giá trị của chúng thay đổi trên sever (tức là giá trị đó khác chính nó) thì sever sẽ gửi một thông báo về cho ứng dụng của chúng ta và gọi đó là listener.
Đối với TabItem show các status của các thiết bị cũng tương tự như đối với TabItem show các giá trị nhiệt độ, độ ẩm, khí ga như trên. Tuy nhiên ở Tab này có thêm các nút nhấn điều khiển thiết bị và mỗi khi nhấn nút, load data sẽ thực hiện load dữ liệu về để update lại các status hiện tại của thiết bị.
3.3.6. Phần mềm dành cho người dùng.
Với sự phát triển nhanh chóng của Smartphone cũng như Tablet. Hệ thống thiết bị thông minh cầm tay ngày càng phổ biến và rộng rãi hơn. Nhu cầu Smart home thực hiện được là nhờ sự phổ biến của các thiết bị thông minh cầm tay bởi khả năng truy cập internet cũng như sự tiện dụng khi có thể sử dụng ở mọi nơi. Các phần mềm phục vụ cho thị trường này cũng ngày càng nhiều lên, chính vì vậy mà đề tài này cũng không thể thiếu việc tạo nên một ứng dụng điều khiển thân thiện và phổ biến dành cho người dùng. Việc lựa chọn xamarin là hoàn toàn hợp lý bởi ứng dụng nó tạo ra có thể chạy trên đa nền tảng
Giao diện login trên xamarin
Hình 4.9 Giao diện Login trên xamarin.
Giao diện login trên xamarin không có nút nhấn Register bởi vì tài khoản sử dụng để đăng nhập vào sẽ do nhà quản lý cung cấp. việc đăng ký tài khoản mới chỉ thực hiện trên ứng dụng của windown.
Vấn đề login trên xamarin tương tự thuật toán trên ứng dụng windown. Tuy nhiên ở Xamarin sẽ có nhiều function hỗ trợ thêm nhằm tạo sự thuận tiện cho người dùng. Ví dụ như “click here” để chuyển hướng đến trang web hỗ trợ người dùng.
Giao diện control trên xamarin.
Hình 4.10 Giao diện control trên xamarin.
Giao diện control sẽ hiển thị các giá trị của nhiệt độ, độ ẩm, khí ga và các nút nhấn để điều khiển các thiết bị. bản thân các nút nhấn vừa sử dụng để điều khiển và vừa sử dụng thuộc tính backgroud để hiển thị trạng thái thiết bị (màu vàng biểu thị cho On và màu trắng biểu thị cho Off).
Function LogOut tài khoản đã được thêm cho ứng dụng, các Function History để lưu giá thời gian của sự thay đổi trạng thái trên chưa được connect. Tuy nhiên đối với các phiên bản phần mềm thì có thể update ứng dụng lên dần dần dựa theo sự khảo sát
và đóng góp ý kiến từ người dùng nên bản demo sẽ không quá tiên quyết ở vấn đề bảo mật.
Nền tảng mono của C# cho phép việc tạo ứng dụng dễ dàng trên 2 nền tảng phổ biến nhất hiện nay đó là Android và iOS. Tuy nhiên thì việc “dễ dàng” thực hiện đó đồng thời cũng là hạn chế vì khó can thiệp sâu vào phần cứng của thiết bị cũng như chủ động trong điều khiển hoạt động của service cũng như các hoạt đồng ngầm khác của thiết bị.
Phát triển nền tảng ứng dụng trên môi trường native sử dụng ngôn ngữ Java. Các chức năng hoàn toàn tương tự dựa trên ứng dụng đã viết trên nền tảng Mono được sử dụng ngôn ngữ Java và phát triển trên Android studio.
Hai giao diện ứng dụng trong hình 4.11 và 4.10. Giao diện hoàn toàn tương tự, các chức năng cũng hoàn toàn tương tự. Nhưng có sự khác biết ở đây là ứng dụng trên Android có các nút nhấn có thể có tên khác nhau chứ không phải tên do lập trình viên định nghĩa. Để có thể thực hiện điều này. Chúng em đã sử dụng sự kiện longclick (là sự kiện nhấn giữ nút nhấn trong khoảng 3-5s) và SharedPreferences (là nơi lưu trữ dữ liệu ngầm ưu điểm lớn nhất là không mất đi khi tắt ứng dụng).