SlideShare uma empresa Scribd logo
1 de 56
ĐẠI HỌC HUẾ
TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA VẬT LÍ
---------
NGUYỄN THỊ KIM ANH
ĐIỀU KHIỂN THIẾT BỊ QUA MODULE WIFI
ESP8266
KHÓA LUẬN TỐT NGHIỆP
Huế, khóa học 2014 - 2018
ĐẠI HỌC HUẾ
TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA VẬT LÍ
---------
NGUYỄN THỊ KIM ANH
ĐIỀU KHIỂN THIẾT BỊ QUA
MODULE WIFI ESP8266
KHÓA LUẬN TỐT NGHIỆP
GIẢNG VIÊN HƯỚNG DẪN
Th.S HOÀNG ĐÌNH LONG
Huế, khóa học 2014 - 2018
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh
Lời Cảm Ơn
Trong thời gian làm khóa luận tốt nghiệp,
em đã nhận được nhiều sự giúp đỡ, đóng góp ý
kiến và chỉ bảo tận tình của thầy cô, gia
đình, bạn bè.
Em xin gửi lời cảm ơn chân thành đến Th.S
thầy Hoàng Đình Long, giảng viên tổ Vật lí kĩ
thuật – trường Đại học sư phạm Huế người đã
tận tình hướng dẫn, chỉ bảo em trong suốt quá
trình làm khóa luận.
Em cũng chân thành cảm ơn các thầy cô giáo
trong trường Đại học sư phạm Huế nói chung,
các thầy cô trong khoa vật lí nói riêng đã
dạy dỗ em. Đồng thời, các thầy cô đã truyền
cho em kiến thức về các môn đại cương cũng
như các môn chuyên ngành, giúp em có được cơ
sở lí thuyết vững vàng và tạo điều kiện giúp
đỡ em trong suốt quá trình học tập.
Cuối cùng, em xin chân thành cảm ơn đến gia
đình và bạn bè đã luôn tạo điều kiện, quan
tâm, giúp đỡ và động viên em trong suốt quá
trình học tập và hoàn thành khóa luận tốt
nghiệp.
Mặc dù đã có nhiều cố gắng trong quá trình
làm khóa luận tốt nghiệp, nhưng không thể
tránh khỏi những thiếu sót. Em mong quý thầy
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh
cô cùng các bạn đọc nhận xét, góp ý thêm để
bài khóa luận của em được hoàn thiện hơn.
Em xin chân thành cảm ơn!
Huế, ngày 5 tháng 5 năm
2018
Sinh viên thực hiện
Nguyễn Thị Kim Anh
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh
MỤC LỤC
PHẦN I. MỞ ĐẦU ............................................................................................................1
1. Lý do chọn đề tài.............................................................................................................1
2. Mục tiêu nghiên cứu .......................................................................................................2
3. Nhiệm vụ nghiên cứu......................................................................................................2
4. Phương pháp nghiên cứu................................................................................................2
5. Đối tượng nghiên cứu.....................................................................................................2
6. Phạm vi nghiên cứu.........................................................................................................2
7. Cấu trúc khóa luận ..........................................................................................................2
PHẦN II. NỘI DUNG.......................................................................................................3
CHƯƠNG 1. TỔNG QUAN............................................................................................3
1.1 Giới thiệu vi điều khiển Arduino Uno........................................................................3
1.1.1 Lịch sử hình thành Arduino.............................................................................3
1.1.2 Tổng quan về Arduino .....................................................................................4
1.1.2.1 Định nghĩa về vi điều khiển Arduino.....................................................4
1.1.2.2 Một số board Arduino ..............................................................................5
1.1.3 Giới thiệu về Board Arduino Uno ..................................................................5
1.1.3.1 Cấu tạo chung............................................................................................5
1.1.3.2 Các thông số kĩ thuật của Arduino Uno.................................................7
1.1.3.3 Vi điều khiển.............................................................................................7
1.1.3.4 Bộ nhớ........................................................................................................8
1.1.3.5 Đặc điểm và chức năng các chân của Arduino Uno ............................9
1.1.3.6 Ứng dụng của Arduino...........................................................................11
1.2 Giới thiệu Module Wifi ESP8266.............................................................................13
1.2.1 Giới thiệu về Module Wifi ESP8266 V1.....................................................13
1.2.2 Thông số kỹ thuật ..........................................................................................13
1.2.3 Chân kết nối của Module Wifi Esp8266 V1 ...............................................14
1.2.4 Giao tiếp của module wifi ESP8266 với Arduino Uno .............................15
1.3 Giới thiệu về Apps Virtuino trên Android...............................................................15
1.4 Cảm biến nhiệt độ và độ ẩm DHT11 ........................................................................17
1.4.1 Giới thiệu chung .............................................................................................17
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh
1.4.2 Thông số kĩ thuật ...........................................................................................17
1.4.3 Giao tiếp giữa DHT11 với Arduino Uno.....................................................18
CHƯƠNG 2. MÔ PHỎNG VÀ LẬP TRÌNH CHO ARDUINO...........................19
2.1 Phần mềm mô phỏng Proteus....................................................................................19
2.1.1 Tổng quan về phần mềm................................................................................19
2.1.2 Cách sử dụng phần mềm Proteus. ................................................................19
2.1.3 Thư viện Arduino trong Proteus ...................................................................22
2.2 Giới thiệu về môi trường tích hợp Arduino IDE.....................................................22
2.3 Lập trình điều khiển với Arduino..............................................................................25
2.3.1 Cấu trúc của một chương trình .....................................................................25
2.3.2 Ngôn ngữ lập trình cho Arduino...................................................................26
2.3.2.1 Giới thiệu ngôn ngữ C. ..........................................................................26
2.3.2.2 Các lệnh cơ bản trong C. .......................................................................26
CHƯƠNG 3. THIẾT KẾ, LẬP TRÌNH VÀ LẮP ĐẶT MẠCH ĐIỀU KHIỂN
TỪ XA VỀ NHIỆT ĐỘ, ĐỘ ẨM TRÊN ĐIỆN THOẠI DI ĐỘNG THÔNG
QUA MODULE WIFI ESP8266 ..................................................................................35
3.1 Phân tích mạch điều khiển.........................................................................................35
3.1.1 Sơ đồ khối tổng quát ......................................................................................35
3.1.2 Nguyên lý hoạt động của hệ thống...............................................................36
3.1.3 Lưu đồ thuật toán............................................................................................36
3.1.4 Nạp code và chạy chương trình. ...................................................................37
3.2 Thiết kế mạch và thi công mạch điều khiển............................................................40
3.2.1 Xác định mạch điều khiển.............................................................................40
3.2.2 Giải pháp công nghệ.......................................................................................41
3.2.3 Giải pháp thiết kế............................................................................................41
3.2.4 Yêu cầu của mạch điều khiển .......................................................................41
3.2.5 Thi công mạch điều khiển .............................................................................41
3.2.5.1 Kết nối phần cứng và nạp chương trình mạch điều khiển.................41
3.2.5.2 Hoạt động của mạch điều khiển............................................................44
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ..................................................................46
TÀI LIỆU THAM KHẢO .............................................................................................47
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh
DANH MỤC BẢNG
Bảng 1.1. Các thông số kĩ thuật của board ArduinoUno ...............................................7
Bảng 1.2 Sơ đồ nối dây ....................................................................................................15
Bảng 1.3 Sơ đồ nối chân ..................................................................................................18
Bảng 2.1 Thanh công cụ chuẩn .......................................................................................20
Bảng 2.2 Thanh linh kiện ................................................................................................21
Bảng 2.3 các chức năng trong vùng Toolbar ................................................................23
Bảng 2.4 Các toán tử so sánh ..........................................................................................29
Bảng 2.5 Các toán tử logic ..............................................................................................29
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh
DANH MỤC HÌNH
Hình 1.1 Mẫu thử nghiệm ban đầu ...................................................................................3
Hình 1.2 Một số board Arduino thông dụng ...................................................................5
Hình 1.3 Board Arduino Uno ............................................................................................6
Hình 1.4 Vi điều khiển ATMega328P của Arduino Uno ..............................................8
Hình 1.5 Sơ đồ chân của vi điều khiển ATMega328P ..................................................8
Hình 1.6 Các chân Digital của Arduino Uno ..................................................................9
Hình 1.7 Các chân Analog của Arduino Uno ...............................................................10
Hình 1.8 Các chân năng lượng của Arduino Uno ........................................................10
Hình 1.9 Robot dò line điều khiển qua điện thoại ........................................................12
Hình 1.10 Sử dụng bo mạch Arduino điều khiển bật đèn tiết kiệm năng lượng và
hiển thị thông tin tốc độ gió, điện năng trong ắc quy ................................13
Hình 1.11 Module Wifi ESP8266 V1 ............................................................................13
Hình 1.12 Sơ đồ chân của Module Wifi Esp8266 V1 .................................................14
Hình 1.13 Sơ đồ nối chân của Arduino Uno với Module Wifi ESP8266 V1 ............15
Hình 1.14 Địa chỉ ID trên Thingspeak............................................................................16
Hình 1.15 Cài đặt IoT Server trên điện thoại.................................................................16
Hình 1.16 Thiết lập nhiệt độ và độ ẩm trên điện thoại .................................................17
Hình 1.17 Cảm biến nhiệt độ và độ ẩm DHT11 ...........................................................17
Hình 1.18 Sơ đồ nối chân giữa Arduino Uno với cảm biến DHT11 ..........................18
Hình 2.1 Khung làm việc chung của phần mềm Proteus..............................................20
Hình 2.2 Giao diện của Arduino IDE .............................................................................22
Hình 2.3 Vùng Toolbar của Arduino IDE......................................................................23
Hình 2.4 Minh họa vùng viết chương trình....................................................................24
Hình 2.5 Minh họa các bước thực hiện một chương trình ..........................................25
Hình 2.6 Minh họa vùng thông báo.................................................................................25
Hình 3.1 Sơ đồ khối tổng quát .........................................................................................35
Hình 3.3 Kết nối phần cứng của mạch điều khiển ........................................................42
Hình 3.4 Đèn trên Arduino mà module wifi Esp8266 sáng khi c ấp nguồn ...............42
Hình 3.5 Kiểm tra lỗi của chương trình phát tín hiệu...................................................43
Hình 3.6 Nạp chương trình xuống cho mạch điều khiển..............................................43
Hình 3.7 Quá trình nạp thành công .................................................................................44
Hình 3.8 Kết quả đo nhiệt độ, độ ẩm hiển thị trên máy tính........................................44
Hình 3.9 Kết quả đo nhiệt độ và độ ẩm được đưa lên thingSpeak..............................45
Hình 3.10 Kết quả nhiệt độ và độ ẩm hiển thị trên Smartphone .................................45
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 1
PHẦN I. MỞ ĐẦU
1. Lý do chọn đề tài
Hiện nay cùng với sự phát triển của xã hội, cuộc sống ngày càng được nâng
cao thì việc áp dụng công nghệ khoa học kỹ thuật vào đời sống công việc càng cần
thiết hơn. Cùng với sự phát triển của các ngành khoa học kỹ thuật, công nghệ kỹ
thuật điện tử mà trong đó đặc biệt là kỹ thuật điều khiển tự động đóng vai trò quan
trọng trong mọi lĩnh vực đời sống như khoa học kỹ thuật, quản lý, công nghiêp,
nông nghiệp, đời sống, quản lý thông tin...
Trong thời kỳ phát triển hiện nay, điện thoại di động là một thiết bị không thể
thiếu trong cuộc sống. Ngoài chức năng nghe và nhận cuộc gọi, nhắn tin, xem phim,
chơi game, chụp ảnh… điện thoại còn có khả năng giám sát và điều khiển thiết bị từ
khoảng cách xa thông qua kết nối Internet/Wifi [13].
Từ nhu cầu thực tế cần có một thiết bị điều khiển, giám sát nhiệt độ độ ẩm
trong gia đình, phòng máy chủ, trung tâm dữ liệu, kho dữ liệu, tủ lạnh vắc xin, tủ
lạnh thực phẩm, trong nhà kính… bằng điện thoại di động, thông qua Module Wifi
Esp8266. Từ đó, có tính linh động cao, cập nhật các dữ liệu 24/24h nhằm tăng hiệu
quả quản lý [13].
Bên cạnh đó cùng với sự xuất hiện của Arduino vào năm 2005 tại Italia đã góp
phần không nhỏ cho nền kinh tế tự động hóa. Sự xuất hiện của Arduino đã hỗ trợ
cho con người rất nhiều trong việc lập trình và thiết kế, nhất là đối với những người
mới bắt đầu tìm tòi về vi điều khiển mà không có quá nhiều kiến thức, hiểu biết sâu
sắc về vật lý và điện tử. Phần cứng của thiết bị đã được tích hợp nhiều chức năng cơ
bản và mã nguồn mở. Ngôn ngữ lập trình lại vô cùng dễ sử dụng và được chia sẻ
miễn phí nên Arduino đang ngày càng phổ biến và được phát triển mạnh mẽ trên
toàn thế giới [1].
Xuất phát từ những lý do trên em chọn đề tài: “ĐIỀU KHIỂN THIẾT BỊ QUA
MODULE WIFI ESP8266” làm đề tài khóa luận tốt nghiệp. Trong quá trình thực
hiện đề tài không tránh khỏi những thiếu sót, em rất mong nhận được sự góp ý của
các thầy cô và các bạn để đề tài được hoàn thiện hơn.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 2
2. Mục tiêu nghiên cứu
Thiết kế mạch điều khiển thiết bị từ xa bằng điện thoại di động về nhiệt độ, độ
ẩm thông qua Module Wifi Essp8266.
3. Nhiệm vụ nghiên cứu
- Nghiên cứu về vi điều khiển Arduino, cảm biến nhiệt độ và độ ẩm DHT11,
phần mềm mô phỏng proteus, ngôn ngữ C và môi trường phát triển tích hợp
Arduino IDE.
- Nghiên cứu Module Wifi Esp8266, phần mềm Virtuino trên điện thoại.
4. Phương pháp nghiên cứu
Trong đề tài này em đã sử dụng các phương pháp nghiên cứu:
- Phương pháp nghiên cứu lí thuyết: tìm hiểu khái niệm, cấu tạo, các thông số
kĩ thuật, sơ đồ nối chân giữa Arduino Uno với DHT11 và Esp8266. Tìm hiểu cách
sử dụng Apps Virtuino, proteus, ngôn ngữ C và Arduino IDE.
- Phương pháp nghiên cứu thực nghiệm: thiết kế mạch điều khiển từ xa về
nhiệt độ và độ ẩm trên điện thoại di động thông qua Module Wifi Esp8266.
5. Đối tượng nghiên cứu
Vi điều khiển Arduino Uno, Module Wifi Esp8266 và cảm biến nhiệt độ và độ
ẩm DHT11.
6. Phạm vi nghiên cứu
Điều khiển thiết bị nhiệt độ, độ ẩm từ xa bằng điện thoại di dộng thông qua
Module Wifi Esp8266.
7. Cấu trúc khóa luận
Ngoài phần mở đầu, kết luận, hướng phát triển và tài liệu tham khảo. Khóa
luận còn có phần nội dung được chia làm 3 chương.
Chương 1. Tổng quan.
Chương 2. Mô phỏng và lập trình cho Arduino.
Chương 3. Thiết kế, lập trình và lắp đặt mạch điều khiển từ xa về nhiệt độ, độ
ẩm trên điện thoại di động thông qua Module Wifi Esp8266.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 3
PHẦN II. NỘI DUNG
CHƯƠNG 1. TỔNG QUAN
1.1 Giới thiệu vi điều khiển Arduino Uno
1.1.1 Lịch sử hình thành Arduino
Arduino có một lịch sử ra đời rất thú vị. Mới đầu Arduino được tạo ra để giải
quyết bài toán: làm thế nào để sinh viên có thể tạo ra được một thiết bị điện tử một
cách nhanh chóng. Vào năm 2002, Massimo Banzi, một giáo sư phần mềm đã được
đưa về IDII (Interaction Design Institute Ivrea – Viện thiết kế tương tác Ivrea) để
thúc đẩy một lĩnh vực còn non trẻ gọi là “máy tính vật lí” với một ngân sách hạn
hẹp, thời gian hạn chế và rất ít các công cụ [1].
Vào thời điểm đó, sinh viên sử dụng Stamp BASIC, một vi điều khiển được
tạo ra bởi công ti California Parallax. Sử dụng ngôn ngữ lập trình BASIC, Stamp
giống như một bo mạch nhỏ gọn gàng, gồm các yếu tố cần thiết như nguồn cung
cấp năng lượng, một vi điều khiển, bộ nhớ và cổng vào – ra để nối với các phần
cứng khác.
Banzi phát hiện ra hai vấn đề ở Stamp BASIC [1]:
 Không có đủ khả năng xử lý cho một số dự án của sinh viên.
 Có giá khoảng 100 USD khá cao so với sinh viên.
