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

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

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

Комментарии

Spectrum16

✩✩✩✩✩✩✩
22 Мар 2019
18
0
Народ, здрасте. Помогите разобраться... Скачал все библиотеки...но не компилируется и все....ошибка в библиотеке U8GLib... Она скачана по ссылке на Гитхабе. Пробовал разные версии ардуино IDE,ставил ту, которая у аврора...1.8.12 даже найтли поставил- НЕ КОМПИЛИРУЕТСЯ
лог вот такой. Скачал библиотеки и перенес папку в libraries. Какие идеи?
лог:
Arduino: 1.8.12 (Windows 7), Плата:"Arduino Nano, ATmega328P"

silver_naliv_20:10:10: fatal error: U8glib.h: No such file or directory

#include "U8glib.h"

          ^~~~~~~~~~

compilation terminated.

exit status 1
U8glib.h: No such file or directory

Неверная библиотека найдена в C:\Program Files (x86)\Arduino\libraries\u8glib-master: нет заголовочных файлов (.h), найденных в C:\Program Files (x86)\Arduino\libraries\u8glib-master
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
1) Запусти любой пример из библиотеки - они должны быть в примерах
2) Попробуй заменить #include "U8glib.h" на #include <U8glib.h>
 

Spectrum16

✩✩✩✩✩✩✩
22 Мар 2019
18
0
Чет как таковой ее и нет в библиотеках, зато есть U8G2....взял ее примеры, но примеры тоже не компилируется..... Я уже яву переустановил даже....Понять не могу,почему так? Может с ГИТХАБА библиотека какая то битая скачивается? Вф не могли бы скинуть свою библиотеку из вашей папки с библиотеками? Безымянный.pngБезымянный2.png И кавычки на скобки я меня, все без изменений
 
Изменено:

Spectrum16

✩✩✩✩✩✩✩
22 Мар 2019
18
0
Огромное СПАСИБО. С вашими библиотеками все сразу скомпилировалось. Читал тему, прежде чем написать.....в 310 посте у человека была такая же проблема, ошибки одинаковые, но устранил он ее, либо забил никто не написал,хотя, если перестал писать,вероятнее победил... По ссылке с гитхаба скачивается архив, в котором куча папок и файлов, в вашей папке файлов на порядок меньше. Еще раз благодарю вас.
 

BARcyk

✩✩✩✩✩✩✩
21 Сен 2020
12
1
PUMP_POWER 3 // управляющий сигнал драйвера помпы (обычно обозначен как IN на драйверах моторов,
SERVO_POWER 4 // управляющий сигнал драйвера для питания серводвигателя (обычно обозначен как IN на драйверах моторов
SERVO_PIN 5 // сигнальный провод серводвигателя

Как я понял помпу на 13 пин, а куда еще один от серво ? Не могу разобраться, в скетче для серво только один пин вроде
Подскажите кто может.
Схема как у Алекса с драйвером моторов.

Спасибо Старик я понял, на серву питание постоянно.
 
Изменено:

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Это управление сервой:
#define PIN_SERVO 9 // Пин сервопривода
Я не отключаю питание сервы, так что на нее всегда идет +5 . Поэтому SERVO_POWER 4 у меня нет.
На 13 пине мотор, управление вкл/выкл. По светодиоду на плате понятно когда он включается или выключается
#define PIN_PUMP 13 // управляющей помпой пин
 

Bladeslider

✩✩✩✩✩✩✩
11 Сен 2020
6
0
Старик Похабыч ОГРОМНОЕ спасибо за схему и помощь в настройке наливатора. Ребят ни у кого нет модели корпуса из фанеры, делаю для себя не для продажи, поэтому злого умысла нет никакого.
 

Spectrum16

✩✩✩✩✩✩✩
22 Мар 2019
18
0
Старик, а Вы ничего не придумали с платами, в которых плейр не работает? Всю ночь пытался победить, но увы, плейр не запускается....все делал как написано...форматнул карту...сначала первый каталог залил, потом второй, плейр не определяется, светодиод не горит...в настройках музыка и тосты не активируются........прошивал примеры с библиотеки, все работает, песни играют. Это все...., фиаско....можно разбирать? Или может на УНО попробовать?
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
А кто то запустил вроде. У меня лежит такая плата, но я не пробовал. Вроде кто то говорил в сериал поменять местами rx tx
 

Bladeslider

✩✩✩✩✩✩✩
11 Сен 2020
6
0
Старик, а Вы ничего не придумали с платами, в которых плейр не работает? Всю ночь пытался победить, но увы, плейр не запускается....все делал как написано...форматнул карту...сначала первый каталог залил, потом второй, плейр не определяется, светодиод не горит...в настройках музыка и тосты не активируются........прошивал примеры с библиотеки, все работает, песни играют. Это все...., фиаско....можно разбирать? Или может на УНО попробовать?
У меня было тоже самое. пример с библиотеки работает, в прошивке нет, поменял RX и TX и все заработало
 

Spectrum16

