资料介绍
描述
我需要一个温度和湿度传感器来显示记录的最高和最低水平,以便我可以监控温室中的水平。我在温室里没有任何电源,所以目的是尽可能减少功耗,以便它可以长时间使用可充电电池。
对此的解决方案是让 Arduino 进入低功耗状态一段时间,然后唤醒并获取新的读数,然后重复循环。为了实现这一点,我使用了rocketscream 低功耗库让处理器进入睡眠状态,每24 秒唤醒一次以检查温度和湿度,这需要不到一秒的时间。
(注意:我已经创建了这个项目温度和湿度监视器的变体,带有图表和电池监视器,您可能还想查看它。不使用省电但电池仍然持续 5 天,电池监视器会告诉您何时需要充电。)
我的第一个版本使用带有 16x2 背光 LCD 显示屏的 Ardino Nano R3。这运行良好,功耗如下:
Asleep: 24 seconds 5.6mA
Checking temp./humid. between sleeps <1 second 14mA
So on average 6.0mA
With backlight on 28.5mA
使用 1, 000 mAh 可充电电池,系统应在两次充电之间持续长达 7 天 - 频繁打开背光显然会减少这种情况。事实上,我的版本已经运行了 8 多天,并且仍在运行。
第二个版本使用带有 OLED 128*64 显示屏的 Arduino Pro Mini。显示器不需要背光,在明亮的日光下更容易阅读。其功耗为:
Asleep: 24 seconds 3.23mA
Checking temp./humid. between sleeps <1 second 6.8mA
So on average 3.4mA
Awake - displaying
使用 1, 000 mAh 可充电电池,系统应在两次充电之间持续使用长达 12 天 - 经常打开显示器会减少这种情况,但它的消耗量很低,因此不会被注意到。
我已经包含了两个版本的原理图和代码。任何一个版本都应该在大多数 Arduinos 上运行。
代码(OLED版)
该代码使用以下库:
#include // This is the DHT sensor library by Adafruit
#include "LowPower.h" // Low-Power library from rocketscream
// 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
这些来自 Adafruit 图形核心库的字体:
#include
#include
代码中主要感兴趣的领域是loop()
使处理器进入睡眠状态的领域。
// Check to see if has been awake for the keepAwakeFor period
// if so allow to go to sleep
if ((millis() - timeWoken) > (keepAwakeFor * 1000)) {
awake = false;
// Sleep for 24 seconds
for (int i = 0; i < 3; i++){
display.clearDisplay();
display.drawBitmap(random(10, 110), random(10, 48), snooze, 16, 16, WHITE);
display.display();
// Allow wake up pin to trigger interrupt on low.
attachInterrupt(0, wakeUp, LOW);
// Enter power down state with ADC and BOD module disabled.
// Wake up when wake up pin is low or after 8 seconds.
// If wake up button pressed then as long as button held down for more
// than a few milliseconds it will fall through any remaining sleep loops
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
// Disable external pin interrupt on wake up pin.
detachInterrupt(0);
}
}
我们首先检查系统是否在最后一个按钮被按下后保持清醒的时间长于设置的保持清醒的时间。timeWoken
在millis()
按下按钮的那一刻经过。
if ((millis() - timeWoken) > (keepAwakeFor * 1000))...
如果这个时间已经过去,那么我们循环 3 次,每次在随机位置显示贪睡图标以避免烧机,并使处理器休眠 8 秒。在进入睡眠之前启用引脚 2 上的中断。如果通过按下模式按钮引脚变为低电平,这将唤醒处理器并继续运行代码。如果此时处于最后一个循环中,则后续的睡眠循环将失败,因为它们会在按钮释放之前很快发生。
在 3 次循环 24 秒后,系统会运行 3 次循环以检查传感器读数并更新最小值和最大值。(注意:仅检查一次并不能成功读取,但循环 3 次更正了此问题)。它还检查处理器是否处于唤醒状态,以及是否显示设置。枚举模式跟踪是否要显示温度或湿度。
最后,如果系统处于唤醒状态,则检查按钮是否已按下:
模式按钮(引脚 2)将在温度和湿度之间切换显示
重置按钮(引脚 3)将重置最小和最大读数的值
中断
如果系统处于睡眠状态并且按下模式按钮,则调用中断:
void wakeUp()
{
// Handler for the pin interrupt.
timeWoken = millis(); // Reset so remains awake for awake period
awake = true;
justWoken = true;
}
这只是设置系统被唤醒的时间,设置awake
标志并设置justWoken
用于默认显示温度(在 中loop()
),并在下一次检查按钮之前调用延迟。
代码(LCD 16x2 版本)
LCD 16x2 显示版本的代码非常相似,仅在显示处理和控制背光时需要更改。
需要更少的库:
// Include driver for the DHT
// This is the DHT sensor library by Adafruit
#include
// Include the library driver for display:
#include
// Include Low-Power library from rocketscream
#include "LowPower.h"
在主loop()
菜单中,如果背光灯也被检查并关闭,如果它已在 中设置的时间段内打开lightTimeOut
。
// Check if need to turn backlight off
if (lightOn && ((millis() - timeLightTurnedOn) > (lightTimeOut * 1000)))
TurnBacklightOff();
按下模式按钮时背光打开。
开/关
如果您想添加一个开/关开关,请将其插入从充电器模块 OUT+ 到 Arduino 板的电线中。这将允许您在设备关闭的情况下为电池充电。
调节电池充电
所使用的 TP4056 充电器包括一个 1.1K 欧姆的调节电阻,可提供 1,000mAh 的充电速率。这对于使用的 1,000mAh 电池来说实在是太高了,它应该以最大 500mAh 充电。这很繁琐,但您可以卸下板上安装的电阻器(R3),或者我发现用刀刮过它更容易打破它,因为这会使柱子焊接到,并焊接在外部电阻器上以减少电流。下表显示了电阻值和产生的电流。(用仪表检查您是否仍在读取连接上的正确电阻,因为很容易将它们短路,这可能会造成损坏。)
- 使用Blynk应用程序的物联网温度和湿度监控器
- 带有图表和电池监控器的温度和湿度监控器
- AD629A SPICE宏模型最小值
- CN0398 带温度补偿功能的土壤湿度和pH值测量系统
- 超低功耗稳压器、监控器和PMIC
- AD8677:130最大的V最大值Office Office Opp在TSOT数据Sheet
- AD629A SPICE宏模型最小值
- CN0326:具有温度补偿的隔离式低功耗PH值测试系统
- 基于MCP6V81/1U下的5 MHz、 0.5 mA 零漂移运放
- 有温度补偿的隔离式低功耗PH值测试系统 9次下载
- 具有温度补偿的隔离式低功耗PH值测试系统 12次下载
- 排除最大最小值后求平均值 11次下载
- 数字温度计程序 7次下载
- C语言教程之求数组元素中的最小值 0次下载
- CDMA1X功率控制介绍-功控的数据配置
- 正弦交流电的瞬时值、最大值、有效值 3256次阅读
- 运放参数讲解:最对最大值和推荐工作条件 947次阅读
- 西门子博途中如何读取其它类型数组的最大值及索引 1526次阅读
- 西门子PLC获取最小值指令的工作原理 2175次阅读
- CMOS图像传感器的动态范围 1315次阅读
- 无毛刺电压监控器的基础知识 581次阅读
- SIMATIC S7-1500 PLC获取最大值与最小值指令简述 6443次阅读
- 用SCL编写数据排序的程序 1000次阅读
- 如何确认LTM8065的电压变动值 795次阅读
- 基于MSP430F449单片机和MAX1270芯片实现峰值表设备应用系统的设计 2353次阅读
- 基于AT89S52单片机和LTM8901实现智能环境温湿度控制系统的设计 1247次阅读
- 如何计算电源IC的损耗 3448次阅读
- 电源反馈光耦CTR值的影响 5938次阅读
- FPGA上如何求32个输入的最大值和次大值:分治 8321次阅读
- ADuC7061和外部RTD构建的基于USB的温度监控器 2922次阅读
下载排行
本周
- 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次下载 | 免费
评论
查看更多