#2 Re: Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-30 01:07:26

renoshnik пише:
Рувим пише:

Вот что в итоге вышло.
Скетч помог довести до ума Eugen Marchel

https://youtu.be/IEnpyVASrMI

Почему видео в разделе "Юмор" разместили ?   smile

Видео не для всего интернета. Доступ только по ссылке и загружал с телефона не увидел такой нюанс.

#4 Re: Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-25 20:50:42

Green пише:

Вы, конечно, можете советовать что Вам угодно. Так же как и другие могут спокойно посылать все Ваши советы, ибо это свободное общество, не так ли?
А меня всегда смущает то, что имея возможность заплатить за пиво, человек тем не мене пытается получить НА ХОЛЯВУ. Типа САМО-СОБОЙ. Или ЛОХОВ полно! Не так ли?


Почитайте внимательно всю переписку.

#5 Re: Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-25 19:55:20

Selen пише:

извияюсь, ошибку сделал

#define TASTE1PIN 2
#define TASTE2PIN 3
#define TASTE3PIN 4
#define WASSERHAHNAUSGANGPIN 7
#define TASTENVIBRATION 150

#include <SimpleTimer.h>
SimpleTimer timer;

bool taste1Gedrueckt = false;
bool taste2Gedrueckt = false;
bool taste3Gedrueckt = false;
bool sperreFunktion = false;

int taste1Dauer = 45; // 45 Sekunden
int taste2Dauer = 120; // 120 Sekunden
int taste3Dauer = 420; //420 Sekunden
int timerID;


void setup() {
  pinMode(TASTE1PIN,INPUT);
  pinMode(TASTE2PIN,INPUT);
  pinMode(TASTE3PIN,INPUT);
  pinMode(WASSERHAHNAUSGANGPIN,OUTPUT);
  digitalWrite(WASSERHAHNAUSGANGPIN,LOW);

}

void loop() {
   timer.run();

 //////Taste1
   if(digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN))
    {
      delay(TASTENVIBRATION);
          if(digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN))
              {
                taste1Gedrueckt = !taste1Gedrueckt;
                
                if(taste1Gedrueckt && !sperreFunktion)
                {
                      timerID = timer.setTimeout(taste1Dauer * 1000, tasteAufgabeStop);
                      digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
                  }    
                if(!taste1Gedrueckt)
                  {
                    sperreFunktion =false;
                    tasteAufgabeStop();
                  }
                }
    }


////Taste 2
   if(digitalRead(TASTE2PIN))
    {
      delay(TASTENVIBRATION);
          if(digitalRead(TASTE2PIN))
              {
                taste2Gedrueckt = !taste2Gedrueckt;
                if(taste2Gedrueckt && !sperreFunktion)
                {
                      timerID = timer.setTimeout(taste2Dauer * 1000, tasteAufgabeStop);
                      digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
                  }
                if(!taste2Gedrueckt)
                  {
                    sperreFunktion =false;
                    tasteAufgabeStop();
                  }
                }      
    }

////Taste 3 und 1

   if(digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN))
    {
      delay(TASTENVIBRATION);
          if(digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN))
              {
                taste3Gedrueckt = !taste3Gedrueckt;
                
                if(taste3Gedrueckt && !sperreFunktion)
                {
                      timerID = timer.setTimeout(taste3Dauer * 1000, tasteAufgabeStop);
                      digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
                  }    
                if(!taste3Gedrueckt)
                  {
                    sperreFunktion =false;
                    tasteAufgabeStop();
                  }
                }
    }

///nur Taste 3
if(digitalRead(TASTE3PIN) && !sperreFunktion)
  {
    digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);
  }
if( !digitalRead(TASTE3PIN) && !sperreFunktion)
{
  digitalWrite(WASSERHAHNAUSGANGPIN,LOW);
}
}

void tasteAufgabeStop()
{
  digitalWrite(WASSERHAHNAUSGANGPIN,LOW);sperreFunktion =false; taste1Gedrueckt = false; taste2Gedrueckt = false; taste3Gedrueckt = false;
  timer.disable(timerID);
}

Вот что получилось.

https://youtu.be/FKqwozXdTAE

#6 Re: Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-25 19:50:05

Green пише:
Selen пише:

@ Green
@ qwone

