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

VICLER

★★★★★✩✩
9 Дек 2019
636
499
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 не стоит тестировать просто лежащими на столе и не зафиксированными (или приклееными абы как на коленку). Эти датчики, в отличии от обычных механических выключателей, очень капризные к окружающей среде и требуют особого подхода. При подаче питания, они анализируют ёмкость между входом (пластиной, площадкой) и окружающей её средой. Измеренная ёмкость является референсной (с которой будут сравниваться последующие изменения ёмкости) до отключения питания. Поэтому во время подачи питания не следует ставить вблизи сенсора какие-либо предметы. Если оставить рюмку на сенсоре до включения, то для того, чтобы сенсор среагировал, нужно уже будет поднести к нему что-то большего размера (например руку или большой стакан), так как срабатывание датчика происходит если измеренная ёмкость окружающей среды больше референсной. При фиксации в корпусе референсная ёмкость будет достаточно большой, чтобы не реагировать на каждую пылинку, пролетающую мимо, а только на предметы, находящиеся вблизи, ведь ёмкость зависит не только от площади (размеров) детектируемого предмета, но и от расстояния до него - чем ближе, тем больше. Следовательно, если датчик плохо реагирует на рюмку/стакан (сбрасывается или не реагирует вообще, однако на палец без проблем) то стоит либо уменьшить расстояние от рюмки до пластины сенсора, либо увеличить площадь самой пластины. Так же держите сигнальные и силовые провода подальше от площадок сенсоров либо экранируйте их во избежание помех.
  • Зависает или совсем не работает OLED дисплей? Добавьте подтягивающие резисторы (4.7к) на линии i2c. То есть один между VCC и A4, второй между VCC и A5. Если не работает с двумя резисторами, попробуйте оставить один только на A4 (sda).
  • Ошибка компиляции: #error "Not ATmega328P board!". На данный момент поддерживаются только платы на ATmega328P (Uno, Nano, Mini).
  • Параметры из Config.h не учитываются после прошивки - чтобы эти параметры вступили в силу - сбростьте настройки по умолчанию (коими и являются все из Config.h) в сервисном меню (вход зажатием основной кнопки до окончания стартовой анимации).
  • Серводвигатель постоянно вращается без остановки - это сервопривод постоянного вращения (без обратной связи по положению). Для данного проекта не подойдёт. Нужен такой, который имеет определённый диапазон установки положения (обычно 120 - 180 градусов).
  • Серводвигатель постоянно дёргается, моргает дисплей и/или светодиоды - Причин может быть много, но в большинстве случаев это проблемы с питанием (нехватка мощности, помехи). Рекомендую установить аккумулятор (18650 Li-Ion например, можно несколько штук параллельно для увеличения ёмкости). Желательно новый, не стоит на этом экономить.
  • Иногда дёргается сервопривод. В прошивке встроена дополнительная библиотека Adafruit TicoServo для управления серводвогателем. В некоторых случаях сервопривод работает с ней стабильнее. Для использования этой библиотеки нужно:
    • Поменять местами провода на пинах D5 и D10
    • В файле Config.h так же поменять эти пины: #define SERVO_PIN 10 и #define ENC_CLK 5
    • В файле GyverDrink_VICLER_MOD раскомментировать строку #define USE_TICOSERVO
  • Серводвигатель не поворачивается на 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 репозитории или по прямой ссылке
 
Последнее редактирование:

Anatolyj

★✩✩✩✩✩✩
30 Янв 2020
127
12
Перечитал шапку, посмотрел ролик. Не включается функция "разный объем" (кнопка инкодера исправна ( прокачка работает)) версия прошивки последняя с шапки данной ветки
Функция активна только если количество поставленных рюмок более 2.
При однократном нажатии на энкодер подсвечивается место рюмки, объём которой изменяется вращением энкодера. При повторном нажатии подсвечивается следующая установленная рюмка.

Т.е. ставишь как минимум 2 рюмки и дальше энкодером. Но я собирал с олед дисплеем и уже подарил и проверить уже не могу.
 
  • Лойс +1
Реакции: SHTILL

SHTILL

✩✩✩✩✩✩✩
14 Янв 2020
14
1
Спасибо други, просто в демо ролике без рюмок , пытался с одной рюмкой , не работало. Теперь все получилось
 

TuMoH

✩✩✩✩✩✩✩
9 Дек 2019
49
1
пытаюсь добавить датчик объема (остаток напитка в емкости), иконку отрисовал по аналогии с батареей, сделал дополнения в коде, но почему то значение переменной всегда принимает нулевое значение, если тестировать код в отдельном скетче, то значения нормально меняются.
еще не получается сдвинуть иконку ниже, при любых значениях Y, иконка остается в углу.
часть кода из вкладки d_func:
C++:
// получение объема
int get_bottle() {
//  bottle = filter_bottle(analogRead(BOTTLE_PIN));
  bottle = analogRead(BOTTLE_PIN);
  return bottle;
  }

