Về cấu tạo, RTS thường được chia làm các phần chính sau: - Đồng hồ thời gian thực: Cung cấp thông tin thời gian thực.. 1.2.3 Xác định bài toán và giới hạn đề tàiHệ thống đồng hồ thời gia
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN
KHOA ĐIỆN ĐIỆN TỬ - -
Trang 2ĐỒ ÁN MÔN HỌC
HỆ THỐNG NHÚNG
TÊN ĐỀ TÀI THIẾT KẾ HỆ THỐNG NHÚNG ĐỒNG HỒ THỜI GIAN THỰC
Giảng viên hướng dẫn: Trần Xuân Tiến
Lê Tuấn Đạt Trần Tiến Đạt Lớp: 122221.3KS
Trang 3Mục lục
CHƯƠNG 1 3
PHÂN TÍCH HỆ THỐNG 3
1.1 Khảo sát và phân tích bài toán 3
1.1.1 Khái niệm về hệ thống thời gian thực 3
1.1.2 Các loại hệ thống thời gian thực 3
1.2 Lựa chọn giải pháp 4
1.2.1 Giải pháp công nghệ 4
1.2.3 Xác định bài toán và giới hạn đề tài 4
CHƯƠNG 2 6
THIẾT KẾ HỆ THỐNG 6
2.1 Sơ đồ khối tổng quát của hệ thống 6
2.2 Các module trong hệ thống 7
2.2.1 Module khối nguồn 7
2.2.2 Module điều khiển 7
2.2.3 Module hiển thị 7
2.2.4 Module tạo thời gian thực 8
2.2.5 Module xử lí 8
2.3 Lựa chọn linh kiện 8
2.3.1 Adruino Uno 8
2.3.2 IC DS1307 9
Trang 42.3.3 Màn hình LCD 11
2.4 Sơ đồ nguyên lí 12
2.5 Lưu đồ thuật toán 14
2.6 Điều khiển hệ thống 15
CHƯƠNG 3 21
KẾT LUẬN 21
3.1 Hoàn thiện sản phẩm 21
3.1.1 In mạch 21
3.1.2 Sản phẩm hoàn thiện 21
3.2 Kết luận 22
3.3 Phương hướng phát triển 23
Trang 5CHƯƠNG 1 PHÂN TÍCH HỆ THỐNG
1.1 Khảo sát và phân tích bài toán
1.1.1 Khái niệm về hệ thống thời gian thực
Hệ thống thời gian thực (Real-Time System) là một hệ thống máy tính được thiết
kế để xử lý dữ liệu đầu vào và phản hồi trong một khoảng thời gian xác định, thường làrất ngắn Điều quan trọng là tính đúng thời hạn của phản hồi: hệ thống không chỉ cần hoạtđộng chính xác, mà còn phải đảm bảo thực hiện các tác vụ đúng lúc
Về cấu tạo, RTS thường được chia làm các phần chính sau:
- Đồng hồ thời gian thực: Cung cấp thông tin thời gian thực
- Bộ điều khiển ngắt: Quản lý các biến cố không theo chu kỳ
- Bộ định hiểu: Quản lý các quá trình thực hiện
- Bộ quản lý tài nguyên: Cung cấp các tài nguyên máy tính
- Bộ điều khiển thực hiện: Khởi động các tiến trình
1.1.2 Các loại hệ thống thời gian thực
Các RTS thường được chia làm hệ thống thời gian thực cứng và hệ thống thời gianthực mềm:
Hệ thống thời gian thực cứng là hệ thống trong đó mọi tác vụ đều phải hoàn thànhtrong một khoảng thời gian giới hạn nghiêm ngặt đã định trước (deadline) Việc bỏ lỡthời hạn xử lý dù chỉ một lần có thể dẫn đến hậu quả nghiêm trọng, thậm chí thảm họacho con người, tài sản hoặc môi trường
Ngược lại, hệ thống thời gian thực mềm là hệ thống trong đó các tác vụ nên đượchoàn thành đúng thời hạn (deadline), nhưng việc trễ hạn không gây hậu quả nghiêm trọng
Trang 6đến hệ thống Hiệu suất hệ thống có thể giảm sút, nhưng hệ thống vẫn tiếp tục hoạt độngbình thường.
Trong hai loại này, máy tính thường can thiệp trực tiếp hoặc gián tiếp đến các thiết
bị vật lý để kiểm soát cũng như đièu khiển sự hoạt động của thiết bị này Đứng trên góc
độ này người ta chia các RTS ra làm hai loại sau:
- Hệ thống nhúng: Bộ xử lý điều khiển là một phần trong toàn bộ thiết bị , nó đượcsản xuất trọn gói từ yếu tố cứng từ nhà máy , người ta sử dụng không biết về chi tiết của
nó mà thông qua các nút điều khiển, các bảng số
- Loại thứ hai là bao gồm những hệ thống có sự can thiệp của máy tính thôngthường Thông qua máy tính ta hoàn toàn có thể kiểm soát cũng như điều khiển mọi hoạtđộng của thiết bị phần cứng trên hệ thống này
Trang 71.2.3 Xác định bài toán và giới hạn đề tài
Hệ thống đồng hồ thời gian thực hiển thị thời gian, ngày tháng:
- Đầu vào dữ liệu lấy từ DS1307, là IC thời gian nhằm cung cấp giờ cho hệ thống.Đầu ra được hiển thị trên màn LCD
- Hiển thị chính xác thực, ngày tháng
- Làm việc lâu dài ổn định
- Dễ dàng quan sát, sử dụng
Trang 8CHƯƠNG 2 THIẾT KẾ HỆ THỐNG
2.1 Sơ đồ khối tổng quát của hệ thống
Hình 2.1 Sơ đồ tổng quất của hệ thống đồng hồ thời gian thực
Khối nguồn: Cung cấp nguồn cho hệ thống
Khối hiển thị: Lấy tín hiệu từ chân IC để hiện thị thời gian, ngày tháng
Trang 9Khối tạo thời gian thực: Cung cấp thông tin về thời gian, ngày tháng
Khối xử lí: Dùng Adruino để lấy tín hiệu từ khối điều khiển, tạo xung giao động,tạo thời gian thực,… và đưa ra khối hiển thị
Khối điều khiển: Gồm các nút ấn có tác dụng điều chỉnh thời gian, ngày thángtrong mạch
2.2 Các module trong hệ thống
2.2.1 Module khối nguồn
Đây là module cấp nguồn cho hệ thống nhằm cung cấp điện áp chuẩn 5V
- Yêu cầu đối với khối này:
+ Có thể lấy nguồn từ điện áp xoay chiều (hoặc pin ) để cấp nguồn cho hệ thống+ Điện áp ra của khối luôn ổn định tại mọi thời điểm
Với các yêu cầu như trên ta lựa chọn sử dụng pin để cung cấp nguồn cho hệ thống
2.2.2 Module điều khiển
Module dùng để điều khiển hệ thống Yêu cầu:
+ Thiết lập được cho vi điều khiển là có thể làm việc bình thường hoặc chuyểnsang chế độ cài đặt thời gian
+ Điều chỉnh tăng(giảm) thời gian, ngày tháng
Vây ta lựa chọn bộ điều khiển gồm 2 nút nhấn
Trang 10Lựa chọn hiển thị qua màn LCD
2.2.4 Module tạo thời gian thực
IC thời gian thực cần hoạt động với nguồn cung cấp nhỏ, dùng để cập nhật thờigian và ngày tháng
Khi mất nguồn IC thời gian thực vẫn duy trì hoạt động không cần điều chỉnh lạithời gian
Lựa chọn IC thời gian thực là IC DS1307
2.2.5 Module xử lí
Dùng vi điều khiển để lấy tín hiệu từ khối điều khiển, tạo thời gian thực,… và đưa
ra khối hiển thị Yêu cầu:
Trang 11+ Vi điều khiển (MCU): Là "bộ não" của Arduino, ví dụ: ATmega328P trênArduino Uno Nó xử lý lệnh và điều khiển hoạt động của toàn bộ bo mạch.
+ Chân Digital I/O: Dùng để đọc hoặc xuất tín hiệu số (0 hoặc 1) Một số chân hỗtrợ PWM (giả lập tín hiệu analog)
+ Chân Analog Input: Dùng để đọc tín hiệu analog (từ cảm biến) và chuyển thànhgiá trị số
+ Nguồn điện: Cung cấp điện cho Arduino (qua cổng USB hoặc jack nguồn ngoài7–12V)
+ GND (Ground): Chân nối đất – cần thiết để hoàn thiện mạch điện
+ Chân 5V và 3.3V: Cung cấp nguồn cho các thiết bị ngoại vi
+ Crystal Oscillator (Thạch anh): Tạo xung nhịp ổn định để vi điều khiển hoạtđộng chính xác
+ Cổng USB: Kết nối Arduino với máy tính để lập trình và cấp nguồn
+ IC Giao tiếp USB–Serial: Chuyển đổi tín hiệu USB thành UART để vi điềukhiển hiểu được
+ Nút Reset: Đặt lại chương trình đang chạy trên Arduino
Chức năng của Adruino:
+ Nhận dữ liệu từ cảm biến (nhiệt độ, ánh sáng, cử động, v.v.)
+ Điều khiển LED, động cơ, relay, màn hình,
+ Có thể giao tiếp qua UART, I2C, SPI, với các thiết bị khác
+ Tạo ra các hệ thống như nhà thông minh, điều khiển nhiệt độ, robot,
+ Kết hợp với module WiFi (như ESP8266, ESP32) để truyền dữ liệu lên mạng
2.3.2 IC DS1307
a) Giới thiệu về IC DS1307
Trang 12Hình 2.3 IC DS1307
IC thời gian thực là họ vi điều khiển của hãng Dalat DS1307 có một số đặc trưng
cơ bản như sau:
+ DS1307 là IC thời gian thực với nguồn cung cấp nhỏ để cập nhật thời gian vàngày tháng
+ SRAM: 56 bytes
+ Dữ liệu và địa chỉ được truyền nối tiếp qua 2 đường bus 2 chiều
+ DS1307 có 7 byte dữ liệu nằm từ địa chỉ 0x00 đến 0x06, 1 byte điều khiển và 56byte lưu trữ
+ Khi xử lí dữ liệu từ DS1307, họ đã tự chuyển cho ta về dạng số BCD, ví dụ như
ta đọc được dữ liệu từ địa chi 0x04( tương ứng với Day- ngày trong tháng) và tại 0x05 là0x15,0x11
b) Cơ chế hoạt động và chức năng
Ghi nhớ thời gian thực:
- DS1307 duy trì thời gian (giây, phút, giờ, ngày, tháng, năm, thứ) theo chuẩn lịchdương lịch (Gregorian)
- Có cơ chế bù năm nhuận, giúp giữ thời gian chính xác
Nguồn nuôi dự phòng:
- DS1307 có pin CMOS (thường là pin CR2032) để duy trì thời gian ngay cả khimất nguồn chính
Trang 13- Khi mất điện, nó tự động chuyển sang dùng nguồn từ pin dự phòng.
Giao tiếp I2C:
- IC này giao tiếp với vi điều khiển qua bus I2C (TWI)
- Địa chỉ I2C mặc định: 0x68 (hoặc 0xD0 với 8 bit)
- Tốc độ giao tiếp thông thường là 100kHz
- Lớp tinh thể lỏng (Liquid Crystal Layer)
- Lớp điện cực trong suốt (Transparent Electrodes)
- Bộ lọc phân cực (Polarizer)
- Mạch điều khiển (Controller)
- Backlight (đèn nền)
- Bo mạch và các chân kết nối
Trang 14Chức năng của LCD
Hiển thị ký tự và số:
- LCD như 16x2 có thể hiển thị 2 dòng, mỗi dòng 16 ký tự (tổng 32 ký tự)
- Thích hợp để hiển thị văn bản, số liệu cảm biến, trạng thái hệ thống,
Hiển thị thông tin theo thời gian thực:
- Thường dùng để hiển thị thời gian, nhiệt độ, độ ẩm, thông điệp điều khiển, Giao tiếp với vi điều khiển:
- LCD nhận lệnh từ vi điều khiển để hiển thị dữ liệu cụ thể Có thể dùng giao tiếpsong song hoặc I2C (tiết kiệm chân)
2.4 Sơ đồ nguyên lí
Sau khi lựa chọn linh kiện và nghiên cứu nhóm đưa ra được sơ đồ nguyên lí nhưsau:
Hình 2.5 Sơ đồ nguyên lí của đồng hồ thời gian thực hiển thị thời gian, ngày tháng
Cơ chế hoạt động của mạch:
Trang 15Khi cấp nguồn, Arduino khởi tạo các thiết bị ngoại vi: RTC, LCD, và cài đặtI2C.Arduino đọc thời gian hiện tại từ DS1307 thông qua giao tiếp I2C.Thời gian đọcđược sẽ được hiển thị lên LCD.LCD luôn hiển thị thời gian được cập nhật liên tục từRTC:Dòng 1: Hiển thị giờ, phút, giây.Dòng 2: Hiển thị ngày, tháng, năm.Việc hiển thịkhông gây trễ vì thời gian được cập nhật theo chu kỳ lặp.Người dùng có thể điều chỉnhthời gian.Nhấn SET:Mỗi lần nhấn sẽ chuyển sang chỉnh: Giờ → Phút → Giây → Ngày
→ Tháng → Năm → Thoát.Arduino ghi nhận trạng thái hiện tại để biết đang chỉnh phầnnào.Nhấn TĂNG hoặc GIẢM:Tăng/giảm giá trị thời gian tại phần đang được chỉnh (VD:giờ lên 1 đơn vị).Arduino cập nhật giá trị tạm thời trong bộ nhớ.Khi thoát chế độ chỉnh,Arduino ghi toàn bộ thời gian mới vào RTC, cập nhật dữ liệu để lưu trữ lâu dài (dù mấtđiện vẫn giữ được)
Trang 162.5 Lưu đồ thuật toán
Hình 2.6 Lưu đồ thuật toán của đồng hồ thời gian thực
Trang 17const int btnSet = 2;
const int btnUp = 3;
const int btnDown = 4;
int mode = 0; // 0: hiển thị, 1~6: cài đặt
int hourSet, minuteSet, secondSet, daySet, monthSet, yearSet;
Trang 19if (mode == 1) hourSet = (hourSet + 1) % 24;
else if (mode == 2) minuteSet = (minuteSet + 1) % 60; else if (mode == 3) secondSet = (secondSet + 1) % 60; else if (mode == 4) daySet = (daySet % 31) + 1;
else if (mode == 5) monthSet = (monthSet % 12) + 1; else if (mode == 6) yearSet++;
}
if (digitalRead(btnDown) == LOW) {
delay(200);
if (mode == 1) hourSet = (hourSet + 23) % 24;
else if (mode == 2) minuteSet = (minuteSet + 59) % 60; else if (mode == 3) secondSet = (secondSet + 59) % 60; else if (mode == 4) daySet = (daySet + 29) % 31 + 1; else if (mode == 5) monthSet = (monthSet + 10) % 12 + 1; else if (mode == 6) yearSet ;
Trang 20lcd.print("Set ");
switch (mode) {
case 1: lcd.print("Hour "); break; case 2: lcd.print("Minute "); break; case 3: lcd.print("Second "); break; case 4: lcd.print("Day "); break; case 5: lcd.print("Month "); break; case 6: lcd.print("Year "); break; }
lcd.setCursor(0, 1);
lcd.print("Val: ");
switch (mode) {
case 1: lcd.print(hourSet); break;
case 2: lcd.print(minuteSet); break;
case 3: lcd.print(secondSet); break;
case 4: lcd.print(daySet); break;
case 5: lcd.print(monthSet); break;
case 6: lcd.print(yearSet); break;
Trang 21void displayTime(DateTime now) {
String getWeekday(int dayOfWeek) {
const char* days[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
Khi hệ thống khởi động, Arduino khởi tạo các thiết bị cần thiết như I2C, LCD vàRTC Nếu RTC chưa có dữ liệu, chương trình sẽ tự động đặt thời gian hiện tại theo thờigian biên dịch của chương trình Sau đó, Arduino bắt đầu thực hiện vòng lặp chính(loop)
Trang 22Trong vòng lặp, nếu người dùng không nhấn nút SET, chương trình sẽ đọc thờigian từ RTC mỗi giây và hiển thị ra LCD: dòng 1 hiển thị thứ và ngày/tháng/năm, dòng 2hiển thị giờ:phút:giây Điều này giúp cập nhật thời gian liên tục giống như một chiếcđồng hồ điện tử.
Khi người dùng nhấn nút SET, chương trình sẽ chuyển sang chế độ cài đặt thờigian, bắt đầu từ giờ, sau đó lần lượt qua phút, giây, ngày, tháng, và năm Ở mỗi bước,người dùng có thể dùng nút TĂNG để tăng giá trị, hoặc GIẢM để giảm Các nút đều có
xử lý chống dội bằng delay
Sau khi chỉnh xong tất cả các giá trị, nếu người dùng nhấn nút SET thêm lần nữa,chương trình sẽ ghi lại thời gian đã chỉnh vào bộ nhớ RTC, đảm bảo lần sau khởi động lại
hệ thống vẫn giữ đúng giờ Sau đó, chương trình quay về chế độ hiển thị bình thường
Cả quá trình điều khiển, hiển thị và chỉnh giờ được vận hành trơn tru nhờ Arduinođọc các trạng thái nút nhấn, điều khiển giao tiếp I2C với RTC và LCD, và xử lý logicchuyển chế độ một cách mạch lạc
Trang 23CHƯƠNG 3 KẾT LUẬN
3.1 Hoàn thiện sản phẩm
3.1.1 In mạch
Sau khi nghiên cứu nhóm bắt đầu làm mạch in :
Hình 3.1 Mạch in của hệ thống đồng hồ thời gian thực
Trang 24+ Hệ thống đồng hồ thời gian thực sử dụng Arduino Uno đã được thiết kế và hoạtđộng ổn định, hiển thị đúng giờ, phút, giây và ngày tháng Việc ứng dụng module RTCgiúp đảm bảo tính chính xác và duy trì thời gian ngay cả khi mất điện.
Đánh giá:
+ Hệ thống đơn giản, dễ thực hiện và chi phí thấp
+ Phù hợp cho học tập, nghiên cứu và ứng dụng thực tế
+ Có thể mở rộng thêm các chức năng như báo thức, điều khiển thiết bị theo thờigian
Hạn chế: giao diện còn đơn giản, chưa có tính năng đồng bộ thời gian qua internet
3.3 Phương hướng phát triển
• Tích hợp báo thức hoặc hẹn giờ điều khiển thiết bị tự động
• Hiển thị thời gian qua ứng dụng điện thoại bằng kết nối Bluetooth hoặc Wi-Fi
• Đồng bộ thời gian qua Internet (NTP) sử dụng module ESP8266/ESP32
• Nâng cấp giao diện hiển thị bằng màn hình màu TFT hoặc cảm ứng
Thiết kế vỏ hộp hoàn chỉnh để ứng dụng làm sản phẩm thực tế