本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

低功耗的温湿度监控器
发布时间:2021-05-26
分享到:
低功耗的温湿度监控器
发布时间:2021-05-26
分享到:

该温湿度监控器可监视温室的温湿度,并将温湿度的最大值与最小值显示在LCD屏上。由于温室中无电源,所以该温湿度监控器要尽可能的减少功耗。所以,使用低功耗程序库使处理器进入睡眠状态,每隔24秒醒来一次以检查温度和湿度,该过程不到一秒钟。

硬件组件:

  • Arduino Nano R3
  • Arduino Pro Mini
  • LCD 显示屏(16*2)
  • DHT11温湿度传感器
  • 可充电电池(3.7v 1000mah)
  • 触觉开关
  • 连接线
  • 电阻 330kΩ、1M

软件应用程序:

原理图(温度/湿度监控器OLED):

面包板(温度/湿度监控器OLED):

原理图(温度/湿度监视器LCD原理图):

面包板(温度/湿度监视器LCD原理图):

代码(OLED版):

代码使用以下库

字体来自Adafruit图形核心库

loop()检查,看是否需要激活屏保模式或者是位图移动。

首先检查系统显示数据的时间是否超过设置的显示时间。timeDisplay是millis()按下按钮以激活显示或更改屏幕时经过的时间。

如果这段时间过去了,那么要确保将标志设置为指示不显示数据,并检查自上次移动位图以来经过的时间是否超过了(如果已超过)moveEvery,并调用例程以在其中显示电池位图。每次随机放置一个地方,以免烧坏。

然后,系统检查从获取最后一组读数以来是否经过了2秒钟,如果已超过,则刷新读数并更新最小值和最大值。

如系统正在显示,则使用switch语句调用例程以显示当前数据该显示的屏幕,然后调用例程来检查是否已按下按钮。

  • 如果当前不处于显示数据,则模式按钮(引脚2)将激活显示。如果处于显示模式,则使用switch语句在4个显示器之间循环显示。
  • 如果当前正处于显示数据,则“重置”按钮(引脚3),重置最小和最大的读数值。

如果从历史记录数据中的最后一条记录更新起已经过去了15分钟,则系统将调用例程以将当前读数存储在历史记录中。

检查电池电压:

使用模拟输入引脚读取电压。当使用3.7v伏特电池供电时,需要调整引脚使用的参考电压,否则它将与自己的电压进行比较。

语句analogReference(INTERNAL)将引脚设置为将输入电压与稳定的1.1v进行比较。所以需要将输入引脚上的电压降低至小于1.1v,以使其正常工作。这可以通过使用两个电阻1m和330k欧姆对电压进行分压来完成。即当电池充满电时为4.2v,引脚输入端的电压为4.2 / 4 = 1.05v。

函数BatterVoltage()读取模拟引脚,其范围从0v的0到1.1v的023,然后用该读数来计算出电池的实际电压。

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 ohm的调节电阻,它可以提供1000mAh的充电率。对于使用的1000mAh电池来说,该充电率过高,该电池最多充电500mAh。所以,卸下板上安装的电阻器(R3)并在其外部焊接一个电阻器来减少电流。

下表显示了电阻值和产生的电流。(用仪表检查连接处的电阻读数是否正确,因为很容易将其短路,可能会造成损坏)

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论