Десульфатор

Forvad
Offline
Зарегистрирован: 09.02.2016

может кому пригодится

мосфет - модули от RobotDyn https://ru.aliexpress.com/item/MOSFET-DC-5-V-DC-24-V-30A/32671829582.html?spm=a2g0s.9042311.0.0.492833edErjkdC

С настройкой сохранения параметров в EEPROM при первом запуске ничего не вышло, разбиратся не стал - первой строкой воткнул выключалку, что позволяет прошить и тут же выставить нужные цыфры (с монитора порта), закоментировать и прошить снова. Иначе времена стоят "шИбко большие"

 

/*
 * десульфатор v. 1.0 
 * 
 */

#include "EEPROM.h"
 
 int start; //флаг работы десульфатора
 long t_zar;
 long t_pauza_1;
 long t_raz; 
 long t_pauza_2;
 byte rezist; //переменная для получение сопротивления с порта
 
 byte val; // переменная для приема данных с порта

 
 byte pin_R3 = 3; //пин реле R3 нагрузка
 byte pin_R4 = 4; //пин реле R4 нагрузка  
 byte pin_zar = 5; //пин зарядного мосфета
 byte pin_raz = 6; //пин разрядного мосфета


 int adr = 1;
 int s = 5;

void sendData()      // отправка данных в порт
{
 Serial.println("");
 Serial.println("Kod nastroyki desulfatora");
 Serial.print("0 - STOP");
 Serial.print(", ");
 Serial.print("1 - START");
 Serial.print(", ");
 Serial.println("9 - Parametry");
 
 Serial.print("11 - t_zar");
 Serial.print(", ");
 Serial.print("22 - t_pauza_1");
 Serial.print(", ");
 Serial.print("33 - t_raz");
 Serial.print(", ");
 Serial.print("44 - t_pauza_2");
 Serial.print(", ");
 Serial.println("66 - R nagruzki");
 
 
 Serial.println("");
 Serial.println("Rezhim raboty desulfatora");
 Serial.print("t_zar ="); 
 Serial.println(t_zar); 
 Serial.print("t_pauza_1 ="); 
 Serial.println(t_pauza_1);
 Serial.print("t_raz ="); 
 Serial.println(t_raz); 
 Serial.print("t_pauza_2 ="); 
 Serial.println(t_pauza_2);
 Serial.print("R nagr ="); 
 Serial.println(rezist);
 Serial.print("START ="); 
 Serial.print(start);
 Serial.println("");     
}

void setup() 
{
 
             // ------ ПЕРВЫЙ ЗАПУСК -----
  if (EEPROM.read(adr) != 1)  // в ячейке 1 должен быть записан флажок 1, если его нет - делаем
   {   
    EEPROM.put(adr, 1); // флаг что после первого запуска переменные хранятся в  EEPROM  
    EEPROM.put(adr+s, 1); // 100 ячейка - старт\стоп
    EEPROM.put(adr+s*2, 12); // 200 ячейка - сопротивление нагрузки rezist: 12, 9, 6 или 3 Ом
    EEPROM.put(adr+s*3, 1000); //300 ячейка - t_zar
    EEPROM.put(adr+s*4, 500); // 400 ячейка t_pauza_1
    EEPROM.put(adr+s*5, 1000); // 500 ячейка t_raz
    EEPROM.put(adr+s*6, 500); // 600 ячейка t_pauza_2
   }
   
 Serial.begin(9600);

 pinMode(pin_zar, OUTPUT);
 pinMode(pin_raz, OUTPUT);
 pinMode(pin_R3, OUTPUT);
 pinMode(pin_R4, OUTPUT);
 
 digitalWrite(pin_zar, 0);
 digitalWrite(pin_raz, 0);

 //rezist = 12;
// digitalWrite(pin_R3, 1); 
// digitalWrite(pin_R4, 1);

  // загружаем настройки из памяти
  EEPROM.get(adr+s, start);
  EEPROM.get(adr+s*2, rezist);
  EEPROM.get(adr+s*3, t_zar);
  EEPROM.get(adr+s*4, t_pauza_1);
  EEPROM.get(adr+s*5, t_raz);
  EEPROM.get(adr+s*6, t_pauza_2);

  switch (rezist) // устанавливаем реле нагрузки в в зависимости от считанного сопротивления
    {
      case 12: 
        digitalWrite(pin_R3, 1);
        digitalWrite(pin_R4, 1);
       break;

      case 9: 
       digitalWrite(pin_R3, 0);
       digitalWrite(pin_R4, 1);
      break;

      case 6: 
       digitalWrite(pin_R3, 1);
       digitalWrite(pin_R4, 0);
      break;

      case 3: 
       digitalWrite(pin_R3, 0);
       digitalWrite(pin_R4, 0);
      break;

      default:
       rezist = 12; 
       digitalWrite(pin_R3, 1);
       digitalWrite(pin_R4, 1);
      break; 
    }

 sendData(); // отправка данных
 
}

