×

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

消耗积分:0 | 格式:zip | 大小:0.42 MB | 2022-11-17

王利祥

分享资料个

描述

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

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

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !