باتری LiPo و خطر تخلیه بیش از حد چیست؟ (برای مبتدی)
باتریهای LiPo (Lithium Polymer) برای پهپاد، RC Car و UGV به دلیل وزن سبک و انرژی بالا بسیار محبوب هستند. اما این باتریها به تخلیه بیش از حد بسیار حساسند. اگر ولتاژ هر سلول زیر ۳.۰V برسد، باتری به طور دائمی آسیب میبیند و ممکن است آتش بگیرد.
محدوده ایمن هر سلول LiPo: ولتاژ پر = ۴.۲V، ولتاژ ناماسمی = ۳.۷V، حداقل مجاز = ۳.۵V، خط قرمز = ۳.۳V. یک باتری 3S (سه سلول) بین ۹.۹V تا ۱۲.۶V کار میکند. سیستم هشدار ولتاژ این مقادیر را پایش میکند و در مواقع خطر هشدار میدهد.
یک مقسم ولتاژ (Voltage Divider) ساده با دو مقاومت میتواند ولتاژ ۱۲.۶V را به ۵V کاهش دهد تا Arduino آن را بخواند — و ما از این مدار ساده برای اندازهگیری دقیق ولتاژ باتری استفاده میکنیم.
محصولی که میسازید
یک هشدار ولتاژ باتری LiPo که ولتاژ فعلی را روی OLED نمایش میدهد و در ولتاژ خطر بازر میزند.
- زمان ساخت: ۱.۵ تا ۲.۵ ساعت
- هزینه: ۲۵۰ تا ۴۰۰ هزار تومان
- سازگار با: 2S تا 6S LiPo
محاسبه مقسم ولتاژ برای 3S
// فرمول: V_out = V_in × R2 / (R1 + R2)
// هدف: 12.6V → 3.15V (کمی زیر 3.3V رفرانس Arduino)
// برای 3S LiPo (حداکثر 12.6V):
// R1 = 30kΩ, R2 = 10kΩ
// V_out = 12.6 × 10 / (30+10) = 3.15V ✓
// برای 4S LiPo (حداکثر 16.8V):
// R1 = 47kΩ, R2 = 10kΩ
// V_out = 16.8 × 10 / (47+10) = 2.95V ✓
// ضریب تبدیل برای 3S:
// V_bat = ADC_read × (5.0/1023.0) × (30+10)/10
// = ADC_read × 5.0 / 1023.0 × 4.0
کد Arduino
#include <Wire.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
const int VOLT_PIN = A0;
const int BUZZ_PIN = 9;
const float R_RATIO = 4.0; // (R1+R2)/R2 = 40k/10k
const float VREF = 5.0;
const int CELLS = 3;
// آستانههای هشدار
const float WARN_V = 3.65; // هشدار اول (ولتاژ/سلول)
const float ALARM_V = 3.5; // هشدار دوم — بیپ سریع
const float CUTOFF_V = 3.3; // قطع — بیپ ممتد
void setup() {
pinMode(BUZZ_PIN, OUTPUT);
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.clearDisplay(); oled.setTextColor(WHITE);
}
void loop() {
int raw = analogRead(VOLT_PIN);
float vBat = raw * (VREF / 1023.0) * R_RATIO;
float vCell = vBat / CELLS;
oled.clearDisplay();
oled.setTextSize(2); oled.setCursor(0, 0);
oled.print(vBat, 2); oled.println("V");
oled.setTextSize(1); oled.setCursor(0, 20);
oled.print("Per Cell: "); oled.print(vCell, 3); oled.println("V");
if (vCell <= CUTOFF_V) {
oled.setCursor(0, 40); oled.print("!! CRITICAL !!");
tone(BUZZ_PIN, 2000); // بیپ ممتد
} else if (vCell <= ALARM_V) {
oled.setCursor(0, 40); oled.print("! LOW BATT !");
tone(BUZZ_PIN, 1500, 200); delay(300); // بیپ سریع
} else if (vCell <= WARN_V) {
oled.setCursor(0, 40); oled.print("Batt Warning");
tone(BUZZ_PIN, 1000, 100); delay(1000); // بیپ آرام
} else {
noTone(BUZZ_PIN);
}
oled.display();
delay(500);
}
چکلیست تست
| تست | نتیجه |
|---|---|
| ولتاژ OLED با مولتیمتر تطابق دارد؟ | ≤ ±۰.۱V |
| در ۱۱V (3.67V/cell) هشدار میدهد؟ | بله — بیپ آرام |
| در ۱۰.۵V (3.5V/cell) بیپ سریع؟ | بله |
| در ۹.۹V (3.3V/cell) بیپ ممتد؟ | بله |