void loop() 
{

 //EEPROM.put(adr+s, 0); // выключение старта десульфатора (открыть при первом запуске, установить параметры, закрыть и прошить снова)
 
 // ****** начала цикла работы десульфатора ******
 if (start == 1) 
  {
   digitalWrite(pin_zar, HIGH);
   delay(t_zar);
   digitalWrite(pin_zar, LOW);
   delay(t_pauza_1);
   digitalWrite(pin_raz, HIGH);
   delay(t_raz);
   digitalWrite(pin_raz, LOW);
   delay(t_pauza_2);
  }
  // ******* конец цикла работы десульфатора ******
  

  // ********* прием кодов управления с порта или блютуз *********
  if (Serial.available() > 0) // если что-то пришло с порта
   {
    val = Serial.parseInt(); //скидывает пришедьшее в переменную
    
    switch (val) // поверяем, что пришло по условиям
    {
     case 1: 
      start = 1; //старт тестирования
      EEPROM.put(adr+s, start);
      Serial.println ("start"); 
     break;

     case 0:
      start = 0; //остановка тестирования
      EEPROM.put(adr+s, start);
      digitalWrite(pin_zar, 0);
      digitalWrite(pin_raz, 0);
      Serial.println ("stop"); 
     break;

     case 9: 
      sendData();  //отправка в порт настроек
     break;
     
     case 11: //если пришло  11 то ждем новое время заряда
      Serial.println("vvedite vremya zaryada: t_zar < 600s "); 
      while (1)
       {
        if (Serial.available() > 0) // если что то пришло с порта
         {
          t_zar = Serial.parseInt();
          if (t_zar > 600000 || t_zar <0) // если слишком большое число то ограничиваем время 10мин
           {
            t_zar = 600000;
           }
          EEPROM.put(adr+s*3, t_zar);
          Serial.print("t_zar ="); 
          Serial.println(t_zar); 
          break;
         }
       }
     break;

     case 22: //если пришло 22 то ждем новое время первой паузы заряд-разряд
      Serial.println("vvedite vremya pervoy pauzy: t_pauza_1 < 600s "); 
      while (1) // бесконечный цикл ожидания получения кода
       {
        if (Serial.available() > 0) // если что то пришло с порта
         {
          t_pauza_1 = Serial.parseInt();
          if (t_pauza_1 > 600000 || t_pauza_1 <0) // если слишком большое число то ограничиваем время 10мин
           {
             t_pauza_1 = 600000;
           }
          EEPROM.put(adr+s*4, t_pauza_1);
          Serial.print("t_pauza_1 ="); 
          Serial.println(t_pauza_1); 
          break;
         }
       }
     break;

     case 33: //если пришло 33 то ждем новое время разряда
      Serial.println("vvedite vremya razryada: t_raz < 600s "); 
      while (1) // бесконечный цикл ожидания получения кода
       {
        if (Serial.available() > 0) // если что то пришло с порта
         {
          t_raz = Serial.parseInt();
          if (t_raz > 600000 || t_raz <0) // если слишком большое число то ограничиваем время 10мин
           {
             t_raz = 600000;
           }
          EEPROM.put(adr+s*5, t_raz);
          Serial.print("t_raz ="); 
          Serial.println(t_raz); 
          break;
         }
       }
     break;

     case 44: //если пришла 44 то ждем новое время второй паузы
      Serial.println("vvedite vremya vtoroy pauzy: t_pauza_2 < 600s "); 
      while (1) // бесконечный цикл ожидания получения кода
       {
        if (Serial.available() > 0) // если что то пришло с порта
         {
          t_pauza_2 = Serial.parseInt();
          if (t_pauza_2 > 600000 || t_pauza_2 <0) // если слишком большое число то ограничиваем время 10мин
           {
             t_pauza_2 = 600000;
           }
          EEPROM.put(adr+s*6, t_pauza_2);
          Serial.print("t_pauza_2 ="); 
          Serial.println(t_pauza_2); 
          break;
         }
       }
     break;

     case 66: //если пришла 66 то ждем новое сопротивление нагрузки разряда
      
      start = 0; // выключаем десульфатор
      digitalWrite(pin_zar, 0); 
      digitalWrite(pin_raz, 0);
      EEPROM.put(adr+s, start);
      
      Serial.println("vvedite soprotivlenie nagruzki 12, 9, 6, 3 Om"); 
      
      while (1) // бесконечный цикл ожидания получения кода
       {
        if (Serial.available() > 0) // если что то пришло с порта
         {
          rezist = Serial.parseInt();
          
          switch (rezist) // поверяем то что пришло по условиям
           {
            case 12: 
             digitalWrite(pin_R3, 1);
             digitalWrite(pin_R4, 1);
             EEPROM.put(adr+s*2, rezist);
             Serial.println ("Soprotivlenie = 12 Om"); 
            break;

            case 9: 
             digitalWrite(pin_R3, 0);
             digitalWrite(pin_R4, 1);
             EEPROM.put(adr+s*2, rezist);
             Serial.println ("Soprotivlenie = 9 Om"); 
            break;

            case 6: 
             digitalWrite(pin_R3, 1);
             digitalWrite(pin_R4, 0);
             EEPROM.put(adr+s*2, rezist);
             Serial.println ("Soprotivlenie = 6 Om"); 
            break;

            case 3: 
             digitalWrite(pin_R3, 0);
             digitalWrite(pin_R4, 0);
             EEPROM.put(adr+s*2, rezist);
             Serial.println ("Soprotivlenie = 3 Om"); 
            break;

            default: Serial.println("nevernoe soprotivlenie, povtorite zanovo"); 
           }
        break;   
         }
       }
     break;

     default: Serial.println("neverniy kod");

     
    }
    
   }

}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Forvad пишет:

