Arduino和DS3231实时时钟教程

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

概述


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

DS3231实时时钟

DS3231实时时钟


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

DS3231实时时钟规格

该模块可以在3.3或5 V上工作,这使其适用于许多开发平台或微控制器。电池输入为3V,典型的CR2032 3V电池可以为模块供电并保持信息超过一年。

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

这是电路原理图:

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

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

您可以从下面的链接获取此Arduino教程所需的组件:

必威外围提钱披露:这些是联盟链接。作为亚马逊助理,我从合格购买中获得。

编程


一旦我们连接模块,我们需要Arduino板编程与实时时钟工作。然而,当涉及到Arduino和I2C模块之间的通信编程时,代码就不是那么小和容易了。幸运的是,已经有几个DS3231 RTC的库可以在互联网上找到。

对于本教程,我选择使用Henning Karsen制造的库,该库可以从他的网站找到和下载,www.rinkydink必威lolelectronics.com

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

// ds3231库void setup(){//设置串行连接序列号的代码.Begin(115200);//如果使用Arduino Leonardo //(!串行){} //初始化rtc对象rtc.begin();//以下行可以取消注释以设置日期和时间//rtc.setdow(日期);//设置日期为周日//rtc.settime(12,0,0);//将时间设置为12:00:00(24hr格式)//rtc.setdate(1,1,2014);//将日期设置为2014年1月1日}

第一行是为了设置一周中的一天,第二行是用于设置小时,分钟和秒的时间,第三行用于设置日期,月份和年份。

一旦我们上传这段代码,我们需要重新评论三行并再次重新上传代码。

// DS3231库void loop()的演示示例代码{// Send Day-of-Week Serial.print(rtt . getdowstr ());系列。打印(" ");//发送日期Serial.print(rtt . getdatestr ());系列。打印(“-”);// Send time Serial.println(rtt . gettimestr ());//等待1秒后重复延迟(1000);}

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

DS3231 RTC串行监视器结果

现在,即使我们断开Arduino电源,然后重新连接,再次运行串行监视器,我们可以注意到时间一直在继续,没有重置。

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

Arduino DS3231实时时钟和LCD示例

以下是此示例的源代码:

/* * Arduino DS3231 Real Time Clock Module Tutorial * * created by Dejan Nedelkovski, * wwwbet188官方网站.HowToMechatronics.com * * DS3231 Library made by Henning Karlsen which can be found and download from his website, www.必威lolrinkydinkelectronics.com。* */ #include  #include  //包括LiquidCrystal库DS3231 rtc(SDA, SCL);液晶显示(1,2,4,5,6,7);//创建LC对象。参数:(rs, enable, d4, d5, d6, d7) void setup() {rtt .begin();//初始化rtc对象lcd.begin(16,2);//初始化LCD屏幕的接口,并指定显示的尺寸(宽度和高度)}}void loop() {LCD . setcursor (0,0);液晶显示器。打印(“:”);lcd.print (rtc.getTimeStr ()); lcd.setCursor(0,1); lcd.print("Date: "); lcd.print(rtc.getDateStr()); delay(1000); }

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