как говориться, языком  .... не мешки ворочить.  Я и не спорю что новичек. Нигде не учился все что знаю то брал из инета. Пишу как могу. А вы вместо того чтоб критиковать чужую работу , взяли да помогли человеку ,для вас "ВЕЛИКИХ ГУРУ"  это ведь на коленке 2 минуты и это без преувиличения ), а нет по обсуждать как бабки на базаре - медом не корми )

Да, но для "человека" пиво ведь тоже не проблема? Или только ХОЛЯВЫ хочется?


Конечно пиво это не проблема. Но нет возможности заплатить 100$ как некоторые просят.
Хорошо что все люди разные и есть просто интузиасты которым не в лом помочи человеку который не знаком с программированием. Тут можно много рассуждать и в какой-то мере все будут правы.
Просто как по мне. Не готовы вы помочь, просто пройдите мимо. Зачем доказывать что-то другим ?

#7 Re: Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-25 15:30:04

sketch_jan25b:26: error: 'WASSERHAHNAUSGANG' was not declared in this scope

   digitalWrite(WASSERHAHNAUSGANG, LOW);

                ^

exit status 1
'WASSERHAHNAUSGANG' was not declared in this scope



при компиляции видает вот такую ошибку.
Что делать?

#8 Re: Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-25 12:03:04

Selen пише:

теперь понятно. ваши кнопки дают  при нажатии 1, а мой скетч сделан так что нажатие кнопки это 0. нужно скетч переделывать.

попробуйте этот, вроде ничего не забыл

#define TASTE1PIN 2
#define TASTE2PIN 3
#define TASTE3PIN 4
#define WASSERHAHNAUSGANGPIN 7
#define TASTENVIBRATION 150

#include <SimpleTimer.h>
SimpleTimer timer;

bool taste1Gedrueckt = false;
bool taste2Gedrueckt = false;
bool taste3Gedrueckt = false;
bool sperreFunktion = false;

int taste1Dauer = 45; // 45 Sekunden
int taste2Dauer = 120; // 120 Sekunden
int taste3Dauer = 420; //420 Sekunden
int timerID;


void setup() {
  pinMode(TASTE1PIN,INPUT);
  pinMode(TASTE2PIN,INPUT);
  pinMode(TASTE3PIN,INPUT);
  pinMode(WASSERHAHNAUSGANGPIN,OUTPUT);
  digitalWrite(WASSERHAHNAUSGANG, LOW);

}

void loop() {
   timer.run();

 //////Taste1
   if(digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN))
    {
      delay(TASTENVIBRATION);
          if(digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN))
              {
                taste1Gedrueckt = !taste1Gedrueckt;
                
                if(taste1Gedrueckt && !sperreFunktion)
                {
                      timerID = timer.setTimeout(taste1Dauer * 1000, tasteAufgabeStop);
                      digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
                  }    
                if(!taste1Gedrueckt)
                  {
                    sperreFunktion =false;
                    tasteAufgabeStop();
                  }
                }
    }


////Taste 2
   if(digitalRead(TASTE2PIN))
    {
      delay(TASTENVIBRATION);
          if(digitalRead(TASTE2PIN))
              {
                taste2Gedrueckt = !taste2Gedrueckt;
                if(taste2Gedrueckt && !sperreFunktion)
                {
                      timerID = timer.setTimeout(taste2Dauer * 1000, tasteAufgabeStop);
                      digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
                  }
                if(!taste2Gedrueckt)
                  {
                    sperreFunktion =false;
                    tasteAufgabeStop();
                  }
                }      
    }

////Taste 3 und 1

   if(digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN))
    {
      delay(TASTENVIBRATION);
          if(digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN))
              {
                taste3Gedrueckt = !taste3Gedrueckt;
                
                if(taste3Gedrueckt && !sperreFunktion)
                {
                      timerID = timer.setTimeout(taste3Dauer * 1000, tasteAufgabeStop);
                      digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
                  }    
                if(!taste3Gedrueckt)
                  {
                    sperreFunktion =false;
                    tasteAufgabeStop();
                  }
                }
    }

///nur Taste 3
if(digitalRead(TASTE3PIN) && !sperreFunktion)
  {
    digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);
  }
if( !digitalRead(TASTE3PIN) && !sperreFunktion)
{
  digitalWrite(WASSERHAHNAUSGANGPIN,LOW);
}
}

void tasteAufgabeStop()
{
  digitalWrite(WASSERHAHNAUSGANGPIN,LOW);sperreFunktion =false; taste1Gedrueckt = false; taste2Gedrueckt = false; taste3Gedrueckt = false;
  timer.disable(timerID);
}

