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

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

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

Комментарии

wwwstas

✩✩✩✩✩✩✩
3 Июл 2020
26
0
Запчасти на подходе, но чего то я попутался со схемами. Видел две - одна от руки на листочке, вторая какая то большая навороченная, ткните носом, по какой собирать его( Спасибо
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
На листочке была в другой теме. Лучше всего брать тут по кусочкам, как в первых постах. Подключить, проверить на примерах, что верно , брать сл. компонент. Собрать сперва на макетке, что бы все работало. потом можно фиксировать
 

wwwstas

✩✩✩✩✩✩✩
3 Июл 2020
26
0
На листочке была в другой теме. Лучше всего брать тут по кусочкам, как в первых постах. Подключить, проверить на примерах, что верно , брать сл. компонент. Собрать сперва на макетке, что бы все работало. потом можно фиксировать
Добрый день. Со схемами совсем запутался, можете помочь и ткнуть в конкретную схему на ардуино нано. заранее прошу прощения, еще совсем несилен в ардуино, только начинаю и крутить все по частям и выверять по блокам скетч, боюсь что не осилю( Спасибо
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Изделие рассчитано на продвинутых пользователей ардуино, на начальном уровне боюсь будет сложновато.
Часть схем куда то пропало - картинка не грузиться. В самом первом посте есть таблица с подключенными пинами, если это не понятно, то за сборку приниматься рановато.
 

wwwstas

✩✩✩✩✩✩✩
3 Июл 2020
26
0
Изделие рассчитано на продвинутых пользователей ардуино, на начальном уровне боюсь будет сложновато.
Часть схем куда то пропало - картинка не грузиться. В самом первом посте есть таблица с подключенными пинами, если это не понятно, то за сборку приниматься рановато.
по разводке с пинов платы понятно. описание в общих чертах тоже понятно, поэлементно (энкодер, плеер, диоды и прочее). Т.е. схема общая вроде как получается та что был скан листочка в клетку, но проскакивают вопросы и обсуждения, что некоторые элементы надо через резисторы, на помпу вроде как надо кондеры паралельно (номанал не понятен), на питание платы вроде как тоже рекомендуется конденсатор. Вот и возникает вопрос, если люди собирают, тестируют, делятся фото и видео и все выходит ок, то и прошу кто прошел путь и уже собрал рабочий и проверенный вариант, ткунь носом в схему или поделится ей, если не жалко. А так конечно можно, а может и нужно набивать шишки, паять, перепаивать, добавлять резисторы конденсаторы, вообщем эксперементировать) но честно говоря если есть рабочая схема, время просто жалко терять на эксперименты. Хочется собрать наладить и радоваться результату. Спасибо
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Уже хорошо.
Это общеэлктрические вопросы, многие из них зависят от типа помпы, Подключение помпы можно полностью аналогично наливатору Алекса. Конденсаторы такие же, главное вольтаж сделать с запасом. Где нужны резисторы я писал с номиналом. Если плата перегружается, то и на питание платы ставиться конденсатор - может помочь.
Сначала лучше собрать на макетке, что бы не перепаивать 10 раз.
Я разводку не делал, схемы на все нет, ее можно было бы собрать из кусочков, но они пропали из статьи. Попробую восстановить как будет время
 

wwwstas

✩✩✩✩✩✩✩
3 Июл 2020
26
0
Уже хорошо.
Это общеэлктрические вопросы, многие из них зависят от типа помпы, Подключение помпы можно полностью аналогично наливатору Алекса. Конденсаторы такие же, главное вольтаж сделать с запасом. Где нужны резисторы я писал с номиналом. Если плата перегружается, то и на питание платы ставиться конденсатор - может помочь.
Сначала лучше собрать на макетке, что бы не перепаивать 10 раз.
Я разводку не делал, схемы на все нет, ее можно было бы собрать из кусочков, но они пропали из статьи. Попробую восстановить как будет время
Спасибо большое. Буду пробовать. Если где зависну, уж понадоедаю с вопросами, если не против) Детали на подходе и будем пробовать
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Обнаружен баг при подключении большого числа светодиодов. Баг заключается в том, что носик неверно позицируется над рюмками. Сбивается.
За обнаружение большое спасибо за это Soni666.
Есть костыль, который позволяет исправить и работать, но при этом есть потеря в скорости. Веду исследования и видимо буду делать свои функции исключительно для шаговика, эксперементирую.

ЗЫ. Костыль не публикую, если есть проблема - в личку.

Итак поковырявшись понял в чем беда. 1) Мотор, который стоит у нас не разгоняется до обещанных 12 , а где то и 15 оборотов в минуту. Если при установке скорости в 12 оборотов он как то крутиться и что то делает , и иногда довольно точно, то любые задержки приводят к пропуску шагов.
Для себя определил максимальную скорость в 9 оборотов в минуту. Но это не все. В библиотеке, которую я изменял, как и в оригинале , есть такое условие для совершения сл. шага
C++:
bool AsyncStepper::Update()
{
    if (_stopped) return false;
    if (static_cast<unsigned long>(micros() - _startime) >= microsByStep)
    {
        _startime += microsByStep;       
        Step();         
        if(_goalStep > 0)
        {
            _goalStep--;
            if (_goalStep == 0)
            {
                _stopped = true;
                if (_callback != nullptr) _callback();
            }
        }
        return true;
    }
    return false;
}
Строка 4, сл. шаг делается только если прошло определенное время после предыдущего шага.
При этом время запоминается, как время последнего шага+ время шага. А при любой задержке больше чем на 2 шага будет сделано сразу 2 шага, и один из них не будет сделан - будет сбой. Я заменил строку _startime += microsByStep; на _startime = micros(); и поставил ее после Step();

