ARDUINO Наливатор. Обсуждение проекта

egor1991

✩✩✩✩✩✩✩
10 Окт 2025
4
0
Был не рабочий модуль привода, поменял его и все заработало. Только сейчас при входе в сервисный режим для настройки углов над рюмками, при повороте энкодера он сразу отключается и включается, и так же делает при выборе автоматического режима. В чем может быть проблема? И какой конденсатор должен стоять на помпе, если можно пришлите пожалуйста фото или ссылку

Вот такой нормально?
 

Вложения

ДмитрийСем

✩✩✩✩✩✩✩
22 Май 2025
1
0
Доброго дня! какую строку кода, взятого у Гайвера v1.5, мне нужно откорректировать, чтобы сделать паузу в 2секунды до начала работы серво привода в автоматическом режиме?!
Подробнее: Я устанавливаю автоматический режим наливатора и после установки рюмки сразу же включается сервопривод и поворачивает носик. Я хочу добавить паузу в 2 секунды, чтобы хотя бы успеть убрать руку.
 

Bruzzer

★★★★✩✩✩
23 Май 2020
754
231
какую строку кода, взятого у Гайвера v1.5, мне нужно откорректировать, чтобы сделать паузу в 2секунды до начала работы серво привода ...
Такой строки нет.
Можно предложить следующую конструкцию:
Создать переменную для вычисления задержки и значение требуемой задержки
Например, добавить строки в начало файла GyverDrink_v1.5.ino
#define DELAY_EMPTY_GLASS 2000 //Задержка начала движения сервы после установки рюмки, чтобы не било по рукам
uint32_t timeEmptyGlass; // время когда поставили пустой стакан
Внести изменения в файл c_func.ino
Добавить запоминание времени при добавлении пустой рюмки timeEmptyGlass = millis();
C++:
void flowTick() {
  if (FLOWdebounce.isReady()) {
    for (byte i = 0; i < NUM_SHOTS; i++) {
      bool swState = !digitalRead(SW_pins[i]) ^ SWITCH_LEVEL;
      if (swState && shotStates[i] == NO_GLASS) {  // поставили пустую рюмку
        timeEmptyGlass = millis();                                  // запомнили, когда поставили пустую рюмку. (чтобы сделать задержку начала движения)
        timeoutReset();                                             // сброс таймаута
        shotStates[i] = EMPTY;                                      // флаг на заправку
Добавить проверку окончания задержки в коде отвечающем за начало движения.
отредактировав условие if (systemState == SEARCH)
C++:
// поиск и заливка
void flowRoutnie() {
  if (systemState == SEARCH && (millis() - timeEmptyGlass >= DELAY_EMPTY_GLASS)) {       // если поиск рюмки
    bool noGlass = true;
Ссылка на проект в WOKWI. В нем сделаны указанные изменения. (Но есть и другие, связанные с особенностью переноса в WOKWI)
 
Изменено:

Андрей89

✩✩✩✩✩✩✩
25 Ноя 2023
10
1
Дорого времени суток! Подскажите пожалуйста как сделать чтобы сервопривод на наливаторе вращался в другую сторону? Что нужно поменять в скетче может?
 

Dmitriy_molodechno

✩✩✩✩✩✩✩
21 Авг 2025
13
0
Добрый .Подскажите варианты от пролива капель ,когда серво возвращается в дом?Клапан ставить?И в обратном возвращении домой серво двигается с рывками,это наблюдается только когда возвращается домой после налива.
 

Андрей89

✩✩✩✩✩✩✩
25 Ноя 2023
10
1
@Dmitriy_molodechno, Добрый день от капель помогает ставить трубку меньшего диаметра, ну и клапан тоже не помешает. Я ставлю. А про остальное ничего не могу сказать, что то наверное в скетче
 

LVN

✩✩✩✩✩✩✩
13 Янв 2026
5
0
Всем здравствуйте! Спаял значит проект, залил прошившку - в общем и целом все вроде бы работает, но, как говорится, есть нюансы. Первый заключается в том, что сразу после подачи питания дисплей лишь на доли секунды выдает показания при вращении энкодера, но по истечении 15 сек после последнего взаимодействия (я так понимаю интервал пинания повербанка) дисплей показывает нормально и при повторном вращении энкодера опять гаснет. Второй момент в том, что концевик 1 и 2 позиции (слева-направо по расположению) не реагируют - светодиод не загорается, но при замыкании 5 загорается и 1 и 5, а при замыкании 6 - 2 и 6. Отмечу, что прошивку под себя еще не корректировал, залита в стоке от Алекса. Подскажите, куда копать, в пайке совсем новичок, но вроде все по схеме - несколько раз проверял
 

Bruzzer

★★★★✩✩✩
23 Май 2020
754
231
Отмечу, что прошивку под себя еще не корректировал, залита в стоке от Алекса.
В прошивке с github количество рюмок равно 4. Так что наверно как-то корректировали.
По поводу непонятного поведения. Я бы отключил пауэрбанк, отключил ПОЛНОСТЬЮ помпу и серво, подключил наливатор к ПК и смотрел бы диагностические сообщения по СОМ монитору, как реагирует на постановку рюмок, нажатие кнопок и энкодер.
 
  • Лойс +1
Реакции: LVN

LVN

✩✩✩✩✩✩✩
13 Янв 2026
5
0
@Андрей89, фото присылать страшно) но эти 2 проблемы решил: по дублирующим диодам - выставил в прошивке 6 рюмок; по дисплею - были спаяны + энкодера и + дисплея, но не с общим +. Теперь проблема такая - позиции рюмок перепутаны 1 с 6, 2 с 5, 3 с 4. То есть диод загорается под стопкой, но наливается в другом месте) это с пайкой что-то менять надо или прошивкой можно?
 

Андрей89

✩✩✩✩✩✩✩
25 Ноя 2023
10
1
@LVN, Да как с пайкой так и с прошивкой может быть. Поэтому я и говорю пришли лучше фото, страшно не страшно всё равно присылай. Ну и желательно фото спича прошивки которую заливаешь.
 

LVN

✩✩✩✩✩✩✩
13 Янв 2026
5
0
@Андрей89, будет ли что-то понятно только по этим фото.
IMG_0909.jpegIMG_0910.jpegIMG_0912.jpegIMG_0908.jpeg

*/

// ======== НАСТРОЙКИ ========
#define NUM_SHOTS 6 // количество рюмок (оно же кол-во светодиодов и кнопок!)
#define TIMEOUT_OFF 20 // таймаут на выключение (перестаёт дёргать привод), минут
#define SWITCH_LEVEL 0 // кнопки 1 - высокий сигнал при замыкании, 0 - низкий
#define INVERSE_SERVO 0 // инвертировать направление вращения серво

// положение серво над центрами рюмок
const byte shotPos[] = {15, 50, 85, 120, 150, 180};

// время заполнения 50 мл
const long time50ml = 8500;

#define KEEP_POWER 1 // 1 - система поддержания питания ПБ, чтобы он не спал

// отладка
#define DEBUG_UART 1

// =========== ПИНЫ ===========
#define PUMP_POWER 3
#define SERVO_POWER 4
#define SERVO_PIN 5
#define LED_PIN 6
#define BTN_PIN 7
#define ENC_SW 8
#define ENC_DT 9
#define ENC_CLK 10
#define DISP_DIO 11
#define DISP_CLK 12
const byte SW_pins[] = {A0, A1, A2, A3, A4, A5};

// =========== ЛИБЫ ===========
#include <GyverTM1637.h>
#include <ServoSmooth.h>
#include <microLED.h>
#include <EEPROM.h>
#include "encUniversalMinim.h"
#include "buttonMinim.h"
#include "timer2Minim.h"

// =========== ДАТА ===========
#define COLOR_DEBTH 2 // цветовая глубина: 1, 2, 3 (в байтах)
LEDdata leds[NUM_SHOTS]; // буфер ленты типа LEDdata (размер зависит от COLOR_DEBTH)
microLED strip(leds, NUM_SHOTS, LED_PIN); // объект лента

GyverTM1637 disp(DISP_CLK, DISP_DIO);

// пин clk, пин dt, пин sw, направление (0/1), тип (0/1)
encMinim enc(ENC_CLK, ENC_DT, ENC_SW, 1, 1);

ServoSmooth servo;

buttonMinim btn(BTN_PIN);
buttonMinim encBtn(ENC_SW);
timerMinim LEDtimer(100);
timerMinim FLOWdebounce(20);
timerMinim FLOWtimer(2000);
timerMinim WAITtimer(400);
timerMinim TIMEOUTtimer(15000); // таймаут дёргания приводом
timerMinim POWEROFFtimer(TIMEOUT_OFF * 60000L);

bool LEDchanged = false;
bool pumping = false;
int8_t curPumping = -1;

enum {NO_GLASS, EMPTY, IN_PROCESS, READY} shotStates[NUM_SHOTS];
enum {SEARCH, MOVING, WAIT, PUMPING} systemState;
bool workMode = false; // 0 manual, 1 auto
int thisVolume = 50;
bool systemON = false;
bool timeoutState = false;
bool volumeChanged = false;
bool parking = false;

// =========== МАКРО ===========
#define servoON() digitalWrite(SERVO_POWER, 1)
#define servoOFF() digitalWrite(SERVO_POWER, 0)
#define pumpON() digitalWrite(PUMP_POWER, 1)
#define pumpOFF() digitalWrite(PUMP_POWER, 0)

#if (DEBUG_UART == 1)
#define DEBUG(x) Serial.println(x)
#else
#define DEBUG(x)
#endif
 

LVN

✩✩✩✩✩✩✩
13 Янв 2026
5
0
@Андрей89, теперь начальное положение серво стало над 4 рюмкой. И при замыкании любого концевика начинает наливать 1 рюмку.
 

Андрей89

✩✩✩✩✩✩✩
25 Ноя 2023
10
1
@LVN, Если у тебя сейчас положение на 4 рюмки то переставь серво вручную на нулевую отметку. А вообще лучше пришли как расположен серво у тебя и вид сверху самого наливатора, вот как сейчас он у тебя стоит на четвёртой рюмке
 

LVN

✩✩✩✩✩✩✩
13 Янв 2026
5
0
@Андрей89, при настройке положения серво при параметре инверсии 1 4 рюмка и соответствовала 0. Решил: инверсию вернул 0 и указал положения серво в обратном порядке. Вроде теперь все работает)
 

Андрей89

✩✩✩✩✩✩✩
25 Ноя 2023
10
1
@LVN,ну и хорошо. Так сразу просто и не скажешь, я же вижу всё что там у тебя: как сервл стоит в какую сторону у тебя направление и т.д. 😁
 
  • Лойс +1
Реакции: LVN