Arduino和DS3231实时时钟教程

在这个Arduino教程中,我们将学习如何使用DS3231实时时钟模块。您可以观看以下视频或阅读下面的书面教程。

概述


第一个问题是,当Arduino本身有内置计时器时,为什么我们实际上需要一个单独的RTC为我们的Arduino项目。重点是,RTC模块运行在电池上,可以跟踪时间,即使我们重新编程微控制器或断开主电源。

DS3231实时时钟

DS3231实时时钟


DS3231是一种低成本,高精度的实时时钟,可以维护小时,分钟和秒,以及日,月和年的信息。此外,它还对闰年和少于31天的月份提供自动补偿。

DS3231实时时钟规格

该模块可以工作在3.3或5 V,这使得它适合许多开发平台或微控制器。电池输入为3V,一个典型的CR2032 3V电池可以为模块供电并维护信息一年以上。

模块使用I2C通信协议这使得连接Arduino板非常容易。

这是电路原理图:

Arduino和DS3231实时时钟电路原理图

所以我们需要的是4根线,VCC和GND引脚为模块供电,以及两个I2C通信引脚,SDA和SCL。

你可以从下面的链接获得这个Arduino教程所需的组件:

yaboAG娱乐城披露:这些是附属链接。作为一名亚马逊助理,我的收入来自符合条件的购买。

编程


一旦我们连接模块,我们需要编程Arduino板以使用实时时钟。但是,在编程Arduino和I2C模块之间的沟通时,代码并不小且简单。幸运的是,可以在互联网上找到DS3231 RTC的几个图书馆。

在本教程中,我选择使用Henning Karlsen制作的库,可以从他的网站上找到并下载,www.rinkydinkyabo7. comelectronics.com

因此,一旦我们下载并安装了库,我们就可以使用它的第一个演示示例来初始化激活RTC模块的时钟。在演示示例代码的setup部分,我们可以注意到有三行代码需要取消注释,以便最初设置星期几、时间和数据。

// DS3231库的演示代码void setup() {// setup Serial connection Serial.begin(115200);//如果使用Arduino Leonardo,则取消下一行的注释//while (!Serial) {}//下面的行可以被取消注释来设置日期和时间//设置rtc为星期日。凝固时间(12,0,0);//设置时间为12:00:00(24小时格式)//rtc。设置当前日期(1,1,2014);//设置日期为2014年1月1日}

第一行用于设置星期几,第二行用于设置以小时、分钟和秒为单位的时间,第三行用于设置以天、月和年为单位的日期。

一旦我们上传了这段代码,我们需要注释回这三行并重新上传代码。

// DS3231库的演示代码void loop(){//发送星期的Serial.print(rtc.getDOWStr());系列。打印(" ");//发送日期Serial.print(rtc.getDateStr());系列。打印(“-”);//发送时间串行。println(rtc.getTimeStr());//在重复延迟(1000)之前等待一秒;}

如果我们查看代码的循环部分,我们可以看到现在使用三种自定义功能,我们从RTC获取信息并在串行监视器中打印它们。以下是它们在串行监视器中出现的方式。

DS3231 RTC串行监视器结果

现在,即使我们断开Arduino电源然后重新连接并再次运行串行监视器,我们就可以注意到时间不断地进行,而不重置。

现在我们有了实时时钟可以在任何Arduino项目中使用。作为第二个例子,我将一个LCD连接到Arduino,并在上面打印时间和日期。

Arduino DS3231实时时钟和LCD示例

下面是这个例子的源代码:

/* * Arduino DS3231实时时钟模块教程* *由Dejan Nedelkovski创建,* www.HowToMechatronics.com * * DS3231库由亚搏手机版官方下载Henning Karlsen制作,可以从他的网站上找到并下载,www.rinkydinkelectronics.com。yabo7. com* */ #include  #include < lcd .h> //包含液晶库DS3231 rtc(SDA, SCL);液晶显示(1,2,4,5,6,7);//创建一个LC对象。参数:(rs, enable, d4, d5, d6, d7) void setup() {rtc.begin();//初始化rtc对象lcd.begin(16,2);void loop() {LCD . setcursor(0,0); //初始化LCD屏幕的接口,并指定显示的尺寸(宽度和高度)液晶显示器。打印(“:”);lcd.print (rtc.getTimeStr ()); lcd.setCursor(0,1); lcd.print("Date: "); lcd.print(rtc.getDateStr()); delay(1000); }

这就是本Arduino教程的全部内容,欢迎在评论部分提出任何问题。

