Помпа работает без перерыва
- Войдите на сайт для отправки комментариев
Нужна помощь, не могу понять в чем проблема, взял код с сайта, но немного изменил схему добавив мосфет
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 схема по которой все было собрано
Буду очень признателен за помощь
Вставьте код по правилам форума, в схему - в виде картинки. По ссылкам на кривые файлопомойки тут ходить не принято
Может, объясните в чём проблема? Как оно должно работать? Как работает? В чём разница между первым и вторым?
И да, схему давайте Вашу. Вы что нам дали? Где Ваш мосфет?
А вообще, где брали, там и спрашивайте - автор же вполне доступен. Чего к нам-то? Кстати, там был такой же вопрос. И ответ на него был.
svinia - первое что бросается в глаза - вы используете для реле пин 1, а при использовании Serilal пины 0 и 1 заняты! - выберите другой пин для реле
Во-вторых, в функции pinMode() - строка 24 - никакого HIGH быть не должно, исправляйте
Раз в секунду с датчика влажности на ардуино приходит значение влажности, при получении значения больше 550 arduino должно отправлять сигнал на мосфет, а он должен включать которая должна работать 10 сек, после чего 15 мин не должна работать вообще. А на деле помпа работает безостановочно.
исправил, спасибо!
если бы мне это помогло,я бы сюда писать не стал
Так схема где? Ваша, а скачанная?
вам нужна электрическая приницпиальная схема?
Небось в оригинале релюшка низким уровнем включалась, в отличие от этого модуля. Вот оно теперь как в сетапе включится, так больше никогда и не выключается.
Небось в оригинале релюшка низким уровнем включалась, в отличие от этого модуля. Вот оно теперь как в сетапе включится, так больше никогда и не выключается.
очень похоже на правду.
ТС, вам эти слова "высокий уровень". "низкий" - что-нибудь говорят?
если ТС это я, то нет
если ТС это я, то нет
Во всех digitalWrite(ralay, ...) в скетче поменяйте HIGH на LOW, а LOW на HIGH. Может и заработает, если только в этом отличие.
вам нужна электрическая приницпиальная схема?
Нам - нет. Это Вам нужно, чтобы мы её увидели, а не гадали на кофейной гуще.
если ТС это я, то нет
Во всех digitalWrite(ralay, ...) в скетче поменяйте HIGH на LOW, а LOW на HIGH. Может и заработает, если только в этом отличие.
к сожалению не помогло
к сожалению не помогло
вставьте код, что получился после всех исправлений
строчку 24 так и не исправили
Далее - какие значения value выводтся на печать?
я не понимаю о чем вы(
я не понимаю о чем вы(
в строке 66 - у вас значение влажности с датчика должно выводится в монитор порта в Ардуино ИДЕ
Запустите программу, откройте Монитор и посмотрите, какие цифры там печаются.
ЗЫ svinia - на нашем форуме предполагается, что вы имеете хоть какие-то знания об Ардуино и программировании. Это касается даже тех, кто пишет в разделе для чайников.
Если Вы вообще ничего не знаете о пинах, цифровых аналоговых сигналах, уровнях - стоит для начала какую-нить книжку почитать, обучать с нуля вас тут не станут
Вы издеваетесь?
В первом посте Вы написали "добавил мосфет". И уже дважды публикуете схему без мосфета.
Повторяю в последний раз, нужна ВАША схема, котораю у Вас работает, а не та, которую Вы откуда-то скачали!
ну вот, сразу все понятно. У вас с датчика идут цифры влажности в диапазоне 900-1000. А по коду у вас полив включается, если влажность более 600. Поэтому помпа работает всегда.
Датчик влажности либо "мертвый", либо подключен неправильно.
но у меня же к коде прописан минутный перерыв между поливами
но у меня же к коде прописан минутный перерыв между поливами
добавьте вывод секунд в Монитор - вставьте Serial.println(second); на строчку 87
сделал
сделал
я рад :)
Но вообще-то я ожидал, что Вы расскажете, что и когда выводится в монитор порта :)
там не появилось ничего нового, выводятся те же данные с датчика
Я бы для верности ещё саму помпу на управляемость проверил.
В одном случае крутиться не должно, в другом должно. Убедитесь по крайней мере, что Ваш мосфетный модуль (а не просто мосфет) работает.