在这个Arduino教程中,我们将学习如何使用DS3231实时时钟模块。您可以观看以下视频或阅读下面的书面教程。
第一个问题是,当Arduino本身有内置计时器时,为什么我们实际上需要一个单独的RTC为我们的Arduino项目。重点是,RTC模块运行在电池上,可以跟踪时间,即使我们重新编程微控制器或断开主电源。
DS3231实时时钟
DS3231是一种低成本,高精度的实时时钟,可以维护小时,分钟和秒,以及日,月和年的信息。此外,它还对闰年和少于31天的月份提供自动补偿。
该模块可以工作在3.3或5 V,这使得它适合许多开发平台或微控制器。电池输入为3V,一个典型的CR2032 3V电池可以为模块供电并维护信息一年以上。
模块使用I2C通信协议这使得连接Arduino板非常容易。
这是电路原理图:
所以我们需要的是4根线,VCC和GND引脚为模块供电,以及两个I2C通信引脚,SDA和SCL。
你可以从下面的链接获得这个Arduino教程所需的组件:
- DS3231实时时钟.................亚马逊/Banggood/阿里巴巴全球速卖通
- Arduino电路板 .................................亚马逊/Banggood/阿里巴巴全球速卖通
- 面包板和跳线.........亚马逊/Banggood/阿里巴巴全球速卖通
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获取信息并在串行监视器中打印它们。以下是它们在串行监视器中出现的方式。
现在,即使我们断开Arduino电源然后重新连接并再次运行串行监视器,我们就可以注意到时间不断地进行,而不重置。
现在我们有了实时时钟可以在任何Arduino项目中使用。作为第二个例子,我将一个LCD连接到Arduino,并在上面打印时间和日期。
下面是这个例子的源代码:
/* * 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教程的全部内容,欢迎在评论部分提出任何问题。
正如补充的uily注意DS3231也有温度传感器。
是的,这是正确的。
嗨
你能帮我个忙吗?
我想让Arduino更新移动SIM卡上的实时时钟,就像手机总是更新移动网络上的实时时钟一样。
它可以适用吗?
谢谢你的帮助
不确定,我没有SIM卡模块的经验。
不,你不能。电话的sim卡在这里不适用。(可能做起来非常困难)
但您可以轻松地将其与互联网时间服务器同步。搜索它。
你好,
你能帮我吗?
我想开发一个与医药药盒连接的android医药提醒应用程序,首先我不知道arduino和编译器的名字也运行它。如何链接我的android应用程序到arduino?我还在用Java学习android编程。你能帮我一下吗
你好,
当然,你需要一些编程和Arduino方面的知识才能做这样的项目。我不知道我能帮到你什么,除了告诉你从一开始就看一下我的Arduino教程,然后开始学习。
干杯!
扔掉Android的东西,并用Arduino做整个项目。
您是否知道如何将DS1302更改为12小时模式。如果您没有知道如何将DS3231更改为12小时模式。其他好人很好的项目。
本教程中使用的DS3231库不支持24小时格式。
先生,
这段代码成功执行,但是日期显示为01.01.2000,尽管我已经在代码中更改了日期。请回复如何解决这个问题
谢谢你!
您是否遵循以下步骤。首先上传代码设置日期,在设置部分中的三行被解释,然后上载了在Setup部分中的三行中显示了日期的正常代码。
先生,谢谢,对迟到的回复感到抱歉。我和你说的一样,但问题仍然是重复的,你可以提出解决方案..
请务必以正确的格式输入您的日期,即DD,mm,yyyy。
然后,您可以通过格式注释更改它的显示方式
哈洛先生,
我应该怎么做才能在一定的时间内增加交换机?在下午6点
如何写代码在'如果else '操作?
如何分开时间,以便我可以在“如果”操作中的指定小时或分钟内,以制作自动开关?
你好,
回复晚了非常抱歉。您可以使用子字符串()分隔它。您可以找到更多详细信息,此功能如何在Arduino官方网站上运行。此外,您可以查看我的Arduino触摸屏音乐播放器和闹钟项目,在那里我使用此方法将小时,分钟和秒数放入单独的变量中。
您好Dejan Nedelkovski。感谢您的这些视频,他们正在帮助我了解这些令人惊叹的Arduino的所有内容。我对这些arduino是新的,并决定是我的第一个项目。我订购了所必需的所有部分,并必须等待开始,但此时我只有一个问题。你提到你连接了一个液晶显示器,但没有说怎么做。有些地方可以得到一个原理图还是什么东西告诉我该怎么做?
谢谢你!
我有一个单独的教程如何连接和使用可以在我的网站上找到的LCD。(回复晚了非常抱歉)
' DS3231 '没有命名类型。sci DS3231 rtc (SDA);
我得到这个错误。如何克服这个问题?请协助
确保包含DS3231库。
嗨,我想问你。我有一个Arduino项目使用RTC DS3132和LCD。我想在LCD中展示时间。是否可以使用您在Arduino和DS3231实时时钟的此视频中使用的相同编程
当然,只需删除打印日期的代码的一部分。
什么是液晶显示模块,它是如何连接的?
这是一个16×2字符液晶显示器。你可以查看我的详细教程。
您好,只有一个SDA和一个SLC管理LCD和RTC如何?
谢谢
我使用的LCD不是I2C LCD,它使用常规的数字引脚。无论如何,即使您有多个I2C设备,您也可以使用相同的SDA和SLC。
你好!你能帮帮我吗?我想把时间分门别类……可以吗??因为我创建了一个变量“小时”和另一个“分钟”……谢谢!
嘿,您可以使用Arduino substring()函数分别提取小时和分钟,如果需要将它们作为整数,还可以使用toInt()函数将它们转换为整数。
我一定要用Arduino Mega吗,
出于说可以将其缩小到Arduino Micro尺寸?
当然,你可以使用任何Arduino板。
Arduino Uno中的LCD引脚是什么?谢谢你!
以及如何在代码中使用DS3231模块的温度传感器?
您的网站非常有用,并使用示例演示的解释很容易学习。非常感谢。
谢谢,我很高兴你发现它很有用!
使用此LCD显示倒计时计时器。如果我在程序代码中设置为延迟(5000);// 5000ms = 5s例如,我可以在液晶显示屏上发送/显示此延迟时间以此格式:00:00:05然后倒计时到00:00:00及时?谢谢你的帮助。
当然,有了Arduino一切皆有可能。
嘿,先生,我试过这个教程,它是有效的
唯一的问题是我每次断开arduino的电源,时间就会重置到设定的时间,你能帮我吗?
好了,一旦你设置了时间,你需要再次编程你的Arduino,但没有设置时间函数,从安装部分删除它们。
你好,谢谢你的指导。我的问题是,实时时钟数据可以被操纵,以允许用户控制它,以便在一个想要的时间触发警报?
嘿,是的,有可能。您可以从RTC读取数据,提取小时、分钟和秒,并将它们放入变量中(还应该将它们转换为整数)。然后用一个简单的“如果”语句,你可以在想要的时间做任何事情。
你好,你的项目太好了,我试图复制这个想法,但是我有一个问题,问题是我设定一个时间,Arduino程序,这是完美的工作,当我从电源断开连接的Arduino然后重新连接能力显示之前的时间(我烧程序)。
我尝试了很多时间使用Ds3231,并从很多网站得到帮助,但我无法解决这个问题,所以请帮助我,因为我的个人项目依赖于Ds3231。
嘿,谢谢!我不确定你是否以正确的方式毁掉了这个项目。首先,您应该在setup()部分设置时间。完成后,您应该再次上传相同的代码,不需要在setup()部分中设置时间的那些行。
很好,你的项目太好了,我将使用这个的很大一部分。
你好,你能帮我解决一个问题吗?我严格遵循了代码并包含了DS3231库,但我得到了一个错误:“no matching function for call to ' DS3231::DS3231(const uint8_t&, const uint8_t&)'”。Arduino IDE说错误在线上:' DS3231 rtc(SDA, SCL) ';