5. Bố cục đề tài
3.2 Thiết kế hệ thống phần cứng
3.2.1 Thiết kế sơ đồ nguyên lý
Nguyên lý hoạt động:
- Khối xử lí gồm MCU ESP8266: điều khiển công tắc và gửi thông tin lên server qua giao tiếp MTQQ
Hình 17 Sơ đồ khối xử lý MCU ESP8266
- Khối nguồn gồm pin và module sạc: Cung cấp nguồn điện cho toàn mạch
Hình 18 Sơ đồ khối nguồn
- Rơ le 2 kênh điều khiển đèn và quạt: Rơ le để bật tắt đèn và quạt theo request ở các thiết bị smartphone
- Cảm biến hồng ngoại: Cảm biến hồng ngoại để phát hiện mức năng lượng cao khi có tia lửa.
Hình 20 Sơ đồ cảm biến hồng ngoại
- Cảm biến PIR: Cảm biến chuyển động để phát hiện thay đổi sóng hồng ngoại trong góc quét
Hình 21 Sơ đồ cảm biến chuyển động PIR
- Còi báo: Còi báo kêu khi phát hiện có lửa và trộm
3.2.2 Thiết kế mạch in
3.3 Thiết kế hệ thống phần mềm
3.3.1 Giới thiệu về phần mềm lập trình Arduino IDE
Để lập trình được cho các board Arduino, ta cần phải có một công cụ hỗ trợ để viết code gọi là Intergrated Development Environment (IDE). Công cụ này được đội ngũ kĩ sư của Arduino phát triển và có thể chạy trên Windows, MAC OS và Linux.
Code dựa trên ngôn ngữ C và C++ với các cú pháp code dễ hiểu dựa vào những từ khóa là tiếng Anh giúp công việc lập trình dễ dàng tiếp cận hơn. Bên cạnh đó, các module dành cho board mạch Arduino đều có thư viện hỗ trợ để có thể dễ dàng sử dụng. Hoặc ta có thể tự xây dựng một thư viện riêng phục vụ cho một dự án cụ thể của cá nhân
Một số chức năng cơ bản của Arduino IDE có thể liệt kê như kiểm tra code, upload code lên board mạch, set port kết nối và loại board mạch sử dụng, ngoài ra Arduino cũng có sẵn một thư viện tích hợp sẵn bên trong bao gồm những thư viện thường được sử dụng cho Arduino.
Hình 23 Giao diện làm việc của Arduino
Một chương trình hoạt động cơ bản của Arduino sẽ bao gồm hai phần chính là
setup () và loop ():
Setup () sẽ được chạy khi chương trình khởi động. Bạn có thể sử dụng nó để khai báo giá trị của biến, khai báo thư viện, thiết lập các thông số… Nó sẽ chạy một lần duy nhất sau khi bạn cấp nguồn cho Arduino, cho đến khi hệ thống reset lại thì Setup () mới được chạy lại
Loop () sẽ được chạy ngay sau Setup (), chúng sẽ lặp đi lặp lại liên tục cho tới khi ngắt nguồn cấp điện cho Arduino thì thôi.
Ngoài ra vẫn có các chương trình phục vụ ngắt làm ngắt loop () như các vi điều khiển bình thường.
Trong đồ án này chúng ta cần những thư viện phục vụ kết nối giữa Node và wifi, Firebase.
1. ESP8266WiFi.h 2. FirebaseArduino.h 3. ArduinoJson.
Giao diện của Arduino IDE gồm 3 phần chính:
Vùng lệnh: Bao gồm thanh các tab menu và thanh các icon cho phép sử dụng nhanh các chức năng của IDE.
Vùng viết chương trình: Là nơi sẽ viết các đoạn mã chương trình tại đây.
Vùng thông báo: Những thông báo của IDE từ lỗi trong code hay upload code vào mạch thành công hay thất bại sẽ được hiển thị tại đây.
3.3.2 Giới thiệu chung về Proteus
Trong lĩnh vực khoa học công nghệ ngày càng phát triển không ngừng ngành tin học nói chung đã có mặt hầu như trong tất cả các ngành nghề từ đơn giản đến phức tạp. Công nghệ tin học đã giúp ích không nhỏ vào công việc giảng dạy và mang lại nhiều kết quả không nhỏ. Proteus VSM (Virtual Simulation Microprocessor) là chương trình tạo và chạy các mạch điện ,các mạch có vi xử lý và mô phỏng quá trình làm việc của mạch nguyên lý, giúp cho người học điện tử hình dung trực quan hơn vào thực tế của các linh kiện điện tử.
Phần mềm Proteus VSM được viết bởi công ty Labcenter Electronics.
Proteus đã được sử dụng khá rộng rãi trên 35 quốc gia. Proteus đã tự khẳng định thế mạnh của nó về mô phỏng các mạch nguyên lý sát với thực tế, trên 12 năm càng ngày nó càng được hoàn thiện và phát triển mạnh. Proteus cung cấp cho người sử dụng hầu như toàn bộ các linh kiện điện tử để người dùng có thể tạo ra được các mạch nguyên lý và sau cùng là chạy thử và so sánh với kết quả thực tế.Chính vì Proteus có thể tạo và chạy được các mạch đơn giản cũng như các mạch phức tạp nên có thể dùng nó trong giảng dạy, trong các phòng thí nhiệm điện tử cũng như trong thực hành vi xử lý ...
Phần mềm Proteus chạy trong môi trường Window 32 bit , yêu cầu của nó phần cứng cũng đơn giản CPU 300MHZ trở lên.
3.3.2.1 Các chức năng cơ bản của Proteusa) Các ưu điểm a) Các ưu điểm
Dễ dàng tạo ra một sơ đồ nguyên lý đơn giản từ các mạch điện đơn giản, đến các mạch có bộ lập trình vi xử lý .
Dễ dàng chỉnh sửa các đặc tính của linh kiện hên sơ đồ nguyên lý: chỉnh sửa số bước của động cơ bước, chỉnh sửa nguồn nuôi cho mạch,thay đổi tần số hoạt động cơ bản của vi xử lý...
Công cụ hỗ trợ kiểm tra lổi thiết kế trên sơ đồ nguyên lý. Xem và lưu lại phần báo lỗi.
Chạy mô phỏng và phân tích các tính chất của mạch điện cơ bản. Công cụ hỗ trợ cho việc chạy và mô phỏng rất mạnh và chính xác. Các công cụ và đồ thị hỗ trợ mạnh cho việc phân tích tần số, sóng, âm thanh,... không nhưng thế phần mềm còn có thêm các máy phân tích từ đơn giản như: đồng hồ đo Vôn, Ampe, đến các máy đo dao động,mấy tạo sóng dao động ...
Ngoài ra Proteus còn cung cấp cho người sử dụng các công cụ mạnh mà các phần mềm khác hầu như không có. Chẳng hạn thư viện LED với các loại màu sắc khác nhau kể cả led 7 đoạn. Nhưng phần hiển thị mạnh nhất mà Proteus cung cấp là LCD, nó có thể mô phỏng cho rất nhiều LCD từ đơn giản đến phức tạp.
Một cái ưu điểm nữa của Proteus là có thể mô phỏng công cụ phát và thu tín hiệu từ các mạch giao tiếp với máy tính qua công cụ RS232. Trong đó người sử dung có thể điếu khiển được quá trình truyền phát, tốc độ Baud ... giúp cho người lập trình có thể mô phỏng các mặt truyền phát tín hiệu.
Một điểm mạnh khác của Proteus là cung cấp cho người sử dụng công cụ biên dịch cho các họ vi xử lý như MSC51, AVR ,HC11,... Qua đó tạo ra các tập tin HEX dùng để nạp cho vi xử lý và tập tin DSI dùng để xem và chạy kiểm tra từng bước trong chương trình mô phỏng.
Đối với các mạch vi xử lý Proteus không những cung cấp hình ảnh thực tế của các linh kiện xuất mà còn cung cấp cho người lập trình rất nhiều các cửa sổ thông báo các nội dung của bộ nhớ, con trỏ, thanh ghi,...
Proteus có một thư viện khá lớn với hơn 6000 linh kiện các loại và càng ngày càng được bổ sung. Ngoài ra còn có keypad (ma trận phím tạo đơn giản cho người thiết kế khi cần thao tác trên các ma trận phím).
b) Khả năng ứng dụng :
Khả năng ứng dụng chính của Proteus là mô phỏng , phân tích các kết quả từ các mạch nguyên lý. Proteus giúp cho người sử dụng có thể thấy trước mạch thiết kế chạy đúng hay sai trước khi thiết kế trên bo mạch.
Các công cụ phục vụ cho việc phân tích mạch có độ chính xác khá cao như đo vôn hay ampe, máy đo dao động.
Khả năng áp dụng chương trình Proteus vào trong giảng dạy là rất tốt cho các thầy cũng như cho sinh viên học tập kỹ thuật điện tử vì hầu như Proteus cung cấp gần như đầy đủ từ cơ bản đến phức tạp cho người học điện tử và vi xử lý.
Đối với các sinh viên thì Proteus nếu mà được sử dụng rộng dãi thì nó gần như là thầy dạy cho chính họ ở nhà. Nó giúp cho các sinh viên tự học, tự nhiên cứu và thiết kế thử các phần đã học và chạy xem kết quả và rút ra các bài học tốt. Điều cơ bản nhất là tiết kiệm tiền cho sinh viên không có điều kiện mà lại ham học, ham nghiên cứu.
Trong thực tế hiện nay hầu như phòng thí nhiệm điện tử nào xây dựng lên cũng phải tốn không ít ngân sách. Nếu Proteus được ứng dụng qua một máy tính các thầy có thể cung cấp cho sinh viên hầu như toàn bộ các mạch điện đơn giản,hơn nữa có thể tạo ra các KIT vi xử lý dùng phục vụ cho việc thực hành vi xử lý.Qua đó các thầy có thể cung cấp cho các sinh viên các mạch điện tử phục vụ trong quá trình học tập từ đó sinh viên có thể tự nguyên cứu các bài thực hành trước ở nhà trước khi thực hành thực tế trên mô hình thật sự và kết quả chắc chắn không nhỏ.
c) Khả năng phân tích
Phân tích một mạch đơn giản. Phân tích các mạch cấc họ vi xử lý.
Phân tích mạch qua các đồ thị, các máy đo ví dụ: o Phân tích Analogue
o Phân tích Digital o Phân tích tần số o Phân tích âm thanh
o Phân tích truyền phát dữ liệu.
Nhiều và còn rất nhiều phương pháp phân tích từ đơn giản nhất đến khả năng phân tích phức tạp mà ngoài thực tế khi cần phân tích nó thì cần rất nhiều chi phí cũng như công cụ sử dụng.
Phân tích quá tải, quá ấp , đủ tải ... Proteus cung cấp cho người sử dụng khả năng phân tích quá tải giúp người sử dụng hình dung được khi quá tải thì ảnh hưởng đến các linh kiện như thế nào mà không phải mất chi phí cũng như an toàn tuyệt đối. Lưu lại các kết quả phân tích.
d) Nhược điểm
Phần mềm nào cũng có nhược điểm của nó do đó Proteus cũng không tránh khỏi các nhược điểm:
Phần mềm do công ty của nước ngoài nên tính chất bản quyền khá cao, và hầu như ít được biết đến nên rất khó kiếm ngoài thực tế.
Trong khi thiết kế có nhiều phần trong Proteus chạy không theo một quy tắc nào làm người sử dụng đôi lúc gặp khó khăn.
Sử dụng khá phức tạp nhất là đối với cấc mạch vi xử lý hay cấc mạch cần chỉnh sửa cấc tính chất các linh kiện (do quá nhiều tính chất phải điều chỉnh).
Phần mềm do công ty nước ngoài viết nên không có tài liệu nào cung cấp hay hướng dẫn sử dụng.
Hướng đẫn sử dụng trong Proteus hoàn toàn bằng tiếng anh nên đòi hỏi người sử dụng cũng phải có một nền tảng tiếng anh cơ bản nếu muốn sử dụng nó một cách hiệu quả ( nhất là tiếng anh chuyên ngành điện tử).
3.3.3 Thiết kế lưu đồ thuật toán
Hình 24 Lưu đồ thuật toán
Lưu đồ thuật toán thực hiện qua các bước sau :
Bước 2: Hệ thống kết nối với máy chủ bằng giao thức MTTQ
Bước 3: Hệ thống khởi tạo các chân chức năng của vi điều khiển
Bước 4: Hệ thống chạy vòng lặp kiểm tra cảm biến tia lửa và cảm biến chuyển động nếu cảm biến ở trạng thái cao Vi điều khiển sẽ gửi lệnh tới máy chủ để gửi thông báo cho điện thoại
Bước 5: Hệ thống chạy vòng lặp kiểm tra trạng thái của các công tắc ảo trên máy chủ nếu điện thoại kích hoạt công tắc Vi điều khiển sẽ nâng mức logic của các chân I/O tương ứng để bật đèn và quạt
3.3.4 Giao diện phần mềm điều khiển nhà thông minh
Hình 25 Giao diện phần mềm điều khiển
3.5 Kết quả sản phẩm
Hình 27 Hình ảnh thực tế của sản phẩm
3.6 Đánh giá kết luận
Kết thúc chương 3, em đã thiết kế chi tiết phần cứng và phần mềm của sản phẩm. Hoàn thiện sản phẩm và thử nghiệm đẩy đủ các tính năng cần thiết.
KẾT LUẬN
Sau thời gian nghiên cứu và tìm hiểu, em đã có thể hiểu phân tích hệ thống điều khiển và giám sát nhà thông minh qua Internet. Dựa vào phân tích đó, em đã hiểu được các module cần thiết và sau đó là xây dựng được hệ thống có khả năng phát hiện được hành vi khả nghi, báo cháy, bật/tắt thiết bị hiệu quả. Bên cạnh những kết quả làm được, em vẫn còn một số vấn đề chưa giải quyết được như: Hệ thống hoạt động vẫn còn chậm, chưa đáp ứng được tốc độ xử lý cao để phù hợp nhu cầu sử dụng của các gia đình.
Hướng phát triển: Nghiên cứu này hoàn toàn có thể đưa vòa ứng dụng trong thực tết nếu nó được tích hợp với các module khác của một hệ thống. Và nghiên cứu thêm một số phương pháp cải tiến quá trình xử lý nhanh hơn, ngoài ra có thể sử dụng thêm camera để nhận diện hành vi, phát hiện khuôn mặt dễ dàng hơn cho quá trình xử lý thông minh.
Mặc dù đã cố gắng trong quá trình thực hiện đề tài này nhưng kiến thức còn hạn chế nên em không tránh khỏi những thiếu sót nhất định. Em rất mong nhận được sự thông cảm cũng như những ý kiến đóng góp từ thầy dể em cải thiện và tiến bộ hơn nữa.
TÀI LIỆU THAM KHẢO
1. Các tài liệu tham khảo của giáo viên hướng dẫn, thầy Bùi Hải Đăng. 2. Các website: 2.1. http://arduino.cc/ 2.2. https://www.youtube.com/ 2.3. https://github.com/ 2.4.h ttps://luanvan.net 2.5.https : //doantotnghiep.vn 2.6.https: //123doc.org 2.7.https: //vietnammartch.com.vn
PHỤ LỤC
#define BLYNK_PRINT Serial //Khởi tạo màn hình debug #include <ESP8266WiFi.h> //Truy cập thư viện kết nối wifi #include <BlynkSimpleEsp8266.h> // Truy cập thư viện MQTT BlynkTimer timer; //Khởi tạo hàm chờ
char auth[] = " ASAE6MkilWX63J3U4p_DpsnKAcKthwxn"; //Key đồng bộ server char ssid[] = "TP-Link_PH7"; //Tên Wifi
char pass[] = "Audioteam@2019"; //Mật khẩu Wifi int dem=0;//Khởi tạo biến đếm cho chức năng báo cháy int coi=0;
//Thực thi hàm báo cháy void baochay(){
int fireSensor = digitalRead(12);//Đọc giá trị cảm biến // Thực thi hàm logic báo cháy
if (fireSensor==0 && dem ==0 ) {
Serial.println("Phát hiện lửa"); //Hiển thị kí tự trên màn hình debug
Blynk.notify("Khẩn cấp: Phát hiện lửa trong nhà"); //gửi thông báo tới server dem=1; coi=1; } else if (fireSensor=!0) { coi=0; dem=0; } } //Thực thi hàm báo trộm void baotrom(){
int motionSensor = digitalRead(4);//Đọc giá trị cảm biến if (motionSensor == 1){
Serial.println("Phát hiện trộm"); //Hiển thị kí tự trên màn hình debug
Blynk.notify("Khẩn cấp: Phát hiện chuyển động bất thường trong nhà"); //Gửi thông báo tới server
coi=1; }
else if (motionSensor =!1) coi=0; } void coibao(){ if (coi==1){ digitalWrite(13,LOW); } else digitalWrite(13,HIGH); }
//Thực hiện cấu hình các chân cảm biến và kết nối tới server void setup(){ Serial.begin(9600); pinMode(12,OUTPUT); pinMode(12,INPUT); pinMode(4,INPUT); pinMode(2,OUTPUT); pinMode(16,OUTPUT); Blynk.begin(auth, ssid, pass); timer.setInterval(1000L,baochay); timer.setInterval(2000L,baotrom); timer.setInterval(10000L,coibao); digitalWrite(2,HIGH); //tat role digitalWrite(16,HIGH); //tat role }
void loop(){ Blynk.run(); timer.run(); }