Arduino + GSM модем = удалённое управление нагрузкой (попытка №2)

Jun 11, 2020 15:49

Немного передохнув после страданий https://antynik.livejournal.com/60497.html
Решил всё же сделать всё ещё раз, вдруг на этот раз получится лучше. Тем более день рождения, в подарок на который этот контроллер и предназначался, стремительно приближался.
Для надёжности на этот раз взял Arduino pro mini 3.3V и новенький SIM800L.
Питание от 12 вольт, через DC-DC преобразователь, настроенный на выход 4.02 вольта (точнее не получилось, очень уже мелкий регулировочный резистор). На резистор после настройки капнул эпоксидным клеем, чтобы не сбился.
Сперва просто всё проверил, соединил вместе, залил прошлый скетч - и получил постоянные отключения от Blynk.
На этот раз я уже немного уже понимал, куда копать, поэтому сразу отключил SoftwareSerial, переделал соединение с GSM-модулем на Serial.
Конечно, при этом я лишился отладочных сообщений. Но зато скетч заработал.
К сожалению, периодически контроллер продолжал отваливаться, несколько раз за сутки.
Раз уж пришлось так углубиться в проблему, заодно я наконец-то расчехлил программатор usbasp и поменял загрузчик на optiboot.
На это я потратил довольно много времени, т.к. драйвера на usbasp не устанавливались на рабочий ПК.
После чего, немного помучившись, удалось завести встроенный watchdog.
К сожалению, этот watchdog оказался бесполезен, он максимум на 8 секунд, а переподключение к Blynk занимает до 30 секунд, что вызывает перезагрузку.
Поэтому я вернулся к аппаратному watchdog-у, в роли которого выступил attiny13a.
На этот раз я сперва долго гонял получившийся watchdog на макетной плате, поэтому он заработал сразу штатно.
Учитывая отсутствие Serial для отладки, сделал индикацию состояния контроллера и watchdog-а, разной частотой мигания индикатора.
Также, уже наученный, я не крепил сразу контроллер соплями к коробке, замазывая все контакты. Он достаточно свободно поворачивается, давая возможность подключить программатор и залить новый скетч. Конечно, это пригодилось ещё много раз.
Постарался разместить GSM-модуль в дальнем углу, чтобы основная начинка не была рядом с антенной. Добавил внешнюю антенну. На питание SIM800L, естественно, повесил конденсатор. А на arduino - даже два. Танталовый и электролитический.
В итоге получился достаточно (надеюсь) стабильно работающий контроллер. Последний раз он проработал больше суток. Но на всякий случай я ещё добавил аппаратную перезагрузку GSM-модуля, если долго нет связи с сервером. Сегодня уже поеду на дачу испытывать.

Получившиеся скетчи и описание выложил https://yadi.sk/d/-Bxcc5Di2DcwNg
На этот раз мне за них не так сильно стыдно. Также стоит отметить, что в процессе не пострадало ни одно жи сгорела ни одна железка, что для меня нехилое достижение.







Дополняю пост после установки по месту и по результатам работы.



1. При включённом контроле мощности контроллер через довольно короткие рандомные промежутки времени (минут 15) отключает насос по превышению или недостатку мощности.
Вызвано это, скорее всего, нестабильными импульсами от счётчика. Зря я убрал контроль слишком частых импульсов.
Кроме того, в этом режиме через час контроллер завис. Точнее, намертво потерял связь. Несмотря на индикацию подключенного GSM-модема, да и сам моргал вполне штатно.
2. После выключения контроля мощности пошла идеальная и стабильная работа. Двое суток - ни единого разрыва!
При этом мониторинг мощности работал нормально, и отключение по таймауту тоже.



В целом, подарок удался.
Теперь надо будет продумать, как доработать контроль мощности. Думаю, надо просто считать среднее значение за интервал времени.
Также в следующих планах - добавить датчики уровня воды в цистерне, чтобы отключать насос при заполнении. И наоборот, включать при уровне ниже половины.
До цистерны около 100 метров, так что могут быть проблемы. Придут модули - буду экспериментировать. Надеюсь, приколхозить антенну будет достаточно. Покупать специальную версию NRF24l01 жаба давит.

2020.07.02
Больше двух неделя сабж проработал штатно и стабильно.

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

Previous post Next post
Up