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


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


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


    Кроме того, рекомендуется к прочтению пользователям 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 дней, допустив лишь одно ложное срабатывание в новогоднюю ночь.

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 8

      +4
      Это не «дебаг», это обматывание изолентой и подпирание костылями, что бы оно хоть как то заработало.

      1. Аналоговый делитель на цифровом входе с одним плечом в виде резистора подтяжки МК — это великолепное решение, надежное, как швейцарские часы.

      2. Питание GSM модуля от одного литиевого элемента — тоже неплохо, ведь VBAT 4,2 вольта — это для слабаков, боящихся трудностей.

      3. Сбрасывается? Добавим электролитов! Куда добавим? Да куда угодно, емкостей мало не бывает!
        0
        2. Справедливости ради, производитель заявляет, что «The power supply range of SIM800 is from 3.4V to 4.4V.». Хотя и «Recommended voltage is 4.0V». В конце концов, эти модули как раз и адаптированы для питания от одного литиевого элемента.
        Хотя я ярый противник решений «ардуина с кучкой модулей на проводках» в целях, отличных от начального прототипирования.
        0
        Да я в курсе, что они рассчитаны на питание от батареи напрямую, и 4,2 вольта — это скорее максимум который должен переваривать модуль при заряде лития.

        Предлагать посмотреть референс цепей питания для SIM800 и профиль потребления тока я уже не стал.
          +2
          А зачем вообще этот костыль с аналоговым датчиком освещённости? Потребление снижаете усыпляя контроллер? Так стабилизатор 3.3в в ардуине жрёт на порядок больше и не зависимо от спящего контроллера.
          И ещё может оказаться что вот эта строчка сожрёт энергии больше чем RTC за сутки
          for ( word m = 0; m <= 60000 ; m++) { delayMicroseconds(10000);
            +1
            Это ардуино, детка.(С) :))
              0
              Незабываемый Ардуино-стиль. :( О каком батарейном питании можно говорить с такими решениями? :(
              0
              Просто любой PULLUP после короткого замыкания ведет как минимум к некорректной версии микроконтроллера.
              «Никогда такого не было, и вот опять». Вы не могли бы пояснить, почему штатный режим приводит к сбоям?
                +2
                Прочитал на Вашем сайте: «Платы на чипе PL2303 не работают под Windows 10.» Скажу Вам больше, они и под Windows 8 не будут работать. И на подобные грабли Вы будете наступать пока не измените подход к разработке и не перестанете применять странные решения и поддельные микросхемы. Именно из-за того, что это поддельные китайские PL2303, они и не работают со свежими драйверами от Prolific. Надо либо использовать оригинальные PL2303, либо насильно установить старый драйвер, а не плодить мифы не разобравшись. :(

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

                Самое читаемое