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模块的时钟。在演示示例代码的setup部分,我们可以注意到有三行代码需要取消注释,以便最初设置星期几、时间和数据。

// 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(){//发送星期的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库由bet188官方网站Henning Karlsen制作,可以从他的网站上找到并下载,www.rinkydinkelectronics.com。必威lol* */ #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下午6点
    如何在'如果否则'操作中编写代码?

    回复
    • 马里奥

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

      回复
      • Dejan Nedelkovski.

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

  6. 吉姆

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

    回复
  7. Sivapathasuntharam

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

    回复
  8. 豪达

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

    回复
  9. 巴普蒂斯特LAGNEAUX

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

    回复
    • Dejan Nedelkovski.

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

      回复
  10. 詹姆士

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

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

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

    回复
  12. 菲利普

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

    回复
  13. 菲利普

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

    回复
  14. 阿尔法利亚

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

    回复
    • 德扬

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

      回复
  15. Musdalifa

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

    回复
    • 德扬

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

      回复
  16. 尼曼萨瓦尔

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

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

    回复
    • 德扬

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

      回复
  17. 尼曼萨瓦尔

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

    回复
  18. c

    嗨,你能帮我一个问题吗?我完全遵循了代码并包含了DS3231库,但我收到了一个错误,说:“呼叫呼叫的匹配函数”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打印机为初学者和业余爱好者