Mẫu thử nghiệm ban đầu được thực hiện vào năm 2005, là một thiết kế đơn
giản và chưa được gọi Arduino. Massimo Banzi sử dụng cái tên Arduino vào một
năm sau đó.
Hình 1.1 Mẫu thử nghiệm ban đầu [1]
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 4
1.1.2 Tổng quan về Arduino
1.1.2.1 Định nghĩa về vi điều khiển Arduino
Arduino là một bo mạch vi xử lý được dùng để lập trình tương tác với các
thiết bị phần cứng như cảm biến, động cơ, đèn hoặc các thiết bị khác [2].
Đặc điểm nổi bật của Arduino là môi trường phát triển ứng dụng rất dễ dàng
sử dụng, với một ngôn ngữ lập trình có thể học một cách nhanh chóng. Một điều
làm cho Arduino phổ biến nhanh chóng là mức giá rất thấp và tính chất nguồn mở
từ phần cứng tới phần mềm.
Arduino là một nền tảng thiết bị điện tử mã nguồn mở được sử dụng để xây
dựng các ứng dụng điện tử. Arduino gồm có board mạch có thể lập trình được
(thường gọi là vi điều khiển) và các phần mềm hỗ trợ phát triển tích hợp IDE
(Integrated Development Environment) dùng để soạn thảo, biên dịch code và nạp
chương trình cho board [2].
Một hệ thống Arduino có thể có rất nhiều sự tương tác với các thiết bị khác,
đó là các hệ thống cảm biến đa dạng về chủng loại (đo đạc nhiệt độ, độ ẩm, vận tốc,
màu sắc vật thể,...), các thiết bị hiển thị (màn hình LCD, đèn LED,...), các module
chức năng hỗ trợ kết nối có dây với các thiết bị khác hoặc các kết nối không dây
thông dụng (3G, Wifi, Bluetooth,...) và cả định vị GPS, nhắn tin SMS.
Như vậy, tuy chỉ là một board mạch nhỏ nhưng Arduino có thể dùng vào rất
nhiều ứng dụng khác nhau, chỉ cần một phần mềm Arduino IDE, một kết nối USB
và một board mạch Arduino, ta có thể phát triển các ứng dụng trên board.
Về mặt chức năng, các board mạch Arduino được chia làm hai loại: loại board
mạch chính có chip ATMega và loại mở rộng thêm các chức năng cho board mạch
chính (thường được gọi là Shield) [2].
Arduino từ khi ra đời là một thứ cực kì phức tạp gồm rất nhiều linh kiện, bóng
đèn LED, cổng kết nối,… nay đã trở thành một mạch nhỏ gọn trong lòng bàn tay với
các kết nối phổ biến và sự tiện lợi trong việc điều khiển thiết bị. Hiện nay, Arduino
được rất nhiều hãng điện tử trên thế giới nghiên cứu và chế tạo. Arduino cũng có rất
nhiều loại và có nhiều kích thước khác nhau.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 5
1.1.2.2 Một số board Arduino
Hình 1.2 Một số board Arduino thông dụng [1]
Các board Arduino và Arduino – compatible sử dụng các shield – các board
mạch in mở rộng được dùng bằng cách cắm vào các chân header của Arduino. Các
shield có thể là module điều khiển động cơ, GPS, Ethernet, LCD hoặc có thể là
breadboard.
1.1.3 Giới thiệu về Board Arduino Uno
Arduino có rất nhiều phiên bản với các chức năng và mục đích khác nhau.
Trong đó, Arduino Uno là một trong những phiên bản được ứng dụng rộng rãi nhất
bởi chi phí và tính linh động của nó. Hiện dòng này đã được phát triển tới thế hệ thứ
3 (R3) [3].
1.1.3.1 Cấu tạo chung
Có rất nhiều thành phần cấu tạo nên một board Arduino Uno, nhưng để dễ
dàng hiểu rõ và sử dụng Arduino Uno đúng cách, đầu tiên ta quan tâm đến các
thành phần được đánh số trên hình 1.3.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 6
Hình 1.3 Board Arduino Uno [3]
1. Cổng USB là cổng giao tiếp để nạp chương trình điều khiển từ máy vi tính
lên vi điều khiển. Đồng thời nó cũng là giao tiếp nối tiếp để truyền dữ liệu giữa vi
điều khiển với máy tính [3].
2. Jack nguồn để cung cấp nguồn từ 9V đến 12V lấy năng lượng trực tiếp từ
pin hoặc Ắc – quy trong trường hợp không thể lấy nguồn từ cổng USB như đã nói ở
trên [3].
3. Hàng chân thứ nhất được đánh số từ 0 đến 13 là các chân Digital, nhận
vào hoặc xuất ra các tín hiệu số. Ngoài ra có một chân đất (GND) và chân điện áp
tham chiếu (AREF) [3].
4. Hàng chân thứ hai là các chân năng lượng, chủ yếu liên quan đến điện áp
đất, nguồn [3].
5. Hàng chân thứ ba là các chân Analog được kí hiệu từ A0 đến A5 để nhận
vào hoặc xuất ra các tín hiệu tương tự (ví dụ như đọc thông tin của các thiết bị cảm
biến) [3].
6. Vi điều khiển là bộ xử lí trung tâm của toàn board mạch. Với mỗi mẫu
Arduino khác nhau thì con vi điều khiển này khác nhau. Ở board Arduino Uno này
sử dụng ATMega328P [3].
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 7
Ngoài ra trên board còn có một nút Reset để đặt lại chương trình đang chạy. Đôi
khi chương trình đang chạy gặp lỗi, người dùng có thể Reset lại chương trình [3].
1.1.3.2 Các thông số kĩ thuật của Arduino Uno
Bảng 1.1. Các thông số kĩ thuật của board ArduinoUno [3]
Vi điều khiển ATMega328P (họ 8bit)
Điện áp hoạt động 5V-DC (chỉ được cấp qua cổng USB)
Điện áp vào khuyên dùng 7-12V DC
Điện áp vào giới hạn 6-20V DC
Số chân Digital vào/ra 14 (có 6 chân điều chế độ xung PWM)
Số chân Analog Input 6 (độ phân giải bit)
Dòng ra tối đa trên mỗi chân vào/ra 30mA
Dòng ra tối đa (5V) 500mA
Dòng ra tối đa (3.3V) 50mA
Flash Memory 32 KB (ATMega328P) với 0.5KB được
sử dụng bởi bootloader
SRAM 2KB (ATMega328P)
EEPROM 1KB (ATMega328P)
Tần số hoạt động 16MHz
1.1.3.3 Vi điều khiển
Trong board Arduino, các vi điều khiển được xem như là bộ não của board. Nó
có thể xử lí những tác vụ đơn giản như điều khiển đèn led nhấp nháy, thu thấp các dữ
liệu từ cảm biến, xử lí dữ liệu và xuất ra, xử lí tín hiệu cho đèn điều khiển từ xa,...
Arduino Uno có thể sử dụng 3 vi điều khiển họ 8 bit AVR là ATMega8,
ATMega168, ATMega328. Với vi điều khiển ATMega328 sử dụng thạch anh có
chu kì dao động 16MHz [3].
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 8
Hình 1.4 Vi điều khiển ATMega328P của Arduino Uno [3]
Sơ đồ chân của vi điều khiển ATMega328P.
Hình 1.5 Sơ đồ chân của vi điều khiển ATMega328P [3]
1.1.3.4 Bộ nhớ
Vi điều khiển ATMega328P tiêu chuẩn có ba loại bộ nhớ với dung lượng
tương ứng là 32KB cho bộ nhớ Flash, 2KB cho SRAM và 1KB cho EEPROM.
* Flash Memory là bộ nhớ có thể ghi được, dữ liệu không bị mất ngay cả khi
ngắt điện. Về vai trò, ta có thể hình dung bộ nhớ này như ổ cứng để chứa dữ liệu
trên board. Chương trình viết cho Arduino sẽ được lưu ở đây. Kích thước của vùng
nhớ này thông thường dựa vào vi điều khiển được sử dụng. Loại bộ nhớ này có thể
chịu được khoảng 10.000 lần ghi/xóa [3].
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 9
* SRAM (Static Random Access Memory) tương tự như RAM của máy tính,
bộ nhớ này sẽ bị mất dữ liệu khi ngắt điện nhưng bù lại tốc độ đọc ghi/xóa rất
nhanh. Kích thưởng nhỏ hơn Flash Memory nhiều lần [3].
* EEPROM (Electrically Eraseble Programmable Read Only Memory) là một
dạng bộ nhớ như Flash Memory nhưng có chu kì ghi/xóa cao hơn (khoảng 100.000
lần) và có kích thước rất nhỏ. Để đọc/ghi dữ liệu, ta có thể dùng thư viện EEPROM
của Arduino [3].
1.1.3.5 Đặc điểm và chức năng các chân của Arduino Uno
1.1.3.5.1 Các cổng vào và ra
Arduino Uno có tổng cộng 14 chân (pin) Digital dùng để đọc hoặc xuất tín
hiệu số được đánh số từ 0 đến 13 như trên hình 1.6. Chúng chỉ có hai mức điện áp
là 0V và 5V với dòng điện vào/ra tối đa trên mỗi chân là 40mA [3].
Hình 1.6 Các chân Digital của Arduino Uno [3]
Các chức năng đặc biệt của một số chân Digital [3]:
+ 2 chân nối tiếp 0 (RX) và 1 (TX) dùng để gửi (transmit – TX) và để nhận
(receive – RX) dữ liệu. Arduino Uno có thể giao tiếp với các thiết bị khác thông qua
hai chân này. Kết nối Bluetooth thường thấy chính là kết nối nối tiếp không dây.
Nếu không sử dụng giao thức này, không nên sử dụng hai chân RX và TX nếu
không cần thiết.
+ 6 chân PWM (Pulse Width Modulation) hay chân có khả năng điều chế độ
rộng xung, gồm có 3, 5, 6, 9, 10 và 11 được đánh dấu ~ trước mã số chân, cho phép
xuất ra xung PWM với độ phân giải 8 bit bằng hàm analogWrite ( ). Một cách đơn
giản, ta có thể điều chỉnh chế độ điện áp đầu ra ở các chân này từ mức 0V đến 5V
thay vì cố định ở mức 0V và 5V như các chân khác.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 10
+ Chân giao tiếp SPI là 10 (SS), 11 (MOSI), 12 (MOSI), 13 (SCK). Ngoài các
chưc năng thông thường, 4 chân này còn được dùng để truyền phát dữ liệu bằng
giao thức SPI với các thiết bị khác.
+ LED 13 có màu da cam được kí hiệu bằng chữ L trên Arduino Uno. Khi
bấm nút Reset, đèn này sẽ nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi
chân này được sử dụng thì đèn LED sẽ sáng.
Arduino Uno còn có thêm 6 chân Analog nhận kí hiệu tương tự được kí hiệu
từ A0 đến A5 như trên hình 1.7. Các chân này cung cấp độ phân giải 10 bit để đọc
giá trị điện áp trong khoảng 0V đến 5V. Với chân AREF trên board, có thể đưa vào
điện áp tham chiếu khi sử dụng các chân Analog. Tức là nếu ta cấp điện áp 2.5V
vào các chân này thì có thể dùng các chân Analog để đo điện áp trong khoảng từ 0V
đến 5V với độ phân giải là 10 bit.
Hình 1.7 Các chân Analog của Arduino Uno [3]
1.1.3.5.2 Các chân cấp nguồn
Các chân này dùng để cấp nguồn cho các thiết bị bên ngoài như Relay, cảm
biến, động cơ,... gồm có các chân GND (chân nối đất, chân âm), chân 5V, chân
3.3V như được thể hiện trên hình 1.8. Nhờ những chân này mà người dùng không
cần thiết bị biến đổi điện khi cấp nguồn cho thiết bị. Ngoài ra còn có các chân Vin,
chân Reset và chân IOREF nhưng các chân này ít khi được sử dụng.
Hình 1.8 Các chân năng lượng của Arduino Uno [3]
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 11
Arduino sử dụng cáp USB để giao tiếp với máy tính. Thông qua cáp USB
chúng ta có thể Upload chương trình cho Arduino hoạt động, ngoài ra USB còn là
nguồn cho Arduino.
Khi không sử dụng USB làm nguồn thì chúng ta có thể sử dụng nguồn ngoài
thông qua jack cắm 2.1 mm (cực dương ở giữa) hoặc có thể sử dụng 2 chân Vin và
GND để cấp nguồn cho Arduino.
Bo mạch hoạt động với nguồn ngoài ở điện áp từ 5V đến 20V. Ta có thể cấp
một áp lớn hơn, tuy nhiên chân 5V sẽ có mức điện áp lớn hơn 5V và nếu sử dụng
nguồn lớn hơn 12V thì dễ gây ra hiện tượng nóng và làm hỏng bo mạch. Vì vậy,
nên dùng nguồn ổn định từ 5V đến 12V.
Chân 5V và chân 3.3V (output voltage): các chân này dùng để lấy nguồn ra từ
nguồn mà chúng ta đã cấp cho Arduino. Đặc biệt không được cấp vào các chân này
vì sẽ làm hỏng Arduino [3].
+ Vin (Voltage Input) để cấp nguồn ngoài cho Arduino Uno, nối cục dương
của nguồn với chân này và cực âm của nguồn với chân GND [3].
+ Chân GND (Ground) là chân nối đất, sử dụng với mục đích tạo mạch kín khi
cấp nguồn cho ngoại vi. Khi dùng các thiết bị sử dụng những nguồn điện riêng biệt
thì những chân này phải đưuọc nối với nhau [3].
+ IOREF là chân có thể dùng để đo điện áp hoạt động của vi điều khiển trên
Arduino Uno (luôn là 5V). Mặc dù vậy, không được lấy nguồn 5V từ chân này để
sử dụng bởi chức năng của nó không phải là cấp nguồn [3].
+ RESET: việc nhấn nút RESET trên board để reset vi điều khiển tương
đương với việc chân RESET được nối với GND qua một điện trở 10k [3].
1.1.3.6 Ứng dụng của Arduino
Arduino ra đời nhằm phục vụ mục đích cho điều khiển điện tử nói chung.
Trong đó mảng điều khiển cơ điện tử cũng khá thông dụng với Arduino.
* Ứng dụng nền tảng của Arduino trong đồ án tốt nghiệp của sinh viên trường
Đại học Bà Rịa Vũng Tàu – Viện CNTT – điện – điện tử. Đề tài: “Robot dò line
điều khiển qua điện thoại” [4].
Robot dò line với những kết cấu cơ khí đơn giản nhưng lại có thể kết hợp
được với khá nhiều thành phần điện tử (encoder, sensor xác định đường line, sensor
đo khoảng cách...).
Nguyên lí tổng quát của toàn mạch bao gồm các bộ phận kết nối với nhau gồm
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 12
có: Module L298N, Module bluetooth HC05, Arduino Nano, màn hình LCD 16x2,
cảm biến sensor của mạch. Mạch cảm biến dò line gồm có 6 led để soi đường và 6
cảm biến quang dùng để cảm biến và phát tính hiệu đến Arduino Nano điều khiển
Robot. Đây là một phần quan trọng của Robot, nhờ có nó mà Robot có thẻ di
chuyển theo đường line và có thể hoạt động một cách ổn định nhất. Những Robot
này rất phù hợp với sinh viên học tập và nghiên cứu về ngành tự động hóa cũng yêu
thích kĩ thuật điện tử một cách cụ thể.
Hình 1.9 Robot dò line điều khiển qua điện thoại [4]
* Đồ án “Sử dụng bo mạch Arduino điều khiển bật đèn tiết kiệm năng lượng
và hiển thị thông tin tốc độ gió, điện năng trong ắc quy” của sinh viên khoa Công
nghệ Cơ khí – Đại học Điện lực [5].
Sử dụng bo mạch Arduino Mega 2560 để điều khiển toàn bộ phần điện tử. Tín
hiệu từ cảm biến ánh sáng được truyền vào bo mạch Arduino. Thông qua thuật toán
xử lí chống nhiễu, hệ thống biết được thời điểm nào là phù hợp để quyết định bật
đèn và tắt đèn, giúp tiết kiệm năng lượng một cách thông minh. Ngoài ra, bo mạch
Arduino còn nhận các điện áp từ ắc quy, các tín hiệu về vận tốc gió từ encoder gắn
trên trục turbine và xuất tín hiệu ra bảng led 7 thanh để hiển thị tức thời vận tốc gió
cũng như điện năng dự trữ còn trong ắc quy.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 13
Hình 1.10 Sử dụng bo mạch Arduino điều khiển bật đèn tiết kiệm năng lượng
và hiển thị thông tin tốc độ gió, điện năng trong ắc quy [5]
Việc sử dụng bo mạch sẵn Arduino trong đồ án này đảm bảo phần vi điều
khiển hoạt động ổn định, không bị ảnh hưởng bởi sự chấn động rung lắc cơ học do
gió gây nên.
1.2 Giới thiệu Module Wifi ESP8266
1.2.1 Giới thiệu về Module Wifi ESP8266 V1
Mạch thu phát wifi ESP8266 V1 sử dụng IC wifi SoC ESP8266 của hãng
Espressif, được sử dụng để kết nối với vi điều khiển thực hiện chức năng truyền dữ
liệu qua Wifi, mạch có thiết kế nhỏ gọn, sử dụng giao tiếp UART với bộ thư viện và
code mẫu rất nhiều từ cộng đồng. Module Wifi Esp8266 V1 được sử dụng trong các
ứng dụng IoT và điều khiển thiết bị qua wifi,...[6]
Hình 1.11 Module Wifi ESP8266 V1 [6]
1.2.2 Thông số kỹ thuật [6]
Điện áp sử dụng: 3.3VDC
Điện áp giao tiếp: 3.3VDC
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 14
Dòng tiêu thụ: Max 320mA (nên sử dụng module cấp nguồn riêng cho mạch).
Hỗ trợ chuẩn 802.11 b/g/n.
Wifi 2.4 GHz, hỗ trợ các chuẩn bảo mật như: OPEN, WEP, WPA_PSK,
WPA2_PSK, WPA_WPA2_PSK.
Hỗ trợ cả hai giao tiếp TCP và UDP.
Chuẩn giao tiếp UART với Firmware hỗ trợ bộ tập lệnh AT Command, tốc
độ Baudrate mặc định 9600 hoặc 115200.
Kích thước: 24.8 x 14.3 mm
1.2.3 Chân kết nối của Module Wifi Esp8266 V1
Hình 1.12 Sơ đồ chân của Module Wifi Esp8266 V1 [6]
Chức năng các chân của Module Wifi Esp8266 V1 [6]
1. VCC: 3.3V, dòng có thể lên 300mA vì thế cần mạch nguồn riêng ams1117
5V -> 3.3V.
2. GND: 0V.
3. Tx: chân Tx của giao thức UART, kết nối đến chân Rx của vi điều khiển.
4. Rx: chân Rx của giao thức UART, kết nối đến chân Tx của vi điều khiển.
5. RST: chân reset, kéo xuống mass để reset.
6. CH_PD: chân này nếu được kéo lên mức cao module sẽ bắt đầu thu phát
wifi, kéo xuống mức thấp module dừng phát wifi. Vì ESP8266 khởi động hút dòng
lớn nên chúng ta giữ chân này ở mức 0V khi khởi động hệ thống của mình, sau 2s
hãy kéo chân CH_PD lên 3.3V, để đảm bảo module hoạt động ổn định.
7. GPIO0: kéo xuống thấp cho chế độ upgrade firmware.
8. GPIO2: không sử dụng
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 15
1.2.4 Giao tiếp của module wifi ESP8266 với Arduino Uno
Sơ đồ nối dây giữa Arduino với Module Wifi Esp8266 V1 như sau.
Bảng 1.2 Sơ đồ nối dây [8]
Arduino Uno ESP8266
Pin 2 TX
Pin 3 RX
3.3V Vcc và CH_PD
GND GND
Hình 1.13 Sơ đồ nối chân của Arduino Uno với Module Wifi ESP8266 V1
1.3 Giới thiệu về Apps Virtuino trên Android
- Download phần mềm Virtuino trên trang CH Play.
- Tiếp theo, bạn cần đăng kí Channel ID trên Thingspeak để lấy địa chỉ ID.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 16
Hình 1.14 Địa chỉ ID trên Thingspeak
- Mở phần mềm Virtuino trên điện thoại và tiến hành cài đặt IoT Server theo
các bước nhập địa chỉ Channels ID, Read Key và Write Key như hình sau:
Hình 1.15 Cài đặt IoT Server trên điện thoại
Tiếp theo, tiến hành lấy ra các thiết bị cần thiết để tiến hành đo nhiệt độ và độ
ẩm như hình 1.16:
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 17
Hình 1.16 Thiết lập nhiệt độ và độ ẩm trên điện thoại
1.4 Cảm biến nhiệt độ và độ ẩm DHT11
1.4.1 Giới thiệu chung
Hình 1.17 Cảm biến nhiệt độ và độ ẩm DHT11 [7]
Cảm biến nhiệt độ và độ ẩm DHT11 là cảm biến 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 dây
truyền dữ liệu duy nhất). Bộ tiền xử lí tín hiệu tích hợp trong cảm biến giúp bạn có
được dữ liệu chính xác mà không phải qua bất kì tính toán nào [7].
Tuy nhiên, sư dụng cảm biến trong môi trường độ ẩm thuần là hơi nước, các
môi trường đặc biệt ủ kín như ủ tỏi đen, ủ yếm khí... sẽ sinh ra nấm và vi khuẩn
bám lên bề mặt cảm biến làm hư hỏng cảm biến.
1.4.2 Thông số kĩ thuật [7]
Nguồn: 3V đến 5V DC.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 18
Dòng sử dụng: 2.5 mA max (khi truyền dữ liệu).
Đo tốt ở độ ẩm 2080 %RH với sai số 5%.
Tần số lấy mẫu tối đa 1Hz (1 giây 1 lần).
Kích thước 15mm x 12mm x 5.5mm.
3 chân, khoảng cách chân 0.1”.
1.4.3 Giao tiếp giữa DHT11 với Arduino Uno
Bảng 1.3 Sơ đồ nối chân [7]
STT Arduino Uno DHT11
1 +5 V VCC
2 Pin 6 DATA
3 GND GND
Hình 1.18 Sơ đồ nối chân giữa Arduino Uno với cảm biến DHT11
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 19
CHƯƠNG 2. MÔ PHỎNG VÀ LẬP TRÌNH CHO ARDUINO
2.1 Phần mềm mô phỏng Proteus.
2.1.1 Tổng quan về phần mềm
Proteus là phần mềm cho phép mô phỏng hoạt động của mạch điện tử hay còn
gọi là giả lập linh kiện trên máy tính. Nó giúp ta có thể thao tác dễ dàng và xử lí trực
tiếp mà không cần phải nối dây hay cần các dụng cụ chuyên dụng để thực hành [8].
So với các phần mềm khác, Proteus có nhiều ưu điểm nổi trội như: mô phỏng
được rất nhiều linh kiện điện tử và các thiết bị hiển thị, kết quả mô phỏng rất trực
quan như một mạch điện tử thật. Ngoài ra, phần mềm còn cho phép mô phỏng các
chip vi điều khiển với chương trình do người dùng nạp [8].
Phần mềm bao gồm phần thiết kế mạch và viết chương trình điều khiển cho
các họ vi điều khiển như PIC, AVR, MCS-51,...
Phần mềm gồm 2 chương trình chính:
- ISIS cho phép mô phỏng mạch.
- ARES dùng để vẽ mạch in.
2.1.2 Cách sử dụng phần mềm Proteus.
Phần mềm Proteus hỗ trợ mạnh việc thiết kế sơ đồ nguyên lí, chạy mô phỏng
mạch điện cũng như thiết kế mạch in. Chính vì vậy, để làm việc với phần mềm
Proteus thì yêu cầu máy tính cần có cấu hình tối thiểu sau [8]:
- Bộ xử lí Pentium 1.6 GHz trở lên, bộ nhớ RAM tối thiểu là 128Mb, ổ cứng
40 Gb trở lên, ổ CD – ROM 52X, màn hình 17 inchs trở lên.
- Chạy trên môi trường Windows 2000, Nt hoặc Windows XP.
 Khởi động phần mềm:
Click vào biểu tượng ISIS trên màn hình để chạy chương trình.
 Khung làm việc chung:
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 20
Hình 2.1 Khung làm việc chung của phần mềm Proteus
Phần mềm Proteus bao gồm các thanh sau:
- Thanh công cụ chuẩn với các nút lệnh được thể hiện như ở bảng 2.1
Bảng 2.1 Thanh công cụ chuẩn [8]
Nút lệnh Chức năng
Dùng để vẽ sơ đồ nguyên lí và mô phỏng
Liên thông ARES để vẽ mạch in
Làm “tươi” màn hình và các chỉnh sửa
Bật/tắt lưới cho bản vẽ
Chọn gốc tọa độ
Các công cụ phóng to, thu nhỏ toàn mạch
Các công cụ chỉnh sửa, tạo thư viện linh kiện
Xuất danh sách linh kiện
Kiểm tra lỗi mạch điện (ERC)
Tìm kiếm linh kiện
Undo/Redo
Các lệnh tác động lên đối tượng đã được chọn trước
Chỉnh sửa thuộc tính chung
- Thanh linh kiện với các nút lệnh cho ở bảng 2.2
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 21
Bảng 2.2 Thanh linh kiện [8]
Nút lệnh Chức năng
Chỉnh sửa nhanh thuộc tính linh kiện
Nhóm các linh kiện vừa sử dụng
Thêm điểm nối nơi giao nhau của đường dây
Đặt tên cho dây dẫn
Thêm văn bản vào bảng vẽ
Nối dây dạng bus
Mạch phụ
Nguồn và GND
Vẽ chân linh kiện
Vẽ đồ thị mô phỏng
Các thiết bị tạo tính hiệu (sin, vuông,...)
Đầu dò dòng điện, điện áp
Các thiết bị đo dạng sóng
Công cụ vẽ 2D
Để đưa linh kiện vào vùng làm việc, ta kích chọn linh kiện sau đó thực hiện
thao tác drag-and-drop (nhấn chuột trái rồi giữ và rê chuột đến vị trí cần thiết kế).
Nếu linh kiện không tồn tại trên thanh linh kiện, ta cần thực hiện thêm mới từ các
thư viện có sẵn bằng cách chọn menu Library/Pick parts from librarys hoặc kích
chọn chữ P ở .[8]
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 22
2.1.3 Thư viện Arduino trong Proteus
Chương trình Proteus không hỗ trợ sẵn mạch Arduino, do đó ta có thể tải thư
viện về tại LIB_PROTEUS 8. Sau khi tải về, copy thư viện vào Lib của thư mục
chứa Proteus.
Thư viện bao gồm các linh kiện sau [8]:
- Arduino Uno (phiên bản chip ATMega328 chân DIP).
- Arduino Uno (phiên bản chip ATMega328 chân SMD).
- Arduino Mega.
- Arduino Lilypad.
- Arduino Nano.
- Cảm biến siêu âm Ultrasonic V2.
2.2 Giới thiệu về môi trường tích hợp Arduino IDE.
Môi trường phát triển tích hợp (IDE) Arduino là một ứng dụng đa nền tảng
được viết bằng Java, được dẫn xuất từ IDE cho ngôn ngữ lập trình xử lí và các dự
án lắp ráp. Nó được thiết kế để làm nhập môn lập trình cho các nhà lập trình và
những người mới sử dụng khác không quen thuộc với phát triển phần mềm. Nó bao
gồm một trình soạn thảo mở với các tính năng như làm nổi bật cú pháp, khớp dấu
ngoặc khối chương trình, thụt đầu dòng tự động, có khả năng biên dịch và tải lên
các chương trình vào bo mạch với một nhấp chuột duy nhất. Một chương trình hoặc
mã viết cho Arduino được gọi là “sketch” [9].
Hình 2.2 Giao diện của Arduino IDE
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 23
Giao diện của Arduino IDE gồm có ba vùng:
a. Vùng Toolbar chứa các phím lệnh như kiểm tra chương trình, nạp chương
trình, lưu, mở hay tạo mới chương trình [9].
Hình 2.3 Vùng Toolbar của Arduino IDE
Bảng 2.3 các chức năng trong vùng Toolbar [9]
Incon Chức năng
Kiểm tra chương trình có viết đúng cú pháp hay không
Biên dịch chương trình và nạp vào Arduino
Tạo một Sketch mới
Mở một Sketch đã lưu trước đó
Lưu chương trình lại
Mở màn hình hiển thị Serial Monitor để gửi và nhận dữ liệu giữa máy
tính và board Arduino (thông qua chuẩn RS232)
Current tab: Sketch đang được mở hiện tại, có thể có nhiều tab tương ứng
với nhiều Sketch hiện trên thanh đó [9].
Tab menu:
+ File: trong file menu, ở mục Examples. Đây là nơi chứa code mẫu, ví dụ
như cách sử dụng chân digital, analog, sensor,...
+ Sketch: trong menu Sketch có [9]:
1. Verify/Compile: chức năng kiểm tra lỗi code.
2. Show Sketch Folder: hiển thị nơi code được lưu.
3. Include Library: thêm thư viện cho IDE.
4. Add File: thêm vào một tab code mới.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 24
+ Tool: trong Tool ta quan tâm đến các mục mạch và cổng nối tiếp là Board và
Serial Port.
Mục Board cho phép lựa chọn board mạch phù hợp với board dang sử dụng.
Việc lựa chọn board mạch hết sức quan trọng, nếu chọn sai thì khi nạp chương trình
vào chip sẽ báo lỗi.
Mục Serial Port cho phép thiết lập cổng giao tiếp giữa máy tính và board. Đây
là nơi lựa chọn cổng COM của Arduino. Khi ta cài đặt Driver thì máy tính sẽ thể
hiện thông báo trên cổng COM của Arduino là bao nhiêu, ta chỉ cần vào Serial Port
chọn đúng cổng COM để nạp code, nếu chọn sai thì không thể nạp code cho
Arduino được [9].
b. Vùng viết chương trình: là nơi viết các dòng lệnh để điều khiển hoạt động
của vi điều khiển [9].
Hình 2.4 Minh họa vùng viết chương trình
Chương trình Arduino được viết bằng ngôn ngữ C hoặc C++. Arduino IDE đi
kèm với một thư viện phần mềm được gọi là “Wring” từ dự án lắp ráp ban đầu, cho
hoạt động đầu vào/ra phổ biến trở nên dễ dàng hơn. Người sử dụng chỉ cần định
nghĩa hai hàm để thực hiện một chương trình điều hành theo chu kì [9]:
Setup (): hàm chạy một lần duy nhất vào lúc bắt đầu một chương trình dùng
để khởi tạo các thiết lập.
Loop (): hàm được gọi lặp lại liên tục cho đến khi bo mạch được tắt đi.
Khi bạn bật điện bảng mạch Arduino, reset hay nạp chương trình mới, hàm
setup () sẽ được gọi đến đầu tiên. Sau khi xử lí xong hàm setup (), Arduino sẽ nhảy
đến hàm loop () và lặp vô hạn hàm này cho đến khi bạn tắt điện bo mạch Arduino.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 25
Hình 2.5 Minh họa các bước thực hiện một chương trình [9]
c. Vùng thông báo chính: là vùng có màu đen nằm ở cuối giao diện, dùng để
thông báo chương trình có lỗi hay không, vị trí lưu file [9].
Hình 2.6 Minh họa vùng thông báo
2.3 Lập trình điều khiển với Arduino
2.3.1 Cấu trúc của một chương trình
Một chương trình hiển thị trên của sổ giao diện đưuọc gọi là sketch. Sketch
được tạo từ hai hàm cơ bản là setup () và loop (). Hai hàm này là bắt buộc đối với
một chương trình của Arduino.
- Setup (): hàm này được gọi khi một hàm sketch khởi động, được sử dụng để
khởi tạo biến, đặt các chế độ chân (nhận hay xuất tín hiệu), khởi động một thư
viện... Hàm setup () chỉ chạy một lần, sau khi cấp nguồn hoặc reset mạch.
- Loop (): đây là cốt lõi của một chương trình Arduino. Khi Arduino đang
chạy, sau khi hàm setup đã chạy xong, hàm loop sẽ chạy qua tất cả các code. Sau đó
thực hiện lại toàn bộ cho đến khi hoặc là bị mất nguồn hoặc công tắc reset được
nhấn. Chiều dài thời gian cần để hoàn thành một loop phụ thuộc vào phần code
được chứa trong nó. Chức năng của hàm loop tương tự như vòng lặp while () trong
hàm C, hàm loop () sẽ điều khiển toàn bộ mạch.
Cách viết:
Một chương trình Arduino với hai hàm setup () và loop () sẽ được viết như sau:
void setup() {
// code khởi tạo sẽ đưuọc viết ở đây
Hàm setup() Hàm loop()
Bật nguồn
Bấm nguồn Reset
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 26
}
void loop() {
// code phân công việc mà ta muốn board Arduino thực hiện sẽ viết ở đây
}
}
2.3.2 Ngôn ngữ lập trình cho Arduino.
2.3.2.1 Giới thiệu ngôn ngữ C.
Các chương trình Arduino được viết bằng C hoặc C++. Arduino IDE đi kèm
với một thư viện phần mềm gọi là “Wiring”, từ project Wiring gốc có thể giúp các
thao tác input/output dễ dàng hơn. Người dùng chỉ cần định nghĩa hai hàm để tạo ra
một chương trình vòng thực thi (cyclic executive) có thể chạy được [10].
So với việc lập trình trực tiếp với vi điều khiển, lập trình với Arduino đơn giản
hơn nhiều vì ta chỉ cần giao tiếp với phần cứng thông qua các thư viện.
Một chương trình Arduino gồm có: các giá trị (biến số và hằng số), cấu trúc,
các hàm và thủ tục [10].
2.3.2.2 Các lệnh cơ bản trong C.
2.3.2.2.1 Giá trị
a. Các kiểu dữ liệu
Các kiểu dữ liệu thường dùng trong chương trình Arduino là void, int, char,
float, short, long, string, word...[10]
Trong đó, ta quan tâm chủ yếu đến:
int: là kiểu số nguyên chính được dùng trong chương trình Arduino. Kiểu int
chứa 2 byte bộ nhớ. Trên mạch Arduino Uno, nó có đoạn giá trị từ -32768 đến
32767 (-215 đến 215-1) (16 bit) [10].
Cú pháp:
int var = value;
Trong đó, var là tên biến và value là giá trị.
char: là kiểu dữ liệu biểu diễn cho một kí tự, chiếm 1 byte bộ nhớ (nếu cần
biểu diễn cho một chuỗi kí tự trong chương trình Arduino, ta cần sử dụng kiểu dữ
liệu String) [10].
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 27
Kiểu char chỉ nhận các giá trị trong bảng mã ASCII. Vì vậy, thay vì thiết đặt
một biến kiểu char có giá trị là ‘A’ thì ta có thể đặt là 65.
short: tươngtự kiểuint nhưng trênmọi mạchArduino nó chiếm 4 byte bộ nhớ và
biểu thị giá trị trong khoảng -32,768 đến 32,767 (-215 đến 215-1) (16 bit) [10].
Cú pháp:
Short var = value;
Trong đó, var là tên biến và value là giá trị.
b. Các hằng số
+ HIGH/LOW: Trong lập trình trên Arduino, HIGH là một hằng số có giá trị
nguyên là 1, LOW là nột hằng số có giá trị nguyên là 0. Trong điện tử, HIGH là một
mức điện áp lớn hơn 0V. Giá trị của HIGH được định nghĩa khác nhau trong các
mạch điện khác nhau, nhưng thường được quy ước ở các mức như 1.8V; 2.7V;
3.3V; 5V; 12V;... giá trị của LOW thường là 0V hoặc lớn hơn một chút [10].
+ true/false: true/false là các hằng số logic; false có giá trị là phủ định của true
(và ngược lại), tức là (!true) = false. Cũng có thể hiểu là true là một hằng số nguyên
mang giá trị là 1, false là một hằng số nguyên mang giá trị là 0 [10].
Không đươc viết “true, false” thành “TRUE, FALSE” hay bất kì một dạng nào
khác. Các giá trị “true”, “HIGH”, “l” là tương đương nhau và “false”, “LOW”, “()”
cũng vậy.
2.3.2.2.2 Cấu trúc
a. Các cú pháp mở rộng
 #define
#define làđối tượngcho phépđặt tênmột hằng số nguyên hay hằng số thực. Trước
khi biên dịch, trình biên dịch sẽ thay thế những tên hằng đang sử dụng bằng chính giá trị
của chúng. Quá trình thay thế này được gọi là quá trình tiền biên dịch [10].
Cú pháp:
#define [tên hằng] [giá trị của hằng]
Nếu một biến có tên trùng với tên hằng số được khai báo bằng #define thì khi
tiền biên dịch, biến ấy sẽ bị thay thế bằng hằng số kia. Dẫn đến khi biên dịch,
chương trình sẽ bị lỗi cú pháp. Vì vậy nên hạn chế sử dụng cú pháp #define để khai
báo hằng số khi không cần thiết.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 28
 #include
#include cho phép chương trình tải một thư viện đã được viết sẵn. Tức là có thể
truyxuất được những tài nguyên có trongthư viện này từ chương trìnhcủa mình. Nếu có
một đoạn code và cần sử dụng nó trong nhiều chương trình, ta có thể dùng #include để
nạp nó vào chương trình của mình, thay vì phải chép đi chép lại đoạn code ấy [10].
Cú pháp:
#include <[đường dẫn đến file chứa thư viện]>
 Chú thích trong chương trình
Việc chú thích trong chương trình nhằm mục đích giải thích ý nghĩa của câu
lệnh, đoạn chương trình hoặc hàm hoạt động như thế nào và làm gì. Việc chú thích
sẽ giúp cho người đọc hiểu được chương trình dễ dàng và nhanh chóng hơn, sửa lỗi
đơn giản hơn hoặc giúp xem lại các chương trình cũ một cách thuận lợi hơn. Và vì
chú thích không được Arduino biên dịch nên cho dù ta có viết dài đến cỡ nào thì
không ảnh hưởng đến bộ nhớ flash của vi điều khiển [10].
Để ghi chú trong Arduino ta có 2 cách [10]:
+ Lời chú thích được đặt sau dấu “//”. Nó sẽ ghi chú lại tất cả những chữ (text,
câu lệnh, hàm...) nằm sau dấu này cho đến khi hết dòng.
+ Lời ghi chú nằm trong cặp dấu “/*” và (*/). Nó sẽ ghi lại những gì nằm
trong cặp dấu này kể cả khi xuống hàng (lưu ý là không có dầu cách).
b. Các toán tử số học
 Phép gán (=) dùng để gán giá trị cho một biến, giá trị nằm bên phải, tên
biến nằm bên trái và cách nhau bởi một dấu bằng [10].
Cú pháp [10]:
Biến_1=Biến_2
Biến_2 là một giá trị xác định hoặc là biến.
Các phép cộng (+), trừ (-), nhân (*), chia (/)
Những phép toán trên có nhiệm vụ thực hiện việc tính toán thông thường trong
Arduino. Tùy thuộc vào kiểu dữ liệu của các biến hoặc hằng số mà kết quả trả về
của nó có kiểu dữ liệu như thế nào [10].
Phép chưa lấy dư (%) sử dụng để lấy về phần dư của một phép chia các số
nguyên [10].
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 29
Cú pháp:
<phần dư> = <số dư> % <số chia>;
a. Các toán tử so sánh
Các toán tử so sánh thường dùng để so sánh hai số có cùng một kiểu dữ liệu.
Bảng 2.4 Các toán tử so sánh [10]
Toán tử Ý nghĩa Ví dụ
== So sánh bằng (a == b) trả về TRUE nếu a = b và ngược lại
!= So sánh không bằng (a != b) trả về TRUE nếu a khác b và ngược lại
> So sánh lớn (a > b) trả về TRUE nếu a lớn hơn b và FALSE
nếu a bé hơn hoặc bằng b
< So sánh bé (a < b) trả về TRUE nếu a bé hơn b và FALSE
nếu ngược lại
<= Bé hơn hoặc bằng (a <= b) tương đương với ((a < b) or (a = ))
>= Lớn hơn hoặc bằng (a >= b) tương đương với ((a > b) or (a = ))
b. Các toán tử logic
Bảng 2.5 Các toán tử logic [10]
Toán tử Ý nghĩa Ví dụ
And (&&) Và (a && b) trả về TRUE nếu a và b đều mang giá trị TRUE.
Nếu một trong a hoặc b là FALSE thì (a && b) trả về FALSE
Or (ll) Hoặc (a ll b) trả về TRUE nếu có ít nhất 1 trong 2 giá trị a và b là
TRUE, trả về FALSE nếu cả a và b đều FALSE
Not (!) Phủ định Nếu a mang giá trị TRUE thì (!a) là FALSE và ngược lại
Xor (^) Loại trừ (a ^ b) trả về TRUE nếu a và b mang hai giá trị
TRUE/FALSE khác nhau, các trường còn lại trả về FALSE
c. Các phép toán hợp nhất
 Cộng một/trừ một: Cộng hoặc trừ một biến đi 1 đơn vị [10]
Cú pháp:
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 30
x++; // tăng x lên 1 giá trị và trả về giá trị cũ của x
++x; // tăng x lên 1 giá trị và trả về giá trị mới của x
x--; // trừ x đi 1 giá trị và trả về giá trị cũ của x
--x; // trừ x đi một giá trị và trả về giá trị mới của x
Với tham số x là bất kì kiểu số nguyên nào (int, byte, unsinged int,...). Trả về
giá trị cũ của biến hoặc giá trị mới đã được cộng hoặc bị trừ của biến ấy.
2.3.2.2.3 Các cấu trúc điều khiển
a. Câu lệnh if...else
Cú pháp [10]:
if ([biểu thức 1] [toán tử so sánh] [biểu thức 2])
{ //biểu thức điều kiện câu lệnh [câu lệnh 1]
} else {
[câu lệnh 2]
}
Nếu biểu thức điều kiện trả về giá trị true, [câu lệnh 1] sẽ được thực hiện,
ngược lại, [câu lệnh 2] sẽ được thực hiện.
Có thể sử dụng nhiều biểu thức điều kiện khi sử dụng câu lệnh if, mỗi biểu
thức con phải được khai báo bằng một ngoặc tròn và phải luôn có một ngoặc tròn
bao toàn bộ biểu thức con.
b. Câu lệnh swich/case
Khi có quá nhiều điều kiện để chọn thực hiện thì dùng câu lệnh if sẽ rất rối
rắm và dài dòng, lúc này ta sử dụng câu lệnh switch/case [10].
Cú pháp:
Switch (biểu thức)
{
Case [giá trị 1]:[lệnh 1];break;
Case [giá trị 2]:[lệnh 2];break;
Case [giá trị 3]:[lệnh 3];break;
...........................................
Case [giá trị n]:[lệnh n];break;
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 31
}
Lệnh này sẽ đánh giá các giá trị của biểu thức:
Nếu biểu thức này có giá trị bằng giá trị 1 => lệnh 1 sẽ thực hiện.
Nếu biểu thức này có giá trị bằng giá trị 2 => lệnh 2 sẽ thực hiện.
Nếu biểu thức này có giá trị bằng giá trị 3 => lệnh 3 sẽ thực hiện.
..........................................................................
Nếu biểu thức này có giá trị bằng giá trị n => lệnh n sẽ thực hiện.
Biểu thức phải có giá trị đếm được, kiểu dữ liệu của biểu thức phải là một số
nguyên hoặc là kí tự, chuỗi kí tự hoặc kiểu dữ liệu liệt kê [10].
c. Cấu trúc for
For có chức năng làm một vòng lặp. Vòng lặp được hiểu đơn giản là làm đi
làm lại một việc nào đó. Cấu trúc for là một vòng lặp có giới hạn, nghĩa là nó bắt
đầu từ một vị trí xác định và đi đến một vị trí kết thúc. Cứ sau một bước, vòng lặp
lại thực hiện một đoạn lệnh [10].
Cú pháp:
For (<biến chạy> = <start>;<điều kiện>;<bước>)
{
//lệnh
}
d. Cấu trúc while
Cú pháp [10]:
While (<điều kiện>)
{
// Các đoạn lệnh;
}
While là một dạng vòng lặp theo điều kiện. Cũng giống như for, quá trình lặp
trong while sẽ diễn ra liên tục cho đến khi biểu thức điều kiện trả về giá trị false.
Một điều cần lưu ý là biểu thức điều kiện tồn tại trước khi vòng lặp bắt đầu, do đó
vòng lặp có khi sẽ không được thực hiện lần nào, tùy thuộc vào việc khởi tạo giá trị
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 32
cho các biến có liên quan. Vòng lặp while thường được dùng trong các trường hợp
không biết rõ số lần lặp [10].
2.3.2.2.4 Các hàm và thủ tục
Hàm digitalWrite()
Hàm xuất tín hiệu ra các chân Digital, có hai giá trị là HIGHT hoặc LOW.
Nếu một pin được thiết đặt là OUTPUT bởi pinMode(), khi dùng
digitalWrite() để cuất tín hiệu thì điện thế tại chân này sẽ là 5V (hoặc 3.3V trên
mạch 3.3V) nếu được xuất tín hiệu là HIGHT, và 0V nếu được xuất tín hiệu là
LOW [10].
Nếu một pin được thiết đặt là INPUT bởi pinMode(), lúc này digitalWrite() sẽ
bật (HIGHT) hoặc tắt (LOW) hệ thống điện trở pullup nội bộ. Nên dùng
INPUT_PULLUP nếu muốn bật hệ thống pullup nội bộ [10].
Cú pháp:
digitalWrite(pin,value)
Trong đó:
pin: số của chân Digital muốn thiết đặt.
Value: HIGHT hoặc LOW.
Hàm digitalRead()
Đọc tín hiệu điện từ một chân Digital (được thiết đặt là INPUT), trả về hai giá
trị HIGHT hoặc LOW [10].
Cú pháp:
digitalRead(pin)
Trong đó: pin là giá trị digital muốn đọc.
Hàm analogRead()
Nhiệm vụ của analogRead() là đọc giá trị điện áp từ một chân Analog (ADC).
Trên mạch Arduino Uno có 6 chân Analog In, được kí hiệu từu A0 đến A5.
Trên các mạch khác cũng có các chân tương tự như vậy với tiền tố ‘A’ đứng đầu,
sau đó là số hiệu của chân [10].
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 33
analogRead() luôn trả về một số nguyên nằm trong khoảng từ 0 đến 1023
tương ứng với thang điện áp mặc định từ 0V đến 5V. Có thể điều chỉnh thang điện
áp này thông qua hàm analogReference() [10].
Hàm analogRead() cần 100 micro giây để thực hiện.
Cú pháp:
analogRead([chân đọc điện áp])
Hàm analogWrite()
Cho phép xuất ra một mức tín hiệu Analog (phát xung PWM) từ một chân
trên mạch Arduino. Người ta thường điều khiển mức sáng tối của đèn LED hay
hướng quay của động cơ bằng cách phát xung PWM như thế này [10].
Cú pháp [10]:
analogWrite([chân phát xung PWM],[giá trị xung PWM])
Hàm thời gian delay()
Hàm có nhiệm vụ dừng chương trình trong thời gian mili giây (1000 mili giây
= 1 giây) [10].
Cú pháp:
delay(ms)
trong đó: ms là thời gian ở mức mili giây, có kiểu dữ liệu là usigned long (là
kiểu số nguyên nằm trong khoảng từ 0 đến 4 294 967 295 (0 đến 232 – 1). Mỗi biến
mang kiểu dữ liệu này chiếm 4 byte bộ nhớ) [10].
2.3.2.2.5 Giao tiếp giữa máy tính với Arduino
Trong quá trình làm việc, máy tính và Arduino cần trao đổi dữ liệu cho nhau,
lúc này ta sử dụng truyền thông nối tiếp hay còn gọi là giao thức chuỗi (Serial). Tất
cả các mạch Arduino đều có ít nhất một cổng Serial (hay còn gọi là UART hoặc
USART). Arduino hỗ trợ một thư viện giao tiếp giữa các mạch Arduino với nhau
hoặc giữa Arduino với máy tính bao gồm các hàm và thủ tục, gọi là thư viện Serial.
Giao thức Serial được thực hiện qua hai cổng digital 0 (RX) và 1 (TX) hoặc qua
cổng USB với máy tính. Vì vậy, nếu đang sử dụng các hàm của thư viện Serial này,
ta không thể sử dụng các chân digital 0 và digital 1 để làm việc khác được [10].
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 34
Có thể sử dụng bảng Serial monitor có sẵn trong Arduino IDE để giao tiếp với
Arduino trong giao thức Serial. Kích vào biểu tượng Serial Monitor ( ) hoặc nhấn
tổ hợp phím Ctrl+Shift+M để mở bảng Serial Monitor, sau đó vào bảng chọn baudrate
giống với baudrate được dùng trong quá trình lập trình, mặc định là 9600 [10].
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 35
CHƯƠNG 3. THIẾT KẾ, LẬP TRÌNH VÀ LẮP ĐẶT
MẠCH ĐIỀU KHIỂN TỪ XA VỀ NHIỆT ĐỘ, ĐỘ ẨM
TRÊN ĐIỆN THOẠI DI ĐỘNG THÔNG QUA MODULE WIFI ESP8266
3.1 Phân tích mạch điều khiển
Phân tích mạch là bước quan trọng giúp xác định được kết cấu của mạch, các
thông số của thiết bị để từ đó có cơ sở thiết kế, điều khiển và lắp đặt.
Phân tích mạch điều khiển thiết bị dùng Module Wifi ESP8266 V1 với sơ đồ
khối tổng quát của mạch, nguyên lí hoạt động, lưu đồ thuật toán và chương trình
điều khiển.
3.1.1 Sơ đồ khối tổng quát
Mạch điều khiển thiết bị dùng Arduino Uno kết nối với Module Wifi ESP8266
V1 và cảm biến DHT11 có sơ đồ khối tổng quát được thể hiện như trên hình 3.1
Hình 3.1 Sơ đồ khối tổng quát
Trong đó:
- Khối nguồn: gồm có nguồn cấp cho Arduino Uno là 5V-DC lấy từ máy tính
điện tử thông qua cổng USB.
- Khối điều khiển trung tâm: board Arduino Uno có chức năng nhận tín hiệu từ
cảm biến DHT11 và gủi tín hiệu sang Module Wifi Esp8266 V1.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 36
- Khối phát tín hiệu điều khiển: Smartphone điều khiển bằng Module Wifi
ESP8266 có chức năng nhận tín hiệu từ Arduino Uno và phát tín hiệu qua wifi và
truyền lên web có tên là ThingSpeak.
- Khối thiết bị ngoại vi: cảm biếnnhiệt độ và độ ẩm DHT11 có chức năng nhận giá
trih nhiệt độ và độ ẩm từ môi trường.
 Quy trình kết nối (khi giới thiệu các thiết bị đã có sơ đồ kết nối):
