ARDUINO Der Наливатор. Модифицированная версия GyverDrink

VICLER

★★★★★✩✩
9 Дек 2019
582
472
Hamburg
Эта тема для обсуждения проекта Der Наливатор, созданного на основе прошивки от Alex Gyver - GyverDrink.


С начала устранения пары багов до сегодняшнего момента, прошивка раздулась и обзавелась дополнительным функционалом. Из ключевых особенностей в сравнении с оригинальной версией:
  • Поддержка нескольких типов графических OLED дисплеев с диагоналями 0.96", 1.3", 1.54", 2.42" на контроллерах SSD1306, SSD1309, SH1106.
  • Поддержка шагового двигателя вместо сервопривода для более плавных и бесшумных движений на любой диапазон углов (от 0 до 360 градусов).
  • Автономность засчёт питания устройства от аккумулятора с мониторингом напряжения и заряда.
  • Возможность установки разного объёма жидкости для каждой рюмки отдельно.
  • Дополнительный статус-светодиод, сигнализирующий об актуальном режиме/статусе.
  • Все необходимые библиотеки для работы устройства "вшиты" в проект, ничего дополнительного искать и устанавливать не требуется.

scheme2.png
scheme3.png
TTP229_configuration.png
StepMot_connection.png
  • Прокачка. Поставьте рюмку, нажмите и удерживайте кнопку энкодера.
    Прокачка проводится только в ручном режиме и только при наличии рюмки.
    Возврат крана в домашнее положение и сброс счётчика объёма жидкости происходит после снятия рюмки.
  • Режим изменяется удержанием основной кнопки в течении полусекунды.
    Ручной режим: разлив начинается только после однократного нажатия на основную кнопку.
    Авто режим: разлив начинается автоматически сразу после установки рюмки.
  • Целевой объём изменяется вращением энкодера. При одновременном нажатии и вращении энкодера, объём изменяется на 10 единиц, без нажатия на 1 единицу
  • Возможность настроить объём для каждой рюмки отдельно:
    Функция активна только если количество поставленных рюмок > 1
    При однократном нажатии на энкодер подсвечивается место рюмки, объём которой изменяется вращением энкодера. При повторном нажатии подсвечивается следующая установленная рюмка.
    Если же ни одна рюмка не подсвечивается белым, вращение энкодера изменяет объём для всех рюмок одновременно (как в обычном ручном режиме).
  • Разлив можно остановить в любое время нажатием на основную кнопку.
  • Последний выбранный объём сохраняется сразу после налива первой рюмки.
  • Дополнительный статус-светодиод подключается к светодиоду последней рюмки, активируется в STATUS_LED. Служит для индикации режимов работы.
  • Индикация заряда аккумулятора и слежение за напряжением.
    Активируется раскоментированием строки #define BATTERY_PIN ...
    При напряжении, меньшем чем BATTERY_LOW (по умолчанию 3.3В), устройство перестаёт реагировать на внешние воздействия и на дисплее мигает иконка батареи.
    Если при первом включении мигает иконка аккумулятора, но напряжение в порядке(больше, чем BATTERY_LOW) -> нажмите и удерживайте кнопку до появления меню калибровки аккумулятора.
    Для отслеживания статуса зарядки, IN+ с модуля заряда TP4056 нужно подключить к пину A6. При зарядке появится анимация заряда акб.
  • Стартовая анимация и динамическая подсветка рюмок во время и после налива.
