TRƢỜNG ĐH SPKT TP. HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ----o0o----
Tp. HCM, ngày 10 tháng 07 năm 2018
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
Họ tên sinh viên: Nguyễn Ngọc Thạch MSSV: 14141292
Đoàn Quốc Duyệt MSSV: 14141045
Chuyên ngành: Công nghệ kỹ thuật điện - điện tử truyền thông Mã ngành: 41
Hệ đào tạo: Đại học chính quy Mã hệ: 1
Khóa: 2014 Lớp: 14141DT1C
14141DT1B
I. TÊN ĐỀ TÀI: TH
122 trang |
Chia sẻ: huong20 | Ngày: 13/01/2022 | Lượt xem: 391 | Lượt tải: 0
Tóm tắt tài liệu Đồ án Thiết kế và thi công mô hình hệ thống và quản lý trang trại heo, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
HIẾT KẾ VÀ THI CÔNG MÔ HÌNH HỆ THỐNG VÀ QUẢN
LÝ TRANG TRẠI HEO.
II. NHIỆM VỤ
Nội dung thực hiện:
Nội dung 1: Tìm hiểu và nghiên cứu giao tiếp Module ESP 8266-12 với
Arduino Mega 2560.
Nội dung 2: Lƣu thông tin trên thẻ Tag của Module RFID, thiết lập giao diện C#
trên Visual Studio.
Nội dung 3: Điều khiển các thiết bị theo cảm biến và thời gian thực.
Nội dung 4: Thiết kế và lập trình ứng dụng trên hệ điều hành Android và gửi các
hoạt động lên web FireBase.
Nội dung 5: Thiết kế và thi công mạch điều khiển.
Nội dung 6: Thiết kế mô hình sản phẩm.
Nội dung 7: Đánh giá kết quả thực hiện.
III. NGÀY GIAO NHIỆM VỤ: 02/04/2018
IV. NGÀY HOÀN THÀNH NHIỆM VỤ: 10/07/2018
V. HỌ VÀ TÊN CÁN BỘ HƢỚNG DẪN: ThS. Nguyễn Trƣờng Duy
CÁN BỘ HƢỚNG DẪN BM. ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
ii
TRƢỜNG ĐH SPKT TP. HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ----o0o----
Tp. HCM, ngày 10 tháng 07 năm 2018
LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP
Họ tên sinh viên 1: Nguyễn Ngọc Thạch
Lớp:14141DT1C MSSV: 14141292
Họ tên sinh viên 2: Đoàn Quốc Duyệt
Lớp: 14141DT1B MSSV: 14141045
Tên đề tài: Thiết Kế Và Thi Công Mô Hình Hệ Thống Và Quản Lý Trang Trại
Heo.
Xác nhận
Tuần/ngày Nội dung
GVHD
Tuần 1 (02-
08/04/2018) Nhận đồ án , tìm hiểu đề tài
Tuần 2 (09-
15/04/2018) Chọn và tìm hiểu đề tài.
Tuần 3 (16- Tìm hiểu và nghiên cứu giao tiếp Module ESP
22/04/2018) 8266-12 với Arduino Mega 2560.
Tuần 4 (23/4 - 29
Lƣu thông tin trên thẻ Tag của Module RFID, thiết
/04/2018)
lập giao diện C# trên Visual Studio.
Tuần 5,6
Điều khiển các thiết bị theo cảm biến và thời gian
(30/4 -
thực.
13/05/2018)
Tuần 7,8,9,10
Thiết kế và lập trình ứng dụng trên hệ điều hành
(14/5 -
Android và gửi các hoạt động lên web FireBase.
10/06/2018)
Tuần 11,12 (11 -
24/06/2018) Tìm hiểu thiết kế mô hình sản phẩm.
Tuần 13 (25/6 -
1/07/2018) Viết báo cáo, kiểm ra các phần cứng
10/07/2018 Hoàn thành nhiệm vụ đồ án
GV HƢỚNG DẪN
(Ký và ghi rõ họ và tên)
iii
LỜI CAM ĐOAN
Đề tài này là do chúng tôi tự thực hiện dƣới sự hƣớng dẫn của thầy ThS. Nguyễn
Trƣờng Duy, dựa vào một số tài liệu và không sao chép từ tài liệu hay công trình đã có
trƣớc đó. Nếu có bất kỳ sự gian lận nào chúng tôi xin chịu trách nhiệm về nội dung đồ
án của mình.
Ngƣời thực hiện
Nguyễn Ngọc Thạch Đoàn Quốc Duyệt
iv
LỜI CẢM ƠN
Chúng em xin chân thành cảm ơn quý thầy, cô Trƣờng Đại Học Sƣ Phạm Kỹ
Thuật TP.HCM đã tận tình dạy dỗ chúng em trong suốt những năm qua. Trong đó phải
kể đến quý thầy cô trong khoa Điện – Điện Tử đã truyền đạt những kiến thức, kinh
nghiệm cùng với sự đam mê của mình nhƣ đốt lên những ngọn lửa đam mê khám phá
trong mỗi chúng em và rồi từ những kiến thức, đam mê đó chúng em kết lại thành một
đồ án cuối cùng, đồ án tốt nghiệp do chính tay mình tạo ra, nó nhƣ một bàn đạp đầu
tiên để bƣớc vào những cánh cửa lớn hơn.
Đặc biệt, Chúng em xin cảm ơn sâu sắc thầy Nguyễn Trƣờng Duy đã tận tình
giúp đỡ chúng em trong quá trình lựa chọn đề tài và hỗ trợ chúng em trong quá trình
thực hiện đề tài. Trong quá trình thực hiện đồ án cũng xảy ra nhiều khó khăn, thiếu sót
nhƣng đƣợc sự đôn đốc và góp ý của thầy chúng em đã gặt hái đƣợc nhiều kiến thức và
kinh nghiệm. Một lần nữa chúng em xin cảm ơn thầy.
Sinh viên thực hiện đồ án
Nguyễn Ngọc Thạch Đoàn Quốc Duyệt
v
MỤC LỤC
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP ............................................................................ ii
LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP ............................................... iii
LỜI CAM ĐOAN ......................................................................................................... iv
LỜI CẢM ƠN ................................................................................................................ v
MỤC LỤC ..................................................................................................................... vi
LIỆT KÊ HÌNH VẼ .................................................................................................... vii
LIỆT KÊ 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 CỦA ĐỀ TÀI ...................................................................................... 1
1.3 NỘI DUNG THỰC HIỆN ...................................................................................... 2
1.4 GIỚI HẠN CỦA ĐỀ TÀI ....................................................................................... 2
1.5 BỐ CỤC ĐỒ ÁN .................................................................................................... 2
CHƢƠNG 2: CƠ SỞ LÝ THUYẾT ............................................................................ 4
2.1 QUY TRÌNH HOẠT ĐỘNG CỦA HỆ THỐNG ................................................... 4
2.2 GIỚI THIỆU PHẦN CỨNG .................................................................................. 4
2.2.1 TỔNG QUAN ARDUINO MEGA 2560 ......................................................... 4
2.2.2 GIỚI THIỆU LCD 20x4................................................................................... 5
2.2.3 GIỚI THIỆU MODULE RFID MFRC522 ...................................................... 7
2.2.4 TỔNG QUAN MODULE ESP8266 ................................................................ 9
2.2.5 GIỚI THIỆU MODULE L298 ....................................................................... 11
2.2.6 CẢM BIẾN MƢA. [7] ................................................................................... 14
2.2.7 CẢM BIẾN NHIỆT ĐỘ -ĐỘ ẨM. [7] .......................................................... 15
2.2.8 CẢM BIẾN ĐO THỜI GIAN. [7] ................................................................. 16
2.2.9 CẢM BIẾN SIÊU ÂM. [7]............................................................................. 17
vi
2.2.10 GIỚI THIỆU FIREBASE. [8] ...................................................................... 18
2.2.11 GIỚI THIỆU MODULE RELAY (RƠ-LE) ................................................. 19
2.3 GIỚI THIỆU CÁC CHUẨN GIAO THỨC: ........................................................ 21
2.3.1 SƠ LƢỢC VỀ GIAO TIẾP USART:[10] ...................................................... 21
2.3.2 SƠ LƢỢC VỀ CHUẨN SPI: ......................................................................... 23
2.3.3 SƠ LƢỢC VỀ CHUẨN I2C:[7] .................................................................... 26
CHƢƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ ............................................................. 27
3.1 GIỚI THIỆU ......................................................................................................... 27
3.2 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG .......................................................... 27
3.2.1 THIẾT KẾ SƠ ĐỒ KHỐI HỆ THỐNG. ........................................................ 27
3.2.2 TÍNH TOÁN VÀ THIẾT KẾ MẠCH ............................................................ 30
3.2.3 SƠ ĐỒ NGUYÊN LÝ CỦA TOÀN MẠCH ................................................. 37
CHƢƠNG 4. THI CÔNG HỆ THỐNG .................................................................... 38
4.1 THI CÔNG HỆ THỐNG: ..................................................................................... 38
4.2 LƢU ĐỒ GIẢI THUẬT. ...................................................................................... 40
4.2.1 LƢU ĐỒ GIẢI THUẬT ARDUINO MEGA 2560. ...................................... 40
4.2.2 GIỚI THIỆU VỀ ARDUINO IDE ................................................................. 50
4.2.3 LƢU ĐỒ GIẢI THUẬT CỦA ESP. .............................................................. 52
4.2.4 LẬP TRÌNH C# TRÊN PHẦN MỀM VISUAL STUDIO. ........................... 53
4.2.5 CHƢƠNG TRÌNH TRÊN ANDROID STUDIO. .......................................... 56
CHƢƠNG 5: KẾT QUẢ, NHẬN XÉT, ĐÁNH GIÁ ............................................... 64
5.1 SẢN PHẨM SAU KHI HOÀN THÀNH: ............................................................ 64
5.1.1 SẢN PHẨM: .................................................................................................. 64
5.1.2 KIẾN THỨC CÓ ĐƢỢC TRONG THIẾT KẾ SẢN PHẨM: ....................... 64
5.2 KẾT QUẢ CHẠY HỆ THỐNG: .......................................................................... 65
5.2.1 QUÁ TRÌNH CHẠY ỨNG DỤNG TRÊN ĐIỆN THOẠI: ........................... 65
5.2.2 QUÁ TRÌNH VẬN HÀNH TRÊN PHẦN CỨNG HỆ THỐNG: ................. 66
5.2.3 QUÁ TRÌNH VẬN HÀNH TRÊN PHẦN MỀM VISUAL STUDIO: ......... 67
CHƢƠNG 6: KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN ......................................... 69
vi
6.1 KẾT LUẬN........................................................................................................... 69
6.2 HƢỚNG PHÁT TRIỂN ....................................................................................... 69
TÀI LIỆU THAM KHẢO .......................................................................................... 70
PHỤ LỤC ..................................................................................................................... 71
CHƢƠNG TRÌNH ĐIỀU KHIỂN ANDROID STUDIO........................................... 71
CHƢƠNG TRÌNH ĐIỀU KHIỂN VISUAL STUDIO .............................................. 78
CHƢƠNG TRÌNH ĐIỀU KHIỂN ESP8266 .............................................................. 83
CHƢƠNG TRÌNH ĐIỀU KHIỂN ARDUINO .......................................................... 89
vi
LIỆT KÊ HÌNH VẼ
Hình 2-1: Board Arduino Mega 2560. ............................................................................. 4
Hình 2-2: Màn hình LCD 20x4. ....................................................................................... 6
Hình 2-3: Module RFID. .................................................................................................. 7
Hình 2-4: Sơ đồ chân RFID. ............................................................................................ 7
Hình 2-5: Thông số thẻ Tag. ............................................................................................ 9
Hình 2-6: Module NodeMCU 8266. .............................................................................. 10
Hình 2-7: Sơ đồ chân và sơ đồ kết nối. .......................................................................... 11
Hình 2-8: Module L298. ................................................................................................ 12
Hình 2-9: Sơ đồ chân Module L298. ............................................................................. 12
Hình 2-10: Động cơ DC. ................................................................................................ 13
Hình 2- 11: Nút nhấn hành trình. ................................................................................... 14
Hình 2- 12: Nút nhấn 4 chân. ......................................................................................... 14
Hình 2- 13: Cảm biến mƣa. ............................................................................................ 14
Hình 2-14: Cảm biến DHT11. ........................................................................................ 15
Hình 2-15: Sơ đồ chân Realtime. ................................................................................... 16
Hình 2-16: Module Realtime. ........................................................................................ 17
Hình 2-17: Sơ đồ nguyên lý Realtime. ........................................................................... 17
Hình 2- 18: Cảm biến siêu âm........................................................................................ 18
Hình 2- 19: Giao diện FireBase. .................................................................................... 19
Hình 2-20: Module Relay Mức Cao. .............................................................................. 20
Hình 2- 21: Module Relay mức thấp. ............................................................................. 20
Hình 2-22: Khung truyền UART. .................................................................................. 22
Hình 2-23: Sơ đồ truyền SPI giữa 2 thiết bị. .................................................................. 23
Hình 2-24: Truyền SPI nhiều thiết bị. ............................................................................ 24
Hình 2-25: Chế độ cơ bản của SPI. ................................................................................ 25
Hình 2-26: Truyền gửi dữ liệu song công. ..................................................................... 25
Hình 2-27: Sơ đồ truyền I2C. ......................................................................................... 26
Hình 3-1: Sơ đồ khối. ..................................................................................................... 28
Hình 3-2: Sơ đồ nguyên lý nhiệt độ. .............................................................................. 33
Hình 3-3: Cảm biến siêu âm........................................................................................... 33
Hình 3-4: Sơ đồ nguyên lý Realtime. ............................................................................. 34
Hình 3-5: Sơ đồ nguyên lý LCD 20x4. .......................................................................... 35
Hình 3-6: Sơ đồ nguyên lý Relay. .................................................................................. 35
Hình 3-7: Sơ đồ nguyên lý L298. ................................................................................... 36
vii
Hình 3-8: Sơ đồ nguyên lý RFID. .................................................................................. 36
Hình 3-9: Sơ đồ nguyên lý toàn mạch. .......................................................................... 37
Hình 4-1: Sơ đồ bố trí linh kiện mặt trên. ...................................................................... 39
Hình 4-2: Sơ đồ bố trí linh kiện lớp dƣới. ...................................................................... 40
Hình 4-3: Lƣu đồ chính. ................................................................................................. 41
Hình 4-4: Lƣu đồ điều khiển máy bơm. ......................................................................... 42
Hình 4-5: Lƣu đồ tắm cho heo. ...................................................................................... 43
Hình 4-6: Lƣu đồ điều khiển bật quạt. ........................................................................... 44
Hình 4-7: Lƣu đồ hoạt động dọn vệ sinh. ...................................................................... 45
Hình 4-8: Lƣu đồ điều khiển bật đèn. ............................................................................ 46
Hình 4-9: Lƣu đồ điều khiển mái hiên. ......................................................................... 47
Hình 4-10: Lƣu đồ điều khiển cho ăn. ........................................................................... 48
Hình 4-11: Lƣu đồ cho uống. ......................................................................................... 49
Hình 4-12: Lƣu đồ gửi thông tin giữa ESP và Arduino. ................................................ 50
Hình 4-13: Giao diện phần mềm Arduino. .................................................................... 50
Hình 4-14: Cài đặt Arduino bƣớc 2. .............................................................................. 51
Hình 4-15: Cài đặt Arduino bƣớc 3. .............................................................................. 52
Hình 4-16: Cài đặt Arduino bƣớc 5. .............................................................................. 52
Hình 4-17: Lƣu đồ hoạt động của ESP. ........................................................................ 53
Hình 4-18: Giao diện phần mềm Visual Studio. ............................................................ 54
Hình 4-19: Tải và chạy file.exe ...................................................................................... 55
Hình 4-20: Cài đặt Visual Studio. .................................................................................. 55
Hình 4- 21: Cài đặt Visual Studio bƣớc 3. ..................................................................... 56
Hình 4-22: Cài đặt Android Studio bƣớc 1. ................................................................... 57
Hình 4-23: Cài đặt Android Studio bƣớc 2. ................................................................... 57
Hình 4-24: Cài đặt Visual Studio bƣớc 3. ...................................................................... 58
Hình 4-25: Cài đặt Android Studio bƣớc 4. ................................................................... 58
Hình 4-26: Cài đặt Visual Studio bƣớc5 . ...................................................................... 59
Hình 4-27: Tạo project mớit rong Android. ................................................................... 59
Hình 4-28: Tạo project mới trong Android. ................................................................... 60
Hình 4-29: Chọn màn hình. ............................................................................................ 61
Hình 4-30: Chọn phiên bản Android. ............................................................................. 61
Hình 4-31: Đặt tên cho màn hình. .................................................................................. 62
Hình 4-32: Chọn thiết bị để nạp chƣơng trình. .............................................................. 62
Hình 5-1: Sản phẩm thi công. ........................................................................................ 64
Hình 5-2: Giao diện App Chính. .................................................................................... 65
Hình 5-3: Giao diện web FireBase. ................................................................................ 66
vii
Hình 5-4: Bảng điều khiển hoạt động. ........................................................................... 67
Hình 5-5: Màn hình LCD 20x4 hiển thị. ........................................................................ 67
Hình 5-6: Bảng làm việc khi nết nối Arduino. ............................................................... 68
vii
LIỆT KÊ BẢNG
Bảng 2-1: Chức năng của các chân màn hình LCD 20x4 ................................................ 6
Bảng 2-2: Bảng tần số hoạt động. .................................................................................... 8
Bảng 4-1: Danh sách linh kiện. ...................................................................................... 38
viii
TÓM TẮT
Ngày nay công nghệ trở nên hiện đại, xu hƣớng mọi thứ điều sẽ đƣợc kết nối và
điều khiển thông qua mạng không dây wifi (Wireless Fidelity) và điều khiển các thiết
bị theo tự động hóa. Với ý tƣởng giải quyết những bất cập của điều khiển tự động,
nhóm chúng em xin đƣa ra đề tài: Thiết Kế Và Thi Công Mô Hình Hệ Thống Và Quản
Lý Trang Trại Heo.
Hệ thống có khả năng gửi nhận thông tin, lƣu thông tin vào thẻ Tag RFID, nhận
lệnh từ điện thoại, cảm biến và thời gian để điều khiển các thiết bị trong mô hình trang
trại heo nhƣ đèn, quạt, dọn vệ sinh, tắm cho heo, cho ăn và có thể giám sát các hoạt
động trên web FireBase.
Với đề tài này, nhóm hi vọng sẽ làm cơ sở nghiên cứu cho các nhóm sau có thể
mở rộng, phát triển nữa. Nếu đƣợc điều chỉnh tốt, ý tƣởng này kết hợp với mô hình
trang trại heo thực tế với quy mô lớn sẽ trở thành một hệ thống lớn đáp ứng nhu cầu
điều khiển, quản lý tất cả các thiết bị trong trang trại heo một cách hiện đại, nâng cao
đời sống tiện ích trong chăn nuôi.
ix
CHƢƠNG 1. TỔNG QUAN
CHƢƠNG 1: TỔNG QUAN
1.1 ĐẶT VẤN ĐỀ
Ngày nay, xã hội ngày càng phát triển mạnh mẽ, kỹ thuật ngày càng hiện đại nên
nhu cầu về trao đổi thông tin giải trí, nhu cầu về điều khiển các thiết bị từ xa ngày càng
cao. Và những hệ thống dây cáp phức tạp lại không thể đáp ứng nhu cầu này. Vì vậy
công nghệ không dây đã ra đời và phát triển mạnh mẽ, tạo rất nhiều thuận lợi cho con
ngƣời trong đời sống hằng ngày.
Hiện nay, việc đƣa máy móc, công nghệ hiện đại vào sản suất nông nghiệp trên
thế giới rất phổ biến, đặt biệt là các nƣớc phát triển Tuy nhiên, so với thế giới ngành
nông nghiệp nƣớc ta còn khá lạc hậu, trong đó có chăn nuôi, mô hình sản xuất nhỏ lẻ, ít
ứng dụng khoa học, công nghệ hiện đại vào sản xuất, dẫn đến năng suất thấp, chất
lƣợng kém. Chính vì vậy, nhằm góp phần đƣa công nghệ kĩ thuật áp dụng vào chăn
nuôi trong nƣớc nhiều hơn, ứng dụng đƣợc thực tế hơn nên nhóm đã quyết định làm đề
tài: THIẾT KẾ VÀ THI CÔNG MÔ HÌNH HỆ THỐNG VÀ QUẢN LÝ TRANG
TRẠI HEO.
Ở những đề tài trƣớc chỉ dừng lại ở việc quản lí vật nuôi nhờ vào RFID mà chƣa
kết hợp đƣợc việc quản lí và chăn nuôi. Đối với đề tài này, nhóm sẽ kết hợp giữa quản
lí và chăn nuôi, đồng thời sử dụng điện thoại để quản lí từ xa, từ đó có thể xử lý các
trục trặc, sự cố.
1.2 MỤC TIÊU CỦA ĐỀ TÀI
Thiết kế, thi công đƣợc mô hình quản lí trang trại nuôi heo gồm các mục tiêu cụ
thể:
Thiết kế, thi công đƣợc phần cứng của mạch điều khiển.
Viết đƣợc phần mềm điều khiển arduino mega 2560, điều khiển hệ thống cho
ăn, uống tự động, điều khiển đƣợc hệ thống tắm, dọn vệ sinh tự động, điều
khiển đƣợc hệ thống làm mát tự động cho heo, mái che cho chuồng trại.
Viết đƣợc phần mềm giao tiếp giữa arduino mega 2560 và máy tính, điện
thoại.
Viết đƣợc phần mềm C# quản lí thông tin của heo.
Viết đƣợc ứng dụng android nhận thông tin và cảnh báo của trang trại heo.
1
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 1. TỔNG QUAN
1.3 NỘI DUNG THỰC HIỆN
Nội dung 1: Giao tiếp Module ESP-12 8266 với Arduino Mega 2560.
Nội dung 2: Lƣu thông tin trên thẻ Tag của Module RFID, thiết lập giao diện
C# trên Visual Studio.
Nội dung 3: Điều khiển các thiết bị theo cảm biến và thời gian thực.
Nội dung 4: Thiết kế và lập trình ứng dụng trên Android Studio và điều khiển
thiết bị qua điện thoại.
Nội dung 5: Hiển thị thông tin trên web FireBase.
Nội dung 6: Thiết kế mô hình sản phẩm.
Nội dung 7: Đánh giá kết quả thực hiện.
1.4 GIỚI HẠN CỦA ĐỀ TÀI
Sử dụng vi điều khiển arduino mega 2560 để điều khiển.
Chỉ thiết kế mô hình giám sát nhỏ trong trang trại nuôi heo.
Chỉ sử dụng động cơ DC để điều khiển mái che, để mô phỏng mô hình trang
trại.
Chỉ sử dụng động cơ bƣớc, đông cơ DC để điều khiển hệ thống cho ăn, uống tự
động phù hợp mô hình nhỏ.
Chỉ có thể giám sát trang trại bằng thời gian thực, điện thoại thông qua phần
mềm Android Studio.
Chỉ sử dụng điều khiển các hệ thống cho ăn, uống, dọn vệ sinh, tắm rửa, làm
mát và mái che một cách tự động cho trang trại quy mô nhỏ, số lƣợng 5 con.
1.5 BỐ CỤC ĐỒ ÁN
Chƣơng 1: Tổng Quan.
Chƣơng 2: Cơ Sở Lý Thuyết.
Chƣơng 3: Tính Toán Và Thiết Kế Hệ Thống.
Chƣơng 4: Thi Công Hệ Thống.
Chƣơng 5: Kết Quả, Nhận Xét, Đánh Giá.
Chƣơng 6: Kết Luận và Hƣớng Phát Triển.
Chƣơng 1: Tổng Quan.
2
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 1. TỔNG QUAN
Chƣơng này trình bày vấn đề dẫn nhập, lý do chọn đề tài, mục tiêu, nội dung
nghiên cứu, các giới hạn và bố cục đồ án.
Chƣơng 2: Cơ Sở Lý Thuyết.
Giới thiệu các linh kiện, thiết bị sử dụng thiết kế hệ thống, các chuẩn truyền,
giao thức.
Chƣơng 3: Tính Toán Và Thiết Kế Hệ Thống.
Tính toán thiết kế, đƣa ra sơ đồ nguyên lí của hệ thống.
Chƣơng 4: Thiết Kế Hệ Thống.
Thiết kế hệ thống, lƣu đồ, đƣa ra giải thuật và chƣơng trình.
Chƣơng 5: Kết Quả, Nhận Xét, Đánh Giá.
Đƣa ra kết quả đạt đƣợc sau một thời gian nghiên cứu, một số hình ảnh của hệ
thống, đƣa ra những nhận xét, đánh giá toàn bộ hệ thống.
Chƣơng 6: Kết Luận và Hƣớng Phát Triển.
Trình bày những kết luận về hệ thống những phần làm rồi và chƣa làm, đồng
thời nếu ra hƣớng phát triển cho hệ thống.
3
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
CHƢƠNG 2: CƠ SỞ LÝ THUYẾT
2.1 QUY TRÌNH HOẠT ĐỘNG CỦA HỆ THỐNG
Mạch đƣợc điều khiển bởi Module Arduino Mega 2560 đóng vai trò điều khiển
trung tâm, Arduino điều khiển tiếp nhận giao tiếp với các module khác trong đề tài
nhƣ: Module RFID MFRC522, WifiEsp V1, Cảm biến mƣa, Cảm biến siêu âm, Cảm
biến cân nặng, Module L298, Động cơ DC, LCD 20x4, Cảm biến nhiệt độ. Sự kết hợp
của các thiết bị sẽ tạo nên một hệ thống quản lý heo một cách tốt nhất, hiện đại hơn.
2.2 GIỚI THIỆU PHẦN CỨNG
2.2.1 TỔNG QUAN ARDUINO MEGA 2560
a. Giới thiệu Board Arduino Mega. [7]
Arduino Mega2560 là một vi điều khiển bằng cách sử dụng ATmega2560.
Arduino Mega2560 khác với tất cả các vi xử lý trƣớc giờ vì không sử dụng FTDI chip
điều khiển chuyển tín hiệu từ USB để xử lý. Thay vào đó, nó sử dụng ATmega16U2
lập trình nhƣ là một công cụ chuyển đổi tín hiệu từ USB. Ngoài ra, Arduino Mega2560
cơ bản vẫn giống Arduino Uno R3, chỉ khác số lƣợng chân và nhiều tính năng mạnh
mẽ hơn, nên các bạn vẫn có thể lập trình cho con vi điều khiển này bằng chƣơng trình
lập trình cho Arduino Uno R3.
Hình 2-1: Board Arduino Mega 2560.
b. Thông số kỹ thuật:
4
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
Vi điều khiển chính: ATmega2560.
IC nạp và giao tiếp UART: ATmega16U2.
Nguồn nuôi mạch: 5VDC từ cổng USB hoặc nguồn ngoài cắm từ giắc tròn
DC (khuyên dùng 7-9VDC để đảm bảo mạch hoạt động tốt. Nếu bạn cắm 12V
thì IC. ổn áp rất dễ chết và gây hƣ hỏng mạch).
Số chân Digital : 54 (có 15 chân PWM).
Số chân Analog: 16.
Giao tiếp UART: 4 bộ UART.
Giao tiếp SPI: 1 bộ (chân 50 đến 53) dùng với thƣ viện SPI của Arduino.
Giao tiếp I2C: 1 bộ.
Ngắt ngoài: 6 chân.
Bộ nhớ Flash: 256 KB, 8KB sử dụng cho Bootloader.
SRAM: 8 KB.
EEPROM: 4 KB.
Xung clock: 16 MHz.
2.2.2 GIỚI THIỆU LCD 20x4
a. Giới thiệu về màn hình LCD 20x4. [4]
Ở các phần giao tiếp với led 7 đoạn có hạn chế vì chỉ hiển thị đƣợc các số từ 0
đến 9 hoặc số hex từ 0 đến F – không thể nào hiển thị đƣợc các thông tin kí tự khác
nhƣng chúng sẽ đƣợc hiển thị đầy đủ trên LCD có rất nhiều dạng phân biệt theo kích
thƣớc từ vài kí tự đến hàng chục kí tự từ 1 hàng đến vài chục hàng vì vậy để cho thuận
tiện cho việc hiển thị nên chúng ta sử dụng LCD. Ở đây chúng ta sử dụng LCD 20x4
có nghĩa là có 4 hàng, mỗi hàng có 20 kí tự. Màn hình LCD 20x4 sử dụng IC Driver
HD44780. Hỗ trợ giao tiếp dữ liệu 4bits và 8bit có khả năng hiển thị 4 dòng mỗi dòng
20 ký tự màn hình có độ bền cao màn hình LCD 20x4 bao gồm bộ điểu khiển và các
vùng nhớ.
b. Cấu tạo màn hình LCD 20x4
Đƣợc cấu tạo gồm 14 chân: Các chân cấp nguồn Chân số 1 là chân nối mass(0V),
chân thứ 2 là chân VDD nối với nguồn 5V. Chân thứ 3 thƣờng đƣợc nối với contrast
thƣờng nối với biến trở. Các chân điều khiển chân số 4 là chân RS dùng để điều khiển
lựa chọn thanh ghi Chân RW dùng để quá trình đọc và ghi Chân E là chân cho phép
5
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
các chân dữ liệu D7-D0: Chân số 7 đến chân số 14 là 8 chân dùng để trao đổi giữa thiết
bị và LCD.
Hình 2-2: Màn hình LCD 20x4.
c. Chức năng và thông số hoạt động của LCD 20x4
Bảng 2-1: Chức năng của các chân màn hình LCD 20x4
STT TÊN CẤU CHỨC NĂNG
CHÂN HÌNH
1 VSS Power GND
2 VDD Power +5V
3 VO analog Contrast Control
4 RS Input RS=0 chọn thanh ghi lệnh
RS=1chọn thanh ghi giữ liệu
5 RW Input RW=0 thanh ghi viết
RW=1 thanh ghi đọc
6 E Input Cho phép
7 D0
8 D1
9 D2 Chân truyền dữ liệu
10 D3 I/0
6
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
11 D4
12 D5
13 D6
14 D7
Các thông số hoạt động và giới hạn:
- Có 3 vùng nhớ nội bộ: Bộ nhớ DDRAM Bộ nhớ phát ký tự ROM- CGROM bộ
nhớ phát ký tự RAM-CGRAM
- Khả năng hiển thị 20 ký tự mỗi hàng gồm 4 dòng.
- Giao tiếp 4bits hoặc 8bits.
2.2.3 GIỚI THIỆU MODULE RFID MFRC522
a. Tổng quan về Module MFRC522 [7]
Module RFID MFRC522 với mức giá rẻ và thiết kế nhỏ gọn module này là sự lựa
chọn hàng đầu cho các ứng dụng về đọc ghi thẻ RFID.Module MFRC522 đƣợc sử
dụng trong đồ án với mục đích kiểm soát đóng mở cửa bằng giao thức giữa thẻ Tag và
Module MFRC522, đƣợc kết nối ới Arduino UNO. Thẻ Tag giao tiếp với Module
MFRC522 đƣợc chấp nhận (là thẻ đúng), Module sẽ chuyển thông tin sang Arduino xử
lý thực hiện tác vụ yêu cầu đã lập trình sẵn (ở đây là đóng mở cửa). Đầu đọc
MFRC522 sử dụng IC MFRC522 của Philip dùng để đọc và ghi dữ liệu cho thẻ NFC
tần số 13.56 MHZ.
Hình 2-3: Module RFID.
7
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
Hình 2-4: Sơ đồ chân RFID.
CHƢƠNG 2. CƠ SỞ LÝ THUYẾT
b. Chức năng chân và thông số kỹ thuật
Tần số hoạt động:
Tần số hoạt động là tần số điện từ mà thẻ tag dùng để giao tiếp hoặc thu đƣợc
năng lƣợng. Phổ điện từ mà RFID thƣờng hoạt động là tần số thấp (LF), tần số cao
(HF), siêu cao tần (UHF) và vi sóng (Microwave). Vì hệ thống RFID truyền đi bằng
sóng điện từ, chúng cũng đƣợc điều chỉnh nhƣ thiết bị radio. Hệ thống RFID không
đƣợc gây cản trở các thiết bị khác, bảo vệ các ứng dụng nhƣ radio cho c...ấp cho các module trên:
It=
( )
Từ đó ta chọn nguồn dòng là 2(mA).
Nguồn cung cấp cho các thiết bị là 5V, nên ta chọn nguồn áp là 5V.
Dùng một nguồn 3.3V để cung cấp riêng cho ESP và RFID.
Điều khiển thiết bị 220V bằng lƣới điện 220V thông qua role.
3.2.3 SƠ ĐỒ NGUYÊN LÝ CỦA TOÀN MẠCH
Hình 3-9: Sơ đồ nguyên lý toàn mạch.
37
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
CHƢƠNG 4. THI CÔNG HỆ THỐNG
4.1 THI CÔNG HỆ THỐNG:
Bảng liệt kệ linh kiện sử dụng:
Bảng 4-1: Danh sách linh kiện.
STT Tên linh kiện Thông số Dạng vỏ
1 Arduino Mega 2560 7-9VDC ATmega2560
2 Module RC522 3.3V,13-26mA,13.56Hz 40 x 60 mm
3 Trở 10K 0207/10
4 Động cơ DC , 1.5-24W 33x25.8x2mm
5 LCD LCD 20x4, 16 chân, 2.7V~5V, 5mm
350uA~16mA
6 Module L298 43x43x27mm
7 ESP8266-12
8 Adapter 5V-1A,5V-2A 5.5mm
9 Domino 2 chân CON2 KF128
10 Cảm biến mƣa 5V,100mA 30 x 16mm
54 x 40mm
11 Cảm biến siêu âm 5V-2mA
12 Cảm biến DHT11 3 - 5 V, 2.5mA 15x12x5.5mm.
38
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Sơ đồ bố trí linh kiện lớp trên và lớp dƣới của mạch đƣợc thể hiện ở Hình 4-1 và
Hình 4-2.
Hình 4-1: Sơ đồ bố trí linh kiện mặt trên.
39
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Hình 4-2: Sơ đồ bố trí linh kiện lớp dưới.
4.2 LƢU ĐỒ GIẢI THUẬT.
4.2.1 LƢU ĐỒ GIẢI THUẬT ARDUINO MEGA 2560.
Lƣu đồ chƣơng trình chính.
40
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BẮT ĐẦU
CẤU HÌNH CHO HỆ
THỐNG
4
KIỂM TRA CÓ DỮ LIỆU
ĐÚNG VÀO CHƯƠNG
NHẬN TỪ TRÌNH EVENT
MÁY TÍNH KHÔNG?
4
SAI
NHẬN ĐƯỢC ‘1’ GHI THÔNG TIN
3 ĐÚNG
SAI
ĐÚNG
VÀO CHƯƠNG KIỂM TRA CÓ DỮ LIỆU
TRÌNH EVENT NHẬN TỪ ESP KHÔNG?
ĐÚNG
NHẬN ĐƯỢC ‘3’ TẠO THẺ MỚI
SAI
KIỂM TRA
SAI
NHẬN ĐƯỢC
SAI
ĐÚNG
THỰC HIỆN TUẦN TỰ CÁC
XUẤT RA 1 GIÁ TRỊ
CHUONG TRÌNH CON
ĐỂ ĐIỀU KHIỂN
THIẾT BỊ
KẾT THÚC
Hình 4-3: Lưu đồ chính.
Giải thích lƣu đồ:
- Khi có một sự kiện đang xảy ra, ngay lậy tức vi xử lý sẽ gọi những hàm tƣơng
ứng trong sự kiện này ra để làm việc.
- Nếu không có sự kiện nào đặc biệt, các hàm có trong void loop sẽ đƣợc thực
hiện một cách tuần tự.
Lƣu đồ điều khiển máy bơm.
41
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BẮT ĐẦU
SAI SAI
BƠM=0 MỨC NƯỚC THẤP
ĐÚNG
ĐÓNG RELAY MỞ RELAY
SAI
MỨC NƯỚC THẤP
ĐÚNG
ĐÓNG RELAY MỞ RELAY
SAI
MỨC NƯỚC CAO
ĐÚNG
MỞ RELAY ĐÓNG RELAY
KẾT THÚC
.
Hình 4-4: Lưu đồ điều khiển máy bơm.
Giải thích lƣu đồ:
- Nếu không có điều khiển mở trên app điện thoại thì máy bơm hoạt động tự
động theo mực nƣớc của hồ chứa. Nếu có lệnh mở máy bơm, nếu mực nƣớc bé
hơn 12cm, mở máy bơm để bơm nƣớc, còn không thì tắt máy bơm, điều kiện
này tránh cho bơm nƣớc tràn hồ chứa.
- Khi hoạt động tự động, nếu mực nƣớc hồ thấp hơn 4cm thì mở máy bơm, nếu
mực nƣớc lớn hơn 12cm, tức là đầy hồ, tắt máy bơm.
42
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Lƣu đồ điều khiển tắm cho heo.
BẮT ĐẦU
SAI
ĐÚNG GIỜ
ĐÚNG
NGƯNG TẮM
TẮM HEO
HEO
SAI
HẾT GIỜ
ĐÚNG
NGƯNG TẮM
TẮM HEO
HEO
KẾT THÚC
Hình 4-5: Lưu đồ tắm cho heo.
Giải thích lƣu đồ:
Khi đúng giờ tắm heo là 8 giờ sáng, bật hệ thống phun nƣớc để tắm heo, tắm heo
trong vòng 5 phút rồi tắt hệ thống tắm heo.
43
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Lƣu đồ điều khiển nhiệt độ chuồng heo.
BẮT ĐẦU
SAI
QUẠT=0
ĐÚNG
SAI
T>30 ĐỘ
ĐÚNG
BẬT QUẠT KHÔNG LÀM GÌ BẬT QUẠT
SAI
T<24 ĐỘ
ĐÚNG
TẮT QUẠT KHÔNG LÀM GÌ
KẾT THÚC
Hình 4-6: Lưu đồ điều khiển bật quạt.
Giải thích lƣu đồ:
44
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
- Khi không có điều khiển bằng tay qua app android, quạt sẽ hoạt động tự động
theo nhiệt độ môi trƣờng, nếu có điều khiển bật, quạt sẽ bật lên.
- Khi hoạt động tự động, nếu nhiệt độ lơn hơn 30 độ, quạt sẽ bật, đến khi nhiệt
độ bé hơn 24 độ thì tắt.
Lƣu đồ hoạt động của hệ thống dọn vệ sinh.
BẮT ĐẦU
SAI
VE_SINH=0
ĐÚNG
SAI
ĐÚNG GIỜ
ĐÚNG
BẬT VỆ SINH TẮT VỆ SINH BẬT VỆ SINH
SAI
HẾT GIỜ
ĐÚNG
TẮT VỆ SINH BẬT VỆ SINH
KẾT THÚC
Hình 4-7: Lưu đồ hoạt động dọn vệ sinh.
Giải thích lƣu đồ:
Khi không có điều khiển bằng tay trên app android, hệ thống hoạt động tự động
theo giờ. Nếu có điều khiển bằng tay, hệ thống sẽ bật lên để dọn rửa chuồng.
45
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Lƣu đồ hoạt động của đèn trong chuồng heo.
BẮT ĐẦU
SAI
DEN=0
ĐÚNG
SAI
ĐÚNG GIỜ
ĐÚNG
BẬT ĐÈN TẮT ĐÈN BẬT ĐÈN
SAI
HẾT GIỜ
ĐÚNG
TẮT ĐÈN BẬT ĐÈN
KẾT THÚC
Hình 4-8: Lưu đồ điều khiển bật đèn.
46
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Giải thich lƣu đồ:
- Khi không có điều khiển bằng tay trên app android, đèn hoạt động theo thời
gian, nếu có điều khiển mở, đèn sẽ đƣợc mở lên.
- Khi hoạt động tự động theo thời gian, đèn đƣợc mở từ 17 giờ chiều tới 19 giờ
tối.
Lƣu đồ hoạt động của mái hiên.
BẮT ĐẦU
SAI
TRỜI KHÔNG MƯA
ĐÚNG
SAI
ĐÚNG GIỜ
ĐÚNG
MỞ MÁI HIÊN ĐÓNG MÁI HIÊN ĐÓNG MÁI HIÊN
KẾT THÚC
Hình 4-9: Lưu đồ điều khiển mái hiên.
Giải thích lƣu đồ:
- Khi trời mƣa, mái hiên sẽ đƣợc đóng lại, khi trời nắng, mái hiên sẽ hoạt động
theo thời gian.
- Khi trời nắng, mái hiên mở từ 6 giờ sáng tới 9 giờ sáng, và từ 15 giờ tới 17 giờ.
47
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Lƣu đồ cho ăn.
BẮT ĐẦU
SAI
ĐÚNG GIỜ
ĐÚNG
MỞ VAN ĐÓNG VAN
SAI
T_MỞ > T_ĐẶT
ĐÚNG
ĐÓNG VAN MỞ VAN
KẾT THÚC
Hình 4-10: Lưu đồ điều khiển cho ăn.
Giải thích lƣu đồ:
Khi đúng giờ cho ăn, van đƣợc mở, lƣợng thức ăn cho heo đƣợc tính toán dựa
vào thời gian mở, van mở trong vòng 10 giây rồi đóng lại cho tới lần ăn kế
tiếp.
48
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Lƣu đồ mở van nƣớc xuống máng.
BẮT ĐẦU
SAI
HẾT NƯỚC
ĐÚNG
MỞ VAN
SAI
NƯỚC ĐẦY
ĐÚNG
ĐÓNG VAN MỞ VAN
KẾT THÚC
Hình 4-11: Lưu đồ cho uống.
Giải thích lƣu đồ:
Khi heo uống hết nƣớc, mở van ra để thêm nƣớc xuống máng nƣớc, đủ nƣớc thì
đóng van lại.
Lƣu đồ nhận, gửi thông tin giữa Arduino và ESP.
49
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
3
ĐÚNG
KIỂM TRA KÍ TỰ TỪ ESP
SO SÁNH GIÁ TRỊ
TRONG CHƯƠNG
SAI TRÌNH EVENT
XUẤT GIÁ TRỊ
TƯƠNG ỨNG
KẾT THÚC
Hình 4-12: Lưu đồ gửi thông tin giữa ESP và Arduino.
Giải thích lƣu đồ:
- Khi ESP nhận các kí tự từ ESP, Arduino nhận đƣợc vào chƣơng trình even,
xuất ra một giá trị tƣơng tứng vào biến để Arduino đọc và thực hiện.
4.2.2 GIỚI THIỆU VỀ ARDUINO IDE
a. Giới thiệu về Arduino IDE.
Là công cụ đƣợc phát triển để lập trình cho các boar Arduino, đƣợc phát triển để
có thể chạy trên các nền tản Windows, MAX OS X và Linux. Arduino là môi trƣờng
50
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
Hình 4-13: Giao diện phần mềm Arduino.
CHƢƠNG 4. THI CÔNG HỆ THỐNG
phát triển tích hợp mã nguồn mở, cho phép ngƣời dùng dễ dàng viết code và nạp nó lên
board mạch. Môi trƣờng phát triển đƣợc viết bằng Java dựa trên ngôn ngữ Arduino là
môi trƣờng phát triển tích hợp mã nguồn mở, cho phép ngƣời dùng dễ dàng viết lập
trình xử lý và phần mềm mã nguồn mở khác. Phần mềm này có thể đƣợc sử dụng với
bất kỳ board mạch Arduino nào.
b. Cài đặt Arduino IDE.
Bƣớc 1: Vào đƣờng link https://www.arduino.cc/en/Main/Software/.
Bƣớc 2: Bấm chuột vào Windows ZIPfile for non admin install .
Hình 4-14: Cài đặt Arduino bước 2.
Bƣớc 3: Bấm vào JUST DOWNLOAD.
51
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Hình 4-15: Cài đặt Arduino bước 3.
Bƣớc 4: Download file cài đặt và giải nén file cài đặt.
Bƣớc 5: Chạy file arduino-1.8.5.
Hình 4-16: Cài đặt Arduino bước 5.
4.2.3 LƢU ĐỒ GIẢI THUẬT CỦA ESP.
Giới thiệu.
ESP đƣợc lập trình trên Aruino IDE. Là thiết bị mở rộng giúp Arduino kết nối
firebase.
Lƣu đồ giải thuật.
52
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
BẮT ĐẦU
KẾT NỐI WIFI
KẾT NỐI FIREBASE
KIỂM TRA THỜI GIAN TỪ ĐÚNG GỬI CHUỖI LÊN
ARDUINO FIREBASE 2
SAI
2
KIỂM TRA KÍ TỰ TỪ ĐÚNG GỬI KÍ TỰ VỪA NHẬN
FIREBASE CHO ARDUINO
SAI
ĐÚNG
KÍ TỰ TƯƠNG ỨNG CHO
KIỂM TRA NHIỆT ĐỘ
ARDUINO
1
SAI
1
Hình 4-17: Lưu đồ hoạt động của ESP.
Giải thích lƣu đồ:
ESP nhận lệnh từ cả app Adroid và Aruino. Khi nhận đƣợc lệnh từ các button
của app Adroid, ESP truyền các kí tự tƣơng ứng xuống Arduino, Arduino nhận đƣợc kí
tự sẽ so sánh và thực hiện lệnh tƣơng ứng.
ESP đọc nhiệt độ và độ ẩm, so sánh với nhiệt độ cài đặt, sau đó gửi kí tự điều
khiển xuống, Arduino đọc, so sánh kí tự đọc đƣợc để đƣa ra lệnh điều khiển quạt.
Tƣơng tự, ESP nhận đƣợc các kí tự từ Arduino và so sánh gửi chuổi thông báo
tƣơng ứng lên Firebase.
4.2.4 LẬP TRÌNH C# TRÊN PHẦN MỀM VISUAL STUDIO.
53
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
a. Giới thiệu Visual Studio. [11]
Visua studio là môi trƣờng phát triển tích hợp từ Microsoft, đƣợc sử dụng để phát
triển các ứng dụng của Microsoft Window, các trang web, các ứng dụng, dịch vụ web.
Visual studio sử dụng nền tanrphast triển phần mềm của Microsoft nhƣ Windows
API, Windows Forms, Windows Presentation Foundation, Windows Store và
Microsoft Silverlight.
Visual studio bao gồm một trình soạn thảo mã hỗ trợ IntelliSense cũng nhƣ cải
tiến mã nguồn. Trình gỡ lỗi tích hợp hoạt động cả về trình gỡ lỗi mức độ mã nguồn và
gỡ lỗi mức độ máy.
Hình 4-18: Giao diện phần mềm Visual Studio.
Visual Studio hỗ trợ nhiều ngôn ngữ lập trình khác nhau và cho phép trình biên
tập mã và gỡ lỗi để hỗ trợ (mức độ khác nhau) hầu nhƣ mọi ngôn ngữ lập trình. Các
ngôn ngữ tích hợp gồm có C, C++ và C++/CLI (thông qua Visual C++), VB.NET
(thông qua Visual Basic.NET), C thăng (thông qua Visual C#) và F thăng (nhƣ của
Visual Studio 2010). Hỗ trợ cho các ngôn ngữ khác nhƣ J++/J thăng, Python và Ruby
thông qua dịch vụ cài đặt riêng rẽ. Nó cũng hỗ trợ XML/XSLT, HTML/XHTML,
JavaScript và CSS.
b. Hƣớng dẩn cài đặt visual studio 2015.
Bƣớc 1: Tải và chạy file Setup.exe.
54
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Hình 4-19: Tải và chạy file.exe
Bƣớc 2: Nhấn Continue để tiếp tục.
Hình 4-20: Cài đặt Visual Studio.
Bƣớc 3: Nhấn vào Install và chờ đợi để phần mềm đƣợc cài đặt, sau khi cài xong
ta restart lại máy.
55
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Hình 4- 21: Cài đặt Visual Studio bước 3.
4.2.5 CHƢƠNG TRÌNH TRÊN ANDROID STUDIO.
a. Giới thiệu Android Studio. [6]
Google cung cấp cho lập trình viên một IDE gọi là Android Studio để phát triển
ứng dụng Android.
Ứng dụng Android yêu cầu một số file cấu hình. Ứng dụng sẽ đƣợc viết chủ yếu
bằng ngôn ngữ lập trình Java. Android studio sẽ sử dụng Android SDK (Android
software development kit) và Gradle tooling để chuyển đổi những file này thành ứng
dụng Android. Nó cho phép biên dịch, đóng gói và deploy và khởi chạy ứng dụng sau
khi đã build xong.
Android SDK bao gồm cả ADB (Android Debug bridge) là 1 công cụ cho phép ta
kết nối tới các thiết bị máy ảo và máy thật để build ứng dụng. Nó cho phép ta quản lý
các thiết bị và hỗ trợ ta debug ứng dụng.
Hầu hết các file cấu hình trong Android đều dƣới dạng XML. Android Studio
cung cấp các trình sửa file cho từng file riêng.
b. Cài đặt Android Studio. [8]
Bƣớc 1: Vào đƣờng link: https://developer.android.com/sdk/index.html để
download android studio.
56
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Hình 4-22: Cài đặt Android Studio bước 1.
Bƣớc 2: Chạy file vừa tải đƣợc.
Hình 4-23: Cài đặt Android Studio bước 2.
Bƣớc 3: Nhấn next.
57
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Hình 4-24: Cài đặt Visual Studio bước 3.
Bƣớc 4: Tích vào tất cả các ô nhƣ hình bên dƣới, sau đó nhấn next.
Hình 4-25: Cài đặt Android Studio bước 4.
Bƣớc 5: Nhấn vào “I Agree” để chấp nhận các điều khoảng của nhà sản xuất và
chờ android studio đƣợc cài vào máy.
58
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Hình 4-26: Cài đặt Visual Studio bước5 .
c. Cách sử dụng Android Studio.
Trƣớc tiên vào phần mềm Android Studio, sẽ thấy màn hình nhƣ hình dƣới và
Hình 4-Tạo27: projectTạo project mới trong mớit Android. rong Android.
chọn theo dấu mũi tên màu đỏ.
59
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Nhập vào:
- Application Name: tên ứng dụng của muốn lập trình.
- Company Domain: có thể đặt theo định dạng sau tên mình. tên công ty. tên ứng
dụng mình đang làm.
- Project location: đƣờng dẫn chứa tệp tin chƣơng trình.
Tạo projectHình mới 4-28 trong: Tạo Android project. mới trong Android.
Sau khi đặt tên xong nhấn Next để qua bƣớc tiếp theo, bƣớc này xuất hiện màn
hình chọn phiên bản Android để lập trình, lƣu ý khi chọn phiên bản Android càng thấp
thì ứng dụng tạo ra sẽ chạy đƣợc trên nhiều thế hệ. (Hình 4-30).
60
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Hình 4-30: Chọn phiên bản Android.
Hình 4-29: Chọn màn hình.
61
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
Đặt tên cho màn hình xong nhấn nút “Finish” chổ khung tròn màu đỏ.
Hình 4-31: Đặt tên cho màn hình.
Hình 4-32: Chọn thiết bị để nạp chương trình.
62
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 4. THI CÔNG HỆ THỐNG
63
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 5. KẾT QUẢ- NHẬN XÉT- ĐÁNH GIÁ
CHƢƠNG 5: KẾT QUẢ, NHẬN XÉT, ĐÁNH
GIÁ
5.1 SẢN PHẨM SAU KHI HOÀN THÀNH:
5.1.1 SẢN PHẨM:
Hình 5-1: Sản phẩm thi công.
Do quy mô của mô hình nên chúng ta thiết kế các thiết bị hợp lý để phù hợp với
kích thƣớc mô hình, các thiết bị đƣợc đƣa ra bên trong và xung quanh của chiếc hộp
hình chữ nhật. Bố trí thiết bị sao cho hợp lý, sắp xếp dây điện để tăng tính thẩm mỹ
cao.
5.1.2 KIẾN THỨC CÓ ĐƢỢC TRONG THIẾT KẾ SẢN PHẨM:
Kiến thức về vi xử lý thì học đƣợc cách lập trình Arduino, hiểu biết về ngắt, ngoài
ra còn biết giao tiếp với module WIFI qua USART và giao tiếp thẻ RFID qua chuẩn
SPI.
64
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 5. KẾT QUẢ- NHẬN XÉT- ĐÁNH GIÁ
Biết đƣợc cách lập trình ứng dụng trên Android, cách tạo một giao diện, ánh xạ
các phần tử bên giao diện qua giao diện lập trình, hiểu thêm đƣợc về giao thức mạng
cũng nhƣ là cách giao tiếp truyền nhận dữ liệu thông qua mạng không dây WIFI.
Hiểu thêm đƣợc các kiến thức về các cảm biến nhƣ: cảm biến mƣa, siêu âm,
Realtime, nhiệt độ độ ẩm, Module Relay điều khiển thiết bị xoay chiều,
Có thể sử dụng phần mềm công cụ Altium để thiết kế sơ đồ nguyên lý và bố trí
linh kiện trên mạch.
Biết đƣợc cách lập trình C# trên Visual Studio, cách tạo một giao diện, kết nối
các phần tử bên giao diện qua giao diện lập trình, hiểu thêm đƣợc về giao thức cổng
SerialPort cũng nhƣ là cách giao tiếp truyền nhận dữ liệu thông quachuẩn UART.
5.2 KẾT QUẢ CHẠY HỆ THỐNG:
5.2.1 QUÁ TRÌNH CHẠY ỨNG DỤNG TRÊN ĐIỆN THOẠI:
Giao diện của ứng dụng khi có dữ liệu từ điện thoại gửi lên FireBase thì trên
Web sẽ hiển thị.
Hình 5-2: Giao diện App Chính.
65
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 5. KẾT QUẢ- NHẬN XÉT- ĐÁNH GIÁ
Khi chạy hệ thống các hoạt động của heo sẽ đƣợc hiển thị trên web FireBase và sẽ
cập nhật liên tục qua wifi.
Hình 5-3: Giao diện web FireBase.
5.2.2 QUÁ TRÌNH VẬN HÀNH TRÊN PHẦN CỨNG HỆ THỐNG:
- Sau khi cấp nguồn cho phép bắt đầu hệ thống hoạt động, các thiết bị bắt đầu
hoạt động.
- Các thiết bị sẽ hoạt động theo thời gian mình cài đặt và theo các cảm biến khi
có tín hiệu vào.
66
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 5. KẾT QUẢ- NHẬN XÉT- ĐÁNH GIÁ
Hình 5-4: Bảng điều khiển hoạt động.
- Màn hình LCD 20x4 sẽ hiển thị các trạng thái của thiết bị máy bơm, đèn, vệ
sinh, quạt, tắm và thời gian thực.
Hình 5-5: Màn hình LCD 20x4 hiển thị.
5.2.3 QUÁ TRÌNH VẬN HÀNH TRÊN PHẦN MỀM VISUAL STUDIO:
Sau khi chạy chƣơng trình thì trên màn hình hiển thị bảng cho phép bắt đầu quẹt
thẻ tag.
67
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 5. KẾT QUẢ- NHẬN XÉT- ĐÁNH GIÁ
Hình 5-6: Bảng làm việc khi nết nối Arduino.
Các bƣớc thực hiện đọc thẻ RFID trên phần mềm Visual Studio:
Bƣớc 1: Nhấp nút “kết nối” kết nối Serialport của Visual Studio với Arduino
để truyền nhận dữ liệu.
Bƣớc 2: Đƣa thẻ vào Module RFID các thông tin lƣu trên thẻ sẽ đƣợc đọc ra
hiển thị lên các text trong bảng.
Bƣớc 3: Nhấp nút “Tạo thẻ mới” có nghĩa là SetkeyA làm cho thông tin cũ trên
thẻ sẽ đƣợc xóa hết và bắt đầu thêm thông tin mới.
Bƣớc 4: Sau khi chúng ta thêm thông tin trên các TextBox thì chúng ta sẽ nhấp
nút “Thêm Thông Tin”. Hệ thống sẽ gửi thông báo “Bạn có chắc muốn thêm
thông tin” nhấp “OK” để thêm thông tin.
68
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
CHƢƠNG 6. KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN
CHƢƠNG 6: KẾT LUẬN VÀ HƢỚNG PHÁT
TRIỂN
6.1 KẾT LUẬN
Hệ thống điều khiển đƣợc các thiết bị cơ bản cho mô hình chăn nuôi nhƣ cho ăn,
uống, điều khiển nhiệt độ nuôi, bật đèn, máy bơm nƣớc, tiến đến chăn nuôi tự động
một cách chuyên nghiệp. Việc quản lý hệ thống dễ dàng qua nút nhấn và LCD ngay tại
trang trại.
Việc quản lý từ xa nhờ vào ứng dụng của Android Studio giúp ngƣời nuôi nắm
bắt hoạt động của trang trại dễ dàng, tạo nên sự yên tâm và phản ứng kiệp thời khi đi
xa, tuy nhiên chƣa kết nối đƣợc nhiều wifi và tốc độ truyền nhận còn chậm.
Thông tin vật nuôi đƣợc lƣu giữ, quản lý thông qua hệ thống RFID với thẻ tag
đƣợc gắn trên vật nuôi, sau đó xuất thông tin ra trên giao diện C# khi thẻ đƣợc đọc giúp
ngƣời nuôi quản lý đƣợc dễ dàng. Việc thêm thẻ mới cũng nhƣ ghi thông tin mới cho
heo cũng thuận tiện hơn khi thực hiện qua giao diện này.
Tuy nhiên, việc quản lý, giám sát quy mô lớn bị hạn chế, chƣa phân ra đƣợc độ
tuổi heo nuôi để có những thông số phù hợp cho chăn nuôi, tiến đến chăn nuôi một
cách chuyên nghiệp, quy mô lớn.
6.2 HƢỚNG PHÁT TRIỂN
Phát triển theo hƣớng chăn nuôi quy mô lớn, khép kín. Tự động hóa hoạt động
của trang trại từ đầu vào đến đầu ra.
Phân chia độ tuổi, mục đích nuôi để có chế độ chăm sóc riêng, phù hợp cho sự
phát triển của heo, tạo nên năng suất cao.
Việc quản lý thông tin heo chi tiết hơn, giúp ngƣời nuôi đảm bảo các tiêu chuẩn
về thực phẩm sạch, có thể xuất khẩu qua các nƣớc.
69
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
TÀI LIỆU THAM KHẢO
TÀI LIỆU THAM KHẢO
Sách Tham Khảo
[1] Trần Thu Hà, Trƣơng Thị Bích Ngà, Nguyễn Thị Lƣỡng, Bùi Thị Tuyết Đan, Phù
Thị Ngọc Hiếu, Dƣơng Thị Cẩm Tú, “Giáo trình điện tử cơ bản”, Đại Học Sƣ Phạm
Kỹ Thuật Tp.HCM 21/1/2013.
[2] Nguyễn Văn Hiệp, Đinh Quang Hiệp, “Giáo trình lập trình Android Cơ Bản”, NXB
Đại Học Quốc Gia 2015.
[3] Nguyễn Việt Hùng, Nguyễn Ngô Lâm, Nguyễn Văn Phúc, “Giáo Trình Truyền Số
Liệu”, Xuất bản ĐH Quốc Gia, Tp.HCM, 2011.
[4] Nguyễn Đình Phú, “Giáo Trình Vi Xử Lý ” , Xuất bản ĐH Quốc Gia, Tp.HCM,
2016.
[5] Nguyễn Văn Hiệp, “Giáo trình Lập trình Android trong ứng dụng điều khiển”, Đại
Học Sƣ Phạm Kỹ Thuật Tp.HCM, 2016.
Trang Web Tham Khảo
[6] Trần Duy Thanh, Bài tập 31: Cách sử dụng SQLite trong Android, 12/6/2013,
https://duythanhcse.wordpress.com/2013/06/12/bai-tap-31-cach-su-dung-sqlite-trong-
android/
[7] Các bài viết trong
[8] Trang https://esp8266.vn/nonos-sdk/basic/uart/
[9] Trang https://github.com/firebase/firebase-arduino
[10] Trang
[11] Trang https://visualstudio.microsoft.com/
[12] Trang
mau-lon-can-thuoc-nam-long.html
[13]Trang https://www.youtube.com/watch?v=-8hKl7qUxZA
70
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
PHỤ LỤC
CHƢƠNG TRÌNH ĐIỀU KHIỂN ANDROID STUDIO
Activity_main.xml------------------------------------------
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:android="">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="100">
<ImageView
android:layout_width="match_parent"
android:layout_height="116dp"
android:layout_weight="50"
android:src="@drawable/logo" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="50"
android:src="@drawable/ute" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="100">
<ImageView
android:id="@+id/device1"
android:layout_width="wrap_content"
android:layout_height="86dp"
android:layout_weight="50"
android:src="@drawable/on" />
<ImageView
android:id="@+id/device2"
71
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="50"
android:src="@drawable/on" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="100">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_d1"
android:text= "DK"
android:layout_weight="50"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_d2"
android:text= "DK"
android:layout_weight="50"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="100">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Nhiệt độ:"
android:layout_weight="30"
android:textSize="40dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/temp"
android:hint="Temp"
android:layout_weight="70"
android:textSize="40dp"/>
<LinearLayout
72
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="100">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Độ ẩm :"
android:layout_weight="30"
android:textSize="40dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Humm"
android:hint="Humm"
android:layout_weight="70"
android:textSize="40dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Author : Ngọc Thạch - Quốc Duyệt"
android:textSize="20dp"
/>
Mainactivity.java----------------------------------------------------
package com.example.admin.doantotnghiep;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.firebase.database.DataSnapshot;
73
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class MainActivity extends AppCompatActivity {
ImageView tt_tb1, tt_tb2;
TextView nd, da;
Button btn1, btn2;
FirebaseDatabase csdl;
DatabaseReference trangthai1, trangthai2, dk_tb1, dk_tb2, nhietdo, doam;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
anh_xa();
csdl = FirebaseDatabase.getInstance();
trangthai1 = csdl.getReference("trangthai_tb1");
trangthai2 = csdl.getReference("trangthai_tb2");
dk_tb1 = csdl.getReference("dk_trangthai_tb1");
dk_tb2 = csdl.getReference("dk_trangthai_tb2");
nhietdo = csdl.getReference("nhietdo");
doam = csdl.getReference("doam");
nhietdo.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
nd.setText(dataSnapshot.getValue().toString());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
doam.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
da.setText(dataSnapshot.getValue().toString());
}
@Override
public void onCancelled(DatabaseError databaseError) {
74
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
}
});
trangthai1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
btn1.setText(dataSnapshot.getValue().toString());
if (btn1.getText().toString().equals("ON")) {
tt_tb1.setImageResource(R.drawable.on);
} else if (btn1.getText().toString().equals("OFF")) {
tt_tb1.setImageResource(R.drawable.off);
} else {
tt_tb1.setImageResource(R.drawable.ute);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
trangthai2.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
btn2.setText(dataSnapshot.getValue().toString());
if (btn2.getText().toString().equals("ON")) {
tt_tb2.setImageResource(R.drawable.on);
} else if (btn2.getText().toString().equals("OFF")) {
tt_tb2.setImageResource(R.drawable.off);
} else {
tt_tb2.setImageResource(R.drawable.ute);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (btn1.getText().toString().equals("ON")) {
75
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
dk_tb1.setValue("OFF");
} else if (btn1.getText().toString().equals("OFF")) {
dk_tb1.setValue("ON");
} else {
dk_tb1.setValue("None");
}
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (btn2.getText().toString().equals("ON")) {
dk_tb2.setValue("OFF");
} else if (btn2.getText().toString().equals("OFF")) {
dk_tb2.setValue("ON");
} else {
dk_tb2.setValue("None");
}
}
});
}
public void anh_xa() {
tt_tb1 = (ImageView) findViewById(R.id.device1);
tt_tb2 = (ImageView) findViewById(R.id.device2);
nd = (TextView) findViewById(R.id.temp);
da = (TextView) findViewById(R.id.Humm);
btn1 = (Button) findViewById(R.id.btn_d1);
btn2 = (Button) findViewById(R.id.btn_d2);
}
}
App------------------------------------------------------------------
76
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.example.admin.doantotnghiep"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"
}
aaptOptions
{
cruncherEnabled=false
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
implementation 'com.google.firebase:firebase-database:12.0.1'
implementation 'com.google.android.gms:play-services:12.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-
core:3.0.2'
}
apply plugin: 'com.google.gms.google-services'
77
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
DoAnTotNghiep-------------------------------------------------------------------
// Top-level build file where you can add configuration options common to all sub-
projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.google.gms:google-services:3.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
CHƢƠNG TRÌNH ĐIỀU KHIỂN VISUAL STUDIO
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
78
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
namespace HeoCard
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// dữ liệu nhận
int i = 0;
char[] data_nhan = new char[102];
private void serialPort1_DataReceived(object sender,
SerialDataReceivedEventArgs e)
{
data_nhan[i] = (char) serialPort1.ReadChar();
if (data_nhan[i] == '*')
{
i = 0;
string ten = "";
string diachi = "";
string nhap = ...+= textBoxNhap.Text;
len = textBoxNhap.TextLength;
for (int i = 0; i < 16 - len; i++)
{
data_gui = data_gui + " ";
}
data_gui += textBoxXuat.Text;
len = textBoxXuat.TextLength;
for (int i = 0; i < 16 - len; i++)
{
data_gui = data_gui + " ";
}
81
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
data_gui += textBoxTiem.Text;
len = textBoxTiem.TextLength;
for (int i = 0; i < 16 - len; i++)
{
data_gui = data_gui + " ";
}
//data_gui += "*";
MessageBox.Show("Bạn có chắc muốn thêm thông tin", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Question);
serialPort1.Write(data_gui);
MessageBox.Show(data_gui);
}
//button kết nối
private void buttonKetnoi_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
//serialPort1.Close();
buttonKetnoi.Text = "Kết nối";
}
else
{
serialPort1.Open();
buttonKetnoi.Text = "Ngƣng kết nối";
}
}
private void textBoxTen_TextChanged(object sender, EventArgs e)
{
}
private void textBoxNhap_TextChanged(object sender, EventArgs e)
{
}
}
}
82
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
CHƢƠNG TRÌNH ĐIỀU KHIỂN ESP8266
#include
#include
#include
#include
#define Hanoizone 3600*7
#define FIREBASE_HOST "pig-manager.firebaseio.com"
#define FIREBASE_AUTH ""
char ssid[] = "Xomtrokhongnuoicho!"; // your network SSID (name)
char pass[] = "Lanheocute50/36T"; // your network password
#define DHTTYPE DHT11
#define DHTPIN 13
DHT dht(DHTPIN, DHTTYPE);
float temp_f;
float h,prevh=20;
float t,prevt=20;
const long interval = 2300;
String tb1,prevtb1="" ;
String tb2,prevtb2="" ;
int j=0,k=0,j4=0,k4=0;
int j2=0,k2=0,j3=0,k3=0;
///////////////////////
unsigned long epoch;
int hh;
int mm;
int ss;
int force_update = 1;
uint32_t ts=0, ts1=0,ts2=0,ts3=0;
unsigned int localPort = 2390;
int ip = 0;
//String IP_of_Server[5] = {"122.155.169.213", "129.6.15.28", "158.108.212.149",
"203.158.118.2", "129.250.35.250"};
IPAddress timeServer;
const char* ntpServerName = "0.asia.pool.ntp.org";
const int NTP_PACKET_SIZE = 48;
byte packetBuffer[ NTP_PACKET_SIZE];
WiFiUDP udp;
unsigned long sendNTPpacket(IPAddress& address)
{
// Serial.println("sending NTP packet...");
memset(packetBuffer, 0, NTP_PACKET_SIZE);
packetBuffer[0] = 0b11100011;
packetBuffer[1] = 0;
83
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
packetBuffer[2] = 6;
packetBuffer[3] = 0xEC;
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;
udp.beginPacket(address, 123);
udp.write(packetBuffer, NTP_PACKET_SIZE);
udp.endPacket();
}
void NTP_get(void)
{
WiFi.hostByName(ntpServerName, timeServer);
sendNTPpacket(timeServer);
delay(1000);
int cb = udp.parsePacket();
if (!cb) {}
else {
udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
unsigned long secsSince1900 = highWord << 16 | lowWord;
const unsigned long seventyYears = 2208988800UL;
epoch = secsSince1900 - seventyYears + Hanoizone;
}
}
void onTimerISR(){
epoch++; //Toggle LED Pin
timer1_write(5000000);
}
void setup() {
Serial.begin(250000);
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
dht.begin();
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
udp.begin(localPort);
NTP_get();
hh = (epoch % 86400L) / 3600;
mm = (epoch % 3600) / 60;
84
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
ss = (epoch % 60);
noInterrupts();
timer1_isr_init();
timer1_attachInterrupt(onTimerISR);
timer1_enable(TIM_DIV16, TIM_EDGE, TIM_SINGLE);//80Mhz->80M dao
động trong 1s, 80Mz/16=5 000 000
timer1_write(5000000);
interrupts();
pinMode(4,OUTPUT);
}
void loop()
{
ts = millis();
if(ts - ts1 >= 5000) {NTP_get();ts1=ts;}
hh = (epoch % 86400L) / 3600;
mm = (epoch % 3600) / 60;
ss = (epoch % 60);
if(ts-ts2>=10000)
{
if (hh < 10) {Serial.print(0); Serial.print(hh) ;}
else if (hh >= 10) {Serial.print(hh) ;}
if (mm < 10) {Serial.print(0); Serial.print(mm) ;}
else if (mm >= 10) {Serial.print(mm) ;}
if (ss < 10) {Serial.print(0); Serial.println(ss) ;}
else if (ss >= 10) {Serial.println(ss) ;}
ts2=ts;
}
if ( ts - ts3 >= 10000 )
{
h = dht.readHumidity();
t = dht.readTemperature();
if(prevh != h) Firebase.setFloat("nhietdo",t);
if(prevt != t) Firebase.setFloat("doam",h);
prevh=h;
prevt=t;
ts3 = ts;
}
tb1=Firebase.getString("dk_trangthai_tb1");
tb2=Firebase.getString("dk_trangthai_tb2");
//điều khiển các thiết bị máy bơm,đèn
if ( tb1=="ON" && prevtb1 != tb1 )
{
85
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
Firebase.setString("trangthai_tb1","ON");
Serial.print('A');
prevtb1 = tb1;
}
else if ( tb1=="OFF" && prevtb1 != tb1 )
{
Firebase.setString("trangthai_tb1","OFF");
Serial.print('a');
prevtb1 = tb1;
}
if ( tb2=="ON" && prevtb2 != tb2 )
{
Firebase.setString("trangthai_tb2","ON");
Serial.write('B');
prevtb2 = tb2;
}
else if ( tb2=="OFF" && prevtb2 != tb2 )
{
Firebase.setString("trangthai_tb2","OFF");
Serial.write('b');
prevtb2 = tb2;
}
if (t > 30) Serial.print('c');
else if (t < 24) Serial.write('d');
hienthi_choan();
hienthi_vesinh();
hienthi_batden();
hienthi_tam();
}
void hienthi_choan()
{
if(hh==7 || hh==11 || hh== 17)
{
if( mm <10 )
{
if(ss >0 )
{
if(j<1)
{
Firebase.setString("Đang Cho Ăn","ON");
k=0;
j++;
}
86
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
}
else
{
if(k<1)
{
Firebase.setString("Đang Cho Ăn","OFF");
j=0;
k++;
}
}
}
}else{
if(k<1)
{
Firebase.setString("Đang Cho Ăn","OFF");
j=0;
k++;
}
}
}
void hienthi_vesinh()
{
if( hh== 6 || hh==16 )
{
if(mm < 12 )
{
if(j4<1)
{
Firebase.setString("Đang Vệ Sinh","ON");
k4=0;
j4++;
}
}
else
{
if(k4<1)
{
Firebase.setString("Đang Vệ Sinh","OFF");
j4=0;
k4++;
}
}
87
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
}else{
if(k4<1)
{
Firebase.setString("Đang Vệ Sinh","OFF");
j4=0;
k4++;
}
}
}
void hienthi_tam()
{
if( hh==9 )
{
if(mm < 13 )
{
if(j2<1)
{
Firebase.setString("Đang Tắm","ON");
k2=0;
j2++;
}
}
else
{
if(k2<1)
{
Firebase.setString("Đang Tắm","OFF");
j2=0;
k2++;
}
}
}else{
if(k2<1)
{
Firebase.setString("Đang Tắm","OFF");
j2=0;
k2++;
}
}
}
88
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
void hienthi_batden()
{
if(tb2="OFF")
{
if( hh >=17 && hh < 20 )
{
if(j3<1)
{
Firebase.setString("Đang Bật Đèn","ON");
k3=0;
j3++;
}
}
else
{
if(k3<1)
{
Firebase.setString("Đang Bật Đèn","OFF");
j3=0;
k3++;
}
}
}
else
{
Firebase.setString("Đang Bật Đèn","ON");
}
}
CHƢƠNG TRÌNH ĐIỀU KHIỂN ARDUINO
#include // thu vien lcd_i2c
////////////////THUVIEN RFID//////////////////////////
#include
#include
#define RST_PIN 5
#define SS_PIN 53
MFRC522 mfrc522(SS_PIN, RST_PIN);
char val, val1;
int tt;
// PHAN KHAI BAO
89
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
LiquidCrystal_I2C lcd(0x27, 20, 4); // khoi tao cho lcd
// khai báo cho realtime
const byte DS1307 = 0x68;
const byte NumberOfFields = 7;
int giay, phut, gio, thu, ngay, thang, nam, ktgiay = 0, kt = 0;
byte setgiay=0x00, setphut=0x30, setgio=0x06;
// khai bao cho cam bien sieu am HC-SR04
const int trig = 35; // chân trig của HC-SR04
const int echo = 37; // chân echo của HC-SR04
unsigned long duration; // biến đo thời gian
int distance; // biến lƣu khoảng cách
// khia bap cam bien HC_RS04 2
const int trig_1 = 12; // chân trig của HC-SR04
const int echo_1 = 13; // chân echo của HC-SR04
unsigned long duration_1; // biến đo thời gian
float khoangcach_1; // biến lƣu khoảng cách
float mucnuoc1 , mucnuoc;
// khai bao cho cam bien mua
int rainSensor = 27; // Chân tín hiệu cảm biến mƣa ở chân digital 7 (arduino)
// đinh nghiã các chân chƣc năng/////////////////////////////////////////////////
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#define role_1 23 // may bom nc
#define role_2 19//QUAT THONG GIO
#define role_3 16 //TAM RUA
#define role_4 17 // don ve sinh
#define role_5 6 // bat den
#define ug_o 7 // cho uong
///////// chan dieu khien MAI HIEN///////////////////////////////////
///////////////////////////////////////////////////////////////////
#define rain_c 9
#define rain_o 8
// cong tac hanh trinh cho CB MUA
const int sw_rs = 18;
////// chan dieu khien van thuc an/////////////////////////////////
/////////////////////////////////////////////////////////////////
#define an_c 11
#define an_o 10
// cong tac hanh trinh cho van cho an
const int sw_as = 3;
////// chan dieu khien van uong nuoc/////////////////////////////////
/////////////////////////////////////////////////////////////////
// cong tac hanh trinh cho van cho an
90
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
const int sw_us = 2;
///////// khia bao cac bien trung gian
//dinh nghia cho loacell
int m , g;
int times ;
int chon = 1;
float khoangcach , khoiluong;
int rain=2; //bien trung gian dk cho mai hien
int value ;
// khai bao cho nut nhan
#define buttonPin 47 // chon hien thi
#define buttonPin1 45 // tang tg cho ăn set gio phut
#define buttonPin2 25 // giam tg cho ăn set gio phut
int counter = 0;
int btn_tt , btn1 , btn2 ;
int btn_codinh = 1;
int btn_codinh1 = 1;
int btn_codinh2 = 1;
int btn_codinh3 = 1;
int btn_codinh4 = 1;
int btn_codinh5 = 1;
int btn_codinh6 = 1;
int stops = 0;
int stop1 , stop2;
//dieu khien bang dien thoat
int quat , den , bom , ve_sinh;
int GIAY_CODE = 10 ;
int choan , tam , vesinh , batden;
String inString= "";
void setup() {
// khởi tạo cho Serial và i2c
Serial.begin(250000);
Serial3.begin(250000);
Wire.begin();//khai bao
//KHOI TAO RFID
SPI.begin();
mfrc522.PCD_Init();
// khởi tạo cho lcd them chuân I2C
lcd.init();
lcd.clear();
lcd.backlight();
setTime(8, 59, 55, 1, 8, 2, 15);
// khoi tao chan cho HC-SRO4
91
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(rain_c, OUTPUT);
pinMode(rain_o, OUTPUT);
pinMode(an_c, OUTPUT);
pinMode(an_o, OUTPUT);
pinMode(ug_o, OUTPUT);
pinMode(3, INPUT);
pinMode(role_1, OUTPUT);
pinMode(role_2, OUTPUT);
pinMode(role_3, OUTPUT);
pinMode(role_4, OUTPUT);
pinMode(role_5, OUTPUT);
// khoi tao io cho cam bien mua
pinMode(rainSensor, INPUT); // Đặt chân cảm biến mƣa là INPUT, vì tín hiệu sẽ
đƣợc truyền đến cho Arduino
attachInterrupt(1, dung_dong_co_1, FALLING);
// khoi tao nut nhan
pinMode(buttonPin, INPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(48,OUTPUT);
digitalWrite(48,LOW);
}
void serialEvent()//task khi cos event zo thuc hien
{
val = Serial.read();
switch (val)
{
case '1':
GhiThongTin();
break;
case '3':
SetKeyA();
break;
}
}
void serialEvent3()//task khi cos event zo thuc hien
{
while(Serial3.available())
{
val1 = Serial3.read();
if(isDigit(val1))
92
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
{
inString += (char)val1;
if (inString.length()== 6)
{
byte hh = (inString.charAt(0)-48)*10 + (inString.charAt(1)-48);
byte mm = (inString.charAt(2)-48)*10 + (inString.charAt(3)-48);
byte ss = (inString.charAt(4)-48)*10 + (inString.charAt(5)-48);
setTime(hh, mm, ss, 1, 8, 2, 15);
//Serial.print(hh);Serial.print(" ");Serial.print(mm);Serial.print("
");Serial.println(ss);
inString ="";
}
}
switch (val1)
{
case 'A':
bom = 1;
break;
case 'a':
bom=0;
break;
case 'B':
den = 1;
break;
case 'b':
den = 0;
break;
case 'c':
quat = 1;
break;
case 'd':
quat = 0;
break;
}
}
}
void loop() {
DocThongTin();
// gọi hàm thực hiện đọc và hien thị realtime
readDS1307();
// hien thi thoi gian//////////////////
lcd.setCursor(0 , 0);
93
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
if ( gio < 10) {
lcd.print("0");
} lcd.print(gio); lcd.print(":");
if ( phut < 10) {
lcd.print("0");
} lcd.print(phut); lcd.print(":");
if ( giay < 10) {
lcd.print("0");
} lcd.print(giay); lcd.print(" ");
ktgiay = giay;
////////////////////////////////////////////////////////
// HC-RS04//////////////////////////////////////////////
if(counter==4 || counter== 5)
{
dung_hd();
}else
{
HC_RS04();
HC_RS04_1();
// CAM BIEN MUA
cambien_mua();
// dieu khien role
dieukhien_role();
// dong mo mai hien
dong_mo();
// dieu khien cho an
van_cho_an();
van_cho_uong();
}
//////////////////////////////////////////////////////////
xl_nutnhan();
select();
lcd.setCursor(9 , 0); lcd.print(counter);
}
/// HAM XU LI THONG TIN TU CAM BIEN///////////////////////
/////////XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//////////////////
// các hàm cafn có để đọc realtime///////////////////////
int bcd_st(byte num)
{
return ((num / 16 * 10) + (num % 16));
}
///////////////////////////////////////////////////////
void readDS1307()
94
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
{ Wire.beginTransmission(DS1307);
Wire.write((byte)0x00);
Wire.endTransmission();
Wire.requestFrom(DS1307, NumberOfFields);
giay = bcd_st(Wire.read() & 0x7f);
phut = bcd_st(Wire.read() );
gio = bcd_st(Wire.read() & 0x3f); // ch? d? 24h.
thu = bcd_st(Wire.read() );
ngay = bcd_st(Wire.read() );
thang = bcd_st(Wire.read() );
nam = bcd_st(Wire.read() ) + 2000;
}
/////////// ham hien thi realtime
/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
// chuyen thap phan sang bcd
int st_bcd(byte num)
{
return ((num / 10 * 16) + (num % 10));
}
// cai dat thoi gian
////////////////////////////////////////////////////////////////////
/* cài d?t th?i gian cho DS1307 */
void setTime(byte gi, byte p, byte g, byte t, byte n, byte th, byte na)
{ Wire.beginTransmission(DS1307);
Wire.write(byte(0x00)); // d?t l?i pointer
Wire.write(st_bcd(g));
Wire.write(st_bcd(p));
Wire.write(st_bcd(gi));
Wire.write(st_bcd(t)); // thu of week: Sunthu = 1, Saturthu = 7
Wire.write(st_bcd(n));
Wire.write(st_bcd(th));
Wire.write(st_bcd(na));
Wire.endTransmission();
}
// ham xu li tinh hieu cam bien sieu am
void HC_RS04()
{
readDS1307();
digitalWrite(trig, 0); // tắt chân trig
delayMicroseconds(2);
digitalWrite(trig, 1); // phát xung từ chân trig
95
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
delayMicroseconds(5); // xung có độ dài 5 microSeconds
digitalWrite(trig, 0); // tắt chân trig
/* Tính toán thời gian */
// Đo độ rộng xung HIGH ở chân echo.
duration = pulseIn(echo, HIGH);
// Tính khoảng cách đến vật.
khoangcach = int(duration / 2 / 29.412);
mucnuoc=17-khoangcach;
}
// cma bien khaong cach 2/////////////////////////////
//////////////////////////////////////////////////////
void HC_RS04_1()
{
readDS1307();
digitalWrite(trig_1, 0); // tắt chân trig
delayMicroseconds(2);
digitalWrite(trig_1, 1); // phát xung từ chân trig
delayMicroseconds(5); // xung có độ dài 5 microSeconds
digitalWrite(trig_1, 0); // tắt chân trig
/* Tính toán thời gian */
// Đo độ rộng xung HIGH ở chân echo. ////
/////////////////////////////////////////
duration_1 = pulseIn(echo_1, HIGH);
// Tính khoảng cách đến vật.
khoangcach_1 = int(duration_1 / 2 / 29.412);
mucnuoc1= (7-khoangcach_1);
}
// ham su li cam bien mua//////////////////////////////////
///////////////////////////////////////////////////////////
void cambien_mua()
{
readDS1307();
value = digitalRead(rainSensor);//Đọc tín hiệu cảm biến mƣa
}
//dieu khien van cho an////////////////////////////////////////////////
void van_cho_an()
{
readDS1307();
if (gio == 7 || gio == 11 || gio == 17 )
if (phut < 1)
96
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
{
if (giay <= GIAY_CODE)
{
digitalWrite(an_o , HIGH);
digitalWrite(an_c, LOW);
m = 1;
}
if (giay >= GIAY_CODE) {
digitalWrite(an_o , LOW);
digitalWrite(an_c , LOW);
m = 0;
}
}
}
///// dieu khien van them nuoc////////////////////////////////////
void van_cho_uong()
{
if (mucnuoc1 < 3)
{
digitalWrite(ug_o , HIGH);
}
if (mucnuoc1 >= 4) {
digitalWrite(ug_o , LOW);
}
}
// dieu khien mo mai hien///////////////////////////////////////
/// dieu khien chieu mo mai hien///////////////////////////////
void dong_mo()
{
if (value == HIGH )
{
if (stops != 1 && rain!= 1)
if (gio >= 6 && gio < 9)
{ stops = 1;
rain = 1;
digitalWrite(rain_o , HIGH);
digitalWrite(rain_c , LOW);
}
if (stops != 2 && rain!= 1)
if (gio >= 15 && gio <= 17)
{ stops = 2;
rain = 1;
97
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
digitalWrite(rain_o , HIGH);
digitalWrite(rain_c , LOW);
}
if (stops != 3 && rain!= 0)
if (gio >= 9 && gio < 15)
{ stops = 3;
rain = 0;
digitalWrite(rain_o , LOW);
digitalWrite(rain_c , HIGH);
}
if (stops != 4 && rain!= 0)
if (gio > 17)
{
stops = 4;
rain = 0;
digitalWrite(rain_o , LOW);
digitalWrite(rain_c , HIGH);
}
}
if (stops != 5 && rain!= 0)
{
if (value == LOW)
{
stops = 5;
rain = 0;
digitalWrite(rain_o , LOW);
digitalWrite(rain_c , HIGH);
}
}
}
// dk role /////////////////////////////
void dieukhien_role()
{
// MAY BOM NC///////////////////////////////////
if (bom == 0)
{
if (mucnuoc < 6)
{
digitalWrite(role_1 , HIGH);
}
} else {
98
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
if (mucnuoc < 14)
{
digitalWrite(role_1 , HIGH);
}
}
if (mucnuoc > 13)
{
digitalWrite(role_1 , LOW);
}
// dieu khien quat//
if (quat == 1)
{
digitalWrite(role_2 , HIGH);
} else digitalWrite(role_2 , LOW);
// tam rua////
if (gio == 9)
{
if (phut < 10)
{
digitalWrite(role_3 , HIGH);
} else digitalWrite(role_3 , LOW);
}
// don ve sinh//////////////////////////////////////////////////////////////
if (gio == 6 || gio == 16)
{
if (phut < 10)
{
digitalWrite(role_4 , HIGH);
} else {
digitalWrite(role_4 , LOW);
}
}
/// bat den/////////////////////////////////////////////////////////
if (den == 0)
{
if(batden==0)
{
if (gio >= 17 && gio < 20)
{
99
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
digitalWrite(role_5 , HIGH);
} else
{
digitalWrite(role_5 , LOW);
}
}else{
digitalWrite(role_5 , HIGH);
}
} else {
digitalWrite(role_5 , HIGH);
}
}
void hienthi_1()
{
lcd.setCursor(0, 1); lcd.print("MB || QUAT ");
lcd.setCursor(15 , 1); lcd.print("||");
lcd.setCursor(0, 2); lcd.print("TAM ");
lcd.setCursor(0, 3); lcd.print("VS || DEN");
lcd.setCursor(15 , 3); lcd.print("||");
lcd.setCursor(13, 0); lcd.print(" WORK");
// ham hien thi gia tri nhiet do do am len mang hinh//
lcd.setCursor(12, 1);
if (digitalRead(role_1) == 1)
{
lcd.print("ON ") ;
} else lcd.print("OFF");
////tam heo/////////////////////////////////////////
lcd.setCursor(12 , 2);
if (digitalRead(role_3) == 1)
{
lcd.print("TAM ON ");
} else lcd.print("TAM OFF");
////ve sinh heo//////////////////////////////////////
lcd.setCursor(12 , 3);
if (digitalRead(role_4) == 1)
{
lcd.print("ON ");
} else lcd.print("OFF");
///den trang trai/////////////////////////////////////
lcd.setCursor(17 , 3);
if (digitalRead(role_5) == 1)
100
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
{
lcd.print("ON ");
} else lcd.print("OFF");
// quat giam nhiet
lcd.setCursor(17, 1);
if (quat == 1)
{
lcd.print("ON ") ;
} else lcd.print("OFF");
}
void hienthi_2()
{
//lcd.clear();
lcd.setCursor(0 , 1); lcd.print("MAI HIEN:");
lcd.setCursor(0 , 2); lcd.print("CHO AN:");
lcd.setCursor(13 , 0); lcd.print("WORK");
lcd.setCursor(13 , 1);
if (rain == 1)
{
lcd.print("OPPEN ");
}
if (rain == 0)
{
lcd.print("CLOSE");
}
lcd.setCursor(13 , 2);
if (m == 1)
{
lcd.print("EAT ON ");
}
if (m == 0)
{
lcd.print("EAT OFF");
}
lcd.setCursor(0 , 3); lcd.print("MUC NUOC:");
lcd.setCursor(10 , 3); lcd.print(mucnuoc);
lcd.setCursor(16 , 3); lcd.print(mucnuoc1);
lcd.setCursor(15 , 3); lcd.print("|");
}
void hienthi_5()
{
101
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
lcd.setCursor(0, 1);
lcd.print("DANG CHINH GIAY_CODE!");
lcd.setCursor(0, 2); lcd.print("GIAY_CODE:");
lcd.setCursor(12 , 2); lcd.print(GIAY_CODE / 10);
lcd.setCursor(13 , 2); lcd.print(GIAY_CODE % 10);
}
void thongso()
{
// lcd.clear();
lcd.setCursor(10 , 0); lcd.print("PARAMETER");
lcd.setCursor(0 , 1); lcd.print("EAT: 6H | 11H | 17H");
lcd.setCursor(0 , 2); lcd.print("TAM || DEN: 9H||17H");
lcd.setCursor(0 , 3); lcd.print("MHIEN:6H-9H|15H-17H");
}
void xl_nutnhan()
{
///////////////// nut nhan chon hien thi LCD
btn_tt = digitalRead(buttonPin);
btn1 = digitalRead(buttonPin1);
btn2 = digitalRead(buttonPin2);
if (btn_tt != btn_codinh) {
if (btn_tt == LOW) {
lcd.clear(); delay(200);
counter++;
if (counter > 5) counter = 0;
}
}
btn_codinh = btn_tt;
//////////////// NUT NHAN TANG THOI GIAN AN
if (btn1 != btn_codinh1 && counter == 3) {
if (btn1 == LOW) {
GIAY_CODE++;
}
}
btn_codinh1 = btn1;
///////////////N UT NHAN GIAM THOI GIAN AN
if (btn2 != btn_codinh2 && counter == 3) {
if (btn2 == LOW) {
GIAY_CODE--;
}
102
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
}
btn_codinh2 = btn2;
/// set realtime nut nhan
/// gio
if (btn1 != btn_codinh3 && counter == 4) {
if (btn1 == LOW) {
setgio++;
if(setgio == 24)
{
setgio=0;
}
}
}
btn_codinh3 = btn1;
if (btn2 != btn_codinh4 && counter == 4) {
if (btn2 == LOW) {
setgio--;
}
}
btn_codinh4 = btn2;
// phut
if (btn1 != btn_codinh5 && counter == 5) {
if (btn1 == LOW) {
setphut++;
if(setphut ==60)
{
setphut=0;
}
}
}
btn_codinh5 = btn1;
if (btn2 != btn_codinh6 && counter == 5) {
if (btn2 == LOW) {
setphut--;
}
}
btn_codinh6 = btn2;
}
103
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
void hienthi_h()
{
lcd.setCursor(0 , 0);
if ( gio < 10) {
lcd.print("0");
} lcd.print(gio); lcd.print(":");
if ( phut < 10) {
lcd.print("0");
} lcd.print(phut); lcd.print(":");
if ( giay < 10) {
lcd.print("0");
} lcd.print(giay); lcd.print(" ");
ktgiay = giay;
}
void dung_hd()
{
digitalWrite(rain_c, LOW);
digitalWrite(rain_o, LOW);
digitalWrite(an_c, LOW);
digitalWrite(an_o, LOW);
digitalWrite(ug_o, LOW);
digitalWrite(role_1, LOW);
digitalWrite(role_2, LOW);
digitalWrite(role_3, LOW);
digitalWrite(role_4, LOW);
digitalWrite(role_5, LOW);
}
void select()
{
switch (counter)
{
case 0: hienthi_1();
break;
case 1: hienthi_2();
break;
case 2: thongso();
break;
case 3: hienthi_5();
break;
case 4: hienthi_h();
setTime(setgio, setphut, 55, 1, 8, 2, 15);
104
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
break;
case 5: hienthi_h();
setTime(setgio, setphut, 55, 1, 8, 2, 15);
break;
}
}
void dung_dong_co_1()
{
digitalWrite(rain_o , LOW);
digitalWrite(rain_c , LOW);
}
void DocThongTin(){
byte hoten[34];
byte diachi[18];
byte nhap[18];
byte xuat[18];
byte tiem[18];
byte block_hoten_1 = 4;
byte block_hoten_2 = 5;
byte block_diachi = 6;
byte block_nhap = 8;
byte block_xuat = 9;
byte block_tiem = 10;
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
digitalWrite(4,HIGH);
ReadBlock(block_hoten_1, hoten);
ReadBlock(block_hoten_2, &hoten[16]);
ReadBlock(block_diachi, diachi);
ReadBlock(block_nhap, nhap);
ReadBlock(block_xuat, xuat);
ReadBlock(block_tiem, tiem);
Serial.write('*'); // Ky tu danh dau ket thuc viec gui du lieu
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
void GhiThongTin(){
byte buf[96];
105
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
byte i=0;
byte hoten[32];
byte diachi[16];
byte nhap[16];
byte xuat[16];
byte tiem[16];
byte block_hoten_1 = 4;
byte block_hoten_2 = 5;
byte block_diachi = 6;
byte block_nhap = 8;
byte block_xuat = 9;
byte block_tiem = 10;
mfrc522.PCD_Init(); // Init MFRC522
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
digitalWrite(4,HIGH);
// Doc chuoi
while(i<96){
if(Serial.available()){
buf[i] = Serial.read();
i++;
}
}
//Tach thanh cac chuoi nho
for (byte i=0; i<32; i++) {
hoten[i] = buf[i];
}
for (byte i=0; i<16; i++) {
diachi[i] = buf[i+32];
}
for (byte i=0; i<16; i++) {
nhap[i] = buf[i+48];
}
for (byte i=0; i<16; i++) {
xuat[i] = buf[i+64];
}
for (byte i=0; i<16; i++) {
106
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
tiem[i] = buf[i+80];
}
// Ghi thong tin
WriteBlock(block_hoten_1, hoten);
WriteBlock(block_hoten_2, &hoten[16]);
WriteBlock(block_diachi, diachi);
WriteBlock(block_nhap, nhap);
WriteBlock(block_xuat, xuat);
WriteBlock(block_tiem,tiem);
mfrc522.PICC_HaltA(); // Halt PICC
mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD
}
void ReadBlock(byte block, byte *buf) {
MFRC522::MIFARE_Key keyA;
/*
keyA.keyByte[5]=0xFF;
keyA.keyByte[4]=0xFF;
keyA.keyByte[3]=0xFF;
keyA.keyByte[2]=0xFF;
keyA.keyByte[1]=0xFF;
keyA.keyByte[0]=0xFF;
*/
keyA.keyByte[5]=0x33;
keyA.keyByte[4]=0x33;
keyA.keyByte[3]=0x33;
keyA.keyByte[2]=0x33;
keyA.keyByte[1]=0x33;
keyA.keyByte[0]=0x33;
MFRC522::StatusCode status;
byte len = 18;
//So sanh Key A
status =
mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block,
&keyA, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
//Serial.print("Authentication failed");
return;
}
status = mfrc522.MIFARE_Read(block, buf, &len);
if (status != MFRC522::STATUS_OK) {
//Serial.print("Reading failed");
return;
}
107
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
//Thuc hien viec gui du lieu
for (byte i = 0; i < 16; i++) {
Serial.write(buf[i]);
delay(10);
}
}
void WriteBlock(byte block, byte *buf){
MFRC522::MIFARE_Key keyA;
/*
keyA.keyByte[5]=0xFF;
keyA.keyByte[4]=0xFF;
keyA.keyByte[3]=0xFF;
keyA.keyByte[2]=0xFF;
keyA.keyByte[1]=0xFF;
keyA.keyByte[0]=0xFF;
*/
keyA.keyByte[5]=0x33;
keyA.keyByte[4]=0x33;
keyA.keyByte[3]=0x33;
keyA.keyByte[2]=0x33;
keyA.keyByte[1]=0x33;
keyA.keyByte[0]=0x33;
MFRC522::StatusCode status;
//Kiem tra Key A
status =
mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block,
&keyA, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
//Serial.print("PCD_Authenticate() failed");
return;
}
status = mfrc522.MIFARE_Write(block, buf, 16);
if (status != MFRC522::STATUS_OK) {
//Serial.print("MIFARE_Write() failed");
return;
}
}
void SetKeyA(){
byte keyA_moi[16] = {0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xFF, 0x07,
0x80, 0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
// Look for new cards
mfrc522.PCD_Init(); // Init MFRC522
108
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
digitalWrite(4,HIGH);
WriteBlockKey(7, keyA_moi);
WriteBlockKey(11, keyA_moi);
WriteBlockKey(15, keyA_moi);
mfrc522.PICC_HaltA(); // Halt PICC
mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD
}
void WriteBlockKey(byte block, byte *buf){
MFRC522::MIFARE_Key keyA;
keyA.keyByte[5]=0xFF;
keyA.keyByte[4]=0xFF;
keyA.keyByte[3]=0xFF;
keyA.keyByte[2]=0xFF;
keyA.keyByte[1]=0xFF;
keyA.keyByte[0]=0xFF;
/*
keyA.keyByte[5]=0x33;
keyA.keyByte[4]=0x33;
keyA.keyByte[3]=0x33;
keyA.keyByte[2]=0x33;
keyA.keyByte[1]=0x33;
keyA.keyByte[0]=0x33;
*/
MFRC522::StatusCode status;
//Kiem tra Key A
status =
mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block,
&keyA, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
//Serial.print("PCD_Authenticate() failed");
return;
}
status = mfrc522.MIFARE_Write(block, buf, 16);
if (status != MFRC522::STATUS_OK) {
//Serial.print("MIFARE_Write() failed");
109
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
PHỤ LỤC
return;
}
}
110
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH
Các file đính kèm theo tài liệu này:
- do_an_thiet_ke_va_thi_cong_mo_hinh_he_thong_va_quan_ly_trang.pdf