Печаль. Сдох аккумулятор, незаслуженно забытый зимой в гараже. Я его вынул из мотоцикла, то ли сигнализация сожрала всё, то ли не зарядился в прошлые покатушки. Напряжометр показывал 9В, что есть криминал.

Я принёс батарею домой, отогрел, подключил к заряднику. Зарядник через полчаса показал ОК. Врал. Ничего там не ок. Лампочка ближнего света горела примерно 10 минут и потом быстро перешла в состояние «слабо грею воздух». Аккумулятор 6Ач, лампочка 55Вт.

Не покупать же новый аккумулятор? Зима, время есть. Есть ардуина даже и коробка всяких чипсов из Китая. Зря пылятся там что ли?

image

В далёкой советской армии 30 лет назад я проходил курс ухода за аккумуляторами. Основное отличие его от инструкций 21 века было таким: батарея должна проходить серию циклов заряда и разряда. Без этого, сколько её в заряднике не держи, какой бы он ни был умный, она сдохнет.

Теория процесса нагугливается легко. Практически же надо разрядить небольшим током в несколько ампер до 10.8В, а потом зарядить до упора. И так несколько раз. Смотреть на лампочку быстро наскучило и я нарисовал схему прибора.

image

Так как я не профессиональный реаниматор батареек, я собрал всё кое-как. Ну, как положено любителю ардуины.

image

Так как я оказался в этой ситуации не один, я оформил проект на гитхабе, чтобы другие тоже могли пользоваться, и даже положил туда красивую схему, нарисовав её в easyeda.com

image

Аналоговые ноги считывали напряжение и ток, потенциометр делил напряжение аккумулятора примерно на три. При падении напряжения ниже 10.8В включался заряд, при превышении 14.5В разряд. И так три раза. Потом батарея заряжалась и разряд уже не включался.

#define POWERPIN  0
#define AMPERPIN  1
#define LIMIT     10.8f
#define UPLIMIT   14.5f

Запускался процесс кнопкой или автоматически после полного заряда. Самый дохлый из аккумуляторов заряжаться не хотел до упора и только зря грелся. Я его пинал кнопкой несколько раз, потом процесс пошёл.

Был в коробке амперметр, я применил его для подсчёта ёмкости батарейки при разряде. В процессе цикла в терминале было видно:

  • Текущий заряд в Ач.
  • Текущий разряд в Ач.
  • Ток в А.
  • Напряжение в В.

При переключении режима, соответственно было видно конечная величина Ач для предыдущего процесса. Так же выводилось время, затраченное на цикл.

