1

Тема: Библиотека TimingRelay: Реле времени

Обсуждение статьи "Библиотека TimingRelay: Реле времени".

2

Re: Библиотека TimingRelay: Реле времени

Сергей Милян пишет:

Подскажите пожалуйста, а на 2 реле можно сделать ?? чтоб оба запускались от одной кнопки.

Да, конечно можно.
Вот пример.

// Подключаем библиотеку TimingRelay.
#include "TimingRelay.h"

// Константа, содержащая порт кнопки.
const int buttonPin = 2;

// Константа, содержащая порт реле №1.
const int relayPin1 = 13;

// Константа, содержащая порт реле №2.
const int relayPin2 = 12;

// Переменная, содержащая состояние кнопки.
int buttonState = 0;

// Создаем реле времени (Порт, Задержка включения, Задержка выключения).
TimingRelay relay1(relayPin1, 2000, 5000);
TimingRelay relay2(relayPin2, 2000, 5000);

void setup()
{
  // Инициализируем порт кнопки как вход.
  pinMode(buttonPin, INPUT);
}

void loop()
{
  // Считываем статус кнопки.
  buttonState = digitalRead(buttonPin);
  // Передаем статус реле.
  relay1.set(buttonState);
  relay2.set(buttonState);
  // Обрабатываем (обязательно).
  relay1.loop();
  relay2.loop();
}

Re: Библиотека TimingRelay: Реле времени

Вот что появляется при компиляции скетча. Вроде и библиотеку скачал и залил ту что Вы указали, но что-то не так, при загрузке скетча Ардуино Нано так же не воспринимает ничего.

C:\Users\Polya\Documents\Arduino\libraries\TimingRelay\src\TimingRelay.cpp:14:95: warning: default argument given for parameter 2 of 'TimingRelay::TimingRelay(uint8_t, long unsigned int, long unsigned int)' [-fpermissive]

 TimingRelay::TimingRelay(uint8_t _pin, unsigned long _onDelay = 0, unsigned long _offDelay = 0)

                                                                                               ^

In file included from C:\Users\Polya\Documents\Arduino\libraries\TimingRelay\src\TimingRelay.cpp:12:0:

C:\Users\Polya\Documents\Arduino\libraries\TimingRelay\src\TimingRelay.h:18:5: note: previous specification in 'TimingRelay::TimingRelay(uint8_t, long unsigned int, long unsigned int)' here

     TimingRelay(uint8_t _pin, unsigned long _onDelay = 0, unsigned long _offDelay = 0);

     ^

C:\Users\Polya\Documents\Arduino\libraries\TimingRelay\src\TimingRelay.cpp:14:95: warning: default argument given for parameter 3 of 'TimingRelay::TimingRelay(uint8_t, long unsigned int, long unsigned int)' [-fpermissive]

 TimingRelay::TimingRelay(uint8_t _pin, unsigned long _onDelay = 0, unsigned long _offDelay = 0)

                                                                                               ^

In file included from C:\Users\Polya\Documents\Arduino\libraries\TimingRelay\src\TimingRelay.cpp:12:0:

C:\Users\Polya\Documents\Arduino\libraries\TimingRelay\src\TimingRelay.h:18:5: note: previous specification in 'TimingRelay::TimingRelay(uint8_t, long unsigned int, long unsigned int)' here

     TimingRelay(uint8_t _pin, unsigned long _onDelay = 0, unsigned long _offDelay = 0);

     ^

4 (изменено: Сергей М, 11-12-2017 23:40:46)

Re: Библиотека TimingRelay: Реле времени

Попробовал на Ардуино UNO, результат тот же - нет никакой реакции на кнопку.

