Официальный сайт компании Arduino по адресу arduino.cc
Десульфатор
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 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В. Вот и польза десульфатации. Конечно можно (и нужно) предусмотреть автоматику, которая вериодически разряжает аккумулятор, но это наверное когда снова что-то случится.