С настройкой сохранения параметров в EEPROM при первом запуске ничего не вышло, разбиратся не стал - первой строкой воткнул выключалку, что позволяет прошить и тут же выставить нужные цыфры

Нужные цыфры - это хорошо.

Forvad
Offline
Зарегистрирован: 09.02.2016

сдвоенное реле для изменения нагрузки 

https://ru.aliexpress.com/item/Free-Shipping-1PCS-5V-2-Channel-Relay-Module-Shield-for-Arduin-ARM-PIC-AVR-DSP-Electronic/32523959492.html?spm=a2g0s.9042311.0.0.274233edA4c31Q

... три таких резистора для самой нагрузки 

https://ru.aliexpress.com/item/High-Quality-Error-Free-H4-50w-6ohm-Dual-Load-Resistors-for-LED-for-HID-Conversion-High/32813382095.html?spm=a2g0v.search0604.3.9.6b4b7a191rmfX9&ws_ab_test=searchweb0_0,searchweb201602_8_10065_10068_319_317_10696_453_10084_454_10083_10618_10307_10301_537_536_10059_10884_10889_10887_321_322_10915_10103_10914_10911_10910,searchweb201603_53,ppcSwitch_0&algo_expid=6346249e-9908-4245-8987-ef0582af76b8-1&algo_pvid=6346249e-9908-4245-8987-ef0582af76b8&transAbTest=ae803_5

 ....и блютус модуль

https://ru.aliexpress.com/item/Free-Shipping-hc-06-HC-06-RF-Wireless-Bluetooth-Transceiver-Slave-Module-RS232-TTL-to-UART/32523867394.html?spm=a2g0s.9042311.0.0.274233edlWBQIc

... ну и ардуинка по вкусу, я Nano заюзал

для управления с телефона использую "Serial Bluetooth Terminal" 
 
Там можно забиндить все команды на отдельные кнопки
 
Отправка в порт (с компа или блютуса) цЫфирики
 
0 - Стоп
1 - Старт
9 - отображает установленные параметры
11 - Запрашивает время заряда
22 -    ... время паузы между зарядом и разрядом
33 -    ... время разряда
44 -    ... время паузы между разрядом и зарядом
66 -    ...  сопротивления нагрузки (может быть 3, 6, 9 12 ... соответственно это будет в омах) 
 
