Наливатор с ОЛЕД дисплеем , 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,266
1,303
Москва
А вот вопрос. Если проверить ручками, то тосты / музыку играет ? Вполне может быть, что для начала воспроизведения надо больше времени, что бы что то подгрузить, разжать и начать играть. А если небольшой таймаут проходит и воспроизведения нет, то уходит код идет на воспроизведение музыки. У меня вот сейчас такая мысль возникла.
Для теста можно найти файл tost.ino и в самом конце функции SayTost() увеличить задержку delay(100); (строка 23)
 

predator_7

✩✩✩✩✩✩✩
16 Мар 2022
3
1
@Старик Похабыч,
Ну вот я с задержками игрался, попробую еще несколько вариантов. Потому как мысль только в этом направлении была (delay).
Вечером отпишусь. А вам- огромное спасибо за сам проект и помощь людям.
 

AnGar

★✩✩✩✩✩✩
9 Ноя 2021
178
27
@predator_7, Нет не победил. Пробовал три разных плейера на разных чипах. Сейччас версию VICLERa делаю
 

predator_7

✩✩✩✩✩✩✩
16 Мар 2022
3
1
Почему то не выходит. Уже перепробовал разные комбинации с ..delay..
Вручную дергаю ногами на минус, все проигрывает.
Есть еще мысли? Может кто сталкивался с аналогичным глюком?
 

Marat T

✩✩✩✩✩✩✩
21 Апр 2022
1
0
У кого проблемы с мп3 плеерами музыка играет тосты не говорит или прерываются тосты или вовсе не поет но когда замыкаешь контакты поет! Говорю сразу проблема не в плеерах! И в зависимости от проблемы решения разные! Для тех у кого не поет вообще и в меню не ставятся звездочки попробуйте питание ардуины сделать через отдельную кнопку и когда вы подадите питание на все то через 3 секунды подайте питание на ардуино если помогло дайте знать я вам подскажу где в коде что поменять! У кого тосты прерываются этого делать не нужно вам нужно только поменять код я к сожалению сейчас не у компьютера буду только на выходных тогда подскажу что править у кого проблемы можете писать на почту так подскажу быстрее [email protected]
 

donatos696

