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

Der Наливатор. Модифицированная версия GyverDrink
Эта тема для обсуждения проекта Der Наливатор, созданного на основе прошивки от Alex Gyver - GyverDrink.


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

scheme2.png
scheme3.png
НазваниеКорпусПроизводительUGS(th)/VUDS / VID / AP / WRDS,on / mΩПримечаниеЦена / €
IRLML6244SOT-23IRF0,5-1,1206,31,3210,13
SI2302DSSOT-23Vishay0,65-4,52061,25702,5V LL, очень дёшево0,01
IRFP4310ZTO-247ACirf2,0-4,01001202804,81,80
IRFP450TO-247irf2,0-4,0500141904001,20
IRF530TO-220irf2,91001694160LIN0,44
IRL3103TO-220ABirf1,0306494124,5V LL, Qg=33nC (!)0,95
IRF730ATO-220ABirf2,0-4,54005,5741000Qg=22nC (!)0,54
IRFP064TO-247ACirf2,060703009Qg=190 nC1,65
IRF3205TO-220ABirf2,05511020080,69
IRL3803TO-220ABirf1,03014020064,5V LL, Qg=140nC0,96
IRF540TO-220ABirf31002815077LIN0,52
IRF7401SO-8irf2,7208,72,0222,7V LL0,45
IRF7403SO-8irf4,85308,52,5224,5V LL0,42
IRF7413SO-8irf3,03013,02,5114,5V LL0,41
BUZ11TO-220ST4,05033,090,030LIN0,50
BSS83SOT143NXP2,0100,050,2345000не путать с BSS83P0,10
BS170TO-92gs2,0600,30,835000LIN0,13
BSN20SOT-23gs1,8500,180,3560004,5V LL, LIN0,092
BSS138SOT-23div0,8-1,6500,220,3620005V LL, LIN0,06
BSS123SOT-23div0,8-1,61000,170,3610000 @ 4,5V,4,5V LL, LIN0,06
IRFP2907TO-247ACirf4,0752094704,52,70
2N7000TO-92ON3,0600,20,3550004,5V LL, LIN0,13
BS107TO-92ON, Phi3,02000,250,356400/140002,6V LL; LIN0,18
BS108TO-92ON, Phi2,02000,250,3580002V LL; LIN0,14
BUK100TO-220Phi3,05013,540125Защита от перегрузки и ESD1,40
IRL3705NTO-220ABirf2,05589170104V LL, Qg=98nC1,20
BUZ72ATO-220Infineon4,01009,0402505V LL, LIN0,45
IRLZ34NTO-220irf2,5553068354V LL, LIN0,39
IRLZ44NTO-220irf25547110224V LL, LIN0,49
IRLML2502SOT-23irf1,2204,21452,5V LL0,17
IRF1404TO-220ABirf4,0402023334-1,10
IRL1004TO-220irf2,7401302006,5-1,25
IRL530TO220, D2Packirf210015,0881600,57
IRF830TO220ABirf2,0-4,55005,0741400LIN0,57
IRF840TO220ABirf2,0-4,05008,01258500,57
FDC645NSuperSOT-6Fairchild1,5305,50,8/1,630-0,7
BSP297SOT-223Siemens/Infineon0,8-2,42000,651,86000200V UDS, SMD и 4,5VLL, LIN (редкая комбинация)0,56
IRF7455SO-8irf4,530152,57,51,04
SI4442DYSO-8vis2,530222,55/4,5V1,64
IRLU2905TO251, DPackirf2,05542110274V LL0,54
IRFD014HEXDIP/DIP4irf2,0-4,0601,71,32000,52
IRFD024HEXDIP/DIP4irf2,0-4,0602,51,31000,54
IRLD024HEXDIP/DIP4irf1,0-2,0602,51,31004V LL0,47
IRLU3717I-Pakirf2,0201201,5/8944,5V LL, Qg=21nC,1,15
IRFP3703TO-247ACirf4,0302102302,85,08
IRF3710TO-220ABirf410057200230,83
IRLR7843D-Packirf2,3301641403,34,5V LL, Qg: 34nC0,70
IRF1010NTO-220ABirf45585180111,99
IRF1010ZTO-220ABirf455751407,51,99
IRLIZ44NTO-220-Fullpakirf1,0 - 2,0553045254V LL0,80
IRLU024NTO-251AAirf1,0 - 2,0551745804V LL, Qg=15 nC (!)0,40
IRFZ48NTO-220ABirf35564130140,60
IRL2505TO-220ABirf2,55510484V LL3,99
IRF7607Micro8irf1,2206,51,8302,5V LL1,89
IRF3708TO-220ABirf0,6 - 230628782,8V LL0,69
GF2304SOT-23gs1,0302,51,25135Qg=3,7nC0,05
IRLR8743I-Pak, D2PackIRF1,93050683,14,5V LL, Qg=39nC1,15
AOC2414MCSPAlpha&Omega0,5284,50,55191,2V LL, Qg=21,5nC
Ссылка на первоисточник
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 не стоит тестировать просто лежащими на столе и не зафиксированными (или приклееными абы как на коленку). Эти датчики, в отличии от обычных механических выключателей, очень капризные к окружающей среде и требуют особого подхода. При подаче питания, они анализируют ёмкость между входом (пластиной, площадкой) и окружающей её средой. Измеренная ёмкость является референсной (с которой будут сравниваться последующие изменения ёмкости) до отключения питания. Поэтому во время подачи питания не следует ставить вблизи сенсора какие-либо предметы. Если оставить рюмку на сенсоре до включения, то для того, чтобы сенсор среагировал, нужно уже будет поднести к нему что-то большего размера (например руку или большой стакан), так как срабатывание датчика происходит если измеренная ёмкость окружающей среды больше референсной. При фиксации в корпусе референсная ёмкость будет достаточно большой, чтобы не реагировать на каждую пылинку, пролетающую мимо, а только на предметы, находящиеся вблизи, ведь ёмкость зависит не только от площади (размеров) детектируемого предмета, но и от расстояния до него - чем ближе, тем больше. Следовательно, если датчик плохо реагирует на рюмку/стакан (сбрасывается или не реагирует вообще, однако на палец без проблем) то стоит либо уменьшить расстояние от рюмки до пластины сенсора, либо увеличить площадь самой пластины. Так же держите сигнальные и силовые провода подальше от площадок сенсоров либо экранируйте их во избежание помех.
  • Если планируется делать устройство на макс. 4 рюмки, то TTP224 Ваш выбор. К тому же, некоторые наливаторостроители говорят, что этот модуль менее капризен, чем TTP229.
  • Повышающий преобразователь. По результатам теста тут, модуль DD03AJTA предпочтительнее чем народный MT3608
  • При любой непонятной ситуации или странном поведении устройства рекомендуется сначала произвести сброс настроек (очистка EEPROM) в сервисном меню или любым другим способом.
  • Зависает или совсем не работает OLED дисплей? Добавьте подтягивающие резисторы (4.7к) на линии i2c. То есть один между VCC и A4, второй между VCC и A5. Если не работает с двумя резисторами, попробуйте оставить один только на A4 (sda).
  • Ошибка компиляции: #error "Not ATmega328P board!". На данный момент поддерживаются только платы на ATmega328P (Uno, Nano, Mini).
  • Параметры из Config.h не учитываются после прошивки - чтобы эти параметры вступили в силу - сбростьте настройки по умолчанию (коими и являются все из Config.h) в сервисном меню (вход зажатием основной кнопки до окончания стартовой анимации), либо удержанием основной кнопки в течении 5секунд до появления надписи "Сброс настроек" в любом рабочем режиме.
  • Серводвигатель постоянно вращается без остановки - это сервопривод постоянного вращения (без обратной связи по положению). Для данного проекта не подойдёт. Нужен такой, который имеет определённый диапазон установки положения (обычно 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).
  • Светодиоды не реагируют при срабатывании датчиков (все, либо после какого-то определённого светодиода). Если неисправен один светодиод в цепи, то все последующие (подключенные после него) работать не будут.
  • На краю OLED дисплея полоса на всю высоту из хаотично расставленных пикселей? Смените контроллер дисплея с SSD1306 на SH1106 или наоборот.
  • Проблемы с контроллером LGT8F328p (например китайский клон WavGat) ? Инструкция от @Fedor73
