Наливатор - автоматизированная машина, которая будет разливать алкоголь по стопкам.

Lev Maslov
Offline
Зарегистрирован: 17.03.2020

Рабзя, дайте чертежи какого-нить корпуса с фанеры ,на 5 рюмочек. Буду благодарен comba@bk.ru

Forthomo
Forthomo аватар
Offline
Зарегистрирован: 10.04.2019

Repz пишет:

Forthomo пишет:

Repz, Можно поподробнее про подключению флешки к плееру,  forthomo@yandex.ru

Все очень просто:

1. Смотрим даташит для 

DFPlayer - A Mini MP3 Player (DFROBOT)

ссылка: https://www.terraelectronica.ru/pdf/show?pdf_file=%252Fds%252Fpdf%252FD%252FDFPlayer%2520Mini%2520Manul.pdf

2. Гуглим распиновку USB - разъёма.

3. Флешка подключается 4-мя проводами: два питания +-, сигнальные на плэере 14, 15 ноги.

4. SD карту в плэер не вставлять, если использовать USB-флэшку .

Спасибо, попробую еще раз. Я просто доп. разъем вывел для загрузки с компа, а МП плеер определяется как картридер. А вот с флешки проигрывать как то не пошло.

Repz
Offline
Зарегистрирован: 27.11.2019

Lev Maslov пишет:

Рабзя, дайте чертежи какого-нить корпуса с фанеры ,на 5 рюмочек. Буду благодарен comba@bk.ru

Вот  чертеж для лазерной порезки:  

https://drive.google.com/file/d/1xkoF_KjkYYeQNNcE9S4p-qygi9QHXLoS/view?u...

vlad3791
Offline
Зарегистрирован: 05.02.2020

Поделитесь пожалуйста файлами для резки и скетчем.

sakhprodsnab77@gmail.com

Lev Maslov
Offline
Зарегистрирован: 17.03.2020

Благодарю

Acket
Offline
Зарегистрирован: 23.07.2019

Друзья, собрал устройство по схеме реналиватора, только распаял датчики с резисторами самостоятельно, а не покупные модули, в итоге получилось, что они инверсно срабатывают. Как малой кровью преобразовать, чтобы всё не перепаивать. у меня схема датчиков примерно, как здесь указана для сигнала с коллектора. Может микросхему инвертор какой-нибудь из К155ЛН... поставить на выход?

Forthomo
Forthomo аватар
Offline
Зарегистрирован: 10.04.2019

Acket пишет:

Друзья, собрал устройство по схеме реналиватора, только распаял датчики с резисторами самостоятельно, а не покупные модули, в итоге получилось, что они инверсно срабатывают. Как малой кровью преобразовать, чтобы всё не перепаивать. у меня схема датчиков примерно, как здесь указана для сигнала с коллектора. Может микросхему инвертор какой-нибудь из К155ЛН... поставить на выход?

Тут и далее,  можно в скетче поменять, поищите здесь обсуждали.

Acket
Offline
Зарегистрирован: 23.07.2019

так скетч тоже от реналиватора он в hex - в этом то и дело

 

Forthomo
Forthomo аватар
Offline
Зарегистрирован: 10.04.2019

Acket пишет:

так скетч тоже от реналиватора он в hex - в этом то и дело

 

инвертор ставить

Acket
Offline
Зарегистрирован: 23.07.2019

Вот я и спрашиваю - если поставить К155ЛН1 выходами на ардуино - нормально?

Forthomo
Forthomo аватар
Offline
Зарегистрирован: 10.04.2019

Нормально, только резистор придется подобрать в цепи коллектора, для четкого срабатывания. А че по этому поводу сам "автор" реналиватора говорит?

Repz
Offline
Зарегистрирован: 27.11.2019

Acket пишет:

так скетч тоже от реналиватора он в hex - в этом то и дело

 

Вот готовые поправленые хексы(с инверсией сигналов) - заливай и пользуйся:

