电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>具有最小值和最大值的极低功耗温度和湿度监控器

具有最小值和最大值的极低功耗温度和湿度监控器

2022-11-17 | zip | 0.42 MB | 次下载 | 免费

资料介绍

描述

我需要一个温度和湿度传感器来显示记录的最高和最低水平,以便我可以监控温室中的水平。我在温室里没有任何电源,所以目的是尽可能减少功耗,以便它可以长时间使用可充电电池。

对此的解决方案是让 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);
   }
 }

我们首先检查系统是否在最后一个按钮被按下后保持清醒的时间长于设置的保持清醒的时间。timeWokenmillis()按下按钮的那一刻经过。

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),或者我发现用刀刮过它更容易打破它,因为这会使柱子焊接到,并焊接在外部电阻器上以减少电流下表显示了电阻值和产生的电流。(用仪表检查您是否仍在读取连接上的正确电阻,因为很容易将它们短路,这可能会造成损坏。)

pYYBAGN0M_CAL_eVAABbRvVPx5I954.png
 

 


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费