65.9K
CodeProject 正在变化。 阅读更多。
Home

Arduino Nano 项目:显示时钟、日历以及内部和外部温度(Ver 1.2)

starIconstarIconstarIconstarIconstarIcon

5.00/5 (14投票s)

2020年9月2日

CPOL

9分钟阅读

viewsIcon

30646

downloadIcon

724

带有接线图和源代码的 Arduino Nano 微控制器面包板项目。开发软件由 PlatformIO 和 Arduino Studio 提供。

Initialization Screen

引言

在编写了多年的大型机、小型机和台式计算机程序后,我决定尝试微控制器。我选择了 Arduino nano 微控制器。我选择了两个项目:WayIn 实时时钟套件,以及 Barry Lim 的“构建你自己的数字温度计”

版本 1.2 夏令时。设置菜单允许用户在春天增加一小时,在秋天将时钟调回一小时。

我购买了 Arduino 实时时钟套件和构建自己的温度计所需的零件。我连接了面包板,安装了软件,并让这两个项目运行起来。但是,我发现这些软件过于简单。我决定将这两个项目合并为一个,并添加新功能。换句话说,我重写了软件,将其推向可用内存的极限。用户可以选择日期和时间显示样式、温度单位,并设置闹钟时间及持续时间。用户可以设置当前日期和时间。软件将计算星期几。总共有13个设置屏幕。设置的永久值保存在非易失性 EEPROM 中。Arduino nano 基于 ATmega328 微型计算机。它只有 2K 字节的 SRAM 内存。必须小心编程,以确保有一些空闲的堆栈空间可用。本文随附的软件将设置屏幕文本保存在程序存储器 (PROGMEM) 中,以节省 SRAM。

Project Picture

实时时钟项目图片

主显示屏

Int Format  国际样式
Euro Format  欧洲样式
USA Format  美国样式

该项目实时显示以下信息:

  • 日历日期,包括星期几
  • 实时时钟(时、分、秒)
  • 闹钟时间(时、分)
  • 实时时钟模块的内部温度
  • 使用温度探头测量的外部温度
  • 日历日期可以是以下三种格式之一:yyyy/mm/dd、dd/mm/yyyy 或 mm/dd/yyyy。
  • 时钟可以是 24 小时制或 12 小时制。
  • 温度可以是摄氏度或华氏度。

项目零件

要构建此项目,您需要以下列出的零件:

  • 基于 ATmega328P 芯片的 Arduino Nano 微控制器板
  • 显示模块 OLED SSD1306 128 x 64 0.96英寸
  • 带电池备用的实时时钟模块 DS3231
  • 带可插拔端子或 4.7K 欧姆电阻的温度传感器探头 DS18B20
  • 带 Mini-B(5 针)连接器的 USB 2.0 数据线
  • 有源蜂鸣器 5V
  • 三个 (3) 触觉按钮开关
  • 面包板
  • 面包板跳线

注意事项和建议

  • WayIn 实时时钟套件包含大部分零件。温度传感器必须单独购买。
  • 对于温度传感器探头,您需要可插拔端子或 4.7K 欧姆电阻。
  • 购买更长的 USB Mini-B 数据线。
  • 比 WayIn 提供的更大的面包板。
  • 跳线易于使用,但项目看起来会很杂乱。考虑使用普通导线连接面包板。

开发软件安装

您需要在台式机上安装集成开发环境(IDE)。它用于编译项目软件并将其下载到您的 Arduino Nano。您有两个选择:PlatformIO 开发工作室或 Arduino 开发工作室。我推荐 PlatformIO。

要安装 PlatformIO,请访问 PlatformIO 组织网站并按照说明进行操作。此软件基于 Microsoft Visual Studio Code。

要安装 Arduino IDE,请访问 Arduino 微控制器网站并按照说明进行操作。

硬件安装

第一步是将组件安装到面包板上。接线图如下所示。Arduino 板通过 USB 电缆供电。所有其他模块的电源都来自 Arduino 板。有两个接地 (GND) 引脚,您可以选择其中任何一个。有两个电源 5V 和 3V3。我选择了 5V。据我所知,所有模块的额定电压都在 3 到 5 伏之间。您可以尝试 3.3V。显示模块和实时时钟模块共享 2 根线串行连接。该图显示了一个没有可插拔端子的串行探头。如果您有可插拔端子,则不需要 4.7K 欧姆电阻。

RealTimeClock Breadboard

面包板接线图

主要组件手册链接

软件安装

任何 Arduino 软件项目都由两部分组成。主程序 (main.cpp) 和可选库。在这个项目中,main.cpp 程序是我的贡献。可选库支持项目的硬件模块。总共有五个库。本文附带的源代码包含主程序和库。您可以从它们各自的来源下载库。附带的库是本文撰写时的版本。您可以使用下面的链接进行未来的修订。

PlatformIO IDE 的项目安装

PlatformIO 安装会在您的私人文档区域创建一个 projects 文件夹。

C:\Users\<您的用户名>\Documents\PlatformIO\Projects

