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

VICLER

★★★★★★✩
9 Дек 2019
801
662
Hamburg
А я думаю зря, в ручную я могу подкорректировать угол любой рюмки и я знаю точно, что у меня там прописано, но кому как удобнее.
ну почему же зря, это ведь просто дополнительная функция, которой не обязательно пользоваться. Как и объём можно прописать в ручную.
 
  • Лойс +1
Реакции: Konder885

VICLER

★★★★★★✩
9 Дек 2019
801
662
Hamburg
обновил прошивки
- в сервис режиме при наличии рюмки на дисплее отображается номер рюмки (начиная с 1) и положение крана для этой рюмки в градусах.
Чтобы изменить положение крана над определённой рюмкой нужно поставить рюмку, подстроить угол энкодером и убрать рюмку.
После выхода из сервисного режима зажатием кнопки энкодера, все углы сохранятся в постоянной памяти.

эта функция имеет смысл только при самой первой прошивке наливатора для калибровки углов. Если же все углы известны, можно по старинке прописать их в shotPos[] и забыть про это сообщение.

также заметил, что при наливе некоторых значений ёмкости (например 24мл) наливается 25, поэтому пришлось немного повысить частоту основного цикла( с 50Гц до 66Гц), что дало немного больше точности вылитой жидкости и её подсчёта.

GitHub

Стоит заметить, что если изменили углы или время для 50мл из сервисного режима, то даже при новой перепрошивке эти данные подгрузятся из постоянной памяти если её не почистить.
 
Изменено:
  • Лойс +1
Реакции: slavikslk

TimicH

★★✩✩✩✩✩
9 Фев 2020
127
60
63
Новосибирск
VICLER, post: 35288, member: 10843"]
обновил прошивки

Попробовал, вопрос - в парковку "0" не уходит, что сделать. Особенно это важно по завершении "процесса"!
Выключаю питание, включаю - паркуется нормально
 

TimicH

★★✩✩✩✩✩
9 Фев 2020
127
60
63
Новосибирск
@TimicH, что изменяли в прошивке? Сейчас проверил, у меня всё работает
Поковырял немного ;) сейчас верну исходные, проверю

Поставил "чистую" прошивку, заменил только свои углы
Как и прошлый раз у меня "виснет" энкодер.
В предыдущей прошивке всё отлично, чо за фигня
 

VICLER

★★★★★★✩
9 Дек 2019
801
662
Hamburg
@TimicH, у меня Arduino Micro и я заметил, что у меня всегда всё виснет, если во время работы открыть Serial, а потом закрыть. Всё как-бы работает, но оооочень медленно. У Вас какая плата?
 

TimicH

★★✩✩✩✩✩
9 Фев 2020
127
60
63
Новосибирск
Здесь не чат. Сообщения можно редактировать
Arduino NANO

Я сейчас взял encUniversalMinim.h от предыдущей версии, энкодер заработал, а вот единственно не паркуется, сейчас попробую почистить EEPROM

Наверно я алгоритм работы до конца не понял (инструкцию всегда нужно читать!), паркуется нормально, но только в ручном режиме, в автомате висит над последней налитой рюмкой, правильно?
 

VICLER

★★★★★★✩
9 Дек 2019
801
662
Hamburg
Наверно я алгоритм работы до конца не понял (инструкцию всегда нужно читать!), паркуется нормально, но только в ручном режиме, в автомате висит над последней налитой рюмкой, правильно?
Ага, так и задуманно)

Можете скинуть ваш файл encUniversalMinim.h ?
Просто странно что-то, почему у меня работает, а у Вас нет. Сравню их
 

TimicH

★★✩✩✩✩✩
9 Фев 2020
127
60
63
Новосибирск
С этой версией у меня всё работает
// мини-класс для работы с энкодером, версия 1.0

class encMinim
{
public:
encMinim(uint8_t clk, uint8_t dt, uint8_t sw, boolean dir, boolean type);
void tick();
boolean isClick();
boolean isTurn();
boolean isRight();
boolean isLeft();
boolean isRightH();
boolean isLeftH();

private:
byte _clk, _dt, _sw;
boolean _type = false;
boolean _state, _lastState, _turnFlag, _swState, _swFlag, _turnState;
byte _encState;
uint32_t _debTimer;
// 0 - ничего, 1 - лево, 2 - право, 3 - правоНажат, 4 - левоНажат
};

encMinim::encMinim(uint8_t clk, uint8_t dt, uint8_t sw, boolean dir, boolean type) {
if (dir) {
_clk = clk;
_dt = dt;
} else {
_clk = dt;
_dt = clk;
}
_sw = sw;
_type = type;
pinMode (_clk,INPUT_PULLUP);
pinMode (_dt,INPUT_PULLUP);
pinMode (_sw, INPUT_PULLUP);
_lastState = digitalRead(_clk);
}

