Наливатор с ОЛЕД дисплеем , 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

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

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

Комментарии

shturman70

✩✩✩✩✩✩✩
7 Дек 2022
12
1
Приветствую уважаемые!
Подскажите советом куда копать? Отказывается тосты произносить хоть что делай.
Изучил ошибки и методы решения на форуме.Понимаю,что все треки определяются как фон музыка.
Нашёл это:
Работать надо с теми пинами, где позволяет ставить звездочки...
Зашёл поменял версию #define CUR_VER_N 124
Теперь просто секунда тоста звучит.
Если всё возвращаю только фоновая музыка.
Да и настройка запрашивает количество треков музыки.Количество тостов нет.
 
Изменено:

donatos696

★✩✩✩✩✩✩
17 Ноя 2019
44
10
Многое зависит от самого плеере, точнее - от чипа, на котором он собран. Если есть возможность - попробуйте другой DFPlayer (с другим чипом). Выше выложено фото плеера, который стоит у меня - завелось без всяких танцев с бубнами.
 
  • Лойс +1
Реакции: shturman70

shturman70

✩✩✩✩✩✩✩
7 Дек 2022
12
1
@donatos696,точно у меня установлен чип MH2024k-24SS он и есть глючный. Кто бы знал. Завтра буду искать. По результату отпишусь.
 
  • Лойс +1
Реакции: donatos696

Guru