要安装项目源文件,请按照以下步骤操作:

  • 下载 RealTimeClock 源文件。它是一个 ZIP 文件。右键单击下载的文件,将所有文件解压到上面给出的 projects 文件夹中。
  • 您应该在 Projects 文件夹中看到一个 RealTimeClock 文件夹。
  • 启动 PlatformIO (Visual Studio Code) IDE。
  • 等待“欢迎使用 PlatformIO”页面加载完成。
  • 如果已有其他项目打开,请转到 文件关闭文件夹
  • 单击 打开项目
  • 单击 项目
  • 您应该会看到 RealTimeClock 文件夹。
  • 单击 RealTimeClock,然后再次单击 打开“RealTimeClock”
  • 项目将被加载。
  • 单击屏幕左侧的 PlatformIO 图标。
  • 项目任务 中,单击 构建
  • 项目将被编译。您应该在终端文本末尾看到 SUCCESS。
  • 将您已连接好线的项目面包板通过 USB 电缆连接到您的台式计算机。
  • 项目任务 中,单击 上传
  • 项目将再次编译并上传到 Arduino。您应该在终端文本末尾看到 SUCCESS。
  • 项目 LCD 屏幕应显示初始化消息 2 秒。
  • 接下来,您应该会看到项目的主屏幕。日期、时间和两行温度。

#include 注意:在软件开发过程中,我遇到了一个问题。PlatformIO 报错:lib\Adafruit GFX Library/Adafruit_MonoOLED.h:30:32: fatal error: Adafruit_I2CDevice.h: No such file or directory. 头文件 Adafruit_I2CDevice.h 已正确安装。为了解决这个问题,我在 main.cpp 中添加了两行 #include

#include <Adafruit_I2CDevice.h>
#include <Adafruit_SPIDevice.h>

main.cpp 不需要这些行。但是,它们解决了问题。需要明确的是,不应该出现错误消息,我也不明白为什么这两行能解决问题。

Arduino Studio IDE 的项目安装

  • 启动 Arduino Studio IDE。
  • 如果有一个活动项目,请转到 文件 并选择 新建。将显示一个新项目窗口。关闭第一个窗口。
  • RealTimeClock zip 文件中提取 main.cpp。它在 src 文件夹中。
  • 用记事本打开它。转到 编辑全选。再次转到 编辑 并选择 复制
  • 转到 Arduino Studio。转到 编辑全选。再次转到 编辑 并选择 粘贴
  • 转到 文件 并选择 另存为。将文件保存为 RealTimeClock
  • 单击 验证。您将收到一个错误,指出其中一个包含文件缺失。换句话说,您需要添加一个库。
  • 单击 草图 并选择 包含库
  • 单击 管理库。在搜索字段中,输入缺失库的名称。找到该库并按 安装。如果该库依赖于另一个库,请加载所有依赖库。
  • 您需要重复最后 4 个步骤几次。当所有库都加载后,验证成功。
  • 将您已连接好线的项目面包板通过 USB 电缆连接到您的台式计算机。
  • 点击 上传
  • 项目将再次编译并上传到 Arduino。
  • 项目 LCD 屏幕应显示初始化消息 2 秒。
  • 接下来,您应该会看到项目的主屏幕。日期、时间和两行温度。

用户设置

项目下载后,您需要设置日期和时间,并设置显示偏好。

该项目有三个按钮:

  • 设置 按钮连接到引脚 D9。
  • 增加 按钮连接到引脚 D8。
  • 减少 按钮连接到引脚 D7。

Main Menu

按住 设置 按钮至少 2 秒。系统将切换到设置模式。将有四个选项:(1)闹钟,(2)日期时间,(3)夏令时,和(4)显示样式。使用 增加减少 按钮选择其中一个选项。按下 设置 按钮确认,并进入下一步。

如果在设置过程中,所有三个按钮在 12 秒内均未按下,则设置模式取消,显示正常时钟屏幕。

闹钟设置。第一个选项是 闹钟关闭闹钟开启。选择并按下 设置闹钟关闭 会带您返回正常时钟屏幕。闹钟开启 会给您三个额外的屏幕:小时、分钟和以秒为单位的闹钟持续时间。在每个屏幕后按下 设置

日期时间设置。有五个屏幕需要设置:年、月、日、小时和分钟。星期几是根据日期计算的。如果您希望时钟非常准确,请将分钟值设置为比您的手机或台式机多一分钟。等待您的准确设备上的时间发生变化,然后立即按下设置。

夏令时设置。有三个选项:取消、春天 +1 小时和秋天 -1 小时。此选项允许用户在春天将时钟提前一小时。并在秋天将时钟调回一小时。软件将确保时钟的分钟和秒不受影响。此外,如果用户在晚上 11 点增加一小时,小时和日期将相应改变。同样,如果用户在午夜后立即将时钟调回,软件将适当设置小时和日期。

显示样式。有三个屏幕可设置您的主屏幕显示样式。

  1. 日历日期可以是以下三种格式之一:yyyy/mm/dd、dd/mm/yyyy 或 mm/dd/yyyy。
  2. 时钟可以是 24 小时制或 12 小时制。
  3. 温度可以是摄氏度或华氏度。在每个屏幕后按下 设置

Arduino Nano 有限的 SRAM

Arduino nano 只有 2K 字节的 SRAM 内存。如果您使用过多的静态文本字符串,或者使用 sprint() 等标准库方法,很可能没有可用的空闲堆栈空间。您的软件将崩溃。它会冻结或重启 Arduino。我发现了一个小方法在这个网站上。它位于 main.cpp 源代码的末尾。它被注释掉了。如果您从任何方法调用 getFreeMemory(),它将显示堆栈可用的字节数。在我的例子中,我在 tempToStr(int temp) 方法的末尾调用了它。

历史

  • 2020年9月2日:版本 1.0 原始版本
  • 2020年9月3日:版本 1.1 更改 #include 文件 Adafruit_MonoOLED.h
  • 2020年9月4日:版本 1.2 夏令时
© . All rights reserved.