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

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

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

Комментарии

Vkolkovsky

✩✩✩✩✩✩✩
30 Авг 2020
6
0
Добрый вечер. Подскажите пожалуйста, как подключить правильно дисплей, Мп3 плеер, и шаговый двигатель к ардуино нано...Может у кого есть схема подключения... ЗАРАНЕЕ СПАСИБО
 

Вложения

welmuz

✩✩✩✩✩✩✩
22 Ноя 2020
18
2
Как я понимаю ардуино не дружит с плеером, может плеер где выключен в скетче, либо косяк какой то по ногам ардуины или плеера, но опять же при перестановки как писал выше D10 и D 11 С TX и RX в той последовательности как написано на первой странице вообще первоначальная настройка плеера не вылазиет хоть что делай, метадом тыка перекинул провода и вылазиет при манипуляции с треками может в этом дело, либо с резисторами что то?

У меня была похожая ситуация. Решилось заменой Ардуино.
 

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

★★★★★★✩
14 Авг 2019
2,964
828
Москва
Бывает что и не понятно с 1-го раза. Попробуйте нарисовать. А так пины все прописаны, все состоит из модулей. Сложности подключить дисплей по i2c ? Ну не беритесь за сборку, а то очень сложно будет. Все равно хочется собрать ? берите компоненты и подключайте к ардуино каждый по очереди, по одному, заработала - составляйте схему, будет Вам честь и хвала.
 

wrerwer

✩✩✩✩✩✩✩
15 Сен 2020
9
1
Бывает что и не понятно с 1-го раза. Попробуйте нарисовать. А так пины все прописаны, все состоит из модулей. Сложности подключить дисплей по i2c ? Ну не беритесь за сборку, а то очень сложно будет. Все равно хочется собрать ? берите компоненты и подключайте к ардуино каждый по очереди, по одному, заработала - составляйте схему, будет Вам честь и хвала.
Эх если бы я есче шарил по лучше( Гайвера наливатор я повторил, подарил другу бармену тот в восторге!))). Вот хочу на работу сделать , но нужно с тостами. как компоненты приедут будем пробовать
 

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

★★★★★★✩
14 Авг 2019
2,964
828
Москва
Шарить придется научиться, т.к. надо сначала убедиться, что все компоненты по отдельности работают. Самое сложное найти причину ошибок, а их может быть куча. Например очень тонкие провода питания - чем не причина ?
Поэтому собрать все на макете, проверить , потом паять в корпус.
 

Stin28Rus

✩✩✩✩✩✩✩
29 Дек 2020
7
2
Добрый день всем! Подскажите, кто как решил проблему с питанием? У меня такая ситуация, без плеера все пашет на ура с простой зарядки от телефона или повербанка через введённый модуль micro usb, по принципу как у гувера, а с плеером ни в какую не хотит, все работает только когда ардуино через дата кабель напрямую подключена к ноутбуку, повер банк по такому же принципу такую мощность для работы всех комплектующих дать не может! А привязка к ноутбуку лишает лишает всякой мобильности!
 

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

★★★★★★✩
14 Авг 2019
2,964
828
Москва
Странно что повербанк не может дать ту же мощность. А решить можно взяв БП помощнее и разделив питание. У современных телефонов есть зарядки на 2 А, должно хватить. у меня правда не зарядка была, и на 3А, но там стояли 2 простых преобразователя АMS
 

Stin28Rus

✩✩✩✩✩✩✩
29 Дек 2020
7
2
Брал и помощьнее так же через дата кабель, толку нет! Вот такой

Попробую разделить питание, это через 2 кабеля это все питать придётся? И как грамотнее его разделить? Чисто мр3 через дополнительный источник?

У повербанка вот характеристики
 

Вложения

Petrmv

✩✩✩✩✩✩✩
31 Дек 2020
16
4
Всем доброго дня, киньте ссылку на работающие плееры, если не сложно уже у трех продавцов брал приходит не работающий хлам.
Спасибо зарание.
 

MaxPadonak

✩✩✩✩✩✩✩
26 Авг 2020
9
9
Всем доброго дня, киньте ссылку на работающие плееры, если не сложно уже у трех продавцов брал приходит не работающий хлам.
Спасибо зарание.
А как ты определяешь что они не рабочие ? Может просто на RX и TX резисторы 1кОм не ставишь ? Или может флэшка нерабочая ?
 

Petrmv

