Mạch Điện

Giao tiếp Mạch thời gian thực RTC DS3231 với Arduino tạo Đồng hồ kỹ thuật số

Trong thế giới ngày nay, thời gian là tất cả, và khi nói đến thiết bị điện tử cụ thể, thời gian là rất quan trọng; giống như chúng ta, con người, họ cũng cần một cách để theo dõi thời gian. Vậy tạo Đồng hồ kỹ thuật số phải làm thế nào? Câu trả lời là Mạch thời gian thực RTC DS3231 , Đồng hồ thời gian thực, thường được gọi là RTC, là một thiết timekeeping được tích hợp trong một vi mạch hay còn gọi là IC. Nó được sử dụng trong nhiều ứng dụng và thiết bị quan trọng về thời gian, chẳng hạn như máy chủ, GPS và Thiết bị lưu trữ dữ liệu. Nào hãy tham khảo bên dưới với  hocdientu nhé !

Giao tiếp Mạch thời gian thực RTC DS3231 với Arduino tạo Đồng hồ kỹ thuật số
Giao tiếp Mạch thời gian thực RTC DS3231 với Arduino tạo Đồng hồ kỹ thuật số

Ở đây Timekeeping (Giờ hiện hành) là một chức năng hiển thị giờ hiện tại chính xác tuyệt đối với các loại sản phẩm đồng hồ hoặc không phải đồng hồ. Sau khi nhận tín hiệu, đồng hồ sẽ tự động điều chỉnh lại thời gian của bản thân

Giới thiệu Mạch thời gian thực RTC DS3231

DS3231 là đồng hồ thời gian thực I2C (RTC) với bộ dao động tinh thể bù nhiệt độ sẵn có (TCXO) và tinh thể có chi phí thấp và đặc biệt chính xác. Khi nguồn điện của mô-đun bị ngắt, thiết bị có đầu vào pin và giữ thời gian chính xác. Độ chính xác lâu dài của thiết bị được cải thiện bằng cách đưa vào bộ dao động tinh thể. RTC theo dõi giây, phút, giờ, ngày, tháng, và năm. Đối với những tháng có ít hơn 31 ngày, ngày vào cuối tháng sẽ tự động được sửa đổi, bao gồm cả việc sửa đổi năm nhuận. Đồng hồ có chỉ báo AM / PM và hoạt động ở chế độ 24 giờ hoặc 12 giờ. Hai báo thức thời gian trong ngày có thể lập trình được cũng như một đầu ra sóng vuông có thể lập trình được. Một bus hai chiều I2C được sử dụng để vận chuyển địa chỉ và dữ liệu tuần tự.

Sơ đồ Mạch thời gian thực RTC DS3231

Module DS3231 có 6 chân để lấy dữ liệu từ module và cấp nguồn cho bo mạch. Sơ đồ chân của DS3231 như sau: –

Sơ đồ Mạch thời gian thực RTC DS3231
Sơ đồ Mạch thời gian thực RTC DS3231

32K : Đầu ra dao động 32K

SQW  : Chân đầu ra sóng vuông

SCL : Chân Thiết bị Master tạo xung tín hiệu SCK và cung cấp cho Slave  (giao tiếp I2C)

SDA : Chân Truyền thông nối tiếp (giao tiếp I2C)

VCC : Kết nối với cực dương của nguồn điện

GND : Chân nối đất

Khi chúng ta đo chân 32k của Module Thời Gian Thực RTC DS3231 bằng Máy hiện sóng, chúng ta nhận được tín hiệu 32kHz từ bộ dao động bên trong của IC.

Sơ đồ Mạch thời gian thực RTC DS3231

Các bộ phận Module Thời Gian Thực RTC DS3231

Các Linh kiện quan trọng của Module Thời Gian Thực RTC DS3231 điển hình là IC DS3231 và IC AT24C32 EEPROM để lưu trữ dữ liệu ngày và giờ. Các Linh kiện khác bao gồm đèn LED BẬT nguồn, một vài điện trở, tụ điện, giá đỡ pin và chân để kết nối với bộ vi điều khiển.

Các bộ phận Module Thời Gian Thực RTC DS3231
Các bộ phận Module Thời Gian Thực RTC DS3231

Khi ngắt nguồn cấp Module Thời Gian Thực RTC DS3231 có pin dự phòng và duy trì thời gian chính xác. Mạch cảm biến nguồn tích hợp liên tục kiểm tra tình trạng của VCC để xác định tình trạng mất điện và tự động chuyển sang nguồn dự phòng. Vì vậy, ngay cả khi mất điện, MCU của bạn vẫn có thể duy trì theo dõi thời gian. Trên Module Thời Gian Thực RTC DS3231, VÌ nó có một pin CR2032. Đây là pin lithium 20mm 3V nằm ở mặt dưới cùng của bo mạch.

Khả năng sạc:

