циклическое реле в скетч

Тема в разделе "Arduino & Shields", создана пользователем Василий Владимирович, 2 мар 2016.

  1. Добрый день форумчане!
    Прошу помощи. На просторах интернета нашел скетч, подправил. Работает Но не могу в него добавить часть, которая бы отвечала за работу второго циклического реле.
    Опишу по подробнее:
    Инкубатор, простой.
    1) Нужно организовать автоматизацию переворота лотков 6 раз в сутки. Реализовано в скетче и работает
    По шпильке, которая приводится в действие мотор-редуктором, "бегает" гайка и толкает лотки то вверх, то вниз. Стоят концевые выключатели в ВМТ и НМТ (Нижней мертвой точке)
    когда НАНО включен, мотор начинает вращение пока при срабатывании одного концевика не остановится.
    Несмотря на то , что концевик "зажат", идет пауза 4 часа, а потом мотор снова стартует, пока не нажмет второй концевик.
    - с этой частью проблем нет - все работает.
    2) Надо добавить в скетч второе реле на ПИН 12.
    Которое бы всегда при старте НАНО, работало с цикличностью - 2 раза за 24 часа запускает реле на 20 минут. Это для вентилятора проветривания.
    Вот схема подключения первой части:
    [​IMG]
    Реле 1 на пине 13 крутит мотор переворота
    Реле 2 на пине 12 должно включать вентилятор по циклу.

    скетч (работает только переворот):

    Код (C++):
    #include <Timer_P.h>
    #define RELAY_PIN 13 //реле переворота лотков
    #define KEY_PIN 2    // концевики верхний параллельно с нижним

    Timer_P RelayOn, RelayBlock;
    long Pulse_ms = 14400000, Block_ms = 60000; // 4 часа реле отключено, 1 минута - период
                                                // для того чтобы освободился концевик
    bool  RelayOnQO_Old = false;

    void setup(){
      pinMode(KEY_PIN, INPUT_PULLUP);
      pinMode(RELAY_PIN, OUTPUT);
    }

    void loop(){
      RelayOn.TimerV(!digitalRead(KEY_PIN) && !RelayOn.Q0(), RelayBlock.Q0(), 1, Pulse_ms);
      RelayBlock.TimerV(!RelayOn.Q0() && RelayOnQO_Old, 0, 1, Block_ms);
      digitalWrite (RELAY_PIN, RelayOn.Q0());
      RelayOnQO_Old = RelayOn.Q0();
    }
    библиотека - http://my-files.ru/0za1py/Timer_P.rar
     
    Последнее редактирование: 3 мар 2016
  2. vvr

    vvr Инженерище

    в этой библиотеке есть пример блинк
    вот по его подобию и сделайте проветривание
     
    Василий Владимирович нравится это.
  3. Спасибо за подсказку. Попробую.
     
  4. Так как правильно подсказал VVR - та к сделал. Все оказалось до боли просто.

    Код (C++):
    #include <Timer_P.h>     //подключаем библиотеку Timer_P
        #define VENT_PIN 12        //PIN реле вентилятора проветривания
        #define Period 43200000      //Период меандра  12 часов=720мин х 60000 мс
        #define Duration 1200000     //Импульс меандра 20 минут=20 х 60000 мс
     
        Timer_P Period_T, Pulse_T;   //создание и инициализация объекта Timer_Test класса Timer_P

        void setup() {
          //Режимы выходов
          pinMode(VENT_PIN, OUTPUT);
        }
     
        void loop() {
          Period_T.TimerV(!Period_T.Q0(), 0, 2, Period); // Самосбрасывающийся таймер периода
          Pulse_T.TimerV(!Period_T.Q0(), 0, 1, Duration);// Импульс длительности Duration по началу периода
          //Выводим меандр на реле.
          digitalWrite(VENT_PIN, Pulse_T.Q0());
    ..осталось "поженить" два скетча и порядок
     
    Последнее редактирование: 3 мар 2016
  5. AlexVS

    AlexVS Гик

    Уважайте окружающих, вставляйте код в специальные тэги.
     
    rico нравится это.
  6. а что, я кого то оскорбил? Кого я не уважаю?
    Если это надо делать с целью удобства прочтения на странице форума, то код не обширный, и занимает немного пространства в комментарии. Если же это обязательно для форумчан - то мои извинения, в будущем буду вставлять. Только попрошу Вас в будущем не хамить, а писать как положено.
    - Прошу, вставлять код в специальные тэги, для удобства просмотра.....
    Вот это бы я понял. А то что я своими действиями оскорбил вас и все сообщество планеты Земля - это уж перебор!
    Вам не кажется?
     
    Последнее редактирование: 2 мар 2016
  7. соединил два скетча, подправил название пинов, получилось следующее. Все работает
    Код (C++):
    #include <Timer_P.h> //подключаем библиотеку Timer_P - работа с таямерами из набора библиотек от X-Dron
    #define RELAY_PEREVOROTA 13           //PIN реле переворота лотков
    #define RELAY_PROVETRIVANIY 12        //PIN реле вентилятора проветривания
    #define KEY_KONCEVIK 2                     //PIN  концевика поворота лотков, верхний параллельно с нижним

    #define Period 43200000      //Период меандра  12 часов=720мин х 60000 мс
    #define Duration 1200000     //Импульс меандра 20 минут=20 х 60000 мс
     
    Timer_P Period_T, Pulse_T;   //создание и инициализация объекта Timer_Test класса Timer_P
    Timer_P RelayOn, RelayBlock;
    long Pulse_ms = 14400000, Block_ms = 60000; // 4 часа реле отключено, 1 минута - период
                                                // для того чтобы освободился концевик
    bool  RelayOnQO_Old = false;

    void setup(){
      pinMode(RELAY_PROVETRIVANIY, OUTPUT);
      pinMode(KEY_KONCEVIK, INPUT_PULLUP);
      pinMode(RELAY_PEREVOROTA, OUTPUT);
    }

    void loop(){
                  // раздел настройки реле переворота
      RelayOn.TimerV(!digitalRead(KEY_KONCEVIK) && !RelayOn.Q0(), RelayBlock.Q0(), 1, Pulse_ms);
      RelayBlock.TimerV(!RelayOn.Q0() && RelayOnQO_Old, 0, 1, Block_ms);
      digitalWrite (RELAY_PEREVOROTA, RelayOn.Q0());
      RelayOnQO_Old = RelayOn.Q0();
                  // конец программы реле переворота

                  // раздел настройки реле проветривания
      Period_T.TimerV(!Period_T.Q0(), 0, 2, Period); // Самосбрасывающийся таймер периода
      Pulse_T.TimerV(!Period_T.Q0(), 0, 1, Duration);// Импульс длительности Duration по началу периода
         //Выводим меандр на реле.
      digitalWrite(RELAY_PROVETRIVANIY, Pulse_T.Q0());
                  // конец программы реле проветривания
    }
    Хотел бы подключить две кнопки, одну на принудительный запуск переворота, чтоб работала по тому же принципу как в скетче выше, а вторую на принудительный запуск проветривания, тоже чтобы работал вентилятор как в скетче 20 минут.

    ПОМОГИТЕ Пожалуйста?
     
    Tomasina нравится это.
  8. AlexVS

    AlexVS Гик

    Не уважение и оскорбление - разные понятия, в моей реплике ни слова про оскорбление.
    Код в тэгах, гораздо более читабельный, поэтому просматривая его, проще найти ошибку и тд. и т.п.
    А про планету Земля - это вы переборщили.
     
    rico нравится это.
  9. Согласен на 100% !
    Просьба по теме писать...