- Trước tiên, kết nối Arduino Uno với Module Wifi Esp8266 V1.
- Tiếp theo, kết nối cảm biến nhiệt độ, độ ẩm DHT11 với Arduino Uno.
- Cắm dây USB 5V vào Arduino.
3.1.2 Nguyên lý hoạt động của hệ thống
Đầu tiên, khởi động phần mềm Virtuino. Tiếp theo, khởi động chương trình -
hệ thống sẽ thiết lập các thông số cần thiết và nhận tín hiệu từ Arduino IDE.
Trong đó, cần thiết lập các cổng của bo mạch Arduino. Người dùng sử dụng
phần mềm Arduino IDE để tiến hành viết chương trình code cho mạch điều khiển.
Mạch điều khiển kiểm tra tiêu chuẩn truyền UART (9600) sau đó đọc giá trị nhiệt
độ, độ ẩm từ cảm biến DHT11 và gửi đến Arduino. Lúc này, nếu Arduino có giá trị
nhiệt độ và độ ẩm thì sẽ gửi qua Module Wifi Esp8266 V1. Esp8266 V1 truyền dữ
liệu qua wifi và gửi lên trang web gọi là ThingSpeak. Cuối cùng, kết quả được hiển
thị lên màn hình điện thoại thông qua Apps Virtuino.
3.1.3 Lưu đồ thuật toán
Mạch điều khiển thiết bị dùng Module Wifi Esp8266 V1 có lưu đồ thuật toán
như hình 3.2:
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 37
Hình 3.2 Lưu đồ thuật toán mạch điều khiển
3.1.4 Nạp code và chạy chương trình.
- Đầu tiên để có thể viết chương trình cho mạch điều khiển thì ta cần chọn thư
viện SoftwareSerial cho phần mềm Arduino IDE.
- Viết code để nạp cho chương trình kết nối giữa Arduino + Esp8266 V1 +
DHT11 gửi lên Thingspeak như sau:
// Khóa luận
// Tạo giao tiếp với esp8266
#include <SoftwareSerial.h>
SoftwareSerial espSerial = SoftwareSerial(2,3); // arduino RX pin=2
arduino TX pin=3
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 38
#include <DHT.h> //thư viện cảm biến
#define DHTPIN 5 // chân input cảm biến
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
String apiKey = "OG23B22NRB99H1D2"; // key API trên thingSpeak
String ssid="WIFI CHUA"; // Nhập wifi
String password ="0988366493"; // Nhập pass wifi
boolean DEBUG=true;
// kiểm tra phản hồi
void showResponse(int waitTime){
long t=millis();
char c;
while (t+waitTime>millis()){
if (espSerial.available()){
c=espSerial.read();
if (DEBUG) Serial.print(c);
}
}
}
//Hàm gửi giá trị lên thingSpeak
boolean thingSpeakWrite(float value1, float value2){
String cmd = "AT+CIPSTART="TCP",""; // Kết nối với TCP
cmd += "184.106.153.149"; // api.thingspeak.com
cmd += "",80";
espSerial.println(cmd);
if (DEBUG) Serial.println(cmd);
if(espSerial.find("Error")){
if (DEBUG) Serial.println("AT+CIPSTART error");
return false;
}
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 39
String getStr = "GET /update?api_key=";
getStr += apiKey;
getStr +="&field1=";
getStr += String(value1);
getStr +="&field2=";
getStr += String(value2);
getStr += "rnrn";
// send data length
cmd = "AT+CIPSEND="; //Đưa độ dài tập tin cho Esp8266 để nhận
cmd += String(getStr.length()); //Lấy độ dài của getStr rồi gửi lên Esp8266
espSerial.println(cmd);
if (DEBUG) Serial.println(cmd);
delay(100);
if(espSerial.find(">")){
espSerial.print(getStr); //Nếu tìm thấy kí tự phản hồi của lệnh Send thì gửi dữ
liệu lên thingSpeak cho Esp8266
if (DEBUG) Serial.print(getStr);
}
else{
espSerial.println("AT+CIPCLOSE");
// alert user
if (DEBUG) Serial.println("AT+CIPCLOSE");
return false;
}
return true;
}
//=============================================== setup
void setup() {
DEBUG=true;
Serial.begin(9600);
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 40
dht.begin();
espSerial.begin(115200);
espSerial.println("AT+CWMODE=1"); // set esp8266 as client
showResponse(1000);
espSerial.println("AT+CWJAP=""+ssid+"",""+password+""");
showResponse(5000);
if (DEBUG) Serial.println("Setup completed");
}
// chương trình chính
void loop() {
// Read sensor values
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
if (DEBUG) Serial.println("Failed to read from DHT");
}
else {
if (DEBUG) Serial.println("Temp="+String(t)+" *C");
if (DEBUG) Serial.println("Humidity="+String(h)+" %");
thingSpeakWrite(t,h);
}
delay(2000);
}
3.2 Thiết kế mạch và thi công mạch điều khiển
3.2.1 Xác định mạch điều khiển
Mạch điều khiển thiết bị qua Module Wifi Esp8266 dùng Arduino bao gồm:
- Board Arduino Uno R3.
- Module Wifi Esp8266 V1.
- Cảm biến nhiệt độ và độ ẩm DHT11.
- Smartphone chạy hệ điều hành Android.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 41
- Nguồn 5V cấp cho Arduino từ cổng USB.
- Dây nối.
Mạch điều khiển thiết bị qua Module Wifi Esp8266 dùng Arduino có thể sử
dụng để điều khiển cùng một lúc rất nhiều thiết bị. Nhưng để đơn giản và tiết kiệm
chi phí, mạch này chỉ sử dụng để điều khiển nhiệt độ, độ ẩm.
3.2.2 Giải pháp công nghệ
- Mạch sử dụng board Arduino Uno, Module Wifi Esp8266 V1 và cảm biến
nhiệt độ, độ ẩm DHT11.
- Ngôn ngữ lập trình trên Arduino IDE.
3.2.3 Giải pháp thiết kế
- Lắp rắp mạch điều khiển với các board Arduino Unovà Module Wifi
Esp8266 V1; board Arduino Uno và Cảm biến DHT11 với các thiết bị ngoại vi.
- Viết chương trình cho mạch điều khiển.
3.2.4 Yêu cầu của mạch điều khiển
- Hoạt động chính xác.
- Mạch điều khiển đơn giản.
- Giá thành thấp, tính ứng dụng cao trong thực tế.
- Có khả năng mở rộng.
3.2.5 Thi công mạch điều khiển
3.2.5.1 Kết nối phần cứng và nạp chương trình mạch điều khiển
Bước 1: Kết nối các chân của cảm biến DHT11 với các chân bo mạch Aruino
Uno. Tiếp theo tiến hành kết nối các chân của Module Wifi Esp8266 V1 với các
chân bo mạch Aruino Uno.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 42
Hình 3.3 Kết nối phần cứng của mạch điều khiển
Bước 2: Tiến hành cấp nguồn cho Arduino.
Cắm jack USB 5V kết nối giữa máy tính và Arduino. Lúc này, các đèn báo
trên board Arduino và trên module wifi Esp8266 V1 sẽ sáng lên báo hiệu mạch đã
khởi động.
Hình 3.4 Đèn trên Arduino mà module wifi Esp8266 sáng khi cấp nguồn
Bước 3: Nạp chương trình điều khiển.
Mở Arduino IDE và tiến hành viết chương trình cho mạch điều khiển gửi lên
Thingspeak. Trước tiên, để kiểm tra chương trình có lỗi hay không ta kích chọn biểu
tượng . Nếu chương trình không có lỗi, trên giao diện sẽ xuất hiện dòng “Done
compiling” ở vùng thông báo.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 43
Hình 3.5 Kiểm tra lỗi của chương trình phát tín hiệu
Khi nhận thông báo chương trình đã sẵn sàng ta tiến hành nạp chương trình
xuống vi điều khiển Arduino. Kích chọn biểu tượng .
Hình 3.6 Nạp chương trình xuống cho mạch điều khiển
Nếu quá trình nạp thành công:
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 44
Hình 3.7 Quá trình nạp thành công
3.2.5.2 Hoạt động của mạch điều khiển
Sau khi nạp chương trình cho Arduino thì hệ thống bắt đầu làm việc và cho giá trị
nhiệt độ, độ ẩm như hình 3.8.
Hình 3.8 Kết quả đo nhiệt độ, độ ẩm hiển thị trên máy tính
Tín hiệu nhận được về giá trị nhiệt độ và độ ẩm sẽ được đưa lên thingSpeak như
hình 3.9 dưới đây.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 45
Hình 3.9 Kết quả đo nhiệt độ và độ ẩm được đưa lên thingSpeak
Cuối cùng Module Wifi Esp8266 V1 sẽ đưa tín hiệu về nhiệt độ và độ ẩm
nhận được hiển thị trên Smartphone.
Hình 3.10 Kết quả nhiệt độ và độ ẩm hiển thị trên Smartphone
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 46
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Sau một thời gian thực hiện đề tài với sự giúp đỡ, hướng dẫn tận tình của thầy
Hoàng Đình Long cùng với sự nổ lực của bản thân, đến nay em đã hoàn thành xong
đề tài “Điều khiển thiết bị qua Module Wifi Esp8266” đúng thời gian quy định.
Bởi vì mạch đã được thực thi trong thực tế với các phần cứng như đã trình bày
nên trong đề tài này không tiến hành mô phỏng mạch điều khiển.
 Khóa luận đã trình bày những nội dung chủ yếu sau:
- Thứ nhất, giới thiệu tổng quan về Arduino, Module Wifi Esp8266 và cảm
biến nhiệt độ, độ ẩm DHT11 được sử dụng trong mạch điều khiển.
- Thứ hai, giới thiệu phần mềm ứng dụng Virtuino trên Android, phần mềm
mô phỏng Proteus, phần mềm Arduino IDE và ngôn ngữ lập trình cho Arduino.
- Thứ ba, thiết kế mạch điều khiển dùng Module Wifi Esp8266 và đưa ra một
số hình ảnh thực tế của phần thi công mạch.
 Hướng phát triển của đề tài:
Đề tài chỉ nghiên cứu điều khiển lấy nhiệt độ, độ ẩm ta có thể phát triển thêm
bằng cách kết nối Arduino với module Relay là có thể điều khiển được các thiết bị
sử dụng điện 220V trong gia đình, hoặc có thể phát triển để thiết kế mạch điều
khiển xe điều khiển từ xa, làm mô hình tưới nước tự động...
Trên thực tế, Arduino còn có rất nhiều ứng dụng khác nữa như điều khiển các
loại máy móc cần độ chính xác cao, điều khiển máy bay không người lái, điều khiển
xe mô hình,... Arduino cũng được chọn là bộ xử lý trung tâm của rất nhiều Robot.
Do đó, có thể xem sự phát triển của Arduino là một bước tiến mới trong công nghệ,
giúp cho nền khoa học kĩ thuật ngày càng phát triển hơn.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 47
TÀI LIỆU THAM KHẢO
[1]. Arduino – nềntảngtrong việcđiềukhiển tự động, truy cập 22h ngày 24/12/2017.
http://blog.siliconstraits.vn/arduino-nen-tang-moi-trong-viec-dieu-khien-tu-dong/
[2]. Báo cáo đồ án 1 – thiết kế mạch đo nhiệt độ sử dụngboard arduino hiển thị trên 4
led 7 thanh và truyền phát không dây, khoa điện trường ĐH bách khoa Hà Nội, truy
cập 19h ngày 27/12/2017.
http://luanvan.co/luan-van/de-tai-thiet-ke-mach-do-nhiet-do-su-dung-board-arduino-
hien-thi-tren-4-led-7-thanh-va-truyen-phat-khong-day-su-dung-52990/
[3]. Nguyễn Trung Tín, Hướng dẫn sử dụng cơ bản Arduino, TP HCM, 2014.
[4]. Robot dò line điều khiển qua điện thoại, trường ĐH Bà Rịa Vũng Tàu, truy cập
ngày 2/1/2018.
http://thuvienso.bvu.edu.vn/bitstream/TVDHBRVT/16119/1/Nguyen-Quoc-An.pdf
[5]. http://www.epu.edu.vn/cnck/Default.aspx?BT=14869
[6]. Mạch thu phát wifi Esp8266 V1, truy cập 8h ngày 14/3/2018.
http://hshop.vn/products/mach-thu-phat-wifi-esp8266-v1
[7]. Cảm biến nhiệt độ độ ẩm DHT11 ra chân, truy cập 10h ngày 14/3/2018.
http://hshop.vn/products/cam-bien-do-am-nhiet-do-dht11
[8]. Báo cáo hướng dẫn sử dụng phần mềm mô phỏng proteus, truy cập 19h ngày
16/3/2018.
http://doc.edu.vn/tai-lieu/bao-cao-huong-dan-su-dung-phan-mem-mo-phong-proteus-
59163/
[9]. Phạm Quang Huy – Lê Cảnh Trung, Lập trình điều khiển với Arduino, NXB Khoa
Học và Kỹ Thuật, 2014.
[10]. Ngôn ngữ lập trình trên Arduino, truy cập 19h ngày 18/3/2018.
http://arduino.vn/reference.
[11]. Điều khiển và giám sát qua điện thoại, truy cập 20h ngày 1/4/2018.
https://hocarm.org/dieu-khien-va-giam-sat-qua-dien-thoai-voi-esp8266-va-blynk/#ftoc-
heading-3
[12]. Trang ThingSpeak trên web, truy cập ngày 24/4/2018.
Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long
SVTH:Nguyễn Thị Kim Anh 48
https://thingspeak.com/channels/480815/api_keys
[13]. Esp8266 kết nối internet phần 1, truy cập ngày 25/4/2018
http://arduino.vn/bai-viet/1496-esp8266-ket-noi-internet-phan-1-cai-dat-esp8266-lam-
mot-socket-client-ket-noi-toi
[14]. Hướng dẫn sử dụng ModuleWifi Esp8266V1 với ArduinoUno R3, truy cập ngày
29/4/2018.
http://tdhshop.com.vn/huong-dan-su-dung-module-wifi-esp8266-v1-voi-arduino-unor3

Mais conteúdo relacionado

Mais procurados

đề Tài thiết kế hệ thống đèn giao thông tại ngã tư
đề Tài thiết kế hệ thống đèn giao thông tại ngã tưđề Tài thiết kế hệ thống đèn giao thông tại ngã tư
đề Tài thiết kế hệ thống đèn giao thông tại ngã tưnataliej4
 
Thiết kế chế tạo mô hình nhà thông minh sử dụng Arduino
Thiết kế chế tạo mô hình nhà thông minh sử dụng ArduinoThiết kế chế tạo mô hình nhà thông minh sử dụng Arduino
Thiết kế chế tạo mô hình nhà thông minh sử dụng Arduinoanh hieu
 
Thiết kế bộ điều khiển thiết bị điện từ xa thông qua mạng internet trên phần ...
Thiết kế bộ điều khiển thiết bị điện từ xa thông qua mạng internet trên phần ...Thiết kế bộ điều khiển thiết bị điện từ xa thông qua mạng internet trên phần ...
Thiết kế bộ điều khiển thiết bị điện từ xa thông qua mạng internet trên phần ...Man_Ebook
 

Mais procurados (20)

Luận văn: Thiết kế hệ thống tưới cây tự động, HAY
Luận văn: Thiết kế hệ thống tưới cây tự động, HAYLuận văn: Thiết kế hệ thống tưới cây tự động, HAY
Luận văn: Thiết kế hệ thống tưới cây tự động, HAY
 
Đề tài: Ứng dụng xử lý ảnh trong hệ thống phân loại sản phẩm
Đề tài: Ứng dụng xử lý ảnh trong hệ thống phân loại sản phẩmĐề tài: Ứng dụng xử lý ảnh trong hệ thống phân loại sản phẩm
Đề tài: Ứng dụng xử lý ảnh trong hệ thống phân loại sản phẩm
 
Đề tài: Mạch điều khiển thiết bị bằng Android qua Bluetooth, HAY
Đề tài: Mạch điều khiển thiết bị bằng Android qua Bluetooth, HAYĐề tài: Mạch điều khiển thiết bị bằng Android qua Bluetooth, HAY
Đề tài: Mạch điều khiển thiết bị bằng Android qua Bluetooth, HAY
 
Đề tài: Ứng dụng PLC S7 – 1200 điều khiển, giám sát lò đốt bã mía
Đề tài: Ứng dụng PLC S7 – 1200 điều khiển, giám sát lò đốt bã míaĐề tài: Ứng dụng PLC S7 – 1200 điều khiển, giám sát lò đốt bã mía
Đề tài: Ứng dụng PLC S7 – 1200 điều khiển, giám sát lò đốt bã mía
 
Đề tài: Hệ thống giám sát điện năng tiêu thụ trong hộ gia đình
Đề tài: Hệ thống giám sát điện năng tiêu thụ trong hộ gia đìnhĐề tài: Hệ thống giám sát điện năng tiêu thụ trong hộ gia đình
Đề tài: Hệ thống giám sát điện năng tiêu thụ trong hộ gia đình
 
Đề tài: Chế tạo mô hình nhà thông minh sử dụng Arduino, HAY
Đề tài: Chế tạo mô hình nhà thông minh sử dụng Arduino, HAYĐề tài: Chế tạo mô hình nhà thông minh sử dụng Arduino, HAY
Đề tài: Chế tạo mô hình nhà thông minh sử dụng Arduino, HAY
 
Đề tài: Cảnh báo sinh viên thông qua hệ thống quét vân tay, 9đ
Đề tài: Cảnh báo sinh viên thông qua hệ thống quét vân tay, 9đĐề tài: Cảnh báo sinh viên thông qua hệ thống quét vân tay, 9đ
Đề tài: Cảnh báo sinh viên thông qua hệ thống quét vân tay, 9đ
 
đề Tài thiết kế hệ thống đèn giao thông tại ngã tư
đề Tài thiết kế hệ thống đèn giao thông tại ngã tưđề Tài thiết kế hệ thống đèn giao thông tại ngã tư
đề Tài thiết kế hệ thống đèn giao thông tại ngã tư
 
Thiết kế chế tạo mô hình nhà thông minh sử dụng Arduino
Thiết kế chế tạo mô hình nhà thông minh sử dụng ArduinoThiết kế chế tạo mô hình nhà thông minh sử dụng Arduino
Thiết kế chế tạo mô hình nhà thông minh sử dụng Arduino
 
Đề tài: Thiết bị khóa cửa bằng bảo mật và thẻ chip RFID, HAY
Đề tài: Thiết bị khóa cửa bằng bảo mật và thẻ chip RFID, HAYĐề tài: Thiết bị khóa cửa bằng bảo mật và thẻ chip RFID, HAY
Đề tài: Thiết bị khóa cửa bằng bảo mật và thẻ chip RFID, HAY
 
Đề tài: Thiết kế mô hình hệ thống và quản lý trang trại heo, HAY
Đề tài: Thiết kế mô hình hệ thống và quản lý trang trại heo, HAYĐề tài: Thiết kế mô hình hệ thống và quản lý trang trại heo, HAY
Đề tài: Thiết kế mô hình hệ thống và quản lý trang trại heo, HAY
 
Thiết kế bộ điều khiển thiết bị điện từ xa thông qua mạng internet trên phần ...
Thiết kế bộ điều khiển thiết bị điện từ xa thông qua mạng internet trên phần ...Thiết kế bộ điều khiển thiết bị điện từ xa thông qua mạng internet trên phần ...
Thiết kế bộ điều khiển thiết bị điện từ xa thông qua mạng internet trên phần ...
 
Đề tài: Thiết kế hệ thống thông minh cảnh báo cho xe máy
Đề tài: Thiết kế hệ thống thông minh cảnh báo cho xe máyĐề tài: Thiết kế hệ thống thông minh cảnh báo cho xe máy
Đề tài: Thiết kế hệ thống thông minh cảnh báo cho xe máy
 
Đề tài: Thiết kế và thi công cân điện tử, HAY, 9đ
Đề tài: Thiết kế và thi công cân điện tử, HAY, 9đĐề tài: Thiết kế và thi công cân điện tử, HAY, 9đ
Đề tài: Thiết kế và thi công cân điện tử, HAY, 9đ
 
Đồ án hệ thống điều khiển và giám sát các thiết bị trong nhà.doc
Đồ án hệ thống điều khiển và giám sát các thiết bị trong nhà.docĐồ án hệ thống điều khiển và giám sát các thiết bị trong nhà.doc
Đồ án hệ thống điều khiển và giám sát các thiết bị trong nhà.doc
 
Đề tài: Hệ thống điều khiển và giám sát thiết bị qua Webserver
Đề tài: Hệ thống điều khiển và giám sát thiết bị qua WebserverĐề tài: Hệ thống điều khiển và giám sát thiết bị qua Webserver
Đề tài: Hệ thống điều khiển và giám sát thiết bị qua Webserver
 
Đề tài: Mô hình điều khiển, giám sát bãi giữ xe ô tô tự động, 9đ
Đề tài: Mô hình điều khiển, giám sát bãi giữ xe ô tô tự động, 9đĐề tài: Mô hình điều khiển, giám sát bãi giữ xe ô tô tự động, 9đ
Đề tài: Mô hình điều khiển, giám sát bãi giữ xe ô tô tự động, 9đ
 
Đề tài: Điều khiển thiết bị bằng giọng nói qua Google Asstiant, 9đ
Đề tài: Điều khiển thiết bị bằng giọng nói qua Google Asstiant, 9đĐề tài: Điều khiển thiết bị bằng giọng nói qua Google Asstiant, 9đ
Đề tài: Điều khiển thiết bị bằng giọng nói qua Google Asstiant, 9đ
 
Đề tài: Thiết kế bãi giữ xe ứng dụng công nghệ RFID và xử lý ảnh
Đề tài: Thiết kế bãi giữ xe ứng dụng công nghệ RFID và xử lý ảnhĐề tài: Thiết kế bãi giữ xe ứng dụng công nghệ RFID và xử lý ảnh
Đề tài: Thiết kế bãi giữ xe ứng dụng công nghệ RFID và xử lý ảnh
 
Điều khiển thiết bị điện tử bằng Android thông qua Bluetooth, 9đ
Điều khiển thiết bị điện tử bằng Android thông qua Bluetooth, 9đĐiều khiển thiết bị điện tử bằng Android thông qua Bluetooth, 9đ
Điều khiển thiết bị điện tử bằng Android thông qua Bluetooth, 9đ
 

Semelhante a [123doc] dieu-khien-thiet-bi-qua-module-wifi-esp8266

Thiết kế mạch giám sát đồng hồ điện công nghiệp
Thiết kế mạch giám sát đồng hồ điện công nghiệpThiết kế mạch giám sát đồng hồ điện công nghiệp
Thiết kế mạch giám sát đồng hồ điện công nghiệptraigalang1991
 
Thiết kế mạch giám sát đồng hồ điện công nghiệp
Thiết kế mạch giám sát đồng hồ điện công nghiệpThiết kế mạch giám sát đồng hồ điện công nghiệp
Thiết kế mạch giám sát đồng hồ điện công nghiệptraigalang1991
 
[123doc] - ip-multicast-va-ung-dung.pdf
[123doc] - ip-multicast-va-ung-dung.pdf[123doc] - ip-multicast-va-ung-dung.pdf
[123doc] - ip-multicast-va-ung-dung.pdfHanaTiti
 