45的反应

  1. 穆罕默德Radwan


    你能帮我个忙吗?
    我想让Arduino更新移动SIM卡上的实时时钟,就像手机总是更新移动网络上的实时时钟一样。
    它可以适用吗?
    谢谢你的帮助

    回复
  2. 智能Ejeka

    你好,
    你能帮我吗?
    我想开发一个与医药药盒连接的android医药提醒应用程序,首先我不知道arduino和编译器的名字也运行它。如何链接我的android应用程序到arduino?我还在用Java学习android编程。你能帮我一下吗

    回复
    • Dejan Nedelkovski.

      你好,
      当然,你需要一些编程和Arduino方面的知识才能做这样的项目。我不知道我能帮到你什么,除了告诉你从一开始就看一下我的Arduino教程,然后开始学习。
      干杯!

      回复
  3. Mathew Rawson.

    您是否知道如何将DS1302更改为12小时模式。如果您没有知道如何将DS3231更改为12小时模式。其他好人很好的项目。

    回复
  4. 哪些国家

    先生,
    这段代码成功执行,但是日期显示为01.01.2000,尽管我已经在代码中更改了日期。请回复如何解决这个问题

    谢谢你!

    回复
    • Dejan Nedelkovski.

      您是否遵循以下步骤。首先上传代码设置日期,在设置部分中的三行被解释,然后上载了在Setup部分中的三行中显示了日期的正常代码。

      回复
      • 哪些国家

        先生,谢谢,对迟到的回复感到抱歉。我和你说的一样,但问题仍然是重复的,你可以提出解决方案..

    • 迈克

      请务必以正确的格式输入您的日期,即DD,mm,yyyy。
      然后,您可以通过格式注释更改它的显示方式

      回复
  5. 马里奥

    哈洛先生,

    我应该怎么做才能在一定的时间内增加交换机?在下午6点
    如何写代码在'如果else '操作?

    回复
    • 马里奥

      如何分开时间,以便我可以在“如果”操作中的指定小时或分钟内,以制作自动开关?

      回复
      • Dejan Nedelkovski.

        你好,
        回复晚了非常抱歉。您可以使用子字符串()分隔它。您可以找到更多详细信息,此功能如何在Arduino官方网站上运行。此外,您可以查看我的Arduino触摸屏音乐播放器和闹钟项目,在那里我使用此方法将小时,分钟和秒数放入单独的变量中。

  6. 吉姆

    您好Dejan Nedelkovski。感谢您的这些视频,他们正在帮助我了解这些令人惊叹的Arduino的所有内容。我对这些arduino是新的,并决定是我的第一个项目。我订购了所必需的所有部分,并必须等待开始,但此时我只有一个问题。你提到你连接了一个液晶显示器,但没有说怎么做。有些地方可以得到一个原理图还是什么东西告诉我该怎么做?
    谢谢你!

    回复
  7. Sivapathasuntharam

    ' DS3231 '没有命名类型。sci DS3231 rtc (SDA);
    我得到这个错误。如何克服这个问题?请协助

    回复
  8. houda

    嗨,我想问你。我有一个Arduino项目使用RTC DS3132和LCD。我想在LCD中展示时间。是否可以使用您在Arduino和DS3231实时时钟的此视频中使用的相同编程

    回复
  9. 多米尼克•DELEAZ

    您好,只有一个SDA和一个SLC管理LCD和RTC如何?
    谢谢

    回复
  10. 巴普蒂斯特LAGNEAUX

    你好!你能帮帮我吗?我想把时间分门别类……可以吗??因为我创建了一个变量“小时”和另一个“分钟”……谢谢!

    回复
    • Dejan Nedelkovski.

      嘿,您可以使用Arduino substring()函数分别提取小时和分钟,如果需要将它们作为整数,还可以使用toInt()函数将它们转换为整数。

      回复
  11. 詹姆士

    我一定要用Arduino Mega吗,
    出于说可以将其缩小到Arduino Micro尺寸?

    回复
  12. 丹尼尔·费尔南德斯

    以及如何在代码中使用DS3231模块的温度传感器?

    回复
  13. 菲利普

    您的网站非常有用,并使用示例演示的解释很容易学习。非常感谢。

    回复
  14. 菲利普

    使用此LCD显示倒计时计时器。如果我在程序代码中设置为延迟(5000);// 5000ms = 5s例如,我可以在液晶显示屏上发送/显示此延迟时间以此格式:00:00:05然后倒计时到00:00:00及时?谢谢你的帮助。

    回复
  15. 阿尔法利亚

    嘿,先生,我试过这个教程,它是有效的
    唯一的问题是我每次断开arduino的电源,时间就会重置到设定的时间,你能帮我吗?

    回复
    • 德扬

      好了,一旦你设置了时间,你需要再次编程你的Arduino,但没有设置时间函数,从安装部分删除它们。

      回复
  16. Musdalifa

    你好,谢谢你的指导。我的问题是,实时时钟数据可以被操纵,以允许用户控制它,以便在一个想要的时间触发警报?

    回复
    • 德扬

      嘿,是的,有可能。您可以从RTC读取数据,提取小时、分钟和秒,并将它们放入变量中(还应该将它们转换为整数)。然后用一个简单的“如果”语句,你可以在想要的时间做任何事情。

      回复
  17. 尼曼萨瓦尔

    你好,你的项目太好了,我试图复制这个想法,但是我有一个问题,问题是我设定一个时间,Arduino程序,这是完美的工作,当我从电源断开连接的Arduino然后重新连接能力显示之前的时间(我烧程序)。

    我尝试了很多时间使用Ds3231,并从很多网站得到帮助,但我无法解决这个问题,所以请帮助我,因为我的个人项目依赖于Ds3231。

    回复
    • 德扬

      嘿,谢谢!我不确定你是否以正确的方式毁掉了这个项目。首先,您应该在setup()部分设置时间。完成后,您应该再次上传相同的代码,不需要在setup()部分中设置时间的那些行。

      回复
  18. 尼曼萨瓦尔

    很好,你的项目太好了,我将使用这个的很大一部分。

    回复
  19. Caden

    你好,你能帮我解决一个问题吗?我严格遵循了代码并包含了DS3231库,但我得到了一个错误:“no matching function for call to ' DS3231::DS3231(const uint8_t&, const uint8_t&)'”。Arduino IDE说错误在线上:' DS3231 rtc(SDA, SCL) ';

    回复

留下一个回复

您的电子邮件地址不会被公开。

推荐

2019年最佳入门级示波器为初学者和爱好者

为初学者和爱好者最好的示波器

推荐

8个最好的Arduino入门工具包,适合2019年初学者

初学者的8个最佳Arduino Starter Kits

推荐

最好的3D打印机为初学者和爱好者- 3D打印

最好的3D打印机为初学者和业余爱好者