バッテリーを持ち帰り、暖めて、充電器に接続しました。 充電器は30分でOKを示しました。 うそ。 何もありません。 浸されたライトは約10分間点灯し、その後すぐに「弱く暖かい空気」状態になりました。 6Ahバッテリー、55W電球。
新しいバッテリーを購入しませんか? 冬には時間があります。 中国からのあらゆる種類のチップのアルドゥインボックスさえあります。 無駄にそこにほこりを集めてまたは何?

30年前の遠いソビエト軍で、バッテリーケアのコースを取りました。 21世紀の指示との主な違いはこれでした。バッテリーは一連の充電と放電のサイクルを経なければなりません。 これがなければ、あなたが充電器でどれだけ賢くても、彼がどれほど賢くても、彼女は死にます。
プロセスの理論はグーグルに簡単です。 実際には、数アンペアの小電流を10.8Vに放電してから、停止するまで充電する必要があります。 そして何度も。 電球を見てすぐに退屈し、デバイスの図を描きました。

私は電池の専門家ではないので、何とかすべてを集めました。 よく、arduinoの恋人にふさわしいように。

私はこのような状況で一人ではなかったので、他の人が使用できるようにgithubでプロジェクトを設計し、さらに美しい図をそこに置いてeasyeda.comに描画しました。

アナログレッグは電圧と電流を読み取り、ポテンショメーターはバッテリー電圧を約3で除算しました。 電圧が10.8Vを下回ると、放電が14.5Vを超えると充電がオンになります。 そして3回。 その後、バッテリーが充電され、放電はオンになりませんでした。
#define POWERPIN 0 #define AMPERPIN 1 #define LIMIT 10.8f #define UPLIMIT 14.5f
このプロセスは、ボタンで、またはフル充電後に自動的に開始されました。 デッドデッドバッテリーは、ストップまで充電することを望みませんでした。 私は彼を数回ボタンで蹴った後、プロセスが始まりました。
箱の中に電流計があり、それを使って放電時のバッテリー容量を計算しました。 ターミナルでのサイクル中に見られた:
- ああで現在の電荷。
- Ahの現在のランク。
- Aの現在
- Vの電圧
モードを切り替えると、それに応じて、前のプロセスの最終的なAh値が表示されました。 サイクルに費やされた時間も表示されました。
githubから実際にプログラムによるコピーと貼り付け
/* ** 2 ** 3 ** 0 ** 1 ** 10.8 ** 5 ** ** . ** /. ** 10.8B . */ /* Todo: . -- . */ #define RELAYPIN 2 #define BUTTONPIN 3 #define POWERPIN 0 #define AMPERPIN 1 #define LIMIT 10.8f #define UPLIMIT 14.5f #define BADPOWER 5.0f #define CIRCLES 3 #define SWITCH_LAMP 0 #define SWITCH_CHARGER 1 // #define TICKS (60*5) void setup() { pinMode(RELAYPIN, OUTPUT); pinMode(BUTTONPIN, INPUT_PULLUP); digitalWrite(RELAYPIN, HIGH); Serial.begin(9600); Serial.println("Start..."); } int mode = SWITCH_CHARGER; int pressed = 0; int tick = 0; unsigned long start = 0; int circle = 1; float chargeAh = 0.0; unsigned long chargeMs = 0; float dischargeAh = 0.0; unsigned long dischargeMs = 0; void loop() { // if (circle > CIRCLES) return; // . float v = analogRead(POWERPIN) / 1023.0f * 3.0f * 5.0f; // float a = ((analogRead(AMPERPIN) * (5.0 / 1024.0)) - 2.5) / 0.1; // , - . if (v > BADPOWER) { // , . if (mode == SWITCH_CHARGER) { chargeAh += a * (millis() - chargeMs) / 3600000.0; chargeMs = millis(); if (digitalRead(BUTTONPIN) == LOW || v > UPLIMIT && circle <= CIRCLES) { mode = SWITCH_LAMP; digitalWrite(RELAYPIN, LOW); // . dischargeMs = millis(); Serial.print("Try "); Serial.println(circle); Serial.print("Charge was "); Serial.print(chargeAh); Serial.println("Ah"); dischargeAh = 0.0; Serial.println("LETS LIGHT!"); delay(100); pressed = 1; circle++; if (circle > CIRCLES) Serial.println("Thats enough!"); } } // , . if (mode == SWITCH_LAMP) { dischargeAh += a * (millis() - dischargeMs) / 3600000.0; dischargeMs = millis(); // . if (v < LIMIT) { mode = SWITCH_CHARGER; digitalWrite(RELAYPIN, HIGH); // . start = millis(); Serial.println("TIME TO SUCK ELECTRICITY!"); unsigned long msec = millis() - start; Serial.print("Discharge time "); Serial.print(msec / 3600000); Serial.print("h "); Serial.print((msec % 3600000) / 60000); Serial.print("m "); Serial.print((msec % 60000) / 1000); Serial.print("s "); Serial.println(); Serial.print("Appoximate capacity "); Serial.print(55 / 12); Serial.println("Ah"); Serial.print("Disharge was "); Serial.print(dischargeAh); Serial.println("Ah"); chargeAh = 0.0; } // . if (pressed == 0 && digitalRead(BUTTONPIN) == LOW) { mode = SWITCH_CHARGER; digitalWrite(RELAYPIN, HIGH); // . chargeMs = millis(); Serial.println("SUCK THE ELECTRICITY!"); Serial.print("Disharge was "); Serial.print(-dischargeAh); Serial.println("Ah"); chargeAh = 0.0; if (circle > CIRCLES) Serial.println("LAST CHARGING!"); delay(100); } } } else { Serial.println("BAD POWER!"); } if (tick == 0) { Serial.print(" Disharge = "); Serial.print(-dischargeAh); Serial.print(" Charge = "); Serial.print(chargeAh); Serial.print(" Current = "); Serial.print(a); Serial.print(" Voltage = "); Serial.println(v); } pressed = 0; tick = ++tick % TICKS; delay(1000); // }
私はディスプレイを固定せず、USB /シリアル経由で端末からプロセスを見ました。
その結果、両方のバッテリーが寿命を迎え、その値にほぼ相当する適切なアンペア時間を示しました。