★✩✩✩✩✩✩
2 Ноя 2019
15
14
Всем здрасте !!!
Еще раз по MP3 плееру !!!
По порядку
Форматирую СД КАРТУ В Fat32
Создаю две папки "01" и "02"
В первую кидаю музыку во вторую тосты
Подключаю плеер по схеме
10 нога через резюк 1к на RX плеера
11 нога через резюк 1к на TX плеера
12 нога на BUSY плеера
И не работает ((((( даже не инициализируется при включении ((((
на 100 раз все проверил ( ардуину менял , плату плеера менял )
все бестолку ((( микруха на модуле AS21cn4n0y ( ни даташита ни инфы в интернете про нее не нашел )
Что делать ????? помогите В одинокого пить устал ))) а тут хоть какая то развлекаловка !!!!
P.S. В скетче не ковырялся , загружал как говориться стоковый от автора
 

MaxPadonak

★✩✩✩✩✩✩
26 Авг 2020
50
19
@Guru, сейчас с плеерами вообще большая беда. То что сейчас отправляют нам наши братья-китайцы полное Г, при чём даже проверенные магазины. Выхода пока не вижу, либо искать у кого то в закромах и покупать в тридорога нормальные плееры, либо собирать без музыки.
 

chip22

✩✩✩✩✩✩✩
29 Апр 2023
7
0
Здравствуйте. Может кто нибудь вкурсе, почему ардуино невидет треки? Подключил по этой схеме.

Через проверочный файл поеера всё работает.
 

Вложения

MaxPadonak

★✩✩✩✩✩✩
26 Авг 2020
50
19
@chip22,какой чип у вас на MP3 плеере ? Если 24SS то он работать нормально не будет. Это глючная шляпа, есть куча материала как попробовать заставить его работать. Поищите на форуме. Прочитайте сообщение прямо над вашим которое.
 

Pravda861

✩✩✩✩✩✩✩
28 Окт 2023
5
0
Здравствуйте! Подключил экран oled SSD1306 в скетче его выбрал и при включении цветная рябь. попробовал залить и проверить Hello? world работает. Как можно исправить?
 
Изменено:

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

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Есть такой "глюк" . В самом начале после инициации дисплея идет поиск нулевой позиции для шагового мотора, а выбран скорее всего он, и пока "ноль" не будет найден будет ряб. Если еще не собрана вся часть, то можно подключить концевик и нажать его.
 

Zenit

✩✩✩✩✩✩✩
13 Авг 2020
10
0
У кого било ? скачал скеч не чего не делал Питаюсь компилировать видает такую каку Ардуино 1.8.12 пробивал разние версии


C:\Users\Aleks\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino\new.cpp: In function 'void* operator new(std::size_t, std::nothrow_t)':

C:\Users\Aleks\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino\new.cpp:59:60: warning: unused parameter 'tag' [-Wunused-parameter]

void * operator new(std::size_t size, const std::nothrow_t tag) noexcept {

^~~

C:\Users\Aleks\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino\new.cpp: In function 'void* operator new [](std::size_t, const std::nothrow_t&)':

C:\Users\Aleks\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino\new.cpp:68:63: warning: unused parameter 'tag' [-Wunused-parameter]

void * operator new[](std::size_t size, const std::nothrow_t& tag) noexcept {

^~~

C:\Users\Aleks\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino\new.cpp: In function 'void operator delete(void*, const std::nothrow_t&)':

C:\Users\Aleks\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino\new.cpp:103:55: warning: unused parameter 'tag' [-Wunused-parameter]

void operator delete(void* ptr, const std::nothrow_t& tag) noexcept {

^~~

C:\Users\Aleks\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino\new.cpp: In function 'void operator delete [](void*, const std::nothrow_t&)':

C:\Users\Aleks\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino\new.cpp:106:57: warning: unused parameter 'tag' [-Wunused-parameter]

void operator delete[](void* ptr, const std::nothrow_t& tag) noexcept {

^~~
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
617
146
Ну а загрузка проходит или нет? В настройках ide в параметре "сообщения компилятора" установи "ничего".
 

skifus

✩✩✩✩✩✩✩
30 Дек 2023
9
0
Здравствуйте собираю в первый раз наливатор решил пойти сразу с козырей и поставить туда олед и шаговый мотор, но вот проблема я купил Мотор 28BYJ-48, 5VDC + драйвер ULN2003 - этот комплектный драйвер подойдет ? Или нужен именно 2208, если подойдет то как его подключить ?
 

Andy117

✩✩✩✩✩✩✩
20 Мар 2023
7
1
А никто не пробовал использовать ESP32? ESP32 S2 mini не дороги и часть пинов (до 10) могут использоваться в качестве сенсорных кнопок. И с памятью/быстродействием проблем нет.
ЗЫ
Попробовал по быстрому прикинуть насколько хороши сенсорные датчики в ESP32. Правда в качестве площадки использовал сначала проводок, потом жетон от метро (что попалось gод руку). Пока результат печальный, во всяком случае с этими площадками. Чувствительность низкая, нужно пальцем касаться самих площадок, рюмок не видят совсем. Пробовал на классическом ESP32-WROOM-32D и на ESP32 S2 mini. Если бы они хотя бы слабо реагировали на рюмки, то можно было бы поэспериментировать с контактами, а так ИМХО бесполезно.
 
Изменено:

Zenit

✩✩✩✩✩✩✩
13 Авг 2020
10
0
Здравствуйте не подскажите ,я уже замучился .Без включенного фона работает все прекрасно но при включении фона ,тости производит по кругу без перерыва .Раньше плеер тости проговаривал 1 сек , изменил 23 строку задержку поставил 800 мс стали воспроизводится тости ,но только включаю фоновою музыку ,тост воспроизводятся без конца один .Может библиотека кака ято не та Помогите
 

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

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Скорее всего поможет переформатирование карты плеера и поочередное копирование файлов в правильном порядке, сначала тосты , а потом фоновую музыку (кажется с порядком не напутал). Бесконечное воспроизведение тостов скорее всего из за того, что они считаются музыкой
 

Zenit

✩✩✩✩✩✩✩
13 Авг 2020
10
0
Форматировал , делал как ви писали постами више ,но он один первий тост гоняет по кругу ,может де то команду стоп указать.пару раз проиграл 5 раз подряд потом остановился ,при следующем наливе начал играть второй тост,но опять ,повторяет .Значит тости и музыку различает
 

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

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
В проигрывании тостов стоит функция , которая не позволяет произносить 2 раза один и тот же тост. Так что этот файл считается именно фоновой музыкой. Других предположений нет.
А что играет, если не наливать , но включить фоновую музыку ?
 

Zenit

✩✩✩✩✩✩✩
13 Авг 2020
10
0
Фоновая мелодия играет ,может длинную поставил ?