✩✩✩✩✩✩✩
22 Мар 2019
18
0
Увы.... дело у меня скорей всего в плейре....собрал на уне....все тоже самое...примеры играют,а наливатор не хочет...менял тх и рх местами- без толку...в скетче переназначал рх и тх....ничего!!! Видимо не судьба. Спасибо.
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Нет, так не бывает..
В основном файле есть такой фрагмент:
C++:
 delay(200);

if (!myDFPlayer.begin(mySoftwareSerial))
  {
    MP3_avail = false;
    //Serial.println(F("No mp3!"));
  }
  else
  {
    //Serial.println(F("mp3 ok!"));
    MP3_avail = true;
    delay(200);
    myDFPlayer.volume(MP3_Fon_Vol);
    delay(200);
    myDFPlayer.enableLoop();
    delay(200);
  }
  pinMode2(BUSY_MP3_PIN, INPUT);
1) Откройте в нем строку 4 и 8, что бы было видно что пишет в монитор порта
2) Увеличьте 1ую строку с задержкой до 2000.
3) Посмотрите что пишет
4) Поменяйте местами rx-tx и еще раз что пишет
 

LVit

★✩✩✩✩✩✩
2 Окт 2020
18
10
Старик Похабыч ОГРОМНОЕ спасибо за схему и помощь в настройке наливатора. Ребят ни у кого нет модели корпуса из фанеры, делаю для себя не для продажи, поэтому злого умысла нет никакого.
какого типа интересует? И есть ли в распоряжении резка?
 

Spectrum16

✩✩✩✩✩✩✩
22 Мар 2019
18
0
пишет что нет MP3
No mp3!
менял РХ и ТХ местами...тоже НЕТ МП3!
на всякий случай спрошу... менять местами физически 10 и 11? или переназначить в коде? Я менял физически...
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Вот еще! От какого источника питается мз3 плееер ? Он хавает прилично. И его можно к 5в подключить в принципе. Попробуйте

И еще попробуйте по очереди отключать лишние источники потребления тока.
 
Изменено:

Spectrum16

✩✩✩✩✩✩✩
22 Мар 2019
18
0
щас на макетке все....питается от ЛБП. Без лбп идут щелчки.Плейр и был подключен к 5В. Спрошу....... у меня подключена серво....читая какой то пост...там надо было где то закоментировать "дефайн степпер"....я это сделал и начал работать дисплей..... может где то еще что то надо сделать?
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
еще лучше отключить МикроЛЕД убрав или закомментировав строку
#define REPLACE_FASTLED // пункт 0 , если есть , то используется библиотеа microLED, если нет - FastLED
 

LVit

★✩✩✩✩✩✩
2 Окт 2020
18
10
Держи, всё в свободном доступе, авторы будут не в обиде
 

Вложения

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
@LVit, А отредактируй свое вот это сообщение, что бы фотка была корпуса, я сейчас не найду. А я на него сслыку кину с начала

Взял ту самую плату, что не работал с мп3. По внешнему виду. Загрузил прошивку наливатора. Подключил вот по такой схеме, запитал от 5 вольт,
1605894192095.png
20:33:02.444 -> Start
20:33:03.564 -> mp3 ok!
Больше пока ничего не подключал. Это на макетке
 
Изменено:

willi

✩✩✩✩✩✩✩
16 Мар 2020
22
2
Огромное СПАСИБО. С вашими библиотеками все сразу скомпилировалось. Читал тему, прежде чем написать.....в 310 посте у человека была такая же проблема, ошибки одинаковые, но устранил он ее, либо забил никто не написал,хотя, если перестал писать,вероятнее победил... По ссылке с гитхаба скачивается архив, в котором куча папок и файлов, в вашей папке файлов на порядок меньше. Еще раз благодарю вас.
благодаря Хотабычу удалось компилировать, ещё раз спасибо!
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Так, вчера пока собирал макетку сделал ряд глупостей, а может и не ряд. Но расскажу как собирал, может кому поможет. Буду дополнять.
1) Т.к. программа у меня была и все библиотеки у меня были, то первое что сделал - открыл скетч. В нем переключил на библиотеку FastLED. Для этого в основном файле silver_naliv_20.ino закомментировал строку № 80
//#define REPLACE_FASTLED // пункт 0 , если есть , то используется библиотеа microLED, если нет - FastLED
Далее перевел скетч на работу с сервоприводом, для этого поставил комментарий в строке №123
//#define STEPPER_ON
Прошился. Плата именно такая, ну почти. Разводка 1 в 1, расположение компонентов такое же. Цвета их немного другие. Она не на СH340, но я видимо что то подобное уже подключал и проблем не было.
IMG_20200418_182054.jpg

2) Начал с подключения МП3 плееера, по схеме парой постов выше https://community.alexgyver.ru/attachments/1605894192095-png.18612/
После включения в мониторе порта получил сообщение "mp3 Ok!" Для этого надо в основном файлу убрать комментарии со сток 269 и 273
//Serial.println(F("No mp3!"));
//Serial.println(F("mp3 ok!"));-

3) Подключил дисплей по i2c , я взял побольше 1106. Так же к 5в. После включения (да , я люблю все проверять поэтапно) попал в режим калибровки, который без энкодера прощелкалася и я попал в меню.

