Наливатор с ОЛЕД дисплеем , MP3-плееером, LED подсветкой , шаговиком или сервой.

Наливатор с ОЛЕД дисплеем , MP3-плееером, LED подсветкой , шаговиком или сервой.
ОБЩЕЕ ОПИСАНИЕ.
Наливатор на с дисплеем OLED , MP3 плеером, 3-мя режимами налива , светодиодной подсветкой , рассчитаный на максимум 6 рюмок.

Подробное описание подключения.

Контроллер
Вся конструкция тестировалась на ардуино нано.

nano.jpg

Распределение пинов:

0

Аппаратный сериал, при работе с шаговым двигателем на него подключается кнопка нулевого положения сервы.

1

Аппаратный сериал.

2

A энкодера

3

B энкодера

4

Кнопка энкодера

5

Канал управления адресной светодиодной лентой.

9

Канал управление сервоприводом

10

к RX плеера (через резистор 1к)

11

к TX плеера (через резистор 1к)

12

к BUSY плеера

13

Канал управление помпой

A0-A3

A4,А5
SDA, SCL

А6-А7
свободными остаются пины: 6, 7, 8. При смене сервопривода на шаговый двигатель они будут задействованы, а так же будет задействован пин 0 на концевик нулевого положения. 1-ый пин будет давать возможность выводить в монитор порта отладочные сообщения. Данный вид подключения пока реализован частично, рассчитан на микросхему ULN2003APC, которая часто идет в комплекте с шаговым двигателем 28BYJ-48.









Дисплей
Монохромный дисплей с разрешение 128х64
Подключение I2C, (А4 и А5 )
Скетч гарантированно поддержи
вает 2 дисплея: SH1106 1.3 дюйма и SSD1306 . По идее должен поддерживать графический ЖК дисплей 12864. Библиотека поддерживает и другие дисплеи.
1106.jpg1306.png12864.png
Библиотека U8glib.
В проект добавлены руссифицированные шрифты.
Настройка дисплея осуществляется выбором соотв. строки в файле silver_naliv_20.ino, строки 12-16
C++:
// выбор нужного драйвера дисплея
//U8GLIB_SH1106_128X64 Display(U8G_I2C_OPT_NONE);  // I2C / TWI
U8GLIB_SH1106_128X64 Display(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);  // Dev 0, Fast I2C / TWI
//U8GLIB_SSD1306_128X64 Display(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); // I2C / TWI
//U8GLIB_SSD1306_128X64 Display(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // Fast I2C / TWI
Распиновка дисплеев в моем случае не совпадает! Будьте внимательны при подключении.

Энкодер.
Для работы используется мини-библиотека encMinim.h, работает без аппаратного прерывания, но вполне надежно. Для управления используется клик кнопкой, повороты вправо и влево, повороты с нажатой кнопкой, а так же удержание кнопки, как отмена.
Опробовано 2 типа энкодеров:
enc2.pngenc1.png
Отличие подключения 1-го от 2-го заключается в подключении +5 в для второго, и некотором отличии в коде.
Изменение в необходимо сделать в файле encMinim.h
Для первого типа:
C++:
 /* pinMode2 (_clk, INPUT);
  pinMode2 (_dt, INPUT);
  pinMode2 (_sw, INPUT);
*/
  pinMode2 (_clk, INPUT_PULLUP);
  pinMode2 (_dt, INPUT_PULLUP);
  pinMode2 (_sw, INPUT_PULLUP);
Для второго типа:
C++:
  pinMode2 (_clk, INPUT);
  pinMode2 (_dt, INPUT);
  pinMode2 (_sw, INPUT);
  /*
  pinMode2 (_clk, INPUT_PULLUP);
  pinMode2 (_dt, INPUT_PULLUP);
  pinMode2 (_sw, INPUT_PULLUP);
  */

MP3 - плеер
В качестве плеера используется DFPlayer , он же MP3-TF-16P
DFPlayer.png
У плеера есть встроенный усилитель, но звук от него довольно тихий. Так же есть возможность вывести часть управления на внешние кнопки миную контроллер, но я не увидел в этом необходимости.
Подключение питания к 5 вольтам.
Подключение к ардуино по 3-м (!) проводам. RX , TX и BUSY. Два первых провода передают и получают данные к/от ардуино по программному serual- порту, такие как : запуск и остановка треков, изменение громкости, получение кол-ва треков на мини-сд-карте. Эти провода надо подключать через резистор номиналом 1-2 килоОма. Третий провод предназначен для получения информации о состоянии плеера: идет воспроизведение или нет. В принципе такую информацию можно получить через команду по Serial, но это может подвешивать работу всего устройства, в то время как чтение порта практически ни на что не влияет.
Структура карты:
На карте должно быть 2 подкаталога "01" и "02". Каталог "01" содержит музыкальные треки для фоновой мелодии, а "02" содержит тосты для воспроизведения налива. В принципе названия могут быть любыми, главное что бы каталог с музыкальными фрагментами для фоновой мелодии были в начале по алфавиту. При изменении кол-ва музыкальных треков на карте при включении наливатора будет запущена конфигурационная процедура настройки, в которой следует указать кол-во мелодий для фона, все остальные скетч будет считать тостами.