Настройка

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

Актуальная прошивка доступна для скачивания в GitHub репозитории
 
Изменено:

Комментарии

VICLER

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


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

scheme2.png
scheme3.png
НазваниеКорпусПроизводительUGS(th)/VUDS / VID / AP / WRDS,on / mΩПримечаниеЦена / €
IRLML6244SOT-23IRF0,5-1,1206,31,3210,13
SI2302DSSOT-23Vishay0,65-4,52061,25702,5V LL, очень дёшево0,01
IRFP4310ZTO-247ACirf2,0-4,01001202804,81,80
IRFP450TO-247irf2,0-4,0500141904001,20
IRF530TO-220irf2,91001694160LIN0,44
IRL3103TO-220ABirf1,0306494124,5V LL, Qg=33nC (!)0,95
IRF730ATO-220ABirf2,0-4,54005,5741000Qg=22nC (!)0,54
IRFP064TO-247ACirf2,060703009Qg=190 nC1,65
IRF3205TO-220ABirf2,05511020080,69
IRL3803TO-220ABirf1,03014020064,5V LL, Qg=140nC0,96
IRF540TO-220ABirf31002815077LIN0,52
IRF7401SO-8irf2,7208,72,0222,7V LL0,45
IRF7403SO-8irf4,85308,52,5224,5V LL0,42
IRF7413SO-8irf3,03013,02,5114,5V LL0,41
BUZ11TO-220ST4,05033,090,030LIN0,50
BSS83SOT143NXP2,0100,050,2345000не путать с BSS83P0,10
BS170TO-92gs2,0600,30,835000LIN0,13
BSN20SOT-23gs1,8500,180,3560004,5V LL, LIN0,092
BSS138SOT-23div0,8-1,6500,220,3620005V LL, LIN0,06
BSS123SOT-23div0,8-1,61000,170,3610000 @ 4,5V,4,5V LL, LIN0,06
IRFP2907TO-247ACirf4,0752094704,52,70
2N7000TO-92ON3,0600,20,3550004,5V LL, LIN0,13
BS107TO-92ON, Phi3,02000,250,356400/140002,6V LL; LIN0,18
BS108TO-92ON, Phi2,02000,250,3580002V LL; LIN0,14
BUK100TO-220Phi3,05013,540125Защита от перегрузки и ESD1,40
IRL3705NTO-220ABirf2,05589170104V LL, Qg=98nC1,20
BUZ72ATO-220Infineon4,01009,0402505V LL, LIN0,45
IRLZ34NTO-220irf2,5553068354V LL, LIN0,39
IRLZ44NTO-220irf25547110224V LL, LIN0,49
IRLML2502SOT-23irf1,2204,21452,5V LL0,17
IRF1404TO-220ABirf4,0402023334-1,10
IRL1004TO-220irf2,7401302006,5-1,25
IRL530TO220, D2Packirf210015,0881600,57
IRF830TO220ABirf2,0-4,55005,0741400LIN0,57
IRF840TO220ABirf2,0-4,05008,01258500,57
FDC645NSuperSOT-6Fairchild1,5305,50,8/1,630-0,7
BSP297SOT-223Siemens/Infineon0,8-2,42000,651,86000200V UDS, SMD и 4,5VLL, LIN (редкая комбинация)0,56
IRF7455SO-8irf4,530152,57,51,04
SI4442DYSO-8vis2,530222,55/4,5V1,64
IRLU2905TO251, DPackirf2,05542110274V LL0,54
IRFD014HEXDIP/DIP4irf2,0-4,0601,71,32000,52
IRFD024HEXDIP/DIP4irf2,0-4,0602,51,31000,54
IRLD024HEXDIP/DIP4irf1,0-2,0602,51,31004V LL0,47
IRLU3717I-Pakirf2,0201201,5/8944,5V LL, Qg=21nC,1,15
IRFP3703TO-247ACirf4,0302102302,85,08
IRF3710TO-220ABirf410057200230,83
IRLR7843D-Packirf2,3301641403,34,5V LL, Qg: 34nC0,70
IRF1010NTO-220ABirf45585180111,99
IRF1010ZTO-220ABirf455751407,51,99
IRLIZ44NTO-220-Fullpakirf1,0 - 2,0553045254V LL0,80
IRLU024NTO-251AAirf1,0 - 2,0551745804V LL, Qg=15 nC (!)0,40
IRFZ48NTO-220ABirf35564130140,60
IRL2505TO-220ABirf2,55510484V LL3,99
IRF7607Micro8irf1,2206,51,8302,5V LL1,89
IRF3708TO-220ABirf0,6 - 230628782,8V LL0,69
GF2304SOT-23gs1,0302,51,25135Qg=3,7nC0,05
IRLR8743I-Pak, D2PackIRF1,93050683,14,5V LL, Qg=39nC1,15
AOC2414MCSPAlpha&Omega0,5284,50,55191,2V LL, Qg=21,5nC
Ссылка на первоисточник
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 не стоит тестировать просто лежащими на столе и не зафиксированными (или приклееными абы как на коленку). Эти датчики, в отличии от обычных механических выключателей, очень капризные к окружающей среде и требуют особого подхода. При подаче питания, они анализируют ёмкость между входом (пластиной, площадкой) и окружающей её средой. Измеренная ёмкость является референсной (с которой будут сравниваться последующие изменения ёмкости) до отключения питания. Поэтому во время подачи питания не следует ставить вблизи сенсора какие-либо предметы. Если оставить рюмку на сенсоре до включения, то для того, чтобы сенсор среагировал, нужно уже будет поднести к нему что-то большего размера (например руку или большой стакан), так как срабатывание датчика происходит если измеренная ёмкость окружающей среды больше референсной. При фиксации в корпусе референсная ёмкость будет достаточно большой, чтобы не реагировать на каждую пылинку, пролетающую мимо, а только на предметы, находящиеся вблизи, ведь ёмкость зависит не только от площади (размеров) детектируемого предмета, но и от расстояния до него - чем ближе, тем больше. Следовательно, если датчик плохо реагирует на рюмку/стакан (сбрасывается или не реагирует вообще, однако на палец без проблем) то стоит либо уменьшить расстояние от рюмки до пластины сенсора, либо увеличить площадь самой пластины. Так же держите сигнальные и силовые провода подальше от площадок сенсоров либо экранируйте их во избежание помех.
  • Если планируется делать устройство на макс. 4 рюмки, то TTP224 Ваш выбор. К тому же, некоторые наливаторостроители говорят, что этот модуль менее капризен, чем TTP229.
  • Повышающий преобразователь. По результатам теста тут, модуль DD03AJTA предпочтительнее чем народный MT3608
  • При любой непонятной ситуации или странном поведении устройства рекомендуется сначала произвести сброс настроек (очистка EEPROM) в сервисном меню или любым другим способом.
  • Зависает или совсем не работает OLED дисплей? Добавьте подтягивающие резисторы (4.7к) на линии i2c. То есть один между VCC и A4, второй между VCC и A5. Если не работает с двумя резисторами, попробуйте оставить один только на A4 (sda).
  • Ошибка компиляции: #error "Not ATmega328P board!". На данный момент поддерживаются только платы на ATmega328P (Uno, Nano, Mini).
  • Параметры из Config.h не учитываются после прошивки - чтобы эти параметры вступили в силу - сбростьте настройки по умолчанию (коими и являются все из Config.h) в сервисном меню (вход зажатием основной кнопки до окончания стартовой анимации), либо удержанием основной кнопки в течении 5секунд до появления надписи "Сброс настроек" в любом рабочем режиме.
  • Серводвигатель постоянно вращается без остановки - это сервопривод постоянного вращения (без обратной связи по положению). Для данного проекта не подойдёт. Нужен такой, который имеет определённый диапазон установки положения (обычно 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).
  • Светодиоды не реагируют при срабатывании датчиков (все, либо после какого-то определённого светодиода). Если неисправен один светодиод в цепи, то все последующие (подключенные после него) работать не будут.
  • На краю OLED дисплея полоса на всю высоту из хаотично расставленных пикселей? Смените контроллер дисплея с SSD1306 на SH1106 или наоборот.
  • Проблемы с контроллером LGT8F328p (например китайский клон WavGat) ? Инструкция от @Fedor73
