Система автополива

Тема в разделе "Arduino & Shields", создана пользователем CH1PSET, 10 фев 2019.

  1. CH1PSET

    CH1PSET Нуб

    Здравствуйте. Собрал систему автополива по проекту https://alexgyver.ru/pump-sleep/ Дигиспарк и реле
    На тестах все вроде работало. Когда начал вводить в продакшн, а точнее опустил помпу на дно 5л бутылки, то реле стала вести себя очень странно.

    Согласно схеме помпу подключил на выход в реле. Если помпу опустить на одно, реле включается на пол секунды и выключается сразу и так по кругу(помпа дергается и все). Если помпу достать из воды, то работает нормально. Если помпу опустить на дно и подключить напрямую к 5в(соседние выходы на реле), то также качает нормально. Проблема возникает, только когда помпа опущена в воду и подключена к реле. Ничего понять не могу... Все сделано точно, как в инструкции. Использую 4 батарейки, на выходе 5.5в. Куда смотреть, в чем может быть проблема, спасибо.
     
  2. vvr

    vvr Инженерище

    сразу напрашивается ответ - к автору проекта.
     
    parovoZZ нравится это.
  3. ИгорьК

    ИгорьК Давно здесь Команда форума

    Ардуино - это просто?
     
  4. vvr

    vvr Инженерище

    тс написал - . Собрал систему автополива по проекту https://alexgyver.ru/pump-sleep/

    ну и у меня не возникает сомнений к кому обращаться с вопросами - к Гайверу))))
     
  5. CH1PSET

    CH1PSET Нуб

    Дело в том, что тут автор то не причем) Тут либо я что-то не понимаю и неправильно делаю или что)
    Вопрос то общий. Если у меня винда полетела, я же не пишу Майрософту) Есть основные методы диагностики и исправления проблем. Я за этим и обратился сюда.. Думал, может кто работает часто с ардуино, ему будет сразу видна причина..



    Видео, как происходит))
     
  6. DetSimen

    DetSimen Гуру

    а напрасно.
    Хотя, я тоже, как чонить с Ардуиной случаеца, сразу бегу на форум ближайшего ко мне цветочного магазина и там достаю всех блондинок.
     
    Igor68 и parovoZZ нравится это.
  7. parovoZZ

    parovoZZ Гуру

    Кому-то и квантовая физика тоже просто.
     
  8. ИгорьК

    ИгорьК Давно здесь Команда форума

    Так тов Гайвер утверждает. И на огонёк слетаются мотыльки, которые "Дело в том, что тут автор то не причем)".
     
  9. parovoZZ

    parovoZZ Гуру

    Тут всего два пути - либо ты подготовлен в электротехнике и понимаешь все происходящие внутренние процессы и самоделишь с удовольствием; либо идёшь и покупаешь новое.
    Когда ничего не понимаешь и пытаешься найти помощь у других, при этом даже не представляешь, как правильно оформить вопрос - тут сразу вспоминается поговорка - не хочешь срать - не мучай жопу.
     
    DetSimen нравится это.
  10. Мой хрустальный шар патсказываит. Шоу если дело не в коте, то нихватаит силы тока ф батарейках. Йа таг думаю. Когда работаит в холостую все норм, а када опускаити в воду то помпе тижило работать. Тока ни хвотаит и фсе висеть(. Сорри за ошипки я праздник праздную
     
    Daniil и 9xA59kK нравится это.
  11. avdeal

    avdeal Нуб

    Код (C++):
    boolean flag1=0;
    boolean knop1;                    //2 нога
    boolean flag2=0;
    boolean knop2;                    //3 нога
    boolean flag3=0;  
    boolean knop3;                    //4 нога
    boolean flag4=0;
    boolean knop4;                    //13 нога
    int btnState;                     //переменная настройки режимов
    int regim;                        //текущий режим
    boolean flagRegDoliv=0;           //переменная состояния режима долива
    boolean flagRegWindows=0;         //переменная состояния режима проветривания
    boolean flagRegPoliv=0;           //переменная состояния режима полива
    //заполнение бочки
    boolean flagDoliv=0;              //переменная состояния клапана(крана) заполнения бочки
    int konc1=7;                      //верхний попловок в бочке подключен ко 7 пину
    int konc2=8;                      //нижний попловок в бочке подключен к 8 пину
    //int doliv=10;                     //кнопка принудительного долива бочки 10 пин
    int nasos=10;                     //клапан (насос)долива бочки          11 пин
    unsigned long lasttime;           //переменная хранения времени срабатывания верхнего попловка
    unsigned long avtodoliv=5000;     //настраиваемое значение таймера долива бочки (сработал верх.попл. но не сработал ниж.попл.)
    //управление окнами
    #include "DHT.h"
    #define DHTPIN 9                    // номер пина, к которому подсоединен датчик 9
    DHT dht(DHTPIN, DHT11);
    const int EN=11;
    const int MC1=7;
    const int MC2=8;
    boolean koncUp;                  //5 нога
    boolean koncDown;                //6 нога
    int minim=20;
    int maxim=30;

    int nasosPoliv=12;                     //клапан (насос) полива          13 пин
    unsigned long period=1000*60*60*24;              //период полива
    unsigned long dlitelnost=1000*60*60*1;              //продолжительность полива    
    boolean flagPoliv;
    unsigned long nachaloPoliva=0;                     //фиксация времени начала полива
    unsigned long nachaloOschetaDlit;                  //начало отсчёта длительности

    void setup() {
      Serial.begin(9600);
    pinMode(2,INPUT);
    pinMode(3,INPUT);
    pinMode(4,INPUT);
    pinMode(13,INPUT);

    pinMode (konc1,INPUT);
    pinMode (konc2,INPUT);
    // pinMode (doliv,INPUT);
    pinMode (nasos,OUTPUT);

    pinMode(EN,OUTPUT);
    pinMode(MC1,OUTPUT);
    pinMode(MC2,OUTPUT);
    dht.begin();
    pinMode(5,INPUT);          //boolean koncUp;
    pinMode(6,INPUT);          //boolean koncDown;
    pinMode (nasosPoliv,OUTPUT);
    }

    void loop() {
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    digitalWrite(nasos, flagDoliv);
    digitalWrite(nasosPoliv,flagPoliv);

      btnState=Obrabot_Knop();
    switch(regim){
      case 0: //рабочий режим (вывод значений на экран, управление доливом, управление окнами)
      if (btnState==3){regim=1;}
     
      while(flagRegDoliv==1){void dolivBochki();}
     
      if (flagRegWindows==1 && (t>maxim || btnState==1) && digitalRead(5)==0){opening();}
      if (flagRegWindows==1 && (t<minim || btnState==2) && digitalRead(6)==0){closeing();}
      if (flagRegWindows==0 && btnState==1 && digitalRead(5)==0){opening();}
      if (flagRegWindows==0 && btnState==2 && digitalRead(6)==0){closeing();}

      if (flagRegPoliv==1){timerPoliva();}
      if (flagRegPoliv==0){}

      break;
     
      case 1: //вкл/выкл функции долива
      if (btnState){
      if (btnState==3){regim=2;}
      if (btnState==4){regim=0;}
     
      if (btnState==1){flagRegDoliv=0;}
      if (btnState==2){flagRegDoliv=1;}
      }
      break;
      case 2: //ручной/авто переключение режима проветривания
      if (btnState){
      if (btnState==4){regim=0;}
      if (btnState==3 && flagRegWindows==0){regim=5;}
      if (btnState==3 && flagRegWindows==1){regim=3;}
      if (btnState==1){flagRegWindows=0;}
      if (btnState==2){flagRegWindows=1;}
      }
      break;
      case 3: //регулировка температуры закрывания
       if (btnState){
      if (btnState==3){regim=4;}
      if (btnState==4){regim=2;}
      if (btnState==1){minim--;}
      if (btnState==2){minim++;}
       }
      break;
      case 4: //регулировка температуры открывания
       if (btnState){
      if (btnState==3){regim=5;}
      if (btnState==4){regim=2;}
      if (btnState==1){maxim--;}
      if (btnState==2){maxim++;}
       }
      break;
      case 5: //вкл/выкл функции полива
       if (btnState){
      if (btnState==3){regim=6;}
      if (btnState==4){regim=0;}
      if (btnState==1){flagRegPoliv=0;}
      if (btnState==2){flagRegPoliv=1;}
       }
      break;
      case 6: //настройка периода полива
       if (btnState){
      if (btnState==3){regim=7;}
      if (btnState==4){regim=0;}
      if (btnState==1){period=period-(1000*60*60);}
      if (btnState==2){period=period+(1000*60*60);}
       }
      break;
      case 7: //настройка продолжительности полива
       if (btnState){
      if (btnState==3){regim=0;}
      if (btnState==4){regim=0;}
      if (btnState==1){dlitelnost=dlitelnost-(1000*60);}
      if (btnState==2){dlitelnost=dlitelnost+(1000*60);}
       }
      break;
      }
    Serial.print("режим-"); Serial.print(regim);Serial.print("t мин ");Serial.print(minim);Serial.print(" t макс ");Serial.print(maxim);Serial.print("flagRegPoliv ");Serial.println(flagRegPoliv);
    }


    int Obrabot_Knop(){
    knop1=digitalRead(2);
    knop2=digitalRead(3);
    knop3=digitalRead(4);
    knop4=digitalRead(13);
    //while(knop3||knop1||knop2||knop4)
      if (knop1==1 && flag1==0){flag1=1;return 1;}
      if (knop1==0 && flag1==1){flag1=0;}
      if (knop2==1 && flag2==0){flag2=1;return 2;}
      if (knop2==0 && flag2==1){flag2=0;}
      if (knop3==1 && flag3==0){flag3=1;return 3;}
      if (knop3==0 && flag3==1){ flag3=0;}
      if (knop4==1 && flag4==0){flag4=1;return 4;}
      if (knop4==0 && flag4==1){ flag4=0;}
      }
     
    void dolivBochki(){
    btnState=Obrabot_Knop();
    if (digitalRead(konc1)==1){
         if (digitalRead(konc2)==1 | btnState==4 | millis()-lasttime > avtodoliv){
         flagDoliv=1;}
        }
    if (btnState==4){flagDoliv=!flagDoliv;lasttime=millis();}  
    else
    {flagDoliv=0;lasttime=millis();}
    }

    void opening()
    {
    digitalWrite(EN, LOW);
    digitalWrite(MC1,HIGH);
    digitalWrite(MC2,LOW);
    digitalWrite(EN, HIGH);
    }
    void closeing()
    {
    digitalWrite(EN, LOW);
    digitalWrite(MC1,LOW);
    digitalWrite(MC2,HIGH);
    digitalWrite(EN, HIGH);
    }
    void brake()
    {
    digitalWrite(EN, LOW);
    digitalWrite(MC1,LOW);
    digitalWrite(MC2,LOW);
    digitalWrite(EN, HIGH);
    }
    void timerPoliva()
    {
    if ((millis()-nachaloPoliva>period)|| btnState==5){flagPoliv=1;nachaloPoliva=millis();nachaloOschetaDlit=millis();}
        if((millis()-nachaloOschetaDlit)>dlitelnost){flagPoliv=0;}
    }
    доброго времени суток. прошу помощи в решении своей проблемы. составил скетч, где по задумке имеется 8 режимов. в каждом режиме включается/отключается какая либо функция устройства, либо настраивается пороговое значение.
    для удобства ввел функцию обработки нажатий (4 кнопки 1-2 лев.прав. 3-4 низ.верх.)
    после нажатия кнопки (3) функция обработки нажатий "бомбит" цикл луп без остановки возращаемым значением. режимы листаются сами собой. если успеть щелкнуть (1) или (2) в режимах изменения переменных, то режим фиксируется но переменная ползёт без остановки.
    подскажите пожалуйста решение проблемы, как заставить отсылать или читать значение единожды?
    система с поливом поэтому написал в уже созданную тему.
     
    Последнее редактирование: 11 фев 2019
  12. avdeal

    avdeal Нуб

    скорее всего там много чего не работает, пока хочу разобраться с имеющейся проблемой.
     
  13. vvr

    vvr Инженерище

    а ты какого хрена влез в чужую тему и просишь помощи ?
    создай свою и там вопрошай.
    а здесь СH1PSET пытается решить свой вопросик.....
     
  14. DetSimen

    DetSimen Гуру

    CH1PSET уже абиделса и свалил к Гайверу на форум...
     
  15. avdeal

    avdeal Нуб

    Чего плодить темы без разбору? 300 страниц тем не многовато-ли?
    Открыл форум, листаю-может есть типичное решение. Вижу "сис-ма полива". У меня тож полив. Вот и написал.
    Или если будет отдельная тема, то мне более гарантированно помогут?
     
  16. DIYMan

    DIYMan Гуру

    Это несовместимые вещи.
     
    parovoZZ нравится это.
  17. b707

    b707 Гуру

    если будешь наезжать на сообщество - ГАРАНТИРОВАНО пошлют
     
    Daniil и DetSimen нравится это.
  18. parovoZZ

    parovoZZ Гуру

    на юга в абнимку с перелетными цыпами.
     
  19. DetSimen

    DetSimen Гуру

    Не на юга, а на южное побережье. Думаю, Баренцева моря.
     
    Daniil и parovoZZ нравится это.
  20. avdeal

    avdeal Нуб

    Неудачно слово подобрал.
    Прошу прощение кого обидел.