45的反应

  1. 穆罕默德拉克斯

    你好
    你能帮我吗?
    我希望Arduino更新来自移动SIM卡的实时时钟,如手机始终从移动网络更新实时时钟。
    可以适用吗?
    谢谢你的帮助

    回复
  2. 聪明的ejeka.

    你好,
    你能帮助我吗?
    我想开发一个Android医学提醒应用程序与药碉堡连接,首先我对Arduino的任何东西都没有了解Arduino和编译器的名称也要运行它。如何将我的Android应用程序链接到Arduino?我还在使用Java学习Android编程。你能帮帮我

    回复
    • 德扬Nedelkovski

      你好,
      当然,要做这样的项目,你需要一些编程和Arduino方面的知识。我不知道我能如何帮助你,除了告诉你从一开始看我的Arduino教程,并开始学习。
      干杯!

      回复
  3. 马修罗森

    你知道怎么把DS1302调到12小时模式吗?如果没有,你知道如何改变DS3231到12小时模式。其他原因是很好的项目。

    回复
  4. ksa.

    先生,
    此代码成功执行,但日期显示为01.01.2000,但我在代码中更改了它。请回复如何解决问题。

    谢谢你!

    回复
    • 德扬Nedelkovski

      你按照解释的步骤做了吗?首先上传设置日期的代码,其中设置部分的三行代码未被注释,然后上传显示日期的普通代码,其中设置部分的三行代码被注释或删除。

      回复
      • ksa.

        先生,谢谢您的回复,抱歉回复晚了。我照你说的做了,但问题还是一再出现,你能提出一个解决方案吗

    • 迈克

      请确保以正确的格式输入您的日期,如:DD, MM, YYYY。
      然后,您可以更改其显示的方式格式评论

      回复
  5. 马里奥

    喂,先生,

    我该怎么办法在某个时间基于基于交换机?例6下午6点
    如何在'如果否则'操作中编写代码?

    回复
    • 马里奥

      如何分开的时间,所以我可以得到指定的小时或分钟在“如果else”操作,使一个自动开关?

      回复
      • 德扬Nedelkovski

        你好,
        抱歉回复晚了。您可以使用substring()分隔它。你可以在Arduino官方网站上找到这个功能的详细工作原理。另外,你可以检查我的Arduino触摸屏音乐播放器和闹钟项目,我使用这种方法得到小时,分钟和秒到一个单独的变量。

  6. 吉姆

    你好,德扬Nedelkovski。谢谢你的这些视频他们帮助我了解了所有关于这些惊人的Arduino。我对这些Arduino的新,并决定这是我的第一个项目。我已经订购了所有必要的部件,将不得不等待开始,但我这次只有一个问题。你提到你连接了一个LCD,但没有说如何做到这一点。有没有什么地方能让我得到原理图之类的东西告诉我怎么做?
    谢谢你!

    回复
  7. Sivapathasuntharam

    'DS3231'不命名类型。DS3231 RTC(SDA,SCL);
    我收到这个错误。如何克服这个问题?请协助

    回复
  8. 豪达

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

    回复
  9. Dominique Deleaz.

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

    回复
  10. Baptiste Lagneaux.

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

    回复
    • 德扬Nedelkovski

      嘿,您可以使用Arduino Substring()函数分别提取,小时和分钟,并且如果您需要它们,则为整数使用Toint()函数将它们转换为整数。

      回复
  11. 詹姆斯

    我必须要用Arduino Mega吗,
    比如我能把它缩小到Arduino微型尺寸吗?

    回复
  12. 菲利普

    非常有用的您的网站和说明与例子演示,很容易学习。非常感谢。

    回复
  13. 菲利普

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

    回复
  14. alfian

    嘿,先生,我试过这个教程,效果不错
    我唯一的问题是每当我断开Arduino电源时,时间都会重置为设定的时间,你能帮助我吗?

    回复
    • 德扬

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

      回复
  15. Musdalifa

    你好,谢谢你的教程。我的问题是可以操纵实时时钟数据以允许用户控制它以便在期望的时间触发警报?

    回复
    • 德扬

      嘿,是的,是的。您可以从RTC读取数据并提取小时,分钟和秒数,并将它们放入变量(也应将它们转换为整数)。然后使用简单的“if”语句,您可以在期望的时间做任何事情。

      回复
  16. 诺曼萨瓦尔

    嗨,你的项目太好了,我试图复制这个想法,但我出现了一个问题,问题是我设置了一个时间并将程序刻录到一个arduino,所以它是完美的,当我从电源中断开连接时工作源头然后重新连接到它的Power到之前的时间(我刻录了该程序)。

    我试图使用DS3231很多时间并从许多网站获得帮助,但我无法解决问题,因此PLZ帮助我,因为我的个人项目取决于DS3231。

    回复
    • 德扬

      嘿,谢谢!好吧,我不确定你是否以正确的方式烧毁了这些程序。首先,您应该在setup()部分中设置时间。一旦完成,那么您应该再次上传相同的代码,而没有那些用于设置setup()部分中的时间。

      回复
  17. 诺曼萨瓦尔

    很好,你的项目太好了,我会用其中的很大一部分。

    回复
  18. c

    嗨,你能帮我一个问题吗?我完全遵循了代码并包含了DS3231库,但我收到了一个错误,说:“呼叫呼叫的匹配函数”DS3231 :: DS3231(const uint8_t&,const uint8_t&)'。Arduino IDE表示错误在线:'DS3231 RTC(SDA,SCL)';

    回复

发表评论

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

推荐

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

最适合初学者和爱好者的示波器

推荐

2019年初学者的8个最佳Arduino Starter Kits

8个最好的arduino初学者工具包

推荐

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

最好的3d打印机初学者和爱好者