Как стать автором
Обновить

Дебаг GSM-весов на Arduino

Разработка для интернета вещей *Разработка под Arduino *DIY или Сделай сам


Статья касается конструкций по публикациям на Хабре, а после и моем сайте


Написана по результатам некоторых неудачных попыток повторения схемы.


Кроме того, рекомендуется к прочтению пользователям arduino.ru, утверждающим, что


"Эта схема неработоспособна в принципе."

Для начала, система создавалась как максимально простая конструктивно, и она таковой получилась.


Мы-же не обвиняем создателей "1K ZX Chess"(самая маленькая шахматная программа), что она не умеет делать рокировки и отображает фигуры символами?


И кстати, самые маленькие весы для одного улья я таки сделал (к слову, 1K ZX Chess уже не самые маленькие ):


Smallest beehive GSM-scale


Они лишены багов по ложной засветке молниями, феерверками и фарами проезжающих машин.


Какие-же сюрпризы преподносят микроконтроллеры пользователям мы и рассмотрим под катом.


Для начала, любая другая система, работающая корректно (с точки зрения ардуинщика) должна содержать на несколько модулей больше (RTC, STEP-UP/DOWN) и работать от 5Вольт.


В моей конструкции для выхода из режима сна используется прерывание по аналоговому фотодатчику на цифровом пине.


Это, в сумме с отсутствующим резистором делителя напряжения и вызывает основной разрыв шаблона (на схеме GL5528 с земли на пин 2):



На самом деле, все очень просто — делитель напряжения получается за счет внутреннего сопротивления Atmega328, образуемого при включении внутреннего напряжения подтяжки (INPUT_PULLUP).


Да, такое решение можно назвать спорным, но вспомните ZX Chess и успокойтесь!


Итак, первый баг — "дребезг" включения, который вечерами мы можем наблюдать на тех-же уличных фонарях, срабатывающих по фотодатчику.


Решается он установкой 10-минутной паузы в конце функции отправки статистики:


for ( word m = 0; m <= 60000 ; m++) { delayMicroseconds(10000);

Идем дальше, помните мультфильм 38 попугаев?



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

Баг номер два как раз и связан с питанием, проявляется в постоянной отправке сообщений "INITIAL BOOT OK" и вызван ребутом контроллера.


В первую очередь следует проверить цепи питания идущие к системе от батареи, ибо GSM-модули славятся бросками по току.


Ту желательно чтобы все было запаяно, никаких "ардуиновских" макетных плат и соединителей:



И не удивляйтесь, если подобная(я видел несколько реализаций на разъемчиках) система не заработает корректно, иногда даже плохой контакт батарей в держателе приводит к описанному багу.


Кстати, если заметили на фото выше — конденсатор 2200мкФ, 16В или большей емкости — должен быть в цепи питания, поближе к GSM-модулю.


Если не помогает (в совсем запущенном случае) можно запаять прямо на Ардуино, между GND и VCC (соблюдая полярность)


Тогда он будет сглаживать просадку питания самого контроллера до 2.7В (при котором происходит авторесет).


Третий баг (отправку сообщений Turn1, Turn2, Turn3 ...) мне удалось воспроизвести только испортив микроконтроллер


Причем для этого достаточно закоротить пин со включенным напряжением подтяжки (PULLUP) на землю.


Все, после такой операции помогает только хирургическое вмешательство.


Для начала необходимо заменить pinMode(2, INPUT_PULLUP); на pinMode(2, INPUT);


Просто любой PULLUP после короткого замыкания ведет как минимум к некорректной версии микроконтроллера.


Ну и естественно запаять резистор 20к между VCC arduino и вторым пином (он как раз явно образует тот самый резистивный делитель, что хотят видеть в моей конструкции ардуинщики.)


Отсутствие срабатывания на вспышки молний можно реализовать несколькими способами, но приводить текст функции я не стану и вот почему:


Поскольку к развитию проекта так никто и не подключился, то это единственный способ хоть немного заставить людей думать а не слепо копипастить.



Всем хорошего настроения!


Андрей.


P.S. Ну а самые маленькие весы проработали на балконе от одной "кроны" 35 дней, допустив лишь одно ложное срабатывание в новогоднюю ночь.

Теги:
Хабы:
Всего голосов 12: ↑6 и ↓6 0
Просмотры 6.3K
Комментарии Комментарии 8