Настройка

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

Актуальная прошивка доступна для скачивания в GitHub репозитории
 
Изменено:

Pavel_v1

✩✩✩✩✩✩✩
2 Ноя 2022
23
3
Диод развязывает от помех по питанию. Провод соединения с платой натяни или зафиксируй.
 

Maks Pl

✩✩✩✩✩✩✩
30 Июн 2022
20
3
Всем привет. Пока собрал наливатор по схеме Алекса, на серве. Буду переделывать на шаговик, так как серва конечно та еще жужжалка. )))
Вопрос по светодиодам. У меня подсветка собрана на smd светодиодах WS2812B. Не пойму по какой причине странно ведет себя светодиод с первым адресом. В сервисном режиме при замыкании концевика он часто моргает зеленым. В рабочем режиме при постановке рюмки кратковременно моргает красным и гаснет. Все следующие за ним светодиоды работают штатно.
 

Maks Pl

✩✩✩✩✩✩✩
30 Июн 2022
20
3
Помеха по питанию или сам диод.
Ну так как светодиоды подключены гирляндой, то сомневаюсь что проблема с питанием, так как следующие работают четко. Ни как не подпаяюсь на другой адрес, залил их теромоклеем, чтобы посмотреть. В схеме этой ветки в сигнальном проводе гирлянды впаян резистор на 330 Ом, в схеме Алекса (и у меня соответственно) этого резистора нет. Он критичен? Просто если диоды на платках там вроде есть резисторы, у меня голые SMD диоды, может в резисторе "собака порылась"???
 

