5. Đối tượng và phạm vi nghiên cứu
1.4 Phần mềm lập trình Arduino IDE
1.4.1 Giới thiệu
Arduino IDE là một môi trường phát triển tích hợp đa nền tảng, làm việc với cùng một bộ điều khiển Arduino để viết, biên dịch và tải code lên phần cứng. Đây là một công cụ hỗ trợ lập trình và nạp chương trình trên tất cả các dòng arduino đang có trên thị trường hiện nay.
Ngôn ngữ phổ biến cho Arduino IDE là C và C++ và thường được viết theo hướng đối tượng. Công cụ lập trình Arduino IDE sẽ hỗ trợ người dùng lựa chọn mô hình để làm việc nhờ sử dụng Menu Tools của ứng dụng và một mảng các thư viện phong phú.
Hình 1.19: Giao diện của phần mềm Arduino IDE
Khi mới kết nối phần cứng Arduino với máy tính ta click vào Tools -> board để chọn loại board sử dụng.
Hình 1.20: Các loại board phần mềm hỗ trợ
Bên cạnh việc chọn board thì một phần quan trọng nữa là chọn cổng COM. Khi lần đầu gắn mạch Arduino vào máy tính, người sử dụng cần nhấn chọn cổng COM bằng
cách vào Tools -> Serial Port (một số phiên bản dùng từ Port) sau đó nhấn chọn cổng COM.
Hình 1.21: Chọn port giao tiếp với phần cứng
Ngoài ra, trong chương trình còn chứa một lượng ví dụ rất lớn, giúp người dùng có thể dễ dàng tiếp cận và thuận lợi hơn trong việc viết chương trình.
Hình 1.22: Một số ví dụ cơ bản
Để thêm các thư viện Arduino từ trình quản lý thư viện riêng của IDE, hãy truy cập vào Sketch > Include Library > Manage Libraries.
Hình 1.23: Quản lý các thư viện Arduino IDE hỗ trợ
Chọn phiên bản và download các thư viện cần thiết.
Hình 1.24: Giao diện install thư viện 1.4.2 Các lệnh, các hàm cơ bản trong Arduino IDE
Những lệnh cơ bản [7]
Ngay khi mở Arduino IDE sẽ được chào đón bởi các lệnh setup() và loop(). Đây là hai lệnh duy nhất về sketch mà tìm thấy trong hầu hết tất cả các code Arduino.
Setup(): Mỗi khi sketch bắt đầu, lệnh setup sẽ giúp khởi tạo các biến và bắt đầu sử dụng các thư viện.
Loop(): Một vòng lặp theo sau setup và thực sự là trái tim của chương trình, khiến nó phản hồi vô hạn với bất kỳ logic nào.
Sau khi làm quen với các sketch cần biết những lệnh điều khiển. Những lệnh quan trọng nhất là:
Break: Nếu muốn thoát khỏi một lệnh cần nhấn break.
If or else: Các lệnh logic khởi tạo một hành động mỗi khi một điều kiện được thỏa mãn.
Các lệnh điều khiển hữu ích khác có thể cung cấp logic nhất định. Những lệnh có thể sử dụng bao gồm:
return: Trả về một giá trị nhất định.
while: Một vòng lặp khác diễn ra liên tục trong một điều kiện nhất định.
goto: Đúng như tên gọi của nó, lệnh này cho phép đi đến một dòng nhất định trong code.
Boolean và các toán tử số học [7]
Bên cạnh sketch và các lệnh kiểm soát, cần phải biết một số Boolean và toán tử số học để chỉ huy các chương trình.
Các toán hạng: Bằng (=), phép cộng (+), phép trừ (-), phép nhân (*) và phép chia (/).
Các toán hạng nâng cao: Không bằng (!=), Nhỏ hơn hoặc bằng (<=), lớn hơn hoặc bằng (>=), phần dư (%).
Các biến quan trọng [7]
Trong một số trường hợp, cần đưa ra một vài biến để xử lý những phép toán logic khác nhau. Những biến quan trọng là:
HIGH|LOW: Điều này mang lại giá trị cuối cùng cao và thấp cho các hằng số. LED_BUILTIN: Đưa ra số lượng chân LED (LED pin).
Các biến quan trọng khác cần nhớ bao gồm string. Chúng cũng giống như bất kỳ chương trình
Python, C++,....
Các hàm cao cấp [7]
True/false, sizeof(), void, int và thông thường nào khác bao gồm
Cuối cùng, cần biết một vài hàm nâng cao để điều khiển bo mạch Arduino. Các hàm nâng cao bao gồm:
digitalRead(): Đọc giá trị từ một pin nhất định. Ngoài ra còn có digitalWrite(). random(): Hàm này giúp tạo ra các số ngẫu nhiên.
Tone() và notone(): Thêm âm thanh xuất hiện trong pin, hàm tone() sẽ xử lý vấn đề đó, trong khi notone() giữ mọi thứ im lặng. Delay(): Thêm độ trễ thời gian.
1.5 Giới thiệu các ngôn ngữ lập trinh web Ba ngôn ngữ lập trình thuần được sử dụng là HTML, CSS và Javascript HTML là viết tắt của HyperText Markup Language (ngôn ngữ đánh dấu siêu văn bản) dùng mô tả cấu trúc của các trang Web và tạo ra các loại tài liệu có thể xem được trong trình duyệt.
CSS (viết tắt của Cascading Style Sheets) là một ngôn ngữ định dạng được sử dụng để mô tả trình bày các trang Web, bao gồm màu sắc, cách bố trí và phông chữ. Nó cho phép hiển thị nội dung tương thích trên các loại thiết bị có kích thước màn hình khác nhau, chẳng hạn như màn hình lớn, màn hình nhỏ, hoặc máy in. JS (viết tắt của Javascript) là một nền tảng (cross-platform), ngôn ngữ kịch bản hướng đối tượng (object-oriented). Nó là một ngôn ngữ nhỏ và nhẹ. Chạy trong môi trường máy chủ lưu trữ (ví dụ: trình duyệt web),
JavaScript có thể được kết nối với các đối tượng của môi trường để cung cấp kiểm soát chương trình đối với chúng.
1.6 Giới thiệu Google Firebase1.6.1 Khái niệm 1.6.1 Khái niệm
Firebase là một dịch vụ cơ sở dữ liệu thời gian thực hoạt động trên nền tảng đám mây được cung cấp bởi Google nhằm giúp người lập trình phát triển nhanh các ứng dụng bằng cách đơn giản hóa các thao tác với cơ sở dữ liệu…
Firebase là sự kết hợp giữa nền tảng cloud với hệ thống máy chủ cực kì mạnh mẽ tới từ Google, để cung cấp cho chúng ta những API đơn giản, mạnh mẽ và đa nền tảng trong việc quản lý, sử dụng database.
1.6.2 Realtime Database System
Cơ sở dữ liệu thời gian thực Firebase lưu trữ dữ liệu database dưới dạng JSON và thực hiện đồng bộ database tới tất cả các client theo thời gian thực. Cụ thể hơn có thể xây dựng được client đa nền tảng (cross-platform client) và tất cả các client này sẽ cùng sử dụng chung một database đến từ Firebase và có thể tự động cập nhật mỗi khi dữ liệu trong database được thêm mới hoặc sửa đổi. Ngoài ra Firebase còn cho phép phân quyền một các đơn giản bằng cú pháp tương tự như javascript [8].
1.6.3 Tại sao chọn Google Firebase
Triển khai ứng dụng nhanh [8]:
Với Firebase có thể giảm bớt rất nhiều thời gian cho việc viết các dòng code để quản lý và đồng bộ cơ sở dữ liệu, mọi việc sẽ diễn ra hoàn toàn tự động với các API của Firebase. Không chỉ có vậy Firebase còn hỗ trợ đã nền tảng nên sẽ càng đỡ mất thời gian rất nhiều khi muốn xây dựng là ứng dụng đa nền tảng.
Không chỉ nhanh chóng trong việc xây dựng database, Google Firebase còn giúp ta đơn giản hóa quá trình đăng kí và đăng nhập vào ứng dụng bằng các sử dụng hệ thống xác thực do chính Firebase cung cấp.
Bảo mật [8]:
Firebase hoạt động dựa trên nền tảng cloud và thực hiện kết nối thông qua giao thức bảo mật SSL, chính vì vậy sẽ bớt lo lắng rất nhiều về việc bảo mật của dữ liệu cũng như đường truyền giữa client và server. Không chỉ có vậy, việc cho phép phân quyền người dùng database bằng cú pháp javascipt cũng nâng cao hơn nhiều độ bảo mật cho ứng dụng, bởi chỉ những user cho phép mới có thể có quyền chỉnh sửa cơ sở dữ liệu.
Tính linh hoạt và khả năng mở rộng [8]:
Sử dụng Firebase sẽ giúp dễ dàng hơn rất nhiều mỗi khi cần nâng cấp hay mở rộng dịch vụ. Ngoài ra firebase còn cho phép tự xây dựng server riêng để có thể thuận tiện hơn trong quá trình quản lý. Việc Firebase sử dụng NoSQL, giúp cho database sẽ
không bị bó buộc trong các bảng và các trường mà có thể tùy ý xây dựng database theo cấu trúc riêng.
Sự ổn định [8]:
Firebase hoạt động dựa trên nền tảng cloud đến từ Google vì vậy hầu như không bao giờ phải lo lắng về việc sập server, tấn công mạng như DDOS, tốc độ kết nối lúc nhanh lúc chậm, … nữa, bởi đơn giản là Firebase hoạt động trên hệ thống server của Google. Hơn nữa nhờ hoạt động trên nền tảng Cloud nên việc nâng cấp, bảo trì server cũng diễn ra rất đơn giản mà không cần phải dừng server để nâng cấp như truyền thống.
Giá thành [8]:
Google Firebase có rất nhiều gói dịch vụ với các mức dung lượng lưu trữ cũng như băng thông khác nhau với mức giá dao động từ free đến $1500 đủ để đáp ứng được nhu cầu của tất cả các đối tượng.
1.6.4 Tạo một cơ sở dữ liệu trên Google Firebase
Tạo một tài khoản để truy cập vào giao diện điều khiển. Sau đó, chọn “ Get start” để bắt đầu tạo project.
Hình 1.25: Giao diện trang Google Firebase
Hình 1.26: Tạo project mới
Từ menu bên trái, nhấp vào “Database” và “Create database” trong phần Realtime Database.
Hình 1.27: Tạo cơ sở dữ liệu mới
Cấu hình, chọn chế độ bảo mật cho project trên Firebase.
Hình 1.28: Chọn chế độ cho
project Chọn cách lưu trữ dữ liệu trên Firebase.
Hình 1.29: Chọn chế độ lưu trữ dữ liệu
Hình 1.30: Giao diện cơ sở dữ liệu trên Firebase
CHƯƠNG 2: THIẾT KẾ HỆ THỐNG 2.1 Phân tích hệ thống
2.1.1 Yêu cầu thiết kế
Hệ thống được thiết kế với các yêu cầu:
Có thể đóng mở cửa tiện lợi, dễ dàng hơn chìa khóa thông thường nhưng vẫn đảm bảo an toàn.
Có thể giám sát, báo động khi có người lạ đột nhập hoặc cháy nổ xảy ra.
Chủ nhà có thể nhận được thông tin báo động có sự đột nhập trái ý hoặc cháy nổ khi không có mặt tại nhà để có thể xử lý kịp thời các tình huống.
Hệ thống có thể hoạt động ổn định.
2.1.2 Đặc tả hệ thống
Dựa vào những yêu cầu, hệ thống phải đáp ứng được các chức năng: Khóa mở cửa bằng cách sử dụng thẻ RFID hoặc mật khẩu.
Phát hiện cháy nổ. Phát hiện người lạ đột nhập.
Báo động bằng loa khi có sự đột nhập trái phép hoặc khi có cháy nổ xảy ra.
Thực hiện cuộc gọi khẩn cấp, tin nhắn SMS từ hệ thống khi phát hiện có cháy, trộm.
Một giao diện website đơn giản để có thể theo dõi, điều khiển hệ thống.
Cấp nguồn điện dự phòng cho hệ thống hoạt động liên tục khi có sự cố mất điện xảy ra.
2.2 Thiết kế sơ lược
Hình 2.1: Sơ đồ khối hệ thống
Chức năng từng khối:
Khối hiển thị: kết nối nhận dữ liệu từ khối xử lý trung tâm để hiển thị cho người dùng.
Khối nhập dữ liệu đóng/mở cửa: kết nối khối xử lý trung tâm để truyền nhận dữ liệu.
Khối đóng/mở cửa: thực hiện chức năng đóng mở cửa.
Khối cảm biến: thu thập các thông tin dữ liệu cảm biển và truyền về khối xử lý trung tâm.
Khối thực hiện sms/gọi: thực hiện chức năng gửi sms hoặc gọi đến người dùng. Khối báo động: thực hiện chức năng phát ra âm thanh cảnh báo khi cần.
Khối xử lý trung tâm: là nơi xử lý chính của hệ thống và được kết nối tới tất cả các khối khác để truyền nhận dữ liệu, xử lý điều khiển toàn bộ hệ thống hoạt động.
Khối nguồn: cung cấp nguồn điện cho toàn bộ các khối còn lại của hệ thống hoạt động và duy trì nguồn điện liên tục cho hệ thống.
2.2.2 Mô tả hệ thống
Khối nhập dữ liệu để kiểm tra đóng/mở cửa sẽ tiến hành lấy thông tin và đưa về khối xử lý trung tâm để kiểm tra điều kiện để đóng/mở cửa nếu đúng thẻ đã đăng ký hay nhập đúng mã số thì cho khối đóng/mở cửa thực hiện.
Giao diện nhập mật khẩu sẽ hiển thị qua LCD của khối hiển thị.
Nếu chủ nhà bật chế độ cảnh báo đột nhập thì khối cảm biến cho phép cảm biến chuyển động phát hiện người lạ hoặc cảm biến cháy nổ phát hiện lửa thì khối báo động sẽ tiến hành bật loa và khối thực hiện sms/gọi sẽ nhắn tin, gọi điện để cảnh báo cho chủ nhà.
Hệ thống sử dụng mạng internet để cập nhật trạng thái các thiết bị và cập nhật lại danh sách thẻ RFID qua firebase.
Chủ nhà có thể bật chế độ cảnh báo đột nhập, tắt mở loa báo động, thay đổi mật khẩu thông qua trang web.
Nếu trong trường hợp mất internet hệ thống vẫn có thể hoạt động báo động bình thường qua loa và nhắn tin, gọi điện, mở cửa bằng các thẻ RFID được cập nhật ở lần gần nhất hoặc bằng mật khẩu mặc định.
Bình thường sẽ dùng nguồn điện lấy từ nguồn điện trong nhà, khi cúp điện thì sẽ chuyển sang sử dụng nguồn dự phòng.
2.3 Thiết kế chi tiết từng khối 2.3.1 Khối hiển thị
Sử dụng màn hình LCD 20x4 hiển thị thông tin mật khẩu khi nhập bằng keypad 4x4 để mở cửa nhà, trong trường hợp không sử dụng thẻ từ RFID.
Để dễ dàng giao tiếp với khối xử lý trung tâm, nhóm thực hiện giao tiếp LCD thông qua module I2C LCD. Kết nối 16 chân LCD với 16 chân của module I2C LCD theo đúng các thứ tự từ VSS đến LED-.
Module I2C LCD giao tiếp theo chuẩn I2C sẽ được kết nối các chân VCC, GND, SDA, SCL đến khối xử lý trung tâm.
2.3.2 Khối nhập dữ liệu đóng/mở cửa
Mở cửa bằng keypad 4x4: Bàn phím ma trận 4x4 được sử dụng để nhập mật khẩu mở cửa nhà trong trường hợp không sử dụng thẻ RFID.
Ở đề tài để giảm thiểu số lượng chân kết nối vào khối xử lý trung tâm nhóm đã dùng ADC để đọc giá trị phím nhấn. Kết nối keypad 4x4 với các điện trở theo hình dưới để đọc được giá trị điện trở cho từng nút nhấn.
Hình 2.2: Sơ đồ kết nối keypad 4x4 để đọc giá trị ADC
Bảng 2.1: Giá trị điện trở các nút nhấn (đơn vị Ω) Ký tự 0 1 2 3 4 5 6 7 8 9 A B C D * #
Mở cửa bằng RFID: Gồm module RFID RC522 được lắp đặt ngay cửa nhà có nhiệm vụ nhận dạng mã thẻ đúng, gửi về khối xử lý trung tâm. Nếu mã thẻ được đọc đúng sẽ mở cửa nhà.
Module RFID RC522 giao tiếp theo chuẩn SPI sẽ được kết nối các chân VCC, GND, SDA, SCK, MISO, MOSI đến khối xử lý trung tâm.
2.3.3 Khối đóng/mở cửa
Để mô phỏng hoạt động mở cửa cho mô hình trong đề tài này nhóm sử dụng động cơ RC servo 9G để xoay một góc để mở cửa. Servo sẽ gồm có ba chân kết nối VCC, GND, và chân PWM đến khối xử lý trung tâm.
2.3.4 Khối cảm biến
Gồm hai cảm biến được đặt vị trí trên trần cao để phát hiện chuyển động, phát hiện lửa gây cháy.
Cảm biến chuyển động PIR được kích hoạt hoạt động khi không có người ở nhà, khi cảm biến phát hiện có sự đột nhập sẽ báo động đến chủ nhà.
Nhóm sử dụng cảm biến chuyển động PIR HC-SR501 gồm ba chân VCC, GND, và Signal để đọc tín hiệu mức logic kết nối đến khối xử lý trung tâm.
Cảm biến lửa sẽ báo động khi phát hiện có lửa xảy ra. Module cảm biến này gồm có bốn chân kết nối VCC, GND, D0, A0.
D0 và A0 đều là hai chân đọc tín hiệu D0 là tín hiệu digital còn A0 là tín hiệu analog, nhóm chỉ sử dụng đọc tín hiệu chân D0 trong đề tài này. Vậy sẽ có ba chân kết nối đến khối xử lý trung tâm.
2.3.5 Khối thực hiện sms/gọi
Gồm module sim 800L thực hiện chức năng gọi hoặc nhắn tin tới số điện thoại người dùng khi xảy ra các trường hợp khẩn cấp. Để module Sim800L hoạt động được ổn định, cần điều chỉnh đúng mức điện áp mà nhà sản xuất đã yêu cầu cho module.
Module sim 800L giao tiếp theo chuẩn UART bao gồm bốn chân VCC, GND và RX, TX để truyền nhận dữ liệu theo chuẩn giao tiếp. Chú ý VCC cho module cần đúng điện áp theo hướng dẫn nhà sản xuất cho module.
2.3.6 Khối báo động
Nhóm sử dụng một còi buzzer 5V trong để tài như một loa báo động khi phát hiện cháy hoặc có người lạ đột nhập vào nhà.
Buzzer gồm hai chân VCC và GND kết nối đến khối xử lý trung tâm.
2.3.7 Khối xử lý trung tâm