Автополив

Тема в разделе "Arduino & Shields", создана пользователем Nico_and_the_niners, 18 дек 2021.

  1. Здравствуйте! Помогите, пожалуйста, после того как значения датчика превышают значения потенциометра - помпа не выключается... что делать?

    Код (C++):
    // номер пина датчика влажности почвы
    #define datchik A0
    // номер пина потенциометра
    #define pot A1
    // номер пинов мини-реле через которое подключена помпа
    #define pompa A3
    // номера пинов светодиодов
    #define led_red 7
    #define led_green 6

    void setup()
    {
      pinMode(pompa, OUTPUT); // пин помпы в режиме выхода
      pinMode(led_green, OUTPUT); // пин диода "нормальный режим" в режиме выхода
      pinMode(led_red, OUTPUT);   // пин диода "авария" в режиме выхода
      pinMode(0, OUTPUT);
      Serial.begin(9600);     // запускаем связь по последовательному порт
    }

    void loop()
    {
     
      int alarm = 0;          // счетчик срабатываний помпы обнуляем при первом запуске
      begin:                  // метка начала программы
      // считываем текущее показания потенциометра
      int valuePot = analogRead(pot);
      // считываем текущее показания датчика влажности почвы
      int valueDatchik = analogRead(datchik);
      // если показания датчика влажности почвы стали ниже порога, заданного потенциометром
      if (valueDatchik < valuePot)
      {
        //digitalWrite(led_green, HIGH); // зажигаем зеленый светодиод
        digitalWrite(led_red, LOW); // тушим красный светодиод
        digitalWrite(pompa, HIGH); // включаем помпу
        delay(5000);               // задаем время работы помпы
        digitalWrite(pompa, LOW);  // отключаем помпу
        delay(10000);               // время паузы в работе помпы после полива
        alarm = alarm + 1;         // увеличиваем значение счетчика срабатываний помпы
        Serial.println(alarm);     // выводим в последовательный порт число срабатываний помпы
        if (alarm > 5)             // если после 5 срабатываний показания влажности не достигли порога
        {
          Serial.println("avariya"); // выводим в последовательный порт надпись "avariya"
          digitalWrite(led_green, LOW); // тушим зеленый светодиод
          digitalWrite(led_red, HIGH); // зажигаем красный светодиод
          digitalWrite(pompa, LOW);
          tone(0, 440);
          delay(1000);
          noTone(0);
          delay(1000);
          tone(0, 440);
          delay(1000);
          noTone(0);
          delay(1000);
          tone(0, 440);
          delay(1000);
          noTone(0);
          delay(3600000);           // время паузы при аварии должно быть достаточно большим    
        }
       }
      else // если показания датчика влажности почвы стали выше порога, заданного потенциометром
      {
        digitalWrite(led_green, HIGH); // зажигаем зеленый светодиод
        digitalWrite(led_red, LOW); // тушим красный светодиод
        digitalWrite(pompa, LOW);   // выключаем помпу
        alarm = 0;                  // обнуляем счетчик срабатываний помпы
      }
      goto begin;                   // прыгаем в начало программы
    }
     
  2. Т.е. после полива помпа дальше продолжает поливать несмотря на то, что в коде я её выключаю
    Такая же проблема и после "аварии"... помпа работает дальше
     
  3. parovoZZ

    parovoZZ Гуру

    Гото бегин - это куда???
     
  4. Там где написано "begin:"
    Код (C++):
    void loop()
    {
      int alarm = 0;          // счетчик срабатываний помпы обнуляем при первом запуске
      begin:                  // метка начала программы
      // считываем текущее показания потенциометра
     
  5. akl

    akl Гуру

    загрузи вот такую программу и посмотри будет ли помпа выключаться.
    Код (C++):

    #define pompa A3
    void setup()
    {
      pinMode(pompa, OUTPUT); // пин помпы в режиме выхода

    }
    void loop()
    {  
       digitalWrite(pompa, HIGH); // включаем помпу
        delay(5000);               // задаем время работы помпы
        digitalWrite(pompa, LOW);  // отключаем помпу
        delay(10000);
    }
     
    если не будет - значит проблема не в программе, а что-то с помпой или релешкой.
    еще попробуй пин поменять с A3 на какой-нибудь другой, желательно на другом порту
     

  6. Попробовал, Ваш код работает
     
  7. akl

    akl Гуру

    тогда надо прежде всего избавиться от гото и сделать там просто цикл.
    зачем ваще обнулять эту переменую там - можно сделать ее глобальной и присвоить ей нуль изначально
     
  8. akl

    akl Гуру

    но вероятно глюк из-за того что пин 0 назначен выходом. ващет это rx от сериала, с какой целью его трогать
     
  9. parovoZZ

    parovoZZ Гуру

    А зачем???
     
  10. Я не знаю где логика, но все заработало. Я просто везде поменял значения - где написано (pompa, HIGH), я поменял на (pompa, LOW), (c LOW на HIGH)
     
  11. akl

    akl Гуру

    наверно релешка с инвертированным входом. но тогда бы помпа сразу запускалась при старте программы. короче какая-то мистика
     
  12. Запускается))
    Теперь думаю как это исправить... написать delay(?)
     
  13. Скорее всего Вы правы, потому что когда помпа не поливает, на реле светится красный светодиод, хотя должен светиться при работе
    Реле у меня от амперки (Мини-реле (Troyka-модуль))
     
  14. akl

    akl Гуру

    просто в сетапе в начале пропиши digitalWrite(pompa, HIGH); чтобы помпа не включалась при старте.
     
  15. akl

    akl Гуру

    а ваще, у релешки же должны быть три выходных ноги - одна из них замыкается на две другие по очереди. подключи помпу к другим ногам
     
  16. akl

    akl Гуру

    вот так оно работает
    [​IMG]
     
    SergeiL нравится это.
  17. Airbus

    Airbus Радиохулиган Модератор

    [​IMG]
     
    Igor68, DetSimen и Nico_and_the_niners нравится это.
  18. Un_ka

    Un_ka Гуру

    Так. С помощью плохой системы управления помпой можно либо залить, либо засушить растение.

    Я делал полив по расписанию с включением помпы в определённое время. Показания ёмкостного датчика влажности использовал для контроля. Не следует его показания считать основными при решении поливать или нет в определённый момент времени, т.к. влажность почвы сильно зависит от влажности воздуха, а также для каждого вида растений предпочтителен свой режим полива.
     
  19. SergeiL

    SergeiL Оракул Модератор

    Смысл у Gardena в том, что есть бак на 10л, там помпа.
    Gardena включает помпу на 1 минуту после включения питания.
    После этого, если питание не отключается, помпа включается через каждые 24 часа на 1 мин.
    От помпы - 3 трубки на три распределителя.
    Распределители имеют по 12 подключений тонких трубок, которые подводятся к цветам.
    Пропускная способность распределителей 15, 30 и 60мл в сутки. То есть можно выбирать сколько подавать воды каждому цветку.
    Плюс комбинировать подключая к растению 2-3 разных трубочки.
    В комплекте есть затычки, ненужные выходы - закрываются.
    upload_2021-12-20_10-32-49.png
    upload_2021-12-20_10-33-11.png
    Вроде все красиво и прекрасно. В таком виде и начинал пользоваться устройством.

    НО, как выяснилось позже, есть проблемы:
    1) Если в один день выключают/ включают электричество - Gardena польет столько раз, сколько включали электричество.
    2) Растениям в разное время года требуется разное кол-во воды (испаряемость и потребление разные). То залило, то сухо.

    Правильней измерять влажность почвы, но растений много, и я пошел более простым вариантом - подключил поливалку через электронный таймер розетку.
    Таймер недельный, программируется время включения и время выключения (я выставил через две минуты после включения) на каждый день.
    Таким образом решается проблема номер 1. Питание на поливалку подается только в нужное время на две минуты.
    Проблема номер 2 решается пропусками дней в зимний период.

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

    В выходные был в Икее купил такую штуку:

    upload_2021-12-20_11-15-53.png

    Это индикатор влажности почвы, начинает мигать, когда нужно полить цветок.
    Купил две штуки (каждый 299руб), один буду разбирать, думать как прикрутить к ESP :)