Trong Hướng dẫn Arduino này, chúng ta sẽ tìm hiểu cách sử dụng Mô-đun đồng hồ thời gian thực DS3231. Bạn có thể xem video sau hoặc đọc hướng dẫn dưới đây.
Tổng quan
Câu hỏi đầu tiên xuất hiện ở đây là tại sao chúng ta thực sự cần một RTC riêng cho Dự án Arduino của chúng ta khi bản thân Arduino có máy chấm công tích hợp. Vấn đề là mô-đun RTC chạy bằng pin và có thể theo dõi thời gian ngay cả khi chúng ta lập trình lại vi điều khiển hoặc ngắt kết nối nguồn chính.
DS3231 là Đồng hồ thời gian thực chi phí thấp, độ chính xác cao, có thể đọc giờ, phút và giây, cũng như thông tin về ngày, tháng và năm. Ngoài ra, nó có đọc tự động cho năm nhuận và những tháng với ít hơn 31 ngày.
Thông số kỹ thuật đồng hồ thời gian thực DS3231
Mô-đun có thể hoạt động trên 3,3 hoặc 5 V, điều này phù hợp với nhiều nền tảng phát triển hoặc vi điều khiển. Đầu vào nguồn là 3V và CR2032 3V thông thường có thể cung cấp nguồn điệm cho mô-đun và duy trì thông tin trong hơn một năm.
Mô-đun sử dụng Giao thức truyền thông I2C giúp kết nối với Board Arduino rất dễ dàng.
Đây là sơ đồ mạch:
Sơ đồ mạch đồng hồ thời gian thực Arduino và DS3231
Vì vậy, tất cả những gì chúng ta cần là 4 dây, chân VCC và GND để cấp nguồn cho mô-đun và hai chân giao tiếp I2C, SDA và SCL.
Các linh kiện cần thiết cho Hướng dẫn Arduino này:
- Đồng hồ thời gian thực DS3231
- Board Arduino
- Breadboard và dây dẫn
Lập trình
Khi chúng ta kết nối mô-đun, chúng ta cần lập trình Board Arduino để hoạt động với Đồng hồ thời gian thực. Tuy nhiên, khi nói đến việc lập trình giao tiếp giữa Arduino và mô-đun I2C, code không nhỏ và dễ dàng. May mắn thay, đã có một số thư viện cho DS3231 RTC có thể được tìm thấy trên internet.
Đối với hướng dẫn này, tôi đã chọn sử dụng Thư viện được tạo bởi Henning Karlsen, có thể tìm thấy và tải xuống từ trang web của anh ấy, www.rinkydinkelectronics.com .
Vì vậy, một khi tải xuống và cài đặt thư viện, chúng ta có thể sử dụng ví dụ demo đầu tiên để kích hoạt đồng hồ của mô-đun RTC. Trong phần thiết lập của code ví dụ demo, chúng ta có thể nhận thấy rằng có ba dòng mà chúng ta cần bỏ ghi chú để thiết lập ngày trong tuần, thời gian và dữ liệu đầu tiên.
// Code from the Demo Example of the DS3231 Library void setup() { // Setup Serial connection Serial.begin(115200); // Uncomment the next line if you are using an Arduino Leonardo //while (!Serial) {} // Initialize the rtc object rtc.begin(); // The following lines can be uncommented to set the date and time //rtc.setDOW(WEDNESDAY); // Set Day-of-Week to SUNDAY //rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format) //rtc.setDate(1, 1, 2014); // Set the date to January 1st, 2014 }
Dòng đầu tiên là để thiết lập ngày trong tuần, dòng thứ hai là để đặt thời gian theo giờ, phút và giây và dòng thứ ba là để đặt ngày theo ngày, tháng và năm.
Khi tải lên code này, chúng tôi cần chú thích lại ba dòng và tải lại code một lần nữa.
// Code from the Demo Example of the DS3231 Library void loop() { // Send Day-of-Week Serial.print(rtc.getDOWStr()); Serial.print(" "); // Send date Serial.print(rtc.getDateStr()); Serial.print(" -- "); // Send time Serial.println(rtc.getTimeStr()); // Wait one second before repeating delay (1000); }
Nếu chúng ta xem phần vòng lặp của code, chúng ta có thể thấy rằng bây giờ bằng cách sử dụng ba chức năng tùy chỉnh, chúng ta sẽ nhận được thông tin từ RTC và in chúng trong Trình giám sát nối tiếp. Đây là cách chúng xuất hiện trong Màn hình nối tiếp.
Kết quả giám sát nối tiếp DS3231 RTC
Bây giờ khi chúng ta ngắt kết nối nguồn Arduino, sau đó kết nối lại và chạy lại Màn hình nối tiếp, chúng ta có thể nhận thấy rằng thời gian vẫn tiếp tục mà không đặt lại.
Cuối cùng, Đồng hồ thời gian thực của chúng tôi đã hoàn thành và hoạt động và chúng tôi có thể sử dụng trong bất kỳ Dự án Arduino nào. Như một ví dụ thứ hai, tôi đã kết nối một màn hình LCD với Arduino và in thời gian và ngày trên đó.
Ví dụ về đồng hồ và màn hình LCD sử dụng Arduino điều khiển DS3231
Đây là mã nguồn của ví dụ này:
#include <DS3231.h> #include <LiquidCrystal.h> // includes the LiquidCrystal Library DS3231 rtc(SDA, SCL); LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) void setup() { rtc.begin(); // Initialize the rtc object lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display } } void loop() { lcd.setCursor(0,0); lcd.print("Time: "); lcd.print(rtc.getTimeStr()); lcd.setCursor(0,1); lcd.print("Date: "); lcd.print(rtc.getDateStr()); delay(1000); }
Dịch từ: https://howtomechatronics.com/tutorials/arduino/arduino-ds3231-real-time-clock-tutorial/
add cho mình hỏi, nếu ngưng cấp nguồn cho mạch ví dụ tgian là 30 phút, thì ds 3231 có tiếp tục duy trì thời gian để sau 30 phút cấp nguồn lại, màn hình hiển thị đúng thời gian k ạ
Có bạn #Việt ơi, có pin cúc để lưu thời gian kìa