How can we help you today?
【感測】電壓監控 | Power
簡介
電壓監控功能就像是機器人的「體力條」或手機上的「電池百分比」。在現實生活中,不論是電動車、筆記型電腦還是無人機,隨時掌握剩餘電量對於安全運作至關重要。透過這項功能,機器人能主動察覺自己是否「體力不足」,並透過燈號顏色即時發出警報。這不僅能防止機器人在任務中途突然斷電,更重要的是能保護昂貴的鋰電池免於因「過度放電」而永久損壞,確保機器人的使用壽命。
在移動機器人開發中,穩定的電源供應是所有硬體運作的前提。dual2s 函式庫內建了 Power 類別,專門用於偵測控制板輸入端的實時電壓。本範例展示了如何利用 ESP32 的類比讀取功能獲取電池數值,並結合視覺化的 stateLED(狀態燈),建立一套直覺的電壓預警系統。
硬體機制與原理
- 偵測對象:針對 2S(兩串聯)鋰電池組進行電壓量測。
- 腳位配置:使用
DUAL2S_HW::BATTERY硬體預設腳位。 - 分壓電路:控制器內部已配置分壓電路,將高電壓轉為 ESP32 可安全讀取的範圍,類比讀取後再由類別內部演算法還原為實際電壓值(V)。
核心功能說明
- 實時讀取
read():- 回傳值:回傳一個
float類型的浮點數(例如7.85),代表目前的總電壓。 - 精準度:經過函式庫校正,可提供精確的電壓參考。
- 回傳值:回傳一個
- 安全閾值管理 (Safety Thresholds): 範例程式定義了基於 2S 鋰電池特性的三段式警報邏輯:
- 健康狀態 (>= 7.4V):顯示綠燈,代表電池充裕,可正常進行高負載動作(如前進、推擠)。
- 警告狀態 (< 7.4V):顯示黃燈,提示電壓已接近中位值,建議準備充電。
- 危險狀態 (< 6.4V):顯示紅燈,此時電壓極低,持續運作可能導致鋰電池永久性損壞,應立即停止馬達轉動並關閉電源。
開發重點建議
- 非阻斷監控:範例採用
millis()計時器(每秒更新一次),這能避免在讀取電壓時阻塞主程式的感測器讀取或馬達控制。 - 電壓波動預防:馬達在大電流啟動瞬間(例如突然加速)會導致電壓瞬間驟降(Sag)。在撰寫更複雜的判斷邏輯時,建議可以透過多次取樣平均或增加短暫延時判定,來避免頻繁的燈號閃爍。
dual2s控制器與環境
AI學伴
互動(1):基於函數庫 – dual2s
互動(2):基於範例程式
👉 你也可以在dual2s函數庫(./example/basic)中找到此範例程式。
/*=====================================================================================
yesio.net / 2026.03.12 / by nick
# Filename:07_powerMonitoring.ino
# Function:dual2s電壓之使用範例,
Examples of dual2S's application for voltage detection.
# Toolchain & Libs:ESP32 Arduino Core v3.3.5 (ESP-IDF v5.1), dual2s
======================================================================================*/
#include "dual2s.h"
#define NUM_LEDS 2 // 定義硬體腳位與 LED 數量
Power pwr(DUAL2S_HW::BATTERY); // 建立物件 - dual2s控制器電壓偵測
stateLED myLED(DUAL2S_HW::WSLED, NUM_LEDS); // 參數1:控制腳位, 參數2:燈數
unsigned long lastUpdate = 0;
void setup() {
Serial.begin(115200);
myLED.begin();
Serial.println("=== 電壓監控測試開始 ===");
}
void loop() {
unsigned long currentMillis = millis();
// 實驗因素, 是以每秒讀取一次電壓
if (currentMillis - lastUpdate >= 1000) {
lastUpdate = currentMillis;
float v = pwr.read();
// 根據 2S 鋰電池特性微調的安全閾值
if (v < 6.4) {
myLED.fillColor(stateLED::RED); // 危險低電量 (< 6.4V):顯示紅色 (建議立即斷電)
}
else if (v < 7.4) {
myLED.fillColor(stateLED::YELLOW); // 電量偏低 (< 7.4V):顯示黃色 (建議準備充電)
}
else {
myLED.fillColor(stateLED::GREEN); // 電量健康 (>= 7.4V):顯示綠色
}
Serial.printf("Battery Voltage: %.2fV\n", v);
}
}