П.С. После нескольких испытаний - заработало. Оказывается только при удержании кнопки.
Вместо реле пока подключил диоды, и для визуальной оценки изменил тайминги на:
TimingRelay relay1(relayPin1, 2000, 5000);
TimingRelay relay2(relayPin2, 4000, 800);
принцип работы таков:
Нажал и удерживаю кнопку, через 2сек. включается 13 пин, ещё через 2сек. включается 12 пин. При дальнейшем удерживании горят оба пока не отпустить кнопку.
После отпускания кнопки через 1 сек. (я так понимаю 800мс) выключается 12 пин, и ещё через 4 сек. (5 сек после отжатия кнопки) выключается 13 пин.
Скетч работает отлично, но к сожалению чуточку не так как я предполагал.
Геннадий, простите за наглость, есть ли возможность такой же работы реле, но только от кратковременного нажатия кнопки (датчика напряжения или другого импульса).
Что бы при кратковременном нажатии запускался весь цикл - импульс\задержка 2 сек. 13 пина и задержка 5 сек. 12 пина\ работа 13 пина 10сек. и работа 12 пина 0.5 сек\ выключение пинов согласно выставленным задержкам без нажатия или удерживания кнопки (доп. импульсов и т.п.)
С уважением.

5

Re: Библиотека TimingRelay: Реле времени

Выпустил новую версию.
Исправил появление ошибок.
Добавил работу от короткого импульса.
Добавил еще два примера.

Скачайте и проверьте. Вам нужен пример "ShortPulse".

Re: Библиотека TimingRelay: Реле времени

Огромное спасибо, протестирую и обязательно отпишусь, уверен что Ваши наработки будут очень полезны многим.

7 (изменено: Сергей М, 16-12-2017 01:48:40)

Re: Библиотека TimingRelay: Реле времени

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

// Library: TimingRelay 
// Author: Shaposhnikov Gennadii
// E-mail: genaonyx@mail.ru
// URL: http://arduino.on.kg/

// Подключаем библиотеку TimingRelay.
#include "TimingRelay.h"

// Константа, содержащая порт кнопки.
const int buttonPin = 2;

// Константа, содержащая порт реле №1.
const int relayPin1 = 13;

// Константа, содержащая порт реле №2.
const int relayPin2 = 12;

// Переменная, содержащая состояние кнопки.
int buttonState = 0;

// Создаем реле времени (Порт, Задержка включения, Задержка выключения).
TimingRelay relay1(relayPin1, 2000, 5000);
TimingRelay relay2(relayPin2, 4000, 800);

void setup()
{
  // Инициализируем порт кнопки как вход.
  pinMode(buttonPin, INPUT);
  // Включаем автоматическое сбрасывание состояния реле.
  // Автоматический запуск таймера задержки выключения.
  relay1.autoReset = true;
  relay2.autoReset = true;
}

void loop()
{
  // Считываем статус кнопки.
  buttonState = digitalRead(buttonPin);
  // Если кнопка нажата включаем реле.
  if (buttonState) relay1.on();
  // Обрабатываем (обязательно).
    relay1.loop();
  // Считываем статус кнопки.
  buttonState = digitalRead(buttonPin);
  // Если кнопка нажата включаем реле.
  if (buttonState) relay2.on();
  // Обрабатываем (обязательно).
    relay2.loop();
}

Почему то уверен что концовочка дописана не так, но работает, пробовал по разному другие варианты - выдавало ошибку.
Ещё раз огромное спасибо.

8

Re: Библиотека TimingRelay: Реле времени

Сергей М пишет:

Почему то уверен что концовочка дописана не так, но работает, пробовал по разному другие варианты - выдавало ошибку.
Ещё раз огромное спасибо.

Да, конец можно упростить так.

void loop()
{
  buttonState = digitalRead(buttonPin);
  if (buttonState)
  {
    relay1.on();
    relay2.on();
  }
  relay1.loop();
  relay2.loop();
}

или даже так

void loop()
{
  if (digitalRead(buttonPin))
  {
    relay1.on();
    relay2.on();
  }
  relay1.loop();
  relay2.loop();
}

9

Re: Библиотека TimingRelay: Реле времени

Добрый день! Спасибо очень удобная библиотека, но есть вопросы: 
Как корректно организовать включение одного из нескольких реле с задержкой, с момента нажатия кнопки и на определенное время.
И как с учетом времени. Будут ли сбои при круглосуточной работе скетча, например через 50 суток?
Режим с фиксируемой кнопкой.