Все питание брал пока вот от такого преобразователя. Не забывайте объединить землю! Это важно. С дерьмовым напряжением может просто не запуститься что нибудь, тот же мз3 плеер например. Ему 1 ампер нужен вроде как. Но на самом деле меньше. Дже не пытайтеся повесить на ардуину! Так же , перед заказом компонентов, посчитайте по максимуму сколько ампер вам понадобиться на все это шапито. Удивитесь ;)
1605946221534.png


4) Подключил энкодер, круглый, все данные по умолчанию. Главное хорошие контакты ! У меня не очень, провода в макетке шатаются, но тем не менее он заработал сразу. Я зашел в режим калибровки и покрутил туда-сюда, значения менялись и вверх и вниз. Учтите, что значение угла ОТСТАЕТ от вращения энкожера, т.к. в первую очередь идет обработка поворота сервы (она пока не подключена), а в свободное время, когда вы не вращаете энкодер, идет обновление угла. После настройки я попал в основное меню и... и получил полудохлые отзывы от энкодера.. Что такое ? Путем нехитрых действий, я понял, что дикую задержку дает обращение к мп3 плееру, причем если его включить, то все нормально работает.. Это была первая ошибка которую я сделал: Я НЕ ПОДКЛЮЧИЛ 12-ЫЙ ПИН К КОНТАКТУ BUSY MP3, и программа просто не понимала работает плеер или нет и без конца слала ему команды. После подключения все заработало чисто и ровно. А да.. это была не 1-ая ошибка, 1-ая была в том, что я подключил энкодер к 2-м землям , а не к земле и +5в. Но ее я обнаружил еще до включения, так что все проверяйте по 2 раза.

5) Подключил сервопривод. без драйверов. +5 и GND к источнику питания, а управляющий на 9-ый пин . Получил при включении дерг на 90 градусов.. Вроде бы от него избавлялся уже. Поправил код. Поправленный код будет выложен по окончании сборки.
Отдельно хотел остановиться на таймингах для сервы. В настоящее время все настроено так:
C++:
#define STEP_TIME 15                        // свободное время между дрыгами сервы, чем больше время, тем проше играть энкодером во время движения, но и серва будет работать медленне
#define SERVO_DELAY 25                      // время необходимое серве для завершения 1-го шага движения.
И особых дрыгов не замечено. Если SERVO_DELAY сделать совсем маленьким, то помпа и не дернется. Моя серва вполне позволяет снизить это время до 22. STEP_TIME может быть любым, но если сделать его сильно большим, то носик будет двигаться рывками. 10-15 в моем случае нормально.

С подключением светодиодов проблем никаких нет. Питание к БП.
Расскоментировав строку с #define REPLACE_FASTLED (80-ая) перепрошился на микроЛЕД. С версией 2.3 все работает, проблем пока не выявил. Использование этой библиотеки освободило примерно 6% памяти устройства, что не мало.

6) Подключение помпы. Для подключения помпы мне понадобилось n-канальный мосфет, у меня под руку попал IRF8743, 10к резистор. Подключал по такой схеме:
1606152841134.png
Для тех, кто любит цветные картинки вот еще:
1606153037531.png
При таком раскладе высокий сигнал на пине D13 включит мотор, низкий - выключит.

7) Подключение датчиков рюмок.
1606242724922.png
Прошло без осложнений. Подключал такие вот штуковины. 2 концевые кнопки. Подключаются элементарно, все выходы подписаны. Для стандартной прошивки надо землю на С или COM, а на пин Аn с контакта N0. Тогда разомкнутое значение будет соотв. 1000, а нажатое 10 или меньше. Напомню, что пины А открыт с подтягивающим резистором.
Очевидно, что концевик меньшего размера требует меньшего усилия нажатия. Так что для небольших легких рюмок можно рекомендовать именно его.
Оптический датчик с 1-ой регулировкой подключается к земле (G), питания (VCC) и пину А (out). На стекло срабатывает, на темные матовые предметы нет. Так что если у запланирована рюмка из черного матового стекла - лучше сначала проверить. Значение при поднесении стекла менее 50.
Оптический датчик с 2-мя регулировками подключается аналогично предыдущему, контакт датчика E не подключается никуда. Этот датчик в отличии от предыдущего отлично реагирует на темные матовые поверхности. Так что если есть выбор, то лучше взять его.
Т.к. датчики реагируют на стекло, то надо хорошенько продумать как их герметизировать от случайных проливов.

nota bene:
Иногда память устройства начинает куда то уходить. Помогает перезапуск arduino IDE. У меня так непонятно с чего стало требовать больше 100%. При обычном 98-99% для FastLED
 
Изменено:
  • Лойс +1
Реакции: LVit

Anatolyj

★✩✩✩✩✩✩
30 Янв 2020
134
15
Да если использовать модуль заряда ТР 4056 с защитой то с моей помпой он уходил в защиту. Подключил помпу к лабораторному блоку питания и оказалось, что при прокачке жидкости помпа кушает 0,9 А.
Завтра попробую померить напряжение, которое кушает Наливатор в сборе