Сервис режим:
Вход в сервис режим осуществляется удержанием основной кнопки выбора режима во время стартовой анимации до появления на дисплее надписи "SerViCE". После отпускания кнопки на дисплее появится номер этапа калибровки:
  • - 1 - На этом этапе производится настройка положений сервопривода над рюмками.
    • Уберите все рюмки. На дисплее отобразится положение парковочной позиции в градусах. При этом по краям дисплея будут отображенны штрихи (при градусе > 99, штрих только с правой стороны).
    • Вращением энкодера измените положение парковочной позиции
    • Поставьте рюмку. На дисплее отобразится номер рюмки и позиция в градусах. Вращением энкодера подстройте положение точно над рюмкой. Уберите рюмку.
    • Повторите предыдущий пункт для всех остальных рюмок.
    • После настройки позиций для всех рюмок нажмите основную кнопку изменения режима пока на дисплее не появится номер следующего этапа калибровки.
  • - 2 - На этом этапе производится калибровка таймера для налития 50мл.
    • Поставьте рюмку в любое положение. Кран встанет над этой рюмкой.
    • Нажатием на кнопку энкодера включится помпа. Удерживайте до тех пор, пока не польётся жидкость.
    • Снимите рюмку и поставьте пустую в любое положение.
    • Удерживайте кнопку энкодера, пока не нальётся ровно 50мл.
    • Снимите рюмку. Нажмите основную кнопку изменения режима. Если мониторинг АКБ активен, на дисплее отобразится следующий номер этапа калибровки. В обратном случае калибровка оконченна. На дисплее отобразится основной объём.
  • - 3 - На этом этапе производится калибровка напряжения аккумулятора.
    • На дисплее отобразится напряжение аккумулятора в [mV].
    • Вращением энкодера подстройте отображаемое напряжение до измеренного вольтметром.
    • Нажмите основную кнопку изменения режима. Калибровка оконченна. На дисплее отобразится основной объём.
  • При зажатии кнопки выбора режима более 5 секунд, происходит сброс настроек из памяти (TIME_50ML, SHOT_POSITIONS, PARKING_POS и BATTERY_CAL) до первоначальных, прописанных в Config.h
  • Наличие полноценного, графического меню. Вход/Выход зажатием основной кнопки более полусекунды. Выход из подменю в основное однократным нажатием.
  • Калибровка объёма за единицу времени, калибровка углов сервопривода для рюмок и калибровка напряжения аккумулятора осуществляется в сервисном меню. Вход в сервисное меню осуществляется зажатием основной кнопки во время стартовой анимации.
  • Возможность изменять настройки прошивки прямо в меню. Для этого нажмите на кнопку энкодера на параметре и вращением измените его значение.
  • Ведение статистики. Количество налитых рюмок, объём за сеанс (до выключения устройства) и общий объём, сохраняемый в памяти. При нажатии на кнопку энкодера, выбранное значение сбрасывается