Попробую сегодня после обеда и отпишусь вам.
Пожалуйста пришлите мне на почту какие-то свои Контакты. Хотелось бы отблагодарить вас smile
Моя Почта. Ruvimx24@gmail.com

#9 Re: Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-25 11:46:15

Green пише:
Рувим пише:

Кнопки у меня вот такие
https://www.aliexpress.com/item/32761802828/32761802828.html

Ну да. С такими кнопками и дурак напишет.

Тоесть вы хотите сказать, что я дурак раз не смог сам написать скетч ? ?

#10 Re: Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-24 23:14:08

Selen пише:

Вот как у меня это работает,
https://www.youtube.com/watch?v=qkVASr_rsI8

Как у вас кнопки подключены? должно быть так пин замыкается кнопкой на землю , а если у вас сенсорные можете прибором(тестером) проверить что  на выходе от сенсорных кнопок при нажатии.
у меня такое ощущение как будто подтягивающие резисторы не работают

Я предлагаю постмотреть какие значения имеют входы на кнопках, загрузите этот скетч  и посмотрите в сериальном мониторе какое значение имеет каждая кнопка.  Должно быть так не нажата 1 нажата 0. значения не должны сами по себе меняться

#define TASTE1PIN 2
#define TASTE2PIN 3
#define TASTE3PIN 4
#define WASSERHAHNAUSGANGPIN 7
#define TASTENVIBRATION 
void setup() {
  Serial.begin(9600);
  pinMode(TASTE1PIN,INPUT_PULLUP);
  pinMode(TASTE2PIN,INPUT_PULLUP);
  pinMode(TASTE3PIN,INPUT_PULLUP);
  pinMode(WASSERHAHNAUSGANGPIN,OUTPUT);
}

void loop() {
  Serial.print("Taste 1 --- "); Serial.println(digitalRead(TASTE1PIN)); 
  Serial.print("Taste 2 --- "); Serial.println(digitalRead(TASTE2PIN)); 
  Serial.print("Taste 3 --- "); Serial.println(digitalRead(TASTE3PIN)); 

}


Мультиметр показывает 3.6 вольта при нажатии на кнопку.

Вот что показывает на новом скетче.

https://youtu.be/cnoPeG_-FWc

Спасибо вам огромное за вашу помощ и уделённое время. Очень ценю таких людей!!!

#11 Re: Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-24 18:00:47

Selen пише:

Для транзистора ШИМ нужен только тогда если вы хотите плавно менять нагрузку, например плавно тушить лампочку. Вы можете пин изменить но это ничего не даст, чтоб активировать ШИМ нужен не digitalWrite a analogWrite.

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

Понял. Я просто думал что шим нужен в любом случае. Буду знать.

Вот что у меня вышло. Почему-то пока работает не коректно. все собрал на коленке конечно.
На видео все видно.

https://youtu.be/SCdWwpoggeo

#12 Re: Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-24 09:35:59

Selen пише:

Написал скеч,
Пин 2 это вход от 1 кнопки
Пин 3 вход от 2ой кнопки
Пин 4 вход от 3 кнопки
Пин 7 выход.
незабудьте установить библиотеку SimpleTimer.hSimpleTimer-master.zip

в зависимости от ваших кнопок может значение антидребезга быть другое
у меня на 150 - #define TASTENVIBRATION 150
чтобы 1 и 3 кнопки нажать надо как бы  - с третей начинать, т.е сначало 3ию и сразу 1ую

#define TASTE1PIN 2
#define TASTE2PIN 3
#define TASTE3PIN 4
#define WASSERHAHNAUSGANGPIN 7
#define TASTENVIBRATION 150

#include <SimpleTimer.h>
SimpleTimer timer;

bool taste1Gedrueckt = false;
bool taste2Gedrueckt = false;
bool taste3Gedrueckt = false;
bool sperreFunktion = false;

int taste1Dauer = 45; // 45 Sekunden
int taste2Dauer = 120; // 120 Sekunden
int taste3Dauer = 420; //420 Sekunden
int timerID;


void setup() {
  pinMode(TASTE1PIN,INPUT_PULLUP);
  pinMode(TASTE2PIN,INPUT_PULLUP);
  pinMode(TASTE3PIN,INPUT_PULLUP);
  pinMode(WASSERHAHNAUSGANGPIN,OUTPUT);
  digitalWrite(WASSERHAHNAUSGANGPIN,LOW);

}