ВАЖНО! Папка с музыкой должна копироваться или создаваться на карте 1-ой! Именно треки в 1-ой созданной папке будут считаться музыкой.
В отдельном посте опубликую ссылки на свои мелодии и тосты, с текстовыми описаниями. Попробуем сделать обмен тостами.
Библиотека для плеера

Подсветка мест для налива
Для подсветки мест используется адресная светодиодная лента и библиотека FastLED
LED.png
Можно использовать как 1 отдельный светодиод на место, так и вот такие кольца, а так же огрызки ленты по несколько светодиодов.
Ограничение одно - на всех местах для налива должно быть одинаковое число светодиодов.
Файл silver_naliv_20.ino
Общее число светодиодов рассчитывается как число светодиодов на 1 место помноженное на число мест.
В данном примере используется по 1-му светодиоду на место.
C++:
#define NUM_LEDS  LEDs_per_Drink*max_DrinkCount // Кол-во диодов (количество светодиодов на рюмку умножить на число рюмок, математика, 3-ий класс
Строки 42-45
C++:
#define max_DrinkCount 5               // Максимальное кол-во рюмок, при подключении на аналоговые пины максимум 6 рюмок при нано
#define LEDs_per_Drink 1               // Число светидиодов на рюмку, считается что под рюмкой такое число лампочек
Номер 1-го светодиода для каждого мест настраивается отдельно в файле drink_place.ino
C++:
// номер 1-го светодиода для каждой рюмки.  Могут быть не по порядку
  drinks_array[0].N_LED = 32768; // это место парковки и оно не подсвечивается !
  drinks_array[1].N_LED = 0;
  drinks_array[2].N_LED = 1;
  drinks_array[3].N_LED = 2;
  drinks_array[4].N_LED = 3;
  drinks_array[5].N_LED = 4;
В данном примере используется по 12 светодиодов на место.
C++:
#define max_DrinkCount 5               // Максимальное кол-во рюмок, при подключении на аналоговые пины максимум 6 рюмок при нано
#define LEDs_per_Drink 12               // Число светидиодов на рюмку, считается что под рюмкой такое число лампочек
C++:
// номер 1-го светодиода для каждой рюмки.  Могут быть не по порядку
  drinks_array[0].N_LED = 32768;
  drinks_array[1].N_LED = 0;
  drinks_array[2].N_LED = 12;
  drinks_array[3].N_LED = 24;
  drinks_array[4].N_LED = 36;
  drinks_array[5].N_LED = 48;

Подключение помпы и сервопривода
Подключение помпы и сервопривода аналогично проекту Алекса , управлять помпой можно не только драйвером, но и использую реле , транзистор или готовый мосфет-ключ.

Дополнительные библиотеки
DIO2 - для более быстрого доступа к цифровым пинам.
EEPROMex - расширенное управление чтением и записью в EEPROM

Подключение шагового двигателя.
Для подключения шагового двигателя я предлагаю такой вариант:
входы 6 7 8 9 подключаются к in1 in2 in3 in4 платы с микросхемой ULN2003A.
на моторе.png
stepper.jpg
Собирается все просто. К микро кнопке (такая же как стоит на ресете ардуино нано) подпаиваются 2 провода, кнопка вставляется в 1-ую деталь, вторая подпирает ее и изолирует от мотора. Носик надевается на вал двигателя. Его надо надежно закрепить так, что бы кнопка зажималась при вращении и он не мешал движению. Сверху носика еще будет достаточно места, что бы на валу закрепить что то.
на мотор.png крышка.png носик.png
Ссылка на STL
Рыская на просторах Али нашел такое описание данного двигателя. шаг получается 5,625/64, т.е. 4096 шагов на оборот. В скетче изначально использовалось почему то 4076 шагов на оборот (не мое, брал из скетча). Число надо изменить на верное! Думаю сделать это каждый может самостоятельно.
step.png

Варианты корпусов:

Описание сборки мной на макетке, спустя некоторое время
 
Изменено:

Комментарии

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

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
А как меняются фоновые мелодии ?
Не уверен, что от длины будет что то зависеть.
Вот подумал, что если будет всего 1 тост и всего 1 мелодия могут быть баги, не помню проверял ли на общее число когда брал сл. номер трека.

Вообще идей нет, хотя может я что то не так понял
 

Andy117

✩✩✩✩✩✩✩
20 Мар 2023
7
1
Еще не собирал, не заливал. Но мельком взглянул на код.
Нашел 2 косяка (точнее опечатки), могущих повлиять на работу.
В файле game_naliv.ino в 2-х местах вместо знака присвоения '=' стоит '=='.
строка 43 и 195
C++:
drinks_array[i].State == pl_ready;
Еще в функциях byte IncreaseDrink(byte old_d), byte DecreaseDrink(byte old_d) в menu_proc.ino используется return без значеня. Если это значения не особо нужно, то это не повлияет на логик программы, а если нужно, то могут быть непредсказемые последствия.
 
Изменено:

Andy117

✩✩✩✩✩✩✩
20 Мар 2023
7
1
вправо и влево только на увеличение...
Аналогично. И энкодеры менял (правда на аналогичные) и разные варианты библиотеки encMinim.h
Причем в других прогах энкодер работает. И даже отдельный тест на этой библиотеке проходит. причем и с DIO2 (на которую грешил) и без.
Разным модификациям и отладкам мешает то, что памяти впритык.
Похоже, что где то с памятью косяк. Кто то срет.
_lastState, который в конструкторе инициируется _lastState = digitalRead(_clk); а вдальнейшем изменяется только переменной _state, по идее не может иметь других значений, кроме 0 или 1.
Но в первом обращении к функции encMinim::tick() выдает значение 8 !!!
И даже при принудительном присвоении значения.
C++:
void encMinim::tick() {
  _encState = 0;
  _state = digitalRead2(_clk);
  _swState = digitalRead2(_sw);
 
  _lastState = 1;
  if (_state != _lastState) {
    Serial.print ("_state = "); Serial.println (_state);
    Serial.print ("_lastState = "); Serial.println (_lastState);
Все равно первый раз пишет "8"
Но если я меняю порядок объявления переменных в классе, к примеру вместо
boolean _state, _lastState, _turnFlag, _swState, _swFlag, _turnState, _holdFlag;
написать
boolean _state, _turnFlag, _swState, _swFlag, _turnState, _holdFlag, _lastState;
что не должно никак влиять на результат
может выдать 20 или другое значение.
Такое обычно бывает, когда кто то неверно работает с памятью. Скажем в массив [5] пишет 6, 7-е значение. Или присваивает неинициализированным классу, переменной и т.д.

И кого то были проблемы и победили ли?
 
  • Лойс +1
Реакции: Ve2s

rastaman29

★✩✩✩✩✩✩
15 Ноя 2019
47
16
У меня mp3 на чипе YX5200-24SS. Не понятно что он там определяет. При сбросе eeprom пишет 4 и 65535. При изменении файлов(стирании какого-либо файла), нового определения не производит. При установке звёздочки на музыке, включается музыка и все зависает, кроме музыки. Если поставить галочку на тосте, то после налива играет все равно музыка, какая первая записана и потом все зависает. Флешку форматировал, записывал первую папку 01 туда музыку, вторую папку 02 туда тосты. Весь форум перечитал. Кто то там писал, что надо что то поменять, а что не написал. Есть кто справился с данным мп3?
 
Изменено:

rastaman29

★✩✩✩✩✩✩
15 Ноя 2019
47
16
@Старик Похабыч, подскажи пожалуйста, как сделать так, что бы при повороте сервы на стопки, не отключался захват сервы? А то получается при повороте на стопку, кран немного выворачивает обратно, трубка жесткая. Захват убирать при парковке допустим.
 

rastaman29

★✩✩✩✩✩✩
15 Ноя 2019
47
16
Найти в тексте кода обращения к сере с detach и закомментировать их.
Когда detach комментируешь, сервопривод ведет себя как припадочный, дергается постоянно на месте.

Если удалить с SD карты фоновую музыку (папку 01) и не ставить галочку музыка, то тосты работают исправно. С фоновой музыкой всегда зависает.
код.png
 

rastaman29

★✩✩✩✩✩✩
15 Ноя 2019
47
16
@Старик Похабыч, подскажи как убрать режим "игра", он у меня тоже не работает, после первого налива вываливается в основное меню.
 

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

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Не подскажу, надо лезть в код и смотреть, скорее всего в нескольких местах надо лезть, но лезть уже не интересно.
Но думаю что надо 1. Убрать вывод на дисплее. 2) Поменять обработку энкодера.
Когда detach комментируешь, сервопривод ведет себя как припадочный, дергается постоянно на месте.
Вот это странно, что дергается. Но может тогда сделать более мягкое крепление шланга к крану ?
 

rastaman29

★✩✩✩✩✩✩
15 Ноя 2019
47
16
Есть проблема с наливом. Так как в прошивке нет настройки пользователем (калибровки) налива, то приходится вручную постоянно править время налива. Это не в укор "Старика" уж извини)))). Тут трубка такого диаметра, тут такого, и начинается прошивка постоянная, так бы конечно в меню настроил и все. Десять раз прошить, что бы попасть в литраж)))
 