Maks Pl

✩✩✩✩✩✩✩
30 Июн 2022
20
3
Собираюсь переделать розлив с сервы на шаговый двигатель. Вопрос. Серва знает свое текущее положение, шаговый нет. Что будет если случайно задеть краник и он сдвинется? Только перенастройка в сервисном режиме? Может сделать первоначальное выставление "0" при включении? Крутанулся в сторону нуля до сработки концевика или другого чего висящего на каком то из входов и запомнил это положение как "нулевое" от которого уже начинает отсчитывать угол.
 

Maks Pl

✩✩✩✩✩✩✩
30 Июн 2022
20
3
@Maks Pl, ничто не мешает поставить концевики над всеми положениями.
Это лишнее. Достаточно в 0 позиции. Заодно проверяться в момент "парковки" крана что ничего не сбилось. В процессе "эксплуатации" наливатора, особенно при приближении конца "веселья" у "эксплуататоров" будет нарушаться координация ))) и легко могут задеть краник при постановке или забирании рюмок. А концевик в "0" позиции перед наливом проверит себя и начнет разливать.
 
  • Лойс +1
Реакции: Zero-v

Dmitryidobryi

✩✩✩✩✩✩✩
8 Май 2023
3
0
Прошу помощи у гуру, все спаял по схеме, когда вставляю аккумулятор на зарядное модуле горит синяя лампочка, при этом наливатор без шнура зарядки не включается, может то быть из за неисправного модуля зарядки ?
 

