Временные задержки на Включение

Icool
Offline
Зарегистрирован: 17.09.2015

Доброго всем времени суток. Я новичек на сайте. Подскажите как мне организовать такую штуку. Есть датчик на входе который подает HIGH и два выхода на корых реле пуска и реле стопа двигателя. Смысл в чем: на вход подаётся кратковременный сигнал - на реле пуск подаётся сигнал длиной 2-3 секунды и через 3 минуты подаётся сигнал на реле стоп длительностью 1 сек. Особенность в том что при повторной подаче сигнала на вход - на выходе пуска сигнал не подается, но отсчет 3 минут начинается заново. Сижу уж две ночи разбираюсь с функцией mills так ни чего не получалось.

toc
Offline
Зарегистрирован: 09.02.2013

Привет. Ваш вопрос не содержит вопросов. Покажите ваши наработки. Текст программы (скетч). Рисунок, схему того о чём речь. Функция millis возвращает количество миллисекунд с момента включения и больше ничего не делает.

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Как только Вы из того, что тут написали составите правильный алгоритм, все сразу встанет на свои места. Реализация любого алгоритма возможна многими способами и это уже простая механика. Просто возьмите блокнот и карандаш и нарисуйте алгоритм.

Icool
Offline
Зарегистрирован: 17.09.2015
Icool
Offline
Зарегистрирован: 17.09.2015

Из набросок скейча только входа и выхода, не знаю какую функцию использовать в данном случае

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

недостаточно данных для корректной работы алгоритма.

Например, эту фразу как воспринимать: на реле пуск подаётся сигнал длиной 2-3 секунды и через 3 минуты подаётся сигнал на реле стоп длительностью 1 сек?

Вот так: на реле №1 "пуск" подаётся сигнал длиной 2-3 секунды и через 3 минуты подаётся сигнал на реле№2 "стоп" длительностью 1 сек
Или вот так: на реле подаётся сигнал "пуск" длиной 2-3 секунды и через 3 минуты на реле подаётся сигнал "стоп" длительностью 1 сек

В первом случае два реле (замыкающее и размыкающее), во втором - одно, которое просто включается-выключается.

3 минуты отсчитывается с момента сигнала "пуск", или с того момента, как прошло 3 секунды?

Особенность в том что при повторной подаче сигнала на вход - на выходе пуска сигнал не подается, но отсчет 3 минут начинается заново.

Чья это особенность? Это жесткие условия ТЗ или глюк твоего кода?

Icool
Offline
Зарегистрирован: 17.09.2015

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

Чтобы понятно было я нарисовал схемку как я зацепил на ардуину.

Icool
Offline
Зарегистрирован: 17.09.2015

Cуть процесса такая: В нормальном положении все входа и выхода выключены.

При появлении на входе 2 сигнала (он имееет разные характеристики, может быть кратковременным, может долго держаться, может несколько раз появляться и потухать, это датчик)

На выходе 3 появляется сигнал который держится определенное время( 2-3 сек)  а затем потухает, оборудование запускается и работает

По истечении заданного интервала (45сек--3мин), если на входе 2 больше не появляется сигнал, то включается выход 4 (1 сек), оборудование останавливается и переходит в режим ожидания старта. Если появляется сигнал то отчет времени до срабатывания выхода 4 продлевается на заданный интервал. 

Icool
Offline
Зарегистрирован: 17.09.2015

еще один момент, что при уже работающем обарудовании и срабатывании входа 2, сигнал не должен появится на выходе 3. Щас сделаю наброску скейча с буленами и условиями

 

Icool
Offline
Зарегистрирован: 17.09.2015
 
int SB1 = 3; //вход датчика
int START = 4; //выход реле старта
int STOP = 5;//выход реле остановки
boolean WORK = LOW;//переменная оборудование работает
 
void setup()
{
  pinMode(SB1, INPUT);
  pinMode(START, OUTPUT);
  pinMode(STOP, OUTPUT);
}
void loop()
{
                              
  if(SB1 == HIGH && WORK == LOW)
  {
    WORK == HIGH;
   
  }
vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Вот код посмотрите вроде так как Вы говорили, единственное Вы не указали что делать если START отработал а датчик продолжает сигналить, в связи с этим STOP отработать не может. Должен ли START снова реагировать на датчик  или ждать отработки STOP. В этом коде мы не ждем STOP а продолжаем регировать.

#define SB1 3 //вход датчика
#define START 4 //выход реле старта
#define STOP 5//выход реле остановки
bool WORK = 0;//переменная оборудование работает
bool fl_start = 0;
bool fl_stop = 0;
unsigned long int start_Milis = 0;
unsigned long int stop_Milis = 0;

void setup()
{
  pinMode(SB1, INPUT);
  pinMode(START, OUTPUT);
  pinMode(STOP, OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  if (digitalRead(SB1) == HIGH) stop_Milis = millis(); //Сработал датчик -засекли время

  if (digitalRead(SB1) == HIGH && WORK == 0) //Сработал датчик -сменили переменную
  {
    WORK = 1;
    fl_stop = 1;
  }
  if (WORK == 1)
  {
    if (fl_start == 0)
    {
      start_Milis = millis(); // засекли время старта
      fl_start = 1;
    }
    if (millis() - start_Milis >= 2000)// Время прошло отключились
    {
      digitalWrite(START, LOW);
      WORK = 0;
      fl_start = 0;
    }
    else {
      digitalWrite(START, HIGH); //Если время не прошло стартуем 2сек

    }
  }
  if (fl_stop == 1 && millis() - stop_Milis >= 3000) //Если датчик успокоился 3сек
  {
    digitalWrite(STOP, HIGH);
    delay(1000);
    digitalWrite(STOP, LOW);
    fl_stop = 0;
  }
}

 

Icool
Offline
Зарегистрирован: 17.09.2015

Cпасибо, щас проверю

Icool
Offline
Зарегистрирован: 17.09.2015

ВСЕ СУПЕР. Только получается что при повторном срабататывании датчика, во время работы оборудования, запускается реле старта

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

В описании к коду я и написал что так будет, потому что не знаю как надо. А если START не должен запускаться пока не отработает STOP то код нужно немного подправить.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

21ю строчку замените на

if (digitalRead(SB1) == HIGH && WORK == 0 && fl_stop == 0) //Сработал датчик -сменили переменную

Icool
Offline
Зарегистрирован: 17.09.2015

Спасибо огромное. Я уже начал чуть чуть понимать как это работает