10

Re: Библиотека TimingRelay: Реле времени

andean пишет:

Как корректно организовать включение одного из нескольких реле с задержкой, с момента нажатия кнопки и на определенное время.

Смотрите базовый пример пример "button" (Файл - Примеры - TimingRelay - Button).

andean пишет:

И как с учетом времени. Будут ли сбои при круглосуточной работе скетча, например через 50 суток?
Режим с фиксируемой кнопкой.

Библиотека учитывает сброс таймера каждые 43 дня и обрабатывает это, но естественно не проверялось, нет желания столько ждать.

11

Re: Библиотека TimingRelay: Реле времени

Спасибо за ответ. Но уточню вопрос : как только кнопка нажата- несколько реле включаются с разными задержками, и включены до отпускания кнопки, причем с тоже с разной задержкой это понятно. Все понятно- все великолепно!
Но мне потребовалось, чтобы одно реле включалось с некоторой задержкой  и на конкретное время при нажатии кнопки ,а второе реле -после отпускания кнопки с некоторой задержкой и тоже на другое конкретное время. Возможно ли это с данной библиотекой?

12

Re: Библиотека TimingRelay: Реле времени

Да возможно. Вот пример:

// Подключаем библиотеку TimingRelay.
#include "TimingRelay.h"

// Константа, содержащая порт кнопки.
const int buttonPin = 5;

// Константа, содержащая порт реле №1.
const int relayPin1 = 8;

// Константа, содержащая порт реле №2.
const int relayPin2 = 9;

// Переменная, содержащая состояние кнопки.
int buttonState, previousButtonState = 0;

// Создаем реле времени (Порт, Задержка включения, Задержка выключения).
TimingRelay relay1(relayPin1, 1000, 5000);
TimingRelay relay2(relayPin2, 1000, 5000);

 void setup()
{
  // Инициализируем порт кнопки как вход.
  pinMode(buttonPin, INPUT);
  relay1.autoReset = true;
  relay2.autoReset = true;
}

void loop()
{
  // Считываем статус кнопки.
  buttonState = digitalRead(buttonPin);
  if (buttonState != previousButtonState)
  {
    // Антидребезг.
    delay(10);
    buttonState = digitalRead(buttonPin);
    if (buttonState != previousButtonState)
    {
      // Если кнопка нажата, запускаем реле 1, иначе, запускаем реле 2.
      if (buttonState) relay1.on(); else relay2.on();
      previousButtonState = buttonState;
    }
  }
  // Обрабатываем (обязательно).
  relay1.loop();
  relay2.loop();
}

13

Re: Библиотека TimingRelay: Реле времени

Теперь все понятно. Работает отлично. Написано очень элегантно. Большое спасибо!!!

14

Re: Библиотека TimingRelay: Реле времени

Здравствуйте!
Возможно ли время задержки включения(выключения) задать переменной, объявленной в классе relay., значения которой можно было бы задавать в дальнейшем коде?
Т.е., чтобы задержка не задавалась константой, а могла бы варьироваться?

15

Re: Библиотека TimingRelay: Реле времени

A.Hillys пишет:

Здравствуйте!
Возможно ли время задержки включения(выключения) задать переменной, объявленной в классе relay., значения которой можно было бы задавать в дальнейшем коде?
Т.е., чтобы задержка не задавалась константой, а могла бы варьироваться?

Для этого необходимо немного подождать следующей версии библиотеки. Там добавлю такую возможность.

16

Re: Библиотека TimingRelay: Реле времени

Я в Вашей библиотеке вынес переменные onDelay и offDelay из private в public, а в самом коде задавал значение  задержки переменным relay.onDelay relay.offDelay.
Вроде работает. Я на правильном пути?

17

Re: Библиотека TimingRelay: Реле времени

A.Hillys пишет:

Я в Вашей библиотеке вынес переменные onDelay и offDelay из private в public, а в самом коде задавал значение  задержки переменным relay.onDelay relay.offDelay.
Вроде работает. Я на правильном пути?

Да. Именно это я бы и сделал.

18

