Arduino 温度。使用 3.2 显示的监视器和实时时钟
组件和用品
![]() |
| × | 1 |
应用和在线服务
![]() |
|
关于这个项目
简介

亲爱的朋友们欢迎来到另一个教程!这是来自 edu8s.tv 的 Nick,今天我们将看看如何开发这个实时时钟和温度监控器!让我们开始吧!
几周前,我使用 Arduino Mega 和 Due 为 Arduino 测试了这款 3.2 英寸彩色 TFT 显示器。显示效果很好,我用它构建了一个简单的项目。它是一个温度监视器和一个实时时钟。正如您在顶部看到的,我们可以看到当前的日期和时间,我们可以看到现在的温度,在底部,Arduino 记录了它测量的最低和最高温度。我还尝试用简单的形状设计一个基本的用户界面。如您所见,一切正常,这是一个非常容易且有用的项目。来看看怎么做吧!
第 1 步:获取所有零件
构建这个项目所需的部分是:
- Arduino到期
- 3.2 英寸彩色 TFT 显示屏
- DS3231 RTC 模块
- 男头
- 电线
该项目的成本约为 24 美元。 Arduino Due 大约需要 14 美元,显示器需要 8 美元,RTC 模块需要大约 2 美元。
第 2 步:DS3231 实时时钟模块

DS3231 实时时钟模块顾名思义就是一个实时时钟。使用它的电池,它可以保持数年的时间,因为它的功耗最小。
DS3231 是一款低成本、极其精确的 I2C 实时时钟 (RTC),具有集成的温度补偿晶体振荡器 (TCXO) 和晶体。该设备包含一个电池输入,并在设备的主电源中断时保持准确的计时。晶体谐振器的集成提高了器件的长期精度,并减少了生产线上的零件数。
RTC 维护秒、分、小时、日、日期、月和年信息。对于少于 31 天的月份,月末的日期会自动调整,包括闰年的更正。时钟以 24 小时或 12 小时格式运行,并带有 AM/PM 指示器。提供了两个可编程的时间警报和一个可编程的方波输出。地址和数据通过I2C双向总线串行传输。
模块成本极低;包括电池在内,它的成本约为 2 美元!
从这里获取。
我们将使用它来计时并从中获取温度读数!
第 3 步:3.2" 彩色 TFT 显示屏(HX8357C 或 HX8357B)

我一直想为我的 Arduino 项目配备一个大显示器。所以,几周前我决定为 Arduino Mega 和 Arduino Due 购买这款 3.2 英寸彩色 TFT 显示器,因为价格太诱人了! 3.2 英寸彩色 TFT 显示器不到 10 美元。以这个价格,你不会出错。
从这里获取。
显示器的分辨率为 480x320 像素,背面有一个 SD 卡适配器。到目前为止我还没有使用过 SD 卡功能。我将来会尝试使用它。如果仔细观察,您会发现该显示器还使用了 3.3V 稳压器,因此它可以在 5V 和 3.3V 逻辑电平下正常工作。
显示器有两种变体。其中一个使用 HX8357C 控制器,另一个使用 HX8357B 控制器。幸运的是,我们可以为它们使用相同的库。
显示库。
下载库后,如果您的显示器使用的是 HX8357C 驱动程序,就像我的一样,您必须打开 User_Setup.h 文件注释第 13 行和取消注释第 14 行。
第 4 步:连接零件




我将使用 Arduino 由于构建这个项目,虽然我可以使用稍微便宜但速度较慢的 Arduino Mega。 Arduino Due 比 Arduino Mega 快得多,而且它有很多内存,这就是我在这个项目中更喜欢它的原因。
首先,我们必须将所有部分连接在一起。我将使用这些公接头将 RTC 模块连接到 Arduino DUE。
我们需要四个头针。两个用于电源,两个用于 I2C 接口。我们像这样弯曲它们,将一个连接到 Arduino Due 板的 3.3V 引脚,另一个连接到 GND,另外两个连接到板的 SDA 和 SCL 引脚。使用一些母线,我们将模块连接到电路板上。而已。
现在我们可以将显示器连接到板上。您不必将这两个引脚连接到 Arduino 板,因此我将它们悬空。
现在我们已准备好启动项目。如您所见,它运行良好!就这么简单!现在让我们去电脑上看看项目的软件端。
第五步:项目代码

现在我们准备看一下代码。我们在这个项目中使用了两个库:
- 显示库
- DS3231 库
您必须安装它们,然后项目才能正常编译!
如果尚未设置实时时钟模块,我们要做的第一件事就是将时间设置为实时时钟模块。为此,请在 void setRTCTime 函数中输入当前日期和时间,
void setRTCTime(){ DateTime dt(2016, 4, 4, 13, 56, 30, 1); // 年、月、日、小时、分钟、秒、星期几 rtc.setDateTime(dt); }
在 Setup 函数中取消对函数调用的注释:
void setup(){ rtc.begin(); tft.init(); tft.setRotation(1); tft.fillScreen(0xC618);延迟(100);打印界面(); setRTCTime();}
并将程序上传到Arduino。现在时间已经确定。但是,我们必须再次注释 setRTCTime 函数的调用,并再次将程序上传到 Arduino。
void setup(){ rtc.begin(); tft.init(); tft.setRotation(1); tft.fillScreen(0xC618);延迟(100);打印界面(); //setRTCTime();}
如您所见,该项目的代码很简单。我们只是打印用户界面,然后在上面显示日期、时间和时间。
void loop(){ float temperature =rtc.getTemperature(); getAndPrintTime();打印温度(温度);如果(温度> maxTemperature){ maxTemperature =温度;更新最大温度(); }if(温度
您可以找到此步骤附带的代码。您可以从这里的项目网站下载最新版本的代码:http://eduino-real-time-clock-32/
DueRTC.ino
第 6 步:最后的想法

正如您所看到的,只需几行代码,我们就可以以非常低的成本构建一个非常有用的项目。我将在这个项目上做更多的工作,因为它将成为一个先进的气象站,拥有更多的传感器、图表和 wifi 功能。
由于 Arduino Due 速度非常快并且有大量内存,我认为它是理想的 Arduino 板。你觉得这个项目怎么样?你希望看到它如何发展?
请在下面的评论部分发表您的评论或想法。
代码
- 代码片段#2
- 代码片段 #3
- 代码片段 #4
代码片段#2纯文本
void setup(){ rtc.begin(); tft.init(); tft.setRotation(1); tft.fillScreen(0xC618);延迟(100);打印界面(); setRTCTime();}
代码片段 #3纯文本
void setup(){ rtc.begin(); tft.init(); tft.setRotation(1); tft.fillScreen(0xC618);延迟(100);打印界面(); //setRTCTime();}
代码片段 #4纯文本
void loop(){ 浮动温度 =rtc.getTemperature(); getAndPrintTime();打印温度(温度);如果(温度> maxTemperature){ maxTemperature =温度;更新最大温度(); }if(温度Github
https://github.com/Bodmer/TFT_HX8357_Duehttps://github.com/Bodmer/TFT_HX8357_DueGithub
https://github.com/SodaqMoja/Sodaq_DS3231https://github.com/SodaqMoja/Sodaq_DS3231
制造工艺