// преобразование объема в процент
uint8_t get_bottle_percent() {
  static uint8_t percent_bottle = 0;
  if (bottle >= 350) percent_bottle = 0;
  else if (bottle >= 330) percent_bottle = 1;
  else if (bottle >= 300) percent_bottle = 2;
  else if (bottle >= 290) percent_bottle = 3;
  else if (bottle >= 280) percent_bottle = 4;
  else if (bottle >= 150) percent_bottle = 5;
  else percent_bottle = 0;
  return percent_bottle;
  }
 

Вложения

Шурупчик

★✩✩✩✩✩✩
10 Фев 2020
130
21
пытаюсь добавить датчик объема (остаток напитка в емкости), иконку отрисовал по аналогии с батареей, сделал дополнения в коде, но почему то значение переменной всегда принимает нулевое значение, если тестировать код в отдельном скетче, то значения нормально меняются.
еще не получается сдвинуть иконку ниже, при любых значениях Y, иконка остается в углу.
часть кода из вкладки d_func:
C++:
// получение объема
int get_bottle() {
//  bottle = filter_bottle(analogRead(BOTTLE_PIN));
  bottle = analogRead(BOTTLE_PIN);
  return bottle;
  }

// преобразование объема в процент
uint8_t get_bottle_percent() {
  static uint8_t percent_bottle = 0;
  if (bottle >= 350) percent_bottle = 0;
  else if (bottle >= 330) percent_bottle = 1;
  else if (bottle >= 300) percent_bottle = 2;
  else if (bottle >= 290) percent_bottle = 3;
  else if (bottle >= 280) percent_bottle = 4;
  else if (bottle >= 150) percent_bottle = 5;
  else percent_bottle = 0;
  return percent_bottle;
  }
А какой датчик обЪема? Не помню где то тут писали на чистом продукте по сопротивлению датчик не корректно работает и на каждый напиток разное сопротивление, четко будет если только поплавковый.
 

TuMoH

✩✩✩✩✩✩✩
9 Дек 2019
49
1
А какой датчик обЪема? Не помню где то тут писали на чистом продукте по сопротивлению датчик не корректно работает и на каждый напиток разное сопротивление, четко будет если только поплавковый.
Датчик Такой, буду калибровать под один напиток
 

hjgkj

✩✩✩✩✩✩✩
18 Авг 2020
2
0
Доброго времени суток Господа! какой максимальный угол поворота в этого цифрового сервопривода EMAX ES08MD II ?
и ещё один вопрос, если шаговый двигатель и драйвер то можно ж любой выбрать так как управление по step и dir ! ?(28BYJ-48 этот мне маловат)
В планах модернизировать свой наливатор ,сам разливной гусак у меня получился тяжеловат....вот и думаю каким двигателем это можно реализовать!


мой наливатор
 

VICLER

★★★★★✩✩
9 Дек 2019
636
499
Hamburg
Виктор, как Вы смотрите на мою хотелку? #487, смысл есть?
даже вот не знаю как это будет выглядеть. А клапан не помогает от капания? У меня на одном наливаторе без клапана, сервопривод перемещается с высокой скоростью, тем самым сбрасывая последнюю каплю в последнюю налитую рюмку.

@TuMoH, значение какой переменной не меняется? Где вызываются эти функции? Напишите лучше мне в личку, попробуем разобраться. А насчёт положения иконки, в этой библиотеке координаты Y реализованны по строкам. Всего 8 строк (от 0 до 7) по 8 пикселей.

какой максимальный угол поворота в этого цифрового сервопривода EMAX ES08MD II ?
честные 180 градусов
если шаговый двигатель и драйвер то можно ж любой выбрать так как управление по step и dir
конечно! Хоть Nema34. Если без редуктора, то точность будет даже лучше засчёт отсутствия люфта. Только я вот пробовал на Nema11, но он для моей трубки и шланга оказался немного слабоват, нужен побольше
 
  • Лойс +1
Реакции: hjgkj

Шурупчик

★✩✩✩✩✩✩
10 Фев 2020
130
21
даже вот не знаю как это будет выглядеть. А клапан не помогает от капания? У меня на одном наливаторе без клапана, сервопривод перемещается с высокой скоростью, тем самым сбрасывая последнюю каплю в последнюю налитую рюмку.
Спасибо за отзыв, поставил скорость сервы на максимум, последняя капля слетает в рюмку, есть 2 клапана один механический, но мне кажется он сильно грубый, помпа может не продавить, второй электромагнитный на 5в, там маленькие проходные диаметры. Сказать честно, ни один, ни второй пока не ставил. А на счет обнуления емкостного датчика надо найти нормальнозамкнутую кнопку, и повесить по питанию, бывает, что капля упадет, чтобы не перезапускать всю систему, нажал, и все стало на свои места.
 

dimbassik