Собственно программуля копипастом из гитхаба
/*
** Реле на пин 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/serial.

В итоге, оба аккумулятора ожили и показали приличные амперчасы примерно соответствующие своим номиналам, что было даже удивительно для их возраста.
Что делать с усталым аккумулятором?

Проголосовало 496 человек. Воздержалось 165 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Поделиться с друзьями
-->

Комментарии (55)


  1. x893
    12.01.2017 19:39

    А сколько циклов прогнали пока он восстановился?


    1. nwwind
      12.01.2017 19:47

      6 на одном и 9 на другом.
      Но это с перерывами. 3 цикла, день отдыха.


  1. gearbox
    12.01.2017 19:39
    +1

    По молодости делал похожую (по функционалу) схему для гальваники — никелировал поверхности, там тоже заряд/разряд определенной частоты и соотношения, аж ностальгия пробила пока читал! спасибо за статью. Эх, в наше время ардуины не было!


    1. nwwind
      12.01.2017 19:48

      В давнее время было реле и звонок. Я по звонку бежал переключать на заряд. :)


      1. gearbox
        12.01.2017 20:44

        Это у Вас совсем сурово молодость прошла. Я то уже тиристоры успел застать )


  1. ilmarin77
    12.01.2017 19:48

    У мотоциклов обычно батарея по технологии AGM сделана — их вроде хитрее надо заряжать:
    image


    1. nwwind
      12.01.2017 19:49

      У меня был зарядник. Он это всё умел.
      От меня только требовалось наоборот — разрядить батарейку, а потом подключить к заряднику.


    1. electronus
      13.01.2017 04:43
      +1

      AGM-ы содержат пластины легированные кальцием. Они никак не реагируют на десульфатацию, и в общем случае их восстановить нельзя.


    1. mynameisdaniil
      13.01.2017 07:55

      Так, по идее, вообще все аккумуляторы нужно заряжать: сначала постоянным током (то, что называется quick charge), потом постоянным напряжением добивать до 100%, пока ток не упадет. От химии и технологии зависят параметры зарядки, но суть процессов одна и та же, что для липольки в тонком телефоне, что для свинца под капотом в машине. Просто некоторые типы аккумуляторов допускают упрощенную зарядку.


  1. rus51
    12.01.2017 21:02

    Интересно, спасибо!


    1. nwwind
      12.01.2017 21:02

      Всегда пожалуйста!


  1. Alex_Crack
    12.01.2017 22:06
    +2

    Небольшое уточнение по опросу: лучше все же не выкинуть старый аккумулятор, а сдать на утилизацию. И природе поможете, и денюжку себе отложите.


  1. MacIn
    12.01.2017 22:36

    Спасибо за статью. Вспоминается, как собирал из 2-3 аккумуляторов один в бакелитовом корпусе для ретро-проектов. Вот там тренировать надо, пока плотность не наберет, раз 30. А тут как раз у менчя один подопытный полу-сдохший аккумулятор есть, и как раз недавно Аруино прикупил…


  1. VT100
    12.01.2017 23:46
    +1

    ЕМНИП, если подходить строго, то разряжать и заряжать токами, близкими к номиналу — это «контрольно-тренировочный цикл». А если нужна попытка десульфатации, на что намекает

    Лампочка ближнего света горела примерно 10 минут и потом быстро перешла в состояние «слабо грею воздух».

    то следует использовать не абы какой разряд-заряд, а с токами в несколько раз ниже номинальных. Т.е., для 6 А*ч, 6/10(ном. ток)/3..10(коэфф.) = 60..200 мА. Это делается для того, что-бы процесс шёл не только на поверхности и в неглубоких порах активной массы (что характерно для высоких токов), но и в глубине пор (где и начинает откладываться жир сульфат свинца).


  1. shushu
    13.01.2017 01:19
    +2

    Отдельное спасибо за easyeda.com!


  1. Jump
    13.01.2017 01:34

    А разряд до 10,8В не слишком?
    Насколько я помню ниже 11,8В разряжать не рекомендуется вообще, даже кратковременно. Особенно те что с кальцием.


    1. jar_ohty
      13.01.2017 02:49

      Именно 10,8 под нагрузкой. А вот хранить при напряжении хх ниже 12 В нельзя.


  1. electronus
    13.01.2017 04:47

    Как говорится: всегда найдется альтернатива на 555 для проекта на контроллере:
    http://www.reuk.co.uk/wordpress/storage/battery-desulfation/
    В Вашем случае можно сделать детектор/индикатор пикового напряжения на АЦП, а 555-ку эмулировать цифровым пином.
    Хорошего дня


    1. user343
      13.01.2017 08:52

      В идеале надо выведать (отреверсить) логическими анализаторами алгоритмы работы чудо-мега-зарядных устройств А.Сороки с "электротранспорта" и повторять их, а уж кто чем сможет — дело 10-е.
      Тот человек не один акк препарировал и много лет "в теме". На его эгоистично-коммерческие интересы "забить" ради общего блага и уменьшения числа свинцовых отходов-переплавок.


  1. iCpu
    13.01.2017 06:45
    +1

    [offtop] Так, я уже запутался. Железячники и DIY обитают на гиктаймсе или здесь? Если на гиктаймсе, то как переводить статьи и предупреждать пользователей по тегам? Если здесь, то почему статьи по умному дому не переносят на хабр? Если и там, и там, то нафига вообще нам сдалось это разделение? Сломать к чертям четвёртую стену! [/offtop]

    Надо бы собрать дома на коленке из палок и гсоплей и потренировать аккумуляторы от безперебойников. Какие могут быть подводные камни, что нужно читать на корпусах?


    1. user343
      13.01.2017 09:05

      Железячники и DIY обитают на гиктаймсе или здесь?

      На гиктаймсе обитают злые и надменные железячники, пишущие туториалы со словами "жопа", "по мимо" и т.д., разговаривают матом в комментах и минусуют за попытки выразить несогласие.


      "Три буквы знает — назначаем бригадиром" :)


      Сайт без кнопки "пожаловаться на комментарий" или коллективного исправления опечаток (Ctr+enter, орфусом) скатится "ниже плинтуса".


      1. iCpu
        13.01.2017 10:00
        +1

        На хабре обитают злые рерайтеры и переводчики, которые, с позволения сказать, посредственно переводят программистские тексты и набрасывают постцы для розжига застывших доменных печей. (Не путать с доменными именами!) А про тег «политика» и говорить страшно. Мне, например, непонятно, почему рейтинг комментариев под постами этой тематики вообще до сих пор учитывается.
        После таких шедевров, слово «жопа» выглядит по детски милым. Как первоклашка, выучивший плохое слово и пугливо его выкрикивающий.

        Сайт без кнопки «пожаловаться на комментарий» или коллективного исправления опечаток (Ctr+enter, орфусом) скатится «ниже плинтуса».
        «Все эти стоны один-в-один напоминают те, что были, когда появилась семёрка, а до неё так же (да больше, больше!) страдали от ХР»
        Bedal
        Увы и ах, если 10 лет назад скачать последнюю студию могли позволить себе только те, кому она была действительно нужна (у меня на тот момент исошник качался больше 8 суток), сегодня любой дошкольник может скачать юнити и по урокам на тытубе делать «игры». Или купить ардуину, которая стоит у китайцев примерно как двухлитровая кола или у нас как хеппи мил. Соответственно, из «элитарного» программирование, а вслед и ресурс, стали «массовыми». И это хорошо. Плохо, что он развивается ретроградскими методами: вместо введения шкалы сложности статей, нормальной системы создания и сопровождения обучающих материалов и путного расширения песочницы сайт поделили на три куска по совершенно непонятным критериям (точнее, хотели разделить новости, программирование и железяки, но получилось так, что лучше бы им откатиться назад до упора и просто усложнить иерархии хабов). Неразбериха от этого стала ещё больше, недовольство стало ещё больше, качество стало ещё хуже. Будем держать руку на пульсе кнопке F5.

        P.S. Сорян, Bedal, твой коммент уж очень в тему всплыл, не смог удержаться.


  1. roboter
    13.01.2017 10:29
    +1

    Поиграть как в статье написано и продать.


  1. Alexeyslav
    13.01.2017 11:56

    Приведённую схему красивой может назвать только художник, и то только потому что использовано больше одного цвета. На самом деле, с инженерной точки зрения схема очень запутана и некрасива. Аккумулятор находится где-то в середине схемы, расположенный самым неудобнейшим образом. Он вообще должен быть изображен в самой правой части схемы логически отделённый от неё как внешний элемент, через клеммы.
    Точно так же, изобразить источник питания схемы(зарядное) — в виде клемм в ЛЕВОЙ части схемы.
    Общий провод должен быть в самой нижней части схемы, простота схемы вообще позволяет обойтись без вынесенных значков земли.
    У изображённой ардуины убрать все неиспользуемые выходы, датчик тока вообще обозначен непонятным чёрным ящиком, и понять что это датчик тока можно только по косвенным признакам.
    Логически все входные сигналы расположить в левой части модулей, а выходные в правой. Но есть и исключения — датчик тока таким образом расположить будет крайне неудобно, поскольку контролируемая цепь находится в правой части схемы, и для него делается исключение.

    Схема должна быть понятной и очевидной. Да и упущен вопрос питания самой ардуины, там наверно ещё и DC-DC конвертор имеется с 12В в 5В? Который не изображён на схеме…

    Да, разные цвета на схеме для компонентов и проводов предназначены лишь для удобства редактирования схемы, но «выходной документ» должен быть черно-белым.

    А кстати, где-то на просторах интернета видел информацию о том что лучший алгоритм десульфатации — это те же заряд-разряд но с периодом в 20-40мс и скважностью 10 к 1.


  1. VitGo
    13.01.2017 12:43

    про способы заряда аккумуляторов можно почитать на форуме электротранспорта…

    правда там автор уже нашел алгоритм и теперь занимается его усиленным шифрованием (чтобы не повторили) и предложением купить готовый зарядник…

    правда самое полезное в его постах — это объяснение химии процессов заряда/разряда… — думаю многим было бы полезно почитать


  1. adson
    13.01.2017 20:01

    Не боитесь, что ЭДС самоиндукции от реле убьет микроконтроллер? Хотя бы диод туда просится.


    1. sim2q
      13.01.2017 20:24

      Судя по фотке — оно активное, иначе бы пин не справился но и обратной ЭДС самоубился бы точно. Тега «ардуино» не хватает конечно что бы не было таких комментов:)


    1. nwwind
      13.01.2017 22:19

      Там на модуле китайском защита есть.