HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA ĐIỆN TỬ- VIỄN THÔNGBÁO CÁO MÔN HỌC HỆ ĐIỀU HÀNH NHÚNG THỜI GIAN THỰC Đề tài: “Thiết kế đồng hồ thời gian thực có LED nháy theo nhạc sử dụng hệ điều hành FRE
TỔNG QUAN VỀ HỆ THỐNG
Đặt vấn đề
Sự phát triển của khoa học kỹ thuật đã thúc đẩy sự ra đời của các loại đồng hồ mới nhằm xác định thời gian một cách chính xác và rõ ràng hơn Trong đó, đồng hồ số nổi bật với các tính năng vượt trội so với đồng hồ cơ và các loại đồng hồ cổ điển về mặt kinh phí, độ chính xác và đa dạng tính năng Đồng hồ số ngày càng trở thành lựa chọn ưu việt nhờ khả năng hiển thị rõ ràng, chính xác và tích hợp nhiều chức năng hiện đại.
Lý do chọn đề tài
Trên thị trường hiện nay, chỉ có một số loại đồng hồ kim và đồng hồ số đơn giản dùng để xem giờ hàng ngày Đồng hồ thời gian thực có thiết kế đặc biệt với đèn LED nháy theo nhạc, giúp người dùng dễ dàng theo dõi thời gian một cách trực quan và sinh động Sản phẩm này không chỉ hỗ trợ theo dõi thời gian mà còn mang lại tính mới lạ, thẩm mỹ cao, dễ sử dụng và phù hợp với xu thế hiện đại.
Thiết bị hoạt động dựa trên vi điều khiển, mang lại độ chính xác cao trong xử lý dữ liệu Với khả năng giao tiếp trực tiếp và thống nhất với các module phổ biến, thiết bị đảm bảo thực hiện các chức năng chính xác và hiệu quả Nhờ đó, nó giúp gia đình và người thân sắp xếp, quản lý thời gian một cách chính xác hơn, nâng cao độ tin cậy trong công việc hàng ngày.
Mục đích nghiên cứu đề tài
Thiết kế và thi công đồng hồ thời gian thực với khả năng hiển thị chính xác, giúp người dùng dễ dàng theo dõi thời gian hàng ngày Đồng hồ còn tích hợp chức năng led nháy theo nhạc, tạo hiệu ứng sống động và hấp dẫn Giao diện của đồng hồ được thiết kế tiện lợi, đẹp mắt, phù hợp với sở thích và nhu cầu sử dụng của người dùng Với những tiêu chuẩn về độ chính xác và thẩm mỹ, sản phẩm chắc chắn mang lại trải nghiệm tốt nhất cho khách hàng.
Giải pháp thiết kế
Hệ thống được thiết kế gồm 6 khối: Khối nguồn, khối thời gian, khối vi điều khiển, khối hiển thị, khối điều khiển, khối cảm biến âm thanh.
Hình 1: Sơ đồ khối Chức năng của các khối:
- Khối nguồn: cung cấp nguồn hoạt động cho hệ thống vi điều khiển.
Khối xử lý trung tâm đóng vai trò là trung tâm điều khiển chính của hệ thống, xử lý tín hiệu nhận được từ các khối thời gian thực và cảm biến âm thanh để hiển thị thông tin chính xác trên màn hình Nó cũng nhận các tín hiệu điều khiển để điều chỉnh trạng thái hoạt động của hệ thống, đảm bảo hoạt động hiệu quả và linh hoạt.
- Khối hiển thị: Hiển thị các thông số thời gian như giờ, phút, giây và
Khối RTC (Real Time Clock) là chip thời gian thực, chịu trách nhiệm cung cấp thời gian chính xác dựa trên đồng hồ thể hiện thời gian tuyệt đối con người sử dụng hàng ngày Trong sơ đồ mạch, RTC đảm nhận chức năng cấp nguồn thời gian chính xác để vi điều khiển có thể xử lý và đồng bộ các hoạt động liên quan đến thời gian một cách chính xác và đáng tin cậy.
- Khối điều khiển: Sử dụng nút bấm Thực hiện chức năng nhập các dữ liệu đưa đến vi điều khiển và bao gồm thao tác thay đổi hiển thị.
- Khối cảm biến âm thanh: Cảm biến âm thanh có chức nặng nhận biết được âm thanh giúp LED nháy theo điệu nhạc.
CƠ SỞ LÝ THUYẾT
Tìm hiểu về hệ điều hành nhúng thời gian thực FreeRTOS
Hệ điều hành thời gian thực (RTOS) là loại hệ điều hành dành cho các hệ thống nhúng, được thiết kế để tối ưu tài nguyên và đảm bảo độ tin cậy cao Các phần cứng chạy RTOS thường có giới hạn về RAM và ROM, yêu cầu hệ điều hành phải phù hợp với các ứng dụng cụ thể và hạn chế phạm vi hoạt động để đạt hiệu quả tối ưu Để khai thác tối đa sức mạnh xử lý của CPU, các nhà phát triển có thể viết mã quan trọng trực tiếp bằng ngôn ngữ máy hoặc sử dụng ngôn ngữ khả chuyển như C để nâng cao hiệu suất và dễ bảo trì.
Trong các hệ điều hành nhúng phổ biến như QNX, PDOS, pSOS, VxWorks, Nulceus, ERCOS, EMERALDS, và Windows CE, chúng tôi chọn sử dụng hệ điều hành nhúng thời gian thực FreeRTOS cho đồ án môn học này FreeRTOS phù hợp cho nghiên cứu và học tập về các kỹ thuật, công nghệ trong phát triển hệ điều hành, đặc biệt là hệ điều hành nhúng thời gian thực Ngoài ra, FreeRTOS còn cho phép phát triển mở rộng bằng cách bổ sung mô-đun, trình điều khiển và chuyển đổi môi trường thực thi để phù hợp với các yêu cầu cụ thể của dự án.
2.1.1 Lịch sử phát triển của hệ điều hành nhúng thời gian thực FreeRTOS
FreeRTOS là lõi của hệ điều hành thời gian thực miễn phí, được Richard Barry công bố rộng rãi từ năm 2003 và ngày càng phát triển mạnh mẽ nhờ sự ủng hộ của cộng đồng mã nguồn mở Với tính khả chuyển cao, mã nguồn mở và khả năng sử dụng cho các ứng dụng thương mại, FreeRTOS phù hợp cho các hệ nhúng thời gian thực nhỏ Được viết chủ yếu bằng ngôn ngữ C, nó thích hợp với nhiều nền tảng khác nhau, giúp các nhà phát triển dễ dàng port cho nhiều kiến trúc vi điều khiển khác nhau Ưu điểm nổi bật của FreeRTOS là dung lượng nhỏ gọn, khả năng chạy trên các nền tảng mà nhiều hệ điều hành khác không thể, cùng với các tài liệu ví dụ, hướng phát triển và hỗ trợ miễn phí từ cộng đồng Ngoài ra, các dịch vụ hỗ trợ thương mại và phát triển đầy đủ cũng được cung cấp để đáp ứng các nhu cầu chuyên nghiệp.
FreeRTOS được cấp phép theo giấy phép GPL đã được chỉnh sửa, cho phép sử dụng trong các ứng dụng thương mại Các tên gọi liên quan đến FreeRTOS bao gồm OpenRTOS, một phiên bản thương mại không liên quan đến GPL, và SafeRTOS, dựa trên FreeRTOS nhưng được phân tích, chứng minh bằng tài liệu và kiểm tra nghiêm ngặt theo tiêu chuẩn IEC61508 Chuẩn IEC61508 SIL3 đã được phát triển độc lập để hoàn thiện tài liệu dành cho SafeRTOS, đảm bảo tính an toàn và đáng tin cậy cho các ứng dụng công nghiệp.
2.1.2 Cách thức hoạt động của FreeRTOS.
RTOS là một phần quan trọng của hệ thống điều hành nhúng, chịu trách nhiệm quản lý và điều phối các tác vụ (task), thực hiện lập lịch và phân mức ưu tiên phù hợp để đảm bảo hoạt động hiệu quả Nó giúp nắm bắt và xử lý các thông điệp gửi đi giữa các task, đảm bảo hệ thống hoạt động logic và liên tục Việc sử dụng RTOS tối ưu hóa hiệu suất và độ ổn định của các thiết bị nhúng, đặc biệt trong các ứng dụng yêu cầu thời gian phản hồi nhanh và xử lý đa nhiệm.
RTOS (Hệ điều hành thời gian thực) phức tạp nhưng có thể hiểu đơn giản như việc vận hành các máy trạng thái (State Machine) Để xử lý các bài toán yêu cầu nhiều trạng thái máy, thông thường chúng ta sử dụng vòng lặp vô hạn như "while(1)" để duy trì hoạt động liên tục của hệ thống, đảm bảo các trạng thái được chuyển đổi và xử lý một cách hiệu quả.
{ state= 2; case 2: //Code for Task 2; state= 3; case 3: //Code for Task 3; state= 4; case 4: //Code for Task 4; state=1;
Chương trình hoạt động theo chu trình từ trạng thái 1 đến trạng thái 4, sau đó quay lại bắt đầu từ trạng thái 1 để tiếp tục quá trình Mỗi khi có sự thay đổi về trạng thái, chương trình sẽ tự động nhảy qua để phục vụ nhiệm vụ tương ứng Quá trình này đảm bảo luân phiên xử lý các tác vụ theo thứ tự đã định trước, giúp hệ thống vận hành hiệu quả và logic.
Phương pháp này có nhược điểm lớn là sử dụng tài nguyên chung, dẫn đến giảm hiệu quả sử dụng và tiềm ẩn rủi ro về xung đột tài nguyên Ngoài ra, tốc độ chuyển đổi trạng thái (states) chậm do yêu cầu hoàn thành từng tác vụ (Task) trước khi chuyển sang tác vụ tiếp theo, gây ảnh hưởng đến hiệu suất tổng thể Việc kiểm soát nhiều tác vụ cùng lúc cũng gặp khó khăn, làm tăng khả năng xảy ra lỗi và giảm khả năng quản lý hệ thống hiệu quả.
Nhân Kernel của RTOS điều phối hoạt động của các tác vụ (Task), mỗi task có mức ưu tiên riêng và thực thi theo chu kỳ cố định Khi xảy ra các tác động như ngắt, tín hiệu hoặc tin nhắn giữa các task, Kernel sẽ điều phối, chuyển điều khiển đến task tương ứng nhằm đảm bảo hoạt động hệ thống hiệu quả và chính xác.
Sự chuyển dịch giữa các Task rất linh động, độ trễ thấp mang lại độ tin cậy cao cho chương trình.
2.1.3 Các chức năng của FreeRTOS.
Quản lý công việc trong ứng dụng được chia thành các đơn vị nhỏ gọi là Task (tác vụ), có thể lập lịch và thực thi theo thứ tự để đảm bảo tính đồng thời trong môi trường thời gian thực Quản lý tác vụ bao gồm các thao tác như tạo tác vụ mới, kết thúc, thay đổi mức độ ưu tiên, nhằm duy trì hoạt động hiệu quả của hệ thống Việc tạo tác vụ liên quan đến việc xây dựng Khối điều khiển tác vụ (TCB) chứa các thông tin quan trọng như mã định danh tác vụ, mức độ ưu tiên, trạng thái hiện tại như đang chạy, nhàn rỗi, sẵn sàng hoặc đã kết thúc.
Lập lịch tác vụ giúp ghi lại trạng thái của từng tác vụ và xác định tác vụ có mức độ ưu tiên cao nhất để thực thi, đảm bảo bộ xử lý chạy theo thứ tự ưu tiên Đồng bộ hóa tác vụ cần thiết để truyền thông tin an toàn giữa các nhiệm vụ hoặc chủ đề, cho phép chia sẻ tài nguyên như bộ đệm, thiết bị I/O một cách hiệu quả.
Quản lý bộ nhớ trong RTOS đóng vai trò quan trọng trong việc phân bổ và quản lý bộ nhớ cho từng chương trình, đảm bảo hiệu suất hoạt động tối ưu Các phương pháp quản lý bộ nhớ chính trong RTOS bao gồm quản lý ngăn xếp và quản lý đống, giúp tối ưu hóa việc sử dụng tài nguyên và duy trì độ ổn định của hệ thống Việc lựa chọn phương pháp quản lý bộ nhớ phù hợp là yếu tố then chốt để nâng cao hiệu quả hoạt động của hệ thống Real-Time Operating System.
Quản lý thời gian là yếu tố quan trọng để lập lịch các tác vụ trong khoảng thời gian xác định Để thực hiện điều này, hệ thống sử dụng phần cứng Timer được lập trình để tạo ra các ngắt định kỳ, gọi là ngắt thời gian hoặc System Tick Nhờ vào ngắt System Tick, bộ xử lý có thể được tần suất đều đặn ngắt quãng, giúp đảm bảo các tác vụ diễn ra chính xác theo lịch trình đã định.
Xử lý ngắt là cơ chế phần cứng giúp CPU phản ứng nhanh với các sự kiện không đồng bộ thông qua việc xác định trình xử lý ngắt, tạo và xóa quy trình dịch vụ ngắt một cách hiệu quả Hệ thống ngắt cho phép xử lý các sự kiện ngoài ý muốn một cách linh hoạt, đảm bảo hoạt động liên tục của hệ thống Việc quản lý ngắt tối ưu đóng vai trò quan trọng trong việc duy trì hiệu suất và độ ổn định của CPU.
502 Bad GatewayUnable to reach the origin service The service may be down or it may not be responding to traffic from cloudflared
Giới thiệu các thiết bị phần cứng sử dụng
Khi nhắc đến lập trình hoặc nghiên cứu chế tạo bằng Arduino, Arduino Uno R3 là dòng sản phẩm phổ biến nhất và phù hợp nhất cho người mới bắt đầu Loại Arduino này đã trải qua nhiều thế hệ và hiện tại đang ở phiên bản thứ 3 (R3), mang lại trải nghiệm dễ dàng tiếp cận và sử dụng cho người mới học lập trình Vì vậy, nếu bạn mới bắt đầu khám phá về Arduino, nên tập trung nghiên cứu và làm quen với Arduino Uno R3 để dễ dàng học hỏi và phát triển các dự án của mình.
Arduino Uno là một bo mạch phát triển dựa trên vi xử lý AVR Atmega 328, thiết kế để thực hiện các dự án điện tử và lập trình dễ dàng Bo mạch này tích hợp nhiều thành phần quan trọng như cổng kết nối, chân GPIO, và nguồn cấp ổn định, giúp người dùng dễ dàng xây dựng các dự án tương tác Với khả năng mở rộng và khả năng lập trình linh hoạt, Arduino Uno trở thành lựa chọn phổ biến cho người mới bắt đầu lẫn các nhà chế tạo sáng tạo, hỗ trợ các ứng dụng từ đơn giản đến phức tạp trong lĩnh vực điện tử và tự động hóa.
Cổng USB là loại cổng giao tiếp không thể thiếu để upload mã từ máy tính lên vi điều khiển, đồng thời nó còn đảm nhận chức năng truyền dữ liệu serial giữa vi điều khiển và máy tính.
Nguồn cấp cho Arduino có thể lấy từ cổng USB của máy tính, tuy nhiên không phải lúc nào cũng tiện lợi hoặc khả thi để kết nối với máy tính Trong trường hợp đó, bạn cần sử dụng một nguồn điện riêng từ 9V đến 12V để đảm bảo Arduino hoạt động ổn định.
- Có 14 chân vào/ra số đánh số thứ tự từ 0 đến 13, ngoài ra có một chân nối đất (GND) và một chân điện áp tham chiếu (AREF)
Vi điều khiển AVR là bộ xử lý trung tâm của toàn bộ bo mạch Arduino, đóng vai trò quan trọng trong việc điều khiển các hoạt động của thiết bị Nguyên lý hoạt động của vi điều khiển AVR phụ thuộc vào từng mẫu Arduino, với mỗi dòng sử dụng loại chip khác nhau Trong phiên bản Arduino Uno, chip được sử dụng là ATMega328, đảm nhận nhiệm vụ xử lý dữ liệu và điều phối các thành phần khác của mạch Vi điều khiển AVR với chip ATMega328 giúp Arduino Uno hoạt động hiệu quả, linh hoạt và phù hợp cho nhiều ứng dụng khác nhau.
- Điện áp đầu vào (Giới hạn): 6-20V
- Chân vào/ra (I/O) số: 14 ( 6 chân có thể cho đầu ra PWM)
- Dòng điện trong mỗi chân I/O: 40mA
- Dòng điện chân nguồn 3.3V: 50mA
- Bộ nhớ trong: 32 KB (ATmega328)
Vi điều khiển của Arduino Uno
Arduino UNO sử dụng 3 vi điều khiển 8-bit AVR gồm ATmega8, ATmega168 và ATmega328, giúp xử lý các tác vụ đơn giản như điều khiển đèn LED nhấp nháy, xử lý tín hiệu cho xe điều khiển từ xa, và làm trạm đo nhiệt độ - độ ẩm hiển thị trên màn hình LCD.
Thiết kế tiêu chuẩn của Arduino UNO sử dụng vi điều khiển ATmega328, có giá khoảng 90.000đ Tuy nhiên, nếu yêu cầu phần cứng của bạn không cao hoặc ngân sách hạn chế, bạn có thể chọn các loại vi điều khiển khác có chức năng tương đương nhưng giá thành thấp hơn, như ATmega8 với bộ nhớ flash 8KB, giá khoảng 45.000đ hoặc ATmega168 với bộ nhớ flash 16KB, giá khoảng 65.000đ.
Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc nguồn ngoài với điện áp khuyên dùng là từ 7 đến 12V DC, trong khi giới hạn tối đa là 6 đến 20V Khi không có sẵn nguồn từ cổng USB, cấp nguồn bằng pin vuông 9V là phương án hợp lý nhất Tuy nhiên, cần lưu ý rằng nếu cấp nguồn vượt quá ngưỡng giới hạn này, bạn có thể gây hỏng Arduino UNO.
Trong Arduino UNO, GND (Ground) là cực âm của nguồn điện cấp cho board Khi sử dụng các thiết bị có nguồn điện riêng biệt, các chân GND này cần phải được nối chung để hệ thống hoạt động đúng và ổn định Việc kết nối chung giúp truyền tải tín hiệu và nguồn năng lượng hiệu quả giữa các thành phần, đảm bảo an toàn và tránh gây hư hỏng cho thiết bị.
- 5V ; cấp điện áp 5V đầu ra Dòng tối đa cho phép ở chân này là 500mA
- 3.3V : cấp điện áp 3.3V đầu ra Dòng tối đa cho phép ở chân này là 50mA
- Vin ( Voltage Input ) : để cấp nguồn ngoài cho Arduino UNO , bạn 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
IOREF là chân cung cấp điện áp hoạt động của vi điều khiển trên Arduino UNO, thường là 5V, và có thể đo bằng chân này Tuy nhiên, bạn không nên lấy nguồn 5V từ IOREF để cấp nguồn cho các thiết bị khác, vì chức năng chính của chân này không phải là nguồn cấp điện.
- 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 1 điện trở 10K
Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng :
Bộ nhớ Flash 32KB của vi điều khiển lưu trữ các đoạn lệnh mà bạn lập trình Trong đó, khoảng vài KB dành riêng cho bootloader, nhưng bạn không cần lo lắng vì thường bạn sẽ ít sử dụng đến hơn 20KB của bộ nhớ này.
SRAM (Static Random Access Memory) là nơi lưu trữ các biến bạn khai báo trong quá trình lập trình, với dung lượng phụ thuộc vào số lượng biến sử dụng Mặc dù cần nhiều bộ nhớ RAM khi khai báo nhiều biến, nhưng thường thì bộ nhớ này ít khi là vấn đề đáng lo ngại Tuy nhiên, dữ liệu trên SRAM sẽ bị mất khi mất điện, do đó không thích hợp để lưu trữ thông tin quan trọng lâu dài.
EEPROM (Electrically Erasable Programmable Read-Only Memory) có kích thước chỉ 1KB, giống như một chiếc ổ cứng mini, cho phép người dùng đọc và ghi dữ liệu dễ dàng EEPROM lưu trữ dữ liệu ngay cả khi mất điện, đảm bảo an toàn thông tin so với bộ nhớ SRAM Đây là giải pháp tin cậy để lưu trữ dữ liệu cần bảo vệ trong các dự án điện tử, nhờ khả năng xóa và lập trình lại điện tử linh hoạt.
Arduino Uno R3 được trang bị 14 chân digital để đọc hoặc xuất tín hiệu, với mức điện áp 0V và 5V đáp ứng nhu cầu điều khiển thiết bị Mỗi chân có dòng dòng tối đa là 40mA, đảm bảo khả năng hoạt động ổn định Ngoài ra, tất cả các chân đều có sẵn các điện trở pull-up nội bộ được tích hợp trong vi điều khiển ATmega328, giúp dễ dàng tùy chỉnh cấu hình phù hợp với từng dự án.
Một số chân digital có các chức năng đặc biệt như sau :
Hai chân serial 0 (RX) và 1 (TX) của Arduino Uno dùng để truyền nhận dữ liệu TTL Serial, cho phép giao tiếp giữa Arduino và các thiết bị khác Kết nối Bluetooth thường được hiểu là kết nối Serial không dây, giúp mở rộng khả năng giao tiếp của Arduino một cách linh hoạt Tuy nhiên, nếu không cần thiết phải giao tiếp qua Serial, bạn không nên sử dụng hai chân này để tránh gây xung đột hoặc làm mất chức năng của chúng.
THIẾT KẾ VÀ THI CÔNG SẢN PHẨM
Thiết kế và thi công phần cứng
Kết nối Arduino và các thiết bị.
Arduino và Module RTC Arduino và cảm biến âm thanh
Arduino UNO Module RTC Arduino UNO Cảm biến âm thanh
Sơ đồ kết nối các thiết bị mô phỏng trên proteus:
Trong thực tế, chúng tôi sử dụng cáp 7 màu để kết nối các module với nhau, giúp đảm bảo kết nối ổn định và dễ dàng trong quá trình nâng cấp, sửa chữa thiết bị Việc sử dụng cáp đa màu sắc còn giúp quản lý các kết nối một cách rõ ràng và thuận tiện hơn khi thực hiện mô phỏng mạch trên phần mềm Proteus.
Sơ đồ kết nối các thiết bị thực tế:
Hình 3 2: Thiết kế và thi công vỏ hộp để chứa và bảo vệ các thiết bị
Thiết kế và thi công phần mềm
3.2.1 Chương trình hiển thị lên LED P10.
Hiển thị thông tin lên led ma trận nói chung và led p10 nói riêng thường sử dụng phương pháp quét led.
Trong bài viết này, chúng tôi giới thiệu về thuật toán quét LED hiệu quả nhằm nâng cao trải nghiệm người dùng Thường xuyên, các phương pháp lập trình truyền thống gây ra khó chịu và giảm chất lượng hiển thị của màn hình LED Để khắc phục tình trạng này, chúng tôi đã áp dụng phương pháp ngắt timer, giúp thực hiện thuật toán quét LED một cách tối ưu Phương pháp này hoạt động như một module tự động quét LED và đảm nhận công việc hiển thị một cách liên tục và ổn định.
Trong quá trình xử lý, cần thiết lập mối liên hệ giữa chương trình chính và hàm ngắt để đảm bảo hàm ngắt phản hồi đúng theo yêu cầu của hàm main Phương pháp này sử dụng bộ đệm (buffer) – là một mảng dữ liệu chứa thông tin cần hiển thị, giúp quản lý dữ liệu một cách hiệu quả Khi hàm main muốn hiển thị thông tin, chỉ cần ghi dữ liệu vào bộ đệm, còn hàm ngắt sẽ tự động lấy dữ liệu từ bộ đệm để hiển thị theo chu kỳ và tự động.
Hình 3.4 trình bày phương pháp ngắt timer để thực hiện thuật toán quét LED Đồi với LED P10 (32x16), tương đương với 512 LED trong ma trận Để quản lý toàn bộ ma trận LED này, cần sử dụng 512 bit dữ liệu, trong đó mỗi LED bao gồm 3 màu RGB, đòi hỏi thêm một chiều dữ liệu để điều khiển màu sắc của từng điểm ảnh Phương pháp này giúp tối ưu hóa quá trình điều khiển LED, giảm thiểu thời gian quét và nâng cao hiệu quả hiển thị.
Khai bảo một mảng 3 chiều: char Buffer_display[3][16][4] để quản lý ma trận LED và làm bộ đệm cho chương trình ngắt Timer.
Chương trình ngắt quét LED dựa trên bộ Timer1 của Arduino giúp kiểm soát khả năng hiển thị một cách tối ưu, giữ cho mức độ quét đạt ít nhất 24-30fps để đảm bảo không gây mỏi mắt hay ảnh hưởng đến não bộ Trong đó, chúng tôi sử dụng tốc độ quét 33 khung hình mỗi giây, tương đương với một lần quét diễn ra khoảng 30ms Đối với đèn P10, mỗi chu kỳ quét gồm 8 lần, mỗi lần ngắt chỉ sáng một hàng, với thời gian cho mỗi lần ngắt là khoảng 3.7ms (1 / (8 x 33) ≈ 0.0037s), giúp tối ưu hóa hiệu quả hiển thị và tiết kiệm năng lượng.
Giá trị nạp vào thanh ghi TCNT1 = 2^16 – 0.0037*(16 *10^6)/256.
3.2.2 Thiết kế chương trình chính.
Lưu đồ thuật toán của chương trình chính.
Hình 3.5 thể hiện lưu đồ thuật toán của chương trình chính, được chia thành hai tác vụ chính Tác vụ “taskRealTime” chịu trách nhiệm đọc và hiển thị các thông số thời gian như giờ, phút, giây, giúp người dùng theo dõi thời gian một cách chính xác và trực quan.
Chức năng của "animation" là hiển thị các hiệu ứng chuyển động và nháy theo điệu nhạc, tạo ra trải nghiệm trực quan sinh động Các tác vụ liên quan đến animation sẽ giao tiếp qua hàng đợi "mode" để đảm bảo quá trình điều chỉnh diễn ra mượt mà và đồng bộ Việc điều khiển animation được thực hiện thông qua chương trình điều khiển tại mục 3.2.3, giúp quản lý các hiệu ứng một cách chính xác và linh hoạt.
Lưu đồ thuật toán tác vụ taskRealTime:
Hình 3 6: Lưu đồ thuật toán tác vụ taskRealTimeLưu đồ thuật toán tác vụ “animation”:
Hình 3 7: Lưu đồ thuật toán tác vụ “animation” 3.2.3 Chương trình điều khiển sản phẩm.
Sơ đồ điều khiển sản phẩm
Chương trình điều khiển nhận dữ liệu trực tiếp từ người dùng qua nút nhấn, đảm bảo quá trình tương tác diễn ra một cách mượt mà Để thực hiện điều này và đáp ứng yêu cầu thời gian thực, chúng tôi sử dụng tính năng ngắt cứng trên Arduino Uno, giúp xử lý các tín hiệu từ nút nhấn một cách chính xác và nhanh chóng.
Lưu đồ thuật toán chương trình điều khiển:
Hình 3 9: Lưu đồ thuật toán chương trình điều khiển
TỔNG KẾT
Nhận xét, đánh giá
Sản phẩm hoạt động ổn định, đạt yêu cầu đã đặt ra, tuy nhiên vẫn còn một số hạn chế như sau:
- Chưa điều chỉnh được ngày, tháng, năm.
- Sản phẩm chưa có tính thẩm mỹ cao.
Hướng phát triển
- Có thêm hiển thị nhiệt độ và độ ẩm.
- Tích hợp thêm nhiều hiệu ứng có thể chuyển mode qua nút nhấn, không dây smartphone hoặc PC thông qua các chuẩn không dây (bluetooth, wifi, NFC, )
- Đọc tín hiệu âm thanh qua cổng usb của pc.
- Tích hợp phát nhạc trực tiếp từ SD Card hoặc USB có thêm các chức năng như máy nghe nhạc
- Bổ sung thêm cột led để nháy theo 2 mức âm thanh trái phải riêng biệt.
- Thiết kế mô hình với kích thước nhỏ gọn, kiểu dáng đẹp hơn.
Kết luận
Trong quá trình thực hiện đề tài này, chúng em đã nỗ lực phối hợp với sự hướng dẫn tận tình của cô Lê Thị Hồng Vân để hoàn thành dự án một cách tốt nhất Mặc dù còn tồn tại một số hạn chế trong khâu thiết kế, nhưng đề tài đã trở thành hành trang quý báu, giúp các sinh viên tự tin bước vào cuộc sống nghề nghiệp sau này.
Dù đã cố gắng hết sức, nhưng do giới hạn về thời gian và khả năng, bài viết có thể còn sai sót và cần hoàn thiện hơn Chúng tôi mong nhận được ý kiến đóng góp từ các thầy cô và bạn bè để nội dung trở nên chính xác và chất lượng hơn.
Trong báo cáo này, chúng em đã sử dụng các tài liệu tham khảo:
[1] “Giáo Trình Vi Điều Khiển” Của GV Phạm Hùng Kim Khánh
[2] Từ các trang web: www.dientuvietnam.net, codientu.org
[3] Vi điều khiển với lập trình C_Ngô Diên Tập
Trang Web tham khảo http://arduino.vn/bai-viet/369-giao-tiep-i2c-va-su-dung-module-realtime- clock-ds1307