✩✩✩✩✩✩✩
12 Янв 2021
2
2
Доброго времени суток. Подскажите пожалуйста при загрузке прошивки 7.1 дисплей работает, но зависает при загрузке. с предыдущими версиями прошивки дисплей SSD1306 (I2C) не работает что может быть
 

hjgkj

✩✩✩✩✩✩✩
18 Авг 2020
2
0
подскажите пожалуйста! есть ли разница цифровой или аналоговый EMAX ES08MD II для прошивки GyverDrink_v1.5 ?
 

Вложения

  • 127.8 KB Просмотры: 20
  • 166.9 KB Просмотры: 20

SlavikBublik

✩✩✩✩✩✩✩
22 Мар 2020
14
3
@dimbassik, добавьте pullup резисторы(4.7к) на пины А4 и А5
Есть чем поделиться !
Если помните, у меня тоже была проблема с частотой дисплея, в итоге решилась убиранием общего объёма, и понижением частоты до 300.
Но, увидел, что вариант с подтягивающими резисторами работает у других, и решил попробовать ещё раз у себя, в прошлый раз не вышло, но я подумал, что где-то оплошал тогда.

Но и в этот раз результат был такой же. Я уже планировал вернуться на предыдущую рабочую схему, но решил попробовать проверить запуск системы после убирания подтягивающего резистора с пина А5.

ИИИИИииии, случилось чудо !
С ОДНИМ подтягивающим резистором 4.7 кОм на А4 всё отлично заработало, причем даже на частоте в 900 !
Хотя с двумя вообще не запускалось до этого. Что за чудеса электроники?..)
 
Последнее редактирование:

dimbassik

✩✩✩✩✩✩✩
12 Янв 2021
2
2
Есть чем поделиться !
Если помните, у меня тоже была проблема с частотой дисплея, в итоге решилась убиранием общего объёма, и понижением частоты до 300.
Но, увидел, что вариант с подтягивающими резисторами работает у других, и решил попробовать ещё раз у себя, в прошлый раз не вышло, но я подумал, что где-то оплошал тогда.

Но и в этот раз результат был такой же. Я уже планировал вернуться на предыдущую рабочую схему, но решил попробовать проверить запуск системы после убирание подтягивающего резистора с пина А5.

ИИИИИииии, случилось чудо !
С ОДНИМ подтягивающим резистором 4.7 кОм на А4 всё отлично заработало, причем даже на частоте в 900 !
Хотя с двумя вообще не запускалось до этого. Что за чудеса электроники?..)
Наконец добрался, с двумя резисторами не заработал, оставил на А4 и все заработало но только на на версии 7,1

есть еще вопрос, почему при наливе дергается мотор? эта проблема не постоянна и проявляется в хаотичном порядке.
 

TimicH

★✩✩✩✩✩✩
9 Фев 2020
101
49
59
Новосибирск
есть еще вопрос, почему при наливе дергается мотор? эта проблема не постоянна и проявляется в хаотичном порядке.
Начиная с версии 7.0 у меня "дергание" появилось тоже.
 

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

★★★★★★✩
14 Авг 2019
2,352
642
Москва
Хотя с двумя вообще не запускалось до этого. Что за чудеса электроники?..)
Это не чудеса электроники, это закон ома в действии.
1610539045204.png
При двух параллельных резисторах общее сопротивление становиться 1/2 от номинала. т.е. вместо 4,7 выходит 2,35 и этого не хватает для работы.
Если ставить 3 устройства с уже встроенными резисторами , то будет 1,6ком, что совсем мало.
 

SlavikBublik

✩✩✩✩✩✩✩
22 Мар 2020
14
3
Это не чудеса электроники, это закон ома в действии.
При двух параллельных резисторах общее сопротивление становиться 1/2 от номинала. т.е. вместо 4,7 выходит 2,35 и этого не хватает для работы.
Если ставить 3 устройства с уже встроенными резисторами , то будет 1,6ком, что совсем мало.
Да это-то понятно, просто я полагал что так как в устройстве OLED дисплея применяется шина I2C, то в ней подтягиваются резисторами обе линии: и тактов, и данных (SCL и SDA). А в ходе эксперимента выяснилось, что только (ИСКЛЮЧИТЕЛЬНО!) SDA нужно подтягивать в моём случае.. Вот и интересно, почему так.
 

jenz

✩✩✩✩✩✩✩
30 Мар 2020
4
4
Резистора оба повесил на а4 и на а5 глюки с экраном пропали герцовку выставил 600, пока работает
 
  • Лойс +1
Реакции: Димьян

VICLER

★★★★★✩✩
9 Дек 2019
636
499
Hamburg
вообще, конечно, нужно подтягивать две линии, sda и scl. Странно, что работает только на sda.
Насчёт дёргания серво даже не знаю, что может быть причиной. Попробуйте поставить SERVO_AUTO_POWER 1
 
  • Лойс +1
Реакции: SlavikBublik

VICLER

★★★★★✩✩
9 Дек 2019
636
499
Hamburg
надо бы поставить эту библиотеку по умолчанию, с ней у всех проблем меньше