Module  được thiết kế theo cách mà khi được cấp nguồn bên ngoài, nó có thể sạc pin được lắp trên mô-đun. Nhưng người ta phải cẩn thận khi sử dụng Cell CR2032 không thể sạc lại, vì mô-đun không phân biệt được và nó sẽ sạc pin. CR2032 là một cell 3V không thể sạc lại được, nhưng một cell sạc lại có thể được sạc đến 4,2V. Để ngăn mô-đun sạc pin không thể sạc lại CR2032, Điện trở U4 (220R) hoặc Diode D1 (1N4148) nên loại bỏ.

Các câu hỏi thường gặp về Module Thời Gian Thực RTC DS3231

Q. Sự khác biệt giữa DS1307 và DS3231 là gì?

Sự khác biệt đáng kể nhất giữa DS3231 và DS1370 là độ chính xác của timekeeping . Đối với timekeeping  , DS1307 có bộ dao động tinh thể 32kHz bên ngoài, trong khi DS3231 có bộ dao động bên trong.

Q. DS3231 chính xác như thế nào?

Bộ dao động tinh thể bù nhiệt độ (TCXO) trong DS3231 và DS3234 , với độ chính xác tốt tới ± 2 ppm trong nhiệt độ từ 0 ° C đến + 40 ° C.

Q. DS3231 sử dụng pin gì?

DS3231 sử dụng một tế bào có thể sạc lại CR2032 nhưng nếu người ta muốn sử dụng một Cell  không thể sạc lại, một sửa đổi nhỏ sẽ được thực hiện đối với mô-đun.

Sơ đồ Nguyên lý Module Thời Gian Thực RTC DS3231

Sơ đồ Nguyên lý Module Thời Gian Thực RTC DS3231
Sơ đồ Nguyên lý Module Thời Gian Thực RTC DS3231

Giao tiếp Mạch thời gian thực RTC DS3231 với Arduino

Thiết lập thời gian trong Module Thời Gian Thực RTC DS3231 khá đơn giản. Tất cả những gì bạn cần làm là kết nối nó với Arduino trong cấu hình bên dưới.

Giao tiếp Mạch thời gian thực RTC DS3231 với Arduino
Giao tiếp Mạch thời gian thực RTC DS3231 với Arduino

Sau khi thực hiện các kết nối trên, bạn cần kết nối Arduino UNO với PC của mình, mở Arduino IDE và cài đặt Thư viện bộ thời gian Arduino DS3231. Mở Arduino IDE và chọn Trình quản lý thư viện từ thanh menu. Bây giờ hãy tìm RTCLib và DS3231 và tải phiên bản mới nhất, như thể hiện trong hình bên dưới.

Arduino IDE và cài đặt Thư viện bộ thời gian Arduino DS3231
Arduino IDE và cài đặt Thư viện bộ thời gian Arduino DS3231

Code cài đặt thời gian trong DS3231

Code này khá đơn giản. Nó sẽ đặt thời gian và sau đó hiển thị trên serial monitor.

rtc.adjust (DateTime (F (__ DATE __), F (__ TIME__)));

Đối tượng rtc đặt thời gian theo thời gian trên máy tính của bạn trong dòng này. Nó sẽ thay đổi thời gian đồng hồ hiện tại của hệ thống của bạn.

rtc.adjust (DateTime (2014, 1, 21, 3, 0, 0));

Bạn có thể đặt thời gian trong dòng này theo cách thủ công bằng cách chuyển giá trị ngày-giờ cho hàm theo thứ tự sau: năm, tháng, ngày, giờ, phút và giây. chúng ta sẽ đặt thời gian của hệ thống trong đoạn Code bên dưới. Kết quả là, chúng ta đã nhận xét ra dòng này.

#include <RTClib.h>
#include <Wire.h>
RTC_DS3231 rtc;
char t [32];
void setup ()
{
  Serial.begin (9600);
  Wire.begin ();
  rtc.begin ();
  rtc.adjust (DateTime (F (__ DATE __), F (__ TIME__)));
  //rtc.adjust(DateTime(2019, 1, 21, 5, 0, 0));
}
void loop ()
{
  DateTime now = rtc.now ();
  sprintf (t, "% 02d:% 02d:% 02d% 02d /% 02d /% 02d", now.hour (), now.minute (), now.second (), now.day (), now.month (), bây giờ.year ());  
  Serial.print (F ("Ngày / Giờ:"));
  Serial.println (t);
  chậm trễ (1000);
}

Tạo đồng hồ kỹ thuật số Arduino bằng cách sử dụng DS3231 và LCD

Linh kiện cần thiết:

  • Arduino Uno
  • Mô-đun RTC DS3231
  • Màn hình LCD 16 * 2
  • Dây kết nối
  • Biến Trở Chỉnh Tay 10K
  • Pin đồng xu 3V (CR2032)

Sơ đồ mạch kết nối Module Thời Gian Thực RTC DS3231 với Arduio và LCD