После того, как @Soni666 проверит работу сделаю обновление.
 

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

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

rf68

✩✩✩✩✩✩✩
26 Авг 2019
6
0
Приветствую! Спасибо за проект! Всё собрано, работает. Только не могу разобраться где регулируется время налива, чтобы точно отколибровать налитый объём. И не не понял, энкодер должен только в одну сторону крутить?
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Энкодер должен работать во всех направлениях и на нажиматься.

Это минимальный и максимальны объемы:
#define min_Drink 10 // Минимальное кол-во миллилитров для рюмки EEPROM
#define max_Drink 50 // Максимальное кол-во миллилитров для рюмки EEPROM

Это время , за которое наливаются минимальный и максимальный объемы
#define min_Drink_delay 300 // Калибровка за сколько наливается min_Drink EEPROM
#define max_Drink_delay 6000 // Калибровка за сколько наливается max_Drink EEPROM

Отдельная калибровке не предусмотрена, можно взять из проекта Гайвера. Можно рассчитать увеличение исходя из замеров.
 

rf68

✩✩✩✩✩✩✩
26 Авг 2019
6
0
Спасибо! Налив +- 2 грамма отрегулировал, осталось с энкодером разораться...
 

BARcyk

✩✩✩✩✩✩✩
21 Сен 2020
12
1
Спасибо! Налив +- 2 грамма отрегулировал, осталось с энкодером разораться...
Не знаю поможет или нет, расскажу свой опыт. Когда делал первый свой наливатор, намучился с энкодером, то рывками , то перескакивает, то при калибровке центров рюмок какие-то безумные цифры на табло. Оказалось при ближайшем рассмотрении что один из смд резиков с одного края не пропаян. Видать китайские дети на уроках труда собирали. Вобщем капнул припоя и все срослось. От така фигня..
 

MaxPadonak

★✩✩✩✩✩✩
26 Авг 2020
43
17
Не знаю поможет или нет, расскажу свой опыт. Когда делал первый свой наливатор, намучился с энкодером, то рывками , то перескакивает, то при калибровке центров рюмок какие-то безумные цифры на табло. Оказалось при ближайшем рассмотрении что один из смд резиков с одного края не пропаян. Видать китайские дети на уроках труда собирали. Вобщем капнул припоя и все срослось. От така фигня..
Я тоже поделюсь личным опытом. С обратной стороны энкодера нужно почистить спиртом либо рексантом калошей. Китайцы часто не смывают флюс, а он у них токопроводящий. Чуть два энкодера так не выкинул.
 

rf68

✩✩✩✩✩✩✩
26 Авг 2019
6
0
Промывкой для плат с чипа и дипа промыл, в файле encMinim.h для второго типа энкодера настройки раскоментил, пайка вроде норм, концы на энкодер проверил, пойду искать энкодер первого типа.....

вправо и влево только на увеличение...
 

rf68

✩✩✩✩✩✩✩
26 Авг 2019
6
0
IMG_20201005_113604.jpg

объём налитого увеличивается вне зависимости от вращения по часовой или против, в настройках громкость, угол тоже только в большую сторону..менял энкодер с рабочего проекта Алкса - без изменений
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Под спойлером тестовый код, вырезка из наливатора. В папку со скетчем скопировать encMinim.h из вложения.

Может потребоваться открыть просто INPUT, закрыть INPUT_PULLUP
/*
pinMode (_clk, INPUT);
pinMode (_dt, INPUT);
pinMode (_sw, INPUT);
*/

pinMode (_clk, INPUT_PULLUP);
pinMode (_dt, INPUT_PULLUP);
pinMode (_sw, INPUT_PULLUP);



C++:
#include "encMinim.h"
const int pin_A = 2;                // Подключение вывода A (CLK) энкодера, если перепутать А и Б будет движение в другую сторону.
const int pin_B = 3;                // Подключение вывода B (DT) энкодера
const int pin_SW = 4;               // Подключение вывода кнопки (SW) энкодера
#define ENCODER_TYPE 1              //  если пропуски, то поменять на 1 или 2
#define ENCODER_REV 1               // тут можно исправить направление крутилки энкодера

encMinim enc(pin_A, pin_B, pin_SW, ENCODER_REV, ENCODER_TYPE);

 
void setup() {
 Serial.begin(115200);
 Serial.println("Start");
}

void loop() {
 enc.tick(); // put your main code here, to run repeatedly:
 if (enc.isLeft()) Serial.println("Left");
 if (enc.isRight()) Serial.println("Right");
if (enc.isClick())Serial.println("Click");
}
 

Вложения

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Проверяйте подключение. У меня на этом скетче точно такой же энкодер абсолютно четко отрабатывает повороты и нажатия
Кстати... если есть рабочий пример при котором работает в обе стороны - то хотелось бы его глянуть
 

rf68

✩✩✩✩✩✩✩
26 Авг 2019
6
0
Спасибо за помощь! Буду разбираться. Рабочий брал с наливатора Алекса Гайвера
 

Vkolkovsky

✩✩✩✩✩✩✩
30 Авг 2020
6
0
Добрый день.. А схема всего прибора в целом как алекса??
 

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

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Да, принципиально ничего нового. Пины могут отличаться. А так если понимать принцип действия, то ничгео сложного
 

wwwstas

✩✩✩✩✩✩✩
3 Июл 2020
26
0
пришли все бобки, собрал на макетке. при компиляции скетча выдает ошибку. подскажите в чем проблема
 

Вложения