Arduino + GSM модем = удалённое управление нагрузкой

May 09, 2020 21:49

Решил потратить длинные выходные на окончательное изготовление сабжа.
Мой отец уже года два назад заказал мне такое устройство, чтобы включать мощный насос, снабжающий водой все дачные участки.
Чтобы не ходить довольно далеко, причём дважды - сначала чтобы включить, а через пару часов - чтобы выключить.
В принципе, это довольно тривиальная задача. Я делал такое ранее, с управлением по СМС.
Но на этот раз дело несколько усложнялось тем, что нужно контролировать текущую мощность насоса.
Кроме того, захотелось управлять через сервер Blynk. Это даст возможность постоянно видеть текущую мощность, и её график, наглядно и легко регулировать параметры.
Мощность в чистом виде получить я не могу, и для её определения используются импульсы счётчика, к которому подключён насос.
Для связи взял GSM-модуль Neoway M590, которые китайцы продают б/у почти бесплатно. И он лучше SIM800L, т.к. можно напрямую подключать к питанию 5 вольт.
В принципе, проект крайне простой, но при его осуществлении возникало множество неожиданных проблем, которые мне не удалось корректно решить.
Начал я с первичного программирования Arduino Pro mini. И всё получалось неплохо, но через пару дней издевательств плата переставала шиться, точнее ругалась на "Device signature = 0x000000", и даже с параметром -F не проходила верификацию. Убил два модуля.
Потом плюнул и взял недавно взятый на пробу клон Arduino Nano, а точнее LGT8F328P. Простые скетчи шились на раз и отлично работали.
Но нормально общаться по SoftwareSerial он не захотел. Переключил его на аппаратный Serial, но стал постоянно ругаться Blynk на "too big packet" (кстати, кажется, эту ошибку исправили в последней версии библиотек).

Ещё раз плюнул, и решил задействовать тяжёлую артиллерию - Arduino Uno.
Здесь всё заработало почти сразу. Я обрадовался, потестировал несколько часов, всё было хорошо.
Но через десяток часов контроллер завис. Намертво!
Вот тут я потратил почти неделю. Что только я не пробовал!
Конденсаторы, подтяжки, изоляция фольгой от антенны и GSM-модуля. Несколько раз перелопатил весь код, переписал его с нуля, оптимизировал всё что можно и даже что нельзя. Включил watchdog. Переделал питание не от зарядника телефона 5 вольт, а от БП 12 вольт, пришлось городить DC-DC для GSM-модуля.
Всё безуспешно. Особую трудность и продолжительность проверки любого изменения вызывала необходимость дождаться зависания - подождать часов 10-15.
И даже более того, после обновлений библиотек Blynk и сервера контроллер окончательно перестал нормально подключаться к серверу Blynk.
Я взял чистый скетч с одной кнопкой и добавлял код по чуть-чуть, чтобы найти проблему. В результате потратил ещё день и в очередной раз переписал весь код заново.
Не понял, почему, но пришлось убрать в некоторых местах вывод лога в Serial и перенести основную часть кода из loop в timer. А ещё позже - откатить библиотеку Blynk до 0.5.4.
Но основания проблема зависания никуда не делась.
Поскольку устройство реально нужно, и усилий уже потрачено немеряно, психанул и решил добавить к нему аппаратный watchdog - ещё один микроконтроллер, который будет отслеживать состояние основного, и перезагружать его в случае зависания.
Сперва быстренько вспомнил, как шить attiny13. Скетч простой, прошился и работал вроде нормально. Но после ещё суток безуспешных экспериментов, я опять психанул и задействовал LGT8F328P. Он по крайней мере ведёт себя понятней. В результате watchdog заработал нормально.

В дальнейшем добавил виджет terminal, и опять вернулась проблема глюков, если рядом был вывод в Serial.
После нескольких часов мучений с перебором разных версий библиотеки, пришлось от Serial окончательно отказаться.
Результат получился крайне многострадальным, много раз перепаянным, собранным на соплях, сбоящим при любом изменении программы. Но работающим.
Позже я попробую ещё раз сделать всё заново, а этот экземпляр отдам таки на опыты на дачу.

Расходы на этот проект считать даже не хочу, так как времени и усилий потрачено немеряно.
С другой стороны, ближайшие аналоги на яндекс маркете стоят 4 тысячи, и это просто безумие.





техническое, arduino

Previous post Next post
Up