Professional Documents
Culture Documents
TỔNG QUAN
1.5 BỐ CỤC
Chƣơng 1: Tổng quan
Chƣơng 2: Cơ sở lý thyết
Chƣơng 3: Thiết kế và tính toán
Chƣơng 4: Thi công hệ thống
Chƣơng 5: Két quả, đánh giá và nhận xét
Chƣơng 6: Kết luận và hƣớng phát triển
- Chƣơng 1: Tổng quan
Chƣơng này đặt vấn đề, 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 các lý thuyết nền tảng để dựa trên lý thuyết này thực
hiện đồ án.
- Chƣơng 3: Thiết kế và tính toán
Chƣơng này trình bày tính toán thiết kế phần cứng mạch điện và phần mềm
chạy trên điện thoại thông minh sử dụng hệ điều hành Android.
- Chƣơng 4: Thi công hệ thống
Chƣơng này trình bày về thi công hệ thống: thi công mô hình, lập trình hệ
thống, lập trình mô phỏng và viết tài liệu hƣớng dẫn lập trình thao tác.
Hình 2.1. Trao đổi dữ liệu giữa FIREBASE với các thiết bị
2.3.2 Lịch sử phát triển
Firebase đƣợc thành lập bởi Tamplin và Lee . Hai nhà sáng lập này đã dựa vào
một dịch vụ API chat trực tuyến vào trang web đƣợc cung cấp bởi Envolve, các nhà
phát triển sử dụng Envolve để đồng bộ hóa dữ liệu các trạng thái trò chơi trong thời
gian thực lên trang web. Dựa vào yếu tố này Tamplin và Lee đã quyết định tách
riêng hệ thống chat và kiến trúc thời gian thực để thành lập một cơ sở dữ liệu
firebasse riêng biệt vào tháng 4 năm 2012. Vào ngày 21 tháng 10 năm 2014 Google
đã mua lại Firebase.
Hình 2.2. Các phiên bản hệ điều hành Android qua các lần nâng cấp
2.4.3 Ƣu nhƣợc điểm của hệ điều hành Android [1]
a. Ưu điểm
- Thân thiện dễ sử dụng với ngƣời dùng.
- Khả năng đa nhiệm chạy cùng lúc nhiều ứng dụng.
- Đa dạng nhiều sản phẩm phù hợp hầu hết các thiết bị điện thoại và
máy tính bảng.
- Kho ứng dụng Google Play có rất nhiều ứng dụng hay mà ngƣời
dùng có thể lựa chọn tải về sử dụng.
- Là hệ điều hành có khả năng tùy biến cao ngƣời dùng có thể chỉnh
sữa mà không có sự cấm cản từ nhà sản xuất.
b. Nhược điểm
- Không tự động cập nhật hệ điều hành với tất cả thiết bị, khi một hệ
điều hành mới ra mắt ngƣời dùng có thể không cập nhật đƣợc mà
phải mua một thiết bị khác có hệ điều hành đó.
- Khó kiểm soát chất lƣợng ứng dụng khi quá nhiều ứng dụng đƣợc
tải lên.
- Dễ nhiễm mã độc gây hại thiết bị do tính chất nguồn mở nên không
có sự kiểm soát.
- Sự phân cấp chất lƣợng sản phẩm lớn khi nhiều sản phẩm nổi tiếng
chất lƣợng nhƣ: Galaxy S10, Galaxy Note 9…, vẫn còn rất nhiều
sản phẩm giá rẻ bình thƣờng khác.
- Phần cứng
Phần cứng của đề tài đƣợc xây dựng gồm 2 phần: Phần cứng của mạch
giám sát nhiệt độ, độ ẩm và chuyển động và phần cứng mạch điều khiển độ
sáng đèn.
Đối với phần cứng của mạch giám sát nhiệt độ, độ ẩm và chuyển động thì
phải đo đƣợc nhiệt độ, độ ẩm và giám sát chuyển động khi đƣợc ngƣời dùng
kích hoạt. Báo động khi nhiệt độ vƣợt ngƣỡng cho phép hoặc phát hiện chuyển
động. Mạch có kích thƣớc nhỏ gọn.
Đối với phần cứng của mạch điều khiển độ sáng đèn thì có thể điều khiển
đƣợc độ sáng. Mạch điều khiển có kích thƣớc nhỏ gọn phù hợp với không gian
đèn.
- Phần mềm
Phần mềm đƣợc xây dựng chạy trên nền tảng Android phiên bản 5.1 trở lên,
kích thƣớc màn hình 5.1 inch, độ phân giải 1440 x 2560 pixel hoặc lớn hơn.
Phần mềm xây dựng gồm 3 Activity gồm: Giao diện điều khiển và hiển thị
trạng thái các thiết bị đèn, giao diện hiển thị giá trị nhiệt độ, độ ẩm, cảnh báo
trộm, giao diện điều khiển hẹn giờ bật, tắt các thiết bị.
- Cơ sở dữ liệu
Lƣu trữ dữ liệu mà các thiết bị thu thập và đƣa lên, từ đó các thiết bị có thể đọc
về hoặc điện thoại có thể lấy về để hiển thị lên app ngƣời dùng.
Sau khi các thiết bị đã kết nối thành công với Wifi, việc điều khiển thiết bị sẽ
thông qua điện thoại bằng 2 cách.
Hình 3.2 Sơ đồ khối hệ thống điều khiển đèn bulb chiếu sáng
d. Chức năng từng khối
- Khối nguồn công suất
Đây là nguồn có sẵn của đèn nguồn này cung cấp điện áp cho khối công
suất và cho đèn hoạt động.
- Khối nguồn điều khiển
Đây là nguồn xung nhỏ gọn điện áp ngõ ra 5VDC dòng khoảng 700mA
cung cấp nguồn cho mạch xử lý trung tâm (ESP8266 ESP-12E NodeMCU)
3.2.3. Thiết kế sơ đồ khối mạch giám sát nhiệt độ, độ ẩm và chuyển động
a. Yêu cầu
b . Phƣơng án thiết kế
- Chọn ESP8266 ESP-12E làm vi điều khiển trung tâm để giao tiếp với các
cảm biến và xử lí tín hiệu. Kết nối Wifi để đƣa dữ liệu lên cơ sỏ dữ liệu.
- Dùng cảm biến DHT11 để đo nhiệt độ, độ ẩm và cảm biến PIR AM312 để
phát hiện chuyển động.
- Dùng Buzzer để báo động.
Hình 3.3 Sơ đồ khối mạch giám sát nhiệt độ, độ ẩm và chuyển động
d. Chức năng từng khối
- Khối nguồn điều khiển
Đây là nguồn xung nhỏ gọn điện áp ngõ ra 5VDC dòng khoảng 700mA cung
cấp nguồn cho toàn mạch.
- Khối cơ sở dữ liệu
Đây là nơi lƣu trữ dữ liệu giữa khối xử lý trung tâm và khối thực thi điều
khiển và hiển thị.
Dùng cảm biến DHT11 đo nhiệt độ, độ ẩm và cảm biến PIR AM312 giám sát
chuyển động, sau đó gửi dữ liệu đến khối xử lí trung tâm.
Dùng buzzer báo động khi phát hiện chuyển động hoặc nhiệt độ tăng cao vƣợt
ngƣỡng cho phép.
- Khối thực thi điều khiển và hiển thị
Đây là ứng dụng đƣợc viết trên điện thoại hệ điều hành android dùng để gửi
dữ liệu lên cơ sở dữ liệu và lấy dữ liệu về để hiển thị.
Bảng 3.1. Bảng tiêu thụ dòng ở các chế độ khác nhau của ESP8266 NodeMCU
Dựa vào bảng tiêu thụ dòng của ESP8266 ở các chế độ khác nhau, để
ESP8266 hoạt động tốt trong những chế độ đó thì dòng tiêu thụ phải lớn hơn
170mA cho nên nhóm chúng em chọn dòng tiêu thụ ESP8266 là 300mA để đảm
bảo ESP8266 hoạt động tốt ở mọi chế độ tránh trƣờng hợp thiếu dòng hay sụt áp sẽ
Để ngõ ra nguồn 3.3 VDC ổn định và phẳng hơn nhóm em sử dụng tụ phân
cực 100uF lọc nguồn bởi vì để ESP8266 hoạt động theo chế độ pwm khi không
truyền nhận dữ liệu nhƣng vẫn duy trì kết nối để tiết kiệm năng lƣợng thì ESP8266
sẽ chạy ở chế độ Modem-sleep với dòng tiêu thụ 15mA. Ta có thông số sau:
= = = 220Ω (3.3)
Do các đƣờng truyền dữ liệu ở mạch nạp CP2102 có ngõ ra điện áp 5 VDC vì
vậy để an toàn cho ESP8266 phải chắn diode zener 3.3VDC. Để hạn chế dòng cao
chạy thẳng vào ESP8266 ở các đƣờng truyền dữ liệu phải đƣợc nối tiếp với trở
1.8K.
Sử dụng trở 1.8k bởi vì theo datasheet ở chế Standby dòng tiêu thụ khoảng
0.9mA để đảm bảo an toàn và tiết kiệm năng lƣợng trong quá trình nạp chƣơng
trình.
Hình 3.4 Sơ đồ nguyên lý mạch xử lí trung tâm điều khiển đèn bulb
chiếu sáng
Trong đó, chân xuất PWM của ESP để điều khiển là chân D1 (GPIO5).
Hình 3.5 Sơ đồ nguyên lý mạch xử lí trung tâm giám sát nhiệt độ, độ
ẩm và chuyển động
Trong đó, chân D5 (GPIO14) kết nối đến chân 1 của opto trong khối
báo động, chân D7 ( GPIO13) kết nối đến chân 1 của opto trong mạch kết
nối cảm biến PIR AM312, chân D1 (GPIO5) kết nối đến jump kết nối led
ngủ, chân D2 ( GPIO4) kết nối với chân data trong mạch kết nối cảm biến
PIR, chân D4 (GPIO2) kết nối chân data của cảm biến DHT11.
Do khối xử lí trung tâm xuất xung với tần số 1khz nên ta có chu kì xung T =
1ms, với chu kì này thì opto PC817 vẫn đáp ứng đƣợc.
Chúng em chọn opto PC817 vì để đảm bảo cách ly về điện giữa khối công suất
và khối xử lý trung tâm và opto vẫn hoạt động tốt với áp và dòng điện trong
mạch. Ta có: dòng lớn nhất mà ESP xuất ra là Imax = 12mA,điện áp mức cao do
ESP xuất ra là 0.8xVdd = 0.8x3.3= 2.64V, điện áp cho phép đặt vào diode
quang của opto VF từ 1.2-1.4V. Do đó ta chọn điện trở:
Chúng em chọn Mosfet IRF830 vì nó có điện áp đánh thủng là 500V, dòng tải
tối đa là 5.9A, công suất 125W. Trong khi đó điện áp đặt vào đèn tối đa là
109,7 VDC, dòng tiêu thụ tối đa của đèn là 266,6 mA, công suất 30W. Do đó
Mosfet này đáp ứng đƣợc, không bị nóng.
Đây là nguồn sẵn có của bóng đèn. Sau khi đo điện áp ngõ ra khi không có
tải là 210VDC, với điện áp ngõ vào là 220VAC.
Đối với mạch điều khiển độ sáng đèn bulb thì dòng tiêu thụ tối đa của mạch
xử lý trung tâm (ESP8266 ESP-12E NodeMCU) là: ESP8266 ESP-12E
NodeMCU là 170mA + led báo là 10mA + opto PC817 là 50mA và thêm một số
linh kiện điện tử khác (điện trở, tụ điện). Vậy dòng tổng của khối xử lý trung tâm
này khoảng 300mA.
Đối với mạch giám sát nhiệt độ, độ ẩm và chuyển động thì dòng tiêu thụ tối đa
của mạch xử lý trung tâm (ESP8266 ESP-12E NodeMCU) là: ESP8266 ESP-12E
NodeMCU là 170mA + led báo là 10mA + opto PC817 là 50mA + DHT11 là
2.5mA + PIR AM312 là 0.1mA và thêm một số linh kiện điện tử khác (điện trở, tụ
điện). Vậy dòng tổng của khối xử lý trung tâm này khoảng 300mA.
Dựa vào các thông số dòng tiêu thụ của hai mạch xử lý trung tâm trên thì ta cần
phải có nguồn với điện áp ngõ ra +5VDC và dòng phải lớn hơn 300mA. Xét các
yếu tố kết hợp với yêu cầu mạch nguồn phải nhỏ gọn mà dòng thì lớn hơn 300mA
thì nhóm chúng em thấy trên thị trƣờng có bán một mạch nguồn đáp ứng đƣợc các
yêu cầu trên giá thành lại hợp lý nên nhóm chúng em chọn mua mạch nguồn loại
này.
Thông số kỹ thuật
- Mạch rất thích hợp cho các hệ thống tiêu thụ điện năng thấp ,nhỏ gọn, an
toàn.
- Điện áp ngõ vào : 90VAC – 230VAC
- Dòng ngõ vào : 14mA ( 220VAC)
- Điện áp ngõ ra : 5VDC
- Dòng ngõ ra : 0 – 700mA, maximum lên đến 750mA.
- Hiệu suất : 80%.
- Độ gợn sóng ( răng cƣa) : 6%
e. Khối cảm biến
Dùng cảm biến DHT11 để đo nhiệt độ, độ ẩm môi trƣờng xung quanh , 2 chân
nguồn kết nối với 5V và GND của mạch, chân DATA kết nối với chân GPIO 2 của
ESP8266 ESP-12E NodeMCU.
Mạch thiết kế để điều khiển nguồn vào cho cảm biến PIR, bật tắt nguồn khi
ngƣời dùng yêu cầu. Điện áp ra 1 chân GPIO của ESP8266 ESP-12E NodeMCU là
3.3V nên ta phải dùng thêm opto PC817 để cấp nguồn 5V cho PIR . Chân DATA
kết nối với GPIO 4 của ESP8266 ESP-12E NodeMCU.
Trên mạch có led báo nguồn khi bật với điện trở hạn dòng
Chúng em chọn opto PC817 vì để đảm bảo cách ly về điện giữa khối công suất
và khối xử lý trung tâm và opto vẫn hoạt động tốt với áp và dòng điện trong mạch.
Ta có: dòng lớn nhất mà ESP xuất ra là Imax = 12mA,điện áp mức cao do ESP xuất
ra là 0.8xVdd = 0.8x3.3= 2.64V, điện áp cho phép đặt vào diode quang của opto
VF từ 1.2-1.4V. Do đó ta chọn điện trở:
Điện áp hoạt động của Buzzer là 5V, trong khi điện áp ra của ESP8266 ESP-12E
NodeMCU chỉ đƣợc 3.3V, do đó ta cần dùng thêm opto PC817 để cấp nguồn 5V
cho Buzzer. Chân xuất tín hiệu ra là GPIO14.
Chúng em chọn opto PC817 vì để đảm bảo cách ly về điện giữa khối công suất
và khối xử lý trung tâm và opto vẫn hoạt động tốt với áp và dòng điện trong mạch.
Ta có: dòng lớn nhất mà ESP xuất ra là Imax = 12mA,điện áp mức cao do ESP xuất
ra là 0.8xVdd = 0.8x3.3= 2.64V, điện áp cho phép đặt vào diode quang của opto
VF từ 1.2-1.4V. Do đó ta chọn điện trở:
Nhƣ sơ đồ bên dƣới IC AMS1117 tạo nguồn 3.3VDC cấp cho ESP8266
hoạt động. Mạch xử lý trung tâm ESP8266 cấp xung cho khối công suất để cấp mức
điện áp phù hợp vào chân G của Mosfet IRF830 cho phép mở cổng điều chỉnh độ
sáng đèn hoặc tắt mở đèn.
Hình 3.12 Sơ đồ nguyên lý toàn mạch điều khiển độ sáng đèn bulb
Đối với mạch giám sát nhiệt độ, độ ẩm và chuyển động, sơ đồ nguyên lý toàn
mạch bao gồm các khối chính: Khối xử lý trung tâm (ESP ESP8266 ESP-12E
NodeMCU), khối cảm biến, khối báo động.
Nhƣ sơ đồ bên dƣới IC AMS1117 tạo nguồn 3.3VDC cấp cho ESP8266
hoạt động, các khối còn lại sử dụng nguồn 5V.
Phần mềm thiết kế gồm 3 giao diện, giao diện chính sẽ hiển thị trạng thái
của đèn, độ sáng hiện tại của đèn. Ở giao diện này có thể điều khiển đƣợc đóng
mở đèn bằng các Switch, điều khiển đƣợc độ sáng bằng hai thanh SeekBar.
Giao diện thứ 2 hiển thị giá trị nhiệt độ, độ ẩm, hiển thị cảnh báo cháy, trộm
thông qua các hình ảnh giúp ngƣời dùng dễ dàng quan sát.
Giao diện thứ 3 dùng cài cài đặt thời gian bật và tắt các thiết bị.
Hình 3.14 Giao diện phần hiển thị và điều khiển độ sáng các đèn.
Giao diện phần mềm gồm 4 TextView hiển thị tên đèn, và độ sáng của đèn
giúp ngƣời dùng quản lý dễ dàng, 2 ImageView hiển thị trạng thái bật tắt của thiết
bị, 2 Switch điều khiển đóng mở thiết bị, 2 thanh seekBar dùng điều khiển độ sáng
của đèn. Ngoài ra bên trên góc phải của giao diện có sử dụng một Menu khởi tạo để
chuyển sang các giao diện khác. Khi ngƣời dùng nhấn vào Menu khởi tạo thì sẽ có
hai sự lựa chọn gồm: “Nhiệt độ” hoặc “ Hẹn giờ” nếu chọn vào Nhiệt độ thì sẽ xuất
hiện giao diện mới nhƣ sau:
Hình 3.15 Giao diện hiển thị nhiêt độ, độ ẩm, cảnh báo cháy, trộm.
Giao diện phần hiển thị nhiệt độ, độ ẩm, cánh báo cháy, trộm gồm 4
ImageView trong đó có hai ImageView sẽ hiển thị cố định hai icon (nhiệt độ và độ
ẩm), hai ImageView còn lại sẽ hiển thị cảnh báo cháy/trộm. Nếu App nhận đƣợc
dữ liệu về là an toàn thì sẽ hiển thị ảnh báo an toàn. Ngƣợc lại nếu giá trị nhận về
là không an toàn thì sẽ hiển thị ảnh cảnh báo giúp ngƣời dùng nhận biết đƣợc.
Ngoài ra giao diện còn sử dụng 4 TextView gồm: 2 TextView để hiển thị giá trị
của nhiệt độ, độ ẩm, hai TextView còn lại sẽ hiển thị cố định báo cháy và báo
trộm. Phía trên góc phải màn hình sử dụng một Menu khời tạo để chuyển trang các
giao diện khác. Khi ngƣời dùng nhấn vào thì sẽ hiển thị 2 lựa chọn ( Trạng thái
đèn và Hẹn giờ) nếu ngƣời dùng chọn vào “Hiển thị đèn” thì sẽ hiển thị giao diện
chính đầu tiên. Ngƣợc lại nếu ngƣời dùng chọn vào Hẹn giờ thì sẽ xuất hiện một
giao diện mới nhƣ sau:
Hình 3.16 Giao diện phần hẹn giờ bật/tắt các thiết bị.
Giao diện hiển thị hẹn giờ gồm 2 TexView để hiển thị tên giao diện và cái
còn lại để hiển thị thời gian hiện tại. Giao diện còn sử dụng 4 EditText để nhập
thời gian cần hẹn, khi chọn vào thì sẽ xuất hiện biểu tƣợng của một cái đồng hồ
giúp ta chọn thời gian dễ dàng hơn. Sau khi đã chọn thời gian bật/tắt thiết bị xong
ta sẽ nhấn vào các Button hẹn giờ 1 ( bật tắt đèn 1) hoặc Button hẹn giờ 2 ( bật tắt
đèn 2) lúc này các giá trị đó sẽ đƣợc đem so sánh với giờ hiện tại để thực thi việc
bật/ tắt đèn. Ngoài ra giao diện còn sử dụng thêm một Menu khởi tạo ở góc phải
màn hình, khi ta nhấn vào thì sẽ hiển thị hai lựa chọn ( Trạng thái đèn và Nhiệt độ)
giúp ta thay đổi giữa các giao diện.
Đối với mạch điều khiển độ sáng đèn bulb nhóm em vẽ mạch in 2 lớp PCB.
Hình 4.1 Sơ đồ mạch in lớp trên và dưới mạch điện điều khiển độ sáng đèn
bulb
Hình 4.2 Sơ đồ bố trí linh kiện mạch điều khiển độ sáng đèn bulb
c. Sơ đồ mạch in của mạch giám sát nhiệt độ, độ ẩm và chuyển động
Đối với mạch giám sát nhiệt độ, độ ẩm và chuyển động nhóm em vẽ mạch in 2
lớp PCB.
Hình 4.3 Sơ đồ mạch in lớp trên và dưới mạch giám sát nhiệt độ, độ ẩm và chuyển
động
Hình 4.4 Sơ đồ bố trí linh kiện mạch giám sát nhiệt độ, độ ẩm và chuyển động.
Bảng 4.1 Danh sách các linh kiện sử dụng
6 Điện trở 10k Ω Giá trị điện trở 11 Linh kiện dán,
10k Ω, công suất kích thƣớc 2mm x
1/8W 1.25mm
7 Điện trở 4k7 Ω Giá trị điện trở 9 Linh kiện dán, kích
4k7 Ω, công suất thƣớc 2mmx1.25mm
1/8W
8 ESP8266 ESP- Điện áp 3.0V – 3 Linh kiện dán 16mm x
12E NodeMCU 3.6 V 24mm x 3mm
Dòng tiệu thụ
trung bình 80mA
9 Opto PC817 Điện áp vào chân 4 Linh kiện xuyên lỗ,
1 không quá 6V, kích thƣớc 7.62mm x
điện áp qua chân 4 4.58mm x 3.5mm
không quá 35V,
dòng tiêu thụ
trung bình 50mA
10 Mosfet irf 830 Điện áp chịu đựng 2 Linh kiện xuyên lỗ
không quá 500V,
điện áp kích
không quá
20V,công suất
125W
11 Điện trở 220Ω Giá trị điện trở 4 Linh kiện dán
220, công suất kích thƣớc 2mm x
1/8W 1.25mm
12 Điện trở 100Ω Giá trị điện trở 4 Linh kiện dán
100, công suất kích thƣớc 2mm x
1/8W 1.25mm
13 Led xanh lá Điện áp hoạt 4 Linh kiện dán
kích thƣớc 2mm x
động từ 3.0V – 1.25mm
3.4 V, dòng
tiêu thụ 10mA
Mạch nguồn nguồn này cung cấp điện áp 5VDC và dòng điện ngõ ra tối đa là
700mA cho mạch điều khiển độ sáng đèn bulb và mạch giám sát nhiệt độ, độ ẩm và
chuyển động. Do mạch nguồn có ngõ ra 5VDC và mức dòng điện 700mA nên phù
hợp với các mạch này và kèm theo đó là tính ổn định có bảo vệ ngắn mạch, kích
thƣớc nhỏ phù hợp khoản không gian nhỏ bên trong vỏ đèn nên nhóm em đã chọn
Hình 4.7 Mặt trên và dưới của mạch điều khiển độ sáng đèn bulb sau khi hàn.
c. Lắp ráp mạch giám sát nhiệt độ, độ ẩm và chuyển động
Hình 4.8 Mặt trên và dưới mạch giám sát nhiệt độ, độ ẩm và chuyển động sau
khi hàn.
d. Kiểm tra toàn bộ mạch đã thi công
- Bƣớc 2: Kiểm tra đƣờng dây mạch liên kết các kinh kiện với nhau.
- Bƣớc 3: Cấp nguồn vào kiểm tra nguồn ở chân vào, chân ra của ic tạo nguồn,
nguồn vào ở các chân nguồn của vi điều khiển.
- Bƣớc 4: Nạp chƣơng trình cơ bản vào vi điều khiển và kiểm tra xem có hoạt
động tốt không.
- Bƣớc 5: Dùng vi điều khiển xuất xung cấp nguồn kiểm tra kích Mosfet để tắt
bật và chỉnh độ sáng tối đèn.
Mạch giám sát nhiệt độ, độ ẩm và chuyển động
- Bƣớc 1: Kiểm tra mối hàn chì ở những chân linh kiện với đƣờng mạch .
- Bƣớc 2: Kiểm tra đƣờng dây mạch liên kết các kinh kiện với nhau.
- Bƣớc 3: Cấp nguồn vào kiểm tra nguồn ở chân vào, chân ra của ic tạo nguồn,
nguồn vào ở các chân nguồn của vi điều khiển.
- Bƣớc 4: Nạp chƣơng trình cơ bản vào vi điều khiển và kiểm tra xem có hoạt
động tốt không.
- Bƣớc 5: Dùng vi điều khiển đọc nhiệt độ, độ ẩm và chuyển động từ cảm biến
-
Sau khi thực hiện các ƣớc kiểm tra trên thu đƣợc bảng kết quả sau:
Bảng 4.2. Bảng kết quả sau quá trình kiểm tra mạch điều khiển độ sáng đèn bulb.
Mạch công suất Sau khi cấp nguồn 210VDC cho mạch
công suất và cấp xung pwm cho mạch
nhận thấy rằng Mosfet đƣợc mở cổng đèn
sáng ổn định Mosfet không nóng.
Bảng 4.3. Bảng kết quả sau quá trình kiểm tra mạch giám sát nhiệt độ,độ ẩm và
chuyển động.
Đối tƣợng kiểm tra Kết quả
Các mối hàn Tiếp xúc tốt
Các đƣờng mạch Không xảy ra chạm đƣờng mạch
Nguồn Nguồn vào 5VDC, nguồn ra ở ic AMS1117
đúng 3.3V, nguồn vào ESP8266 đúng
3.3VDC.
Nguồn cấp cho các cảm biến đúng 5VDC.
Nhóm chúng em lắp ráp các mạch điện vào bên trong đèn thực hiện các
bƣớc sau:
- Bƣớc 1: Ghép khối nguồn công suất và khối nguồn điều khiển lại với nhau,
sau đó hàn ngõ vào 220VAC vào hai khối nguồn và hàn ngõ ra 5VDC của
khối nguồn điều khiển và ngõ ra 210VDC của khối nguồn công suất vào 2
đầu dây bus 2 tƣơng ứng để thuận tiện kết nối với mạch điều khiển.
- Bƣớc 1: Đục lỗ nắp hộp và gắn các led và cảm biến PIR lên.
Bắt đầu
S
Mạng wifi đã
được kết nối ?
Đ
Mạng wifi đã
được kết nối ?
S
Kết nối
Firebase lỗi ?
Kết thúc
Thực hiện chƣơng trình kết nối MQTT, sau đó đọc dữ liệu từ Adafruit_MQTT
và so sánh với các địa chỉ đăng kí MQTT, nếu đúng địa chỉ thì sẽ xử lí dữ liệu nhận
đƣợc để bật tắt thiết bị đèn, hoặc tăng giảm biến độ sáng và gửi lại giá trị độ sáng
lên Firebase.
Nếu kết nối với Firebase bị lỗi sẽ giữ nguyên giá trị PWM hiện tại. Sau đó đọc
giá trị độ sáng trên Firebase và so sánh với các giá trị từ 1 đến 10 để xuất ra PWM
tƣơng ứng.
4.4.2 Chƣơng trình cho mạch điều khiển độ sáng đèn bulb
Chƣơng trình nhóm chúng em viết cho mạch điều khiển độ sáng đèn bulb
gồm các tính năng nhƣ sau:
- Thứ 1: Các thiết bị đèn hoạt động độc lập với nhau, ngƣời dùng có thể tùy
chỉnh riêng biệt từng đèn trên app hoặc thông qua Google assistant.
- Thứ 2: Các thiết bị đèn có thể kết nối với mạng wifi bất kì, khi chƣa kết nối
đƣợc thì thiết bị đèn chuyển sang chế độ Access point (với tên wifi không
trùng lặp) để ngƣời dùng dùng điện thoại kết nối với đèn và truy cập địa
chỉ “192.168.4.1” để thiết lập wifi cho nó, sau khi thiết lập xong đèn sẽ
chuyển sang chế độ station để kết nối wifi mà ngƣời đã dùng thiết lập.
- Thứ 3: Khi đèn đang hoạt động mà wifi bị lỗi hoặc mất kết nối thì đèn vẫn
- Thứ 4: Các trạng thái của đèn ( sáng hoặc không sáng) sẽ đƣợc cập nhật lên
cơ sở dữ liệu và phần mềm điện thoại sẽ cập nhật đƣợc trạng thái thực tế để
giúp ngƣời dùng nhận biết.
- Thứ 5: Khi đèn hoạt động thì dữ liệu sẽ đƣợc cập nhật lên cơ sở dữ liệu và
khi không hoạt động thì sẽ không cập nhật dữ liệu lên cơ sở dữ liệu nhờ dữ
liệu này mà ứng dụng trên điện thoại sẽ phân tích và báo cho ngƣời dùng
biết thiết bị thực tế có đang hoạt động hay không.
- Thứ 6: Độ sáng đèn có thể thay đổi đƣợc dựa trên sự điều khiển của ngƣời
dùng thao tác trên phần mềm điều khiển trên điện thoại thông minh. Độ
sáng sẽ thay đổi tăng độ sáng tuyến tính hoặc giảm độ sáng tuyến tính để
mắt ngƣời sử dụng dễ thích nghi.
- Thứ 7: Đèn có thể bật tắt và thay đổi độ sáng bằng giọng nói thông qua trợ
lý ảo Google assistant mà không cần bật ứng dụng.
Do phần chƣơng trình bao gồm một số tính năng nên chƣơng trình nhiều dòng
lệnh và nhóm chúng em sẽ giải thích chƣơng trình chính của chƣơng trình lập trình
cho vi điều khiển ESP8266 ESP-12E NodeMCU trong mạch điều khiển độ sáng đèn
bulb.
Để tiến hành lập trình thì cần thêm các bộ thƣ viện để sử dụng các tính năng.
Thêm thƣ viện để thực hiện đƣợc các tính năng wifi của mạch vi điều khiển
ESP8266 ESP-12E NodeMCU.
#include <ESP8266WiFi.h>
Thêm thƣ viện để thực hiện viêc đọc ghi dữ liệu lên cơ sở dữ liệu thời gian thực
FIREBASE.
#include <FirebaseArduino.h>
Thêm thƣ viện để thực hiện viêc kết nối Adafruit_Mqtt để nhận dữ liệu điều
khiển bằng Google asstant .
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include <WiFiManager.h>
Để tạo kết nối với cơ sở dữ liệu thời gian thực cần có địa chỉ và mã cho ngƣời
phát triển , 2 thông tin này sẽ đƣợc gán vào 2 biến tƣơng ứng là FIREBASE_HOST,
FIREBASE_AUTH thông qua định nghĩa:
#define FIREBASE_AUTH
“HszRBsnMPCl1Yc05DeHtErXk7IhNoVk8KJ10swB1"
Để kết nối với Adfruit thì cần có các thông số sau: dịa chỉ sever kết nối, port
kết nối, tên tài khoản, mật khẩu với định nghĩa:
Để thực hiện việc điều khiển ta cần liên kết với các feed đƣợc tạo từ trƣớc trên
Adfruit.
WiFiClient client;
Định nghĩa chân tạo PWM và khởi tạo các biến lƣu giá trị
#define LEDpin D1
int8_t dosang1;
WiFiManager w;
w.autoConnect("light 1");
Serial.println("connected...");
Khởi tạo wifimanager, thực hiện tự động kết nối wifi, khi chƣa kết nối đƣợc
wifi thì tự chuyển sang chế Access point với tên wifi “light 1”, sau khi kết nối đƣợc
thì in ra “connected”.
mqtt.subscribe(&ds1);
mqtt.subscribe(&dsmax);
mqtt.subscribe(&light);
Thực hiện đăng kí Mqtt cho các địa chỉ trên.
Thực hiện kết nối Firebase và gửi giá trị „1‟ theo đƣờng dẫn “/den1” qua 2
dòng lệnh:
Firebase.begin(FIREBASE_HOST,FIREBASE_AUTH);
Firebase.setInt("/den1", 1);
Gọi hàm MQTT_connect (); để kết nối với MQTT của Adafruit.
Adafruit_MQTT_Subscribe * subscription;
Serial.println((char*) ds1.lastread);
{ dosang1--;
Firebase.setInt("/light 1",dosang1);
else
{ dosang1++;
Firebase.setInt("/light 1",dosang1);
if (subscription == &dsmax)
Serial.println((char*) dsmax.lastread);
dosang1=10;
Firebase.setInt("/light 1",dosang1);
Serial.println(dosang1);
if (subscription == &light)
Serial.println((char*) light.lastread);
Firebase.setInt("/den1", 1);
else
Firebase.setInt("/den1", 0);
Adafruit_MQTT_Subscribe * subscription;
Nếu bằng ds1, dữ liệu đọc đƣợc là „0‟ thì giảm biến dosang1 còn dữ liệu đọc
đƣợc thì tăng biến dosang1 và gửi biến dosang1 lên Firebase bằng câu lệnh :
Firebase.setInt("/light 1",dosang1);
Nếu bằng dsmax, dữ liệu đọc về là „1‟ thì gán dosang1 = 10 và gửi giá trị
dosang1 lên Firebase.
Nếu bằng light , dữ liệu đọc về là „0‟ thì gửi dữ liệu lên Firebase với câu lệnh:
Firebase.setInt("/den1", 1); , còn trƣờng hợp khác gửi Firebase.setInt("/den1",
0);
Bắt đầu
S
Mạng wifi đã
được kết nối ?
Đ
Mạng wifi đã
được kết nối ?
Đ
S
Nhiệt độ >= 40 ?
Bật báo động, gửi số 1 Tắt báo động, gửi số 0
lên Firebase tại đường lên Firebase tại đường
dẫn “/bao trom” dẫn “/bao trom”
Đ
Kết thúc
Hình 4.17 Lưu đồ mạch giám sát nhiệt độ, độ ẩm và chuyển động.
Thực hiện chƣơng trình kết nối MQTT, sau đó đọc dữ liệu từ Adafruit_MQTT
và so sánh với các địa chỉ đăng kí MQTT, nếu đúng địa chỉ thì sẽ xử lí dữ liệu nhận
đƣợc để bật tắt cảm biến PIR hoặc led.
Sau đó đọc giá trị nhiệt độ, độ ẩm từ cảm biến và gửi các giá trị đó lên
Firebase. Nếu nhiệt độ lớn hơn hoặc bằng 40 thì bật Buzzer báo động và gửi số 1
lên Firebase tại đƣờng dẫn “/bao chay”, ngƣợc lại tắt Buzer và gửi số 0 lên.
Tiếp theo đọc tín hiệu PIR tại chân D2, nếu tín hiệu mức cao thì bật Buzzer báo
động và gửi số 1 lên Firebase tại đƣờng dẫn “/bao trom”, ngƣợc lại tắt Buzzer báo
động và gửi số 0.
4.5.2 Chƣơng trình cho mạch giám sát nhiệt độ, độ ẩm và chuyển động
Chƣơng trình nhóm chúng em viết cho mạch giám sát nhiệt độ, độ ẩm và chuyển
động gồm các tính năng nhƣ sau:
- Thứ 1: Thiết bị có thể kết nối với mạng wifi bất kì, khi chƣa kết nối đƣợc
thì thiết bị chuyển sang chế độ Access point (với tên wifi không trùng lặp)
để ngƣời dùng dùng điện thoại kết nối với đèn và truy cập địa chỉ
“192.168.4.1” để thiết lập wifi cho nó, sau khi thiết lập xong đèn sẽ chuyển
sang chế độ station để kết nối wifi mà ngƣời đã dùng thiết lập.
Sau đây nhóm em xin trình bày chƣơng trình của hệ thống:
Thêm thƣ viện để thực hiện đƣợc các tính năng wifi của mạch vi điều khiển
ESP8266 ESP-12E NodeMCU.
#include <ESP8266WiFi.h>
Thêm thƣ viện để thực hiện viêc đọc ghi dữ liệu lên cơ sở dữ liệu thời gian thực
FIREBASE.
#include <FirebaseArduino.h>
Thêm thƣ viện để thực hiện viêc kết nối Adafruit_Mqtt để nhận dữ liệu điều
khiển bằng Google asstant .
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
Thêm thƣ viện để thực hiện viêc kết nối wifi tự động.
#include <WiFiManager.h>
Thêm thƣ viện của cảm biến DHT11: #include <DHT.h>
Để tạo kết nối với cơ sở dữ liệu thời gian thực cần có địa chỉ và mã cho ngƣời
phát triển , 2 thông tin này sẽ đƣợc gán vào 2 biến tƣơng ứng là FIREBASE_HOST,
FIREBASE_AUTH thông qua định nghĩa:
#define FIREBASE_AUTH
"HszRBsnMPCl1Yc05DeHtErXk7IhNoVk8KJ10swB1"
Để kết nối với Adfruit thì cần có các thông số sau: dịa chỉ sever kết nối, port kết
nối, tên tài khoản, mật khẩu với định nghĩa:
Để thực hiện việc điều khiển ta cần liên kết với các feed đƣợc tạo từ trƣớc trên
Adfruit.
WiFiClient client;
#define DHTPIN D4
WiFiManager w;
w.autoConnect("light 1");
Serial.println("connected...");
mqtt.subscribe(&goout );
mqtt.subscribe(&denngu);
Gọi hàm MQTT_connect (); để kết nối với MQTT của Adafruit.
Adafruit_MQTT_Subscribe * subscription;
if (subscription == &goout)
Serial.println((char*) goout.lastread);
else
{ digitalWrite(powerPin, HIGH);
Firebase.setInt("/den1", 1);
Firebase.setInt("/den2", 1);
Firebase.setInt("/denngu", 1);
} }
if (subscription == &denngu)
Serial.println((char*) denngu.lastread);
{ digitalWrite(D0, LOW);
Firebase.setInt("/denngu", 1);
Firebase.setInt("/denngu", 0);
} } }
Adafruit_MQTT_Subscribe * subscription;
Firebase.setInt("/den1", 1);
Firebase.setInt("/den2", 1);
Firebase.setInt("/denngu", 1);
Nếu bằng denngu, dữ liệu đọc về là „0‟ thì tắt đèn ngủ bằng câu lệnh
digitalWrite(D0, LOW); và gửi giá trị 1 lên Firebase theo lệnh
Firebase.setInt("/denngu", 1); , ngƣợc lại bật đèn ngủ và gửi giá trị 0 lên
Firebase theo lệnh digitalWrite(D0, HIGH); Firebase.setInt("/denngu", 0);
Tiếp theo là chƣơng trình đọc cảm biến DHT11 và cảm biến PIR.
if (isnan(h) || isnan(t)) {
return;
Serial.println("nhiet do:");
Serial.println(t);
Serial.println("do am:");
Serial.println(h);
if (t>=40)
{ digitalWrite(pinSpeaker, HIGH);
else
{ digitalWrite(pinSpeaker, LOW);
Đầu tiên đọc nhiệt độ, độ ẩm, nếu đọc không đƣợc thì in ra màn hình “loi doc
cam bien”, nêú đọc đƣợc thì in ra màn hình nhiệt độ, độ ẩm và gửi 2 giá trị đó lên
Firebase bằng câu lệnh Firebase.setFloat ("/Temp", t); Firebase.setFloat
("/Humidity", h); sau đó đem giá trị nhiệt độ so sánh với giá trị đặt trƣớc nếu lớn
hơn hoặc bằng thì bật buzzer và gửi lên Firebase giá trị 1 theo lệnh Firebase.setInt
("/bao chay", 1); ngƣợc lại tắt buzzer và gửi giá trị 0.
Ngƣợc lại val = LOW thì tắt Buzzer và pirState = HIGH thì gửi lên Firebase giá trị
0 theo lệnh Firebase.setInt ("/bao trom", 0); và gán pirState =LOW.
Hình 4.26 Giao diện sau khi kết nối thành công app android và firebase
b. Viết chƣơng trình hệ thống.
Phần mềm sẽ liên tục cập nhật các giá trị nhận đƣợc từ firebase và cho ra kết quả
hiển thị lên giao diện phần mềm một cách trực quan giúp ngƣời sử dụng quản lý các
thiết bị trong nhà cũng nhƣ tình trạng của ngôi nhà một cách dễ dàng nhất. Ngoài ra
Do chƣơng trình thiết kế bao gồm nhiều tính năng nên chƣơng trình viết lập
trình sẽ dài nên nhóm chúng em xin phép sẽ trình bày một số phần chính trong
chƣơng trình .
Giao diện hiển thị bao gồm việc hiển thị trạng thái bật/tắt của hai đèn, trạng thái
của hai switch, hai thanh seekBar (Hình 4.28) ngoài ra còn hiển thị nhiệt độ, độ ẩm,
cảnh báo cháy, cảnh báo trộm (Hình 4.29).
Giao diện điều khiển gồm việc điều khiển bật tắt đèn bằng các switch, điều khiển
độ sáng đèn bằng hai thanh seekBar (Hình 4.28). Ngoài ra còn tính năng điều khiển
bật tắt đèn thông qua việc hẹn giờ (Hình 4.30).
Hình 4.28 Giao diện hiển thị nhiệt Hình 4.29 Giao diện hẹn giờ tắt/bật đèn
độ, độ ẩm, cảnh báo cháy, trộm.
Sau khi đã chỉ dẫn tới đúng vùng dữ liệu cần thao tác ta tiến hành cập nhật giá trị nhiệt
độ bằng cách sử dụng lệnh sau.
myRef.addValueEventListener(new ValueEventListener() {
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
nhietdo = dataSnapshot.getValue(float.class);
}
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Muốn hiển thị nhiệt độ lên app android bằng cách: textViewnd.setText(nhietdo +
"°C");
Đối với các giá trị còn lại trên cơ sở dữ liệu firebase ta muốn lấy dữ liệu về và hiển
thị thì ta làm tƣơng tự nhƣ nhiệt độ.
Ví dụ để điều khiển độ sáng của đèn 1 “ ánh sáng 1” [Hình 4.28] thông qua ứng dụng
thì ta cần điều khiển các giá trị của “ ánh sáng 1” thông qua việc thay đổi cơ sở dữ liệu
của nó bằng cách:
DatabaseReference mData = FirebaseDatabase.getInstance().getReference();
seekBar.setOnSeekBarChangeListener(new
SeekBar.OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar, int progress, boolean
fromUser) {
if(progress < 10){
mData.child("ánh sáng 1").setValue(0);
dosang = 0;
textView_dosang1.setText("ĐỘ SÁNG ĐÈN 1 LÀ :" + dosang +
"%");
}
else if ( 50 <= progress && progress < 60){
mData.child("ánh sáng 1").setValue(5);
dosang = 50;
textView_dosang1.setText("ĐỘ SÁNG ĐÈN 1 LÀ :" + dosang +
"%");
}
else if ( 60 <= progress && progress < 70){
mData.child("ánh sáng 1").setValue(6);
dosang = 60;
textView_dosang1.setText("ĐỘ SÁNG ĐÈN 1 LÀ :" + dosang +
"%");
}
else if ( 70 <= progress && progress < 80){
mData.child("ánh sáng 1").setValue(7);
dosang = 70;
textView_dosang1.setText("ĐỘ SÁNG ĐÈN 1 LÀ :" + dosang +
"%");
}
else if ( 80 <= progress && progress < 90){
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
Đối với việc điều khiển độ sáng của thiết bị đèn muốn hiển thị độ sáng hiện tại là
bao nhiêu ra giao diện phần mềm thì ta sử dụng lệnh:
seekBar.setProgress(seekBar.getProgress()*0 + ds_den1*10);
Muốn hiển thị trạng thái sáng/ tắt của thiết bị đèn bằng cách:
Timer timer;
MyTimeTask myTimeTask;
if(timer != null) timer.cancel();
timer = new Timer();
myTimeTask = new MyTimeTask();
if(optSingleshot.isChecked()){
timer.schedule(myTimeTask, 1000);
}
else {
timer.schedule(myTimeTask, 1000, 100);
}
if(s1.equals(laychuoi)){
mData.child("den1").setValue(1);
}
if (s2.equals(laychuoi)){
mData.child("den1").setValue(0);
}
if(s3.equals(laychuoi)){
mData.child("den2").setValue(1);
}
if(s4.equals(laychuoi)){
mData.child("den2").setValue(0);
}
}
});
}
}
4.7 VIẾT TÀI LIỆU HƢỚNG DẪN SỬ DỤNG
Bƣớc 1: Cấp nguồn cho thiết bị đèn, thiết bị đèn sử dụng nguồn 220V AC, thiết
bị đèn sẽ có một đèn màu đỏ sáng báo hiệu đã có nguồn, sau đó thiết bị đèn wifi
sẽ phát ra một mạng wifi tƣơng ứng với tên thiết bị đèn.
Bƣớc 2: Cấp nguồn cho thiết bị giám sát nhiệt độ, đô ẩm và chuyển động, khi có
nguồn đèn led sẽ nhấp nháy 1 lần để báo có nguồn, và mạch sẽ phát Wifi tƣơng
ứng với tên thiết bị.
- Truy cập CH Play trên thiết bị android và cập nhật google phiên bản mới
nhất.
- Truy cập vào ứng dụng Google, chọn vào mục "thêm" ở góc phải màn hình
> chọn Cài đặt > Trợ lý Google.
- Tại danh mục này, ngƣời dùng chọn tab "Trợ lý" > Ngôn ngữ > và lựa chọn
tiếng Việt trong danh sách các ngôn ngữ đƣợc hỗ trợ. Google sẽ yêu cầu
ngƣời dùng đọc 4 lần cụm từ "Ok Google" để nhận dạng giọng nói.
Sau khi đã thực hiện các bƣớc trên, cô trợ lý ảo Google đã chính thức đƣợc kích
hoạt sử dụng. Sau này ngƣời dùng chỉ cần ấn giữ nút home để mở tính năng
hoặc một số mẫu máy khác dùng nút nguồn để mở tính năng, trình hỏi đáp bằng
giọng nói sẽ đƣợc kích hoạt sử dụng ngay lập tức.
Bƣớc 5: Mở ứng dụng để quan sát và điều khiển:
- Sau khi đã kích hoạt Google Assistant để điều khiển thiết bị bằng giọng nói
ta sử dụng các lệnh nhƣ sau:
• Đèn 1: Bật đèn 1, tắt đèn 1, tăng độ sáng đèn 1, giảm độ sáng đèn 1,
đèn 1 sáng tối đa.
Đèn 2: Bật đèn 2, tắt đèn 2, tăng độ sáng đèn 2, giảm độ sáng đèn 2,
đèn 2 sáng tối đa.
Đèn ngủ: Bật đèn ngủ, tắt đèn ngủ.
Bật/ tắt cảm biến chuyển động: coi nhà giúp tôi, tôi đã quay lại nhà.
- Đối với việc điều khiển thông qua ứng dụng thì ta làm nhƣ sau:
Ban đầu khi mở ứng dụng ta sẽ có giao diện nhƣ sau:
Hình 4.31 Giao diện điều khiển đèn thông qua ứng dụng
Để điều khiển bật tắt đèn ta sử dụng tay thao tác lên ứng dụng bằng việc thay đổi
trạng thái của hai switch. Đối với việc điều khiển độ sáng đèn ta chỉ việc giữ và di
chuyển dấm chấm đỏ trên hai thanh seekBar.
Hình 4.32 Giao diện chuyển đổi sang hẹn giờ và xem nhiệt độ
Để hẹn giờ ta làm nhƣ sau: Trên giao diện sẽ có 4 khung để nhập giá trị giờ cài
đặt, 2 khung đầu sẽ là bật tắt đèn 1, hai khung sau sẽ bật tắt đèn 2. Sau khi nhập giá
trị cài đặt ta tiến hành chọn vào “HẸN GIỜ ĐÈN 1” và “ HẸN GIỜ ĐÈN 2”. Cuối
cùng để quan sát đƣợc nhiệt độ , độ ẩm, báo cháy, báo trộm trên giao diện bất kỳ ta
chọn vào dấu 3 chấm, chọn nhiệt độ [Hình 4.35].
Hình 4.34 Giao diện hiển thị nhiệt độ, độ ẩm, báo cháy và báo trộm.
Hình 5.1 Mặt trước và sau của mạch điều khiển thiết bị đèn.
Mạch giám sát nhiệt độ, độ ẩm, cảm biến PIR đƣợc thi công 2 lớp và sử dụng
nhiều linh kiện dán để giảm kích thƣớc và đảm bảo tính thẩm mỹ của mạch.
Hình 5.2 Mặt trước và sau của mạch giám sát nhiệt độ, độ ẩm và chuyển động.
Hình 5.3 Các mạch điện được láp ráp đầy đủ vào đèn.
Mạch giám sát nhiệt độ, độ ẩm, cảm biến PIR đƣợc lắp vào khung.
Hình 5.4 Mạch giám sát nhiệt độ, độ ẩm chuyển động được gắn vào khung.
Hình 5.7 Giao diện Google Assistant sau khi ra lệnh điều khiển.
Phần mềm android sẽ chia thành 3 giao diện gồm giao diện hiển thị, điều khiển
đèn, giao diện hiển thị nhiệt độ, độ ẩm, cảnh báo cháy, trộm và giao diện hẹn giờ
điều khiển tắt, mở đèn.
Hình 5.8 Giao diện hiển thị và điều Hình 5.9 Giao diện hiển thị nhiệt độ,
khiển đèn. độ ẩm, cảnh báo cháy, trộm.
Hình 5.10 Giao diện hẹn giờ điều khiển bật tắt đèn
Bảng 5.1 Kết quả thực tế về điện áp và dòng tiêu thụ ở các mức PWM
Phần trăm PWM (%) Điện áp (V) Dòng điện tiêu thụ (mA)
10 64.8 49.7
20 69.7 74.6
30 73.4 94.8
40 77.7 114.5
50 81.4 134.2
60 84.4 154.1
70 87.1 173.2
80 89.3 192.4
90 92.6 220.1
100 95.2 243.8
Từ bảng kết quả thực tế, ta tính đƣợc công suất đèn ở chế độ 100% PWM
Bảng 5.3 Kết quả thực nghiệp khoảng cách bắt Wifi của thiết bị giám sát nhiệt
độ, độ ẩm và chuyển động.
Bảng 5.2 Kết quả khảo sát mức độ tiêu thụ pin của ứng dụng khi chạy trên điện thoại.
Thời gian khảo sát ( phút) Dung lƣợng pin sử dụng (mAh)
5 17.3
10 25.6
15 36.1
20 48.3
25 62.4
Thiết kế lập trình phần mềm điều khiển và hiển thị trên điện thoại thông minh sử
dụng hệ điều hành android điều điều khiển các thiết bị điện, giám sát nhiệt độ, độ
ẩm, báo cháy, báo trộm.
Phần mềm có điều điều khiển tắt mở, độ sáng của từng thiết bị đèn, có thể cài đặt
hẹn giờ bật tắt thiết bị cũng nhƣ phát ra chuông cảnh báo khi có sự cố xảy ra.
Thiết bị đèn sử dụng điện áp 220 VAC, chạy ổn định,dễ lắp đặt, tuổi thọ cao
không có bức xạ hồng ngoại. Phần mềm điều khiển hiển thị dễ cài đặt, dễ sử dụng.
Mức độ tiêu thụ pin của điện thoại thấp.
Bên cạnh những ƣu điểm thì cũng có những khuyết điểm nhƣ: kích thƣớc của
thiết bị đèn tƣớng đối lớn, thời gian thực thi các thiết bị còn phụ thuộc vào tốc độ
mạng. Phần mềm chỉ hoạt động với điện thoại android phiên bản 5.1 trờ lên. Thiết
bị không có nút điều khiển bên ngoài nên khi không có điện thoại thì ngƣời sử dụng
chỉ có thể tắt bằng cách ngắt nguồn điện cung cấp.
PHỤ LỤC
GIỚI THIỆU TỔNG QUAN VỀ PHẦN CỨNG
Thiết bị đầu vào
a. Cảm biến DHT11 [9]
DHT11 Là cảm biến nhiệt độ, độ ẩm rất thông dụng hiện nay vì chi phí
rẻ và rất dễ 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:
o Điện áp hoạt động : 3V - 5V (DC)
o Dải độ ẩm hoạt động : 20% - 90% RH, sai số ±5%RH
o Dải nhiệt độ hoạt động : 0°C ~ 50°C, sai số ±2°C
o Tần số lấy mẫu tối đa: 1 Hz
o 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. Hiện nay,
thông dụng ngoài thị trƣờng có hai loại đóng gói cho DHT11: 3 chân và 4 chân.
Xem các hình dƣới.
Cảm biến thân nhiệt chuyển động PIR (Passive infrared sensor) PIR
AM312 đƣợc sử dụng để phát hiện chuyển động của các vật thể phát ra bức xạ
hồng ngoại (con ngƣời, con vật, các vật phát nhiệt).
Bảng 7.1. Bảng chức năng từng chân mạch ESP8266 ESP – 12E NodeMCU
Bus Ngoại vi
GPIO/PWM
Kích thƣớc RAM <36kB, có nghĩa rằng khi ESP8266EX đang làm việc theo
chế độ kết nối với router, không gian lập trình truy cập cho ngƣời dùng là khoảng
36kB.)
Không có ROM chƣơng trình trong SoC, do đó chƣơng trình sử dụng trong
ROM phải đƣợc lƣu trữ trong SPI flash (trong SPI flash này cho phép ta lƣu trữ
đƣợc 16MB).
o Bộ điều chế xung PWM
Chip ESP8266EX hổ trợ cho chúng ta 4 ngõ ra PWM theo mạch ESP8266
ESP – 12E NodeMCU nhƣ sau:
Bảng 7.3. Bảng các chân pwm của mạch ESP8266 ESP-12E NodeMCU
PWM đƣợc tạo ra bởi chƣơng trình do chúng ta viết trong chip
ESP8266EX. Ví dụ, điều khiển ánh sáng đèn LED, thì PWM đƣợc thực hiện
bởi sự đóng ngắt ngõ ra điện áp theo thời gian, thời gian tối thiểu tới 44 ns.
dải tần số PWM có thể điều chỉnh từ 1000 us cho tới 10000 us hay giữa
100Hz và 1KHz.
Thiết bị đầu ra
a. Opto PC817 [7]
Opto PC817 là cách ly quang (hay còn gọi là OPTO) là một linh kiện bán dẫn cấu
tạo gồm 1 bộ phát quang và một cảm biến quang tích hợp trong 1 khối bán
dẫn, bộ phát quang là 1 diode phát quang dùng để phát ra ánh sáng kích
cho các cảm biến quang dẫn, còn cảm biến quang là phototran.
Mosfet IRF830 là Transistor hiệu ứng trƣờng là một Transistor đặc biệt có
cấu tạo và hoạt động khác với Transistor thông thƣờng. Mosfet thƣờng có công
suất lớn hơn rất nhiều so với BJT, Mosfet IRF830 có công suất là 125W.
Mosfet IRF830 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 rất lớn, khi điện áp chân kích cực
VGS > 0 thì giá trị điện trở giảm xuống cho dòng điện ID thoát xuống S, dòng
điện chạy từ D xuống S.
o Thông số kỹ thuật
Điện áp đánh thủng là 500V.
Là loại led có nguồn sáng chất rắn, hiệu suất cao, có độ bền cao, không chứa thủy
ngân và hóa chất độc hại, không phát ra tia tử ngoại, an toàn cho ngƣời sử
dụng và thân thiện môi trƣờng.
Phần mềm Arduino IDE đang đƣợc sử dụng rất rộng rãi trên thế giới để lập
trình cho các mạch Arduino, phần mềm đƣợc thiết kế rất dễ dàng cho ngƣời sử dụng
kể cả những ngƣời không chuyên về lập trình về các vi điều khiển cũng dễ dàng tiếp
cận và lập trình đƣợc, dựa trên thƣ viện nguồn mở nên rất dễ trong việc tìm kiếm tài
liệu và các chƣơng trình liên quan, giúp ngƣời sử dụng có thể dễ dàng tạo ra các dự
án của riêng mình mà cũng không cần quá am hiểu về phần cứng của vi điều khiển.
Ngôn ngữ sử dụng để lập trình là ngôn ngữ C và ngôn ngữ C++.
Các ƣớc sử dụng phần mềm lập trình Arduino IDE để lập trình:
Tải phần mềm và mở phần mềm.
Để sử dụng đƣợc chƣơng trình lập trình chúng ta tiến hành tải phần mềm từ
trang web: arduino.cc
Nhóm chúng em sử dụng phần mềm để lập trình cho mạch vi điều khiển
ESP8266 ESP-12E NodeMCU nên nhóm em lựa chọn phiên bản Arduino IDE
1.8.8 hoặc cao hơn và cụ thể là phiên bản Arduino IDE 1.8.8.
Sau khi tải phần mềm về thành công, mở phần mềm và phần mềm sẽ xuất
hiện giao diện nhƣ hình và chúng ta có thể tiến hành lập trình.
Để có thể lập trình cho mạch vi điều khiển ESP8266 ESP-12E NodeMCU
trên phần mềm Arduino IDE thì chúng ta cần cài bộ thƣ viện hỗ trợ.
Để cài thƣ viện cần mở phần mềm Arduino IDE sau đó lựa chọn vào “File”
sau đó lựa chọn “Preferences” và thêm đƣờng dẫn để cài đặt bộ thƣ viện tại
“ManagerURLs”:
http://arduino.esp8266.com/stable/package_esp8266com_index.json”.
Hình 7.8. Đường dẫn để cài gói thư viện lập trình cho ESP8266
NodeMCU
Sau đó nhóm chúng em tiến hành vào mục “Tools” và lựa chọn vào “Board”
tiếp sau đó là “Boards Manager” để cài đặt thêm thƣ viện cho mạch vi điều khiển
ESP8266 ESP-12E NodeMCU.Sau đó chọn phiên bản và chọn “Install” nhƣ hình.
Hình 7.9. Tiến hành cài đặt gói thư viện cho ESP8266 NodeMCU
Tiếp sau đó nhóm chúng em sẽ cài đặt các thông số để có thể lập trình, biên
dịch và nạp chƣơng trình cho ESP8266 ESP-12E NodeMCU, nhóm chúng em tiến
hành chọn vào “Tools” sau đó chọn “Board” và tiếp tục chọn “NodeMCU 1.0 (ESP-
12E Module).
Sau đó thiết lập các thông số nhƣ tốc độ xử lý của CPU (CPU Frequency) lựa
chọn tùy theo mục đích sử dụng, bộ nhớ Flash, tốc độ nạp chƣơng trình 115200
(Upload Speed) là tốc độ nạp chƣơng trình cao, tốc độ càng cao nạp càng nhanh.
Thông tin thông số nhƣ hình 7.10.
Hình 7.10. Thiết lập thông số cho ESP8266 NodeMCU trên IDE
Tiến hành kết nối mạch nạp cho mạch vi điều khiển ESP8266 ESP-12E
NodeMCU.
Hình 7.11 Nạp chương trình nhấp nháy led cho ESP.
Sau khi chọn nạp chƣơng trình thì quá trình iên dịch và nạp sẽ tiến hành nhƣ
hình ên dƣới, sẽ có thông báo hiện lên số % chƣơng trình đƣợc nạp. Khi đủ 100%
thì chƣơng trình đã nạp hoàn thành và mạch vi điều khiển ESP8266 ESP-12E
NodeMCU sẽ hoạt động theo chƣơng trình đã lập trình.
Để điều khiển thiết bị từ xa chúng ta có nhiều cách nhƣ tạo Webserver, sử dụng
trang Web io.adafruit.com, cơ dở dữ liệu thời gian thực Firebase,… Trong đề tài
này nhóm chúng em sử dụng 2 sử dụng 2 server đó là Adafruit và Firebase, dùng
Adafruit để điểu khiển thiết bị bằng giọng nói với sự trợ giúp của Google assistant
và Firebase để gửi dữ liệu lên và đọc dữ liệu về cho ESP và điện thoại.
Do nhóm em sử dụng 2 trang Web trên nên trong phần mềm Arduino IDE cần
cài các thƣ viện của Adafruit và thƣ viện của Firebase.
Đầu tiên tạo dự án trên Adafruit : tại trang địa chỉ : io.adafruit.com
Sau khi tạo tài khoản trên Adafruit thì nhóm em bắt đầu tạo 1 Dashboard tên
“datn” bằng cách bấm vào Action – creat a new dashboard.
Sau khi có Dashboard, chúng em vào Dashboard add thêm Block. Và block
chúng em cần add đó làToggle (nhƣ hình)
Đầu tiên chúng em truy cập ifttt.com và tạo 1 tài khoản, sau đó bấm vào my
applets, chọn new applet.
Với mục THIS thì chúng em chọn Google Assistant nhƣ hình dƣới
Hình 7.20 Chọn “Say a simple phrase” để đến giao diện tạo lời thoại.
Điền câu lệnh muốn nói vào các ô, sau đó bấm Create Trigger.
Hình 7.21 Điền câu lệnh muốn nói vào các ô tương ứng.
Hình 7.22 Giao diện sau khi hoàn thành mục this.
Lúc này chúng em chọn Feed “light1” (Cái đã tạo ở dashboard Adafruit), còn
mục Data to save thì nhập “1” (Do đang làm lệnh ON thiết bị). Sau đó bấm “Creat
action”
Tƣơng tự, chúng ta tạo Applet mới cho lệnh OFF, thay vì “turn on the light” thì
giờ sẽ là “turn off the light”.
Cứ thế chúng em tạo applet liên kết với các feed còn lại.
Hình 7.25 Liên kết đến các feed ở Adafruit và điền dữ liệu sẽ gửi.
Sau khi tạo hết các lời thoại liên kết đến các feed ở Adafruit thì chúng em có kết
quả nhƣ hình 7.26
Hình 7.26 Kết quả sau khi tạo các lời thoại liên kết với các feed ở Adafruit.
Tiếp theo ta truy cập firebase.google.com để tạo các dự án.
Nhóm chúng em sẽ tiến hành tạo một vùng cơ sở dữ liệu mới bằng cách chọn vào
“CREATE NEW PROJECT” nhƣ hình 7.27.
analogWrite(LEDpin, a);
}
if (Firebase.getInt("/den1")==0)
else
{ a=0;
analogWrite(LEDpin, 0);
Firebase.setInt("/ttden1", 1);
}
}
void MQTT_connect()
{
int8_t ret;
if (mqtt.connected())
{
return;
}
Serial.print("Connecting to MQTT... ");
while ((ret = mqtt.connect()) != 0)
{
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 1 seconds...");
mqtt.disconnect();
delay(1000); // cho 1s
}
Firebase.setInt("/den1", 1);
Firebase.setInt("/den2", 1);
Firebase.setInt("/denngu", 1);
}
}
if (subscription == &denngu)
{
Serial.print("den ngu: ");
Serial.println((char*) denngu.lastread);
if (!strcmp((char*) denngu.lastread, "0"))
{
digitalWrite(D0, LOW);
Firebase.setInt("/denngu", 1);
}
else
{ digitalWrite(D0, HIGH);
Firebase.setInt("/denngu", 0);
}
}
}
if ( Firebase.getInt("/denngu")==0)
digitalWrite(D0, HIGH);
else digitalWrite(D0, LOW);
float h = dht.readHumidity(); //Đọc độ ẩm
float t = dht.readTemperature(); //Đọc nhiệt độ
else
{
digitalWrite(pinSpeaker, LOW);
Firebase.setInt ("/bao chay", 0);
}
val = digitalRead(inputPin); // đọc giá trị đầu vào.
if (val == HIGH) // nếu giá trị ở mức cao.(1)
{
digitalWrite(pinSpeaker, HIGH);
if (pirState == LOW)
{
Serial.println("phat hien chuyen dong!");
Firebase.setInt ("/bao trom", 1);
Trang bìa……………………………………………………………………………..i
Nhiệm vụ đồ án……………………………………………………………………...ii
Lịch trình……………………………………………………………………….......iii
Cam đoan……………………………………………………………………….......iv
Lời cảm ơn…………………………………………………………………………..v
Mục lục……………………………………………………………………………..vi
Danh mục hình……………………………………………………………………..vii
Danh mục bảng……………………………………………………………………viii
Tóm tắt………………………………………………………………………….......ix
CHƢƠNG 1. TỔNG QUAN .................................................................................. 1
1.1 ĐẶT VẤN ĐỀ .................................................................................................. 1
1.2 MỤC TIÊU ...................................................................................................... 2
1.3 NỘI DUNG NGHIÊN CỨU ............................................................................ 2
1.4 GIỚI HẠN....................................................................................................... 3
1.5 BỐ CỤC ........................................................................................................... 3
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT ...................................................................... 5
2.1 GIỚI THIỆU .................................................................................................... 5
2.2 GIỚI THIỆU VỀ TRỢ LÝ ẢO GOOGLE ASSISTANT. ................................. 5
2.2.1 Khái niệm ................................................................................................... 5
2.2.2 Lịch sử phát triển ........................................................................................ 5
2.2.3 Ƣu điểm và nhƣợc điểm............................................................................. 6
2.3 GIỚI THIỆU VỀ CƠ SỞ DỮ LIỆU FIREBASE .............................................. 6
2.3.1 Khái niệm ................................................................................................... 6
2.3.2 Lịch sử phát triển ....................................................................................... 7
2.3.3 Các chức năng chính của Firebase............................................................... 7
2.3.4 Ƣu nhƣợc điểm của Firebase ...................................................................... 8
2.4 GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH ANDROID ............................................. 8
2.4.1 Khái niệm về Android................................................................................. 8
2.4.2 Lịch sử phát triển ...................................................................................... 8
2.4.3 Ƣu nhƣợc điểm của hệ điều hành Android ................................................. 9
vi
2.5 GIỚI THIỆU VỀ CÁC CHUẨN GIAO TIẾP WIFI ....................................... 10
2.5.1 Khái niệm về wifi ..................................................................................... 10
2.5.2 Các chuẩn của wifi ................................................................................... 10
CHƢƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ ........................................................ 11
3.1 TỔNG QUAN CỦA ĐỀ TÀI ......................................................................... 11
3.2 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG ..................................................... 12
3.2.1 Sơ đồ khối hoạt động của hệ thống ........................................................... 12
3.2.2 Thiết kế sơ đồ khối phần cứng bóng đèn ................................................... 13
3.2.3. Thiết kế sơ đồ khối mạch giám sát nhiệt độ, độ ẩm và chuyển động ........ 15
3.2.4 Tính toán và thiết kế mạch ........................................................................ 17
3.2.5 Sơ đồ nguyên lí toàn mạch ........................................................................ 25
3.2.6 Thiết kề phần mềm chạy trên hệ điều hành android .................................. 29
CHƢƠNG 4. THI CÔNG HỆ THỐNG............................................................... 33
4.1 GIỚI THIỆU ................................................................................................. 33
4.2 THI CÔNG HỆ THỐNG ................................................................................ 33
4.2.1 Thi công phần cứng: ................................................................................. 33
4.2.2 Lắp ráp và kiểm tra ................................................................................... 37
4.3 THI CÔNG MÔ HÌNH ................................................................................... 41
4.4 LẬP TRÌNH MẠCH ĐIỀU KHIỂN ĐỘ SÁNG ĐÈN BULB. ........................ 45
4.4.1 Lƣu đồ giải thuật....................................................................................... 45
4.4.2 Chƣơng trình cho mạch điều khiển độ sáng đèn bulb ................................ 46
4.5 LẬP TRÌNH CHO MẠCH GIÁM SÁT NHIỆT ĐỘ, ĐỘ ẨM VÀ CHUYỂN
ĐỘNG.................................................................................................................... 53
4.5.1 Lƣu đồ giải thuật....................................................................................... 53
4.5.2 Chƣơng trình cho mạch giám sát nhiệt độ, độ ẩm và chuyển động ............ 54
4.6 LẬP TRÌNH ỨNG DỤNG ANDROID. ......................................................... 61
4.7 VIẾT TÀI LIỆU HƢỚNG DẪN SỬ DỤNG .................................................. 71
CHƢƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ .......................................... 75
5.1 KẾT QUẢ ĐẠT ĐƢỢC ................................................................................. 75
5.1.1 Phần cứng ................................................................................................. 75
5.1.2 Phần mềm ................................................................................................. 75
5.1.3 Một số hình ảnh kết quả đạt đƣợc của đề tài ............................................. 76
5.2 NHẬN XÉT_ĐÁNH GIÁ .............................................................................. 81
5.2.1 Phần cứng ................................................................................................. 81
5.2.2 Phần mềm ................................................................................................. 82
CHƢƠNG 6. KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN ..................................... 84
6.1 KẾT LUẬN .................................................................................................... 84
6.2 HƢỚNG PHÁT TRIỂN ................................................................................. 84
TÀI LIỆU THAM KHẢO ...................................................................................... 86
PHỤ LỤC .............................................................................................................. 87