MỤC TIÊU NGHIÊN CỨU − Xây dựng hệ thống đồng hồ thời gian thực tích hợp cảm biến nhiệt độ và độ ẩm, hiển thị thời gian, nhiệt độ và độ ẩm chính xác.. Mục tiêu thiết kế Đề tài "Thiết kế
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
Nguyễn Quang Huy Mã sinh viên: 2021604355
Lê Đăng Nam Mã sinh viên: 2021602171
Nguyễn Xuân Quý Mã sinh viên: 2021602510
Vũ Trần Trí Mã sinh viên: 2021602424
KHÓA: 16
HÀ NỘI, THÁNG 6 NĂM 2025
Trang 21
LỜI CẢM ƠN
Lời đầu tiên, nhóm chúng em xin được gửi lời cảm ơn chân thành đến TS Trần Đình Thông - giảng viên Khoa Điện tử đã luôn tận tâm giảng dạy và hướng dẫn nhóm trong suốt quá trình học tập Nhờ vào những lời khuyên quý báu và sự chỉ bảo nhiệt tình, đúng lúc của thầy, chúng em đã vượt qua được những khó khăn trong quá trình thực hiện đồ án Sự hỗ trợ của thầy đã là nguồn động viên lớn lao, giúp nhóm hoàn thành tốt công việc và đạt được kết quả như mong đợi Tiếp theo, nhóm chúng em xin gửi lời cảm ơn sâu sắc đến các thầy cô Khoa Điện tử, Trường Đại học Công nghiệp Hà Nội – những người đã dành tâm huyết truyền đạt kiến thức quý báu, giúp nhóm em xây dựng được nền tảng vững chắc
và đạt được những thành quả như hôm nay
Tuy nhiên, sau tất cả, nhóm chúng em nhận thức rõ rằng với lượng kiến thức
và kinh nghiệm còn hạn chế, đồ án của chúng em chắc chắn không tránh khỏi những thiếu sót Kính mong quý thầy cô rộng lòng thông cảm và đóng góp những ý kiến quý báu để giúp nhóm em ngày càng hoàn thiện và phát triển hơn nữa
Nhóm em xin trân trọng cảm ơn!
Hà Nội, ngày 17 tháng 6 năm 2025
Nhóm sinh viên
Nguyễn Quang Huy
Lê Đăng Nam Nguyễn Xuân Quý
Vũ Trần Trí
Trang 32
MỤC LỤC
LỜI CẢM ƠN 1
MỤC LỤC 2
DANH MỤC HÌNH ẢNH 4
DANH MỤC BẢNG SỐ LIỆU 5
PHÂN CHIA CÔNG VIỆC TRONG NHÓM 6
MỞ ĐẦU 7
CHƯƠNG 1 Phân tích yêu cầu bài toán và xác định tiêu chí kỹ thuật bài toán thiết kế 9
1.1 Mục tiêu thiết kế 9
1.2 Yêu cầu ràng buộc của thiết kế 9
1.3 Thông số kỹ thuật 11
1.3.1 Đồng hồ thời gian thực DS3231 [3][7] 11
1.3.2 Cảm biến nhiệt độ và độ ẩm DHT11 [2][4] 11
1.3.3 Vi điều khiển STM32F103C8T6 [5] 11
1.3.4 Màn hình hiển thị LCD [6][9] 12
1.4 Tiêu chí đánh giá sản phẩm 12
1.5 NỘI DUNG LÝ THUYẾT LIÊN QUAN 13
1.5.1 Đồng hồ thời gian thực DS3231 [3][7] 13
1.5.2 Cảm biến nhiệt độ và độ ẩm DHT11 [2][4] 15
1.5.3 Vi điều khiển STM32F103C8T6[5] 16
1.5.4 Màn hình hiển thị LCD[6][9] 19
1.5.5 Module I2C LCD1602 (I2C PCF8574) [9] 20
1.5.6 Giao tiếp I2C[8] 21
CHƯƠNG 2 Thiết kế ý tưởng 24
2.1 Phạm vi đề tài và hướng tiếp cận 24
Trang 43
2.1.1 Phạm vi của đề tài 24
2.1.2 Các bước thực hiện và phương pháp tiếp cận 24
2.2 THIẾT KẾ Ý TƯỞNG 26
2.2.1 Sử dụng PIC 18F4520 26
2.2.2 Sử dụng vi điều khiển STM32F103C8T6 28
2.2.3 So sánh phương án thiết kế 29
2.2.4 Lựa chọn phương pháp thiết kế tối ưu 29
CHƯƠNG 3 THIẾT KẾ CHI TIẾT 30
3.1.1 Sơ đồ khối tổng quát 30
3.1.2 Nhiệm vụ từng khối 30
3.1.3 Thiết kế sơ đồ nguyên lý 30
3.1.4 Lưu đồ thuật toán 41
3.1.5 Thiết kế phần mềm 43
3.1.6 Mạch nguyên lí và mạch in 55
3.1.7 Sản phẩm thực tế 55
3.1.8 Vận hành sản phẩm 56
3.1.9 Thử nghiệm và kiểm chứng sản phẩm 58
3.1.10 Đánh giá sản phẩm 58
3.1.11 Ứng dụng sản phẩm 59
3.1.12 Tác động của sản phẩm thiết kế tới môi trường/ kinh tế/ xã hội 61 3.1.13 Mô tả yêu cầu kỹ thuật của hệ thống điện tử 63
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 64
TÀI LIỆU THAM KHẢO 69
PHỤ LỤC 70
1 Hướng dẫn sử dụng sản phẩm 70
2 Mã nguồn (source code) 71
Trang 54
DANH MỤC HÌNH ẢNH
Hình 1.1 Module DS3231 [3] 15
Hình 1.2 Module DHT11 [2] 16
Hình 1.3 STM32F103C8T6 BluePill [5] 18
Hình 1.4 LCD 16x2 [9] 19
Hình 1.5 Sơ đồ kết nối giữa PCF8574 với LCD1602 20
Hình 1.6 Khung truyền I2C [8] 21
Hình 1.7 Xung của SDA và SCL khi bắt đầu giao tiếp [8] 22
Hình 1.8 Điều kiện kết thúc của giao tiếp I2C [8] 23
Hình 3.1 Sơ đồ khối hệ thống 30
Hình 3.2 Sơ đồ nguyên lý tổng quát của hệ thống 31
Hình 3.3 Sơ đồ nguyên lý khối nguồn 32
Hình 3.4 Sơ đồ nguyên lý khối cảm biến 33
Hình 3.5 Sơ đồ nguyên lý khối điều khiển 34
Hình 3.6 Sơ đồ nguyên lý khối đầu ra 35
Hình 3.7 Sơ đồ nguyên lý khối hiển thị 36
Hình 3.8 Khung truyền I2C LCD 1602 [9] 37
Hình 3.9 Chế độ truyền 4 bit màn hình LCD [9] 37
Hình 3.10 Khung truyền I2C với DC3231 [7] 39
Hình 3.11 Mạch in 2D 55
Hình 3.12 Mạch in 3D 55
Hình 3.13 Sản phẩm thực tế 56
Hình 3.14 Hiển thị giờ và ngày tháng 56
Hình 3.16 Hiển thị độ ẩm 57
Hình 3.15 Hiển thị nhiệt độ 57
Hình 3.18 Cài nhiệt độ ngưỡng 57
Hình 3.17 Thông báo nhiệt độ vượt quá mức 57
Hình 3.19 Thông báo báo thức 58
Hình 3.20 Mode cài báo thức 58
Trang 65
DANH MỤC BẢNG SỐ LIỆU
Bảng 1.1 Phân chia công việc nhóm 6Bảng 1.2 So sánh phương án thiết kế 29Bảng 1.3 Bảng thanh ghi lưu trữ thời gian[7] 39
Trang 76
PHÂN CHIA CÔNG VIỆC TRONG NHÓM
Bảng 1.1 Phân chia công việc nhóm
Công việc– Task Người thực
hiện
- Owner(s)
Trạng thái – Status
Thành lập nhóm Các thành viên nhóm Done Thiết kế ý tưởng Các thành viên nhóm Done
Tìm hiểu và nghiên cứu đề tài Nguyễn Quang Huy Nguyễn Xuân Quý Done
Lắp mạch mô phỏng Nguyễn Quang Huy Lê Đăng Nam Done
Tìm hiểu về linh kiện Lê Đăng Nam Vũ Trần Trí Done
Mua linh kiện
Lê ĐăngNam Nguyễn Xuân Quý
Đo các thông số trong mạch Nguyễn Quang Huy Vũ Trần Trí Done
Thiết kế phần mềm Nguyễn Quang Huy Nguyễn Xuân Quý Done Kiểm thử phần mềm Lê ĐăngNam
Thiết kế PCB Nguyễn Quang Huy Lê Đăng Nam Done Làm báo cáo môn Các thành viên nhóm Done
Trang 8Nhu cầu ngày càng tăng về việc kiểm soát môi trường sống là yếu tố quan trọng thúc đẩy sự sáng tạo và đổi mới trong thiết kế, giúp nâng cao trải nghiệm sử dụng Đồng thời, việc phát triển sản phẩm này cũng là cơ hội để người thực hiện rèn luyện và hoàn thiện các kỹ năng thiết kế hệ thống nhúng, mang lại sự tinh tế và hiệu quả trong từng chi tiết nhỏ nhất
Với tính khả thi cao, chi phí hợp lý và khả năng ứng dụng rộng rãi, sản phẩm không chỉ đem lại giá trị thực tiễn mà còn tạo ra cơ hội phát triển các tính năng mới, mang đến lợi ích lâu dài cho cả người sử dụng và các ngành công nghiệp Một chiếc đồng hồ không chỉ đo thời gian, mà còn giúp người sử dụng cảm nhận được sự thay đổi của không gian xung quanh, mang đến sự tiện nghi và bảo vệ sức khỏe cho mỗi cá nhân
2 MỤC TIÊU NGHIÊN CỨU
− Xây dựng hệ thống đồng hồ thời gian thực tích hợp cảm biến nhiệt độ và độ
ẩm, hiển thị thời gian, nhiệt độ và độ ẩm chính xác
− Lập trình hệ thống nhúng để xử lý dữ liệu cảm biến và đồng bộ hóa với đồng
− Tạo sản phẩm dễ sử dụng và có chi phí hợp lý, phù hợp với nhu cầu thực
tiễn của người dùng
Trang 98
3 ĐỐI TƯỢNG NGHIÊN CỨU
− Hệ thống đồng hồ thời gian thực: Bao gồm phần cứng và phần mềm để hiển thị thời gian chính xác
− Cảm biến nhiệt độ và độ ẩm: Cảm biến DHT11 dùng để đo nhiệt độ và độ
− Ứng dụng thực tiễn: Đánh giá sản phẩm trong các lĩnh vực gia đình, văn
phòng, nông nghiệp, và công nghiệp
5 PHƯƠNG PHÁP NGHIÊN CỨU
− Thiết kế phần cứng: Lựa chọn và kết nối vi điều khiển, cảm biến nhiệt độ/độ
Chương 2: Thiết kế ý tưởng
Chương 3: Thiết kế chi tiết
Trang 109
CHƯƠNG 1 PHÂN TÍCH YÊU CẦU BÀI TOÁN VÀ XÁC ĐỊNH TIÊU
CHÍ KỸ THUẬT BÀI TOÁN THIẾT KẾ 1.1 Mục tiêu thiết kế
Đề tài "Thiết kế đồng hồ thời gian thực kết hợp nhiệt độ và độ ẩm" nhằm tạo
ra hệ thống giám sát thời gian, nhiệt độ và độ ẩm trong thời gian thực, ứng dụng trong nông nghiệp thông minh, điều khiển môi trường, và nhà thông minh
− Công nghệ sử dụng: Module RTC (DS3231, DS1307) cung cấp thời gian chính xác; cảm biến nhiệt độ và độ ẩm (DHT11, DHT22, SHT31) đo môi trường; vi điều khiển (Arduino, ESP32) xử lý dữ liệu
− Lợi ích: Giám sát liên tục, tăng độ chính xác trong điều khiển tự động, dễ tích hợp với các hệ thống IoT để giám sát từ xa
− Thách thức: Độ chính xác của RTC có thể bị ảnh hưởng bởi yếu tố môi trường, tiêu thụ năng lượng, việc đồng bộ dữ liệu từ cảm biến và RTC, và kết nối dữ liệu ổn định
Đề tài có tiềm năng ứng dụng rộng rãi, nhưng cần giải quyết các vấn đề về chính xác thời gian, hiệu suất và tiết kiệm năng lượng
1.2 Yêu cầu ràng buộc của thiết kế
Đề tài yêu cầu thiết kế một hệ thống đồng hồ thời gian thực (RTC) kết hợp với các cảm biến để đo và hiển thị các thông số môi trường như nhiệt độ và độ ẩm
Hệ thống này cần được thiết kế sao cho có thể hoạt động độc lập, dễ sử dụng, chính xác và ổn định
Yêu cầu chung:
− Đồng hồ thời gian thực (RTC): Cung cấp thời gian chính xác theo giờ, phút, giây
− Cảm biến nhiệt độ và độ ẩm: Đo nhiệt độ và độ ẩm của môi trường xung quanh, và truyền dữ liệu đến vi xử lý để xử lý và hiển thị
− Vi xử lý (Microcontroller): Chịu trách nhiệm điều khiển, xử lý tín hiệu từ các cảm biến và đồng hồ thời gian thực, sau đó hiển thị kết quả
− Màn hình hiển thị: Hiển thị thời gian thực (giờ, phút, giây) cùng với các giá trị nhiệt độ và độ ẩm
Trang 11+ Đồng hồ thời gian thực (RTC): Sử dụng một RTC như DS3231 hoặc tương
tự để cung cấp thời gian chính xác Phải có khả năng hoạt động lâu dài và
+ Hiển thị thông tin: Hệ thống cần hiển thị đồng thời thời gian thực và các thông số nhiệt độ, độ ẩm trên màn hình
+ Tính ổn định và hiệu suất: Hệ thống cần hoạt động ổn định và chính xác trong thời gian dài mà không cần phải điều chỉnh thường xuyên
− Yêu cầu giao diện người dùng (UI):
+ Màn hình hiển thị: Hiển thị đồng thời thời gian và các giá trị nhiệt độ, độ
ẩm
+ Cập nhật thông tin: Màn hình cần được cập nhật thông tin thời gian và các thông số môi trường một cách liên tục
Trang 1211
+ Điều chỉnh đơn giản: Có thể cung cấp một số chức năng điều chỉnh (như thay đổi giờ thủ công) thông qua các nút nhấn hoặc giao diện khác
− Yêu cầu về độ chính xác và độ tin cậy:
+ Độ chính xác của đồng hồ: Đồng hồ thời gian thực phải có độ chính xác cao,
có thể điều chỉnh khi có sai lệch lớn
+ Độ chính xác của cảm biến: Cảm biến nhiệt độ và độ ẩm phải có độ chính xác phù hợp với yêu cầu của hệ thống
Độ bền và khả năng chịu đựng: Hệ thống phải có độ bền cao khi vận hành trong môi trường thực tế
• Clock: high-precision clock on chip DS3231
• Clock Accuracy: 040 ℃ range, the accuracy 2ppm,
• Thông tin Thời gian: giờ, phút, giây, ngày, thứ, tháng, năm, đến 2100
• Cảm biến nhiệt trên IC có độ chính xác ± 3 ℃
• I2C bus có tốc độ tối đa 400Khz
• Kèm thêm pin sạc được CR2032
• Kèm thêm memory IC AT24C32 (32k bits)
1.3.2 Cảm biến nhiệt độ và độ ẩm DHT11 [2][4]
• Điện áp hoạt động: 5VDC
• Chuẩn giao tiếp: TTL, 1 wire
• Khoảng đo độ ẩm: 20%-80%RH sai số ± 5%RH
• Khoảng đo nhiệt độ: 0-50°C sai số ± 2°C
• Tần số lấy mẫu tối đa 1Hz (1 giây / lần)
Trang 13+ Đồng hồ phải đảm bảo cập nhật và hiển thị giờ, phút, giây chính xác
+ Độ chính xác của cảm biến nhiệt độ và độ ẩm và có khả năng cập nhật dữ liệu liên tục hoặc theo chu kỳ
+ Các thông số (thời gian, nhiệt độ, độ ẩm) phải được hiển thị rõ ràng, dễ đọc
+ Giao diện hiển thị phải trực quan, dễ sử dụng
+ Phân chia khu vực hiển thị hợp lý giữa thời gian, nhiệt độ và độ ẩm
+ Khả năng lấy và hiển thị dữ liệu từ cảm biến nhanh chóng
+ Chương trình phần mềm tối ưu để tiết kiệm năng lượng và bộ nhớ
Trang 1413
− Tính năng khác:
+ Hỗ trợ giao tiếp qua Wi-Fi, Bluetooth hoặc giao tiếp nối tiếp
+ Tích hợp khả năng gửi dữ liệu tới điện thoại hoặc lưu trữ trên đám mây
+ Cảnh báo khi nhiệt độ hoặc độ ẩm vượt ngưỡng an toàn
+ Hiển thị trạng thái pin hoặc nguồn điện
+ Người dùng có thể chỉnh định giờ, đơn vị nhiệt độ (°C hoặc °F),…
− Độ bền:
+ Pin hoặc nguồn cấp phải có tuổi thọ dài
+ Có khả năng hoạt động trong các điều kiện thời tiết khác nhau
+ Chịu được va đập và rung lắc trong quá trình sử dụng
− Chi phí:
+ Giá thành hợp lý, chất lượng ổn
+ Linh kiện phổ biến, dễ tìm kiếm và thay thế
1.5 NỘI DUNG LÝ THUYẾT LIÊN QUAN
1.5.1 Đồng hồ thời gian thực DS3231 [3][7]
DS3231 là một IC đồng hồ thời gian thực (Real-Time Clock - RTC) được thiết
kế và phát triển bởi Maxim Integrated (nay là một phần của Analog Devices) Đây là một trong những bộ vi xử lý đồng hồ thời gian thực phổ biến và chính xác nhất, sử dụng trong nhiều ứng dụng cần đồng hồ thời gian chính xác, chẳng hạn như trong các hệ thống nhúng, đồng hồ điện tử, và các thiết bị cần theo dõi thời gian thực liên tục
Các đặc điểm nổi bật của DS3231:
− Độ chính xác cao:
DS3231 có độ chính xác rất cao nhờ vào việc sử dụng bộ điều chỉnh nhiệt độ
bù (temperature-compensated crystal oscillator - TCXO) Điều này giúp giảm thiểu sai số do sự thay đổi nhiệt độ, đảm bảo độ chính xác của đồng hồ trong khoảng ±1 phút mỗi năm (ở nhiệt độ từ -40°C đến +85°C)
Đặc điểm này làm cho DS3231 trở thành một trong những lựa chọn hàng đầu cho các ứng dụng yêu cầu thời gian chính xác và ổn định
− Các tính năng chính:
Trang 1514
+ Theo dõi thời gian và ngày tháng: DS3231 cung cấp khả năng theo dõi thời gian theo định dạng giờ, phút, giây (HH:MM:SS) và ngày, tháng, năm (DD/MM/YYYY)
+ Bộ đếm giây và phút: IC hỗ trợ tính năng đếm giây, phút, giờ và các chế độ chuyển đổi thời gian (12 hoặc 24 giờ)
+ Dự phòng nguồn (Backup Battery): DS3231 có thể duy trì thời gian ngay cả khi mất nguồn chính nhờ vào pin dự phòng (thường là pin CR2032) Điều này giúp đảm bảo đồng hồ tiếp tục chạy mà không bị mất dữ liệu khi ngắt kết nối với nguồn điện chính
+ Bộ nhớ không volatile: Lưu trữ các thông số thời gian và ngày tháng trong
bộ nhớ không mất điện, bảo vệ thông tin khi mất nguồn
− Giao tiếp với các thiết bị khác:
Giao thức I2C: DS3231 giao tiếp với vi điều khiển qua giao thức I2C Integrated Circuit), một giao thức truyền thông hai dây phổ biến, giúp kết nối
(Inter-dễ dàng với các thiết bị khác như vi điều khiển (Arduino, Raspberry Pi, ESP32, v.v.)
Điều này giúp đơn giản hóa việc kết nối và giảm thiểu số lượng dây nối so với các giao thức khác
− Các tính năng bổ sung:
+ Cảnh báo và báo thức (Alarm): DS3231 cung cấp tính năng báo thức, cho phép người dùng thiết lập các thời gian cụ thể để kích hoạt cảnh báo (tín hiệu đầu ra) Điều này rất hữu ích trong các ứng dụng như đồng hồ báo thức, các hệ thống điều khiển tự động, hoặc các thiết bị cần kích hoạt theo lịch trình
+ Chức năng bù thời gian chính xác: Với tính năng bù nhiệt độ, DS3231 có thể duy trì thời gian chính xác trong phạm vi nhiệt độ rộng từ -40°C đến +85°C, giúp nó hoạt động ổn định trong các điều kiện môi trường thay đổi
Ứng dụng:
+ Thiết bị điện tử và hệ thống nhúng
+ Các thiết bị cần bù thời gian
+ Các hệ thống báo động và tự động hóa
Trang 16+ Dễ dàng giao tiếp qua giao thức I2C
+ Tính năng báo thức giúp dễ dàng lập trình và điều khiển theo thời gian + Pin dự phòng giúp duy trì thời gian ngay cả khi mất nguồn
− Nhược điểm:
Vì là IC dành cho hệ thống đồng hồ thời gian, DS3231 không có khả năng xử
lý dữ liệu phức tạp như các vi điều khiển Tuy nhiên, với mục tiêu chính là cung cấp thời gian chính xác, đây không phải là một vấn đề lớn
Hình 1.1 Module DS3231 [3]
1.5.2 Cảm biến nhiệt độ và độ ẩm DHT11 [2][4]
− Khái niệm: Cảm biến nhiệt độ và độ ẩm là các thiết bị điện tử dùng để đo
các thông số môi trường như nhiệt độ (ở độ C hoặc độ F) và độ ẩm không khí (thường đo bằng phần trăm)
Trang 1716
− Chức năng: Cảm biến nhiệt độ và độ ẩm thường có khả năng giao tiếp với
vi xử lý hoặc mạch điện tử qua các giao thức như Digital (GPIO) hoặc I2C
Dữ liệu từ cảm biến sẽ được truyền vào bộ vi xử lý, nơi nó được xử lý và hiển thị lên màn hình
− Nguyên lý hoạt động:
+ Cảm biến nhiệt độ: Thường sử dụng các loại cảm biến nhiệt độ như thermistor hoặc thermocouple, hoặc các cảm biến kỹ thuật số như DS18B20
sử dụng nguyên lý thay đổi điện trở khi nhiệt độ thay đổi
+ Cảm biến độ ẩm: DHT11 hoặc DHT22 là các cảm biến phổ biến, hoạt động dựa trên việc thay đổi điện trở của vật liệu hút ẩm khi độ ẩm thay đổi, hoặc
sử dụng điện dung thay đổi của các mạch cảm biến
Hình 1.2 Module DHT11 [2]
1.5.3 Vi điều khiển STM32F103C8T6[5]
STM32F103C8T6 là một vi điều khiển (MCU) thuộc dòng STM32 của STMicroelectronics, được xây dựng trên nền tảng ARM Cortex-M3 Đây là một trong những vi điều khiển phổ biến và mạnh mẽ với hiệu suất cao, tính năng linh hoạt và tiết kiệm năng lượng, được ứng dụng rộng rãi trong nhiều lĩnh vực như điều khiển tự động, điện tử tiêu dùng, thiết bị IoT, và hệ thống nhúng
Đặc điểm nổi bật của STM32F103C8T6:
− Vi xử lý Cortex-M3:
+ STM32F103C8T6 sử dụng lõi ARM Cortex-M3 32-bit, mang lại hiệu suất tính toán mạnh mẽ và khả năng xử lý nhanh chóng các tác vụ phức tạp
Trang 1817
+ Tốc độ xung nhịp của vi điều khiển này có thể lên đến 72 MHz, cho phép
xử lý nhanh các tín hiệu và các tác vụ yêu cầu thời gian thực
− Các tính năng ngoại vi:
+ GPIO (General Purpose Input/Output): Vi điều khiển này có 37 chân GPIO
có thể lập trình, cho phép dễ dàng giao tiếp với các thiết bị ngoại vi như LED, công tắc, cảm biến
+ Timer: STM32F103C8T6 hỗ trợ nhiều bộ đếm thời gian (timers) với khả năng điều khiển PWM, đo xung, hoặc tạo tín hiệu điều khiển thời gian chính xác
+ ADC (Analog-to-Digital Converter): Vi điều khiển này có 12-bit ADC, cho phép chuyển đổi tín hiệu analog sang digital với độ phân giải cao, phục vụ cho các ứng dụng cảm biến
− Tiết kiệm năng lượng:
STM32F103C8T6 có các chế độ tiết kiệm năng lượng như chế độ ngủ (Sleep mode) và chế độ dừng (Stop mode), giúp tiết kiệm năng lượng trong các ứng dụng sử dụng pin
Vi điều khiển này có khả năng cấu hình cao và có thể ứng dụng trong nhiều lĩnh vực khác nhau nhờ vào tính linh hoạt trong việc lựa chọn các giao tiếp và chức năng ngoại vi
Trang 19Ưu điểm của STM32F103C8T6:
− Hiệu suất cao với xung nhịp lên đến 72 MHz
− Tiết kiệm năng lượng với nhiều chế độ tiết kiệm điện
− Đa dạng giao tiếp và ngoại vi hỗ trợ
− Dễ dàng tích hợp thêm các phần cứng bên ngoài, nhờ các chân GPIO và giao tiếp ngoại vi phong phú
− Tính linh hoạt trong các ứng dụng từ đơn giản đến phức tạp
Hình 1.3 STM32F103C8T6 BluePill [5]
Trang 2019
1.5.4 Màn hình hiển thị LCD[6][9]
Màn hình hiển thị LCD (Liquid Crystal Display) là một loại màn hình sử dụng tinh thể lỏng để hiển thị hình ảnh và thông tin Màn hình LCD được ứng dụng rộng rãi trong nhiều thiết bị điện tử như điện thoại, máy tính, tivi, máy tính bảng, đồng hồ, và nhiều thiết bị khác
Cấu tạo và nguyên lý hoạt động:
− LCD sử dụng các phân tử tinh thể lỏng có khả năng thay đổi hướng khi có điện áp tác động vào, từ đó điều khiển ánh sáng đi qua Tinh thể lỏng không
tự phát ra ánh sáng mà cần có nguồn sáng nền như đèn LED hoặc đèn huỳnh quang
− Do các phân tử tinh thể lỏng không tự phát ra ánh sáng, màn hình LCD cần
có đèn nền (thường là đèn LED) để chiếu sáng các tinh thể lỏng Đèn nền này có thể là đèn LED ở phía sau màn hình hoặc xung quanh các cạnh của màn hình
− Màn hình LCD thường sử dụng ba lớp bộ lọc màu (đỏ, xanh, và xanh lá) để tái tạo màu sắc Các pixel (điểm ảnh) trên màn hình LCD được chia thành
ba phần, mỗi phần thể hiện một màu cơ bản, và khi kết hợp với nhau, chúng tạo ra các màu sắc khác nhau
− Màn hình LCD sử dụng các lớp điện cực và bộ điều khiển điện để thay đổi cấu trúc của các phân tử tinh thể lỏng, từ đó điều chỉnh độ sáng của từng pixel và tạo ra hình ảnh
Hình 1.4 LCD 16x2 [9]
Trang 2120
1.5.5 Module I2C LCD1602 (I2C PCF8574) [9]
Hình 1.5 Sơ đồ kết nối giữa PCF8574 với LCD1602
Từ sơ đồ nguyên lý trên, STM32F103C8T6 làm Master sẽ phát tín hiệu truyền
dữ liệu qua Bus I2C đến IC PCF8574 làm thiết bị Slave, với output của IC PCF8574 ngõ ra 8 bit từ P7 → P0, các ngõ ra này sẽ kết nối với các chân điều khiển trên màn hình LCD như sau (kết nối theo chuẩn 4-bit của LCD1602 hoặc LCD2004):
Trang 2221
1.5.6 Giao tiếp I2C[8]
I2C chỉ sử dụng hai dây để truyền dữ liệu giữa các thiết bị:
− SDA (Serial Data) - đường truyền cho Master và Slave để gửi và nhận dữ liệu
− SCL (Serial Clock) - đường mang tín hiệu xung nhịp
I²C là một giao thức truyền thông nối tiếp, vì vậy dữ liệu được truyền từng bit dọc theo một đường duy nhất (đường SDA)
Giống như SPI, I2C là đồng bộ, do đó đầu ra của các bit được đồng bộ hóa với việc lấy mẫu các bit bởi một tín hiệu xung nhịp được chia sẻ giữa master và Slave Tín hiệu xung nhịp luôn được điều khiển bởi Master
Cách hoạt động của I2C
Với I2C, dữ liệu được truyền trong các tin nhắn Tin nhắn được chia thành các khung dữ liệu
Mỗi tin nhắn có một khung địa chỉ chứa địa chỉ nhị phân của địa chỉ Slave và một hoặc nhiều khung dữ liệu chứa dữ liệu đang được truyền
Thông điệp cũng bao gồm điều kiện khởi động và điều kiện dừng, các bit đọc / ghi và các bit ACK / NACK giữa mỗi khung dữ liệu:
Hình 1.6 Khung truyền I2C [8]
Các bước truyền dữ liệu I2C
Master gửi điều kiện khởi động đến mọi Slave được kết nối
Master gửi cho mỗi Slave địa chỉ 7 bit hoặc 10 bit của Slave mà nó muốn giao tiếp, cùng với bit đọc / ghi
Mỗi Slave sẽ so sánh địa chỉ được gửi từ master với địa chỉ của chính nó Nếu địa chỉ trùng khớp, Slave sẽ trả về một bit ACK bằng cách kéo dòng SDA xuống thấp cho một bit
Trang 2322
Nếu địa chỉ từ master không khớp với địa chỉ của Slave, Slave rời khỏi đường SDA cao
Master gửi hoặc nhận khung dữ liệu
Sau khi mỗi khung dữ liệu được chuyển, thiết bị nhận trả về một bit ACK khác cho thiết bị gửi để xác nhận đã nhận thành công khung
Để dừng truyền dữ liệu, master gửi điều kiện dừng đến Slave bằng cách chuyển đổi mức cao SCL trước khi chuyển mức cao SDA
− Điều khiện bắt đầu (Start condition)
Bất cứ khi Master muốn truyền dữ liệu, nó sẽ chuyển mạch SDA từ mức điện
áp cao xuống mức điện áp thấp sau đó đường SCL chuyển từ cao xuống thấp Khi điều kiện bắt đầu được gửi bởi thiết bị Master, tất cả các thiết bị Slave đều hoạt động ngay cả khi chúng ở chế độ ngủ (sleep mode) và đợi bit địa chỉ
Hình 1.7 Xung của SDA và SCL khi bắt đầu giao tiếp [8]
− Khung địa chỉ:
Về lý thuyết lẫn thực tế I²C sử dụng 7 bit để định địa chỉ, do đó trên một bus
có thể có tới 2^7 địa chỉ tương ứng với 128 thiết bị có thể kết nối, nhưng chỉ có
112 thiết bị có thể kết nối , 16 địa chỉ còn lại được sử dụng vào mục đích riêng Ngoài ra I²C còn có chế độ 10 bit địa chỉ tương đương với 1024 địa chỉ, tương
tự như 7 bit, chỉ có 1008 thiết bị có thể kết nối, còn lại 16 địa chỉ sẽ dùng để sử dụng mục đích riêng
Một chuỗi 7 (hoặc 10 bit) duy nhất cho mỗi Slave để xác định Slave khi Master muốn giao tiếp với nó
Tất cả các thiết bị Slave trên bus I²C so sánh các bit địa chỉ này với địa chỉ của chúng
Trang 2423
− Bit Read/Write
Bit này xác định hướng truyền dữ liệu
Nếu Master cần gửi dữ liệu đến Slave, bit này được thiết lập là ‘0’
Nếu Master cần nhận dữ liệu từ Slave, bit này được thiết lập là ‘1’
− Bit ACK / NACK
ACK / NACK là viết tắt của Acknowledged/Not-Acknowledged
Giá trị của bit này được set bởi Slave
Nếu địa chỉ vật lý của bất kỳ Slave nào trùng với địa chỉ được Master phát, giá trị của bit này được set là ‘0’ bởi thiết bị Slave
Ngược lại, nó vẫn ở mức logic ‘1’ (mặc định)
− Điều kiện kết thúc (Stop condition)
Sau khi các khung dữ liệu cần thiết được truyền qua đường SDA, Master sẽ buông tín hiệu đường SCL về điện áp cao, tiếp sau đó là giải phóng đường SDA
về điện áp cao (2 đường này lên được điện áp cao là nhờ điện trở kéo lên của 2 đường Bus)
Hình 1.8 Điều kiện kết thúc của giao tiếp I2C [8]
Trang 252.1.2 Các bước thực hiện và phương pháp tiếp cận
Bước 1: Tìm hiểu lý thuyết về đồng hồ thời gian thực và cảm biến
Ý tưởng:
− Nghiên cứu nguyên lý hoạt động của các loại đồng hồ thời gian thực (RTC)
− Tìm hiểu về các loại cảm biến nhiệt độ và độ ẩm, cách thức đo và đặc tính của chúng
Cách tiếp cận:
− Nghiên cứu các loại đồng hồ thời gian thực như DS3231, DS1307 để chọn loại phù hợp, có độ chính xác và khả năng hoạt động ổn định
− Nghiên cứu các cảm biến đo nhiệt độ và độ ẩm như DHT11, DHT22, SHT30
để hiểu về các tính năng, đặc tính và cách thức giao tiếp với vi xử lý
− Tìm hiểu về cách thức truyền tải và xử lý dữ liệu từ các cảm biến (I2C, GPIO, SPI) và các yêu cầu giao tiếp giữa cảm biến và vi xử lý
Bước 2: Lựa chọn linh kiện phần cứng
Ý tưởng:
− Chọn loại đồng hồ thời gian thực
− Lựa chọn cảm biến nhiệt độ và độ ẩm
− Chọn vi xử lý và màn hình
Cách tiếp cận:
Trang 2625
− Chọn vi xử lý: Sử dụng Arduino (Arduino Uno hoặc Nano), ESP32 hoặc STM32 Các vi xử lý này đều có khả năng giao tiếp với các cảm biến qua các giao thức I2C hoặc GPIO
− Chọn màn hình hiển thị: Sử dụng màn hình LCD 16x2 hoặc màn hình OLED 128x64 để hiển thị thông tin về thời gian và các thông số môi trường
− Kết nối và mạch điện: Lựa chọn các thành phần linh kiện cơ bản, bao gồm các cảm biến, mạch kết nối, điện trở, và màn hình hiển thị
Bước 3: Thiết kế và lập trình phần mềm
Ý tưởng:
− Lập trình vi xử lý để giao tiếp với cảm biến và RTC
− Cài đặt các hàm để đọc dữ liệu từ cảm biến và RTC
− Viết mã để hiển thị kết quả lên màn hình LCD hoặc OLED
Cách tiếp cận:
− Đọc dữ liệu từ cảm biến: Lập trình vi xử lý để đọc dữ liệu nhiệt độ và độ ẩm
từ cảm biến DHT11/DHT22/SHT30 thông qua giao thức phù hợp (I2C hoặc GPIO)
− Đọc thời gian từ RTC: Sử dụng thư viện phù hợp để giao tiếp với đồng hồ thời gian thực (ví dụ: RTClib cho Arduino) để nhận thời gian chính xác
− Hiển thị thông tin: Hiển thị thời gian (giờ, phút, giây) cùng với nhiệt độ và
độ ẩm môi trường lên màn hình LCD hoặc OLED Cập nhật liên tục để đảm bảo thông tin là mới nhất
− Quản lý thời gian: Cài đặt thuật toán để đảm bảo việc cập nhật thời gian và
dữ liệu cảm biến diễn ra mượt mà và đồng bộ
Bước 4: Kiểm tra và tối ưu hóa hệ thống
Ý tưởng:
− Kiểm tra độ chính xác của đồng hồ và cảm biến
− Tối ưu hóa phần mềm và phần cứng để đảm bảo hệ thống hoạt động ổn định
Cách tiếp cận:
− Kiểm tra độ chính xác: So sánh kết quả đo từ cảm biến với các thiết bị đo chuẩn để đánh giá độ chính xác của nhiệt độ và độ ẩm
Trang 27Việc thiết kế đồng hồ thời gian thực tích hợp đo nhiệt độ và độ ẩm môi trường
có thể sử dụng một trong hai phương pháp chính: sử dụng IC số (Digital ICs) hoặc sử dụng vi điều khiển (Microcontroller) Mỗi phương pháp sẽ có các ưu điểm và nhược điểm riêng, tuỳ thuộc vào yêu cầu cụ thể của hệ thống và tính linh hoạt trong việc mở rộng hoặc thay đổi các tính năng của dự án
2.2.1 Sử dụng PIC 18F4520
Ý tưởng thiết kế:
-Phần cứng:
+ Vi điều khiển: PIC 18F4520
+ Cảm biến nhiệt độ và độ ẩm: Sử dụng DHT11 hoặc DHT22 Cảm biến này cung cấp cả dữ liệu nhiệt độ và độ ẩm thông qua giao tiếp đơn + Module đồng hồ thời gian thực (RTC): Sử
dụng DS3231 hoặc DS1307 để giữ thời gian chính xác
+ Màn hình hiển thị: Sử dụng LCD 16x2 hoặc OLED để hiển thị thời gian
và thông tin nhiệt độ, độ ẩm
+ Nguồn cung cấp: Pin 5V hoặc nguồn từ USB
-Phần mềm:
+ Viết chương trình trong MPLAB với trình biên dịch MCC18
+ Sử dụng thư viện cho cảm biến DHT và RTC
+ Lập trình để đọc dữ liệu từ cảm biến nhiệt độ, độ ẩm, và RTC, rồi hiển thị lên màn hình
Trang 28− Khó mở rộng: Nếu muốn thêm nhiều cảm biến hoặc chức năng phức tạp,
sẽ gặp hạn chế về số lượng chân I/O
− Thời gian thực: Có thể gặp vấn đề về độ ổn định của thời gian thực nếu không lập trình chính xác, đặc biệt khi có nhiều tác vụ trong chương trình
− Thiếu các tính năng hiện đại: không hỗ trợ Wi-Fi/Bluetooth tích hợp như các vi điều khiển mới hơn
− Chưa có tính năng bảo vệ: Cần phải thiết kế thêm để bảo vệ trước điện
áp hoặc dòng điện đột biến
Trang 29Vi điều khiển sẽ xử lý tất cả các tín hiệu này và hiển thị thông tin lên màn hình LCD hoặc OLED
Ưu điểm:
− Linh hoạt và dễ mở rộng: Vi điều khiển cho phép dễ dàng thay đổi hoặc bổ sung các tính năng, ví dụ như việc điều khiển từ xa, giao tiếp không dây (Wi-Fi, Bluetooth), hoặc thêm các tính năng khác như báo động khi nhiệt độ/độ ẩm vượt quá mức cho phép
− Tiết kiệm không gian và chi phí linh kiện: Một vi điều khiển có thể thay thế nhiều IC rời rạc trong hệ thống, giúp tiết kiệm không gian và chi phí
− Dễ dàng lập trình và điều chỉnh: Việc lập trình vi điều khiển cho phép người dùng dễ dàng điều chỉnh, tối ưu hệ thống mà không phải thay đổi phần cứng
Nhược điểm:
− Yêu cầu lập trình: Cần có kiến thức lập trình để điều khiển vi điều khiển Việc lập trình có thể là một yếu tố gây khó khăn nếu không quen với lập trình vi điều khiển
− Đôi khi phức tạp hơn: Việc sử dụng vi điều khiển có thể đòi hỏi nhiều bước trong thiết kế, từ phần mềm, lập trình, đến việc xác định và kết nối các cảm biến đúng cách
Trang 30kiện Cao vì chi phí đắt đỏ
Cao hơn một chút, vì cần vi điều khiển và linh kiện hỗ trợ
Linh hoạt Ít linh hoạt, nếu thay
phần mềm
Khả năng xử
lý phức tạp
Thích hợp cho các ứng dụng IOT đơn giản
Có thể xử lý các tính năng phức tạp hơn (giao tiếp, điều khiển từ
xa, v.v.)
2.2.4 Lựa chọn phương pháp thiết kế tối ưu
Với tính linh hoạt, khả năng mở rộng và khả năng điều chỉnh tính năng qua phần mềm, việc sử dụng vi điều khiển STM32F103C8T6 không chỉ giúp giảm thiểu số lượng linh kiện cần thiết mà còn dễ dàng tối ưu hệ thống khi có yêu cầu thay đổi hoặc mở rộng tính năng trong tương lai Chính vì vậy, nhóm quyết định sử dụng vi điều khiển STM32F103C8T6
Trang 313.1.3 Thiết kế sơ đồ nguyên lý
Sơ đồ nguyên lý của mạch đồng hồ tích hợp đo nhiệt độ độ ẩm hiển thị LCD bao gồm năm khối chính: khối nguồn, khối cảm biến, khối hiển thị, khối vào ra
và khối điều khiển Các khối này hoạt động cùng nhau để thực hiện chức năng hiển thị thời gian thực cùng với nhiệt độ và độ ẩm và được thể hiện trong sơ đồ như hình 3.2
Khối đầu ra Khối nguồn
Khối điều khiển (MCU) Khối cảm biến
Khối hiển thị
Trang 3231
Hình 3.2 Sơ đồ nguyên lý tổng quát của hệ thống
Trong thiết kế hệ thống điện tử, việc xây dựng sơ đồ nguyên lý của từng khối
là một bước quan trọng để hiểu rõ cách thức hoạt động và sự liên kết giữa các thành phần trong hệ thống Mỗi khối trong một mạch điện tử có nhiệm vụ và chức năng riêng, giúp hệ thống hoạt động một cách hiệu quả
Khi thực hiện dự án như thiết kế đồng hồ thời gian thực tích hợp đo nhiệt độ và
độ ẩm môi trường, việc thiết kế sơ đồ nguyên lý cho từng khối không chỉ giúp tối ưu hóa mạch mà còn giúp xác định rõ ràng các kết nối và yêu cầu cho từng phần của hệ thống
Khối nguồn
Khối nguồn sẽ chịu trách nhiệm cấp điện cho các thành phần chính như vi điều khiển, cảm biến nhiệt độ và độ ẩm, cũng như các thiết bị ngoại vi khác Sơ đồ nguồn sẽ bao gồm các thành phần như pin hoặc bộ cấp nguồn, bộ điều chỉnh điện áp (nếu cần thiết) để đảm bảo mức điện áp phù hợp cho vi điều khiển và các thiết bị khác Các điện áp cần thiết sẽ được phân phối tới các thành phần qua các đường cấp nguồn thể hiện bằng hình 3.3
Trang 3332
Hình 3.3 Sơ đồ nguyên lý khối nguồn
Nguồn pin được sử dụng trong mạch là pin có mức điện áp 5V
− Kết nối pin vào mạch
Chân Vdd và Vss: Khi pin được kết nối vào mạch, cực dương của pin (thường là đầu nối "+" trên pin) sẽ được kết nối vào chân Vdd của mạch thiết kế (hoặc các thiết bị khác trong mạch), trong khi cực âm của pin (đầu nối "-") sẽ được kết nối với chân Vss (chân đất) của mạch
Nếu điện áp của pin không đủ hoặc không ổn định, có thể sử dụng bộ điều chỉnh nguồn (regulator) để đảm bảo rằng vi điều khiển và các thành phần khác trong mạch nhận được nguồn điện ổn định Các bộ điều chỉnh này có thể là:
+ Linear Regulator (Ví dụ: LM7805) – Điều chỉnh nguồn đầu vào thành 5V + Buck Converter (giảm điện áp) hoặc Boost Converter (tăng điện áp) điều chỉnh điện áp của pin nếu cần
Trang 3433
Khối cảm biến
Khối này có chức năng đo nhiệt độ và độ ẩm của môi trường và truyền tín hiệu này đến vi điều khiển để xử lý và hiển thị
Trong sơ đồ nguyên lý của khối cảm biến, tín hiệu đầu ra từ cảm biến DHT11
và DS3231 sẽ được kết nối với vi điều khiển qua các chân GPIO, cho phép vi điều khiển đọc và xử lý dữ liệu Cảm biến này thường giao tiếp qua giao thức đơn giản như 1-wire hoặc I2C, tùy thuộc vào loại cảm biến sử dụng được trình bày qua hình 3.4
Hình 3.4 Sơ đồ nguyên lý khối cảm biến
− Nguyên lý hoạt động cảm biến DHT11:
Cảm biến DHT11 hoạt động dựa trên nguyên lý của các cảm biến nhiệt độ và
độ ẩm bên trong nó, chuyển đổi các thay đổi vật lý (nhiệt độ và độ ẩm) thành tín hiệu điện số Cụ thể, nguyên lý hoạt động của DHT11 có thể được mô tả như sau:
Cảm biến nhiệt độ trong DHT11 sử dụng một thermistor, là một loại điện trở thay đổi giá trị theo nhiệt độ Khi nhiệt độ thay đổi, điện trở của thermistor thay đổi và được cảm biến chuyển thành tín hiệu điện tử
Cảm biến độ ẩm trong DHT11 là một cảm biến điện dung, trong đó độ ẩm ảnh hưởng đến điện dung của một tấm cảm biến Khi độ ẩm trong không khí thay đổi, điện dung của cảm biến thay đổi, từ đó tạo ra tín hiệu điện
Cảm biến DHT11 có một bộ chuyển đổi tín hiệu tích hợp (ADC) bên trong, giúp chuyển đổi tín hiệu analog từ cảm biến nhiệt độ và độ ẩm thành tín hiệu
Trang 35+ Khởi động: Vi điều khiển sẽ gửi tín hiệu yêu cầu từ chân dữ liệu (data) của cảm biến để bắt đầu quá trình đo
+ Tín hiệu phản hồi từ cảm biến: Cảm biến DHT11 sẽ gửi một tín hiệu phản hồi và truyền tải dữ liệu về nhiệt độ và độ ẩm qua tín hiệu số
+ Nhận dữ liệu: Dữ liệu nhận được từ cảm biến sẽ được vi điều khiển xử lý, phân tích và sử dụng để thực hiện các hành động như hiển thị trên màn hình, điều khiển thiết bị
Dữ liệu trả về từ DHT11 thường bao gồm:
Độ ẩm: 8 bit dữ liệu cho phần nguyên và 8 bit cho phần thập phân
Nhiệt độ: 8 bit dữ liệu cho phần nguyên và 8 bit cho phần thập phân
Khối điều khiển (MCU)
Chức năng: quản lý và điều phối các tín hiệu trong hệ thống
Trong sơ đồ nguyên lý của khối MCU, khối điều khiển được kết nối với các chân ngoại vi và các chân nhận dữ liệu, từ đó tiếp nhận và xử lý thông tin từ các cảm biến Mối quan hệ này được minh họa rõ ràng trong hình ảnh 3.5
− Bắt đầu chương trình (Reset)
Hình 3.5 Sơ đồ nguyên lý khối điều khiển
Trang 3635
Khi STM32F103C8T6 được cấp nguồn hoặc sau khi thực hiện một thao tác reset, vi điều khiển sẽ khởi động từ một địa chỉ cụ thể trong bộ nhớ flash (thường là địa chỉ 0x08000000) Trong giai đoạn này, vi điều khiển sẽ thực hiện các thao tác khởi tạo cơ bản như thiết lập cấu hình hệ thống đồng hồ (Clock System), các chân I/O, và các ngoại vi
Khối đầu ra
Chức năng: Quản lý các thiết bị vào ra được kết nối với hệ thống: còi, các nút nhấn điều chỉnh
Trong sơ đồ nguyên lý của khối ngoại vi, các kết nối với nút nhấn và còi được
sử dụng để thực hiện các chức năng điều chỉnh và cảnh báo một cách trực quan Tùy thuộc vào cách thức cảnh báo, các tín hiệu sẽ được kích hoạt và thể hiện qua các thiết bị đầu ra tương ứng Cách thức cảnh báo này được mô tả chi tiết trong hình 3.6
Hình 3.6 Sơ đồ nguyên lý khối đầu ra
Nguyên lý hoạt động:
− Nút nhấn (Push Button)
Khi nút nhấn được nhấn xuống, nó sẽ gửi một tín hiệu số (0 hoặc 1) vào vi điều khiển qua các chân GPIO (General Purpose Input/Output) Vi điều khiển nhận