Đồng hồ thời gian thực dựa trên Arduino này là đồng hồ kỹ thuật số để hiển thị thời gian thực bằng cách sử dụng IC RTC DS1307 hoạt động trên giao thức I2C. Đồng hồ thời gian thực có nghĩa là nó chạy ngay cả sau khi mất điện. Khi nguồn được kết nối lại, nó hiển thị thời gian thực tương ứng với thời gian và khoảng thời gian nó ở trạng thái tắt. Trong dự án đồng hồ báo thức Arduino này, chúng tôi đã sử dụng mô-đun LCD 16x2 để hiển thị thời gian ở định dạng - "giờ, phút, giây, ngày, tháng và năm". Tùy chọn Báo thức cũng được thêm vào và chúng tôi có thể thiết lập thời gian báo thức. Khi thời gian báo động, nó được lưu trong EEPROM bên trong của arduino, nó vẫn được lưu ngay cả sau khi đặt lại hoặc mất điện. Đồng hồ thời gian thực thường được sử dụng trong máy tính, nhà ở, văn phòng và thiết bị điện tử để cập nhật chúng theo thời gian thực.
Giao thức I2C là một phương pháp để kết nối hai hoặc nhiều thiết bị sử dụng hai dây vào một hệ thống duy nhất, và vì vậy giao thức này còn được gọi là giao thức hai dây. Nó có thể được sử dụng để giao tiếp 127 thiết bị với một thiết bị hoặc bộ xử lý. Hầu hết các thiết bị I2C chạy trên tần số 100Khz.
Các bước để ghi dữ liệu từ master đến slave (chế độ nhận slave)
- Gửi điều kiện START cho nô lệ.
- Gửi địa chỉ nô lệ cho nô lệ.
- Gửi bit ghi (0) tới slave.
- Đã nhận bit ACK từ nô lệ
- Gửi địa chỉ từ cho nô lệ.
- Đã nhận bit ACK từ nô lệ
- Gửi dữ liệu đến nô lệ.
- Đã nhận bit ACK từ nô lệ.
- Và cuối cùng gửi điều kiện STOP cho nô lệ.
Các bước đọc dữ liệu từ phụ đến chủ (chế độ truyền phụ)
- Gửi điều kiện START cho nô lệ.
- Gửi địa chỉ nô lệ cho nô lệ.
- Gửi bit đã đọc (1) tới slave.
- Đã nhận bit ACK từ nô lệ
- Đã nhận dữ liệu từ nô lệ
- Đã nhận bit ACK từ nô lệ.
- Gửi điều kiện STOP đến nô lệ.
Để xây dựng đồng hồ kỹ thuật số dựa trên vi mạch RTC DS1307 này , chúng tôi đã sử dụng Arduino Pro Mini ở đây, nhưng bạn cũng có thể sử dụng bất kỳ mô hình Arduino nào khác như Arduino Uno hoặc Arduino Nano. Cùng với bảng Arduino, IC DS1307 RTC, chúng tôi đã sử dụng mô-đun LCD 16x2 để hiển thị thời gian và ngày tháng, bộ thẩm thấu tinh thể, bộ điều chỉnh điện áp 7805, bộ rung và một số bóng bán dẫn và điện trở.
Sơ đồ mạch và mô tả
Trong mạch đồng hồ kỹ thuật số dựa trên Arduino này, chúng tôi đã sử dụng ba thành phần chính là IC DS1307, Arduino Pro Mini Board và mô-đun LCD 16x2.
Ở đây arduino được dùng để đọc thời gian từ ds1307 và hiển thị trên LCD 16x2. DS1307 gửi ngày / giờ bằng 2 dòng tới arduino. Một còi cũng được sử dụng để chỉ báo cảnh báo, tiếng bíp khi cảnh báo được kích hoạt. Sơ đồ khối được hiển thị bên dưới để hiểu hoạt động của Đồng hồ thời gian thực này.
Như bạn có thể thấy trong sơ đồ mạch, chân chip DS1307 SDA và SCL được kết nối với các chân SDA và SCL của arduino với điện trở kéo lên giữ giá trị mặc định CAO tại các dòng dữ liệu và xung nhịp. Bộ dao động tinh thể 32,768KHz được kết nối với chip DS1307 để tạo ra độ trễ chính xác 1 giây và pin 3 volt cũng được kết nối với chân 3 rd (BAT) của DS1307 giúp giữ thời gian chạy sau khi mất điện. LCD 16x2 được kết nối với arduino ở chế độ 4-bit. Chân điều khiển RS, RW và En được kết nối trực tiếp với chân 2, GND và 3. Còn chân dữ liệu D0-D7 của arduino được kết nối với 4, 5, 6, 7 của arduino. Một bộ rung được kết nối với chân arduino số 13 thông qua một bóng bán dẫn NPN BC547 có điện trở 1 k ở chân của nó.
Ba nút cụ thể là set, INC và Next được sử dụng để cài đặt cảnh báo cho chân 12, 11 và 10 của arduino ở chế độ hoạt động thấp. Khi chúng ta nhấn set, chế độ đặt báo thức sẽ kích hoạt và bây giờ chúng ta cần đặt báo thức bằng cách sử dụng nút INC và nút Tiếp theo được sử dụng để chuyển sang chữ số. Thiết lập bảng mạch hoàn chỉnh của đồng hồ thời gian thực có báo thức này được hiển thị trong hình ảnh bên dưới. Bạn cũng có thể kiểm tra hướng dẫn chi tiết về đồng hồ báo thức kỹ thuật số với vi điều khiển AVR.
Mô tả chương trình
Để lập trình cho đồng hồ thời gian thực này, chúng tôi đã sử dụng một số thư viện để trích xuất thời gian / ngày từ DS1307 và để hiển thị trên màn hình LCD, được đưa ra dưới đây:
Và việc khởi tạo RTC, LCD và đầu ra đầu vào được thực hiện trong vòng lặp thiết lập.
Những thứ còn lại như thời gian đọc sách, cài đặt báo thức được thực hiện trong phần void loop.