Maks Pl

✩✩✩✩✩✩✩
30 Июн 2022
20
3
Всем привет. Пока собрал наливатор по схеме Алекса, на серве. Буду переделывать на шаговик, так как серва конечно та еще жужжалка. )))
Вопрос по светодиодам. У меня подсветка собрана на smd светодиодах WS2812B. Не пойму по какой причине странно ведет себя светодиод с первым адресом. В сервисном режиме при замыкании концевика он часто моргает зеленым. В рабочем режиме при постановке рюмки кратковременно моргает красным и гаснет. Все следующие за ним светодиоды работают штатно.
Помогитеее )))
Залил поправленный скетч под шаговик.
1. Впаял перед 1 светодиодом резистор 330 Ом. Ситуация следующая. В первоначальной анимации светодиод переливается как все. Потом гаснет и не моргает.
2. В сервисном режиме почему то 3 и 4 светодиоды горят зеленым ярко, остальные кроме 1 неярко синим. При постановке рюмки зеленые меняют цвет на синийЮ синие на зеленый.
3. Шаговик как в шапке подключен по схеме в шапке в контроллеру как в шапке. По итогу шаговик поворачивается только в одну сторону при вращении энкодера. Уточню про шаговик. как на рисунке обязательно ПЕРЕРЕЗАТЬ дорожку красного провода или достаточно просто красный провод к контроллеру не припаивать как сделал я???

Скетч скомпилировался без ошибок.
//╞════════════════════════════════════════════════════════════════════════════════════╣ Настройки ⚒ ╠════════════════════════════════════════════════════════════════════════════════════╡

/■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Основные настройки ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■/

/* ======================== выбор дисплея ========================
0 → OLED 128x64 на контроллере SSD1306 или SSD1309 по (I2C)
1 → OLED 128x64 на контроллере SH1106 (I2C)
2 → OLED 128x64 на контроллере SSD1306 или SSD1309 (SPI)
3 → 4-х значный 7-ми сегментный дисплей на контроллере TM1637
4 → стрелочный индикатор
*/
#define DISPLAY_TYPE 3