void encMinim::tick() {
_encState = 0;
_state = digitalRead(_clk);
_swState = digitalRead(_sw);

if (_state != _lastState) {
_turnState = true;
_turnFlag = !_turnFlag;
if (_turnFlag || !_type) {
if (digitalRead(_dt) != _lastState) {
if (_swState) _encState = 1;
else _encState = 3;
} else {
if (_swState) _encState = 2;
else _encState = 4;
}
}
_lastState = _state;
}

if (!_swState && !_swFlag && millis() - _debTimer > 80) {
_debTimer = millis();
_swFlag = true;
_turnState = false;
}
if (_swState && _swFlag && millis() - _debTimer > 80) {
_debTimer = millis();
_swFlag = false;
if (!_turnState) _encState = 5;
}
}
boolean encMinim::isTurn() {
if (_encState > 0 && _encState < 5) {
return true;
} else return false;
}
boolean encMinim::isRight() {
if (_encState == 1) {
_encState = 0;
return true;
} else return false;
}
boolean encMinim::isLeft() {
if (_encState == 2) {
_encState = 0;
return true;
} else return false;
}
boolean encMinim::isRightH() {
if (_encState == 3) {
_encState = 0;
return true;
} else return false;
}
boolean encMinim::isLeftH() {
if (_encState == 4) {
_encState = 0;
return true;
} else return false;
}
boolean encMinim::isClick() {
if (_encState == 5) {
_encState = 0;
return true;
} else return false;
}
 

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

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
@VICLER, А я сделал так, что когда все рюмки налиты и новых нет (авто режим), то произносится тост (ну это особенность версии) и носик идет в место парковки и останавливается там. Но если во время движения успеть поставить новую рюмку, он изменит свое движение и вместо парковки пойдет к рюмке.
 

TimicH

★★✩✩✩✩✩
9 Фев 2020
127
60
63
Новосибирск
@VICLER, А я сделал так, что когда все рюмки налиты и новых нет (авто режим), то произносится тост (ну это особенность версии) и носик идет в место парковки и останавливается там. Но если во время движения успеть поставить новую рюмку, он изменит свое движение и вместо парковки пойдет к рюмке.
Да, это было бы классно, но у некоторых "из носа капает", наверно зависание над рюмкой полезно.
 

VICLER

★★★★★★✩
9 Дек 2019
801
662
Hamburg
@Старик Похабыч, во всех версиях Алекса и моих носик тоже едет к рюмке, если её поставить во время движения в домашнюю позицию как в ручном, так и в авто режиме. А в авто режиме у меня не едет просто потому что мне так больше нравится:D Да и меньше лишних движений)
 
  • Лойс +1
Реакции: slavikslk

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

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
ну у меня это обусловлено логикой. Изменение количества наливаемой жижи возможно только в парковочном положении. Так что если в авто режиме требуется изменение , то надо дождаться когда носик вернется, тогда можно вращением поменять и без доп. нажатий продолжить рОзлив
 
  • Лойс +1
Реакции: Painoff

VICLER

★★★★★★✩
9 Дек 2019
801
662
Hamburg
@TimicH, нашёл проблемку. У меня инициализация пинов энкодера была без подтяжки к VCC. Спасибо за содействие)
 

Soni666

✩✩✩✩✩✩✩
30 Ноя 2019
24
4
Харьков
@VICLER, А я сделал так, что когда все рюмки налиты и новых нет (авто режим), то произносится тост (ну это особенность версии) и носик идет в место парковки и останавливается там. Но если во время движения успеть поставить новую рюмку, он изменит свое движение и вместо парковки пойдет к рюмке.

А можно прошивку с тостами? А то мп3 модуль есть а как прикрутить незнаю.
 

vitt76

✩✩✩✩✩✩✩
15 Апр 2020
7
0
Всем привет! Собрал наливатор, все работает, спасибо автору!
Но есть проблема в светодиодах - они горят постоянно зеленым от начала подачи питания до окончания, на концевики не реагируют.
Купил обычные светодиоды, не от ленты, а с четырьмя ножками, может, в этом проблема?
Хотя, собирал по первой схеме и схема подключения совпадает со схемой на странице продавца.
Выходит так, что на них постоянно подаётся +5В, вот они и горят, даже если управляющие ноги совсем отпаять.
И не совсем понимаю, что им должна в этом случае командовать 6я нога, не гореть? Если да, то она ни фига не командует.
Ардуину пробовал другую, не помогает, все равно горят.
 

VICLER

★★★★★★✩
9 Дек 2019
801
662
Hamburg
@vitt76, похоже на то, что концевики постоянно замкнуты. Какие использовали? Как подключали? Светодиоды адрессные?
 
  • Лойс +1
Реакции: vitt76