★✩✩✩✩✩✩
17 Ноя 2019
44
10
Доброго времени суток всем! Не пинайте сильно полностью нуба( Ткните носом! - где можно посмотреть/скачать схему сборки??? Всю тему перерыл - не нашел((( В первых сообщениях есть только текстовая табличка, графического исполнения нет - мне, как визуалу, не совсем все понятно. Заранее спасибо за помощь)
 

231078

✩✩✩✩✩✩✩
20 Апр 2021
10
3
Кто подскажет у меня такая проблема MP3 включается поёт песню, ставлю рюмки наливает, говорит тост но только он его повторяет раз пять и потом включается музыка и песня потом повторяется раз пять шесть и потом переключается на следующую
 

donatos696

★✩✩✩✩✩✩
17 Ноя 2019
44
10
Доброго времени суток всем! Подскажите, пожалуйста, если кто знает - как/где в коде увеличить шаг двигателя (шагового)?

Поставлен шаговик и он, при вращении энкодера на установленные в коде максимальные 180°, по факту отклоняется градусов на 45 от нулевой позиции. Вопрос в том, что, если есть такая возможность, то хотелось бы сделать так, чтобы за один поворот энкодера, двигатель делал бОльшее число шагов.
И сопутствующий вопрос - как/где/что поменять в коде, чтобы снять ограничение на 180° и можно было бы установить около 360°? Сильно прошу не пинать - учусь, разбираюсь...по крайней мере - пытаюсь(
 

Вложения

Изменено:

donatos696

★✩✩✩✩✩✩
17 Ноя 2019
44
10
Избыточное цитирование. Отредактируй или сообщение будет удалено
А подключается через UILN ?
Вообще то странно. Должен больше крутить.
Надо поменять stepsPerRevolution - кол-во шагов на полный оборот
Изменил stepsPerRevolution на 12000 - получилось установить на нужные углы!!! Не смотря на то, что максимальный угол программно ограничен 255 градусами, фактически удалось установить носик на нужные 300 градусов.
Не уверен была ли необходимость, но изменил еще значение 180 на 360 вот в этих строках (на скринах) - без этих изменений программа не давала физически поворачиваться носику более чем на 180 градусов (и на дисплее так же отображало 180, а затем перескакивало на 0).
Всем спасибо, в особенности автору проекта)))
 

Вложения

  • 23.4 KB Просмотры: 42
  • 29.4 KB Просмотры: 40
  • 33.5 KB Просмотры: 32

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

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Да, нужно было. Изначально писалось все под серву, и что то осталось от нее. А если поменять тип переменной с uin8_t на uin16_t то ограничение в 255 градусов должно уйти.
 
  • Лойс +1
Реакции: donatos696

donatos696

★✩✩✩✩✩✩
17 Ноя 2019
44
10
Избыточное цитирование. Отредактируй или сообщение будет удалено
Да, нужно было. Изначально писалось все под серву, и что то осталось от нее. А если поменять тип переменной с uin8_t на uin16_t то ограничение в 255 градусов должно уйти.
Что то не нашел данной функции в коде?
 

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

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Ну точно тут надо менять, но что из этого выползет дальше не помню :) Может потребовать менять методы сохранения в eeprom, или сдвига позиций там.
C++:
struct One_Place_drink              // структура, которая описывает место для дриька
{
  place_state State = pl_free;      // начальное состояние места - пустое
  uint8_t Position;                 // позиция для сервы, в градусах
  uint16_t Optoporog = OPTOPOROG;   // оптопорог. по умолчанию он стандартный для всех, но можно и менять индивидуально для глюкавых датчиков
  uint8_t Input;                    // пин подключенного датчка
  uint8_t N_LED;                    // начальный номер светодиода на ленте. количество поисано LEDs_per_Drink , одинаковое для всех мест!
};
 
  • Лойс +1
Реакции: donatos696

donatos696

★✩✩✩✩✩✩
17 Ноя 2019
44
10
Добрый день. Подскажите, пожалуйста - в этом проекте возможно подключить "статусный" светодиод? Как, например, у VICLER'а.
 

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

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Чисто теоретически ничего этому не мешает. Т.к. используется светодиодная лента, а значит библиотека уже есть, остается добавить +1 светодиод и написать под него функцию
 
  • Лойс +1
Реакции: donatos696

MaxPadonak

★✩✩✩✩✩✩
26 Авг 2020
50
19
Доброго дня. Приобрёл недавно вот такой вот дисплейчик. Это ЖК-модуль 128X64 на контроллере ST7567S COG. Работает по I2C, адрес у него 0х3F. Хотелось бы прикрутить его в этот проект. От китайца ничего внятного о библиотеке с которой он работает добиться не удалось. В отзывах увидел пару комментариев что он работает на библиотеке U8glib путём незначительного исправления строк инициализации и адреса соответственно. Связаться с комментаторами не удалось. Поиски в интернете тоже результатов не принесли. Может кто то встречался с подобным дисплеем. Поделитесь опытом так сказать.
 

Вложения

Serega_D

✩✩✩✩✩✩✩
23 Окт 2022
1
0
Здравствуйте, подскажите пожалуйста с каким чипом вы устанавливаете на наливайку DF player?
 

ANDREI REABOI

✩✩✩✩✩✩✩
22 Ноя 2021
8
0
Ребята всем привет!!!!!!. У меня вопрос по какой схеме вы собирали свои наливаторы Меня интересуют на Элеватор с MP3 плеером
а-то пересмотрел кучу схему сам запутался!!
наливатор без MP3 Player собрал отлично работает.сейчас в производстве танк наливатор хотелось бы сделать с MP3 Player и тостами.
извиняюсь за свой вопрос и Большое спасибо!
 

Вложения