IP multicast và ứng dụng.pdf
IP multicast và ứng dụng.pdfIP multicast và ứng dụng.pdf
IP multicast và ứng dụng.pdfHanaTiti
 
PHÂN TÍCH CHUỖI GIÁ TRỊ TOÀN CẦU VỀ SẢN PHẨM MÁY VI TÍNH VÀ LINH KIỆN ĐIỆN TỬ...
PHÂN TÍCH CHUỖI GIÁ TRỊ TOÀN CẦU VỀ SẢN PHẨM MÁY VI TÍNH VÀ LINH KIỆN ĐIỆN TỬ...PHÂN TÍCH CHUỖI GIÁ TRỊ TOÀN CẦU VỀ SẢN PHẨM MÁY VI TÍNH VÀ LINH KIỆN ĐIỆN TỬ...
PHÂN TÍCH CHUỖI GIÁ TRỊ TOÀN CẦU VỀ SẢN PHẨM MÁY VI TÍNH VÀ LINH KIỆN ĐIỆN TỬ...lamluanvan.net Viết thuê luận văn
 
Luận văn thạc sĩ
Luận văn thạc sĩLuận văn thạc sĩ
Luận văn thạc sĩssuser499fca
 
Luận văn: Ứng dụng wifi cho hệ thống điều khiển chiếu sáng trong nhà - Gửi mi...
Luận văn: Ứng dụng wifi cho hệ thống điều khiển chiếu sáng trong nhà - Gửi mi...Luận văn: Ứng dụng wifi cho hệ thống điều khiển chiếu sáng trong nhà - Gửi mi...
Luận văn: Ứng dụng wifi cho hệ thống điều khiển chiếu sáng trong nhà - Gửi mi...Dịch vụ viết bài trọn gói ZALO: 0909232620
 
Hệ thống xử lý tín hiệu điện não tự động phát hiện gai động kinh.pdf
Hệ thống xử lý tín hiệu điện não tự động phát hiện gai động kinh.pdfHệ thống xử lý tín hiệu điện não tự động phát hiện gai động kinh.pdf
Hệ thống xử lý tín hiệu điện não tự động phát hiện gai động kinh.pdfHanaTiti
 
Bao cao cuoi ky [fixed]
Bao cao cuoi ky [fixed]Bao cao cuoi ky [fixed]
Bao cao cuoi ky [fixed]TranQuangChien
 
Tối ưu hoá và đánh giá hiệu năng của tổ chức cache trong hệ thống vi xử lý th...
Tối ưu hoá và đánh giá hiệu năng của tổ chức cache trong hệ thống vi xử lý th...Tối ưu hoá và đánh giá hiệu năng của tổ chức cache trong hệ thống vi xử lý th...
Tối ưu hoá và đánh giá hiệu năng của tổ chức cache trong hệ thống vi xử lý th...Man_Ebook
 
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cảnđồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cảnhttps://www.facebook.com/garmentspace
 
Luận Văn Tính Toán Dầm Thép Tiết Diện Dạng Chữ I Chịu Xoắn Theo AISC
Luận Văn Tính Toán Dầm Thép Tiết Diện Dạng Chữ I Chịu Xoắn Theo AISCLuận Văn Tính Toán Dầm Thép Tiết Diện Dạng Chữ I Chịu Xoắn Theo AISC
Luận Văn Tính Toán Dầm Thép Tiết Diện Dạng Chữ I Chịu Xoắn Theo AISCLe Duy
 
Luận án: Ước lượng kênh truyền mimo dùng thuật toán mù cải tiến, HAY
Luận án: Ước lượng kênh truyền mimo dùng thuật toán mù cải tiến, HAYLuận án: Ước lượng kênh truyền mimo dùng thuật toán mù cải tiến, HAY
Luận án: Ước lượng kênh truyền mimo dùng thuật toán mù cải tiến, HAYViết thuê trọn gói ZALO 0934573149
 
File bao cao Wifi Robot
File bao cao Wifi RobotFile bao cao Wifi Robot
File bao cao Wifi RobotChinh Vo Wili
 

Semelhante a [123doc] dieu-khien-thiet-bi-qua-module-wifi-esp8266 (20)

DUNG NĂNG ĐA NGƯỜI DÙNG VÀ KỸ THUẬT SIC.doc
DUNG NĂNG ĐA NGƯỜI DÙNG VÀ KỸ THUẬT SIC.docDUNG NĂNG ĐA NGƯỜI DÙNG VÀ KỸ THUẬT SIC.doc
DUNG NĂNG ĐA NGƯỜI DÙNG VÀ KỸ THUẬT SIC.doc
 
Thiết kế mạch giám sát đồng hồ điện công nghiệp
Thiết kế mạch giám sát đồng hồ điện công nghiệpThiết kế mạch giám sát đồng hồ điện công nghiệp
Thiết kế mạch giám sát đồng hồ điện công nghiệp
 
Thiết kế mạch giám sát đồng hồ điện công nghiệp
Thiết kế mạch giám sát đồng hồ điện công nghiệpThiết kế mạch giám sát đồng hồ điện công nghiệp
Thiết kế mạch giám sát đồng hồ điện công nghiệp
 
Luận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải Phòng
Luận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải PhòngLuận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải Phòng
Luận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải Phòng
 
[123doc] - ip-multicast-va-ung-dung.pdf
[123doc] - ip-multicast-va-ung-dung.pdf[123doc] - ip-multicast-va-ung-dung.pdf
[123doc] - ip-multicast-va-ung-dung.pdf
 
IP multicast và ứng dụng.pdf
IP multicast và ứng dụng.pdfIP multicast và ứng dụng.pdf
IP multicast và ứng dụng.pdf
 
PHÂN TÍCH CHUỖI GIÁ TRỊ TOÀN CẦU VỀ SẢN PHẨM MÁY VI TÍNH VÀ LINH KIỆN ĐIỆN TỬ...
PHÂN TÍCH CHUỖI GIÁ TRỊ TOÀN CẦU VỀ SẢN PHẨM MÁY VI TÍNH VÀ LINH KIỆN ĐIỆN TỬ...PHÂN TÍCH CHUỖI GIÁ TRỊ TOÀN CẦU VỀ SẢN PHẨM MÁY VI TÍNH VÀ LINH KIỆN ĐIỆN TỬ...
PHÂN TÍCH CHUỖI GIÁ TRỊ TOÀN CẦU VỀ SẢN PHẨM MÁY VI TÍNH VÀ LINH KIỆN ĐIỆN TỬ...
 
Luận văn thạc sĩ
Luận văn thạc sĩLuận văn thạc sĩ
Luận văn thạc sĩ
 
Luận văn: Ứng dụng wifi cho hệ thống điều khiển chiếu sáng trong nhà - Gửi mi...
Luận văn: Ứng dụng wifi cho hệ thống điều khiển chiếu sáng trong nhà - Gửi mi...Luận văn: Ứng dụng wifi cho hệ thống điều khiển chiếu sáng trong nhà - Gửi mi...
Luận văn: Ứng dụng wifi cho hệ thống điều khiển chiếu sáng trong nhà - Gửi mi...
 
Hệ thống xử lý tín hiệu điện não tự động phát hiện gai động kinh.pdf
Hệ thống xử lý tín hiệu điện não tự động phát hiện gai động kinh.pdfHệ thống xử lý tín hiệu điện não tự động phát hiện gai động kinh.pdf
Hệ thống xử lý tín hiệu điện não tự động phát hiện gai động kinh.pdf
 
Phương pháp nâng cao hiệu quả khai thác nguồn pin mặt trời, HAY
Phương pháp nâng cao hiệu quả khai thác nguồn pin mặt trời, HAYPhương pháp nâng cao hiệu quả khai thác nguồn pin mặt trời, HAY
Phương pháp nâng cao hiệu quả khai thác nguồn pin mặt trời, HAY
 
Thiết Kế Bộ Điều Khiển Mờ Theo Đại Số Gia Tử Cho Robot 2 Bậc Tự Do.doc
Thiết Kế Bộ Điều Khiển Mờ Theo Đại Số Gia Tử Cho Robot 2 Bậc Tự Do.docThiết Kế Bộ Điều Khiển Mờ Theo Đại Số Gia Tử Cho Robot 2 Bậc Tự Do.doc
Thiết Kế Bộ Điều Khiển Mờ Theo Đại Số Gia Tử Cho Robot 2 Bậc Tự Do.doc
 
Bao cao cuoi ky [fixed]
Bao cao cuoi ky [fixed]Bao cao cuoi ky [fixed]
Bao cao cuoi ky [fixed]
 
Tối ưu hoá và đánh giá hiệu năng của tổ chức cache trong hệ thống vi xử lý th...
Tối ưu hoá và đánh giá hiệu năng của tổ chức cache trong hệ thống vi xử lý th...Tối ưu hoá và đánh giá hiệu năng của tổ chức cache trong hệ thống vi xử lý th...
Tối ưu hoá và đánh giá hiệu năng của tổ chức cache trong hệ thống vi xử lý th...
 
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cảnđồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
 
Luận án: Phát triển một số phương pháp xây dựng hệ tư vấn
Luận án: Phát triển một số phương pháp xây dựng hệ tư vấnLuận án: Phát triển một số phương pháp xây dựng hệ tư vấn
Luận án: Phát triển một số phương pháp xây dựng hệ tư vấn
 
Luận Văn Tính Toán Dầm Thép Tiết Diện Dạng Chữ I Chịu Xoắn Theo AISC
Luận Văn Tính Toán Dầm Thép Tiết Diện Dạng Chữ I Chịu Xoắn Theo AISCLuận Văn Tính Toán Dầm Thép Tiết Diện Dạng Chữ I Chịu Xoắn Theo AISC
Luận Văn Tính Toán Dầm Thép Tiết Diện Dạng Chữ I Chịu Xoắn Theo AISC
 
Xoắn dầm thép I
Xoắn dầm thép IXoắn dầm thép I
Xoắn dầm thép I
 
Luận án: Ước lượng kênh truyền mimo dùng thuật toán mù cải tiến, HAY
Luận án: Ước lượng kênh truyền mimo dùng thuật toán mù cải tiến, HAYLuận án: Ước lượng kênh truyền mimo dùng thuật toán mù cải tiến, HAY
Luận án: Ước lượng kênh truyền mimo dùng thuật toán mù cải tiến, HAY
 
File bao cao Wifi Robot
File bao cao Wifi RobotFile bao cao Wifi Robot
File bao cao Wifi Robot
 