✩✩✩✩✩✩✩
31 Дек 2020
16
4
А как ты определяешь что они не рабочие ? Может просто на RX и TX резисторы 1кОм не ставишь ? Или может флэшка нерабочая ?
Резисторы стоят, при включении зависает система, меняю плеер на другой все работает
 

Serega77

✩✩✩✩✩✩✩
25 Апр 2021
3
0
Избыточное цитирование
Добрый день всем! Подскажите, кто как решил проблему с питанием? У меня такая ситуация, без плеера все пашет на ура с простой зарядки от телефона или повербанка через введённый модуль micro usb, по принципу как у гувера, а с плеером ни в какую не хотит, все работает только когда ардуино через дата кабель напрямую подключена к ноутбуку, повер банк по такому же принципу такую мощность для работы всех комплектующих дать не может! А привязка к ноутбуку лишает лишает всякой мобильности!
Я ёмкость на входе повесил, и провода если тонкие, потери будут.
 

Serega77

✩✩✩✩✩✩✩
25 Апр 2021
3
0
Да у меня плеер работает, это кто-то выше спрашивал. У меня с другая беда когда срабатывает датчик подключенный последним, слетает галка в меню с фоновой музыки, и соответственно больше не играет, пока не перезагрузишься или заново в меню не поставишь.

Проблема разрешилась, спасибо автору.
 

Serega77

✩✩✩✩✩✩✩
25 Апр 2021
3
0
Подскажите, может кто делал, чтобы те датчик уберечь от случайного пролива, залить прозрачной эпоксидной, работать будет?

ИК датчик
 

Алексей(Барнаул)

✩✩✩✩✩✩✩
20 Апр 2021
5
0
Всем привет!
Подскажите начинающему, при загрузке скетча сначала пишет это:
In file included from C:\Users\АЛЕКСЕЙ\Desktop\silver_naliv_20\silver_naliv_20\silver_naliv_20.ino:93:0:
C:\Users\�������\Documents\Arduino\libraries\FastLED\src/FastLED.h:14:21: note: #pragma message: FastLED version 3.004.000
# pragma message "FastLED version 3.004.000"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\АЛЕКСЕЙ\Desktop\silver_naliv_20\silver_naliv_20\drink_place.ino: In function 'void Init_places()':
C:\Users\АЛЕКСЕЙ\Desktop\silver_naliv_20\silver_naliv_20\drink_place.ino:36:27: warning: large integer implicitly truncated to unsigned type [-Woverflow]
C:\Users\АЛЕКСЕЙ\Desktop\silver_naliv_20\silver_naliv_20\menu_proc.ino: In function 'byte IncreaseDrink(byte)':
C:\Users\АЛЕКСЕЙ\Desktop\silver_naliv_20\silver_naliv_20\menu_proc.ino:178:49: warning: return-statement with no value, in function returning 'byte {aka unsigned char}' [-fpermissive]
C:\Users\АЛЕКСЕЙ\Desktop\silver_naliv_20\silver_naliv_20\menu_proc.ino: In function 'byte DecreaseDrink(byte)':
C:\Users\АЛЕКСЕЙ\Desktop\silver_naliv_20\silver_naliv_20\menu_proc.ino:189:49: warning: return-statement with no value, in function returning 'byte {aka unsigned char}' [-fpermissive]
Дальше загружает нормально и не работают светодиоды?
Зараннее спасибо.
 

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

★★★★★★✩
14 Авг 2019
2,964
828
Москва
Для начала открыть пример для ФастЛЕД и проверить работают ли светодиоды с примером. Указать тот же пин, что и в наливторе. Пересобирать ничего не надо.
 

Алексей(Барнаул)

✩✩✩✩✩✩✩
20 Апр 2021
5
0

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

★★★★★★✩
14 Авг 2019
2,964
828
Москва
Инструкцию по настройке хороши читали? Настроили количество светодиодов и начальные светодиоды для каждого места ?
 

Алексей(Барнаул)

✩✩✩✩✩✩✩
20 Апр 2021
5
0
Инструкцию по настройке хороши читали? Настроили количество светодиодов и начальные светодиоды для каждого места ?
Спасибо, разобрался!
Теперь новая напасть, при установки первой рюмки плюсом срабатывает пятая, хотя не подключена вообще
 

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

★★★★★★✩
14 Авг 2019
2,964
828
Москва
5-ая румка идет на 6-ой пин, его надо подтягивать на резистором на +, встроенной подтяжки у него нет, и он ловит помехи. об этом я то же писал
 

Алексей(Барнаул)

✩✩✩✩✩✩✩
20 Апр 2021
5
0