Re: Библиотека TimingRelay: Реле времени

Здравсвуйте. У меня получилось сделать так что бы было две независимых кнопки (без фиксации) и два независимых реле. А возможно ли так сделать, что бы во время работы любого реле, если нажать на соответствующую ему кнопку оно отключалось? 
Примерно так выглядит сейчас мой скетч:

// Подключаем библиотеку TimingRelay
#include <TimingRelay.h>
const int buttonPin1 = 2;// Константа, содержащая порт кнопки 1.
const int buttonPin2 = 3;// Константа, содержащая порт кнопки 2.
const int relayPin1 = 8;// Константа, содержащая порт первого реле.
const int relayPin2 = 9;// Константа, содержащая порт второго реле.
int buttonState = 0;// Переменная, содержащая состояние кнопки.
TimingRelay relay1(relayPin1, 20, 1000);// Создаем первое реле времени (Порт, Задержка включения, Задержка выключения).
TimingRelay relay2(relayPin2, 20, 3000);// Создаем второе реле времени (Порт, Задержка включения, Задержка выключения).

void setup()
{
  pinMode(buttonPin1, INPUT);  // Инициализируем порт кнопки 1 как вход.
  pinMode(buttonPin2, INPUT);  // Инициализируем порт кнопки 2 как вход.
}

void loop()
{
  buttonState = digitalRead(buttonPin1);// Считываем статус кнопки.
  relay1.set(buttonState);// Передаем статус первого реле. 
  relay1.loop();
  buttonState = digitalRead(buttonPin2);// Считываем статус кнопки.
  relay2.set(buttonState);// Передаем статус второго реле.
  relay2.loop();
}

19

Re: Библиотека TimingRelay: Реле времени

Nickotinich пишет:

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

К сожалению в библиотеки такой возможности нет.

20

Re: Библиотека TimingRelay: Реле времени

genaonyx пишет:

Выпустил новую версию.
Исправил появление ошибок.
Добавил работу от короткого импульса.
Добавил еще два примера.

Скачайте и проверьте. Вам нужен пример "ShortPulse".

Приветствую, подскажите, где найти можно и скачать скетч под короткое касание кнопкой?

Я новичок и вот только стал учится работать с Ардуино. Задача состоит в том, чтобы при касании кнопки у меня через время (задержка во времени) пошёл короткий сигнал на эмиттерный повторитель, который должен запускать тиристор. Время включения импульса мне прийдётся подбирать.  Ваш первый вариант на одно реле срабатывает при удержании кнопки...У меня вместо реле был включен светодиод, он начинал гореть через некоторое время при замыкании кнопки и то время очень долгое.
Я хотел бы попробовать ваш вариант, который вы назвали короткое касание в надежде, что после короткого касание можно будет задать задержку включения и сигнал включения (предварительно 1 миллисекунда) тиристора( эмиттерный повторитель...Или подскажите, как поступить?

Устройство сродни гаусс-пушки
Спасибо

Post's attachments

Attachment icon Ардуино 19 6 2018.jpg 124.42 kb, 218 downloads since 2018-06-20 

21

Re: Библиотека TimingRelay: Реле времени

Что поменять чтобы было наоборот. При нажатии кнопки надо чтобы реле выключалось???

22

Re: Библиотека TimingRelay: Реле времени

Попробуйте инвертировать сигнал например так: relay1.set(!buttonState);

23

Re: Библиотека TimingRelay: Реле времени

Доброй ночи, нужная статья все работает но у меня low level на реле нужен - как тут изменить?
За ранее благодарен.

24

Re: Библиотека TimingRelay: Реле времени

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

#include "TimingRelay.h"
 
const int relayPin = 1;
 
TimingRelay relay(relayPin, 200, 0);
 
void setup()
{
  pinMode(2, INPUT_PULLUP);
}
 
void loop()
{ 
if (digitalRead(2))relay.off();
else relay.on();
relay.loop();
}

25

Re: Библиотека TimingRelay: Реле времени

BlackStrat пишет:

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

Дело в том что у ATtiny нету таймеров, следовательно там работать данная библиотека не будет.