資料介紹
描述
我需要一個溫度和濕度傳感器來顯示記錄的最高和最低水平,以便我可以監控溫室中的水平。我在溫室里沒有任何電源,所以目的是盡可能減少功耗,以便它可以長時間使用可充電電池。
對此的解決方案是讓 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次下載
- 數字溫度計程序 8次下載
- C語言教程之求數組元素中的最小值 0次下載
- CDMA1X功率控制介紹-功控的數據配置
- 正弦交流電的瞬時值、最大值、有效值 9.3k次閱讀
- 運放參數講解:最對最大值和推薦工作條件 2.4k次閱讀
- 西門子博途中如何讀取其它類型數組的最大值及索引 2.9k次閱讀
- 西門子PLC獲取最小值指令的工作原理 4.1k次閱讀
- CMOS圖像傳感器的動態范圍 2.7k次閱讀
- 無毛刺電壓監控器的基礎知識 1.4k次閱讀
- SIMATIC S7-1500 PLC獲取最大值與最小值指令簡述 1w次閱讀
- 用SCL編寫數據排序的程序 1.7k次閱讀
- 如何確認LTM8065的電壓變動值 1.6k次閱讀
- 基于MSP430F449單片機和MAX1270芯片實現峰值表設備應用系統的設計 3.5k次閱讀
- 基于AT89S52單片機和LTM8901實現智能環境溫濕度控制系統的設計 1.8k次閱讀
- 如何計算電源IC的損耗 4.3k次閱讀
- 電源反饋光耦CTR值的影響 6.7k次閱讀
- FPGA上如何求32個輸入的最大值和次大值:分治 9k次閱讀
- ADuC7061和外部RTD構建的基于USB的溫度監控器 3.3k次閱讀
下載排行
本周
- 1新一代網絡可視化(NPB 2.0)
- 3.40 MB | 1次下載 | 免費
- 2冷柜-電氣控制系統講解
- 13.68 MB | 1次下載 | 10 積分
- 3MDD品牌三極管MMBT3906數據手冊
- 2.33 MB | 次下載 | 免費
- 4MDD品牌三極管S9012數據手冊
- 2.62 MB | 次下載 | 免費
- 5LAT1218 如何選擇和設置外部晶體適配 BlueNRG-X
- 0.60 MB | 次下載 | 3 積分
- 6LAT1216 Blue NRG-1/2 系列芯片 Flash 操作與 BLE 事件的互斥處理
- 0.89 MB | 次下載 | 3 積分
- 7收音環繞擴音機 AVR-1507手冊
- 2.50 MB | 次下載 | 免費
- 8MS1000TA 超聲波測量模擬前端芯片技術手冊
- 0.60 MB | 次下載 | 免費
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費
- 2PC5502負載均流控制電路數據手冊
- 1.63 MB | 23次下載 | 免費
- 3NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 4UWB653Pro USB口測距通信定位模塊規格書
- 838.47 KB | 5次下載 | 免費
- 5蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 6蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
- 7100W準諧振反激式恒流電源電路圖資料
- 0.09 MB | 2次下載 | 1 積分
- 8FS8025B USB的PD和OC快充協議電壓誘騙控制器IC技術手冊
- 1.81 MB | 1次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191439次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發燒友App





創作
發文章
發帖
提問
發資料
發視頻
上傳資料賺積分
評論