資料介紹
描述
該項(xiàng)目是我的項(xiàng)目“具有最小值和最大值的極低功率溫度和濕度監(jiān)視器”的演變。我想擴(kuò)展它以存儲(chǔ) 24 小時(shí)的歷史記錄并將其顯示在圖表中。如下所述,我必須刪除使處理器進(jìn)入睡眠狀態(tài)的代碼,因此我還添加了一個(gè)電池電量指示器,以便知道何時(shí)需要充電。
我在擴(kuò)展項(xiàng)目時(shí)遇到了幾個(gè)問(wèn)題:
-
最初我添加了一個(gè)數(shù)組來(lái)存儲(chǔ)溫度歷史
int tempHistory[96];
,這很好用,但是一旦我添加了第二個(gè)數(shù)組來(lái)消除濕度歷史int humidHistory[96]
,程序就不再運(yùn)行。它編譯并上傳,但甚至沒(méi)有運(yùn)行 setup()。盡管看起來(lái)有大量的備用程序和變量空間,但我能得出的唯一結(jié)論是它的內(nèi)存不足。因此,我更改了曲目,現(xiàn)在將歷史記錄存儲(chǔ)在 EPROM 中。 -
在鏈接的項(xiàng)目中,我通過(guò)調(diào)用睡眠模式降低了功耗以延長(zhǎng)電池壽命。這樣做的問(wèn)題是它會(huì)停止觸發(fā)計(jì)時(shí)器,因此
millis()
在睡眠期間不會(huì)前進(jìn)。這是一個(gè)問(wèn)題,因?yàn)槲蚁朊?15 分鐘(每天 96 分鐘)存儲(chǔ)一次讀數(shù),并且無(wú)法跟蹤睡眠時(shí)的經(jīng)過(guò)時(shí)間。因此,我刪除了激活睡眠模式的代碼。由于取消睡眠模式會(huì)縮短電池壽命,因此我添加了電池監(jiān)控功能,以便知道電池電量何時(shí)變低。 - 最后,我添加了一個(gè)屏幕保護(hù)程序,顯示每 10 秒移動(dòng)一次的電池電量。
編碼
該代碼使用以下庫(kù):
#include // This is the DHT sensor library by Adafruit
// 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
#include // Library to support writing to and reading from EPROM
這些來(lái)自 Adafruit 圖形核心庫(kù)的字體:
#include
#include
代碼中主要感興趣的領(lǐng)域:
檢查是否需要激活屏幕保護(hù)模式或移動(dòng)位圖。loop()
// Check if the time since last display of data started is greater than
// the time set to keeo the display showing
if ((millis() - timeDisplay) > keepDisplayFor) {
// If so in screen save mode
// Set flag to indicate data not being displayed
displaying = false;
// Check if we need to move the bitmap
if ((millis() - lastMoved) > moveEvery) {
// Update time last moved
lastMoved = millis();
// Dislpay battery bitmap in random position
DrawScreenSave(random(10, 110), random(10, 45));
}
}
我們首先檢查系統(tǒng)顯示數(shù)據(jù)的時(shí)間是否超過(guò)了設(shè)置的時(shí)間以保持顯示。timeDisplay
是millis()
按下按鈕以激活顯示或更改屏幕所經(jīng)過(guò)的時(shí)間。
if ((millis() - timeDisplay) > keepDisplayFor)...
如果這個(gè)時(shí)間已經(jīng)過(guò)去,那么我們確保標(biāo)志設(shè)置為指示我們不顯示數(shù)據(jù),并檢查自上次移動(dòng)位圖以來(lái)經(jīng)過(guò)的時(shí)間是否超過(guò)moveEvery
,如果超過(guò),那么我們調(diào)用例程來(lái)顯示電池位圖每次隨機(jī)放置一個(gè)位置,以免燒壞。
然后系統(tǒng)檢查自上次讀取一組讀數(shù)后是否已過(guò) 2 秒,如果已過(guò),則刷新讀數(shù)并更新最小值和最大值。
if ((millis() - lastReadingUpdate) > 2000ul) ...
如果系統(tǒng)正在顯示,則使用 switch 語(yǔ)句調(diào)用例程以呈現(xiàn)當(dāng)前選定的數(shù)據(jù)屏幕,然后調(diào)用例程以檢查是否已按下按鈕。
- 如果當(dāng)前未處于顯示模式,模式按鈕(引腳 2)將激活顯示。如果處于顯示模式,則它使用 switch 語(yǔ)句在 4 個(gè)顯示中循環(huán)。
- 如果當(dāng)前正在顯示數(shù)據(jù),重置按鈕(引腳 3)將重置最小和最大讀數(shù)的值。
最后,如果自歷史數(shù)據(jù)中的最后一條記錄更新以來(lái)已經(jīng)過(guò)去了 15 分鐘,則系統(tǒng)調(diào)用例程將當(dāng)前讀數(shù)存儲(chǔ)在歷史中。
檢查電池電壓
我們使用模擬輸入引腳來(lái)讀取電壓。由于我們使用 3.7v 伏電池運(yùn)行,我們需要調(diào)整引腳使用的參考電壓,否則它會(huì)將電壓與自身進(jìn)行比較。該語(yǔ)句analogReference(INTERNAL)
將引腳設(shè)置為將輸入電壓與穩(wěn)定的 1.1v 進(jìn)行比較。因此,我們需要將輸入引腳上的電壓降低到 1.1v 以下才能正常工作。這是通過(guò)使用 2 個(gè)電阻器(1m 和 330k 歐姆)對(duì)電壓進(jìn)行分壓來(lái)完成的。這將電壓除以大約 4,因此當(dāng)電池充滿(mǎn)電時(shí),即 4.2v,引腳輸入的電壓為 4.2/4 = 1.05v。
// Read the monitor pin and calculate the voltage
float BatteryVoltage(){
float reading = analogRead(MONITOR_PIN);
// Calculate voltage - reference voltage is 1.1v
return 1.1 * (reading/1023) * voltageDivider;
}
該函數(shù)BatterVoltage()
讀取模擬引腳,其范圍從 0 表示 0 伏到 1,023 表示 1.1 伏,并使用該讀數(shù)計(jì)算來(lái)自電池的實(shí)際電壓。
函數(shù)調(diào)用 this 然后根據(jù)DrawScreenSave()
以下內(nèi)容選擇要顯示的適當(dāng)位圖:
- 如果電壓大于 3.6v - 滿(mǎn)
- 3.5 和 3.6v 之間的電壓 - 3/4
- 3.4 和 3.5v 之間的電壓 - 一半
- 3.3 和 3.4v 之間的電壓 - 1/4
- 電壓 < 3.3v - 空
存儲(chǔ)歷史
如上所述,我最初將歷史記錄存儲(chǔ)在數(shù)組中,但似乎這會(huì)導(dǎo)致內(nèi)存問(wèn)題。因此,我將數(shù)據(jù)存儲(chǔ)在 EPROM 中的 96 個(gè)位置,分別是溫度和歷史,在一個(gè)循環(huán)列表中。EEPROM 庫(kù)在此處提供了管理數(shù)據(jù)的功能。
歷史記錄以整數(shù)形式存儲(chǔ),在 Arduino 上每個(gè)占 2 個(gè)字節(jié)。數(shù)據(jù)地址的指針histPointer
從0到95再回到0。tempStart
并humidStart
存儲(chǔ)每個(gè)列表的起始位置,每個(gè)位置就是起始位置+位置*2。
顯示圖表
圖形例程首先獲取歷史中的最小值和最大值,計(jì)算比例,然后使用從最舊值 ( histPointer
+1) 到存儲(chǔ)在的最新值的線(xiàn)繪制來(lái)繪制圖形histPointer
。
開(kāi)/關(guān)
如果您想添加一個(gè)開(kāi)/關(guān)開(kāi)關(guān),請(qǐng)將其插入從充電器模塊 OUT+ 到 Arduino 板的電線(xiàn)中。這將允許您在設(shè)備關(guān)閉的情況下為電池充電。
調(diào)節(jié)電池充電
所使用的 TP4056 充電器包括一個(gè) 1.1K 歐姆的調(diào)節(jié)電阻,以 1, 000mAh 的速率提供充電。對(duì)于使用的 1, 000mAh 電池來(lái)說(shuō),這實(shí)在是太高了,應(yīng)該以最大 500mAh 充電。這很繁瑣,但是您可以卸下板上安裝的電阻器(R3),或者我發(fā)現(xiàn)用刀刮過(guò)它更容易將其破壞,因?yàn)檫@會(huì)使柱子焊接到,并焊接在外部電阻器上以減少電流。下表顯示了電阻值和產(chǎn)生的電流。(用儀表檢查您是否仍在讀取連接上的正確電阻,因?yàn)楹苋菀讓⑺鼈兌搪?,這可能會(huì)造成損壞。)
?
- 使用4位7段顯示的溫度監(jiān)控器
- LED和蜂鳴器控制、光和溫度監(jiān)控器開(kāi)源
- 具有最小值和最大值的極低功耗溫度和濕度監(jiān)控器
- 使用Blynk應(yīng)用程序的物聯(lián)網(wǎng)溫度和濕度監(jiān)控器
- 超低功耗穩(wěn)壓器、監(jiān)控器和PMIC
- 電壓監(jiān)控器和監(jiān)控器快速指南
- 小尺寸、低功耗、單向、電流分流監(jiān)控器零漂移系列 19次下載
- 帶有兩線(xiàn)制接口的高側(cè)或低側(cè)、雙向電流功率監(jiān)控器 5次下載
- 數(shù)據(jù)記錄功能的無(wú)線(xiàn)溫度監(jiān)控器 3次下載
- 阻容復(fù)位器和監(jiān)控器復(fù)位脈沖比較 11次下載
- 數(shù)字和模擬溫度監(jiān)控器LTC299x系列 4次下載
- MSR無(wú)線(xiàn)溫度監(jiān)控器操作說(shuō)明書(shū)
- AD8280鋰電子電池安全監(jiān)控器
- 阻容復(fù)位器和監(jiān)控器復(fù)位脈沖比較
- 斷相 相序監(jiān)控器電路及制作
- 典型監(jiān)控器電路圖分享 3445次閱讀
- 如何提高電壓監(jiān)控器IC的性能 559次閱讀
- ADBMS2950高壓電池組監(jiān)控器簡(jiǎn)介 4945次閱讀
- 電壓監(jiān)控器IC的來(lái)龍去脈 1217次閱讀
- 監(jiān)控器IC監(jiān)控電池供電設(shè)備 704次閱讀
- 無(wú)故障監(jiān)控器如何幫助高可靠性應(yīng)用 464次閱讀
- 無(wú)毛刺電壓監(jiān)控器的基礎(chǔ)知識(shí) 581次閱讀
- 多電壓系統(tǒng)中的監(jiān)控器 732次閱讀
- 向CPU監(jiān)控器電壓檢測(cè)輸入添加遲滯,監(jiān)控上游電源的電源故障警告 862次閱讀
- 監(jiān)控器IC監(jiān)控電池供電設(shè)備 1076次閱讀
- I2帶EEPROM的C可編程多通道電壓監(jiān)控器 946次閱讀
- 無(wú)毛刺電壓監(jiān)控器的基礎(chǔ)知識(shí) 1249次閱讀
- 電壓檢測(cè)器、監(jiān)控器和高級(jí)監(jiān)控各種功能介紹:第1部分 4859次閱讀
- ADuC7061和外部RTD構(gòu)建的基于USB的溫度監(jiān)控器 2922次閱讀
- 全隔離式鋰離子電池監(jiān)控和保護(hù)系統(tǒng) 2432次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開(kāi)發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多