#define NUM_SHOTS 6 // количество рюмок (оно же кол-во светодиодов и кнопок!)
#define SWITCH_LEVEL 0 // кнопки: 1 → высокий сигнал при замыкании, 0 → низкий
#define ENCODER_TYPE 1 // тип энкодера. 0 или 1. Отличаются количеством делений на оборот
#define ENCODER_DIR 0 // направление вращения энкодера. 0 или 1
//#define STATUS_LED 30 // яркость статус-светодиода. 255 → максимум. Раскомментировать, если подключен
//#define BATTERY_PIN A7 // + аккумулятора (максимум 5 вольт без делителя). Раскомментировать, если подключен
//#define CHARGER_PIN A6 // IN+ с TP4056. Используется для детектирования зарядки

#define MOTOR_TYPE 1 // тип привода. Серво - 0, Шаговик - 1

// ======================== Настройка шагового мотора ========================

#define STEPS_PER_REVOLUTION 2038 // количество шагов на оборот двигателя
#define MICROSTEPS 2 // значение микрошага, выставленного на драйвере двигателя
#define STEPPER_HOMING_SPEED 20 // скорость вращения двигателя при движении к концевику (если он есть) в об/мин
//#define SMOOTH_ALGORITHM // ещё больше плавности движения!

// ========================= Настройка Серводвигателя =========================

#define SERVO_MIN_US 544 // минимальная ширина импульса в мкс
#define SERVO_MAX_US 2400 // максимальная ширина импульса в мкс

/■■■■■■■■■■■■■■■■■■■■■ Параметры, изменяемые в сервис режиме ■■■■■■■■■■■■■■■■■■■■■■/

#define TIME_50ML 1100 // время заполнения 50 мл
#define MAX_VOLUME 50 // ограничение максимального объёма. Максимальное значение 255
#define MOTOR_REVERSE 0 // инвертировать направление вращения двигателя
#define PARKING_POS 0 // угол двигателя для парковочной позиции
#define BATTERY_CAL 1.0 // фактор для калибровки напряжения акб

// позиции серводвигателя над рюмками. От первой к последней
#define SHOT_POSITIONS 5, 40, 70, 100, 130, 165

/■■■■■■■■■■■■■■■■■■■■■■■■■■ Дополнительные настройки ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■/

// Онлайн конвертер цветов https://bit.ly/34WSaig Используем значение H из HSV.

#define PREPUMP_VOLUME 0 // объём жидкости в системе в мл. Добавляется к объёму первой рюмки после включения устройства, когда система ещё пуста.
#define PAUSE_TIME 1000 // пауза после налива в мс.
#define LEDS_COLOR 270 // цвет подсветки светодиодов от 0 до 360
#define TIMEOUT_STBY 10 // таймаут входа в режим ожидания в секундах. В режиме ожидания сохраняется последний объём и приглушается яркость подсветки
#define TIMEOUT_OFF 5 // таймаут входа в енергосберегающий режим в минутах. В этом режиме отключается дисплей и все светодиоды. Если 0 → режим не активен
#define KEEP_POWER 0 // интервал поддержания питания от повербанка в секундах. Через этот интервал происходит скачёк потребления енергии светодиодами. 0 → функция отключена
#define MOTOR_SPEED 100 // скорость привода в градус/сек (макс 255)
#define MOTOR_ACCEL 250 // ускорение двигателя в угол/сек^2
#define AUTO_PARKING 1 // парковка в авто режиме: 1 → вкл, 0 → выкл
#define MOTOR_AUTO_POWER 1 // авто отключение двигателя во время простоя
#define SAVE_MODE 0 // 1 → сохранение последнего активного режима в памяти, 0 → не сохраняется
#define STBY_LIGHT 20 // яркость подсветки в режиме ожидания. 255 → максимум, 0 → выкл
#define RAINBOW_FLOW 1 // 1 → динамическая подсветка налитых рюмок, 0 → статическая
#define BATTERY_LOW 3.0 // минимальное напряжение аккумулятора
#define MANUAL_MODE_STATUS_COLOR 200 // цвет статусного светодиода в ручном режиме
#define AUTO_MODE_STATUS_COLOR 100 // цвет статусного светодиода в авто режиме
#define DISPLAY_SESSION_VOLUME 1 // вывод общего объёма за сеанс на основную страницу. 1 → вкл, 0 → выкл

/■■■■■■■■■■■■■■■■■■■■■■■■■■■ Настройки OLED дисплея ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■/

