THIẾT KẾ VÀ THI CÔNG MẠCH HIỂN THỊ LED MA TRẬN ĐIỀU KHIỂN BẰNG REMOTE HỒNG NGOẠI Nghiên cứu cơ sở lý thuyết về vi điều khiển hiển thị led ma trận, module thời gian thực, cảm biến nhiệt độ và arduino nano. Nghiên cứu, thực hành các thao tác kĩ thuật điện tử cơ bản (lắp ráp, test mạch, mô phỏng, thiết kế...). Ngoài ra khi nghiên cứu đề tài em muốn tạo ra sản phẩm có ích trong một số lĩnh vực trong đời sống. Có thể đạt được độ chính xác cao trên 60%.
TỔNG QUAN
GIỚI THIỆU
Hiện nay, xu hướng hiện đại hoá hệ thống công nghiệp và thiết bị đời sống đang ngày càng gia tăng, với sự chuyển đổi sang số hoá để nâng cao chất lượng và dễ dàng điều khiển Trong bối cảnh cuộc cách mạng công nghiệp lần thứ 4, sự phát triển mạnh mẽ của các thiết bị điện tử thông minh đang mang lại hiệu quả cao cho hầu hết các lĩnh vực.
Chúng ta đều quan tâm đến thời tiết và nhiệt độ hàng ngày Xuất phát từ thực tiễn này, tôi đã chọn thực hiện đề tài: “THIẾT KẾ”.
MỤC TIÊU NGHIÊN CỨU
Nghiên cứu cơ sở lý thuyết về vi điều khiển hiển thị led ma trận, module thời gian thực, cảm biến nhiệt độ và arduino nano
Nghiên cứu, thực hành các thao tác kĩ thuật điện tử cơ bản (lắp ráp, test mạch, mô phỏng, thiết kế ).
Ngoài ra khi nghiên cứu đề tài em muốn tạo ra sản phẩm có ích trong một số lĩnh vực trong đời sống Có thể đạt được độ chính xác cao trên 60%.
ĐỐI TƯỢNG NGHIÊN CỨU
- Cảm biến nhiệt độ, độ ẩm DHT11
- Module thời gian thực DS1307
Kết nối các module và cảm biến với board Arduino để hiển thị các giá trị cần thiết lên led ma trận.
PHẠM VI NGHIÊN CỨU
Nghiên cứu cơ sở lý thuyết về mạch hiển thị tên, ngày giờ, nhiệt độ…trên led ma trận điều khiển bằng remote hồng ngoại Mục đích của đề tài là lựa chọn thuật toán, phương pháp có độ chính xác tương đối để nhận diện remote và tăng độ chính xác cho sản phẩm.
Tìm hiểu các lý thuyết có liên quan như ngôn ngữ Arduino.
BỐ CỤC ĐỒ ÁN
Chương 1: Tổng quan: Nêu tính cấp thiết của đề tài, xu hướng và tình hình khoa học và công nghệ hiện nay Sự phát triển công nghiệp và đời sống hằng ngày và từ đó đưa ra lý do chọn đề tài và xác định mục tiêu cho đề tài.
Chương 2: Cở sở lý thuyết: Trình bày tổng quan về các thành phần và chức năng của từng loại phần cứng có trong hệ thống, dẫn dắt chi tiết cụ thể để xây dựng hoàn chỉnh về mô hình.
Chương 3: Thiết kế và xây dựng hệ thống: Từ yêu cầu đề tài, trình bày về sơ đồ hệ thống Nêu ra các phương pháp xử lý dữ liệu rồi từ đó thiết kế mô hình
Chương 4: Kết quả thực hiện: Trình bày về kết quả của từng khối nhỏ và kết quả điều khiển hiển thị led bằng remote thông qua hình ảnh, video Đưa ra các hiển thị như mong muốn đã lập trình.
Chương 5: Kết luận và hướng phát triển: Dựa vào kết quả có được từ chương 4, đưa ra kết luận tổng quan về những gì đạt được và chưa đạt được của đề tài Từ đó đưa ra hướng phát triển để cải thiện hệ thống.
CƠ SỞ LÝ THUYẾT
KHỐI THỜI GIAN THỰC
Mạch thời gian thực RTC DS1307 cung cấp thông tin về ngày, tháng, năm, giờ, phút và giây cho vi điều khiển qua giao tiếp I2C Mạch tích hợp pin backup để duy trì thời gian khi không có nguồn điện và được trang bị IC EEPROM AT24C32 để lưu trữ thông tin, phù hợp cho các ứng dụng điều khiển hoặc đồng bộ dữ liệu thời gian thực.
Hình 2 1: Mạch thời gian thực RTC DS1307
Bảng 2.1: Thông số kỹ thuật cho DS1307
Max (tối đa) Đơn vị
1 Vcc Điện áp cung cấp 4.5 5 5.5 V
2 VIH Điện áp vào mức cao
3 VIL Điện áp vào mức thấp -0.3 +0.8 V
5 ILI Dòng rò SCL -1 1 μAA
6 ILO Dòng rò SDA -1 1 μAA
7 ICCA Dòng tiêu thụ 1.5 mA
Bảng 2.2: Bảng thông số các chân DS1307
1 X1 Kết nối với thạch anh 32.768KHz tiêu chuẩn Mạch dao động bên trong thiết kế để hoạt động với tinh thể có điện dung tải xác định 12,5pF
Nguồn cung cấp đầu vào 3V dự phòng cho mạch Pin phải được giữ ổn định để hoạt động thích hợp nếu nguồn cung cấp dự phòng là không cần thiết thì VBAT được nối đất.
Chân SDA trong giao tiếp I2C là đầu vào/ra dữ liệu nối tiếp, có chức năng truyền tải thông tin Để hoạt động hiệu quả, chân SDA cần được kết nối với một điện trở kéo lên bên ngoài, với điện áp kéo lên tối đa có thể đạt đến 5.5V.
6 SCL Đầu vào nối tiếp SCL truyền xung Clock đầu vào sử dụng để đồng bộ hóa dữ liệu.
Nguồn sơ cấp Khi điện áp được đặt trong giới hạn bình thường có thể đọc và ghi dữ liệu Khi kết nối nguồn cung cấp dự phòng VBAT thì việc đọc và ghi bị hạn chế
(https://datasheets.maximintegrated.com/en/ds/DS1307.pdf)
2.2 CẢM BIẾN NHIỆT ĐỘ DHT11 [11]
Cảm biến DHT11 là một trong những cảm biến độ ẩm và nhiệt độ phổ biến nhất hiện nay nhờ vào chi phí thấp và khả năng dễ dàng thu thập 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 So với cảm biến đời mới hơn là DHT22 thì DHT11 cho khoảng đo và độ chính xác kém hơn.
Hình 2 2: Cảm biến nhiệt độ DHT11
Bảng 2.3:Thông số kỹ thuật cho DHT11
T Ký hiệu Thông số Min
Max (tối đa) Đơn vị
1 Vcc Điện áp cung cấp 3 5 5.5 V
2 Itb Dòng điện trung bình 0.2 1 mA
4 fs Tần số lấy mẫu 1 s
Bảng 2.4: Bảng các thông số chân cảm biến DHT11
2 Data Dữ liệu ngõ ra được lấy mẫu 1lan/1s
(https://datasheetspdf.com/pdf-file/785590/D-Robotics/DHT11/1
Bảng LED ma trận 8x8, với 64 đèn LED, không thể điều khiển trực tiếp bằng Arduino Để giải quyết vấn đề này, IC MAX7219 được phát triển, cho phép điều khiển nhiều LED chỉ với 5 chân kết nối: Vcc, Gnd, Din, Cs và Clk IC MAX7219, do MAXIM thiết kế, cung cấp khả năng điều khiển LED ma trận và LED 7 thanh một cách tiện lợi, chỉ cần một điện trở đầu vào để hạn dòng cho tất cả đèn LED, khác với các IC khác yêu cầu một điện trở cho mỗi LED Chip này tích hợp bộ giải mã BCD và thanh ghi dịch, hoạt động tương tự như 74HC595, và chỉ cần 3 chân từ Arduino để kết nối với chân DIN, CS (load) và CLK của IC.
Hình 2 3: Module led ma trận MAX7219 Bảng 2.5: Thông số kỹ thuật cho led ma trận MAX7219
Ký hiệu Thông số Min
Max (tối đa) Đơn vị
1 Vcc Điện áp cung cấp 4 5 5.5 V
Bảng 2.6: Bảng thông số các chân led ma trận MAX7219
1 Din Đầu vào dữ liệu nối tiếp Thanh ghi dịch 16bit
10, 11 DIG 0- DIG7 8 led kết nối từ cathode chung
Dữ liệu tải ngõ vào.16bit cuối dữ liệu nối tiếp được chốt cạnh lên của tải
13 CLK Xung Clock Tốc độ tối đa 10MHz
18 ISET Nối với VDD thông qua 1 điện trở (RSET) để đặt dòng phân đoạn đỉnh
24 Dout Dữ liệu đầu ra nối tiếp
(https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf)
Remote hồng ngoại HX1838 là bộ điều khiển từ xa không dây hoạt động ở tần số 38KHz, bao gồm remote và module thu hồng ngoại Với 17 phím chức năng, remote có khả năng phát tín hiệu IR xa đến 8 mét, trở thành thiết bị điều khiển lý tưởng cho nhiều thiết bị trong phòng.
Mạch thu tín hiệu IR có thể nhận tín hiệu điều khiển từ remote 38 KHz, thông qua lập trình, bạn có thể giải mã tín hiệu điều khiển từ xa, có thể điểu khiển robot từ xa và nhiều ứng dụng khác…
+ Khoảng cách truyền: 8m (phụ thuộc vào môi trường xung quanh, độ nhạy của máy thu và các yếu tố khác)
Bảng 2.7: Thông số kỹ thuật cho Remote HX1838
Ký hiệu Thông số Min
Max (tối đa) Đơn vị
1 Vcc Điện áp cung cấp 2.1 5.5 V
2 VH Điện áp ra mức cao 4.5 V
3 VL Điện áp ra mức thấp 0.5 V
5 Id Dòng điện động 3 5 mA
(https://datasheetspdf.com/pdf-file/713831/ETC/HX1838/1)
Mắt thu hồng ngoại (giải mã)
2.6 KHỐI XỬ LÝ TRUNG TÂM [9]
Mạch arduino Nano CH340: Arduino Nano USB Mini là board mạch sử dụng vi điều khiển ATmega328P tích hợp các chân I/O đơn giản nhỏ gọn dựa trên mã nguồn mở được phát triển bởi Arduino, có lợi thế lớn về kích thước so với phiên bản Arduino Uno và Arduino Mega Arduino Nano có thể hoạt động độc lập và tương tác hiệu quả với các thiết bị điện tử, cũng có thể giúp những người mới tìm hiểu về Arduino có thể kết nối với PC, phối hợp với Flash, Xử lý, Max / Msp,
Arduino Nano là lựa chọn lý tưởng cho các dự án yêu cầu kết nối với thiết bị ngoại vi đơn giản, nhờ vào khả năng tương thích dễ dàng với PD và các phần mềm khác Mặc dù có kích thước nhỏ gọn hơn, nhưng các chức năng của nó tương tự như phiên bản Arduino Uno.
Bảng 2.8: Thông số kỹ thuật cho Arduino Nano
STT Thông số Chuẩn Đơn vị
1 Điện áp hoạt động (mức logic) 5 V
5 Chân đầu vào tương tự 8 chân
6 Dòng DC trên mỗi chân I/O 40 mA
10 Tốc độ xung clock 16 MHz
Bảng 2.9: Bảng thông số các chân Arduino Nano
Pin No Name Type Description
1-2, 5-16 D0 – D13 I/O Ngõ vào/ra số từ port 0-13
19-26 A7-A0 Input Ngõ vào Analog kênh 0-7
27 +5V Output/Input ngõ ra +5V từ điều chỉnh trên board
+ 5V từ nguồn cung cấp bên ngoài
30 VIN PWR Cung cấp điện thế (Supply voltage)
(https://www.es.co.th/Schemetic/PDF/ARMB-0022.PDF)
LED MA TRẬN MAX7219
Led Matrix 8x8 là một bảng led gồm 8 hàng và 8 cột (tổng số led là 64).Nếu điều khiển trực tiếp với Arduino thì điều đó không khả thi Thế nên, ICMAX7219 được sinh ra để có thể điều khiển nhiều led chỉ với 5 chân duy nhất làVcc, Gnd, Din, Cs, Clk IC MAX7219 do MAXIM thiết kế và sản xuất có chức năng điều khiển LED ma trận và LED 7 thanh rất tiện và chỉ cần 1 điện trở đầu vào để hạn dòng cho tất cả các đèn LED (so với các IC khác cũng phải có 1 điện trở trên mỗi đèn LED) Trên mỗi chip được tích hợp bộ giải mã BCD, thanh ghi dịch, giống như với 74HC595, để điều khiển led ma trận sử dụng MAX7219 hoạt động như thanh ghi dịch MAX7219 chỉ cần 3 chân từ Arduino để kết nối với các chân DIN, CS (load) và CLK của IC.
Hình 2 3: Module led ma trận MAX7219 Bảng 2.5: Thông số kỹ thuật cho led ma trận MAX7219
Ký hiệu Thông số Min
Max (tối đa) Đơn vị
1 Vcc Điện áp cung cấp 4 5 5.5 V
Bảng 2.6: Bảng thông số các chân led ma trận MAX7219
1 Din Đầu vào dữ liệu nối tiếp Thanh ghi dịch 16bit
10, 11 DIG 0- DIG7 8 led kết nối từ cathode chung
Dữ liệu tải ngõ vào.16bit cuối dữ liệu nối tiếp được chốt cạnh lên của tải
13 CLK Xung Clock Tốc độ tối đa 10MHz
18 ISET Nối với VDD thông qua 1 điện trở (RSET) để đặt dòng phân đoạn đỉnh
24 Dout Dữ liệu đầu ra nối tiếp
(https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf)
REMOTE HỒNG NGOẠI HX1838
Remote hồng ngoại HX1838 là một bộ điều khiển từ xa hồng ngoại không dây bao gồm remote hoạt động với tần số 38KHz IR và module thu hồng ngoại. Remote có 17 phím chức năng, phát IR xa đến 8 m, là thiết bị điều khiển lý tưởng cho nhiều thiết bị trong phòng.
Mạch thu tín hiệu IR có khả năng nhận tín hiệu điều khiển từ remote với tần số 38 KHz Thông qua lập trình, người dùng có thể giải mã tín hiệu điều khiển từ xa, từ đó điều khiển robot và áp dụng cho nhiều ứng dụng khác nhau.
+ Khoảng cách truyền: 8m (phụ thuộc vào môi trường xung quanh, độ nhạy của máy thu và các yếu tố khác)
Bảng 2.7: Thông số kỹ thuật cho Remote HX1838
Ký hiệu Thông số Min
Max (tối đa) Đơn vị
1 Vcc Điện áp cung cấp 2.1 5.5 V
2 VH Điện áp ra mức cao 4.5 V
3 VL Điện áp ra mức thấp 0.5 V
5 Id Dòng điện động 3 5 mA
(https://datasheetspdf.com/pdf-file/713831/ETC/HX1838/1)
Mắt thu hồng ngoại (giải mã)
KHỐI XỬ LÝ TRUNG TÂM
Mạch Arduino Nano CH340 là một board mạch nhỏ gọn sử dụng vi điều khiển ATmega328P, tích hợp các chân I/O đơn giản và dựa trên mã nguồn mở do Arduino phát triển Với kích thước nhỏ hơn so với Arduino Uno và Arduino Mega, Arduino Nano có khả năng hoạt động độc lập và tương tác hiệu quả với các thiết bị điện tử Nó cũng là lựa chọn lý tưởng cho những người mới tìm hiểu về Arduino, giúp họ dễ dàng kết nối với PC và phối hợp với các phần mềm như Flash, Xử lý, Max/Msp.
PD, và các phần mềm khác một cách dễ dàng Điều này giúp Arduino Nano là sự lựa chọn ưa thích khi muốn thực hiện một projects mà yếu cầu kết nối với các thiết bị ngoại vi ít và đơn giản Các chức năng rất giống giống với phiên bản Arduino Uno nhưng kích thước nhỏ gọn hơn.
Bảng 2.8: Thông số kỹ thuật cho Arduino Nano
STT Thông số Chuẩn Đơn vị
1 Điện áp hoạt động (mức logic) 5 V
5 Chân đầu vào tương tự 8 chân
6 Dòng DC trên mỗi chân I/O 40 mA
10 Tốc độ xung clock 16 MHz
Bảng 2.9: Bảng thông số các chân Arduino Nano
Pin No Name Type Description
1-2, 5-16 D0 – D13 I/O Ngõ vào/ra số từ port 0-13
19-26 A7-A0 Input Ngõ vào Analog kênh 0-7
27 +5V Output/Input ngõ ra +5V từ điều chỉnh trên board
+ 5V từ nguồn cung cấp bên ngoài
30 VIN PWR Cung cấp điện thế (Supply voltage)
(https://www.es.co.th/Schemetic/PDF/ARMB-0022.PDF)
THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG
YÊU CẦU VÀ SƠ ĐỒ KHỐI HỆ THỐNG
3.1.1 Yêu cầu của hệ thống
Hệ thống có các chức năng sau:
- Hiển thị thời gian: giờ / phút/ giây
- Hiển thị ngày tháng: ngày/ tháng/ năm
- Hiển thị giá trị nhiệt độ
- Cho phép chuyển đổi trạng thái
3.1.2 Sơ đồ khối và chức năng mỗi khối
Hình 3.1: Sơ đồ khối của hệ thống
- Khối thời gian thực: Cập nhật thời gian hiện tại, gửi đến khối xử lí trung tâm để hiển thị.
- Khối đo nhiệt độ: Đọc dữ liệu từ cảm biến đo nhiệt độ gửi về khối xử lý trung tâm để hiển thị.
Khối xử lý trung tâm nhận và xử lý các yêu cầu từ các khối cảm biến, remote và nút nhấn, sau đó truyền tải thông tin đến thiết bị hiển thị trên led ma trận.
- Khối hiển thị: Là nơi thi hành các yêu cầu của người dùng như hiển thị thời gian thực, nhiệt độ.
- Khối điều khiển (remote hồng ngoại): dùng để chuyển đổi các trạng
THIẾT KẾ HỆ THỐNG PHẦN CỨNG
3.1.3 Hoạt động của hệ thống
Khi cấp nguồn các khối cảm biến thời gian thực, cảm biến nhiệt độ sẽ gửi dữ liệu về khối xử lý trung tâm Khối xử lý trung tâm sẽ xử lý tín hiệu và hiển thị ra màn hình led ma trận Người dùng có thể thay đổi trạng thái hoặc cài đặt ngày giờ thông qua remote hồng ngoại.
3.2 THIẾT KẾ HỆ THỐNG PHẦN CỨNG
Ngoài thị trường hiện nay, có rất nhiều loại module về thời gian thực như DS1307, DS1302, DS3231,… chúng khá giống nhau về chức năng và thiết kế.
Với nhiều tính năng phù hợp với thiết kế của mạch, nên em đã chọn module DS1307 để sử dụng.
DS1307 là IC thời gian thực giá tương đối rẻ, chính xác về thời gian, ngày tháng năm với thạch anh tích hợp sẵn IC có đầu vào cho pin riêng, tách biệt khỏi nguồn chính đảm bảo cho việc giữ thời gian chính xác.
- Chân SCL (serial clock input) của module DS1307 nối với chân A5 của
Arduino Nano (N1) Được sử dụng để đồng bộ sự chuyển dữ liệu trên đường dây nối tiếp.
- Chân SDA (serial data input/out) của module DS1307 nối với chân A4 của
Arduino Nano (N1) Là chân vào ra cho 2 đường dây nối tiếp.
Hình 3.2: Kết nối DS1307 với Arduino
3.2.2 Khối cảm biến nhiệt độ
Cảm biến nhiệt độ hiện nay có rất nhiều loại với các thiết kế và độ chính xác tương đối giống nhau như DHT11, AHT10, DHT22,… Ở mạch này em chọn sử dụng cảm biến nhiệt độ DHT11 với giá thành rẻ, độ chính xác cao và sai số thấp
Chân Data của cảm biến nối với chân D6 của Arduino Nano (N1).
Hình 3.3: Kết nối DHT11 với Arduino Nano
Cảm biến nhiệt độ DHT11 lấy dữ liệu thông qua chuẩn giao tiếp 1 dây Bộ tiền xử lý tín hiệu được tích hợp trong cảm biến giúp có thể đọc dữ liệu chính xác mà không phải qua bất kỳ tính toán nào DHT11 giao tiếp với arduino theo 2 bước:
- Gửi tín hiệu muốn đo (nhiệt độ) tới DHT11, sau đó DHT11 xác nhận lại.
- Khi đã giao tiếp được với DHT11, cảm biến sẽ chuyển tín hiệu tương tự thành tín hiệu số gửi đến bộ xử lý trung tâm và trả kết quả nhiệt độ Trong đó DHT11 trả về nhiệt độ và độ ẩm dưới dạng 5 byte:
- Byte 1: giá trị phần nguyên của độ ẩm
- Byte 2: giá trị phần thập phân độ ẩm
- Byte 3: giá trị phần nguyên của nhiệt độ
- Byte 4: giá trị phần thập phân nhiệt độ
- Byte 5: kiểm tra Byte 5 = 8 bit (byte1 + byte2 + byte3 + byte4) thì giá trị nhiệt độ và độ ẩm chính xác.
3.2.3 Khối hiển thị Để hiện thị thông tin từ khối trung tâm sau khi xử lí, chúng ta có nhiều cách như: led 7 đoạn, màn hình LCD, led ma trận,…Các thông số hiển thị là thời gian thực và nhiệt độ nên để sinh động, hiển thị rõ và nhìn giống lịch vạn niên nên em đã chọn led ma trận 8x8 để hiển thị Ở mạch này em sử dụng hai module led ma trận 8x8 loại Max7219.
- Các chân Din, Cs, Clk của 2 module kết nối lần lượt vớivới các chân từD12 đến D7 của Arduino Nano (N1).
64 đèn LED được điều khiển bởi 16 chân đầu ra của IC Số lượng tối đa của đèn LED sáng lên cùng một lúc là tám Các đèn LED được sắp xếp thành 8 ×
MAX7219 kích hoạt từng cột trong thời gian ngắn và điều khiển các hàng đồng thời Bằng cách chuyển đổi nhanh chóng giữa các cột và hàng, nó tạo ra ấn tượng về ánh sáng liên tục cho mắt người.
Hình 3.4: Hình ảnh module led ma trận Max7219
Cảm biến hồng ngoại để điều khiển thiết bị hoặc điều chỉnh trạng thái của mạch ngoài thị trường có rất nhiều loại và đa dạng Tuy nhiên để phù hợp với kích thước cũng như yêu cầu đơn giản của mạch nên em chọn remote hồng ngoại loại HX1838 để sử dụng HX1838 với mắt thu nhận tín hiệu tốt
Chân tín hiệu của mắt thu hồng ngoại nối với chân D2 của Arduino Nano(N2).
Hình 3.5: Remote hồng ngoại HX1838
Khi nhấn phím trên bàn phím remote thì mắt thu hồng ngoại sẽ nhận và đưa tín hiệu tới arduino xử lý giải mã và thực thi
3.2.5 Khối xử lý trung tâm
Hiện nay trên thị trường có rất nhiều loại board Arduino như: Mega, Uno, Nano,…với nhiều tính năng khác nhau Em chọn board arduino nano để nghiên cứu sử dụng làm khối xử lý trung tâm và khối giải mã remote.
Khối xử lí trung tâm có sơ đồ kết nối mô tả như sau:
- Chân A5 của Arduino Nano (N1) kết nối với chân SCL của module DS1307
- Chân A4 của Arduino Nano (N1) kết nối với chân SDA của module DS1307
- Chân D12,11,10,9,8,7 của Arduino Nano (N1) kết nối lần lượt với các chân Din, Cs, Clk của 2 module led ma trận
- Chân D6 của Arduino Nano (N1) nối với chân Data của cảm biến nhiệt độ DHT11
- Chân D5, D4, D3 của Arduino Nano (N1) lần lượt nối với chân D11, D10, D9 của arduino nano (N2) của khối giải mã remote hồng ngoại
- Chân A0 của Arduino Nano (N1) nối với chân D12 của arduino nano (N2) của khối giải mã remote hồng ngoại.
- Chân D2 của Arduino Nano (N2) nối với chân tín hiệu của mắt thu hồng ngoại.
Từ các mô tả trên, ta có sơ đồ nguyên lí toàn mạch.
(sơ đồ mạch nguyên lý được đính kèm trong file SoDoMachNguyenLy.pdf đính kèm)
Bảng 3.1: Dòng tiêu thụ và điện áp các linh kiện
STT Thiết bị Dòng tiêu thụ Điện áp
1 Module thời gian thực DS1307 1.5 mA 5 V
2 Cảm biến nhiệt độ DHT11 2.5 mA 5 V
3 Module led ma trận Max7219 1.6 A 5 V
Nguồn cung cấp cho led ma trận, với tổng led là 8 led trên mạch nên cần nguồn và dòng điện phải đủ lớn để hiển thị rõ.
Với công suất mỗi led là 60mW, để đèn sáng ở mức cao nhất thì cần công suất tiêu thụ là 60mW x 8 = 0.48W Dòng tiêu thụ của led là 0.2 x 8 = 1.6 (A)
Từ đó cho thấy tổng dòng điện cho toàn mạch là
Do vậy em chọn nguồn adapter 5V - 2A để cung cấp nguồn cho toàn bộ mạch hoạt động.
CHỨC NĂNG VÀ HOẠT ĐỘNG CỦA PHẦN MỀM
Trong đề tài em sử dụng phần mềm Arduino IDE để lập trình và giải quyết các vấn đề.
Hình 3.6: Giao diện phần mềm Arduino IDE
Giao diện của phần mềm Arduino IDE có nhiều phần, tuy nhiên chúng ta chú ý đến những phần quan trọng như được nêu ra trong hình trên Chức năng của từng phần như sau:
- 1: Menu lệnh: Dùng để thêm thư viện, lưu, tạo project mới,….
- 2: Nút kiểm tra chương trình (built): Dùng để kiểm tra xem chương trình được viết có lỗi không Nếu chương trình bị lỗi thì phần mềm Arduino IDE sẽ hiển thị thông tin lỗi ở vùng thông báo thông tin.
Để nạp chương trình vào board Arduino, trước tiên chương trình sẽ được kiểm tra lỗi nhằm đảm bảo tính chính xác, sau đó mới tiến hành nạp xuống mạch Arduino.
- 4: Vùng lập trình: Vùng này để người lập trình thực hiện việc lập trình cho chương trình của mình.
LƯU ĐỒ
3.4.1 Lưu đồ giải mã remote hồng ngoại
- Đầu tiên khởi tạo các biến và các giao tiếp với mắt thu hồng ngoại.
- Cấu hình cho ngõ ra là Port B với giá trị 255
- Kiểm tra có nhấn phím không Nếu không nhấn phím thì xuất ra giá trị 255 (0xff) Nếu có nhấn phím thì tiếp tục kiểm tra: nếu phím nhấn từ 0-9 thì xuất giá trị 254 (0xfe: trạng thái chuyển) và giá trị phím nhấn Ngược lại, nếu phím nhấn lớn hơn 9 thì chỉ xuất ra giá trị phím nhấn.
- Sau đó thiết lập lại các giá trị đọc, tiếp tục nhận tín hiệu từ remote
Hình 3.7: Lưu đồ giải mã remote hồng ngoại
3.4.2 Lưu đồ hoạt động khối xử lí trung tâm
Đầu tiên, khởi tạo các biến và thiết lập các chân ngõ vào, ra Tiếp theo, thiết lập giao tiếp với cảm biến DHT11 và khởi tạo đèn LED ma trận Cuối cùng, tiến hành khởi tạo giao tiếp I2C cho DS1307.
- Kiểm tra nếu có nhấn:
Phím 1 cho phép người dùng đọc giá trị từ DS1307, hiển thị giờ, phút, giây và chỉnh sửa giờ, phút Nếu giá trị giải mã bằng 254, tức là trạng thái chuyển, cần kiểm tra thêm điều kiện giải mã, nếu không, phím 1 vẫn thực hiện chức năng của nó Phím 2 giúp đọc giá trị từ DS1307 để hiển thị ngày, tháng, năm và cho phép chỉnh sửa các thông tin này.
254 (tức trạng thái chuyển) thì kiểm tra tiếp điều kiện Ngược lại vẫn thực hiện chức năng phím 2.
+ Phím 3: đọc giá trị DHT11 hiển thị nhiệt độ Kiểm tra nếu giá trị giải mã bằng 254 (tức trạng thái chuyển) thì kiểm tra tiếp điều kiện Ngược lại vẫn thực hiện chức năng phím 3.+ Phím 0: reset toàn bộ quay lại ban đầu như khi mới cấp nguồn.
KẾT QUẢ THỰC HIỆN
Kết quả từng khối
Trong quá trình thiết kế phần cứng, tôi đã tiến hành chọn lựa linh kiện và kiểm tra các kết nối giữa các module của các khối, và kết quả thu được được thể hiện qua các hình ảnh bên dưới.
Hình 4.1: Hiển thị giờ, phút, giây module DS1307
Module DS1307 hiển thị ngày, tháng, năm, trong khi module LED ma trận Max7219 hiển thị giá trị giờ, phút, giây cùng với thông tin ngày tháng nhận được từ DS1307.
Hình 4.3: Hiển thị giá trị nhiệt độ thu được từ DHT11Module led ma trận hiển thị giá trị nhiệt độ thu được từ cảm biến DHT11.
Kết quả hoạt động toàn hệ thống
Sau khi kiểm tra các module hoạt động ổn định Em tiến hành kết nối các module và linh kiện lại với nhau và thu được sản phẩm
Hình 4.4: Mô hình sản phẩm Hoạt động của sản phẩm:
Khi ấn phím 1, màn hình sẽ hiển thị giờ, phút và giây Để điều chỉnh giờ, nhấn phím bên trái để giảm và phím bên phải để tăng Để chỉnh phút, sử dụng phím lên để tăng và phím xuống để giảm.
- Khi ấn phím số 2 sẽ hiển thị ngày, tháng, năm Tương tự, để chỉnh ngày ta ấn phím bên trái (giảm) và bên phải (tăng) Để chỉnh tháng ta sử dụng phím lên (tăng) và phím xuống (giảm) Chỉnh năm ta sử dụng phím # (tăng) và * (giảm).
- Khi ấn phím số 3 sẽ hiển thị giá trị nhiệt độ từ cảm biến DHT11.
- Reset toàn bộ mạch bằng cách ấn phím 0. Để mô tả rõ hơn hoạt động của sản phẩm em có đính kèm video clip được đính kèm file sau: https://www.youtube.com/watch?v=7J1Bt2ln0TM
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Với sự hỗ trợ tận tình từ giáo viên, tôi đã hoàn thành mục tiêu thiết kế mạch hiển thị thời gian thực trên led ma trận điều khiển bằng remote hồng ngoại
5.2 HẠN CHẾ VÀ HƯỚNG PHÁT TRIỂN
- Chi phí phần cứng khá cao
- Còn ảnh hưởng nhiều bởi nhiễu
- Chỉ chạy được trên môi trường lý tưởng
- Mắt thu nhận tín hiệu chưa nhanh.
- Phần cứng tự tạo nên chưa đạt độ chính xác cao
- Thu thập nhiều dữ liệu để tăng tính chính xác
- Cải thiện thuật toán để cũng cố mô hình hoàn thiện
- Thiết kế khả năng điều khiển từ xa bằng remote để hiển thị tín hiệu
Để cải thiện hiệu suất và độ chính xác trong việc thu thập dữ liệu từ cảm biến và đồng hồ, cần thay thế khối xử lý trung tâm bằng Arduino, một máy tính nhúng dựa trên trí tuệ nhân tạo Arduino được ứng dụng rộng rãi trong nhiều lĩnh vực, cung cấp các thư viện, lệnh và mã lập trình đơn giản, giúp tạo ra những sản phẩm hoàn thiện.
Ngoài ra phát triển hơn khi sử dụng remote hồng ngoại để điều khiển các tính năng nội dung cần hiển thị thông qua những nút nhấn, sử dụng dãy led matrix để hiển thị rõ nét hơn, hoàn thiện hơn mô hình sản phẩm.
[1] https://www.slideshare.net/trongthuy2/luan-van-thiet-ke-he-thong- led-matrix-dieu-khien-bang-app-android.
[2] http://arduino.vn/bai-viet/369-giao-tiep-i2c-va-su-dung-module- realtime-clock-ds1307
[3] http://xantorohara.github.io/led-matrix-editor/#.
[4] https://arduinokit.vn/doc-cam-bien-nhiet-do-do-am-dht11-ardui.
[5] https://www.arduino.cc/en/pmwiki.php?n=Main/
[6] https://espace.edu.vn/tu-hoc-arduino/giai-ma-remote-hong-ngoai- voi-arduino/.
[7] https://www.youtube.com/watch?v=If3n7p654Sw&list=WL&indexE.
[8] https://www.youtube.com/watch?vK-1Q_Doo&list=WL&indexE
[9] Datasheet Arduino nano: https://www.es.co.th/Schemetic/PDF/ARMB-0022.PDF
[10] Datasheet DS1307: https://datasheets.maximintegrated.com/en/ds/DS1307.pdf
[11] Datasheet DHT11: https://datasheets.maximintegrated.com/en/ds/DS1307.pdf
[12] Datasheet MAX7219: https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf
[13] Datasheet HX1838: https://datasheetspdf.com/pdf-file/713831/ETC/HX1838/1
/* Địa chỉ của DS1307 */ const byte DS1307 = 0x68;
/* Số byte dữ liệu sẽ đọc từ DS1307 */ const byte NumberOfFields = 7;
/* khai báo các biến thời gian */ int second = 0, minute = 0, hour = 0, day, wday, month, year; const uint64_t num[] = {
}; const uint64_t num_pt[] = { 0x79cdccdceccc7800, //0 0xfd31303038303000, //1 0xfd0d1860c0cc7800, //2 0x79cdc070c0cc7800, //3 0x6161fc6468706000, //4 0x79cdc0c07c0cfc00, //5 0x79cdcc7c0ccc7800, //6 0x3131306060ccfc00, //7 0x79cdcc78cccc7800, //8 0x79cdc0f8cccc7800 //9 }; const uint64_t abc[] = { 0x6666667e66663c00, //A 0x3e66663e66663e00, //B 0x3c66060606663c00, //C 0x3e66666666663e00, //D 0x7e06063e06067e00, //E 0x0606063e06067e00, //F 0x3c66760606663c00, //G 0x6666667e66666600, //H 0x3c18181818183c00, //I 0x1c36363030307800, //J 0x66361e0e1e366600, //K 0x7e06060606060600, //L
0xc6c6e6f6decec600, //N 0x3c66666666663c00, //O 0x06063e6666663e00, //P 0x603c766666663c00, //Q 0x66361e3e66663e00, //R 0x3c66603c06663c00, //S 0x18181818185a7e00, //T 0x7c66666666666600, //U 0x183c666666666600, //V 0xc6eefed6c6c6c600, //W 0xc6c66c386cc6c600, //X 0x1818183c66666600, //Y 0x7e060c1830607e00, //Z 0x0018180000181800, //: 0x1818000000000000, //. 0x1824428181995a24, //tim 0xe0101010e7050700, //oC 0x919191f31d101000, //rh 0x7052740817254700, //% 0x7c667c603c000000, //a 0x3e66663e06060600, //b 0x3c6606663c000000, //c 0x7c66667c60606000, //d 0x3c067e663c000000, //e 0x0c0c3e0c0c6c3800, //f 0x3c607c66667c0000, //g 0x6666663e06060600, //h
0x3c18181800180000, //i 0x1c36363030003000, //j 0x66361e3666060600, //k 0x1818181818181800, //l 0xd6d6feeec6000000, //m 0x6666667e3e000000, //n 0x3c6666663c000000, //o 0x06063e66663e0000, //p 0xf0b03c36363c0000, //q 0x060666663e000000, //r 0x3e403c027c000000, //s 0x1818187e18180000, //t 0x7c66666666000000, //u 0x183c666600000000, //v 0x7cd6d6d6c6000000, //w 0x663c183c66000000, //x 0x3c607c6666000000, //y 0x3c0c18303c000000, //z 0x02060c1830604000 // / }; const uint64_t nhietdo[] = { 0xc6c6e6f6decec600, //N 0x1818000000000000, //. 0x3e66666666663e00, //D 0x3c66666666663c00, //O
LedControl display0 = LedControl(12, 10, 11, 4); //Khai báo chân DIN, CLK, CS và số lượng module sử dụng
LedControl display1 = LedControl(9, 7, 8, 4); //din,clk,cs boolean state = true; void setup() { pinMode(2, INPUT); pinMode(3, INPUT); pinMode(4, INPUT); pinMode(5, INPUT); pinMode(A0, INPUT); shutdown0(0); //bat hien thi clear0(); //Xóa màn hình led display0.setIntensity(0, 5); display0.setIntensity(1, 5); display0.setIntensity(2, 5); display0.setIntensity(3, 5); display1.setIntensity(0, 5); display1.setIntensity(1, 5); display1.setIntensity(2, 5); display1.setIntensity(3, 5);
Wire.begin(); // khoi tao bus i2c dht.begin(); //khoi tao DHT11
Serial.begin(9600); setTime(11, 27, 00, 6, 11, 7, 21); // hh-mm-ss d-m-y delay(2000);
} void displayImage(uint8_t x, uint64_t image, LedControl a) { for (int i = 0; i < 8; i++) { byte row = (image >> i * 8) & 0xFF; for (int j = 0; j < 8; j++) a.setLed(x, i, j, bitRead(row, j));
} void loop() { if (digitalRead(A0) == (port[1]>>4&1) && digitalRead(5) == (port[1]>>3&1)
&& digitalRead(4) == (port[1]>>2&1) && digitalRead(3) == (port[1]>>1&1) && digitalRead(2) == (port[1]&1)) while (1) { readDS1307(); chinhgio(); delay(500); if (digitalRead(A0) == (0xfe>>4&1) && digitalRead(5) == (0xfe>>3&1) && digitalRead(4) == (0xfe>>2&1) && digitalRead(3) == (0xfe>>1&1) && digitalRead(2) == (0xfe&1)) break;
} if (digitalRead(A0) == (port[2]>>4&1) && digitalRead(5) == (port[2]>>3&1)
&& digitalRead(4) == (port[2]>>2&1) && digitalRead(3) == (port[2]>>1&1) && digitalRead(2) == (port[2]&1)) while (1) { readDS1307(); chinhngay(); dateDisplay(); delay(500); if (digitalRead(A0) == (0xfe>>4&1) && digitalRead(5) == (0xfe>>3&1) && digitalRead(4) == (0xfe>>2&1) && digitalRead(3) == (0xfe>>1&1) && digitalRead(2) == (0xfe&1)) break;
} if (digitalRead(A0) == (port[3]>>4&1) && digitalRead(5) == (port[3]>>3&1)
&& digitalRead(4) == (port[3]>>2&1) && digitalRead(3) == (port[3]>>1&1) && digitalRead(2) == (port[3]&1)) while (1) { readDHT(); delay(500); if (digitalRead(A0) == (0xfe>>4&1) && digitalRead(5) == (0xfe>>3&1) && digitalRead(4) == (0xfe>>2&1) && digitalRead(3) == (0xfe>>1&1) && digitalRead(2) == (0xfe&1)) break;
} if (digitalRead(A0) == (port[0]>>4&1) && digitalRead(5) == (port[0]>>3&1)
&& digitalRead(4) == (port[0]>>2&1) && digitalRead(3) == (port[0]>>1&1) && digitalRead(2) == (port[0]&1)) { digitalWrite(13,0); asm volatile ( "jmp 0"); //Assembly có câu lệnh nhảy jmp và nhảy đến dòng code 0 reset
} void clear0(){ display0.clearDisplay(0); display0.clearDisplay(1); display0.clearDisplay(2); display0.clearDisplay(3); display1.clearDisplay(0); display1.clearDisplay(1); display1.clearDisplay(2); display1.clearDisplay(3);
} void shutdown0(boolean x) { display0.shutdown(1, x); display0.shutdown(2, x); display0.shutdown(3, x); display1.shutdown(0, x); display1.shutdown(1, x); display1.shutdown(2, x); display1.shutdown(3, x);
} void readDHT() { displayImage(3,nhietdo[0],display1); displayImage(2,nhietdo[1],display1); displayImage(1,nhietdo[2],display1); displayImage(0,nhietdo[3],display1); displayImage(3,nhietdo[4],display0); displayImage(2,num[(byte)dht.readTemperature()/10],display0); displayImage(1,num[(byte)dht.readTemperature()%10],display0); displayImage(0,abc['Z'+4-65],display0);
Wire.requestFrom(DS1307, NumberOfFields); second = bcd2dec(Wire.read() & 0x7f); minute = bcd2dec(Wire.read() ); hour = bcd2dec(Wire.read() & 0x3f); // chế độ 24h. wday = bcd2dec(Wire.read() ); day = bcd2dec(Wire.read() ); month = bcd2dec(Wire.read() ); year = bcd2dec(Wire.read() );
/* Chuyển từ BCD (Binary-portd Decimal) sang Decimal */ int bcd2dec(byte num) { return ((num/16 * 10) + (num % 16));
/* Chuyển từ Decimal sang BCD */ int dec2bcd(byte num) { return ((num/10 * 16) + (num % 10));
The digital clock displays the current time by utilizing a series of functions to render each component It shows the seconds by dividing the second value to get the tens and units, while the minutes and hours are similarly processed to display their respective digits Each digit is represented through specific display functions, ensuring a clear and accurate representation of time on the digital clock.
// digital clock display of the time displayImage(1,num[year/10%10],display0); displayImage(0,num[year%10],display0); displayImage(2,abc['z'+1-65],display0); //dau / displayImage(0,num[month/10],display1); displayImage(3,num[month%10],display0); displayImage(1,abc['z'+1-65],display1); displayImage(3,num[day/10],display1); displayImage(2,num[day%10],display1);
} void setTime(byte hr, byte min, byte sec, byte wd, byte d, byte mth, byte yr) {
Wire.write(byte(0x00)); // đặt lại pointer
Wire.write(dec2bcd(sec));
Wire.write(dec2bcd(min));
Wire.write(dec2bcd(hr));
Wire.write(dec2bcd(wd)); // day of week: Sunday = 1, Saturday = 7
Wire.write(dec2bcd(mth));
Wire.write(dec2bcd(yr));
} void chinhgio() { if (!digitalRead(A0) || !digitalRead(5) || !digitalRead(4) || !digitalRead(3) ||
!digitalRead(2)) { if (digitalRead(A0) == (port[13]>>4&1) && digitalRead(5) = (port[13]>>3&1) && digitalRead(4) == (port[13]>>2&1) && digitalRead(3) == (port[13]>>1&1)
&& digitalRead(2) == (port[13]&1)) {//trai hour ; if (hour>4&1) && digitalRead(5) = (port[15]>>3&1) && digitalRead(4) == (port[15]>>2&1) && digitalRead(3) == (port[15]>>1&1)
&& digitalRead(2) == (port[15]&1)) {//phai hour++; if (hour=$) hour = 0;
} if (digitalRead(A0) == (port[14]>>4&1) && digitalRead(5) = (port[14]>>3&1) && digitalRead(4) == (port[14]>>2&1) && digitalRead(3) == (port[14]>>1&1)
&& digitalRead(2) == (port[14]&1)) {//xuong minute ; if (minute>4&1) && digitalRead(5) = (port[12]>>3&1) && digitalRead(4) == (port[12]>>2&1) && digitalRead(3) == (port[12]>>1&1)
&& digitalRead(2) == (port[12]&1)) {//len minute++; if (minute=`) minute = 0;
} setTime(hour,minute,second,wday,day,month,year);
} void chinhngay() { if (!digitalRead(A0) || !digitalRead(5) || !digitalRead(4) || !digitalRead(3) ||
!digitalRead(2)) { if (digitalRead(A0) == (port[13]>>4&1) && digitalRead(5) = (port[13]>>3&1) && digitalRead(4) == (port[13]>>2&1) && digitalRead(3) == (port[13]>>1&1)
&& digitalRead(2) == (port[13]&1)) {//trai day ; if (!day) day = 31;
} if (digitalRead(A0) == (port[15]>>4&1) && digitalRead(5) = (port[15]>>3&1) && digitalRead(4) == (port[15]>>2&1) && digitalRead(3) == (port[15]>>1&1)
&& digitalRead(2) == (port[15]&1)) {//phai day++; if (day=2) day = 1;
} if (digitalRead(A0) == (port[14]>>4&1) && digitalRead(5) = (port[14]>>3&1) && digitalRead(4) == (port[14]>>2&1) && digitalRead(3) == (port[14]>>1&1)
&& digitalRead(2) == (port[14]&1)) {//xuong month ; if (!month) month = 12;
} if (digitalRead(A0) == (port[12]>>4&1) && digitalRead(5) = (port[12]>>3&1) && digitalRead(4) == (port[12]>>2&1) && digitalRead(3) == (port[12]>>1&1)
&& digitalRead(2) == (port[12]&1)) {//len month++; if (month=) month = 1;
} if (digitalRead(A0) == (port[10]>>4&1) && digitalRead(5) = (port[10]>>3&1) && digitalRead(4) == (port[10]>>2&1) && digitalRead(3) == (port[10]>>1&1)
} if (digitalRead(A0) == (port[11]>>4&1) && digitalRead(5) = (port[11]>>3&1) && digitalRead(4) == (port[11]>>2&1) && digitalRead(3) == (port[11]>>1&1)
} setTime(hour,minute,second,wday,day,month,year);
- * Code giải mã remote hồng ngoại
#include // thư viện hỗ trợ IR remote
#define x 1000 const int receiverPin = 2; // chân digital 8 dùng để đọc tín hiệu
IRrecv irrecv(receiverPin); // tạo đối tượng IRrecv mới decode_results results;// lưu giữ kết quả giải mã tín hiệu void setup() { irrecv.enableIRIn(); //khởi tạo hàm để nhận tín hiệu
Serial.begin(9600); //khởi tạo giao tiếp UART tốc độ baud 9600, hiển thị dữ liệu lên máy tính
DDRB = 0xff; //cấu hình portB là output
} void loop() { if (irrecv.decode(&results)) //nếu có nhấn nút thì giải mã biến result, trả về con trỏ kiểu long (32bit)
Serial.println(results.value,HEX); //in ra màn hình giá trị của result, hiển thị kiểu hex switch (results.value) { case 0xFFA25D: {PORTB = 0xfe; delay(x); PORTB = 1; break;} //0xfe là trạng thái chuyển, delay 1s ổn định, xuất portB số 1 case 0xFF629D: {PORTB = 0xfe; delay(x); PORTB = 2; break;} case 0xFFE21D: {PORTB = 0xfe; delay(x); PORTB = 3; break;} case 0xFF22DD: {PORTB = 0xfe; delay(x); PORTB = 4; break;} case 0xFF02FD: {PORTB = 0xfe; delay(x); PORTB = 5; break;} case 0xFFC23D: {PORTB = 0xfe; delay(x); PORTB = 6; break;} case 0xFFE01F: {PORTB = 0xfe; delay(x); PORTB = 7; break;} case 0xFFA857: {PORTB = 0xfe; delay(x); PORTB = 8; break;} case 0xFF906F: {PORTB = 0xfe; delay(x); PORTB = 9; break;} case 0xFF9867: {PORTB = 0xfe; delay(x); PORTB = 0; break;} case 0xFF6897: {PORTB = 10; break;} case 0xFFB04F: {PORTB = 11; break;} case 0xFF18E7: {PORTB = 12; break;}
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
HẠN CHẾ VÀ HƯỚNG PHÁT TRIỂN
Với sự hỗ trợ tận tình từ giáo viên hướng dẫn về cơ bản đã hoàn thành được những mục tiêu đề ra là thiết kế mạch hiển thị thời gian thực lên led ma trận điều khiển bằng remote hồng ngoại Trong quá trình thực hiện, tuy gặp không ít khó khăn từ phần cứng đến phần mềm Mặc dù gặp không ít khó khăn như thế nhưng em đã cố gắng nghiên cứu vượt qua và tích lũy cho mình một số kinh nghiệm mới, kiến thức mới để hoàn thành đề tài.
5.2 HẠN CHẾ VÀ HƯỚNG PHÁT TRIỂN
- Chi phí phần cứng khá cao
- Còn ảnh hưởng nhiều bởi nhiễu
- Chỉ chạy được trên môi trường lý tưởng
- Mắt thu nhận tín hiệu chưa nhanh.
- Phần cứng tự tạo nên chưa đạt độ chính xác cao
- Thu thập nhiều dữ liệu để tăng tính chính xác
- Cải thiện thuật toán để cũng cố mô hình hoàn thiện
- Thiết kế khả năng điều khiển từ xa bằng remote để hiển thị tín hiệu
- Trang bị thêm cảm biến, đọc đồng hồ để thu thập dữ liệu Để khắc phục được các nhược điểm đã nêu ra, tăng tốc độ xử lý và đạt kết quả chính xác cao thì cần phải thay thế khối xử lý trung tâm bằng arduino là một máy tính nhúng được thiết kế trên nền tảng máy tính trí tuệ nhân tạo Arduino được sử dụng rộng rãi cho mọi ứng dụng lĩnh vực nhằm đem đến những sản phẩm hoàn thiện bằng những thư viện, lệnh, code đơn giản để lập trình chúng.
Ngoài ra phát triển hơn khi sử dụng remote hồng ngoại để điều khiển các tính năng nội dung cần hiển thị thông qua những nút nhấn, sử dụng dãy led matrix để hiển thị rõ nét hơn, hoàn thiện hơn mô hình sản phẩm.