Обязательно к прочтению
Очень часто проблемы возникают из-за некачественной пайки и остатков флюса на компонентах. Обязательно после пайки, до подачи питания, тщательно прочистить все места пайки спиртосодержащим средством и щёткой!
  • Зачастую проблемы с серводвигателем возникают из-за плохого качества самого привода. Дешёвые серво (хоть и цена это не первостепенный показатель качества, но всё же дешевле 6-7$ за серво микро размера брать не советую). Обратите внимание на фирму-производителя. На приводе должен быть лейбл с граматически правильным написанием фирмы (Например оригинальное название фирмы Tower Pro, не TowerPro и не Towerpro). Для данного проекта (и не только) рекомендую привод EMAX ES08MD II
  • Сенсоры TTP229 не стоит тестировать просто лежащими на столе и не зафиксированными (или приклееными абы как на коленку). Эти датчики, в отличии от обычных механических выключателей, очень капризные к окружающей среде и требуют особого подхода. При подаче питания, они анализируют ёмкость между входом (пластиной, площадкой) и окружающей её средой. Измеренная ёмкость является референсной (с которой будут сравниваться последующие изменения ёмкости) до отключения питания. Поэтому во время подачи питания не следует ставить вблизи сенсора какие-либо предметы. Если оставить рюмку на сенсоре до включения, то для того, чтобы сенсор среагировал, нужно уже будет поднести к нему что-то большего размера (например руку или большой стакан), так как срабатывание датчика происходит если измеренная ёмкость окружающей среды больше референсной. При фиксации в корпусе референсная ёмкость будет достаточно большой, чтобы не реагировать на каждую пылинку, пролетающую мимо, а только на предметы, находящиеся вблизи, ведь ёмкость зависит не только от площади (размеров) детектируемого предмета, но и от расстояния до него - чем ближе, тем больше. Следовательно, если датчик плохо реагирует на рюмку/стакан (сбрасывается или не реагирует вообще, однако на палец без проблем) то стоит либо уменьшить расстояние от рюмки до пластины сенсора, либо увеличить площадь самой пластины. Так же держите сигнальные и силовые провода подальше от площадок сенсоров либо экранируйте их во избежание помех.
  • Ошибка компиляции: #error "Not ATmega328P board!". На данный момент поддерживаются только платы на ATmega328P (Uno, Nano, Mini)
  • Параметры из Config.h не учитываются после прошивки - чтобы эти параметры вступили в силу - сбростьте настройки по умолчанию (коими и являются все из Config.h) в сервисном меню (вход зажатием основной кнопки до окончания стартовой анимации)
  • Серводвигатель постоянно вращается без остановки - это сервопривод постоянного вращения (без обратной связи по положению). Для данного проекта не подойдёт. Нужен такой, который имеет определённый диапазон установки положения (обычно 120 - 180 градусов)
  • Серводвигатель постоянно дёргается, моргает дисплей и/или светодиоды - Причин может быть много, но в большинстве случаев это проблемы с питанием (нехватка мощности, помехи). Рекомендую установить аккумулятор (18650 Li-Ion например, можно несколько штук параллельно для увеличения ёмкости). Желательно новый, не стоит на этом экономить.
  • Серводвигатель не поворачивается на 180 градусов. Увы и ах, не все сервоприводы способны поворачиваться на 180 градусов. Тут либо замена на другой, проверенный привод (читать предыдущий спойлер), либо конструкция устройства под имеющийся.
  • Как подключить TTP224/TTP229 к Arduino? На модулях TTP есть ножки, обозначенные как выходы (OUT1, OUT2 и т.д). Вот их и подключаем к пинам A0, A1, A2... (#define SW_PINS в Config.h)
  • Светодиоды не реагируют при срабатывании датчиков (все, либо после какого-то определённого светодиода). Если неисправен один светодиод в цепи, то все последующие (подключенные после него) работать не будут.
Настройка
На данный момент есть две отдельные прошивки:
- GyverDrink_VICLER_MOD : основная с поддержкой OLED и семисегментного дисплеев
- GyverDrink_VICLER_MOD_StepMot : отдельная прошивка с шаговым двигателем и семисегментным дисплеем

В каждой прошивке есть конфигурационный файл Config.h, в котором производятся все натройки устройства. Назначение каждого параметра описанно в комментарии к нему. По умолчанию прошивка без изменений полностью совместима с оригинальным проектом Наливатора от Alex Gyver.
На версии с OLED дисплеем в файле Config.h достаточно выбрать тип дисплея и настроить первые 6 параметров (в секции основные настройки). Все остальные настройки устройства можно провести через меню дисплея. Для того, чтобы параметры из Config.h вступили в силу, нужно сбросить настройки в сервисном меню.

описание изменений, начиная с создания темы

Все необходимые файлы доступны для скачивания в GitHub репозитории или по прямой ссылке
 
Последнее редактирование:

VICLER

★★★★★✩✩
9 Дек 2019
582
472
Hamburg
v6.9 (08.11.2020)
  • Оптимизация вывода объёма за сеанс. Теперь он обновляется динамически во время налива и полностью отсутствует мерцание при обновлении, а так же прокрутке энкодера
  • Исправлено некорректное отображение объёма/сеанс при нажатии на энкодер
v6.9
  • Добавлен параметр(мультипликатор/фактор) для калибровки напряжения акб в Config.h. #define BATTERY_CAL. При калибровке он отображается над значением напряжения
  • Добавлено сохранение налитого объёма в памяти. На вкладке "Статистика" теперь доступен пункт "Общий объём", который не сбрасывается после выключения устройства. Сбросить можно так же, как и другие - кликом энкодера
  • Добавлено отображение налитого объёма текущей сессии (с включения) на основной экран
  • Исправлены баг с наложением числа объёма на страницы меню. Случалось при нажатии на энкодер, если количество рюмок >=2
  • Изменил логику быстрого изменения режима двойным нажатием на кнопку. Теперь при выходе из меню двойным нажатием смены режима не происходит
v6.8
  • Исправлено отображение объёма при старте, если отключен таймаут входа в енергосберегающий режим
  • Исправлено мерцание дисплея при выходе из режима ожидания путём прокрутки енкодера
v6.7
  • Добавлено детектирование наличия зарядки акб. При подключении питания к TP4056 появится анимация заряда акб. Подключение по схеме. В Config.h активировать #define CHARGER_PIN.
  • Исправлена индикация статус-светодиода при изменении режима двойным кликом по основной кнопке
v6.6
  • Исправлено некорректное отображение трёхзначных чисел после выхода из режима ожидания на TM1637
  • Добавлено быстрое изменение объёма при одновременном зажатии и прокрутке энкодера на 10 единиц
  • Добавлено быстрое изменение режима двойным кликом по основной кнопке
  • Добавлена анимация при включении авторежима
  • Увеличен диапазон вращения серводвигателя. Изменить можно в файле b_setup в строке servo.attach(SERVO_PIN, parking_pos, MIN, MAX);. По умолчанию MIN = 544, MAX = 2400
v6.51
  • Исправлено отображение чисел больше 99 в автоматическом режиме на дисплее TM1637
  • Исправлено переполнение значения объёма, равного 255-ти.
v6.5
  • Исправлено изменение параметра "Поддержание питания" в сервисном меню
  • Оптимизация и исправление мелких ошибок
v6.41
  • Оптимизация и ускорение отображения страниц меню. Теперь абсолютно нет мерцаний при вызове меню, изменении страницы, а так же при прокрутке энкодера за пределы пунктов меню
v6.4:
  • Добавленна поддержка SPI дисплеев. Используется программный SPI
  • Переработано меню. Настройки отсортированны и разбиты на сервисные и обычные. Сервисные доступны только в сервис режиме, который запускается зажатием основной кнопки до окончания анимации. Сервисное меню теперь принудительно запускается каждый раз после прошивки на новую версию.
 
Последнее редактирование:
  • Лойс +1
Реакции: TimicH

TuMoH

✩✩✩✩✩✩✩
9 Дек 2019
40
1
Переделал расположение компонентов, теперь иногда во время пуска помпы ардуина бывает перезагружается. Конденсаторы по питанию стоят, пробовал ставить дополнительно в разных местах, не помогает. Аккумулятор 18650,далее повышается до 5.2 В. На помпу отдельная повышайка на 9.5 В, подключенная последовательно после драйвера. Если подключена зарядка, то сбоев нету.
 

Вложения

laser

✩✩✩✩✩✩✩
5 Янв 2020
23
4
Микрики правильно нарисованы на схеме, 2 й - на А0, 3 й - на А1 и т.д. Так и будут ставить.
 

VICLER

★★★★★✩✩
9 Дек 2019
582
472
Hamburg
@TuMoH, а драйвер от 5в питается (от первой повышайки)?

@laser, блин, точно. Исправил, спасибо!
 
Последнее редактирование:

s1uggard

✩✩✩✩✩✩✩
15 Сен 2020
36
5
Пожелания для обновлений:
  • Сделать доступными сервисные настройки (+ по сути там лишние для большинства пользователей и всякие: "инверсия серво", "авто-парковка" и т.д.) только при запуске с зажатой кнопкой. Чтоб шаловливые ручки товарищей не наклацали лишнего. Я начал делать в качестве изучания прошивки, но обломался на работе с массивом MenuPages исходя из переменной полученной в setup (Pascal и PHP всё-таки не C, нужно подучить) :)