https://drive.google.com/drive/folders/1AFEec_ya2oStqfiqPwITs5k3kNxaNKzX...

Acket
Offline
Зарегистрирован: 23.07.2019

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

Acket
Offline
Зарегистрирован: 23.07.2019

под ту прошивку пришлось ещё и реле взять, которое по низкому уровню срабатывает - тоже спорное решение... Хотя в целом она полностью устраивает, поэтому на ней и сделал

Forthomo
Forthomo аватар
Offline
Зарегистрирован: 10.04.2019

Repz пишет:

Acket пишет:

так скетч тоже от реналиватора он в hex - в этом то и дело

 

Вот готовые поправленые хексы(с инверсией сигналов) - заливай и пользуйся:

https://drive.google.com/drive/folders/1AFEec_ya2oStqfiqPwITs5k3kNxaNKzX...

Вот это по нашему!

Acket
Offline
Зарегистрирован: 23.07.2019

Припаял ЛН1 - всё заработало. С этим скетчем, что по ссылке, у меня как-то не задалось... INO не компилируется - там видимо библиотеки друге на LCD использованы,

Nalivajka_MQ_3_V1.0:546:13: error: no matching function for call to 'LCD_1602_RUS::begin()'
 
In file included from D:\Documents\Arduino\libraries\LCD_1602_RUS/LCD_1602_RUS.h:1:0,

а HEX уже не помню, по моему не подошло что-то... 

Acket
Offline
Зарегистрирован: 23.07.2019

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

Forthomo
Forthomo аватар
Offline
Зарегистрирован: 10.04.2019

Acket пишет:

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

Кусочек фольги на дно

lcd.begin();// initialize the lcd

поменяй на

lcd.init();// Инициализация дисплея

 

Acket
Offline
Зарегистрирован: 23.07.2019

спасибо, попробую!

Acket
Offline
Зарегистрирован: 23.07.2019

ещё на это ругается: Nalivajka_MQ_3_V1.0-27:746:11: error: 'mp3_play_file_in_folder' was not declared in this scope

Acket
Offline
Зарегистрирован: 23.07.2019
// Query total file numbers of a folder
void mp3_get_folder_sum (uint16_t folder);
// Wait for mp3_get_folder_sum reply
int mp3_wait_folder_sum ();

// Play mp3 file in selected folder
void mp3_play_file_in_folder (uint8_t folder, uint32_t num);

Нашёл библиотеку, где эта ошибка исправлена, но при компиляции на том же месте вылезла новая: 

          mp3_play_file_in_folder(2, random (43)); // Проигрываем mp3 файлы

Nalivajka_MQ_3_V1.0-27.ino:747: undefined reference to `mp3_play_file_in_folder(unsigned char, unsigned long)'

Acket
Offline
Зарегистрирован: 23.07.2019

Acket пишет:

// Query total file numbers of a folder
void mp3_get_folder_sum (uint16_t folder);
// Wait for mp3_get_folder_sum reply
int mp3_wait_folder_sum ();

// Play mp3 file in selected folder
void mp3_play_file_in_folder (uint8_t folder, uint32_t num);

Нашёл библиотеку, где эта ошибка исправлена, но при компиляции на том же месте вылезла новая: 

          mp3_play_file_in_folder(2, random (43)); // Проигрываем mp3 файлы

Nalivajka_MQ_3_V1.0-27.ino:747: undefined reference to `mp3_play_file_in_folder(unsigned char, unsigned long)'

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

вопрос - эта прошивка к какой схеме? есть описание что и как?

P.S. отказался от реналиватора - нужно править прошивку, а ino не доступна... Всё сделал, а при наливании пауз нет, хреначит веером капли, включается до остановки сервы и стартует ещё не дав стечь остаткам... зря связался...

 

Repz
Offline
Зарегистрирован: 27.11.2019

Acket пишет:

Acket пишет:

