项目中文名:电子钟 项目英文名:eclock 作者:WonderBoy 关键词:电子钟 | DIY | Arduino 概要:一款基于Arduino单片机的低成本多功能DIY电子钟 源作者仓库:https://gitee.com/xzqiaochu/eclock/ 开源协议:GUN V2.0
本文大纲 [toc]
近年来,工业化大生产使得市面上的小商品越来越同质化。与此同时,各种小工具、DIY元件也大量涌现,鼓励人们自己设计并制作独特的作品。
钟表,作为人们日常生活中不可获取的一员,早已在步入机械化大生产的队伍,在数量上满足了人们的需求。但市面上的常见钟表功能单一,一般只具备显示时间的功能。虽然市场上也出现了多功能钟表,但其价格往往令人望而却步。
因此,我决定自己DIY一款多功能电子钟。
主控板:Arduino Nano 作为风靡全球的单片机,Arduino提供简易、稳定的开发环境,而且网络上也有众多资料供参考。最重要的一点是,Arduino单片机的价格十分便宜。这次我选择的是Arduino系列的Nano版本,这款单片机体积小巧。
显示屏:OLED 我购买了带有SSD1306的OLED显示屏,这款只有四根接线,采用IIC与主控通讯,大大简化了接线。
时钟模块:DS3231 为了保证电子钟在断电的情况下仍能保证时间的准确性,需要加装外接时钟模块。这款时钟模块上装有一节纽扣电池。
我使用立创EDA平台绘制了电路草图。
为了保证接线的牢固性,所有的接线均使用电烙铁焊接。
模块之间采用泡沫胶粘合。
首先我用面包线将各模块连接起来,并使用Arduino IDE下载相关示例程序,检查各模块的运行情况。(示例程序见:/arduino/examples/)
测试无误后,我使用电烙铁将接线焊接到各模块上。 这里我遇到了一个小困难。OLED显示屏和时钟模块都是采用IIC与主控通讯的,而在一个焊点上焊接两个针脚并不方便。随后我发现,时钟模块上有两组IIC引脚,这就好办了。我边将这两组引脚分别与主控和OLED屏相连接。
首先,要显示钟表最基本的功能:显示时间。
我使用了RTC
库文件,该库封装了对DS3231模块的操作。只需要调用以下函数边和轻松获取到时间日期。
RTC.getYear();
RTC.getMonth();
RTC.getDay();
RTC.getHours();
RTC.getMinutes();
RTC.getSeconds();
需要注意的是,DS3231模块在使用前需要初始化时间。方法也非常简单,只需要上传一个示例程序即可。(程序见:/arduino/examples/DS3231_Adjust/)
在看示例程序的过程中,我看到了获取温度的函数。
RTC.getTemp();
这是因为时钟模块的晶振会受温度的影响,为了保证时间的准确性,模块内置了一个温度传感器为晶振提供“补偿”。
而且,实际测试发现,得到的温度数据并不准确。大概是因为模块在工作的过程中会发热。
显示日期的温度的程序见:/arduino/time/
完成了基本功能之后,我想让电子钟显示高考倒计时。
这就需要进行日期做差了,于是我使用DEV C++
编写相关函数,在本地进行调试。(程序见:/cpp/)本地调试省去了费时的上传过程,大大提高了编程效率。
在电脑上调试好日期计算函数后,我将其移植到单片机上,执行正常。
我进行了如下测试,结果均正常:
使用USB口供电即可使用,注意防尘防水。
高考倒计时小鼠点后第六位时钟为0,即使改成double类型也是如此。
ESP8266
或ESP32
模块,该模块支持接入WIFI同步网络时间,而且CPU频率更高,价格便宜。此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。