Sơ đồ mạch kết nối Module Thời Gian Thực RTC DS3231 với Arduio và LCD
Sơ đồ mạch kết nối Module Thời Gian Thực RTC DS3231 với Arduio và LCD
  • Kết nối SCL của mô-đun RTC với Arduino A5
  • Kết nối SDA của mô-đun RTC với Arduino A4
  • Kết nối VCC với 5v và GND với GND
  • Kết nối RS của LCD với chân 7 của Arduino
  • Kết nối E của LCD với chân 6 của Arduino
  • Kết nối D7 của LCD với chân 2 của Arduino
  • Kết nối D6 của LCD với chân 3 của Arduino
  • Kết nối D5 của LCD với chân 4 của Arduino
  • Kết nối D4 của LCD với chân 5 của Arduino
  • Kết nối VSS, K, RW, D0, D1, D2, D3 với GND
  • Kết nối VDD & A với 5v
  • Kết nối VO với chân đầu ra chiết áp (Để kiểm soát độ tương phản của văn bản)

Code hiển thị thời gian trên màn hình LCD

Chúng ta bao gồm các tệp  dưới vào Code, Wire.h để sử dụng I2C để giao tiếp với mô-đun, LiquidCrystal.h để hiển thị thời gian trên màn hình LCD, RTClib.h để đặt thời gian cho màn hình và định dạng nó.

#include <Wire.h>
#include <LiquidCrystal.h>
#include <RTClib.h>

Dòng này trong Code chỉ định chân nào của màn hình LCD được kết nối với chân nào của Arduino.

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (rs, e, d4, d5, d6, d7)

Nếu project được khởi động với một số gián đoạn trong kết nối, Code sẽ in ra là Mô-đun RTC không được hiển thị, trong serial monitor.

if (! rtc.begin())
  {
    Serial.println(" RTC Module not Present");
    while (1);
  }

Nếu trong trường hợp RTC mất điện và thời gian trong mô-đun bị sai, Code sẽ tự động đặt thời gian trong mô-đun và nó sẽ lấy thời gian từ đồng hồ của máy tính. Vì vậy, hãy đảm bảo rằng trong khi cài đặt thời gian, đồng hồ trên PC của bạn được đặt vào đúng thời điểm.

if (rtc.lostPower())
  {
    Serial.println("RTC power failure, reset the time!");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }

Phần Code này đặt con trỏ trên màn hình LCD thành 0 và in ngày ở định dạng Ngày / Tháng / Năm.

void displayDate()
 {
  lcd.setCursor(0,0);
  lcd.print("Date:");
  lcd.print(now.day());
  lcd.print('/');
  lcd.print(now.month());
  lcd.print('/');
  lcd.print(now.year());
 }

Phần Code này đặt con trỏ thành 1 và in thời gian ở định dạng Giờ: Phút: Giây.

 void displayTime()
 {
  lcd.setCursor(0,1);
  lcd.print("Time:");
  lcd.print(now.hour());
  lcd.print(':');
  lcd.print(now.minute());
  lcd.print(':');
  lcd.print(now.second());
  lcd.print("    ");
 }

Module thời gian thực DS3231 Arduino Code

#include <Wire.h>
#include <LiquidCrystal.h>
#include <RTClib.h>
DateTime now;
RTC_DS3231 rtc;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (rs, e, d4, d5, d6, d7)
void displayDate(void);
void displayTime(void); 
void setup ()
{
Serial.begin(9600);
lcd.begin(16,2);
if (! rtc.begin()) 
{
Serial.println(" RTC Module not Present");
while (1);
}
if (rtc.lostPower()) 
{
Serial.println("RTC power failure, reset the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop () 
{
now = rtc.now();
displayDate();
displayTime();
}
void displayDate()
{
lcd.setCursor(0,0);
lcd.print("Date:");
lcd.print(now.day());
lcd.print('/');
lcd.print(now.month());
lcd.print('/');
lcd.print(now.year());
}
void displayTime()
{
lcd.setCursor(0,1);
lcd.print("Time:");
lcd.print(now.hour());
lcd.print(':');
lcd.print(now.minute());
lcd.print(':');
lcd.print(now.second());
lcd.print(" ");
} 

To set the Time
#include <RTClib.h>
#include <Wire.h>
RTC_DS3231 rtc;
char t[32];
void setup() 
{
Serial.begin(9600);
Wire.begin();
rtc.begin();
rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
//rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0)); 
}
void loop()
{
DateTime now = rtc.now();
sprintf(t, "%02d:%02d:%02d %02d/%02d/%02d", now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year()); 
Serial.print(F("Date/Time: "));
Serial.println(t);
delay(1000);
}

Video Giao tiếp Mạch thời gian thực RTC DS3231 với Arduino tạo Đồng hồ kỹ thuật số

Đỗ Thủy Học Điện Tử

Tôi một người đam mê cung cấp kiến thức cuộc sống và kiến thức giáo dục văn học , vật lý , điện tử đến cho mọi người hãy cùng tôi tiếp nhận kiến thức mới nhé !

Trả lời

Email của bạn sẽ không được hiển thị công khai.

Back to top button