Слив унитаза. 2 кнопки.

Мешок51
Offline
Зарегистрирован: 12.03.2022
#include <Servo.h> // подключаем библиотеку для работы с сервоприводом
Servo servo; // объявляем переменную servo типа "servo"
int button2_pin = 3;     // пин кнопки2
int button1_pin = 2;     // пин кнопки
int button1State = 0;          // переменная для хранения состояния кнопки
int button2State = 0;          // переменная для хранения состояния кнопки

void setup() { 

    pinMode(button1_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
    pinMode(button2_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
    servo.attach(4); // привязываем сервопривод к аналоговому выходу 10
    servo.write(0);
}
void loop() {
  
   button1State = digitalRead(button1_pin);// считываем значения с входа кнопки
   if (button1State == HIGH) { 
 
    servo.write(140); //ставим вал на 180
    delay (2000); // задержка в 1 секунду
  }
  else {
     servo.write(0); //ставим вал на 0
    }
  {
  button2State = digitalRead(button2_pin);// считываем значения с входа кнопки
   if (button2State == HIGH) { 
 
    servo.write(140); //ставим вал на 180
    delay (4000); // задержка в 1 секунду
  }
  else {
     servo.write(0); //ставим вал на 0
    }
  }
}

Слив воды с бачка унитаза с двумя кнопками. Кнопка №1 - Короткое нажатие - половина уровня бачка и кнопка №2 короткое нажатие - весь бачок. Размещаю потому как больше нигде не нашел простого, понятного и доступного всем метода организовать "электронный слив" Пользуйтесь на здоровье!

Мешок51
Offline
Зарегистрирован: 12.03.2022

P.S. в комментариях проекта есть некоторые неточности, не обращайте внимания.

Угол поворота сервы настраивается непосредственно при монтаже устройства к сливному клапану..

Время слива также регулируется экспериментальным путем на месте ))

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Ппц даже в голове ни разу не промелькнуло, что нет нигде, потому что нахер никому не нужно ?

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

Мешок51
Offline
Зарегистрирован: 12.03.2022

Kakmyc пишет:
а кнопки вообще подключены чёрт-те как.
Что с ними не так?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Мешок51 пишет:

Kakmyc пишет:
а кнопки вообще подключены чёрт-те как.
Что с ними не так?

Всё не так. Не кнопки, а «змей-горыныч» в количестве двух штук.)))))

И такое сырое бесформенное непонятно что в проекты постить? Ну не знаю... В песочнице этому место.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

BOOM пишет:
В песочнице этому место.

Да даже и там...

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

DetSimen пишет:

BOOM пишет:
В песочнице этому место.

Да даже и там...

Там хотя бы не так стыдно )))

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Когда народ научится писать автоматы.  Простой автомат на 3 состояния . ЗАКРЫТО, КОРОТКИЙ СЛИВ и СЛИВ.  Там даже отработку дребезга делать не надо.

Мешок51
Offline
Зарегистрирован: 12.03.2022

qwone пишет:

Когда народ научится писать автоматы.  Простой автомат на 3 состояния . ЗАКРЫТО, КОРОТКИЙ СЛИВ и СЛИВ.  Там даже отработку дребезга делать не надо.

так научи, чтобы народ не изобретал велосипеды.

Вообще-то автомат не нужен. Цель выполнять одно действие по нажатию кнопки. Не усложняйте!

lilik
Offline
Зарегистрирован: 19.10.2017
#include <Servo.h> // подключаем библиотеку для работы с сервоприводом
Servo servo; // объявляем переменную servo типа "servo"
int button2_pin = 3;     // пин кнопки 2
int button1_pin = 2;     // пин кнопки 1
int button1State = 0;          // переменная для хранения состояния кнопки
int button2State = 0;          // переменная для хранения состояния кнопки