#define INVERT_DISPLAY 0 // инверсия цветов OLED дисплея
#define OLED_CONTRAST 15 // яркость дисплея. Макс 255
#define MENU_SELECT 0 // 0 → выбор пункта меню инверсией, 1 → стрелкой
#define MENU_LANG 0 // язык меню. 0 → русский, 1 → english
#define NUM_FONT 0 // выбор шрифта для отображения объёма (0 или 1)
#define WIRE_SPEED 888 // частота передачи данных OLED дисплею в kHz (min 100, mid 400, max 900). Понизьте частоту, при проблемах с дисплеем.
#define BOOTSCREEN "Der Наливатор" // текст на OLED дисплее при старте устройства


//╞════════════════════════════════════════════════════════════════════════════════════╣ Соединения ╠════════════════════════════════════════════════════════════════════════════════════╡

#define PUMP_POWER 3 // управляющий сигнал драйвера помпы (обычно обозначен как IN на драйверах моторов, либо GATE/BASE, если используется транзистор)
#define SERVO_POWER 4 // управляющий сигнал драйвера для питания серводвигателя (обычно обозначен как IN на драйверах моторов, либо GATE/BASE, если используется транзистор)
#define SERVO_PIN 5 // сигнальный провод серводвигателя
#define LED_PIN 6 // сигнал DIO/DI первого светодиода (WS2812b)
#define BTN_PIN 7 // сигнал с основной кнопки для разлива и смены режимов
#define ENC_SW 8 // сигнал центральной кнопки на энкодере для прокачки и настройки различных обьёмов. Обозначен как SW или BTN
#define ENC_DT 9 // сигнал DT или А с энкодера
#define ENC_CLK 10 // сигнал CLK или B с энкодера

//#define STEPPER_ENDSTOP 1 // сигнал с концевика для двигателя. В активном состоянии должен замыкать на GND. Закоментировать, если концевик не используется
#define STEPPER_EN 2 // сигнал EN драйвера
#define STEPPER_DIR 4 // сигнал DIR драйвера
#define STEPPER_STEP 5 // сигнал STEP драйвера

/■■■■■■■■■■■■■■■■■■■■■■■■■■■ Версия с дисплеем TM1637 ■■■■■■■■■■■■■■■■■■■■■■■■■■■/
#if(DISPLAY_TYPE == 3)

#define DISP_DIO 11 // сигнал DIO на дисплее TM1637
#define DISP_CLK 12 // сигнал CLK на дисплее TM1637
#define SW_PINS A0, A1, A2, A3, A4, A5 // сигналы с датчиков наличия рюмок на ТМ1637 версии: от первой к последней рюмке

/■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Версия с OLED дисплеем ■■■■■■■■■■■■■■■■■■■■■■■■■■■■/
#elif (DISPLAY_TYPE < 3)

// пины I2C
#define DISP_SDA A4 // сигнал SDA OLED дисплея
#define DISP_SCK A5 // сигнал SCK OLED дисплея
// пины SPI
#define DISP_DC 0 // сигнал DC OLED дисплея
#define DISP_MOSI A4 // сигнал MOSI или SDA OLED дисплея
#define DISP_CLK A5 // сигнал CLK или SCL OLED дисплея

#define SW_PINS A0, A1, A2, A3, 11, 12 // сигналы с датчиков наличия рюмок на OLED версии: от первой к последней рюмке

/■■■■■■■■■■■■■■■■■■■■■■■ Версия со стрелочным индикатором ■■■■■■■■■■■■■■■■■■■■■■■/
#elif (DISPLAY_TYPE == 4)

#define ANALOG_METER_PIN 11 // + с индикатора
#define SW_PINS A0, A1, A2, A3, A4, A5 // сигналы с датчиков наличия рюмок на ANALOG_METER версии: от первой к последней рюмке
#endif
 
Изменено:

Maks Pl

✩✩✩✩✩✩✩
30 Июн 2022
20
3
Всем здраствуйте, проблема со светодидами, использую ws2812, работает только первый , остальные пробовал менять ничего не выходит, так же не горят, использую версию прошивки 1.5
Вот ведь как бывает. У меня как выше писал обратная проблема, на той же прошивке 1.5 наоборот не работает корректно 1 светодиод, следующие за ним работают. Интересно заборол ли автор поста проблему? На прошивке из этой ветки (ничего не перепаивая) ведут себя вообще странно. в Сервисном режиме в анимации переливаются все светодиоды потом 1 гаснет, 3,4 светодиоды горят ярко зеленй цветом, остальнае синим неярко. При замыкании концевиков зеленые меняют свой цвет на синий, а синие на зеленый. Почему так происходит непонял. При этом если сюда же залить прошивку 1.5 то 2-6 светодиоды работают правильно меняя цвета как положено по прошивке.
 