void loop() {
   timer.run();

 //////Taste1
   if(!digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN))
    {
      delay(TASTENVIBRATION);
          if(!digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN))
              {
                taste1Gedrueckt = !taste1Gedrueckt;
                
                if(taste1Gedrueckt && !sperreFunktion)
                {
                      timerID = timer.setTimeout(taste1Dauer * 1000, tasteAufgabeStop);
                      digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
                  }    
                if(!taste1Gedrueckt)
                  {
                    sperreFunktion =false;
                    tasteAufgabeStop();
                  }
                }
    }


////Taste 2
   if(!digitalRead(TASTE2PIN))
    {
      delay(TASTENVIBRATION);
          if(!digitalRead(TASTE2PIN))
              {
                taste2Gedrueckt = !taste2Gedrueckt;
                if(taste2Gedrueckt && !sperreFunktion)
                {
                      timerID = timer.setTimeout(taste2Dauer * 1000, tasteAufgabeStop);
                      digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
                  }
                if(!taste2Gedrueckt)
                  {
                    sperreFunktion =false;
                    tasteAufgabeStop();
                  }
                }      
    }

////Taste 3 und 1

   if(!digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN))
    {
      delay(TASTENVIBRATION);
          if(!digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN))
              {
                taste3Gedrueckt = !taste3Gedrueckt;
                
                if(taste3Gedrueckt && !sperreFunktion)
                {
                      timerID = timer.setTimeout(taste3Dauer * 1000, tasteAufgabeStop);
                      digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
                  }    
                if(!taste3Gedrueckt)
                  {
                    sperreFunktion =false;
                    tasteAufgabeStop();
                  }
                }
    }

///nur Taste 3
if(!digitalRead(TASTE3PIN) && !sperreFunktion)
  {
    digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);
  }
if( digitalRead(TASTE3PIN) && !sperreFunktion)
{
  digitalWrite(WASSERHAHNAUSGANGPIN,LOW);
}
}

void tasteAufgabeStop()
{
  digitalWrite(WASSERHAHNAUSGANGPIN,LOW);sperreFunktion =false; taste1Gedrueckt = false; taste2Gedrueckt = false; taste3Gedrueckt = false;
  timer.disable(timerID);
}

Единственное только, насколько я понял для Мосфет транзистора нужен Шим сигнал а 7 вывод не поддерживает его. Его поддерживают 3,5,6,9,10,11

#13 Re: Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-24 08:57:41

Green пише:

Тут больше проблема в сенсорных кнопках. Какие именно хотелось бы?


Кнопки у меня вот такие
https://www.aliexpress.com/item/32761802828/32761802828.html

#14 Re: Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-23 12:42:14

vvr пише:

это платная или бесплатная помощь ?

А за сколько вы возьмётесь написать такой скетч ?
Просто это не коммерческая деятельность. Делаю чисто для себя. И я все детали заказал на алиекспоес за 300грн
К сожалению не могу заплатить такую цену как предлагают ребята ниже.

#15 Програмування Arduino » Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды) » 2018-01-20 02:08:29

Рувим
відповідей: 52

Хочу сделать умный кран для фильтрований воды. У нас с женой постоянная проблема то, я то жена поставит чайник и пока вода медленно набирается занимаемся своими делами. Потом забываем и только уже когда вода льётся через край вспоминаем о чайнике с водой.

Хочу сделать простую систему на, ардуино нано. Берём три сенсорных кнопки. И для них распечатываем на 3Д принтере небольшой корпус. Подсоединяем к, ардуинке кнопки, мосфет транзистор для управления нагрузкой в 12 в и к мосфету клапан открывания и закрывает воды.

Все что касается хардверной части я сделал, а вот как написать скетч я не знаю sad

Программа должна быть вод такой.

Есть три кнопки, нажав на первую мы набираем стакан. Тоесть проходит допустим 45секунд. Мосфет держит клапан открытым в течении 45секунд. при повторном нажатии на ту же кнопку мосфет закрывается.
На второй кнопке все тожесамое но только уже 2 минуты.
А вот на третей вода льётся только при нажатии. Только убрал палец, клапан закрывается. Но если нажать на третью кнопку и одновременно на первую включается на 7 минут smile
Сам я вообще не знаю как это можно реализовать. Как по мне идея классная и очень полезная для нас и уверен что многим придётся по душе. Но с реализацией у меня возникли проблемы. Буду очень благодарен за помощь

Підвал форуму