Помпа работает без перерыва

svinia
Offline
Зарегистрирован: 24.06.2019

Нужна помощь, не могу понять в чем проблема, взял код с сайта, но немного изменил схему добавив мосфет

int minv = 600;//малая влажность
int maxv = 220;//полный полив
int normv = 500;//чуть влажная
int value = 0;//полученное значение
int last_value = 0;//последнее значимое изменение
int value_sdvig =50;//значимое изменение 
int ralay = 1; //пин реле
int time_work = 10;//время работы помпы в сек
int analogPin = A0;//пин датчика

//Переменные таймаута

int second = 0; // секунды

int time_off = 0; // счетчик оставшегося времени

int pause_time = 15; // время отдыха после полива в минутах

void setup() {

// put your setup code here, to run once:

Serial.begin(9600);

pinMode(ralay,HIGH);//настройка реле

digitalWrite(ralay, HIGH);

}

void poliv()

{

int time_tmp;

time_tmp=time_work;

digitalWrite(ralay, LOW);

while(time_tmp>0 && value>normv){// ждем истечения времени time_work или нормальной влажности почвы

delay(1000);

value=analogRead(analogPin);//обновляем значение влажности

time_tmp--;

}

digitalWrite(ralay, HIGH);

second=0; // сбрасываем секунды на ноль

time_off=pause_time;// устанавливаем задержку между поливами

}

void loop() {

// put your main code here, to run repeatedly:

value=analogRead(analogPin);

if (value>(last_value+value_sdvig)||value<(last_value-value_sdvig)){// если last_value отклонился на value_sdvig выводим value в uart

Serial.println(value);

last_value=value;

}

if ((value>(minv-value_sdvig)) && time_off<1) poliv();//если значение влажности > критическая влажность - 50 и не было недавних поливов

// временные функции что бы не играться с таймерами

if (second>59)

{

second=0;

if (time_off>0) time_off--;

}

delay(1000);//пауза 1 сек

second++;

}

https://ibb.co/k6B6fQY схема по которой все было собрано

Буду очень признателен за помощь

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

Вставьте код по правилам форума, в схему - в виде картинки. По ссылкам на кривые файлопомойки тут ходить не принято

svinia
Offline
Зарегистрирован: 24.06.2019
int minv = 600;//малая влажность
int maxv = 220;//полный полив
int normv = 500;//чуть влажная
int value = 0;//полученное значение
int last_value = 0;//последнее значимое изменение
int value_sdvig =50;//значимое изменение 
int ralay = 1; //пин реле
int time_work = 10;//время работы помпы в сек
int analogPin = A0;//пин датчика
//Переменные таймаута

int second = 0; // секунды

int time_off = 0; // счетчик оставшегося времени

int pause_time = 15; // время отдыха после полива в минутах

void setup() {

// put your setup code here, to run once:

Serial.begin(9600);

pinMode(ralay,HIGH);//настройка реле

digitalWrite(ralay, HIGH);

}

void poliv()

{

int time_tmp;

time_tmp=time_work;

digitalWrite(ralay, LOW);

while(time_tmp>0 && value>normv){// ждем истечения времени time_work или нормальной влажности почвы

delay(1000);

value=analogRead(analogPin);//обновляем значение влажности

time_tmp--;

}

digitalWrite(ralay, HIGH);

second=0; // сбрасываем секунды на ноль

time_off=pause_time;// устанавливаем задержку между поливами

}

void loop() {

// put your main code here, to run repeatedly:

value=analogRead(analogPin);

if (value>(last_value+value_sdvig)||value<(last_value-value_sdvig)){// если last_value отклонился на value_sdvig выводим value в uart

Serial.println(value);

last_value=value;

}

if ((value>(minv-value_sdvig)) && time_off<1) poliv();//если значение влажности > критическая влажность - 50 и не было недавних поливов

// временные функции что бы не играться с таймерами

if (second>59)

{

second=0;

if (time_off>0) time_off--;

}

delay(1000);//пауза 1 сек

second++;

}

 

svinia
Offline
Зарегистрирован: 24.06.2019

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

Может, объясните в чём проблема? Как оно должно работать? Как работает? В чём разница между первым и вторым?

И да, схему давайте Вашу. Вы что нам дали? Где Ваш мосфет?

А вообще, где брали, там и спрашивайте - автор же вполне доступен. Чего к нам-то? Кстати, там был такой же вопрос. И ответ на него был.

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

svinia - первое что бросается в глаза - вы используете для реле пин 1, а при использовании Serilal пины 0 и 1 заняты! - выберите другой пин для реле

Во-вторых, в функции pinMode() - строка 24 - никакого HIGH быть не должно, исправляйте

svinia
Offline
Зарегистрирован: 24.06.2019

Раз в секунду с датчика влажности на ардуино приходит значение влажности, при получении значения больше 550 arduino должно отправлять сигнал на мосфет, а он должен включать которая должна работать 10 сек, после чего 15 мин не должна работать вообще. А на деле помпа работает безостановочно.

svinia
Offline
Зарегистрирован: 24.06.2019

исправил, спасибо!

svinia
Offline
Зарегистрирован: 24.06.2019

если бы мне это помогло,я бы сюда писать не стал

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

Так схема где? Ваша, а скачанная?

svinia
Offline
Зарегистрирован: 24.06.2019

вам нужна электрическая приницпиальная схема?

kalapanga
Offline
Зарегистрирован: 23.10.2016

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

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