void setup() { 

    pinMode(button1_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
    pinMode(button2_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
    servo.attach(4); // привязываем сервопривод к  выходу 4
    servo.write(0);
}
void loop() {
  
   button1State = digitalRead(button1_pin);// считываем значения с входа 1 кнопки
   if (button1State == HIGH) { 
    servo.write(140); //ставим вал на 140
    delay (2000); // задержка в 2 секунды
     servo.write(0); //ставим вал на 0
  }
   button2State = digitalRead(button2_pin);// считываем значения с входа 2 кнопки
   if (button2State == HIGH) { 
    servo.write(140); //ставим вал на 140
    delay (4000); // задержка в 4 секунды
    servo.write(0); //ставим вал на 0 
  }
 
}

  Вот вариант (от нехер делать, с исправленными комментами (а иначе зачем?)). Сами поищите как убрать из схемы резисторы :-)

Эта тема не проектная, а скорее тренировочная для  детей-студентов и у знатоков ничего не вызовет кроме отврата.

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Мешок51 пишет:

qwone пишет:

Когда народ научится писать автоматы.  Простой автомат на 3 состояния . ЗАКРЫТО, КОРОТКИЙ СЛИВ и СЛИВ.  Там даже отработку дребезга делать не надо.

так научи, чтобы народ не изобретал велосипеды.

Вообще-то автомат не нужен. Цель выполнять одно действие по нажатию кнопки. Не усложняйте!


Вообще-то автомат здесь - самое простое

Мешок51
Offline
Зарегистрирован: 12.03.2022

 

Цитата:
Вот вариант (от нехер делать, с исправленными комментами (а иначе зачем?)). Сами поищите как убрать из схемы резисторы
Спасибо.

Мешок51
Offline
Зарегистрирован: 12.03.2022

 

 

Цитата:
Вообще-то автомат здесь - самое простое
Будьте так любезны, накидайте скетч.

Мешок51
Offline
Зарегистрирован: 12.03.2022

 

Цитата:
Сами поищите как убрать из схемы резисторы :-)
у меня будут сенсорные кнопки что-то из серии ТТР223

Мешок51
Offline
Зарегистрирован: 12.03.2022

Перенесите эту тему сюда http://arduino.ru/node/39529 пожалуйста.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Мешок51 пишет:
Цитата:
Вообще-то автомат здесь - самое простое
Будьте так любезны, накидайте скетч.

Смысла нет. Это как написать по гречески, армянски или грузински. По любому не поймете.

/*автомат*/
enum STATE {CLOSED, SHORT_OPENED, OPENED};
STATE currentState;

void stand(STATE s);// функция перехода
void gate_run();// функция отслеживания состояний

void setup() {
  stand(CLOSED);
}
void loop() {
  gate_run();
}
//----------------------------------------------------------------
void stand(STATE s) { // функция перехода
  currentState = s;
  switch (currentState) {
    case CLOSED:
      /*закрыть*/
      break;
    case SHORT_OPENED:
      /*коротко открыть*/
      break;
    case OPENED:
      /*длинно открыть*/
      break;
  }
}
void gate_run() {
  switch (currentState) {
    case CLOSED:
      if (true /*команда коротко открыть*/)stand(SHORT_OPENED);
      else if (true /*команда коротко открыть */)stand(OPENED);
      break;
    case SHORT_OPENED:
      if (true /*время исткло*/)stand(CLOSED);
      break;
    case OPENED:
      if (true /*время исткло*/)stand(CLOSED);
      break;
  }
}

 

Мешок51
Offline
Зарегистрирован: 12.03.2022

Цитата:
  По любому не поймете.
Вот тут я просто не могу с вами не согласиться! )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Господа, кто-нибудь, ради Христа, можете мне пояснить НАЮХА? Чем это отличается от нажатия кнопки на самом унитазе (сливном бачке)? Выигрыш-то в чём?

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Выигрыш-то в чём?

Типичный гавно-проект. В данном случае в прямом и переносном смысле :)))

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Господа, кто-нибудь, ради Христа, можете мне пояснить НАЮХА? Чем это отличается от нажатия кнопки на самом унитазе (сливном бачке)? Выигрыш-то в чём?

дальше приделать датчики и принтер и, если короткий слив делать анализ мочи ...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Мешок51 пишет:

Цитата:
  По любому не поймете.
Вот тут я просто не могу с вами не согласиться! )))

Тогда не вижу смысла в помощи Вам. Все программы сейчас так или иначе автоматы, явно или не явно написанные. И если Вы в автоматах не разберетесь, то Вам придется клянчить программы.

/*автомат*/
#include <Servo.h> // подключаем библиотеку для работы с сервоприводом
Servo servo; // объявляем переменную servo типа "servo"
const int button2_pin = /*пин*/3;     // пин кнопки2
const int button1_pin = /*пин*/2;     // пин кнопки

enum STATE {CLOSED, SHORT_OPENED, OPENED};
STATE currentState;
unsigned long past;

void stand(STATE s);// функция перехода
void gate_run();// функция отслеживания состояний