Вопрос по схеме:
  • J5019 (зарядка + повышайка) - без аккумулятора выдаёт 4.99 но нифига не работает, с аккумулятором - 5.10 - и всё работает. В чём может быть причина? Или все подобные модули работают только при наличии аккумулятора? Есть ли варианты с "опциональным" подключением?
 

Бармалей31

✩✩✩✩✩✩✩
22 Сен 2020
11
2
Так зарядка небось заряжает током 500 мА, вот его и не хватает повышайке без аккумулятора. А с аккумулятором - он то больший ток может дать - вот и работает.
 

laser

✩✩✩✩✩✩✩
5 Янв 2020
23
4
J5019 (зарядка + повышайка) - без аккумулятора выдаёт 4.99 но нифига не работает, с аккумулятором - 5.10 - и всё работает. В чём может быть причина? Или все подобные модули работают только при наличии аккумулятора? Есть ли варианты с "опциональным" подключением?
Для корректной работы данного повышающего преобразователя, при питании платы от внешнего источника (IN+) li-ion аккумулятор должен быть подключен. По сути это связка ТР4056 и МТ3608, только без защиты от переразряда, и это наверно лучший вариант.

Так зарядка небось заряжает током 500 мА, вот его и не хватает повышайке без аккумулятора. А с аккумулятором - он то больший ток может дать - вот и работает.
На входе держит до 2А, на выходе 1А.
 

Бармалей31

✩✩✩✩✩✩✩
22 Сен 2020
11
2
Я не про ту штуку, что в розетку включается. Я про блок зарядки, что непосредственно аккум заряжает. Какой зарядный ток на аккум идёт, когда его нет?
 
Последнее редактирование:

VICLER

★★★★★✩✩
9 Дек 2019
582
472
Hamburg
@s1uggard, идея с ограничением настроек хорошая. Подумаю над этим.
На J5019 наткнулся совсем недавно, в наличии ещё нет. А зачем тогда модуль заряда, если не собираетесь пользоваться аккумулятором? Тогда проще наверное будет только один преобразователь поставить, или вообще без него, если 5в уже есть
 

