Скетч для теплицы

Тема в разделе "Arduino & Shields", создана пользователем RPSVoloch, 15 июн 2015.

  1. RPSVoloch

    RPSVoloch Нуб

    Всем доброго времени суток.
    Есть скетчик для теплички который не желает работать адекватным образом. Наставьте на путь истинный нуба)
    Часы настраивал http://forum.amperka.ru/threads/Часы-ds-3231.4688/
    Код (Text):
    #include <DS3231.h>

    DS3231  rtc(SDA, SCL);
    Time RTC_T;

    int lumenPin1 = 46; // Лампа люмен 1
    int lumenPin2 = 47; // Лампа люмен 2
    int lumenPin3 = 48; // Лампа люмен 3
    int lumenPin4 = 49; // Лампа люмен 4
    int diodPin = 50; // Диоды
    int pompPin = 51; // насос
    int circulationPin = 52; // цыркуляция
    int ventilationPin = 53; // проветривание
    int heatingPin = 14; // обогрев
    int coolingPin = 15; // охлождение
    int flapPin = 17; // Заслонка
    int pot01 = 22; // Горшок 01
    int pot02 = 23; // Горшок 02
    int pot03 = 24; // Горшок 03
    int pot04 = 25; // Горшок 04
    int pot05 = 26; // Горшок 05
    int pot06 = 27; // Горшок 06
    int pot07 = 28; // Горшок 07
    int pot08 = 29; // Горшок 08
    int pot09 = 30; // Горшок 09
    int pot10 = 31; // Горшок 10
    int pot11 = 32; // Горшок 11
    int pot12 = 33; // Горшок 12
    int pot13 = 34; // Горшок 13
    int pot14 = 35; // Горшок 14
    int pot15 = 36; // Горшок 15
    int pot16 = 37; // Горшок 16
    int pot17 = 38; // Горшок 17
    int pot18 = 39; // Горшок 18
    int pot19 = 40; // Горшок 19
    int pot20 = 41; // Горшок 20
    int pot21 = 42; // Горшок 21
    int pot22 = 43; // Горшок 22
    int pot23 = 44; // Горшок 23
    int pot24 = 45; // Горшок 24

    void setup()
    {
    rtc.begin();
    Serial.begin(115200);
    pinMode(lumenPin1, OUTPUT);
    pinMode(lumenPin2, OUTPUT);
    pinMode(lumenPin3, OUTPUT);
    pinMode(lumenPin4, OUTPUT);
    pinMode(diodPin, OUTPUT);
    pinMode(pompPin, OUTPUT);
    pinMode(circulationPin, OUTPUT);
    pinMode(ventilationPin, OUTPUT);
    pinMode(heatingPin, OUTPUT);
    pinMode(coolingPin, OUTPUT);
    pinMode(flapPin, OUTPUT);
    pinMode(pot01, INPUT);
    pinMode(pot02, INPUT);
    pinMode(pot03, INPUT);
    pinMode(pot04, INPUT);
    pinMode(pot05, INPUT);
    pinMode(pot06, INPUT);
    pinMode(pot07, INPUT);
    pinMode(pot08, INPUT);
    pinMode(pot09, INPUT);
    pinMode(pot10, INPUT);
    pinMode(pot11, INPUT);
    pinMode(pot12, INPUT);
    pinMode(pot13, INPUT);
    pinMode(pot14, INPUT);
    pinMode(pot15, INPUT);
    pinMode(pot16, INPUT);
    pinMode(pot17, INPUT);
    pinMode(pot18, INPUT);
    pinMode(pot19, INPUT);
    pinMode(pot20, INPUT);
    pinMode(pot21, INPUT);
    pinMode(pot22, INPUT);
    pinMode(pot23, INPUT);
    pinMode(pot24, INPUT);

      }
    void loop()
    {
    RTC_T = rtc.getTime();

    //
    // Присваем значения с датчиков горшков
    //
    pot01 = digitalRead(pot01);
    pot02 = digitalRead(pot02);
    pot03 = digitalRead(pot03);
    pot04 = digitalRead(pot04);
    pot05 = digitalRead(pot05);
    pot06 = digitalRead(pot06);
    pot07 = digitalRead(pot07);
    pot08 = digitalRead(pot08);
    pot09 = digitalRead(pot09);
    pot10 = digitalRead(pot10);
    pot11 = digitalRead(pot11);
    pot12 = digitalRead(pot12);
    pot13 = digitalRead(pot13);
    pot14 = digitalRead(pot14);
    pot15 = digitalRead(pot15);
    pot16 = digitalRead(pot16);
    pot17 = digitalRead(pot17);
    pot18 = digitalRead(pot18);
    pot19 = digitalRead(pot19);
    pot20 = digitalRead(pot20);
    pot21 = digitalRead(pot21);
    pot22 = digitalRead(pot22);
    pot23 = digitalRead(pot23);
    pot24 = digitalRead(pot24);
     
    /*
    ////////////////////////////////////////////////////
    ////////////////////Освещение//////////////////////
    ////////////////////////////////////////////////////
    */

    //Лампа 1
    if ((RTC_T.hour, DEC) >= 5 && RTC_T.hour <= 16)
    {
      // LOW (потому как без платы управления свет должен быть активен пока не отключим автоматы)
        digitalWrite(lumenPin1, LOW);
        Serial.print(RTC_T.hour, DEC);
        Serial.println(".");
    }
    else
    {
      // HIGH
        digitalWrite(lumenPin1, HIGH);
        Serial.print(RTC_T.hour, DEC);
        Serial.println(".");
    }
    //Лампа 2
    if ((RTC_T.hour, DEC) >= 7 && (RTC_T.hour, DEC) <= 17)
    {
      // LOW (потому как без платы управления свет должен быть активен пока не отключим автоматы)
        digitalWrite(lumenPin2, LOW);
        Serial.print(RTC_T.hour, DEC);
        Serial.println(".");
    }
    else
    {
      // HIGH
        digitalWrite(lumenPin2, HIGH);
        Serial.print(RTC_T.hour, DEC);
        Serial.println(".");
    }

    //Лампа 3
    if ((RTC_T.hour, DEC) >= 9 && (RTC_T.hour, DEC) <= 19)
    {
      // LOW (потому как без платы управления свет должен быть активен пока не отключим автоматы)
        digitalWrite(lumenPin3, LOW);
        Serial.print(RTC_T.hour, DEC);
        Serial.println(".");
    }
    else
    {
      // HIGH
        digitalWrite(lumenPin3, HIGH);
        Serial.print(RTC_T.hour, DEC);
        Serial.println(".");
    }

    //Лампа 4
    if ((RTC_T.hour, DEC) >= 12 && (RTC_T.hour, DEC) <= 20)
    {
      // LOW (потому как без платы управления свет должен быть активен пока не отключим автоматы)
        digitalWrite(lumenPin4, LOW);
        Serial.print(RTC_T.hour, DEC);
        Serial.println(".");
    }
    else
    {
      // HIGH
        digitalWrite(lumenPin4, HIGH);
        Serial.print(RTC_T.hour, DEC);
        Serial.println(".");
    }
    //Диоды
    if ((RTC_T.hour, DEC) >= 5 && (RTC_T.hour, DEC) <= 20)
    {
      // Включить
        digitalWrite(diodPin, HIGH);
    }
    else
    {
      // Выключить
        digitalWrite(diodPin, LOW);
    }


    /*
    ////////////////////////////////////////////////////
    ////////////////////Вентиляция//////////////////////
    ////////////////////////////////////////////////////
    */

    //
    //Цыркуляция
    //

    if ((RTC_T.hour, DEC) >= 5 && (RTC_T.hour, DEC) <= 0)
    {
      // Включить
          digitalWrite(circulationPin, LOW);
      }
    else
    {
      // Выключить
          digitalWrite(circulationPin, HIGH);
      }

    //
    //Проветривание
    //
    if (rtc.getTemp() >= 38)
            {
            // Включить проветривание и охлождение
            // Открыть заслонки для проветривания
            digitalWrite(ventilationPin, HIGH);
            digitalWrite(coolingPin, HIGH);
            digitalWrite(flapPin, HIGH);
            }

    if (rtc.getTemp() <= 27)
          {
            // Выключить проветривание и охлождение
            // Закрыть заслонки для проветривания
            digitalWrite(ventilationPin, LOW);
            digitalWrite(coolingPin, LOW);
            digitalWrite(flapPin, LOW);
          }
    if ((RTC_T.hour, DEC) >= 12)
            {
              // Включить
            digitalWrite(ventilationPin, HIGH);
            digitalWrite(flapPin, HIGH);
            }
      else
            {
              // Выключить
            digitalWrite(ventilationPin, LOW);
            digitalWrite(flapPin, LOW);
            }
    if ((RTC_T.hour, DEC) >= 20)
            {
              // Включить
            digitalWrite(ventilationPin, HIGH);
            digitalWrite(flapPin, HIGH);
            }
      else
            {
              // Выключить
            digitalWrite(ventilationPin, LOW);
            digitalWrite(flapPin, LOW);
            }
       
    //
    //Обогрев
    //
      if (rtc.getTemp() <= 20)
          {
          // Включить обогрев
          digitalWrite(heatingPin, HIGH);
          }
      if (rtc.getTemp() >= 37)
          {
          // Выключить обогрев
          digitalWrite(heatingPin, LOW);
          }

       
    /*
    ////////////////////////////////////////////////////
    //////////////////////Полив:////////////////////////
    ////////////////////////////////////////////////////
    */


    }
    Это только часть скрипта но суть такова: по идее если время больше или равно положенному то включаем или же выключаем.
    Весь скетч завязан на часах но почему не работает я не знаю.
    Это только часть того что должно быть (остальная часть работает исправно но только те места где нет проверки на время)
     
    Последнее редактирование: 15 июн 2015
  2. Vad33

    Vad33 Капитан-оригинал

    //Лампа 1
    if ((RTC_T.hour, DEC) >= 5 && RTC_T.hour <= 16)
     
  3. DrProg

    DrProg Вечный нерд

    Агрономов тут все больше. )
    Давайте уже собираться в кучу и творить совместно.
     
  4. Vad33

    Vad33 Капитан-оригинал

    Мы и так как бэ вместе. :)
    Тока у каждого свой велосипед. :D
     
  5. DrProg

    DrProg Вечный нерд

    Больше велосипедов, хороших и разных? )
     
  6. RPSVoloch

    RPSVoloch Нуб

    Заменяю (RTC_T.hour, DEC) на RTC_T.hour получаю на выходе полное отключение и дикое гудение от походу реле.
     
  7. Vad33

    Vad33 Капитан-оригинал

    Видимо реле как раз и пытается сработать. :)

    p.s. Там еще много таких кусков.
     
    Последнее редактирование: 15 июн 2015
  8. Vad33

    Vad33 Капитан-оригинал

    Ага.
     
  9. RPSVoloch

    RPSVoloch Нуб

    Прикол в том что оно не должно срабатывать, а наоборот просто быть не активным.
    Если ардуиновская плата по какой то причине не работает (мало ли здохла в очередной раз) вся система будет работать кроме вентиляции заслонок и подогрева с охлаждением.
     
  10. Vad33

    Vad33 Капитан-оригинал


    Я только показал неправильный синтаксис оператора, кстати таких кусков много.
    А что там еще есть мне не ведомо. :D
    Это "лампа 1" так через реле срабатывает? :)
     
  11. RPSVoloch

    RPSVoloch Нуб

    Питание подаётся 5в с БП от компа на 700 ват (меньше не было просто) - кажись 15А выдаёт в пике
    Управляет всей конструкцией дистанционно fujitsu lifebook p1000 чутка допиленный под мои нужды (SSD 30гб) USB модем мегафон для дистанционного управления и сигнализации если что то не так. Ну естесно сосед алкаш) За бутылку присмотрит чтоб пожара не было в тепличке.
     
  12. RPSVoloch

    RPSVoloch Нуб

    Весь код переписавыю сразу а не только 1 элемент.
    Пробовал вот так:
    if ((RTC_T.hour) >= 9 && (RTC_T.hour) <= 19)
    Жузжит зараза
    И вот так:
    if (RTC_T.hour >= 9 && RTC_T.hour <= 19)
    Так же жузжит
    Отключается свет (следовательно на реле подали питание)
    Циркуляция работает, диодные панели не подключены как и обогрев с охлаждением и заслонками.


    Как направить проклятую ардуину на путь истинный?
     
  13. Vad33

    Vad33 Капитан-оригинал

    А сколько времени на часах то?
     
  14. RPSVoloch

    RPSVoloch Нуб

    Время показывает как положено.
     
  15. Vad33

    Vad33 Капитан-оригинал

    "Как положено", это сколько?
     
  16. RPSVoloch

    RPSVoloch Нуб

    http://www.aliexpress.com/snapshot/6675037902.html?orderId=67295662743054 вместо рогатки в земле решил использовать старые гвозди 100
    http://www.aliexpress.com/snapshot/6675037906.html?orderId=67295662703054 это у нас сами часики
    http://www.aliexpress.com/snapshot/6675037898.html?orderId=67295662723054 2 шт - релейные модули
    http://www.aliexpress.com/snapshot/6675037900.html?orderId=67295662733054 чтоб не поять а просто воткнуть (на работе пайки хватает)
    http://www.aliexpress.com/snapshot/6675037904.html?orderId=67295662713054 в резервуар с водой (на экстренный полив - мало ли воды не будет)

    Время кажет такое же как и на ноуте с которого сейчас пишу
     
  17. RPSVoloch

    RPSVoloch Нуб

    Кстати да если в терминал выдовать (********, DEC) то время показывает как положено, но если без то получаем крокозявры всякие
     
  18. Vad33

    Vad33 Капитан-оригинал

    Видима, надо проверять сборку конструкции, особенно контакты.
    И кстати время передается в виде буков или цифер? :)

    Если в виде буков, то оно еще 30 прибавит.
     
  19. RPSVoloch

    RPSVoloch Нуб

    буквы\цыфры - йкаждый раз разное значение почему и решил использовать DEC

    Правильность соединения можно не проверять) Там всё как на заводе с небольшими отклонениями в плане соединения проводов между собой и каждый провод подписан в месте соединения с чем либо + конструкция проверялась на премитивном скетче так что в железо можно не совать нос.
     
  20. Vad33

    Vad33 Капитан-оригинал

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