void setup() {
  pinMode(button1_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
  pinMode(button2_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
  servo.attach(/*пин*/4); // привязываем сервопривод к аналоговому выходу 10
  stand(CLOSED);
}
void loop() {
  gate_run();
}
//----------------------------------------------------------------
void stand(STATE s) { // функция перехода
  currentState = s;
  past = millis();
  switch (currentState) {
    case CLOSED:
      /*закрыть*/
      servo.write(0);
      break;
    case SHORT_OPENED:
      /*коротко открыть*/
      servo.write(140);
      break;
    case OPENED:
      /*длинно открыть*/
      servo.write(140);
      break;
  }
}
void gate_run() {
  switch (currentState) {
    case CLOSED:
      if (digitalRead(button1_pin) == HIGH /*команда коротко открыть*/)stand(SHORT_OPENED);
      else if (digitalRead(button2_pin) == HIGH  /*команда коротко открыть */)stand(OPENED);
      break;
    case SHORT_OPENED:
      if (millis() - past == 2000 /*время исткло*/)stand(CLOSED);
      break;
    case OPENED:
      if (millis() - past == 4000 /*время исткло*/)stand(CLOSED);
      break;
  }
}

 

lilik
Offline
Зарегистрирован: 19.10.2017

ua6em пишет:

ЕвгенийП пишет:

Господа, кто-нибудь, ради Христа, можете мне пояснить НАЮХА? Чем это отличается от нажатия кнопки на самом унитазе (сливном бачке)? Выигрыш-то в чём?

дальше приделать датчики и принтер и, если короткий слив делать анализ мочи ...

:-)))

У меня кнопка за спиной, при сидении не всегда удобно жать...

...надо приложение на смартфон написать и блютуз модуль в бачок...

...и получить мировое господство в отдельно взятом доме (кнопку унитаза сломать "есстеснно")

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

lilik пишет:

...надо приложение на смартфон написать и блютуз модуль в бачок...

Со стримингом процесса во все соцсети.

Мешок51
Offline
Зарегистрирован: 12.03.2022

qwone пишет:

Мешок51 пишет:

Цитата:
  По любому не поймете.
Вот тут я просто не могу с вами не согласиться! )))

Тогда не вижу смысла в помощи Вам. Все программы сейчас так или иначе автоматы, явно или не явно написанные. И если Вы в автоматах не разберетесь, то Вам придется клянчить программы.

/*автомат*/
#include <Servo.h> // подключаем библиотеку для работы с сервоприводом
Servo servo; // объявляем переменную servo типа "servo"
const int button2_pin = /*пин*/3;     // пин кнопки2
const int button1_pin = /*пин*/2;     // пин кнопки

enum STATE {CLOSED, SHORT_OPENED, OPENED};
STATE currentState;
unsigned long past;

void stand(STATE s);// функция перехода
void gate_run();// функция отслеживания состояний

void setup() {
  pinMode(button1_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
  pinMode(button2_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
  servo.attach(/*пин*/4); // привязываем сервопривод к аналоговому выходу 10
  stand(CLOSED);
}
void loop() {
  gate_run();
}
//----------------------------------------------------------------
void stand(STATE s) { // функция перехода
  currentState = s;
  past = millis();
  switch (currentState) {
    case CLOSED:
      /*закрыть*/
      servo.write(0);
      break;
    case SHORT_OPENED:
      /*коротко открыть*/
      servo.write(140);
      break;
    case OPENED:
      /*длинно открыть*/
      servo.write(140);
      break;
  }
}
void gate_run() {
  switch (currentState) {
    case CLOSED:
      if (digitalRead(button1_pin) == HIGH /*команда коротко открыть*/)stand(SHORT_OPENED);
      else if (digitalRead(button2_pin) == HIGH  /*команда коротко открыть */)stand(OPENED);
      break;
    case SHORT_OPENED:
      if (millis() - past == 2000 /*время исткло*/)stand(CLOSED);
      break;
    case OPENED:
      if (millis() - past == 4000 /*время исткло*/)stand(CLOSED);
      break;
  }
}

 

Вот спасибо огромное!

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

ЕвгенийП пишет:

Со стримингом процесса во все соцсети.

Так то, по ТЗ ТСа стриминг только в коммунальную сеть предполагается на данном этапе. 

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

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Rumata пишет:

А вообще, идея по заполнению г0в№ом информационного пространства исчерпывающе реализована множеством способов

В том числе этим топиком

Morroc
Offline
Зарегистрирован: 24.10.2016

ЕвгенийП пишет:

Чем это отличается от нажатия кнопки на самом унитазе (сливном бачке)? Выигрыш-то в чём?

Физические кнопки это фуу, только сенсорные, желательно в виде экранчика на который можно картинки заливать )

Вообще тема может иметь смысл если заменить кнопки бесконтактными датчиками, но тогда надо и кран с такими и сушилку для рук и на ручку двери что то такое (а задницу бесконтактно мыть и сушить - это вообще отдельная серьезная тема).