Продолжаю работать над проектом, достаточно много времени ему посвящаю и уже, надеюсь, близки первые испытания.
Опишу, что было сделано после последнего отчета.
Самая большая проблема, что есть сейчас, это энергопотребление базы, которое, по моим тестам, колеблется в пределах 300-400 мили ампер при питании в 8 вольт. Учитывая, что емкость средненького 18650 аккумулятора примерно 2 ампера, а у меня используется 4 аккумулятора с выходом в 8 вольт и 4 ампера, аккумуляторов хватит примерно на 10 часов беспрерывной работы. Что в принципе и подтверждали мои опыты.
Я решил бороться с этой проблемой с разных сторон, чтобы в итоге добиться приемлемого результата.
Первое, с чего можно было начать, это подсветка дисплея, она состоит из 12ти светодиодов, и соответственно является одним из главных потребителей энергии.
Логично было бы отключать подсветку, когда она не нужна. Программно, дисплей который я выбрал не имеет функций отключения подсветки, хотя такие дисплеи есть на алиэкспресс и стоят несколько дороже. Заказывать другой не позволяет время, слишком долго придется его ждать. Питание подсветки на дисплее не разделено, и осуществляется совместно с питанием модуля.
На плате присутствует пара микросхем и один резистор в 6 Ом, на него и пало внимание) Оказалось, это и есть тот резистор, через которое идет питание подсветки. Решено было сделать простой транзисторный ключ, который будет открываться при подаче/отсутствии напряжении на аналоговом выводе микроконтроллера.
Проще было бы сделать ключ на полевом транзисторе/мосфете, но такого под рукой не оказалось. Пришлось выбрать схему на P-N-P транзисторе (именно на нем, потому что только в этой схеме получается общий плюс у питания дисплея и питания микроконтроллера):
Транзистор по началу взял первый попавшийся, который успешно сгорел при первом включении. Потом все таки пришлось подобрать транзистор по параметрам, использовал советский КТ816А.
В схеме выше, общий провод идет на плюс, Rc это нагрузка – подсветка дисплея/тот самый резистор на 6 ом, и R1 я подобрал опытным путем (аналоговый выход микроконтроллера выдает 3 вольта и немалое для транзистора силу тока, этот резистор нужен для ограничения тока базы, при этом его должно хватать чтобы открыть транзистор), резистор в 6.8 кОм подошел.
В итоге дисплейный модуль обзавелся таким кастомным обвесом:
Код для включения и выключения подсветки предельно просто, мы подаем или убираем сигнал с аналогового выхода Arduino, который через резистор соединен с базой транзистора в ключе:
В данной реализации не понравилось использование p-n-p транзистора, на котором все равно существует падение напряжения, и подсветка работает чуть чуть менее ярко чем без ключа. Хотя это совсем не критично.
С мосфетом такого, наверное, не было бы.
Еще была мысль, что изменяя частоту ШИМ на аналоговом пине микроконтроллера, можно добиться плавной регулировки яркости подсветки. При подачи разных параметров на аналоговый выход ардуино, изменяется не амплитуда сигнала, а его частота, частота ШИМ, логично предполагать, что на такой же частоте будет открываться и закрываться транзистор в ключе, тем самым быстро включая и выключая подсветку, что для нас, в зависимости от частоты сигнала, будет казаться как уменьшение или увеличение яркости. Транзистор же ведет себя по другому, он просто в какой то момент открывается и в какой то закрывается. В будущем можно этот вопрос проработать.
Протестировал потребление базы с этими изменениями, оно стало в пределах 200-225 мили ампер, что уже почти в два раза меньше, чем было. Но дисплей то у нас все равно будет работать, хоть какое то время, а значит и большое потребление сохранится. Я оставил в ночь базу, с новыми улучшениями, в режиме опроса 20 жерлиц каждые 2 секунды, со включенным дисплеем раз в 10 минут длительностью в 1 минуту. В итоге, через 18 часов база подавала признаки жизни, аккумуляторы не были высажены в ноль, но их уже не хватало на питание подсветки. Я думаю в таком режиме база проработала часов 16 стабильно, что уже лучше.
Большие изменения были сделаны в программную оболочку базы. Так как дисплей поддерживает touch screen, я включение подсветки базы как на телефоне, по касанию экрана. Получилось так, что дисплей теперь включается (не дисплей, в подсветка, дисплей работает всегда, чтобы обеспечивать работу touch screen):
1. При включении
2. При инициализации, когда появляется сигнал от GPS
3. При включении новой жерлицы (или перевключении сработавшей)
4. Работает все время, пока есть хоть одна сработавшая жерлица (чтобы рыболов мог использовать базу как навигатор к нужной жерлице)
Для гурманов сделана настройка в меню, которая позволяет изменять все эти параметры:
Active when alarmed – дисплей включен все время пока есть хоть одна сработанная жерлица
Always On – включен всегда, независимо ни от чего
Off when inactive – дисплей выключается, если по нему не нажимают заданное количество времени.
В схеме базы есть еще пара небольших потребителей, от которых можно избавиться, это группа из 4х светодиодов на плате ардуино (один из которых горит всегда), и очень яркий светодиод на плате GPS, мигает когда поступают сигналы
Почитав спецификацию на LoRa модули SX1287, выяснилось, что ток потребления в режиме передачи составляет аж до 130 мили ампер!
Табличка с китайского сайта, я ей не совсем доверяю, некоторые данные у меня не сходятся с тестами, но вот ток передачи примерно такой.
Учитывая, что база общается с каждой жерлицей раз в 2 секунды (а все жерлицы опрашивает в течении 40 секунд), то скорее всего, энергии на передачу в базе тратиться и на этот параметр тоже
Подумав, понял, что смысла опрашивать базу раз в 2 секунды нет. Опрос жерлицы проверяет ее состояние, не украли ли ее, в каком состоянии находится ее батарея и всего лишь. Опрос жерлицы не влияет на прием сигнала о сработки, который происходит моментально. Опрос жерлицы раз в минуту (все 20 будут опрошены в течении 20 минут), будет достаточен и позволит существенно сэкономить энергию аккумуляторов.
Но случаи бывают разные, поэтому сделано меню, в котором можно задать интервал опроса жерлиц (или вообще это отключить). Практическую пользу данного приема еще не тестировал, но уверен она будет. Поэтому кто хочет знать состояние жерлиц постоянно, есть вариант что их украдут, будет выбирать минимальное время опроса. Кого такие проблемы не касаются – можно задавать максимальный интервал:
Соответственно, в меню можно задать интервал опроса.
Еще один очень важный момент, который я упустил при тестировании базы, это способ соединения аккумуляторов. У меня соединение выглядело вот так
Выход вел непосредственно к питанию микроконтроллера.
В этом случае, в связи с особенностью литий-ионных аккумуляторов, один аккумулятор в последовательной сборке будет “сжирать” другого, таким образом не получится получить энергию всех аккумуляторов равномерно.
Для решения данной проблемы, я заказал BMS плату для 2х литий-ионных аккумуляторов, именно с функцией балансировки (опять ждем посылку). Плата BMS предупреждает разряд аккумуляторов в ноль, что выведет их из строя (я уже убил пару старых аккумуляторов при тестах без BMS), а так же обеспечит баланс разряда аккумуляторов в сборке. Вот так выглядит сей девайс:
Параллельно, для тестов и своих игрушек, заказал вот такой powerbank, который можно заряжать от USB, так что аккумуляторы можно будет зарядить из машины:
Параллельно с решением проблем, решил ввести немного эстетической красоты. Раньше я использовать для базы чернобелые картинки (состоящие только из черных и белых пикселей), которые выглядят не очень, сейчас переделал на картинки с градациями серого, по мне так намного приятнее)
– кнопку с настройками\шестеренкой, заменил на вот такую (справа от часов), она больше сюда подходит по смыслу
– убрал кнопку с проблемами, заменил ее на кнопку типа Меню (самая правая), при ее нажатии открывается меню с настройками, там много места теперь для разных других кнопок, сейчас выглядит так:
Тут, слева направо:
– отключение звука при срабатывании жерлицы
– меню включения\отключения дисплея (показывал выше)
– новая функция, загрузка предыдущей конфигурации
– настройки пинга\опроса жерлицы (показывал выше)
Да, и про новые функции. Я хотел сделать функцию сохранения настроек, планировалось их сохранять на sd карту. Но этот вариант мне не нравился, карта можно подвести, выйти из строя, да ее вообще просто может не быть. Почитав функции ардуино, нашел что там есть дополнительный вид памяти, EEPROM, данные в эту память можно записать в размере 4к байт, и они сохраняются даже при выключении питания. Т.е. обеспечивают те же функции и sd карта, но находятся внутри контроллера, то что нам надо!
Теперь в эту память пишутся данные с настройками, а так же данные о конфигурации жерлиц. Если вы включаете какую то жерлицу, данные о ней записываются в эту память. И вот эта новая функция “загрузка предыдущей конфигурации” позволяет восстановить данные о жерлицах, в случае если произошел сбой и перезагрузка в базе, или отключение питания (если вы решите поменять аккумуляторы, например). С этой функцией не надо будет пробегать все жерлицы снова, для их повторной инициализации в случае сбоя базы, просто вызвать эту функцию и база “вспомнит” все жерлицы.
Для дрожащих рук сделана защита с окном подтверждения:
Напоследок, в процессе работы пришли мысли об оптимизации работы самих жерлиц. Дело в том, что потребление каждой жерлицы составляет примерно 17-20 мили ампер. Учитывая емкость аккумулятора в 2000 мили ампер, среднее время работы на одном заряде составляет 100 часов, четверо суток, если не учитывать отправку сигналов базе. В моих тестах, на разных аккумуляторах (старые и новые), в разных режимах (жерлица просто включена или жерлица включена и общается с базой), при комнатной температуре, жерлицы проработали от 4 до 6 суток, что не плохо, но не идеально.
Дело в том, что ток приема LoRa модуля составляет примерно 8-9 мили ампер. Остальное тратиться на работу микроконтроллера, который просто в холостую молотит бестолковым бесконечным циклом.
Оказывается, микроконтроллер можно ввести в режим глубокого сна, при котором почти все процессы в нем замирают, и пробуждать его от внешнего прерывания.
Arduino Pro Mini которую я использую, поддерживает два прерывания, по 2ому и 3ему пину. На втором пине у меня висит LoRa модуль, на 3ем датчик положения, который переключается при срабатывании жерлицы.
Я переписал программу микроконтроллера жерлицы, теперь жерлица пребывает в глубоком сне, до тех пор пока не получит запрос состояния от базы, или пока не будет поклевки.
Результаты превзошли ожидание, потребление микроконтроллером снизилось до микроапмер, и в жерлице остался только один потребитель это LoRa модуль в режиме приема.
Среднее потребление жерлицы в состоянии ожидания стало всего 8 мили ампер!
После того как случится поклевка, я сделал полное программное отключение всех устройств, и после того как жерлица сообщит базе о поклевки, она полностью отключается и ток потребления становится равным почти нулю.
Так, используя аккумуляторы с емкостью 2000 милиампер в час, жерлица сможет проработать более 200 часов. А если взять аккумулятор посолиднее, на 2600 милиампер например?
Думаю, что в реальных условиях, когда мороз, аккумуляторов все равно будет хватать на достаточное время.