// Query total file numbers of a folder
void mp3_get_folder_sum (uint16_t folder);
// Wait for mp3_get_folder_sum reply
int mp3_wait_folder_sum ();

// Play mp3 file in selected folder
void mp3_play_file_in_folder (uint8_t folder, uint32_t num);

Нашёл библиотеку, где эта ошибка исправлена, но при компиляции на том же месте вылезла новая: 

          mp3_play_file_in_folder(2, random (43)); // Проигрываем mp3 файлы

Nalivajka_MQ_3_V1.0-27.ino:747: undefined reference to `mp3_play_file_in_folder(unsigned char, unsigned long)'

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

вопрос - эта прошивка к какой схеме? есть описание что и как?

P.S. отказался от реналиватора - нужно править прошивку, а ino не доступна... Всё сделал, а при наливании пауз нет, хреначит веером капли, включается до остановки сервы и стартует ещё не дав стечь остаткам... зря связался...

 

Схема стандартная, подробное видеоописание на ютюбе канал ReAlm, там же схема, все расжовано. Я тоже долго боролся с непонятными мне ошибками и сделал вывод: 99% проблем с провереными прошивками от других пользователей связаны с проблемами установленой версии IDE программы и различных версий библиотек. Одна и таже прошивка у меня на одном компе компилируется без проблем, на рабочем не хочет, хотя вроде стоит ПО одно и тоже. 

Acket
Offline
Зарегистрирован: 23.07.2019

Схема не реналиватора - там А7 на измерение батарейки и звук на RX TX а тут на софт сериал подключен. по поводу D6 не понятно и алкотестер ещё... может схему свою покажете?

Repz
Offline
Зарегистрирован: 27.11.2019

Acket пишет:

Схема не реналиватора - там А7 на измерение батарейки и звук на RX TX а тут на софт сериал подключен. по поводу D6 не понятно и алкотестер ещё... может схему свою покажете?

Основная схема по реналиватору, но на А7 прикручен датчик MQ-3, DFPlayer - 10, 11 (RX, TX), D6 - Не задействовал. 

Acket
Offline
Зарегистрирован: 23.07.2019

Ок. Спасибо! А сенсоры какой схемы используются с сигналом с коллектора, или с эмиттера?

Acket
Offline
Зарегистрирован: 23.07.2019

Да, вроде Ваша зашла пршивка нормально. Ещё один момент подскажите - Расположение файлов на флэшке как должно быть организовано?

Repz
Offline
Зарегистрирован: 27.11.2019

Acket пишет:

Да, вроде Ваша зашла пршивка нормально. Ещё один момент подскажите - Расположение файлов на флэшке как должно быть организовано?

Я использовал чудо-китайские модули на базе датчиков TCRT-5000. К сожалению образцов файлов музыки не осталось (наливатор продан, уговорили), всё можно найти в сети. Организация звуков и музыкального сопровождения такое:

1. На флешке создаем три папки с методикой нумерации согласно даташита плэера. Нумерация самих музыкальных, звуковых файлов тоже согласно даташита. Ищем в интернете то, что нравиться и перенумеровываем. Закидываем в соостветствующие папки.

2. В первой папке мелодии, проигрываемые при старте 1 - открытие бутылки, 100 - мелодия стартового меню. Далее 101 - запуск рулетки, 102 - финиш рулетки, 103 - нет рюмок при автоналиве. В этой же папке 23 файла с тостами, проигрываются после очередного налива в режиме автомат, ручной. (нумерация 2-24)

2. Вторая папка - сорок два файла мелодий, которые проигрываются в режиме музыка, нумерация 1-42

3. Третья папка - сорок файлов, которые проигрываются после измерения выпитого алкоголя в режиме алкотестера.

Количество мелодий получилось случайным образом, и определилось по наличию понравившихся мелодий на момент правки кода.

Acket
Offline
Зарегистрирован: 23.07.2019

Ок, понял, пока тоже разбираюсь, правлю под себя...

 Вот ещё пара нюансов - 
 case 1: //ХЛОПНУТЬ ПО РЮМАШКЕ
      lcd.setCursor(0, 0);
      lcd.print(F("А НЕ ХЛОПНУТЬ ЛИ"));
      lcd.setCursor(1, 1);
      lcd.print(F("НАМ ПО РЮМАШКЕ?"));
      mp3_play (24);  // Проигрываем "mp3/0024.mp3"
      delay(3500);
      lcd.clear();
      lcd.setCursor(1, 0);
      lcd.print(F("ЗАМЕТЬТЕ, НЕ Я"));
      lcd.setCursor(1, 1);
      lcd.print(F("ЭТО ПРЕДЛОЖИЛ!"));
      break;

тут слово "заметьте" на мгновение появляется правильно, а потом буквы подменяются, типа "иаметлте" - это как победить?

и после наливания датчики без снятия стопок переходят в готовность - есть вероятность перелива, это как сделать, чтобы только через цикл снятия рюмки происходило?

Ещё хочу попробовать сделать возможность легкого отключения всех функций алкотестера, если датчика нет 0 или 1... Если знаний хватит конечно...

 

Repz
Offline
Зарегистрирован: 27.11.2019

Acket пишет:

Ок, понял, пока тоже разбираюсь, правлю под себя...

 Вот ещё пара нюансов - 
 case 1: //ХЛОПНУТЬ ПО РЮМАШКЕ
      lcd.setCursor(0, 0);
      lcd.print(F("А НЕ ХЛОПНУТЬ ЛИ"));
      lcd.setCursor(1, 1);
      lcd.print(F("НАМ ПО РЮМАШКЕ?"));
      mp3_play (24);  // Проигрываем "mp3/0024.mp3"
      delay(3500);
      lcd.clear();
      lcd.setCursor(1, 0);
      lcd.print(F("ЗАМЕТЬТЕ, НЕ Я"));
      lcd.setCursor(1, 1);
      lcd.print(F("ЭТО ПРЕДЛОЖИЛ!"));
      break;

тут слово "заметьте" на мгновение появляется правильно, а потом буквы подменяются, типа "иаметлте" - это как победить?

и после наливания датчики без снятия стопок переходят в готовность - есть вероятность перелива, это как сделать, чтобы только через цикл снятия рюмки происходило?

Ещё хочу попробовать сделать возможность легкого отключения всех функций алкотестера, если датчика нет 0 или 1... Если знаний хватит конечно...

 

С выводом текста тоже были проблемы, игрался долго, решение проблемы было такое - сдвигать текст по строке или замена другим текстом, более коротким. Логики в этой проблеме не уловил. Как вариант - проблема с библиотекой вывода кирилицы.

Repz
Offline
Зарегистрирован: 27.11.2019

Acket пишет:

Ок, понял, пока тоже разбираюсь, правлю под себя...

 Вот ещё пара нюансов - 
 case 1: //ХЛОПНУТЬ ПО РЮМАШКЕ
      lcd.setCursor(0, 0);
      lcd.print(F("А НЕ ХЛОПНУТЬ ЛИ"));
      lcd.setCursor(1, 1);
      lcd.print(F("НАМ ПО РЮМАШКЕ?"));
      mp3_play (24);  // Проигрываем "mp3/0024.mp3"
      delay(3500);
      lcd.clear();
      lcd.setCursor(1, 0);
      lcd.print(F("ЗАМЕТЬТЕ, НЕ Я"));
      lcd.setCursor(1, 1);
      lcd.print(F("ЭТО ПРЕДЛОЖИЛ!"));
      break;

тут слово "заметьте" на мгновение появляется правильно, а потом буквы подменяются, типа "иаметлте" - это как победить?

и после наливания датчики без снятия стопок переходят в готовность - есть вероятность перелива, это как сделать, чтобы только через цикл снятия рюмки происходило?

Ещё хочу попробовать сделать возможность легкого отключения всех функций алкотестера, если датчика нет 0 или 1... Если знаний хватит конечно...

 

С выводом текста тоже были проблемы, игрался долго, решение проблемы было такое - сдвигать текст по строке или замена другим текстом, более коротким. Логики в этой проблеме не уловил. Как вариант - проблема с библиотекой вывода кирилицы. Ближайшее время наливатором заниматься не буду, есть другие проблемы.

Repz
Offline
Зарегистрирован: 27.11.2019

Acket пишет:

Ок, понял, пока тоже разбираюсь, правлю под себя...

 Вот ещё пара нюансов - 
 case 1: //ХЛОПНУТЬ ПО РЮМАШКЕ
      lcd.setCursor(0, 0);
      lcd.print(F("А НЕ ХЛОПНУТЬ ЛИ"));
      lcd.setCursor(1, 1);
      lcd.print(F("НАМ ПО РЮМАШКЕ?"));
      mp3_play (24);  // Проигрываем "mp3/0024.mp3"
      delay(3500);
      lcd.clear();
      lcd.setCursor(1, 0);
      lcd.print(F("ЗАМЕТЬТЕ, НЕ Я"));
      lcd.setCursor(1, 1);
      lcd.print(F("ЭТО ПРЕДЛОЖИЛ!"));
      break;

тут слово "заметьте" на мгновение появляется правильно, а потом буквы подменяются, типа "иаметлте" - это как победить?

и после наливания датчики без снятия стопок переходят в готовность - есть вероятность перелива, это как сделать, чтобы только через цикл снятия рюмки происходило?

Ещё хочу попробовать сделать возможность легкого отключения всех функций алкотестера, если датчика нет 0 или 1... Если знаний хватит конечно...

 

С выводом текста тоже были проблемы, игрался долго, решение проблемы было такое - сдвигать текст по строке или замена другим текстом, более коротким. Логики в этой проблеме не уловил. Как вариант - проблема с библиотекой вывода кирилицы. Ближайшее время наливатором заниматься не буду, есть другие проблемы.

Acket
Offline
Зарегистрирован: 23.07.2019

INO, который выложен на сайте - последней версии? Просто в этом 0001-й файл он звук инициализации аппарата у меня папки MP3 и 01 02 03 созданы. Играет из MP3 тосты из 01 музыку... чего-то туплю все равно по нумерации куда чего

Repz
Offline
Зарегистрирован: 27.11.2019

Организация звука, которую я описал, относится только к моим прошивкам, выложеные на гуглдиске.

Acket
Offline
Зарегистрирован: 23.07.2019

Да, я её и пытаю :)

Acket
Offline
Зарегистрирован: 23.07.2019

блин, тут в ней привязаны к этому датчику случайные наливы в рулетках... у меня постоянно в 4-ю стопку стреляет, без вариантов. сделать выбор 0-1 наличия датчика получилось, только пустой пункт меню остаётся

Acket
Offline
Зарегистрирован: 23.07.2019

а как сделали инверсию работы датчиков в скетче, сижу сравниваю с nalivator_v5.1.5_lcd_dfp_bat_guv и не могу найти как это...

Bornik
Offline
Зарегистрирован: 23.01.2020

Глянь 908 строку там стоит знак у него "<", v.5.1.5" >"

Acket
Offline
Зарегистрирован: 23.07.2019

поменял - зажигание диодов под стопками инвертировалось, но сигнал для налива - нет, отрабатывает наливание по пустым

нашёл:

if (analogRead(Optics[y]) < Optics_porog[y] ) { //Состояние датчиков - инверсия

 

Bornik
Offline
Зарегистрирован: 23.01.2020

Привет! Где это, какая строка?

Acket
Offline
Зарегистрирован: 23.07.2019

И ещё паузы сервопривода перед наливом и после - работает гораздо приятнее так.

 ServoNaliv(y); // Перемещяемся к рюмке
              delay(500);
              pump_timer(Drink); // Налив.
              delay(1000);

По поводу второй замены > на < это в меню автоналива:

 oled_naliv(MenuFlag, Drink, DrinkCount); // Выводим на экран наливаем ...
          byte drink_count = 0;
          for (int y = 0; y < max_DrinkCount; y++) {
            if (analogRead(Optics[y]) < Optics_porog[y] ) { //Состояние датчиков - инверсия
              strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подсвечиваем красным цветом
              strip.show();
              ServoNaliv(y); // Перемещаемся к рюмке
              delay(500);
              pump_timer(Drink); // Налив.
              delay(1000);
              strip.setPixelColor(y, strip.Color(0, 255, 0)); // Подсвечиваем зеленым , налито.
              strip.show();
              drink_count++;
            }

 

Bornik
Offline
Зарегистрирован: 23.01.2020

Acket, вы какой скетч правите?

Как бы мне инверсию сделать в скетче крайнем - v4.2.5. Пришли другие датчики.

 

Acket
Offline
Зарегистрирован: 23.07.2019

v.5.1.5

но у Вас в 4.2.5 всё так же в этом месте:

//Обработка всех нажатий кнопки
		if (enc.isClick()){// Нажата и отпущена кнопка
        if (Menu == 0 && MenuFlag == 0) { //Нажатие кнопки меню авто
          MenuFlag = 1;
          oled_auto(Drink);
        } else if (MenuFlag == 1 ) { //Начинается автоматический разлив
		 mp3_set_volume (15);// устанвливаем громкость 25 (если хотите установить
         delay (100);
		 mp3_play (99);  // Проигрываем бодренькую мелодию
          oled_naliv(MenuFlag); // Выводим на экран наливаем ...
          byte drink_count = 0;
          for (int y = 0; y < max_DrinkCount; y++) {
            if (analogRead(Optics[y]) > Optics_porog[y] ) {
              strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подсвечиваем красным цветом
              strip.show();
              ServoNaliv(y); // Перемещяемся к рюмке
              pump_timer(Drink); // Налив.
              strip.setPixelColor(y, strip.Color(0, 255, 0)); // Подсвечиваем зеленым , налито.
              strip.show();
              drink_count++;
            }

13-я строка... > на < 

Bornik
Offline
Зарегистрирован: 23.01.2020
   482 if (analogRead(Optics[y]) > Optics_porog[y] ) {

Спасибо! Только в этом месте?

 

Gridzilla
Offline
Зарегистрирован: 25.10.2019

Acket пишет:

блин, тут в ней привязаны к этому датчику случайные наливы в рулетках... у меня постоянно в 4-ю стопку стреляет, без вариантов. сделать выбор 0-1 наличия датчика получилось, только пустой пункт меню остаётся

 

Я алкотестер и музыку вообще убрал. Соответственно поменялись данные.

void oled_menu(byte Menu) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(F("  -=СисРМ-5П=-  "));
  lcd.setCursor(0, 1);
  lcd.print(F(">"));
  lcd.setCursor(15, 1);
  lcd.print(F("<"));
  switch (Menu) {
    case 0:
      lcd.setCursor(6, 1);
      lcd.print(F("АВТО"));
      break;
    case 1:
      lcd.setCursor(2, 1);
      lcd.print(F("РУЧНОЙ РЕЖИМ"));
      break;
    case 5:
      lcd.setCursor(4, 1);
      lcd.print(F("ПРОМЫВКА"));
      break;
    case 3:
      lcd.setCursor(3, 1);
      lcd.print(F("VIN.КАЗИНО"));  //наливает случайный объем в пять рюмок
      break;
//    case 6:  //оставил. вдруг захочу вернуть. 
//      lcd.setCursor(5, 1);
//      lcd.print(F("МУЗЫКА"));
//      break;
    case 4:
      lcd.setCursor(1, 1);
      lcd.print(F("CAZINO AMERICA"));   //наливает только в одну рюмку из пяти
      break;
    case 2:
      lcd.setCursor(0, 1);
      lcd.print(F("RUSSIAN ROULETTE"));   //наливает в четыре рюмки
      break;
  }
}

Соответственно поменять все номера void loop () тогда не будет пустых меню, а пин А7 будет свободен, есл только ничего больше на него не вешать.

 

 

И еще момент, вдруг кому интересно:

// Подсветка рюмок в ручном режимме. При повороте энкодера влево будут на 0,5 сек загораться лампочки под рюмками (см. в конце delay(500)). И если поставить рюмку, то будут светиться синим.
void podsvetka () {
       if (DrinkCount == 1) {
      strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
  }  else if (DrinkCount == 2 ) {
    strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
  strip.setPixelColor(1, strip.Color(0, 0, 255)); // Подствечиваем синим 2-ю рюмку
  }  else if (DrinkCount == 3 ) {
      strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
  strip.setPixelColor(1, strip.Color(0, 0, 255)); // Подствечиваем синим 2-ю рюмку
  strip.setPixelColor(2, strip.Color(0, 0, 255)); // Подствечиваем синим 3-ю рюмку
 }  else if (DrinkCount == 4 ) {
      strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
  strip.setPixelColor(1, strip.Color(0, 0, 255)); // Подствечиваем синим 2-ю рюмку
  strip.setPixelColor(2, strip.Color(0, 0, 255)); // Подствечиваем синим 3-ю рюмку
  strip.setPixelColor(3, strip.Color(0, 0, 255)); // Подствечиваем синим 4-ю рюмку
  } else  {
     strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
  strip.setPixelColor(1, strip.Color(0, 0, 255)); // Подствечиваем синим 2-ю рюмку
  strip.setPixelColor(2, strip.Color(0, 0, 255)); // Подствечиваем синим 3-ю рюмку
  strip.setPixelColor(3, strip.Color(0, 0, 255)); // Подствечиваем синим 4-ю рюмку
    strip.setPixelColor(4, strip.Color(0, 0, 255)); // Подствечиваем синим 5-ю рюмку  
  }
   strip.show();
  delay(500);
}

Вставить ее можно тут 

//Вращение влево
   if (encoder_B) {
      if (MenuFlag == 0) {
        //(Menu <= 0 ) ? Menu = 6 : Menu--; // раскоментить если вставить меню музыки, а нижнюю в коммент
          (Menu <= 0 ) ? Menu = 5 : Menu--; // Перемещение курсора по главному меню назад              Menu = 5 если добавлять пункты в меню, то поставить общее тут количество
          oled_menu(Menu);
    } else if (MenuFlag == 1) {
          (Drink <= min_Drink ) ? Drink = max_Drink : Drink -= 5; // Уменьшаем кол-во милилитров в рюмку
          oled_auto(Drink);
    } else if (MenuFlag == 2) {
          (DrinkCount >= max_DrinkCount ) ? DrinkCount = 1 : DrinkCount++; // Влево увечичиваем рюмки для ручного режима
          oled_manual(DrinkCount, Drink);
          podsvetka();  //подсветка рюмок в ручном режиме
    } /* else if (MenuFlag == 6) {
          mp3_next();
          oled_muzon(DrinkCount, Drink);
    } */

Кто по грамотней может сделает более красиво. За основу спасибо Алексею аka Forthomo

Gridzilla
Offline
Зарегистрирован: 25.10.2019

Bornik пишет:

   482 if (analogRead(Optics[y]) > Optics_porog[y] ) {

Спасибо! Только в этом месте?

В начале топика писали про эту проблему http://arduino.ru/forum/proekty/nalivator-avtomatizirovannaya-mashina-kotoraya-budet-razlivat-alkogol-po-stopkam?page=5#comment-478986

Acket
Offline
Зарегистрирован: 23.07.2019

Можете скетч прислать свой на A.Sverdlov@bk.ru? У меня не очень аккуратно получилось порезать и я решил вернуться к 5.1.5... А рулетки и тосты в рандоме нормально у Вас работают? Ещё бы настройки, как в реналиваторе, с громкостью, калибровками с сохранением в епром - и больше ничего для счастья не нужно!

Gridzilla
Offline
Зарегистрирован: 25.10.2019

Acket пишет:
Можете скетч прислать свой на A.Sverdlov@bk.ru? У меня не очень аккуратно получилось порезать и я решил вернуться к 5.1.5... А рулетки и тосты в рандоме нормально у Вас работают? Ещё бы настройки, как в реналиваторе, с громкостью, калибровками с сохранением в епром - и больше ничего для счастья не нужно!

Вот как по мне, то не вижу смысла в настройках.

Положение сервы? Перед заливкой основной прошивки залей это и не надо будет гадать с углом поворота. Вбиваешь данные в скетч и пользуешься. Зачем их потом еще менять? Можно вставить отдельной строкой в меню. Но надо ли? ИМХО, конечно.

#include <LCD_1602_RUS.h>
#include <Servo.h> 
#include "GyverEncoder.h"
LCD_1602_RUS lcd(0x27, 16, 2); //Порт дисплея обычно 0x27 или 0x3F, подключение экрана А4-SDA-зеленый, А5-SCL-желтый

Servo MyServo;
int ServoPos = 0; //Начальный угол поворота сервопривода.    
int PosLevel = 1; //Значение, на которое будет изменятся угол сервопривода.
unsigned long currentTime;
unsigned long loopTime;
const int pin_A = 2;    
const int pin_B = 3;   
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
 
void setup()  
{
  MyServo.attach(9);
  pinMode(pin_A, INPUT);
  pinMode(pin_B, INPUT);
  currentTime = millis();
  loopTime = currentTime; 
  
  lcd.init();
  lcd.backlight();
 } 
 
void loop()  {
  currentTime = millis();
  if(currentTime >= (loopTime + 5)){
    encoder_A = digitalRead(pin_A);    
    encoder_B = digitalRead(pin_B);      
    if((!encoder_A) && (encoder_A_prev)){ 
      if(encoder_B) {
        if(ServoPos + PosLevel <= 180) ServoPos += PosLevel;               
      }   
      else {
        if(ServoPos - PosLevel >= 0) ServoPos -= PosLevel;               
      }   
 
    }   
    encoder_A_prev = encoder_A;     
     
      MyServo.write(ServoPos); //Вращаем сервопривод в зависимости от переменной.
      
    loopTime = currentTime;
        
	      lcd.setCursor(0, 0);
        lcd.print(" УГОЛ ПОВОРОТА  ");
        lcd.setCursor(0, 1);
        lcd.print("ЗНАЧЕНИЕ: " + String(ServoPos));
  }      
 }

Громкость? Я через усилитель делаю. При ем взял простенький активный со старых колонок USBшных. Работет на ура. Громкость убавляет и прибавляет. 

А вот с яркостью было бы не плохо, но пока знаний не хватает. Все методом проб и ошибок в свободное от работы время. Оно, конечно, удобно что все в одном месте, я про настройки, но... ИМХО, в общем. Про насос так же... 

З.Ы. Смотри почту, скинул. 

З.З.Ы. У меня наливатор пока вообще вот так 

Acket
Offline
Зарегистрирован: 23.07.2019

Спасибо! получил! обложился скетчами, теперь через них вникаю в суть программирования. что-то и так интуитивно понятно, что-то подписано, что-то в сравнении... Всем большущее спасибо!!

Averjekk
Offline
Зарегистрирован: 30.03.2020

Здравствуйте ребята, у меня такой вопрос...кто-либо делал 2х осевой севрвопривод для налива? Идея сделать наливатор в одной плоскости ,как можно тоньше, без применения бешеных или чемоданных типов конструкций
P.S Использовал ли кто то кнопки " touch " TTP223 под стеклом, срабатывают ли?