чтоб прошивать ардуинку поставил перемычку, чтобы разрывать +5 питания блютуса 
Резисторы хорошо  так греются, им нужно активное охлаждение
 
Ну вот как-то так ... вроде получился законченный вид и вполне себе работает
 
(... и не пойму как файлик со схемой во Fritzing прикрепить)
 
b707
Онлайн
Зарегистрирован: 26.05.2017

Forvad - вы бы для начала расписали что это и для чего. "Десульфатор" ??? - наверно для АКБ?  А то вы пишете так, будто это совершенно очевидная вещь. которая нужна в хозяйстве каждому :) Я вот ни разу десульфатором не пользовался и не уверен. надо ли начинать :)

И уже серьезно - характеристики неплохо было бы указать(максимальное количество батарей, емкость. токи...)

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

b707 пишет:
характеристики неплохо было бы указать(максимальное количество батарей, емкость. токи...)

Так это от "цыфр" зависит, каке укажешь ...

Forvad
Offline
Зарегистрирован: 09.02.2016

b707 пишет:

Forvad - вы бы для начала расписали что это и для чего. "Десульфатор" ??? - наверно для АКБ?  А то вы пишете так, будто это совершенно очевидная вещь. которая нужна в хозяйстве каждому :) Я вот ни разу десульфатором не пользовался и не уверен. надо ли начинать :)

И уже серьезно - характеристики неплохо было бы указать(максимальное количество батарей, емкость. токи...)

ага, для АКБ, для десульфатации свинцовых аккумуляторов. Что это такое и нужно ли оно Вам можно погуглить и сделать таки себе мнение ;) так как вопрос этот однако тоже спорный

А характеристики .. да нет у него особых характеристик. Напряжение заряда (можно с ограничением по току) Вы подаёте на него сами, от своего зарядника, для своего аккума и по своему разумению. На 12В аккум я подаю 13,8В с 10% от ёмкости током. Кто-то и 14,2В даёт. Если у Вас 6В аккум то  ставите 6,9В. Но это как бы к самому десульфатору относится мало.

Сопротивления нагрузочных резисторов расписаны. 3, 6, 9 и 12 Ом .. следовательно ток разряда можно прикинуть. Если Вам нужно то можно поставить свои номиналы под требуемые Вам токи

И всё .. дальше эта приблуда просто подаёт на аккум заряд / разряд по заданным в ней таймингам

 

 

 

b707
Онлайн
Зарегистрирован: 26.05.2017

Forvad пишет:

И всё .. дальше он просто подаёт на аккум заряд / разряд по заданным таймингам

И что, помогает? Или просто верите? :) - ведь проверить эффект невозможно.

Почему спрашиваю - про десульфатацию для тяговых батарей погрузчиков знаю, а вот чтобы кто-то из авто производителей рекомендовал регулярно десульфатировать стартерные АКБ - никогда не слышал. Этим, по-моему. увлекаются только на сайтах типа drive.ru

Во-всяком случае. АКБ на моих машинах без всякой десльфатации ходят до восьми лет. А вот потом их что сульфатируй. что нет... все равно дорога им в помойку.

svm
Offline
Зарегистрирован: 06.11.2016

В автомобиле сульфатация не так часто проявляется, а вот в устройствах резервного питания, случается. У меня почти два года резервное питание котла ни разу не включалось и аккумулятор все время был в режиме компенсации саморазряда. В результате при отключении зимой электричества, котел отключился через 5 минут. После этого пришлось сделать электронную нагрузку на 1/10 зарядного тока и моргалку на ардуино. Затем провел три полных цикла заряд/разряд. Причем последний разряд был на инвертор котла. Система отработала около 16 часов, до напряжения аккума 12В. Вот и польза десульфатации. Конечно можно (и нужно) предусмотреть автоматику, которая вериодически разряжает аккумулятор, но это наверное когда снова что-то случится.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:
про десульфатацию для тяговых батарей погрузчиков знаю, а вот чтобы кто-то из авто производителей рекомендовал регулярно десульфатировать стартерные АКБ - никогда не слышал. Этим, по-моему. увлекаются только на сайтах типа drive.ru
Правильно, потому что это имеет смысл только для батарей, подвергающихся глубокому разряду (не один раз - случайно, а регулярно). Все виды электротранспорта (который на свинцовых батареях) - лодки, погрузчики и т.п.