[123doc] dieu-khien-thiet-bi-qua-module-wifi-esp8266

  • 1. ĐẠI HỌC HUẾ TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA VẬT LÍ --------- NGUYỄN THỊ KIM ANH ĐIỀU KHIỂN THIẾT BỊ QUA MODULE WIFI ESP8266 KHÓA LUẬN TỐT NGHIỆP Huế, khóa học 2014 - 2018
  • 2. ĐẠI HỌC HUẾ TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA VẬT LÍ --------- NGUYỄN THỊ KIM ANH ĐIỀU KHIỂN THIẾT BỊ QUA MODULE WIFI ESP8266 KHÓA LUẬN TỐT NGHIỆP GIẢNG VIÊN HƯỚNG DẪN Th.S HOÀNG ĐÌNH LONG Huế, khóa học 2014 - 2018
  • 3. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh Lời Cảm Ơn Trong thời gian làm khóa luận tốt nghiệp, em đã nhận được nhiều sự giúp đỡ, đóng góp ý kiến và chỉ bảo tận tình của thầy cô, gia đình, bạn bè. Em xin gửi lời cảm ơn chân thành đến Th.S thầy Hoàng Đình Long, giảng viên tổ Vật lí kĩ thuật – trường Đại học sư phạm Huế người đã tận tình hướng dẫn, chỉ bảo em trong suốt quá trình làm khóa luận. Em cũng chân thành cảm ơn các thầy cô giáo trong trường Đại học sư phạm Huế nói chung, các thầy cô trong khoa vật lí nói riêng đã dạy dỗ em. Đồng thời, các thầy cô đã truyền cho em kiến thức về các môn đại cương cũng như các môn chuyên ngành, giúp em có được cơ sở lí thuyết vững vàng và tạo điều kiện giúp đỡ em trong suốt quá trình học tập. Cuối cùng, em xin chân thành cảm ơn đến gia đình và bạn bè đã luôn tạo điều kiện, quan tâm, giúp đỡ và động viên em trong suốt quá trình học tập và hoàn thành khóa luận tốt nghiệp. Mặc dù đã có nhiều cố gắng trong quá trình làm khóa luận tốt nghiệp, nhưng không thể tránh khỏi những thiếu sót. Em mong quý thầy
  • 4. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh cô cùng các bạn đọc nhận xét, góp ý thêm để bài khóa luận của em được hoàn thiện hơn. Em xin chân thành cảm ơn! Huế, ngày 5 tháng 5 năm 2018 Sinh viên thực hiện Nguyễn Thị Kim Anh
  • 5. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh MỤC LỤC PHẦN I. MỞ ĐẦU ............................................................................................................1 1. Lý do chọn đề tài.............................................................................................................1 2. Mục tiêu nghiên cứu .......................................................................................................2 3. Nhiệm vụ nghiên cứu......................................................................................................2 4. Phương pháp nghiên cứu................................................................................................2 5. Đối tượng nghiên cứu.....................................................................................................2 6. Phạm vi nghiên cứu.........................................................................................................2 7. Cấu trúc khóa luận ..........................................................................................................2 PHẦN II. NỘI DUNG.......................................................................................................3 CHƯƠNG 1. TỔNG QUAN............................................................................................3 1.1 Giới thiệu vi điều khiển Arduino Uno........................................................................3 1.1.1 Lịch sử hình thành Arduino.............................................................................3 1.1.2 Tổng quan về Arduino .....................................................................................4 1.1.2.1 Định nghĩa về vi điều khiển Arduino.....................................................4 1.1.2.2 Một số board Arduino ..............................................................................5 1.1.3 Giới thiệu về Board Arduino Uno ..................................................................5 1.1.3.1 Cấu tạo chung............................................................................................5 1.1.3.2 Các thông số kĩ thuật của Arduino Uno.................................................7 1.1.3.3 Vi điều khiển.............................................................................................7 1.1.3.4 Bộ nhớ........................................................................................................8 1.1.3.5 Đặc điểm và chức năng các chân của Arduino Uno ............................9 1.1.3.6 Ứng dụng của Arduino...........................................................................11 1.2 Giới thiệu Module Wifi ESP8266.............................................................................13 1.2.1 Giới thiệu về Module Wifi ESP8266 V1.....................................................13 1.2.2 Thông số kỹ thuật ..........................................................................................13 1.2.3 Chân kết nối của Module Wifi Esp8266 V1 ...............................................14 1.2.4 Giao tiếp của module wifi ESP8266 với Arduino Uno .............................15 1.3 Giới thiệu về Apps Virtuino trên Android...............................................................15 1.4 Cảm biến nhiệt độ và độ ẩm DHT11 ........................................................................17 1.4.1 Giới thiệu chung .............................................................................................17
  • 6. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 1.4.2 Thông số kĩ thuật ...........................................................................................17 1.4.3 Giao tiếp giữa DHT11 với Arduino Uno.....................................................18 CHƯƠNG 2. MÔ PHỎNG VÀ LẬP TRÌNH CHO ARDUINO...........................19 2.1 Phần mềm mô phỏng Proteus....................................................................................19 2.1.1 Tổng quan về phần mềm................................................................................19 2.1.2 Cách sử dụng phần mềm Proteus. ................................................................19 2.1.3 Thư viện Arduino trong Proteus ...................................................................22 2.2 Giới thiệu về môi trường tích hợp Arduino IDE.....................................................22 2.3 Lập trình điều khiển với Arduino..............................................................................25 2.3.1 Cấu trúc của một chương trình .....................................................................25 2.3.2 Ngôn ngữ lập trình cho Arduino...................................................................26 2.3.2.1 Giới thiệu ngôn ngữ C. ..........................................................................26 2.3.2.2 Các lệnh cơ bản trong C. .......................................................................26 CHƯƠNG 3. THIẾT KẾ, LẬP TRÌNH VÀ LẮP ĐẶT MẠCH ĐIỀU KHIỂN TỪ XA VỀ NHIỆT ĐỘ, ĐỘ ẨM TRÊN ĐIỆN THOẠI DI ĐỘNG THÔNG QUA MODULE WIFI ESP8266 ..................................................................................35 3.1 Phân tích mạch điều khiển.........................................................................................35 3.1.1 Sơ đồ khối tổng quát ......................................................................................35 3.1.2 Nguyên lý hoạt động của hệ thống...............................................................36 3.1.3 Lưu đồ thuật toán............................................................................................36 3.1.4 Nạp code và chạy chương trình. ...................................................................37 3.2 Thiết kế mạch và thi công mạch điều khiển............................................................40 3.2.1 Xác định mạch điều khiển.............................................................................40 3.2.2 Giải pháp công nghệ.......................................................................................41 3.2.3 Giải pháp thiết kế............................................................................................41 3.2.4 Yêu cầu của mạch điều khiển .......................................................................41 3.2.5 Thi công mạch điều khiển .............................................................................41 3.2.5.1 Kết nối phần cứng và nạp chương trình mạch điều khiển.................41 3.2.5.2 Hoạt động của mạch điều khiển............................................................44 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ..................................................................46 TÀI LIỆU THAM KHẢO .............................................................................................47
  • 7. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh DANH MỤC BẢNG Bảng 1.1. Các thông số kĩ thuật của board ArduinoUno ...............................................7 Bảng 1.2 Sơ đồ nối dây ....................................................................................................15 Bảng 1.3 Sơ đồ nối chân ..................................................................................................18 Bảng 2.1 Thanh công cụ chuẩn .......................................................................................20 Bảng 2.2 Thanh linh kiện ................................................................................................21 Bảng 2.3 các chức năng trong vùng Toolbar ................................................................23 Bảng 2.4 Các toán tử so sánh ..........................................................................................29 Bảng 2.5 Các toán tử logic ..............................................................................................29
  • 8. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh DANH MỤC HÌNH Hình 1.1 Mẫu thử nghiệm ban đầu ...................................................................................3 Hình 1.2 Một số board Arduino thông dụng ...................................................................5 Hình 1.3 Board Arduino Uno ............................................................................................6 Hình 1.4 Vi điều khiển ATMega328P của Arduino Uno ..............................................8 Hình 1.5 Sơ đồ chân của vi điều khiển ATMega328P ..................................................8 Hình 1.6 Các chân Digital của Arduino Uno ..................................................................9 Hình 1.7 Các chân Analog của Arduino Uno ...............................................................10 Hình 1.8 Các chân năng lượng của Arduino Uno ........................................................10 Hình 1.9 Robot dò line điều khiển qua điện thoại ........................................................12 Hình 1.10 Sử dụng bo mạch Arduino điều khiển bật đèn tiết kiệm năng lượng và hiển thị thông tin tốc độ gió, điện năng trong ắc quy ................................13 Hình 1.11 Module Wifi ESP8266 V1 ............................................................................13 Hình 1.12 Sơ đồ chân của Module Wifi Esp8266 V1 .................................................14 Hình 1.13 Sơ đồ nối chân của Arduino Uno với Module Wifi ESP8266 V1 ............15 Hình 1.14 Địa chỉ ID trên Thingspeak............................................................................16 Hình 1.15 Cài đặt IoT Server trên điện thoại.................................................................16 Hình 1.16 Thiết lập nhiệt độ và độ ẩm trên điện thoại .................................................17 Hình 1.17 Cảm biến nhiệt độ và độ ẩm DHT11 ...........................................................17 Hình 1.18 Sơ đồ nối chân giữa Arduino Uno với cảm biến DHT11 ..........................18 Hình 2.1 Khung làm việc chung của phần mềm Proteus..............................................20 Hình 2.2 Giao diện của Arduino IDE .............................................................................22 Hình 2.3 Vùng Toolbar của Arduino IDE......................................................................23 Hình 2.4 Minh họa vùng viết chương trình....................................................................24 Hình 2.5 Minh họa các bước thực hiện một chương trình ..........................................25 Hình 2.6 Minh họa vùng thông báo.................................................................................25 Hình 3.1 Sơ đồ khối tổng quát .........................................................................................35 Hình 3.3 Kết nối phần cứng của mạch điều khiển ........................................................42 Hình 3.4 Đèn trên Arduino mà module wifi Esp8266 sáng khi c ấp nguồn ...............42 Hình 3.5 Kiểm tra lỗi của chương trình phát tín hiệu...................................................43 Hình 3.6 Nạp chương trình xuống cho mạch điều khiển..............................................43 Hình 3.7 Quá trình nạp thành công .................................................................................44 Hình 3.8 Kết quả đo nhiệt độ, độ ẩm hiển thị trên máy tính........................................44 Hình 3.9 Kết quả đo nhiệt độ và độ ẩm được đưa lên thingSpeak..............................45 Hình 3.10 Kết quả nhiệt độ và độ ẩm hiển thị trên Smartphone .................................45
  • 9. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 1 PHẦN I. MỞ ĐẦU 1. Lý do chọn đề tài Hiện nay cùng với sự phát triển của xã hội, cuộc sống ngày càng được nâng cao thì việc áp dụng công nghệ khoa học kỹ thuật vào đời sống công việc càng cần thiết hơn. Cùng với sự phát triển của các ngành khoa học kỹ thuật, công nghệ kỹ thuật điện tử mà trong đó đặc biệt là kỹ thuật điều khiển tự động đóng vai trò quan trọng trong mọi lĩnh vực đời sống như khoa học kỹ thuật, quản lý, công nghiêp, nông nghiệp, đời sống, quản lý thông tin... Trong thời kỳ phát triển hiện nay, điện thoại di động là một thiết bị không thể thiếu trong cuộc sống. Ngoài chức năng nghe và nhận cuộc gọi, nhắn tin, xem phim, chơi game, chụp ảnh… điện thoại còn có khả năng giám sát và điều khiển thiết bị từ khoảng cách xa thông qua kết nối Internet/Wifi [13]. Từ nhu cầu thực tế cần có một thiết bị điều khiển, giám sát nhiệt độ độ ẩm trong gia đình, phòng máy chủ, trung tâm dữ liệu, kho dữ liệu, tủ lạnh vắc xin, tủ lạnh thực phẩm, trong nhà kính… bằng điện thoại di động, thông qua Module Wifi Esp8266. Từ đó, có tính linh động cao, cập nhật các dữ liệu 24/24h nhằm tăng hiệu quả quản lý [13]. Bên cạnh đó cùng với sự xuất hiện của Arduino vào năm 2005 tại Italia đã góp phần không nhỏ cho nền kinh tế tự động hóa. Sự xuất hiện của Arduino đã hỗ trợ cho con người rất nhiều trong việc lập trình và thiết kế, nhất là đối với những người mới bắt đầu tìm tòi về vi điều khiển mà không có quá nhiều kiến thức, hiểu biết sâu sắc về vật lý và điện tử. Phần cứng của thiết bị đã được tích hợp nhiều chức năng cơ bản và mã nguồn mở. Ngôn ngữ lập trình lại vô cùng dễ sử dụng và được chia sẻ miễn phí nên Arduino đang ngày càng phổ biến và được phát triển mạnh mẽ trên toàn thế giới [1]. Xuất phát từ những lý do trên em chọn đề tài: “ĐIỀU KHIỂN THIẾT BỊ QUA MODULE WIFI ESP8266” làm đề tài khóa luận tốt nghiệp. Trong quá trình thực hiện đề tài không tránh khỏi những thiếu sót, em rất mong nhận được sự góp ý của các thầy cô và các bạn để đề tài được hoàn thiện hơn.
  • 10. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 2 2. Mục tiêu nghiên cứu Thiết kế mạch điều khiển thiết bị từ xa bằng điện thoại di động về nhiệt độ, độ ẩm thông qua Module Wifi Essp8266. 3. Nhiệm vụ nghiên cứu - Nghiên cứu về vi điều khiển Arduino, cảm biến nhiệt độ và độ ẩm DHT11, phần mềm mô phỏng proteus, ngôn ngữ C và môi trường phát triển tích hợp Arduino IDE. - Nghiên cứu Module Wifi Esp8266, phần mềm Virtuino trên điện thoại. 4. Phương pháp nghiên cứu Trong đề tài này em đã sử dụng các phương pháp nghiên cứu: - Phương pháp nghiên cứu lí thuyết: tìm hiểu khái niệm, cấu tạo, các thông số kĩ thuật, sơ đồ nối chân giữa Arduino Uno với DHT11 và Esp8266. Tìm hiểu cách sử dụng Apps Virtuino, proteus, ngôn ngữ C và Arduino IDE. - Phương pháp nghiên cứu thực nghiệm: thiết kế mạch điều khiển từ xa về nhiệt độ và độ ẩm trên điện thoại di động thông qua Module Wifi Esp8266. 5. Đối tượng nghiên cứu Vi điều khiển Arduino Uno, Module Wifi Esp8266 và cảm biến nhiệt độ và độ ẩm DHT11. 6. Phạm vi nghiên cứu Điều khiển thiết bị nhiệt độ, độ ẩm từ xa bằng điện thoại di dộng thông qua Module Wifi Esp8266. 7. Cấu trúc khóa luận Ngoài phần mở đầu, kết luận, hướng phát triển và tài liệu tham khảo. Khóa luận còn có phần nội dung được chia làm 3 chương. Chương 1. Tổng quan. Chương 2. Mô phỏng và lập trình cho Arduino. Chương 3. Thiết kế, lập trình và lắp đặt mạch điều khiển từ xa về nhiệt độ, độ ẩm trên điện thoại di động thông qua Module Wifi Esp8266.
  • 11. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 3 PHẦN II. NỘI DUNG CHƯƠNG 1. TỔNG QUAN 1.1 Giới thiệu vi điều khiển Arduino Uno 1.1.1 Lịch sử hình thành Arduino Arduino có một lịch sử ra đời rất thú vị. Mới đầu Arduino được tạo ra để giải quyết bài toán: làm thế nào để sinh viên có thể tạo ra được một thiết bị điện tử một cách nhanh chóng. Vào năm 2002, Massimo Banzi, một giáo sư phần mềm đã được đưa về IDII (Interaction Design Institute Ivrea – Viện thiết kế tương tác Ivrea) để thúc đẩy một lĩnh vực còn non trẻ gọi là “máy tính vật lí” với một ngân sách hạn hẹp, thời gian hạn chế và rất ít các công cụ [1]. Vào thời điểm đó, sinh viên sử dụng Stamp BASIC, một vi điều khiển được tạo ra bởi công ti California Parallax. Sử dụng ngôn ngữ lập trình BASIC, Stamp giống như một bo mạch nhỏ gọn gàng, gồm các yếu tố cần thiết như nguồn cung cấp năng lượng, một vi điều khiển, bộ nhớ và cổng vào – ra để nối với các phần cứng khác. Banzi phát hiện ra hai vấn đề ở Stamp BASIC [1]:  Không có đủ khả năng xử lý cho một số dự án của sinh viên.  Có giá khoảng 100 USD khá cao so với sinh viên. Mẫu thử nghiệm ban đầu được thực hiện vào năm 2005, là một thiết kế đơn giản và chưa được gọi Arduino. Massimo Banzi sử dụng cái tên Arduino vào một năm sau đó. Hình 1.1 Mẫu thử nghiệm ban đầu [1]
  • 12. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 4 1.1.2 Tổng quan về Arduino 1.1.2.1 Định nghĩa về vi điều khiển Arduino Arduino là một bo mạch vi xử lý được dùng để lập trình tương tác với các thiết bị phần cứng như cảm biến, động cơ, đèn hoặc các thiết bị khác [2]. Đặc điểm nổi bật của Arduino là môi trường phát triển ứng dụng rất dễ dàng sử dụng, với một ngôn ngữ lập trình có thể học một cách nhanh chóng. Một điều làm cho Arduino phổ biến nhanh chóng là mức giá rất thấp và tính chất nguồn mở từ phần cứng tới phần mềm. Arduino là một nền tảng thiết bị điện tử mã nguồn mở được sử dụng để xây dựng các ứng dụng điện tử. Arduino gồm có board mạch có thể lập trình được (thường gọi là vi điều khiển) và các phần mềm hỗ trợ phát triển tích hợp IDE (Integrated Development Environment) dùng để soạn thảo, biên dịch code và nạp chương trình cho board [2]. Một hệ thống Arduino có thể có rất nhiều sự tương tác với các thiết bị khác, đó là các hệ thống cảm biến đa dạng về chủng loại (đo đạc nhiệt độ, độ ẩm, vận tốc, màu sắc vật thể,...), các thiết bị hiển thị (màn hình LCD, đèn LED,...), các module chức năng hỗ trợ kết nối có dây với các thiết bị khác hoặc các kết nối không dây thông dụng (3G, Wifi, Bluetooth,...) và cả định vị GPS, nhắn tin SMS. Như vậy, tuy chỉ là một board mạch nhỏ nhưng Arduino có thể dùng vào rất nhiều ứng dụng khác nhau, chỉ cần một phần mềm Arduino IDE, một kết nối USB và một board mạch Arduino, ta có thể phát triển các ứng dụng trên board. Về mặt chức năng, các board mạch Arduino được chia làm hai loại: loại board mạch chính có chip ATMega và loại mở rộng thêm các chức năng cho board mạch chính (thường được gọi là Shield) [2]. Arduino từ khi ra đời là một thứ cực kì phức tạp gồm rất nhiều linh kiện, bóng đèn LED, cổng kết nối,… nay đã trở thành một mạch nhỏ gọn trong lòng bàn tay với các kết nối phổ biến và sự tiện lợi trong việc điều khiển thiết bị. Hiện nay, Arduino được rất nhiều hãng điện tử trên thế giới nghiên cứu và chế tạo. Arduino cũng có rất nhiều loại và có nhiều kích thước khác nhau.
  • 13. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 5 1.1.2.2 Một số board Arduino Hình 1.2 Một số board Arduino thông dụng [1] Các board Arduino và Arduino – compatible sử dụng các shield – các board mạch in mở rộng được dùng bằng cách cắm vào các chân header của Arduino. Các shield có thể là module điều khiển động cơ, GPS, Ethernet, LCD hoặc có thể là breadboard. 1.1.3 Giới thiệu về Board Arduino Uno Arduino có rất nhiều phiên bản với các chức năng và mục đích khác nhau. Trong đó, Arduino Uno là một trong những phiên bản được ứng dụng rộng rãi nhất bởi chi phí và tính linh động của nó. Hiện dòng này đã được phát triển tới thế hệ thứ 3 (R3) [3]. 1.1.3.1 Cấu tạo chung Có rất nhiều thành phần cấu tạo nên một board Arduino Uno, nhưng để dễ dàng hiểu rõ và sử dụng Arduino Uno đúng cách, đầu tiên ta quan tâm đến các thành phần được đánh số trên hình 1.3.
  • 14. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 6 Hình 1.3 Board Arduino Uno [3] 1. Cổng USB là cổng giao tiếp để nạp chương trình điều khiển từ máy vi tính lên vi điều khiển. Đồng thời nó cũng là giao tiếp nối tiếp để truyền dữ liệu giữa vi điều khiển với máy tính [3]. 2. Jack nguồn để cung cấp nguồn từ 9V đến 12V lấy năng lượng trực tiếp từ pin hoặc Ắc – quy trong trường hợp không thể lấy nguồn từ cổng USB như đã nói ở trên [3]. 3. Hàng chân thứ nhất được đánh số từ 0 đến 13 là các chân Digital, nhận vào hoặc xuất ra các tín hiệu số. Ngoài ra có một chân đất (GND) và chân điện áp tham chiếu (AREF) [3]. 4. Hàng chân thứ hai là các chân năng lượng, chủ yếu liên quan đến điện áp đất, nguồn [3]. 5. Hàng chân thứ ba là các chân Analog được kí hiệu từ A0 đến A5 để nhận vào hoặc xuất ra các tín hiệu tương tự (ví dụ như đọc thông tin của các thiết bị cảm biến) [3]. 6. Vi điều khiển là bộ xử lí trung tâm của toàn board mạch. Với mỗi mẫu Arduino khác nhau thì con vi điều khiển này khác nhau. Ở board Arduino Uno này sử dụng ATMega328P [3].
  • 15. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 7 Ngoài ra trên board còn có một nút Reset để đặt lại chương trình đang chạy. Đôi khi chương trình đang chạy gặp lỗi, người dùng có thể Reset lại chương trình [3]. 1.1.3.2 Các thông số kĩ thuật của Arduino Uno Bảng 1.1. Các thông số kĩ thuật của board ArduinoUno [3] Vi điều khiển ATMega328P (họ 8bit) Điện áp hoạt động 5V-DC (chỉ được cấp qua cổng USB) Điện áp vào khuyên dùng 7-12V DC Điện áp vào giới hạn 6-20V DC Số chân Digital vào/ra 14 (có 6 chân điều chế độ xung PWM) Số chân Analog Input 6 (độ phân giải bit) Dòng ra tối đa trên mỗi chân vào/ra 30mA Dòng ra tối đa (5V) 500mA Dòng ra tối đa (3.3V) 50mA Flash Memory 32 KB (ATMega328P) với 0.5KB được sử dụng bởi bootloader SRAM 2KB (ATMega328P) EEPROM 1KB (ATMega328P) Tần số hoạt động 16MHz 1.1.3.3 Vi điều khiển Trong board Arduino, các vi điều khiển được xem như là bộ não của board. Nó có thể xử lí những tác vụ đơn giản như điều khiển đèn led nhấp nháy, thu thấp các dữ liệu từ cảm biến, xử lí dữ liệu và xuất ra, xử lí tín hiệu cho đèn điều khiển từ xa,... Arduino Uno có thể sử dụng 3 vi điều khiển họ 8 bit AVR là ATMega8, ATMega168, ATMega328. Với vi điều khiển ATMega328 sử dụng thạch anh có chu kì dao động 16MHz [3].
  • 16. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 8 Hình 1.4 Vi điều khiển ATMega328P của Arduino Uno [3] Sơ đồ chân của vi điều khiển ATMega328P. Hình 1.5 Sơ đồ chân của vi điều khiển ATMega328P [3] 1.1.3.4 Bộ nhớ Vi điều khiển ATMega328P tiêu chuẩn có ba loại bộ nhớ với dung lượng tương ứng là 32KB cho bộ nhớ Flash, 2KB cho SRAM và 1KB cho EEPROM. * Flash Memory là bộ nhớ có thể ghi được, dữ liệu không bị mất ngay cả khi ngắt điện. Về vai trò, ta có thể hình dung bộ nhớ này như ổ cứng để chứa dữ liệu trên board. Chương trình viết cho Arduino sẽ được lưu ở đây. Kích thước của vùng nhớ này thông thường dựa vào vi điều khiển được sử dụng. Loại bộ nhớ này có thể chịu được khoảng 10.000 lần ghi/xóa [3].
  • 17. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 9 * SRAM (Static Random Access Memory) tương tự như RAM của máy tính, bộ nhớ này sẽ bị mất dữ liệu khi ngắt điện nhưng bù lại tốc độ đọc ghi/xóa rất nhanh. Kích thưởng nhỏ hơn Flash Memory nhiều lần [3]. * EEPROM (Electrically Eraseble Programmable Read Only Memory) là một dạng bộ nhớ như Flash Memory nhưng có chu kì ghi/xóa cao hơn (khoảng 100.000 lần) và có kích thước rất nhỏ. Để đọc/ghi dữ liệu, ta có thể dùng thư viện EEPROM của Arduino [3]. 1.1.3.5 Đặc điểm và chức năng các chân của Arduino Uno 1.1.3.5.1 Các cổng vào và ra Arduino Uno có tổng cộng 14 chân (pin) Digital dùng để đọc hoặc xuất tín hiệu số được đánh số từ 0 đến 13 như trên hình 1.6. Chúng chỉ có hai mức điện áp là 0V và 5V với dòng điện vào/ra tối đa trên mỗi chân là 40mA [3]. Hình 1.6 Các chân Digital của Arduino Uno [3] Các chức năng đặc biệt của một số chân Digital [3]: + 2 chân nối tiếp 0 (RX) và 1 (TX) dùng để gửi (transmit – TX) và để nhận (receive – RX) dữ liệu. Arduino Uno có thể giao tiếp với các thiết bị khác thông qua hai chân này. Kết nối Bluetooth thường thấy chính là kết nối nối tiếp không dây. Nếu không sử dụng giao thức này, không nên sử dụng hai chân RX và TX nếu không cần thiết. + 6 chân PWM (Pulse Width Modulation) hay chân có khả năng điều chế độ rộng xung, gồm có 3, 5, 6, 9, 10 và 11 được đánh dấu ~ trước mã số chân, cho phép xuất ra xung PWM với độ phân giải 8 bit bằng hàm analogWrite ( ). Một cách đơn giản, ta có thể điều chỉnh chế độ điện áp đầu ra ở các chân này từ mức 0V đến 5V thay vì cố định ở mức 0V và 5V như các chân khác.
  • 18. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 10 + Chân giao tiếp SPI là 10 (SS), 11 (MOSI), 12 (MOSI), 13 (SCK). Ngoài các chưc năng thông thường, 4 chân này còn được dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác. + LED 13 có màu da cam được kí hiệu bằng chữ L trên Arduino Uno. Khi bấm nút Reset, đèn này sẽ nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân này được sử dụng thì đèn LED sẽ sáng. Arduino Uno còn có thêm 6 chân Analog nhận kí hiệu tương tự được kí hiệu từ A0 đến A5 như trên hình 1.7. Các chân này cung cấp độ phân giải 10 bit để đọc giá trị điện áp trong khoảng 0V đến 5V. Với chân AREF trên board, có thể đưa vào điện áp tham chiếu khi sử dụng các chân Analog. Tức là nếu ta cấp điện áp 2.5V vào các chân này thì có thể dùng các chân Analog để đo điện áp trong khoảng từ 0V đến 5V với độ phân giải là 10 bit. Hình 1.7 Các chân Analog của Arduino Uno [3] 1.1.3.5.2 Các chân cấp nguồn Các chân này dùng để cấp nguồn cho các thiết bị bên ngoài như Relay, cảm biến, động cơ,... gồm có các chân GND (chân nối đất, chân âm), chân 5V, chân 3.3V như được thể hiện trên hình 1.8. Nhờ những chân này mà người dùng không cần thiết bị biến đổi điện khi cấp nguồn cho thiết bị. Ngoài ra còn có các chân Vin, chân Reset và chân IOREF nhưng các chân này ít khi được sử dụng. Hình 1.8 Các chân năng lượng của Arduino Uno [3]
  • 19. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 11 Arduino sử dụng cáp USB để giao tiếp với máy tính. Thông qua cáp USB chúng ta có thể Upload chương trình cho Arduino hoạt động, ngoài ra USB còn là nguồn cho Arduino. Khi không sử dụng USB làm nguồn thì chúng ta có thể sử dụng nguồn ngoài thông qua jack cắm 2.1 mm (cực dương ở giữa) hoặc có thể sử dụng 2 chân Vin và GND để cấp nguồn cho Arduino. Bo mạch hoạt động với nguồn ngoài ở điện áp từ 5V đến 20V. Ta có thể cấp một áp lớn hơn, tuy nhiên chân 5V sẽ có mức điện áp lớn hơn 5V và nếu sử dụng nguồn lớn hơn 12V thì dễ gây ra hiện tượng nóng và làm hỏng bo mạch. Vì vậy, nên dùng nguồn ổn định từ 5V đến 12V. Chân 5V và chân 3.3V (output voltage): các chân này dùng để lấy nguồn ra từ nguồn mà chúng ta đã cấp cho Arduino. Đặc biệt không được cấp vào các chân này vì sẽ làm hỏng Arduino [3]. + Vin (Voltage Input) để cấp nguồn ngoài cho Arduino Uno, nối cục dương của nguồn với chân này và cực âm của nguồn với chân GND [3]. + Chân GND (Ground) là chân nối đất, sử dụng với mục đích tạo mạch kín khi cấp nguồn cho ngoại vi. Khi dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải đưuọc nối với nhau [3]. + IOREF là chân có thể dùng để đo điện áp hoạt động của vi điều khiển trên Arduino Uno (luôn là 5V). Mặc dù vậy, không được lấy nguồn 5V từ chân này để sử dụng bởi chức năng của nó không phải là cấp nguồn [3]. + RESET: việc nhấn nút RESET trên board để reset vi điều khiển tương đương với việc chân RESET được nối với GND qua một điện trở 10k [3]. 1.1.3.6 Ứng dụng của Arduino Arduino ra đời nhằm phục vụ mục đích cho điều khiển điện tử nói chung. Trong đó mảng điều khiển cơ điện tử cũng khá thông dụng với Arduino. * Ứng dụng nền tảng của Arduino trong đồ án tốt nghiệp của sinh viên trường Đại học Bà Rịa Vũng Tàu – Viện CNTT – điện – điện tử. Đề tài: “Robot dò line điều khiển qua điện thoại” [4]. Robot dò line với những kết cấu cơ khí đơn giản nhưng lại có thể kết hợp được với khá nhiều thành phần điện tử (encoder, sensor xác định đường line, sensor đo khoảng cách...). Nguyên lí tổng quát của toàn mạch bao gồm các bộ phận kết nối với nhau gồm
  • 20. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 12 có: Module L298N, Module bluetooth HC05, Arduino Nano, màn hình LCD 16x2, cảm biến sensor của mạch. Mạch cảm biến dò line gồm có 6 led để soi đường và 6 cảm biến quang dùng để cảm biến và phát tính hiệu đến Arduino Nano điều khiển Robot. Đây là một phần quan trọng của Robot, nhờ có nó mà Robot có thẻ di chuyển theo đường line và có thể hoạt động một cách ổn định nhất. Những Robot này rất phù hợp với sinh viên học tập và nghiên cứu về ngành tự động hóa cũng yêu thích kĩ thuật điện tử một cách cụ thể. Hình 1.9 Robot dò line điều khiển qua điện thoại [4] * Đồ án “Sử dụng bo mạch Arduino điều khiển bật đèn tiết kiệm năng lượng và hiển thị thông tin tốc độ gió, điện năng trong ắc quy” của sinh viên khoa Công nghệ Cơ khí – Đại học Điện lực [5]. Sử dụng bo mạch Arduino Mega 2560 để điều khiển toàn bộ phần điện tử. Tín hiệu từ cảm biến ánh sáng được truyền vào bo mạch Arduino. Thông qua thuật toán xử lí chống nhiễu, hệ thống biết được thời điểm nào là phù hợp để quyết định bật đèn và tắt đèn, giúp tiết kiệm năng lượng một cách thông minh. Ngoài ra, bo mạch Arduino còn nhận các điện áp từ ắc quy, các tín hiệu về vận tốc gió từ encoder gắn trên trục turbine và xuất tín hiệu ra bảng led 7 thanh để hiển thị tức thời vận tốc gió cũng như điện năng dự trữ còn trong ắc quy.
  • 21. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 13 Hình 1.10 Sử dụng bo mạch Arduino điều khiển bật đèn tiết kiệm năng lượng và hiển thị thông tin tốc độ gió, điện năng trong ắc quy [5] Việc sử dụng bo mạch sẵn Arduino trong đồ án này đảm bảo phần vi điều khiển hoạt động ổn định, không bị ảnh hưởng bởi sự chấn động rung lắc cơ học do gió gây nên. 1.2 Giới thiệu Module Wifi ESP8266 1.2.1 Giới thiệu về Module Wifi ESP8266 V1 Mạch thu phát wifi ESP8266 V1 sử dụng IC wifi SoC ESP8266 của hãng Espressif, được sử dụng để kết nối với vi điều khiển thực hiện chức năng truyền dữ liệu qua Wifi, mạch có thiết kế nhỏ gọn, sử dụng giao tiếp UART với bộ thư viện và code mẫu rất nhiều từ cộng đồng. Module Wifi Esp8266 V1 được sử dụng trong các ứng dụng IoT và điều khiển thiết bị qua wifi,...[6] Hình 1.11 Module Wifi ESP8266 V1 [6] 1.2.2 Thông số kỹ thuật [6] Điện áp sử dụng: 3.3VDC Điện áp giao tiếp: 3.3VDC
  • 22. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 14 Dòng tiêu thụ: Max 320mA (nên sử dụng module cấp nguồn riêng cho mạch). Hỗ trợ chuẩn 802.11 b/g/n. Wifi 2.4 GHz, hỗ trợ các chuẩn bảo mật như: OPEN, WEP, WPA_PSK, WPA2_PSK, WPA_WPA2_PSK. Hỗ trợ cả hai giao tiếp TCP và UDP. Chuẩn giao tiếp UART với Firmware hỗ trợ bộ tập lệnh AT Command, tốc độ Baudrate mặc định 9600 hoặc 115200. Kích thước: 24.8 x 14.3 mm 1.2.3 Chân kết nối của Module Wifi Esp8266 V1 Hình 1.12 Sơ đồ chân của Module Wifi Esp8266 V1 [6] Chức năng các chân của Module Wifi Esp8266 V1 [6] 1. VCC: 3.3V, dòng có thể lên 300mA vì thế cần mạch nguồn riêng ams1117 5V -> 3.3V. 2. GND: 0V. 3. Tx: chân Tx của giao thức UART, kết nối đến chân Rx của vi điều khiển. 4. Rx: chân Rx của giao thức UART, kết nối đến chân Tx của vi điều khiển. 5. RST: chân reset, kéo xuống mass để reset. 6. CH_PD: chân này nếu được kéo lên mức cao module sẽ bắt đầu thu phát wifi, kéo xuống mức thấp module dừng phát wifi. Vì ESP8266 khởi động hút dòng lớn nên chúng ta giữ chân này ở mức 0V khi khởi động hệ thống của mình, sau 2s hãy kéo chân CH_PD lên 3.3V, để đảm bảo module hoạt động ổn định. 7. GPIO0: kéo xuống thấp cho chế độ upgrade firmware. 8. GPIO2: không sử dụng
  • 23. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 15 1.2.4 Giao tiếp của module wifi ESP8266 với Arduino Uno Sơ đồ nối dây giữa Arduino với Module Wifi Esp8266 V1 như sau. Bảng 1.2 Sơ đồ nối dây [8] Arduino Uno ESP8266 Pin 2 TX Pin 3 RX 3.3V Vcc và CH_PD GND GND Hình 1.13 Sơ đồ nối chân của Arduino Uno với Module Wifi ESP8266 V1 1.3 Giới thiệu về Apps Virtuino trên Android - Download phần mềm Virtuino trên trang CH Play. - Tiếp theo, bạn cần đăng kí Channel ID trên Thingspeak để lấy địa chỉ ID.
  • 24. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 16 Hình 1.14 Địa chỉ ID trên Thingspeak - Mở phần mềm Virtuino trên điện thoại và tiến hành cài đặt IoT Server theo các bước nhập địa chỉ Channels ID, Read Key và Write Key như hình sau: Hình 1.15 Cài đặt IoT Server trên điện thoại Tiếp theo, tiến hành lấy ra các thiết bị cần thiết để tiến hành đo nhiệt độ và độ ẩm như hình 1.16:
  • 25. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 17 Hình 1.16 Thiết lập nhiệt độ và độ ẩm trên điện thoại 1.4 Cảm biến nhiệt độ và độ ẩm DHT11 1.4.1 Giới thiệu chung Hình 1.17 Cảm biến nhiệt độ và độ ẩm DHT11 [7] Cảm biến nhiệt độ và độ ẩm DHT11 là cảm biến 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 dây truyền dữ liệu duy nhất). Bộ tiền xử lí tín hiệu tích hợp trong cảm biến giúp bạn có được dữ liệu chính xác mà không phải qua bất kì tính toán nào [7]. Tuy nhiên, sư dụng cảm biến trong môi trường độ ẩm thuần là hơi nước, các môi trường đặc biệt ủ kín như ủ tỏi đen, ủ yếm khí... sẽ sinh ra nấm và vi khuẩn bám lên bề mặt cảm biến làm hư hỏng cảm biến. 1.4.2 Thông số kĩ thuật [7] Nguồn: 3V đến 5V DC.
  • 26. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 18 Dòng sử dụng: 2.5 mA max (khi truyền dữ liệu). Đo tốt ở độ ẩm 2080 %RH với sai số 5%. Tần số lấy mẫu tối đa 1Hz (1 giây 1 lần). Kích thước 15mm x 12mm x 5.5mm. 3 chân, khoảng cách chân 0.1”. 1.4.3 Giao tiếp giữa DHT11 với Arduino Uno Bảng 1.3 Sơ đồ nối chân [7] STT Arduino Uno DHT11 1 +5 V VCC 2 Pin 6 DATA 3 GND GND Hình 1.18 Sơ đồ nối chân giữa Arduino Uno với cảm biến DHT11
  • 27. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 19 CHƯƠNG 2. MÔ PHỎNG VÀ LẬP TRÌNH CHO ARDUINO 2.1 Phần mềm mô phỏng Proteus. 2.1.1 Tổng quan về phần mềm Proteus là phần mềm cho phép mô phỏng hoạt động của mạch điện tử hay còn gọi là giả lập linh kiện trên máy tính. Nó giúp ta có thể thao tác dễ dàng và xử lí trực tiếp mà không cần phải nối dây hay cần các dụng cụ chuyên dụng để thực hành [8]. So với các phần mềm khác, Proteus có nhiều ưu điểm nổi trội như: mô phỏng được rất nhiều linh kiện điện tử và các thiết bị hiển thị, kết quả mô phỏng rất trực quan như một mạch điện tử thật. Ngoài ra, phần mềm còn cho phép mô phỏng các chip vi điều khiển với chương trình do người dùng nạp [8]. Phần mềm bao gồm phần thiết kế mạch và viết chương trình điều khiển cho các họ vi điều khiển như PIC, AVR, MCS-51,... Phần mềm gồm 2 chương trình chính: - ISIS cho phép mô phỏng mạch. - ARES dùng để vẽ mạch in. 2.1.2 Cách sử dụng phần mềm Proteus. Phần mềm Proteus hỗ trợ mạnh việc thiết kế sơ đồ nguyên lí, chạy mô phỏng mạch điện cũng như thiết kế mạch in. Chính vì vậy, để làm việc với phần mềm Proteus thì yêu cầu máy tính cần có cấu hình tối thiểu sau [8]: - Bộ xử lí Pentium 1.6 GHz trở lên, bộ nhớ RAM tối thiểu là 128Mb, ổ cứng 40 Gb trở lên, ổ CD – ROM 52X, màn hình 17 inchs trở lên. - Chạy trên môi trường Windows 2000, Nt hoặc Windows XP.  Khởi động phần mềm: Click vào biểu tượng ISIS trên màn hình để chạy chương trình.  Khung làm việc chung:
  • 28. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 20 Hình 2.1 Khung làm việc chung của phần mềm Proteus Phần mềm Proteus bao gồm các thanh sau: - Thanh công cụ chuẩn với các nút lệnh được thể hiện như ở bảng 2.1 Bảng 2.1 Thanh công cụ chuẩn [8] Nút lệnh Chức năng Dùng để vẽ sơ đồ nguyên lí và mô phỏng Liên thông ARES để vẽ mạch in Làm “tươi” màn hình và các chỉnh sửa Bật/tắt lưới cho bản vẽ Chọn gốc tọa độ Các công cụ phóng to, thu nhỏ toàn mạch Các công cụ chỉnh sửa, tạo thư viện linh kiện Xuất danh sách linh kiện Kiểm tra lỗi mạch điện (ERC) Tìm kiếm linh kiện Undo/Redo Các lệnh tác động lên đối tượng đã được chọn trước Chỉnh sửa thuộc tính chung - Thanh linh kiện với các nút lệnh cho ở bảng 2.2
  • 29. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 21 Bảng 2.2 Thanh linh kiện [8] Nút lệnh Chức năng Chỉnh sửa nhanh thuộc tính linh kiện Nhóm các linh kiện vừa sử dụng Thêm điểm nối nơi giao nhau của đường dây Đặt tên cho dây dẫn Thêm văn bản vào bảng vẽ Nối dây dạng bus Mạch phụ Nguồn và GND Vẽ chân linh kiện Vẽ đồ thị mô phỏng Các thiết bị tạo tính hiệu (sin, vuông,...) Đầu dò dòng điện, điện áp Các thiết bị đo dạng sóng Công cụ vẽ 2D Để đưa linh kiện vào vùng làm việc, ta kích chọn linh kiện sau đó thực hiện thao tác drag-and-drop (nhấn chuột trái rồi giữ và rê chuột đến vị trí cần thiết kế). Nếu linh kiện không tồn tại trên thanh linh kiện, ta cần thực hiện thêm mới từ các thư viện có sẵn bằng cách chọn menu Library/Pick parts from librarys hoặc kích chọn chữ P ở .[8]
  • 30. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 22 2.1.3 Thư viện Arduino trong Proteus Chương trình Proteus không hỗ trợ sẵn mạch Arduino, do đó ta có thể tải thư viện về tại LIB_PROTEUS 8. Sau khi tải về, copy thư viện vào Lib của thư mục chứa Proteus. Thư viện bao gồm các linh kiện sau [8]: - Arduino Uno (phiên bản chip ATMega328 chân DIP). - Arduino Uno (phiên bản chip ATMega328 chân SMD). - Arduino Mega. - Arduino Lilypad. - Arduino Nano. - Cảm biến siêu âm Ultrasonic V2. 2.2 Giới thiệu về môi trường tích hợp Arduino IDE. Môi trường phát triển tích hợp (IDE) Arduino là một ứng dụng đa nền tảng được viết bằng Java, được dẫn xuất từ IDE cho ngôn ngữ lập trình xử lí và các dự án lắp ráp. Nó được thiết kế để làm nhập môn lập trình cho các nhà lập trình và những người mới sử dụng khác không quen thuộc với phát triển phần mềm. Nó bao gồm một trình soạn thảo mở với các tính năng như làm nổi bật cú pháp, khớp dấu ngoặc khối chương trình, thụt đầu dòng tự động, có khả năng biên dịch và tải lên các chương trình vào bo mạch với một nhấp chuột duy nhất. Một chương trình hoặc mã viết cho Arduino được gọi là “sketch” [9]. Hình 2.2 Giao diện của Arduino IDE
  • 31. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 23 Giao diện của Arduino IDE gồm có ba vùng: a. Vùng Toolbar chứa các phím lệnh như kiểm tra chương trình, nạp chương trình, lưu, mở hay tạo mới chương trình [9]. Hình 2.3 Vùng Toolbar của Arduino IDE Bảng 2.3 các chức năng trong vùng Toolbar [9] Incon Chức năng Kiểm tra chương trình có viết đúng cú pháp hay không Biên dịch chương trình và nạp vào Arduino Tạo một Sketch mới Mở một Sketch đã lưu trước đó Lưu chương trình lại Mở màn hình hiển thị Serial Monitor để gửi và nhận dữ liệu giữa máy tính và board Arduino (thông qua chuẩn RS232) Current tab: Sketch đang được mở hiện tại, có thể có nhiều tab tương ứng với nhiều Sketch hiện trên thanh đó [9]. Tab menu: + File: trong file menu, ở mục Examples. Đây là nơi chứa code mẫu, ví dụ như cách sử dụng chân digital, analog, sensor,... + Sketch: trong menu Sketch có [9]: 1. Verify/Compile: chức năng kiểm tra lỗi code. 2. Show Sketch Folder: hiển thị nơi code được lưu. 3. Include Library: thêm thư viện cho IDE. 4. Add File: thêm vào một tab code mới.
  • 32. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 24 + Tool: trong Tool ta quan tâm đến các mục mạch và cổng nối tiếp là Board và Serial Port. Mục Board cho phép lựa chọn board mạch phù hợp với board dang sử dụng. Việc lựa chọn board mạch hết sức quan trọng, nếu chọn sai thì khi nạp chương trình vào chip sẽ báo lỗi. Mục Serial Port cho phép thiết lập cổng giao tiếp giữa máy tính và board. Đây là nơi lựa chọn cổng COM của Arduino. Khi ta cài đặt Driver thì máy tính sẽ thể hiện thông báo trên cổng COM của Arduino là bao nhiêu, ta chỉ cần vào Serial Port chọn đúng cổng COM để nạp code, nếu chọn sai thì không thể nạp code cho Arduino được [9]. b. Vùng viết chương trình: là nơi viết các dòng lệnh để điều khiển hoạt động của vi điều khiển [9]. Hình 2.4 Minh họa vùng viết chương trình Chương trình Arduino được viết bằng ngôn ngữ C hoặc C++. Arduino IDE đi kèm với một thư viện phần mềm được gọi là “Wring” từ dự án lắp ráp ban đầu, cho hoạt động đầu vào/ra phổ biến trở nên dễ dàng hơn. Người sử dụng chỉ cần định nghĩa hai hàm để thực hiện một chương trình điều hành theo chu kì [9]: Setup (): hàm chạy một lần duy nhất vào lúc bắt đầu một chương trình dùng để khởi tạo các thiết lập. Loop (): hàm được gọi lặp lại liên tục cho đến khi bo mạch được tắt đi. Khi bạn bật điện bảng mạch Arduino, reset hay nạp chương trình mới, hàm setup () sẽ được gọi đến đầu tiên. Sau khi xử lí xong hàm setup (), Arduino sẽ nhảy đến hàm loop () và lặp vô hạn hàm này cho đến khi bạn tắt điện bo mạch Arduino.
  • 33. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 25 Hình 2.5 Minh họa các bước thực hiện một chương trình [9] c. Vùng thông báo chính: là vùng có màu đen nằm ở cuối giao diện, dùng để thông báo chương trình có lỗi hay không, vị trí lưu file [9]. Hình 2.6 Minh họa vùng thông báo 2.3 Lập trình điều khiển với Arduino 2.3.1 Cấu trúc của một chương trình Một chương trình hiển thị trên của sổ giao diện đưuọc gọi là sketch. Sketch được tạo từ hai hàm cơ bản là setup () và loop (). Hai hàm này là bắt buộc đối với một chương trình của Arduino. - Setup (): hàm này được gọi khi một hàm sketch khởi động, được sử dụng để khởi tạo biến, đặt các chế độ chân (nhận hay xuất tín hiệu), khởi động một thư viện... Hàm setup () chỉ chạy một lần, sau khi cấp nguồn hoặc reset mạch. - Loop (): đây là cốt lõi của một chương trình Arduino. Khi Arduino đang chạy, sau khi hàm setup đã chạy xong, hàm loop sẽ chạy qua tất cả các code. Sau đó thực hiện lại toàn bộ cho đến khi hoặc là bị mất nguồn hoặc công tắc reset được nhấn. Chiều dài thời gian cần để hoàn thành một loop phụ thuộc vào phần code được chứa trong nó. Chức năng của hàm loop tương tự như vòng lặp while () trong hàm C, hàm loop () sẽ điều khiển toàn bộ mạch. Cách viết: Một chương trình Arduino với hai hàm setup () và loop () sẽ được viết như sau: void setup() { // code khởi tạo sẽ đưuọc viết ở đây Hàm setup() Hàm loop() Bật nguồn Bấm nguồn Reset
  • 34. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 26 } void loop() { // code phân công việc mà ta muốn board Arduino thực hiện sẽ viết ở đây } } 2.3.2 Ngôn ngữ lập trình cho Arduino. 2.3.2.1 Giới thiệu ngôn ngữ C. Các chương trình Arduino được viết bằng C hoặc C++. Arduino IDE đi kèm với một thư viện phần mềm gọi là “Wiring”, từ project Wiring gốc có thể giúp các thao tác input/output dễ dàng hơn. Người dùng chỉ cần định nghĩa hai hàm để tạo ra một chương trình vòng thực thi (cyclic executive) có thể chạy được [10]. So với việc lập trình trực tiếp với vi điều khiển, lập trình với Arduino đơn giản hơn nhiều vì ta chỉ cần giao tiếp với phần cứng thông qua các thư viện. Một chương trình Arduino gồm có: các giá trị (biến số và hằng số), cấu trúc, các hàm và thủ tục [10]. 2.3.2.2 Các lệnh cơ bản trong C. 2.3.2.2.1 Giá trị a. Các kiểu dữ liệu Các kiểu dữ liệu thường dùng trong chương trình Arduino là void, int, char, float, short, long, string, word...[10] Trong đó, ta quan tâm chủ yếu đến: int: là kiểu số nguyên chính được dùng trong chương trình Arduino. Kiểu int chứa 2 byte bộ nhớ. Trên mạch Arduino Uno, nó có đoạn giá trị từ -32768 đến 32767 (-215 đến 215-1) (16 bit) [10]. Cú pháp: int var = value; Trong đó, var là tên biến và value là giá trị. char: là kiểu dữ liệu biểu diễn cho một kí tự, chiếm 1 byte bộ nhớ (nếu cần biểu diễn cho một chuỗi kí tự trong chương trình Arduino, ta cần sử dụng kiểu dữ liệu String) [10].
  • 35. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 27 Kiểu char chỉ nhận các giá trị trong bảng mã ASCII. Vì vậy, thay vì thiết đặt một biến kiểu char có giá trị là ‘A’ thì ta có thể đặt là 65. short: tươngtự kiểuint nhưng trênmọi mạchArduino nó chiếm 4 byte bộ nhớ và biểu thị giá trị trong khoảng -32,768 đến 32,767 (-215 đến 215-1) (16 bit) [10]. Cú pháp: Short var = value; Trong đó, var là tên biến và value là giá trị. b. Các hằng số + HIGH/LOW: Trong lập trình trên Arduino, HIGH là một hằng số có giá trị nguyên là 1, LOW là nột hằng số có giá trị nguyên là 0. Trong điện tử, HIGH là một mức điện áp lớn hơn 0V. Giá trị của HIGH được định nghĩa khác nhau trong các mạch điện khác nhau, nhưng thường được quy ước ở các mức như 1.8V; 2.7V; 3.3V; 5V; 12V;... giá trị của LOW thường là 0V hoặc lớn hơn một chút [10]. + true/false: true/false là các hằng số logic; false có giá trị là phủ định của true (và ngược lại), tức là (!true) = false. Cũng có thể hiểu là true là một hằng số nguyên mang giá trị là 1, false là một hằng số nguyên mang giá trị là 0 [10]. Không đươc viết “true, false” thành “TRUE, FALSE” hay bất kì một dạng nào khác. Các giá trị “true”, “HIGH”, “l” là tương đương nhau và “false”, “LOW”, “()” cũng vậy. 2.3.2.2.2 Cấu trúc a. Các cú pháp mở rộng  #define #define làđối tượngcho phépđặt tênmột hằng số nguyên hay hằng số thực. Trước khi biên dịch, trình biên dịch sẽ thay thế những tên hằng đang sử dụng bằng chính giá trị của chúng. Quá trình thay thế này được gọi là quá trình tiền biên dịch [10]. Cú pháp: #define [tên hằng] [giá trị của hằng] Nếu một biến có tên trùng với tên hằng số được khai báo bằng #define thì khi tiền biên dịch, biến ấy sẽ bị thay thế bằng hằng số kia. Dẫn đến khi biên dịch, chương trình sẽ bị lỗi cú pháp. Vì vậy nên hạn chế sử dụng cú pháp #define để khai báo hằng số khi không cần thiết.
  • 36. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 28  #include #include cho phép chương trình tải một thư viện đã được viết sẵn. Tức là có thể truyxuất được những tài nguyên có trongthư viện này từ chương trìnhcủa mình. Nếu có một đoạn code và cần sử dụng nó trong nhiều chương trình, ta có thể dùng #include để nạp nó vào chương trình của mình, thay vì phải chép đi chép lại đoạn code ấy [10]. Cú pháp: #include <[đường dẫn đến file chứa thư viện]>  Chú thích trong chương trình Việc chú thích trong chương trình nhằm mục đích giải thích ý nghĩa của câu lệnh, đoạn chương trình hoặc hàm hoạt động như thế nào và làm gì. Việc chú thích sẽ giúp cho người đọc hiểu được chương trình dễ dàng và nhanh chóng hơn, sửa lỗi đơn giản hơn hoặc giúp xem lại các chương trình cũ một cách thuận lợi hơn. Và vì chú thích không được Arduino biên dịch nên cho dù ta có viết dài đến cỡ nào thì không ảnh hưởng đến bộ nhớ flash của vi điều khiển [10]. Để ghi chú trong Arduino ta có 2 cách [10]: + Lời chú thích được đặt sau dấu “//”. Nó sẽ ghi chú lại tất cả những chữ (text, câu lệnh, hàm...) nằm sau dấu này cho đến khi hết dòng. + Lời ghi chú nằm trong cặp dấu “/*” và (*/). Nó sẽ ghi lại những gì nằm trong cặp dấu này kể cả khi xuống hàng (lưu ý là không có dầu cách). b. Các toán tử số học  Phép gán (=) dùng để gán giá trị cho một biến, giá trị nằm bên phải, tên biến nằm bên trái và cách nhau bởi một dấu bằng [10]. Cú pháp [10]: Biến_1=Biến_2 Biến_2 là một giá trị xác định hoặc là biến. Các phép cộng (+), trừ (-), nhân (*), chia (/) Những phép toán trên có nhiệm vụ thực hiện việc tính toán thông thường trong Arduino. Tùy thuộc vào kiểu dữ liệu của các biến hoặc hằng số mà kết quả trả về của nó có kiểu dữ liệu như thế nào [10]. Phép chưa lấy dư (%) sử dụng để lấy về phần dư của một phép chia các số nguyên [10].
  • 37. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 29 Cú pháp: <phần dư> = <số dư> % <số chia>; a. Các toán tử so sánh Các toán tử so sánh thường dùng để so sánh hai số có cùng một kiểu dữ liệu. Bảng 2.4 Các toán tử so sánh [10] Toán tử Ý nghĩa Ví dụ == So sánh bằng (a == b) trả về TRUE nếu a = b và ngược lại != So sánh không bằng (a != b) trả về TRUE nếu a khác b và ngược lại > So sánh lớn (a > b) trả về TRUE nếu a lớn hơn b và FALSE nếu a bé hơn hoặc bằng b < So sánh bé (a < b) trả về TRUE nếu a bé hơn b và FALSE nếu ngược lại <= Bé hơn hoặc bằng (a <= b) tương đương với ((a < b) or (a = )) >= Lớn hơn hoặc bằng (a >= b) tương đương với ((a > b) or (a = )) b. Các toán tử logic Bảng 2.5 Các toán tử logic [10] Toán tử Ý nghĩa Ví dụ And (&&) Và (a && b) trả về TRUE nếu a và b đều mang giá trị TRUE. Nếu một trong a hoặc b là FALSE thì (a && b) trả về FALSE Or (ll) Hoặc (a ll b) trả về TRUE nếu có ít nhất 1 trong 2 giá trị a và b là TRUE, trả về FALSE nếu cả a và b đều FALSE Not (!) Phủ định Nếu a mang giá trị TRUE thì (!a) là FALSE và ngược lại Xor (^) Loại trừ (a ^ b) trả về TRUE nếu a và b mang hai giá trị TRUE/FALSE khác nhau, các trường còn lại trả về FALSE c. Các phép toán hợp nhất  Cộng một/trừ một: Cộng hoặc trừ một biến đi 1 đơn vị [10] Cú pháp:
  • 38. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 30 x++; // tăng x lên 1 giá trị và trả về giá trị cũ của x ++x; // tăng x lên 1 giá trị và trả về giá trị mới của x x--; // trừ x đi 1 giá trị và trả về giá trị cũ của x --x; // trừ x đi một giá trị và trả về giá trị mới của x Với tham số x là bất kì kiểu số nguyên nào (int, byte, unsinged int,...). Trả về giá trị cũ của biến hoặc giá trị mới đã được cộng hoặc bị trừ của biến ấy. 2.3.2.2.3 Các cấu trúc điều khiển a. Câu lệnh if...else Cú pháp [10]: if ([biểu thức 1] [toán tử so sánh] [biểu thức 2]) { //biểu thức điều kiện câu lệnh [câu lệnh 1] } else { [câu lệnh 2] } Nếu biểu thức điều kiện trả về giá trị true, [câu lệnh 1] sẽ được thực hiện, ngược lại, [câu lệnh 2] sẽ được thực hiện. Có thể sử dụng nhiều biểu thức điều kiện khi sử dụng câu lệnh if, mỗi biểu thức con phải được khai báo bằng một ngoặc tròn và phải luôn có một ngoặc tròn bao toàn bộ biểu thức con. b. Câu lệnh swich/case Khi có quá nhiều điều kiện để chọn thực hiện thì dùng câu lệnh if sẽ rất rối rắm và dài dòng, lúc này ta sử dụng câu lệnh switch/case [10]. Cú pháp: Switch (biểu thức) { Case [giá trị 1]:[lệnh 1];break; Case [giá trị 2]:[lệnh 2];break; Case [giá trị 3]:[lệnh 3];break; ........................................... Case [giá trị n]:[lệnh n];break;
  • 39. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 31 } Lệnh này sẽ đánh giá các giá trị của biểu thức: Nếu biểu thức này có giá trị bằng giá trị 1 => lệnh 1 sẽ thực hiện. Nếu biểu thức này có giá trị bằng giá trị 2 => lệnh 2 sẽ thực hiện. Nếu biểu thức này có giá trị bằng giá trị 3 => lệnh 3 sẽ thực hiện. .......................................................................... Nếu biểu thức này có giá trị bằng giá trị n => lệnh n sẽ thực hiện. Biểu thức phải có giá trị đếm được, kiểu dữ liệu của biểu thức phải là một số nguyên hoặc là kí tự, chuỗi kí tự hoặc kiểu dữ liệu liệt kê [10]. c. Cấu trúc for For có chức năng làm một vòng lặp. Vòng lặp được hiểu đơn giản là làm đi làm lại một việc nào đó. Cấu trúc for là một vòng lặp có giới hạn, nghĩa là nó bắt đầu từ một vị trí xác định và đi đến một vị trí kết thúc. Cứ sau một bước, vòng lặp lại thực hiện một đoạn lệnh [10]. Cú pháp: For (<biến chạy> = <start>;<điều kiện>;<bước>) { //lệnh } d. Cấu trúc while Cú pháp [10]: While (<điều kiện>) { // Các đoạn lệnh; } While là một dạng vòng lặp theo điều kiện. Cũng giống như for, quá trình lặp trong while sẽ diễn ra liên tục cho đến khi biểu thức điều kiện trả về giá trị false. Một điều cần lưu ý là biểu thức điều kiện tồn tại trước khi vòng lặp bắt đầu, do đó vòng lặp có khi sẽ không được thực hiện lần nào, tùy thuộc vào việc khởi tạo giá trị
  • 40. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 32 cho các biến có liên quan. Vòng lặp while thường được dùng trong các trường hợp không biết rõ số lần lặp [10]. 2.3.2.2.4 Các hàm và thủ tục Hàm digitalWrite() Hàm xuất tín hiệu ra các chân Digital, có hai giá trị là HIGHT hoặc LOW. Nếu một pin được thiết đặt là OUTPUT bởi pinMode(), khi dùng digitalWrite() để cuất tín hiệu thì điện thế tại chân này sẽ là 5V (hoặc 3.3V trên mạch 3.3V) nếu được xuất tín hiệu là HIGHT, và 0V nếu được xuất tín hiệu là LOW [10]. Nếu một pin được thiết đặt là INPUT bởi pinMode(), lúc này digitalWrite() sẽ bật (HIGHT) hoặc tắt (LOW) hệ thống điện trở pullup nội bộ. Nên dùng INPUT_PULLUP nếu muốn bật hệ thống pullup nội bộ [10]. Cú pháp: digitalWrite(pin,value) Trong đó: pin: số của chân Digital muốn thiết đặt. Value: HIGHT hoặc LOW. Hàm digitalRead() Đọc tín hiệu điện từ một chân Digital (được thiết đặt là INPUT), trả về hai giá trị HIGHT hoặc LOW [10]. Cú pháp: digitalRead(pin) Trong đó: pin là giá trị digital muốn đọc. Hàm analogRead() Nhiệm vụ của analogRead() là đọc giá trị điện áp từ một chân Analog (ADC). Trên mạch Arduino Uno có 6 chân Analog In, được kí hiệu từu A0 đến A5. Trên các mạch khác cũng có các chân tương tự như vậy với tiền tố ‘A’ đứng đầu, sau đó là số hiệu của chân [10].
  • 41. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 33 analogRead() luôn trả về một số nguyên nằm trong khoảng từ 0 đến 1023 tương ứng với thang điện áp mặc định từ 0V đến 5V. Có thể điều chỉnh thang điện áp này thông qua hàm analogReference() [10]. Hàm analogRead() cần 100 micro giây để thực hiện. Cú pháp: analogRead([chân đọc điện áp]) Hàm analogWrite() Cho phép xuất ra một mức tín hiệu Analog (phát xung PWM) từ một chân trên mạch Arduino. Người ta thường điều khiển mức sáng tối của đèn LED hay hướng quay của động cơ bằng cách phát xung PWM như thế này [10]. Cú pháp [10]: analogWrite([chân phát xung PWM],[giá trị xung PWM]) Hàm thời gian delay() Hàm có nhiệm vụ dừng chương trình trong thời gian mili giây (1000 mili giây = 1 giây) [10]. Cú pháp: delay(ms) trong đó: ms là thời gian ở mức mili giây, có kiểu dữ liệu là usigned long (là kiểu số nguyên nằm trong khoảng từ 0 đến 4 294 967 295 (0 đến 232 – 1). Mỗi biến mang kiểu dữ liệu này chiếm 4 byte bộ nhớ) [10]. 2.3.2.2.5 Giao tiếp giữa máy tính với Arduino Trong quá trình làm việc, máy tính và Arduino cần trao đổi dữ liệu cho nhau, lúc này ta sử dụng truyền thông nối tiếp hay còn gọi là giao thức chuỗi (Serial). Tất cả các mạch Arduino đều có ít nhất một cổng Serial (hay còn gọi là UART hoặc USART). Arduino hỗ trợ một thư viện giao tiếp giữa các mạch Arduino với nhau hoặc giữa Arduino với máy tính bao gồm các hàm và thủ tục, gọi là thư viện Serial. Giao thức Serial được thực hiện qua hai cổng digital 0 (RX) và 1 (TX) hoặc qua cổng USB với máy tính. Vì vậy, nếu đang sử dụng các hàm của thư viện Serial này, ta không thể sử dụng các chân digital 0 và digital 1 để làm việc khác được [10].
  • 42. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 34 Có thể sử dụng bảng Serial monitor có sẵn trong Arduino IDE để giao tiếp với Arduino trong giao thức Serial. Kích vào biểu tượng Serial Monitor ( ) hoặc nhấn tổ hợp phím Ctrl+Shift+M để mở bảng Serial Monitor, sau đó vào bảng chọn baudrate giống với baudrate được dùng trong quá trình lập trình, mặc định là 9600 [10].
  • 43. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 35 CHƯƠNG 3. THIẾT KẾ, LẬP TRÌNH VÀ LẮP ĐẶT MẠCH ĐIỀU KHIỂN TỪ XA VỀ NHIỆT ĐỘ, ĐỘ ẨM TRÊN ĐIỆN THOẠI DI ĐỘNG THÔNG QUA MODULE WIFI ESP8266 3.1 Phân tích mạch điều khiển Phân tích mạch là bước quan trọng giúp xác định được kết cấu của mạch, các thông số của thiết bị để từ đó có cơ sở thiết kế, điều khiển và lắp đặt. Phân tích mạch điều khiển thiết bị dùng Module Wifi ESP8266 V1 với sơ đồ khối tổng quát của mạch, nguyên lí hoạt động, lưu đồ thuật toán và chương trình điều khiển. 3.1.1 Sơ đồ khối tổng quát Mạch điều khiển thiết bị dùng Arduino Uno kết nối với Module Wifi ESP8266 V1 và cảm biến DHT11 có sơ đồ khối tổng quát được thể hiện như trên hình 3.1 Hình 3.1 Sơ đồ khối tổng quát Trong đó: - Khối nguồn: gồm có nguồn cấp cho Arduino Uno là 5V-DC lấy từ máy tính điện tử thông qua cổng USB. - Khối điều khiển trung tâm: board Arduino Uno có chức năng nhận tín hiệu từ cảm biến DHT11 và gủi tín hiệu sang Module Wifi Esp8266 V1.
  • 44. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 36 - Khối phát tín hiệu điều khiển: Smartphone điều khiển bằng Module Wifi ESP8266 có chức năng nhận tín hiệu từ Arduino Uno và phát tín hiệu qua wifi và truyền lên web có tên là ThingSpeak. - Khối thiết bị ngoại vi: cảm biếnnhiệt độ và độ ẩm DHT11 có chức năng nhận giá trih nhiệt độ và độ ẩm từ môi trường.  Quy trình kết nối (khi giới thiệu các thiết bị đã có sơ đồ kết nối): - Trước tiên, kết nối Arduino Uno với Module Wifi Esp8266 V1. - Tiếp theo, kết nối cảm biến nhiệt độ, độ ẩm DHT11 với Arduino Uno. - Cắm dây USB 5V vào Arduino. 3.1.2 Nguyên lý hoạt động của hệ thống Đầu tiên, khởi động phần mềm Virtuino. Tiếp theo, khởi động chương trình - hệ thống sẽ thiết lập các thông số cần thiết và nhận tín hiệu từ Arduino IDE. Trong đó, cần thiết lập các cổng của bo mạch Arduino. Người dùng sử dụng phần mềm Arduino IDE để tiến hành viết chương trình code cho mạch điều khiển. Mạch điều khiển kiểm tra tiêu chuẩn truyền UART (9600) sau đó đọc giá trị nhiệt độ, độ ẩm từ cảm biến DHT11 và gửi đến Arduino. Lúc này, nếu Arduino có giá trị nhiệt độ và độ ẩm thì sẽ gửi qua Module Wifi Esp8266 V1. Esp8266 V1 truyền dữ liệu qua wifi và gửi lên trang web gọi là ThingSpeak. Cuối cùng, kết quả được hiển thị lên màn hình điện thoại thông qua Apps Virtuino. 3.1.3 Lưu đồ thuật toán Mạch điều khiển thiết bị dùng Module Wifi Esp8266 V1 có lưu đồ thuật toán như hình 3.2:
  • 45. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 37 Hình 3.2 Lưu đồ thuật toán mạch điều khiển 3.1.4 Nạp code và chạy chương trình. - Đầu tiên để có thể viết chương trình cho mạch điều khiển thì ta cần chọn thư viện SoftwareSerial cho phần mềm Arduino IDE. - Viết code để nạp cho chương trình kết nối giữa Arduino + Esp8266 V1 + DHT11 gửi lên Thingspeak như sau: // Khóa luận // Tạo giao tiếp với esp8266 #include <SoftwareSerial.h> SoftwareSerial espSerial = SoftwareSerial(2,3); // arduino RX pin=2 arduino TX pin=3
  • 46. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 38 #include <DHT.h> //thư viện cảm biến #define DHTPIN 5 // chân input cảm biến #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); String apiKey = "OG23B22NRB99H1D2"; // key API trên thingSpeak String ssid="WIFI CHUA"; // Nhập wifi String password ="0988366493"; // Nhập pass wifi boolean DEBUG=true; // kiểm tra phản hồi void showResponse(int waitTime){ long t=millis(); char c; while (t+waitTime>millis()){ if (espSerial.available()){ c=espSerial.read(); if (DEBUG) Serial.print(c); } } } //Hàm gửi giá trị lên thingSpeak boolean thingSpeakWrite(float value1, float value2){ String cmd = "AT+CIPSTART="TCP",""; // Kết nối với TCP cmd += "184.106.153.149"; // api.thingspeak.com cmd += "",80"; espSerial.println(cmd); if (DEBUG) Serial.println(cmd); if(espSerial.find("Error")){ if (DEBUG) Serial.println("AT+CIPSTART error"); return false; }
  • 47. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 39 String getStr = "GET /update?api_key="; getStr += apiKey; getStr +="&field1="; getStr += String(value1); getStr +="&field2="; getStr += String(value2); getStr += "rnrn"; // send data length cmd = "AT+CIPSEND="; //Đưa độ dài tập tin cho Esp8266 để nhận cmd += String(getStr.length()); //Lấy độ dài của getStr rồi gửi lên Esp8266 espSerial.println(cmd); if (DEBUG) Serial.println(cmd); delay(100); if(espSerial.find(">")){ espSerial.print(getStr); //Nếu tìm thấy kí tự phản hồi của lệnh Send thì gửi dữ liệu lên thingSpeak cho Esp8266 if (DEBUG) Serial.print(getStr); } else{ espSerial.println("AT+CIPCLOSE"); // alert user if (DEBUG) Serial.println("AT+CIPCLOSE"); return false; } return true; } //=============================================== setup void setup() { DEBUG=true; Serial.begin(9600);
  • 48. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 40 dht.begin(); espSerial.begin(115200); espSerial.println("AT+CWMODE=1"); // set esp8266 as client showResponse(1000); espSerial.println("AT+CWJAP=""+ssid+"",""+password+"""); showResponse(5000); if (DEBUG) Serial.println("Setup completed"); } // chương trình chính void loop() { // Read sensor values float t = dht.readTemperature(); float h = dht.readHumidity(); if (isnan(t) || isnan(h)) { if (DEBUG) Serial.println("Failed to read from DHT"); } else { if (DEBUG) Serial.println("Temp="+String(t)+" *C"); if (DEBUG) Serial.println("Humidity="+String(h)+" %"); thingSpeakWrite(t,h); } delay(2000); } 3.2 Thiết kế mạch và thi công mạch điều khiển 3.2.1 Xác định mạch điều khiển Mạch điều khiển thiết bị qua Module Wifi Esp8266 dùng Arduino bao gồm: - Board Arduino Uno R3. - Module Wifi Esp8266 V1. - Cảm biến nhiệt độ và độ ẩm DHT11. - Smartphone chạy hệ điều hành Android.
  • 49. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 41 - Nguồn 5V cấp cho Arduino từ cổng USB. - Dây nối. Mạch điều khiển thiết bị qua Module Wifi Esp8266 dùng Arduino có thể sử dụng để điều khiển cùng một lúc rất nhiều thiết bị. Nhưng để đơn giản và tiết kiệm chi phí, mạch này chỉ sử dụng để điều khiển nhiệt độ, độ ẩm. 3.2.2 Giải pháp công nghệ - Mạch sử dụng board Arduino Uno, Module Wifi Esp8266 V1 và cảm biến nhiệt độ, độ ẩm DHT11. - Ngôn ngữ lập trình trên Arduino IDE. 3.2.3 Giải pháp thiết kế - Lắp rắp mạch điều khiển với các board Arduino Unovà Module Wifi Esp8266 V1; board Arduino Uno và Cảm biến DHT11 với các thiết bị ngoại vi. - Viết chương trình cho mạch điều khiển. 3.2.4 Yêu cầu của mạch điều khiển - Hoạt động chính xác. - Mạch điều khiển đơn giản. - Giá thành thấp, tính ứng dụng cao trong thực tế. - Có khả năng mở rộng. 3.2.5 Thi công mạch điều khiển 3.2.5.1 Kết nối phần cứng và nạp chương trình mạch điều khiển Bước 1: Kết nối các chân của cảm biến DHT11 với các chân bo mạch Aruino Uno. Tiếp theo tiến hành kết nối các chân của Module Wifi Esp8266 V1 với các chân bo mạch Aruino Uno.
  • 50. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 42 Hình 3.3 Kết nối phần cứng của mạch điều khiển Bước 2: Tiến hành cấp nguồn cho Arduino. Cắm jack USB 5V kết nối giữa máy tính và Arduino. Lúc này, các đèn báo trên board Arduino và trên module wifi Esp8266 V1 sẽ sáng lên báo hiệu mạch đã khởi động. Hình 3.4 Đèn trên Arduino mà module wifi Esp8266 sáng khi cấp nguồn Bước 3: Nạp chương trình điều khiển. Mở Arduino IDE và tiến hành viết chương trình cho mạch điều khiển gửi lên Thingspeak. Trước tiên, để kiểm tra chương trình có lỗi hay không ta kích chọn biểu tượng . Nếu chương trình không có lỗi, trên giao diện sẽ xuất hiện dòng “Done compiling” ở vùng thông báo.
  • 51. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 43 Hình 3.5 Kiểm tra lỗi của chương trình phát tín hiệu Khi nhận thông báo chương trình đã sẵn sàng ta tiến hành nạp chương trình xuống vi điều khiển Arduino. Kích chọn biểu tượng . Hình 3.6 Nạp chương trình xuống cho mạch điều khiển Nếu quá trình nạp thành công:
  • 52. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 44 Hình 3.7 Quá trình nạp thành công 3.2.5.2 Hoạt động của mạch điều khiển Sau khi nạp chương trình cho Arduino thì hệ thống bắt đầu làm việc và cho giá trị nhiệt độ, độ ẩm như hình 3.8. Hình 3.8 Kết quả đo nhiệt độ, độ ẩm hiển thị trên máy tính Tín hiệu nhận được về giá trị nhiệt độ và độ ẩm sẽ được đưa lên thingSpeak như hình 3.9 dưới đây.
  • 53. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 45 Hình 3.9 Kết quả đo nhiệt độ và độ ẩm được đưa lên thingSpeak Cuối cùng Module Wifi Esp8266 V1 sẽ đưa tín hiệu về nhiệt độ và độ ẩm nhận được hiển thị trên Smartphone. Hình 3.10 Kết quả nhiệt độ và độ ẩm hiển thị trên Smartphone
  • 54. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 46 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Sau một thời gian thực hiện đề tài với sự giúp đỡ, hướng dẫn tận tình của thầy Hoàng Đình Long cùng với sự nổ lực của bản thân, đến nay em đã hoàn thành xong đề tài “Điều khiển thiết bị qua Module Wifi Esp8266” đúng thời gian quy định. Bởi vì mạch đã được thực thi trong thực tế với các phần cứng như đã trình bày nên trong đề tài này không tiến hành mô phỏng mạch điều khiển.  Khóa luận đã trình bày những nội dung chủ yếu sau: - Thứ nhất, giới thiệu tổng quan về Arduino, Module Wifi Esp8266 và cảm biến nhiệt độ, độ ẩm DHT11 được sử dụng trong mạch điều khiển. - Thứ hai, giới thiệu phần mềm ứng dụng Virtuino trên Android, phần mềm mô phỏng Proteus, phần mềm Arduino IDE và ngôn ngữ lập trình cho Arduino. - Thứ ba, thiết kế mạch điều khiển dùng Module Wifi Esp8266 và đưa ra một số hình ảnh thực tế của phần thi công mạch.  Hướng phát triển của đề tài: Đề tài chỉ nghiên cứu điều khiển lấy nhiệt độ, độ ẩm ta có thể phát triển thêm bằng cách kết nối Arduino với module Relay là có thể điều khiển được các thiết bị sử dụng điện 220V trong gia đình, hoặc có thể phát triển để thiết kế mạch điều khiển xe điều khiển từ xa, làm mô hình tưới nước tự động... Trên thực tế, Arduino còn có rất nhiều ứng dụng khác nữa như điều khiển các loại máy móc cần độ chính xác cao, điều khiển máy bay không người lái, điều khiển xe mô hình,... Arduino cũng được chọn là bộ xử lý trung tâm của rất nhiều Robot. Do đó, có thể xem sự phát triển của Arduino là một bước tiến mới trong công nghệ, giúp cho nền khoa học kĩ thuật ngày càng phát triển hơn.
  • 55. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 47 TÀI LIỆU THAM KHẢO [1]. Arduino – nềntảngtrong việcđiềukhiển tự động, truy cập 22h ngày 24/12/2017. http://blog.siliconstraits.vn/arduino-nen-tang-moi-trong-viec-dieu-khien-tu-dong/ [2]. Báo cáo đồ án 1 – thiết kế mạch đo nhiệt độ sử dụngboard arduino hiển thị trên 4 led 7 thanh và truyền phát không dây, khoa điện trường ĐH bách khoa Hà Nội, truy cập 19h ngày 27/12/2017. http://luanvan.co/luan-van/de-tai-thiet-ke-mach-do-nhiet-do-su-dung-board-arduino- hien-thi-tren-4-led-7-thanh-va-truyen-phat-khong-day-su-dung-52990/ [3]. Nguyễn Trung Tín, Hướng dẫn sử dụng cơ bản Arduino, TP HCM, 2014. [4]. Robot dò line điều khiển qua điện thoại, trường ĐH Bà Rịa Vũng Tàu, truy cập ngày 2/1/2018. http://thuvienso.bvu.edu.vn/bitstream/TVDHBRVT/16119/1/Nguyen-Quoc-An.pdf [5]. http://www.epu.edu.vn/cnck/Default.aspx?BT=14869 [6]. Mạch thu phát wifi Esp8266 V1, truy cập 8h ngày 14/3/2018. http://hshop.vn/products/mach-thu-phat-wifi-esp8266-v1 [7]. Cảm biến nhiệt độ độ ẩm DHT11 ra chân, truy cập 10h ngày 14/3/2018. http://hshop.vn/products/cam-bien-do-am-nhiet-do-dht11 [8]. Báo cáo hướng dẫn sử dụng phần mềm mô phỏng proteus, truy cập 19h ngày 16/3/2018. http://doc.edu.vn/tai-lieu/bao-cao-huong-dan-su-dung-phan-mem-mo-phong-proteus- 59163/ [9]. Phạm Quang Huy – Lê Cảnh Trung, Lập trình điều khiển với Arduino, NXB Khoa Học và Kỹ Thuật, 2014. [10]. Ngôn ngữ lập trình trên Arduino, truy cập 19h ngày 18/3/2018. http://arduino.vn/reference. [11]. Điều khiển và giám sát qua điện thoại, truy cập 20h ngày 1/4/2018. https://hocarm.org/dieu-khien-va-giam-sat-qua-dien-thoai-voi-esp8266-va-blynk/#ftoc- heading-3 [12]. Trang ThingSpeak trên web, truy cập ngày 24/4/2018.
  • 56. Khóa luận tốt nghiệp GVHD: Th.S Hoàng Đình Long SVTH:Nguyễn Thị Kim Anh 48 https://thingspeak.com/channels/480815/api_keys [13]. Esp8266 kết nối internet phần 1, truy cập ngày 25/4/2018 http://arduino.vn/bai-viet/1496-esp8266-ket-noi-internet-phan-1-cai-dat-esp8266-lam- mot-socket-client-ket-noi-toi [14]. Hướng dẫn sử dụng ModuleWifi Esp8266V1 với ArduinoUno R3, truy cập ngày 29/4/2018. http://tdhshop.com.vn/huong-dan-su-dung-module-wifi-esp8266-v1-voi-arduino-unor3