kalapanga пишет:

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

очень похоже на правду.

ТС, вам эти слова "высокий уровень". "низкий" - что-нибудь говорят?

svinia
Offline
Зарегистрирован: 24.06.2019

если ТС это я, то нет

kalapanga
Offline
Зарегистрирован: 23.10.2016

svinia пишет:

если ТС это я, то нет

Во всех digitalWrite(ralay, ...) в скетче поменяйте HIGH на LOW, а LOW на HIGH. Может и заработает, если только в этом отличие.

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

svinia пишет:

вам нужна электрическая приницпиальная схема?

Нам - нет. Это Вам нужно, чтобы мы её увидели, а не гадали на кофейной гуще.

svinia
Offline
Зарегистрирован: 24.06.2019

svinia
Offline
Зарегистрирован: 24.06.2019

kalapanga пишет:

svinia пишет:

если ТС это я, то нет

Во всех digitalWrite(ralay, ...) в скетче поменяйте HIGH на LOW, а LOW на HIGH. Может и заработает, если только в этом отличие.

к сожалению не помогло

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

svinia пишет:

к сожалению не помогло

вставьте код, что получился после всех исправлений

svinia
Offline
Зарегистрирован: 24.06.2019
int minv = 600;//малая влажность
int maxv = 220;//полный полив
int normv = 500;//чуть влажная
int value = 0;//полученное значение
int last_value = 0;//последнее значимое изменение
int value_sdvig =50;//значимое изменение 
int ralay = 6; //пин реле
int time_work = 10;//время работы помпы в сек
int analogPin = A0;//пин датчика
//Переменные таймаута

int second = 0; // секунды

int time_off = 0; // счетчик оставшегося времени

int pause_time = 1; // время отдыха после полива в минутах

void setup() {

// put your setup code here, to run once:

Serial.begin(9600);

pinMode(ralay,HIGH);//настройка реле

digitalWrite(ralay, LOW);

}

void poliv()

{

int time_tmp;

time_tmp=time_work;

digitalWrite(ralay, HIGH);

while(time_tmp>0 && value>normv){// ждем истечения времени time_work или нормальной влажности почвы

delay(1000);

value=analogRead(analogPin);//обновляем значение влажности

time_tmp--;

}

digitalWrite(ralay, LOW);

second=0; // сбрасываем секунды на ноль

time_off=pause_time;// устанавливаем задержку между поливами

}

void loop() {

// put your main code here, to run repeatedly:

value=analogRead(analogPin);

if (value>(last_value+value_sdvig)||value<(last_value-value_sdvig)){// если last_value отклонился на value_sdvig выводим value в uart

Serial.println(value);

last_value=value;

}

if ((value>(minv-value_sdvig)) && time_off<1) poliv();//если значение влажности > критическая влажность - 50 и не было недавних поливов

// временные функции что бы не играться с таймерами

if (second>59)

{

second=0;

if (time_off>0) time_off--;

}

delay(1000);//пауза 1 сек

second++;

}

 

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

строчку 24 так и не исправили

Далее - какие значения value выводтся на печать?

svinia
Offline
Зарегистрирован: 24.06.2019

я не понимаю о чем вы(

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

svinia пишет:

я не понимаю о чем вы(

в строке 66 - у вас значение влажности с датчика должно выводится в монитор порта в Ардуино ИДЕ

Запустите программу, откройте Монитор и посмотрите, какие цифры там печаются.

 

ЗЫ svinia - на нашем форуме предполагается, что вы имеете хоть какие-то знания об Ардуино и программировании. Это касается даже тех, кто пишет  в разделе для чайников.

Если Вы вообще ничего не знаете о пинах, цифровых аналоговых сигналах, уровнях - стоит для начала какую-нить книжку почитать, обучать с нуля вас тут не станут

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

Вы издеваетесь?

В первом посте Вы написали "добавил мосфет". И уже дважды публикуете схему без мосфета.

Повторяю в последний раз, нужна ВАША схема, котораю у Вас работает, а не та, которую Вы откуда-то скачали!

svinia
Offline
Зарегистрирован: 24.06.2019
1023
961
1019
967
908
1013
923
1016
863
1022
963
887
966
796
970
914
995
916
1005
 
b707
Offline
Зарегистрирован: 26.05.2017

svinia пишет:

1023
961
1019
967
908
1005
,,,,,
 

ну вот, сразу все понятно. У вас с датчика идут цифры влажности в диапазоне 900-1000.  А по коду у вас полив включается, если влажность более 600. Поэтому помпа работает всегда.

Датчик влажности либо "мертвый", либо подключен неправильно.

svinia
Offline
Зарегистрирован: 24.06.2019

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

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

svinia пишет:

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

добавьте вывод секунд в Монитор - вставьте Serial.println(second); на строчку 87

svinia
Offline
Зарегистрирован: 24.06.2019

сделал

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

svinia пишет:

сделал

я рад :)

Но вообще-то я ожидал, что Вы расскажете, что и когда выводится в монитор порта :)

svinia
Offline
Зарегистрирован: 24.06.2019

там не появилось ничего нового, выводятся те же данные с датчика

kalapanga
Offline
Зарегистрирован: 23.10.2016

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

int relay = 6; //пин реле
void setup() {
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW); // Попробовать так, потом подставить HIGH
}
void loop() {
}

В одном случае крутиться не должно, в другом должно. Убедитесь по крайней мере, что Ваш мосфетный модуль (а не просто мосфет) работает.