Maks Pl

✩✩✩✩✩✩✩
30 Июн 2022
20
3
@Evgen80, Да не за что... Вот простой выход из ситуации когда двигатель крутит в одну сторону...
Эх. Почти 2 года прошло, а ни кто не удосужился картинку в шапке поправить. До сих пор мы "новички" спотыкаемся на этой схеме, приходится всю ветку с середины перечитывать. )))
 

Maks Pl

✩✩✩✩✩✩✩
30 Июн 2022
20
3
Так, мотор вроде заработал после соединения перемычки с 5В, крутит в обе стороны. Помогайте со светодиодами, не пойму что за чехарда. На прошивке 1.5 работают четко, т.е. при замыкании нужного концевика нужный светодиод меняет цвет. Сейчас в рабочем режиме 1 светодиод так и не светится (но в анимации участвует). Далее 2 светодиод горит фиолетовым, 3 - зеленым, 4 зеленым, 5 синим, 6 фиолетовым.
Нажатие на 1 концевик меняет цвет 3,4 светодиодов на красный, 2 на фиолетовый. При отпускании 2,3 становятся ярко синими, 4 возвращается в зеленый.
Нажатие на 2 концевик меняет цвет 2 светодиода на красный, 3,4 светодиодов на фиолетовый. При отпускании 2 светодиод становится фиолетовым, 3 светодиод зеленым. Через 7 секунд 2,3 светодиоды становятся ярко синими.
Нажатие на 3 концевик если 3 светодиод был зеленым не меняет, если был синим меняется на зеленый, 4 светодиод становится красным. При отпускании 3 концевика 4 светодиод становится зеленым, а 3 через 7 секунд ярко синим.
Нажатие на 4 концевик 4 светодиод становится фиолетовым, 3 желтовато-зеленым, 2 фиолетовым. При отпускании 4 - зеленый, 3 - зеленый, 2 - фиолетовый. Через 7секунд 2,3 - ярко синие
Нажатие на 5 концевик 5 светодиод без изменений, 2 - фиолетовый, 3 - зеленый. При отпускании 5 - без изменений, 2 - фиолетовый, 3 - зеленый. Через 7сек 2,3 - ярко синие
Нажатие на 6 концевик 6 светодиод не реагирует, 2 - фиолетовый, 3 - зеленый, 4 ярко синий. При отпускании 6 концевика 4 - зеленый, 2 - фиолетовый, 3 - зеленый, 4 - зеленый. Через 7сек 2,3 - ярко синие.

Откуда такая чехарда лезет?
 

Maks Pl

✩✩✩✩✩✩✩
30 Июн 2022
20
3
Сравнил библиотеки microLED у Гайвера и Виклера. У Гайвера все лишнее закоменчено что к матрицам относится, оставлено только к ленте относится. И есть отличие в строке вывода
У Гайвера
void microLED::show() {
*ws2812_port_reg |= pinMask; // Enable DDR
//WS2812B_sendData((PTR_TYPE)LEDbuffer, (int16_t)COLOR_DEBTH * _numLEDs, pinMask, (uint8_t*) ws2812_port, correctBright());
WS2812B_sendData((PTR_TYPE)LEDbuffer, (int16_t)COLOR_DEBTH * _numLEDs, pinMask, (uint8_t *)ws2812_port, _bright);
}
У Виклера
void microLED::show() {
*ws2812_port_reg |= pinMask; // Enable DDR
WS2812B_sendData((PTR_TYPE)LEDbuffer, (int16_t)COLOR_DEBTH * _numLEDs, pinMask, (uint8_t*) ws2812_port, (uint8_t*) ws2812_port_reg, correctBright());
}

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

Еще в файле ws2812_send тоже отличия чисто в передаваемом параметре в войд
У Гайвера
void WS2812B_sendData (PTR_TYPE data, int16_t datlen, uint8_t maskhi, uint8_t *port, uint8_t *portreg, uint8_t bright) {

У Виклера
void WS2812B_sendData (PTR_TYPE data, int16_t datlen, uint8_t maskhi, uint8_t *port, uint8_t bright) {

Соответственно вместо portreg в функцию попадает яркость и похоже от этого пляска, т.к. дальше внутри функции все одинаково.
 
Изменено: