资料介绍
描述
该项目是我的项目“具有最小值和最大值的极低功率温度和湿度监视器”的演变。我想扩展它以存储 24 小时的历史记录并将其显示在图表中。如下所述,我必须删除使处理器进入睡眠状态的代码,因此我还添加了一个电池电量指示器,以便知道何时需要充电。
我在扩展项目时遇到了几个问题:
-
最初我添加了一个数组来存储温度历史
int tempHistory[96];
,这很好用,但是一旦我添加了第二个数组来消除湿度历史int humidHistory[96]
,程序就不再运行。它编译并上传,但甚至没有运行 setup()。尽管看起来有大量的备用程序和变量空间,但我能得出的唯一结论是它的内存不足。因此,我更改了曲目,现在将历史记录存储在 EPROM 中。 -
在链接的项目中,我通过调用睡眠模式降低了功耗以延长电池寿命。这样做的问题是它会停止触发计时器,因此
millis()
在睡眠期间不会前进。这是一个问题,因为我想每 15 分钟(每天 96 分钟)存储一次读数,并且无法跟踪睡眠时的经过时间。因此,我删除了激活睡眠模式的代码。由于取消睡眠模式会缩短电池寿命,因此我添加了电池监控功能,以便知道电池电量何时变低。 - 最后,我添加了一个屏幕保护程序,显示每 10 秒移动一次的电池电量。
编码
该代码使用以下库:
#include // This is the DHT sensor library by Adafruit
// required for the OLED display
#include // Synchronous serial data protocol library
#include // IC2 communications library
#include // Adafruit Graphics Core Library
#include // SSD1306 library for Monochrome 128x64 and 128x32 OLEDs
#include // Library to support writing to and reading from EPROM
这些来自 Adafruit 图形核心库的字体:
#include
#include
代码中主要感兴趣的领域:
检查是否需要激活屏幕保护模式或移动位图。loop()
// Check if the time since last display of data started is greater than
// the time set to keeo the display showing
if ((millis() - timeDisplay) > keepDisplayFor) {
// If so in screen save mode
// Set flag to indicate data not being displayed
displaying = false;
// Check if we need to move the bitmap
if ((millis() - lastMoved) > moveEvery) {
// Update time last moved
lastMoved = millis();
// Dislpay battery bitmap in random position
DrawScreenSave(random(10, 110), random(10, 45));
}
}
我们首先检查系统显示数据的时间是否超过了设置的时间以保持显示。timeDisplay
是millis()
按下按钮以激活显示或更改屏幕所经过的时间。
if ((millis() - timeDisplay) > keepDisplayFor)...
如果这个时间已经过去,那么我们确保标志设置为指示我们不显示数据,并检查自上次移动位图以来经过的时间是否超过moveEvery
,如果超过,那么我们调用例程来显示电池位图每次随机放置一个位置,以免烧坏。
然后系统检查自上次读取一组读数后是否已过 2 秒,如果已过,则刷新读数并更新最小值和最大值。
if ((millis() - lastReadingUpdate) > 2000ul) ...
如果系统正在显示,则使用 switch 语句调用例程以呈现当前选定的数据屏幕,然后调用例程以检查是否已按下按钮。
- 如果当前未处于显示模式,模式按钮(引脚 2)将激活显示。如果处于显示模式,则它使用 switch 语句在 4 个显示中循环。
- 如果当前正在显示数据,重置按钮(引脚 3)将重置最小和最大读数的值。
最后,如果自历史数据中的最后一条记录更新以来已经过去了 15 分钟,则系统调用例程将当前读数存储在历史中。
检查电池电压
我们使用模拟输入引脚来读取电压。由于我们使用 3.7v 伏电池运行,我们需要调整引脚使用的参考电压,否则它会将电压与自身进行比较。该语句analogReference(INTERNAL)
将引脚设置为将输入电压与稳定的 1.1v 进行比较。因此,我们需要将输入引脚上的电压降低到 1.1v 以下才能正常工作。这是通过使用 2 个电阻器(1m 和 330k 欧姆)对电压进行分压来完成的。这将电压除以大约 4,因此当电池充满电时,即 4.2v,引脚输入的电压为 4.2/4 = 1.05v。
// Read the monitor pin and calculate the voltage
float BatteryVoltage(){
float reading = analogRead(MONITOR_PIN);
// Calculate voltage - reference voltage is 1.1v
return 1.1 * (reading/1023) * voltageDivider;
}
该函数BatterVoltage()
读取模拟引脚,其范围从 0 表示 0 伏到 1,023 表示 1.1 伏,并使用该读数计算来自电池的实际电压。
函数调用 this 然后根据DrawScreenSave()
以下内容选择要显示的适当位图:
- 如果电压大于 3.6v - 满
- 3.5 和 3.6v 之间的电压 - 3/4
- 3.4 和 3.5v 之间的电压 - 一半
- 3.3 和 3.4v 之间的电压 - 1/4
- 电压 < 3.3v - 空
存储历史
如上所述,我最初将历史记录存储在数组中,但似乎这会导致内存问题。因此,我将数据存储在 EPROM 中的 96 个位置,分别是温度和历史,在一个循环列表中。EEPROM 库在此处提供了管理数据的功能。
历史记录以整数形式存储,在 Arduino 上每个占 2 个字节。数据地址的指针histPointer
从0到95再回到0。tempStart
并humidStart
存储每个列表的起始位置,每个位置就是起始位置+位置*2。
显示图表
图形例程首先获取历史中的最小值和最大值,计算比例,然后使用从最旧值 ( histPointer
+1) 到存储在的最新值的线绘制来绘制图形histPointer
。
开/关
如果您想添加一个开/关开关,请将其插入从充电器模块 OUT+ 到 Arduino 板的电线中。这将允许您在设备关闭的情况下为电池充电。
调节电池充电
所使用的 TP4056 充电器包括一个 1.1K 欧姆的调节电阻,以 1, 000mAh 的速率提供充电。对于使用的 1, 000mAh 电池来说,这实在是太高了,应该以最大 500mAh 充电。这很繁琐,但是您可以卸下板上安装的电阻器(R3),或者我发现用刀刮过它更容易将其破坏,因为这会使柱子焊接到,并焊接在外部电阻器上以减少电流。下表显示了电阻值和产生的电流。(用仪表检查您是否仍在读取连接上的正确电阻,因为很容易将它们短路,这可能会造成损坏。)
- TI电池监控器IC的HDQ通信基础知识
- 使用4位7段显示的温度监控器
- LED和蜂鸣器控制、光和温度监控器开源
- 具有最小值和最大值的极低功耗温度和湿度监控器
- 使用Blynk应用程序的物联网温度和湿度监控器
- 超低功耗稳压器、监控器和PMIC
- 电压监控器和监控器快速指南
- 带有两线制接口的高侧或低侧、双向电流功率监控器 5次下载
- 数据记录功能的无线温度监控器 3次下载
- 阻容复位器和监控器复位脉冲比较 11次下载
- 数字和模拟温度监控器LTC299x系列 4次下载
- MSR无线温度监控器操作说明书
- AD8280锂电子电池安全监控器
- 阻容复位器和监控器复位脉冲比较
- 断相 相序监控器电路及制作
- 典型监控器电路图分享 4888次阅读
- 如何提高电压监控器IC的性能 716次阅读
- ADBMS2950高压电池组监控器简介 6254次阅读
- 电压监控器IC的来龙去脉 1521次阅读
- 监控器IC监控电池供电设备 901次阅读
- 无故障监控器如何帮助高可靠性应用 593次阅读
- 无毛刺电压监控器的基础知识 770次阅读
- 多电压系统中的监控器 968次阅读
- 向CPU监控器电压检测输入添加迟滞,监控上游电源的电源故障警告 1081次阅读
- 监控器IC监控电池供电设备 1231次阅读
- I2带EEPROM的C可编程多通道电压监控器 1145次阅读
- 无毛刺电压监控器的基础知识 1514次阅读
- 电压检测器、监控器和高级监控各种功能介绍:第1部分 5094次阅读
- ADuC7061和外部RTD构建的基于USB的温度监控器 3034次阅读
- 全隔离式锂离子电池监控和保护系统 2502次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多