在本次会议中,我们将使实时时钟模块DS1307与Raspberry PI接口,以制作一个闹钟。尽管Raspberry Pi具有内部时钟,但是如果没有Internet连接,则此内部时钟在每次重启后都会重置。因此,要在没有互联网连接的情况下获得准确的时间,我们需要将RTC模块DS1307连接到Raspberry Pi。RTC模块具有备用电池,因此TIME不会重置。我们还使用Arduino和ATmega32 AVR微控制器构建了闹钟,也进行了检查。
在此Raspberry Pi数字时钟中,一个16 * 2字符的LCD将显示实时,警报时间和警报状态(开/关)。一旦程序开始在Pi中运行,我们就可以断开显示器的连接,并借助此LCD和五个按钮来设置警报。
17个GPIO引脚中的每个引脚均可提供或吸收最大15mA的电流。因此,在为Raspberry Pi供电之前,请不要使用GPIO引脚并检查连接两次。在此处了解有关GPIO引脚和与Raspberry Pi的接口按钮的更多信息。还要查看我们的Raspberry Pi教程系列以及一些优秀的IoT项目。
所需组件:
在这里,我们使用 带有Raspbian Jessie OS的Raspberry Pi 2 ModelB。前面已经讨论了所有基本的硬件和软件要求,您可以在Raspberry Pi简介和Raspberry PI LED闪烁中查找它,以开始使用,而我们还不需要:
- 带有预装操作系统的Raspberry Pi
- 带电池的RTC模块DS1307
- 电源供应
- 1KΩ电阻器(6个)
- 5个按钮
- 1000uF电容器(2个)
- 16 * 2字符液晶屏
- 2N2222晶体管
- 蜂鸣器
设置Raspberry Pi闹钟:
在继续之前,我们需要稍微配置Raspberry Pi并安装RTC Module的库文件,请按照以下步骤操作:
步骤1: 首先转到Raspberry Pi配置菜单并启用I2C选项,如下所示:
第2步: 在Raspberry Pi桌面屏幕上创建一个新文件夹,并将其命名为“ Alarm Clock”
步骤3: 从以下链接下载RTC模块的头文件:
codeload.github.com/switchdoclabs/RTC_SDL_DS1307/zip/master
步骤4: 如上一步所述,将下载的zip文件解压缩到在DESKTOP上创建的文件夹(闹钟)中。
步骤5: 在Raspberry Pi中打开终端窗口并输入以下命令,然后按Enter:
sudo apt-get install i2c-tools
此命令将安装连接RTC模块所需的I2C工具。然后通过发出“ sudo reboot” 命令来重新启动Raspberry pi 。
步骤6: 现在我们需要检查RTC模块的I2C地址。在检查地址之前,请首先如下图所示连接RTC模块。
然后在终端窗口中输入以下内容。
sudo i2cdetect -y 0或sudo i2cdetect -y 1
步骤7: 如果以上任一命令均有效,您将看到类似以下内容:
步骤8:如果RTC模块正确连接,您将看到I2C地址0x68,记录该值。
这样,所有必需的调整都可以通过Raspberry Pi配置完成。
电路图和连接:
下表显示了Raspberry Pi和LCD之间的连接:
下表还显示了Raspberry Pi与五个按钮之间的连接,每个按钮分别具有各自的功能:
程序及工作说明:
RTC模块具有用于电源备份的纽扣单元,如前所述,因此时间将是最新的,直到备份用尽,我们在RTC中将拥有准确的时间。
现在,我们将编写一个Python程序来从RTC模块DS1307获取准确的时间。这次将在16x2 LCD上显示。之后,我们将在程序中编写闹钟功能。警报时间也将显示在LCD的第二行,然后是ON和OFF状态。可以通过连接到Raspberry Pi的5个按钮来调整警报时间,如上表所示,这很容易设置警报。您也可以查看我们的演示视频来操作该Raspberry Pi闹钟。有2个用于递增和递减警报小时的按钮,有2个用于递增和递减警报分钟的按钮,还有1个用于开启和关闭警报的按钮。
Python程序会不断将警报时间与RTC时间进行比较,一旦警报时间与RTC时间匹配,PI就会触发蜂鸣器,该蜂鸣器通过NPN晶体管2N2222连接到Raspberry Pi的GPIO引脚22。因此,一旦达到警报时间,蜂鸣器就会发出声音。
完整的程序在下面给出,并通过注释进行了很好的解释。如有任何疑问,请在下面的评论部分中提问。