Десульфатор
- Войдите на сайт для отправки комментариев
Втр, 04/06/2019 - 09:52
может кому пригодится
мосфет - модули от 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");
}
}
}
С настройкой сохранения параметров в EEPROM при первом запуске ничего не вышло, разбиратся не стал - первой строкой воткнул выключалку, что позволяет прошить и тут же выставить нужные цыфры
Нужные цыфры - это хорошо.
сдвоенное реле для изменения нагрузки
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 заюзал
Forvad - вы бы для начала расписали что это и для чего. "Десульфатор" ??? - наверно для АКБ? А то вы пишете так, будто это совершенно очевидная вещь. которая нужна в хозяйстве каждому :) Я вот ни разу десульфатором не пользовался и не уверен. надо ли начинать :)
И уже серьезно - характеристики неплохо было бы указать(максимальное количество батарей, емкость. токи...)
Forvad - вы бы для начала расписали что это и для чего. "Десульфатор" ??? - наверно для АКБ? А то вы пишете так, будто это совершенно очевидная вещь. которая нужна в хозяйстве каждому :) Я вот ни разу десульфатором не пользовался и не уверен. надо ли начинать :)
И уже серьезно - характеристики неплохо было бы указать(максимальное количество батарей, емкость. токи...)
ага, для АКБ, для десульфатации свинцовых аккумуляторов. Что это такое и нужно ли оно Вам можно погуглить и сделать таки себе мнение ;) так как вопрос этот однако тоже спорный
А характеристики .. да нет у него особых характеристик. Напряжение заряда (можно с ограничением по току) Вы подаёте на него сами, от своего зарядника, для своего аккума и по своему разумению. На 12В аккум я подаю 13,8В с 10% от ёмкости током. Кто-то и 14,2В даёт. Если у Вас 6В аккум то ставите 6,9В. Но это как бы к самому десульфатору относится мало.
Сопротивления нагрузочных резисторов расписаны. 3, 6, 9 и 12 Ом .. следовательно ток разряда можно прикинуть. Если Вам нужно то можно поставить свои номиналы под требуемые Вам токи
И всё .. дальше эта приблуда просто подаёт на аккум заряд / разряд по заданным в ней таймингам
И всё .. дальше он просто подаёт на аккум заряд / разряд по заданным таймингам
И что, помогает? Или просто верите? :) - ведь проверить эффект невозможно.
Почему спрашиваю - про десульфатацию для тяговых батарей погрузчиков знаю, а вот чтобы кто-то из авто производителей рекомендовал регулярно десульфатировать стартерные АКБ - никогда не слышал. Этим, по-моему. увлекаются только на сайтах типа drive.ru
Во-всяком случае. АКБ на моих машинах без всякой десльфатации ходят до восьми лет. А вот потом их что сульфатируй. что нет... все равно дорога им в помойку.
В автомобиле сульфатация не так часто проявляется, а вот в устройствах резервного питания, случается. У меня почти два года резервное питание котла ни разу не включалось и аккумулятор все время был в режиме компенсации саморазряда. В результате при отключении зимой электричества, котел отключился через 5 минут. После этого пришлось сделать электронную нагрузку на 1/10 зарядного тока и моргалку на ардуино. Затем провел три полных цикла заряд/разряд. Причем последний разряд был на инвертор котла. Система отработала около 16 часов, до напряжения аккума 12В. Вот и польза десульфатации. Конечно можно (и нужно) предусмотреть автоматику, которая вериодически разряжает аккумулятор, но это наверное когда снова что-то случится.