rastaman29

★✩✩✩✩✩✩
15 Ноя 2019
47
16
@Старик Похабыч, я так и не смог справиться с фоновыми мелодиями. Программа видит mp3 ok, но все зависает. Проблема с дерганием сервы тоже хз, конечно серва MG90S не самая лучшая(но она с металлическими шестернями), но как я не крутил настройки, нет нет херак дёрнется в припадке.
 
Изменено:

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

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Увеличить можно, примеры шрифтов есть в библиотеке, но надо помнить, что шрифт большего размера может требовать больше памяти, а ее там и так маловато

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

rastaman29

★✩✩✩✩✩✩
15 Ноя 2019
47
16
@Старик Похабыч, да уже не занимайся, я так допилю по мелочи, я убрав режим игры, неплохо сократил памяти. Просто помоги допилить, по возможности советами))

Я много выбирал прошивок. Твоя подошла мне, под мой "наливатор". Но встретил много проблем. Перечитал много форумов. На данный момент, поправив немного твою, работает более-менее. ХЗ почему я встретил столько проблем)). Вот осталось увеличить шрифт в 2 раза на надписях. А так, всё норм. У меня просто дисплей 0,96. Там очень мелко. Кому я буду дарить, зрение не очень, я правда сам ступил, что такой маленький дисплей заказал. Но уже ничего не выкинешь с проекта.1706271389829.JPEG
 

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

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Всех подробностей про шрифт уже не помню, было много проб для разных библиотек. Про шрифты можно тут посмотреть:
Библиотеки обновляются, но внутри там точно есть файл с описанием и размером шрифтов , выбрать подходящий. Но выбирать надо с поддержкой кириллицы, такие шрифты содержат в названии RUS
 

rastaman29

★✩✩✩✩✩✩
15 Ноя 2019
47
16
Косяк сейчас обнаружился. Если аккумулятор садится до момента, когда степ ап не может поднять напряжение, сбрасываются настройки. Приходится по новой калибровать стаканы. Сбрасывается eeprom получается. Это вообще не хорошо.
 

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

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
на мой взгляд такие вещи от акб вообще не хорошо делать, но многие делают.
Но странно с чего бы они сбрасывались.
 

rastaman29

★✩✩✩✩✩✩
15 Ноя 2019
47
16
Если выключить/включить все нормально. Если вот так, как описал выше, сбрасывается. Где то утечка памяти. Аккумулятор удобно, когда на стол поставил, никаких проводов и т.д.
 

Chopper

✩✩✩✩✩✩✩
11 Фев 2024
1
1
Добрый день всем на форуме. Как новичок Ардуино с базовым опытом собрал наливатор без проблем от АЛЕКСГАЙВЕРА, спасибо за пошаговую инструкцию, всё чётко описанно. Хочу вас попросить помощи подробный инструктаж с MP3-плеером , желаю добавить изюминку. Если точнее то пошаговую инструкцию как подлючить и прошивку.Заранее благодарю
 
  • Лойс +1
Реакции: ANDREI REABOI

viktor1703

★★★✩✩✩✩
9 Дек 2021
611
145
К сожалению информация в разброс
Первые 4 поста - это описание что и как подключать, настраивать. Остальные посты - это "разбор полетов", уточнения исправления. Главное не лениться и читать. Если вы уже собирали наливатор, то имеете представление принципах устройства и работы. Остальное - детали, которые описаны в первых сообщениях.
 
  • Лойс +1
Реакции: Данил001

Данил001

✩✩✩✩✩✩✩
9 Янв 2024
11
0
добрый день , покажите где в скетче изменить размер шрифта и выровнять по центру надписи (ато все смещено)если есть запись в обсуждениях покажите пожалуйста
 

Вложения

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

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Размер нигде. Используются шрифты определенной высоты, это вам не трутайп.
Про смещение не понял, но возможно это косяк библиотеки. А может и нет. Надо смотреть код. Вообще проект сильно старый уже. Надо шагать в будуЮщее и использовать более современные платы типа esp, там и с памятью все будет хорошо , и со шрифтами полегче.