s1uggard

✩✩✩✩✩✩✩
15 Сен 2020
36
5
@s1uggard, идея с ограничением настроек хорошая. Подумаю над этим.
На J5019 наткнулся совсем недавно, в наличии ещё нет. А зачем тогда модуль заряда, если не собираетесь пользоваться аккумулятором? Тогда проще наверное будет только один преобразователь поставить, или вообще без него, если 5в уже есть
Ну сдох аккумулятор, или не купил ещё например ) а собрать уже хочется. Но получается что без - напрямую от USB не поработаешь как надо (хотя возможно что-то я не так сделал, а то у меня опять, работало-работало и перестало, даже не прошивается).
 

Старик Похабыч

★★★★★★✩
14 Авг 2019
2,011
510
Москва
Pascal и PHP всё-таки не C, нужно подучить
Все языки одинаковый... Но учить надо всегда.
А с настройками полностью согласен, некоторые настройки нужны только 1 раз при первичной установке параметров. Вот все их под "кнопку"
 

VICLER

★★★★★✩✩
9 Дек 2019
582
472
Hamburg
@TuMoH, подключите второй преобразователь от tp4056. Похоже 5в сильно проседает при старте помпы, отсюда и перезагрузка.
 
Последнее редактирование:

TuMoH

✩✩✩✩✩✩✩
9 Дек 2019
40
1
@TuMoH, подключите второй преобразователь от tp4056. Похоже 5в сильно проседает при старте помпы, отсюда и перезагрузка.
Так тоже пробовал, в этом случае не хватает напряжения для сервы, перестает работать серва. Помпа и серва подключены серез драйвер.
 

VICLER

★★★★★✩✩
9 Дек 2019
582
472
Hamburg
@TuMoH, что у Вас за серво, который питается от 9,5В? Обычно все работают от 4,5 до 6В. Если в этом диапазоне не работает, то скорее всего нехватает тока от источника. А нехватка тока приводит к проседанию напряжения, что похоже на Ваш случай. Может аккумулятор дохлый?

Что-то я не понял, как у Вас там всё подключено. Если исходить из того, что вы написали, у Вас два преобразователя, один (первый) стоит после модуля заряда и выход его идёт на +5вольт шину и вход драйвера. Вторая повышайка на 9,5 вольт подключена последовательно к драйверу(то есть питается с выхода первого преобразователя) и питает помпу с серво. Получается, что серво работает только одновременно с помпой
Нарисуйте-ка лучше схему
 
Последнее редактирование:

Drongo783

✩✩✩✩✩✩✩
3 Авг 2020
71
6
думаю что инверсию серво убирать из настроек не стоит... иногда приходится поставить серво вверх ногами...тогда она нужна
 

VICLER

★★★★★✩✩
9 Дек 2019
582
472
Hamburg
@Drongo783, убирать полностью не буду, просто постараюсь сделать так, что некоторые параметры будут дпступны только если войти в сервис режим при нажатии кнопки до включения устройства, остальные "безопасные" параметры останутся на месте
 
  • Лойс +1
Реакции: LVit

VICLER

★★★★★✩✩
9 Дек 2019
582
472
Hamburg
@TuMoH, по этой схеме серво питается от 5В.
Вообще не хорошо последовательно подключать преобразователи. КПД такого решения намного ниже.

Вот провёл тест:
1. Нагрузка 40 Ом на одном преобразователе с 3.6В до 9.5В КПД = 87%. Потребляемый ток 722мА
2. Та же нагрузка, только через два преобразователя последовательно: 3.6В -> 5.2В -> 9.5В КПД = 74%. Потребляемый ток 833мА

Лучше подключить второй преобразователь к выходу TP4056 (то есть параллельно с первым преобразователем) как на схеме в первом посте. Тогда он правда будет кушать немножко в простое (<= 1мА).
Или подключите серво без драйвера, напрямую к 5В от первого преобразователя а второй оставьте как есть после драйвера, только на вход драйвера подключите выход с TP4056(Vin на первом преобразователе)
 

Димьян

✩✩✩✩✩✩✩
9 Мар 2020
21
0
Гуру подскажите, подойдут ли высокотоковые аккумуляторы? Брал для замены в шурупаверте, 20 или 30 ампер, не помню.
 

_Михалыч_

✩✩✩✩✩✩✩
28 Апр 2020
18
3
Hamm
@VICLER, в версии 6.31 не сохраняются настройки аккума. а так-же выставленные цвета подсветки
 
Последнее редактирование: