该基于Arduino的实时时钟是一个数字时钟,可使用基于I2C协议的RTC IC DS1307实时显示时间。实时时钟意味着它即使在断电后也能运行。重新接通电源后,无论其处于关闭状态的时间和持续时间,它都会显示实时时间。在此Arduino闹钟项目中,我们使用了16x2 LCD模块以“小时,分钟,秒,日期,月份和年份”格式显示时间。还添加了一个警报选项,我们可以设置警报时间。警报时间一旦保存在arduino的内部EEPROM中,即使在复位或断电后也保持保存。实时时钟通常用于我们的计算机,房屋,办公室和电子设备中,以保持实时更新。
I2C协议是一种使用两条线将两个或更多设备连接到单个系统的方法,因此该协议也称为“两条线协议”。它可以用于将127个设备通信到单个设备或处理器。大多数I2C设备以100Khz的频率运行。
将主机写入从机的步骤(从机接收模式)
- 发送启动条件给从机。
- 发送从站地址到从站。
- 将写位(0)发送到从站。
- 从机接收到ACK位
- 发送地址到奴隶。
- 从机接收到ACK位
- 将数据发送到从站。
- 从机接收到ACK位。
- 最后发送STOP条件给从机。
从站到主机的数据读取步骤(从站发送模式)
- 发送启动条件给从机。
- 发送从站地址到从站。
- 将读取位(1)发送到从站。
- 从机接收到ACK位
- 从站接收数据
- 从机接收到ACK位。
- 发送停止条件给从站。
为了构建基于RTC DS1307 IC 的 数字时钟,我们在这里使用了Arduino Pro Mini,但是您也可以使用任何其他Arduino模型,例如Arduino Uno或Arduino Nano。除Arduino板,DS1307 RTC IC外,我们还使用16x2 LCD模块显示时间和日期,晶体振荡器,7805稳压器,蜂鸣器以及少量晶体管和电阻器。
电路图和说明
在此基于Arduino的数字时钟电路中,我们使用了三个主要组件,分别是IC DS1307,Arduino Pro迷你板和16x2 LCD模块。
此处arduino用于从ds1307读取时间并将其显示在16x2 LCD上。 DS1307使用2条线将时间/日期发送到arduino。蜂鸣器也用于警报指示,警报激活时会发出蜂鸣声。下面显示了一个框图,以了解此实时时钟的工作原理。
如电路图所示,DS1307芯片引脚SDA和SCL通过上拉电阻连接到arduino引脚SDA和SCL,该上拉电阻在数据和时钟线上均保持默认值HIGH。 DS1307芯片连接了32.768KHz晶体振荡器,以产生精确的1秒延迟,DS1307的引脚3 rd(BAT)也连接了3伏电池,该电池可在断电后保持时间运行。 16x2 LCD以4位模式与arduino连接。控制引脚RS,RW和En直接连接到arduino引脚2,GND和3。数据引脚D0-D7连接到arduino的4、5、6、7。蜂鸣器通过其基极具有1 k电阻的NPN BC547晶体管与arduino引脚号13连接。
在低电平有效模式下,使用三个按钮即INC和Next按钮将警报设置为arduino的引脚12、11和10。当我们按下设置键时,警报设置模式被激活,现在我们需要使用INC按钮设置警报,然后使用Next按钮移动到数字。下图显示了带有闹钟的实时时钟的完整面包板设置。您也可以使用AVR微控制器查看有关数字闹钟的详细教程。
节目说明
为了对此实时时钟进行编程,我们使用了一些库来从DS1307中提取时间/日期并在LCD上显示,如下所示:
RTC,LCD和输入输出的初始化在设置循环中执行。
其余的内容,例如阅读时间,设置警报,均在空循环部分执行。