Автополив

Тема в разделе "Arduino & Shields", создана пользователем Centurio_Mark, 30 май 2019.

  1. Centurio_Mark

    Centurio_Mark Нерд

    Код (C++):
    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с часами реального времени
    #include <DS3231.h>
    #include<EEPROM.h>
    // номер пина реле
    #define RELAY_PIN         8
    // номер пина PIR-датчика
    #define PIR_PIN           A2
    // номер пина датчика влажности почвы
    #define MOISTUSE_PIN      A1
    // максимальный порог влажности почвы
    #define HUMIDITY_MAX      100
    // время включения полива в часах и минутах
    #define TIME_HOUR         10
    #define TIME_MINUTES      00
    // интервал полива
    #define INTERVAL          5
    // создаём объект для работы с часами реального времени
    DS3231 clock();


    // состояния системы
    enum State
    {
        OFF,
        ON,
    };

    // объявляем переменную state
    State state;
    // переменная для хранения времени в формате unixtime
    long unixTime;

    void setup()
    {
      // система выключена
      state = OFF;
      // открываем последовательный порт
      Serial.begin(9600);
      // пин реле в режим выхода
      pinMode(RELAY_PIN, OUTPUT);
      // инициализация часов
      clock.begin();
      // метод установки времени и даты в модуль вручную
       clock.set(20,29,45,27,07,2005,THURSDAY);  
      // метод установки времени и даты автоматически при компиляции
    //  clock.set(__TIMESTAMP__);
      // что бы время менялось при прошивки или сбросе питания
      // закомментируйте оба метода clock.set();
    }

    void loop()
    {
      // если значения влажности почвы превышают порог
      if (analogRead(MOISTUSE_PIN) > HUMIDITY_MAX) {
        // выходим из loop
        return false;
      }
      // запрашиваем данные с часов
      clock.read();
      int hour = clock.getHour();
      int minute = clock.getMinute();
      // если система выключена
      if (state == OFF) {
        if (hour == TIME_HOUR && minute == TIME_MINUTES ) {
          // запоминаем текущее время
          unixTime = clock.getUnixTime();
          // включаем полив
          wateringOn();
        }
      }
      // если система включена
      if (state == ON) {
        if (!digitalRead(PIR_PIN)) {
          // если кто то оказался в зоне полива
          // выключаем полив
          wateringOff();
        } else if (clock.getUnixTime() - unixTime > INTERVAL) {
          // если прошёл заданный интервал времени для полива
          // выключаем полив
          wateringOff();
        }
      }
    }

    // функция включения полива
    void wateringOn() {
      digitalWrite(RELAY_PIN, HIGH);
      state = ON;
    }

    // функция выключения полива
    void wateringOff() {
      digitalWrite(RELAY_PIN, LOW);
      state = OFF;
     
  2. NikitOS

    NikitOS Король шутов Администратор

    Код, что дальше?
     
  3. parovoZZ

    parovoZZ Гуру

    Интерфейса для общения нет - значит фтопку.
     
  4. Centurio_Mark

    Centurio_Mark Нерд

    request for member 'begin' in 'clock', which is of non-class type 'DS3231()'
    ошибка,от чего она ??
     
  5. Centurio_Mark

    Centurio_Mark Нерд

    Библиотека не та?? или строки не хватает типо:
    for(vector<string>::iterator i = vecquest.begin(); i != vecquest.end();++i)
     
  6. AlexU

    AlexU Гуру

    Сначала подумал, что человек решил похвастаться своим решением автополива.
    А теперь даже не знаю что и думать...
    А вектор из STL тут при чём?
     
    NikitOS нравится это.
  7. znamen

    znamen Guest

    Ничего-не в топку. Человеку интерфейс общения не нужен. Потому как у него жёсткий алгоритм
    работы поливалки. В определённое время опросить датчик влажности. И поливать или не поливать
    В зависимости от влажности. Зачем ему общаться с девайсом? Если есть жёсткий алгоритм.
    И вообще нафига засорять голову временными интервалами. Измеряй влажность всегда.
    Влажность низкая -полей. Высокая -жди пока не будет низкая.
     
  8. Centurio_Mark

    Centurio_Mark Нерд

    Просто пример
     
  9. Centurio_Mark

    Centurio_Mark Нерд

    Я лишь прошу всех у кого есть возможность,исправить мой код,усё
     
  10. znamen

    znamen Guest

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

    Вложения:

  11. Vovka

    Vovka Гик

    Кстати, датчик влажности можно сделать более "продвинутым"
     
  12. Centurio_Mark

    Centurio_Mark Нерд

    поясните пожалуйста,что вы имеете ввиду
     
  13. Centurio_Mark

    Centurio_Mark Нерд

    Код (C++):
     byte hour = Clock.setMinute(h12, PM);
      byte minute = hour=Clock.setHour(h12, PM);
      // если система выключена
      if (state == OFF)
      {
        if (hour == TIME_HOUR && minute == TIME_MINUTES)
        {
          // включаем полив
          wateringOn();
        }
        // если система включена
        if ((state == ON) && (clock.getTime()  - TIME_MINUTES > INTERVAL))
        {
    \\ измените эти строки на с++ кому не сложно,знаю там обишка есть.
     
    Последнее редактирование: 9 июн 2019
  14. b707

    b707 Гуру

    эти строчки и так на С++ за исключением строчки 2, которая не на Си и не на С++, а просто с ошибкой
     
  15. Centurio_Mark

    Centurio_Mark Нерд

    можешь исправить?
     
  16. DetSimen

    DetSimen Guest

    500р
     
    Andrey12 нравится это.
  17. Centurio_Mark

    Centurio_Mark Нерд

    за короткий кодик 500,да вы явно сударь шутите
     
  18. Centurio_Mark

    Centurio_Mark Нерд

    Да что за хрень не могут помочь,а ведь одну строку изменить
     
  19. Daniil

    Daniil Гуру

    вот, полностью рабочий код:
    Код (C++):
    setup(){}
    loop(){}
    С такими претензиями цена (не в рублях, а в нервах) будет расти, чтобы конфликтов не было советую прочитать статью, закрепленную в моей подписи.
     
    Последнее редактирование: 9 июн 2019
    Andrey12 нравится это.
  20. b707

    b707 Гуру

    могу, только зачем? У тебя в самом первом сообщении правильный код для этого фрагмента - оттуда и возьми,, начиная с комментария
    // запрашиваем данные с часов
    - это примерно со строки 6 процедуры loop()