Arduino: Таймер включения/отключения

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Всем привет. В прораммировании арудино новичок. Хочу чделать чтобы вытяжка включалась и работала допустим 1 час, затем по истечении времени отлючась на 2 часа и затем  весь цикл повтрялся также. Функции delay прошу не предлагать, т.к. хочу чтобы параллельно с работой вытяжки работали другие процессы постоянно . Читал про millis но он обнуляется через 50 дней. а мне надо чтобы долго работал процесс  управления вытяжкой.  ЗАранее всем большое спасибо за ответы.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

управлять нагрузкой (вытяжкой) хочу реализовать через реле модуль. Синего цвета такое SDR 05VDC-SL-C, параметры:AC 10A 250V. Вопрос ещё- какое максимально продолжительное  время можно включать такое реле? всетаки оно китайское.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Корректировку при переходе millis через ноль сделать несложно. Но если хотите, то можно использовать например библиотеку RTClib. "Проиграйтесь" с этим скетчем softrtc.ino, обратите внимание на функцию unixtime().

По реле: если не превышать ток и напряжение, то о времени во включенном состоянии можете не переживать. Вот количество включений\выключений ограничено 10000 или  100000 раз, не помню точно, смотрите даташит.

bwn
Offline
Зарегистрирован: 25.08.2014

Не нужно делать никаких корректировок через ноль. При правильном написании Вы этого не заметите.
Если Клапауций не запретит.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Тогда через какую функцию или способом можно все это реализовать?

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Cesium137 пишет:

Читал про millis но он обнуляется через 50 дней. а мне надо чтобы долго работал процесс  управления вытяжкой.

ну, а мозги включить? допустим, случилось страшное и миллис обнулился - что произойдёт дальше?

bwn
Offline
Зарегистрирован: 25.08.2014

Через millis(), как сразу и сказали.
Не хочу искать, посмотрите сами по форуму, проблема миллион раз обсуждалась.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Cesium137 пишет:

Тогда через какую функцию или способом можно все это реализовать?

класс титановый велосипед для delay без delay().

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

А с RTC часами оптимально такой таймер программировать какой я задумал?

bwn
Offline
Зарегистрирован: 25.08.2014

А имея RTC на борту, зачем вообще огород с миллис городить?

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Хооршо попробую с миллис сделать таймер

bwn
Offline
Зарегистрирован: 25.08.2014

Cesium137 пишет:

Хооршо попробую с миллис сделать таймер

Имея RTC, в момент смены часа включаешь-выключаешь. Будет правда 1 через 1. Можно и усложнить.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

bwn пишет:

Имея RTC, в момент смены часа включаешь-выключаешь. Будет правда 1 через 1. Можно и усложнить.

В библиотеке RTClib есть функция unixtime()  аналогична millis(), но считает секунды.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Можете пример кода по millis() привести как в заданное время откл или вкл реле. А то я новичок в программировании ардуино. Но есть делание освоить. Попробую его сам разобрать как все работает. Буду очень признателен вам.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Cesium137 пишет:
Можете пример кода по millis() привести как в заданное время откл или вкл реле. А то я новичок в программировании ардуино. Но есть делание освоить. Попробую его сам разобрать как все работает. Буду очень признателен вам.

Да, конечно, на главной странице есть пример. Сделаете точно, как там и можете не бояться никакого обнуления millis.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Cesium137 пишет:
Можете пример кода по millis() привести как в заданное время откл или вкл реле. А то я новичок в программировании ардуино. Но есть делание освоить. Попробую его сам разобрать как все работает. Буду очень признателен вам.

класс титановый велосипед для delay без delay().

 

bwn
Offline
Зарегистрирован: 25.08.2014

Cesium137 пишет:
Можете пример кода по millis() привести как в заданное время откл или вкл реле. А то я новичок в программировании ардуино. Но есть делание освоить. Попробую его сам разобрать как все работает. Буду очень признателен вам.

Здесь. Или велосипед Клапауция.

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

Примерно так, для изучения

#define ventil 1

unsigned long currentPause = millis();   //массив данных.
bool fl_pause;//массив данных.
//unsigned long time = millis();


void setup()
{
    pinMode(ventil, OUTPUT);
}



void loop()
{
    if (fl_pause == 0 && millis() - currentPause >= 2000)  //ДЛЯ ПРОБЫ -2сек. отключ
    {
        digitalWrite(ventil, HIGH);
        currentPause = millis();
        fl_pause = 1;
    }
    if (fl_pause == 1 && millis() - currentPause >= 1000)  //ДЛЯ ПРОБЫ -1сек. включ
    {
        digitalWrite(ventil, LOW);
        fl_pause = 0;
        currentPause = millis();
    }
}

 

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

СПАСИБО ВАМ ОГОРМНОЕ И ВСЕМ ОСТАЛЬНЫМ КТО ПЫТАЛСЯ МНЕ ПОМОЧЬ. РАБОТАЕТ

#define ventil 1
02  
03 unsigned long currentPause = millis();   //массив данных.
04 bool fl_pause;//массив данных.
05 //unsigned long time = millis();
06  
07  
08 void setup()
09 {
10     pinMode(ventil, OUTPUT);
11 }
12  
13  
14  
15 void loop()
16 {
17     if (fl_pause == 0 && millis() - currentPause >= 2000)  //ДЛЯ ПРОБЫ -2сек. отключ
18     {
19         digitalWrite(ventil, HIGH);
20         currentPause = millis();
21         fl_pause = 1;
22     }
23     if (fl_pause == 1 && millis() - currentPause >= 1000)  //ДЛЯ ПРОБЫ -1сек. включ
24     {
25         digitalWrite(ventil, LOW);
26         fl_pause = 0;
27         currentPause = millis();
28     }
29 }

 

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Хочу потихоньку умный дом себе начать делать. НАчну с управлением вытяжки. Есть еще датчикк температуры в герм корпусе Далас и датчик газа MQ2 если почтой с алиэкспресса жду MQ 4  сиглализацию по утечке газа хочу сделать. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

millis()  можно было в начале loop один раз вызвать, а дальше переменную использовать. Чего его дёргать-то по нескольку раз?

А зачем Вам MQ2? Для дыма? Или у Вас сжиженный газ используется? Если второе, то зачем MQ4?

bwn
Offline
Зарегистрирован: 25.08.2014

Зря Лешака на вооружение не взяли, а стали все в loop пихать. Когда количество датчиков превысит некоторый предел, будете в своих if-ах как в болоте продираться. ИМХО.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

я читал в инете MQ2 для дыма. ОН мне сгодится для задымления а MQ4 для природного (у меня природный)

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016
А если отдельную функцию сделать и потом ее вызывать в лупе
int led =13;
unsigned long currentPause = millis();   //массив данных.
bool fl_pause;//массив данных.
//unsigned long time = millis();


void setup()
{
    pinMode(led, OUTPUT);
}

void loop()
{
  time5_10(); 
  
  }

void time5_10()
{
if (fl_pause == 0 && millis() - currentPause >= 5000)  //ДЛЯ ПРОБЫ -2сек. отключ
    {
        digitalWrite(led, HIGH);
        currentPause = millis();
        fl_pause = 1;
    }
    if (fl_pause == 1 && millis() - currentPause >= 10000)  //ДЛЯ ПРОБЫ -1сек. включ
    {
        digitalWrite(led, LOW);
        fl_pause = 0;
        currentPause = millis();
    
}


}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, если для дыма, то понятно. Я бы, наверное, тоже так бы выбрал. Иногда хочется ещё взять что-нибудь для "общей чистоты воздуха" (MQ135, AQ-104 и т.п.), но я про такие только знаю, что есть, а насколько хороши не пробовал.

bwn
Offline
Зарегистрирован: 25.08.2014

Для следующего датчика дальше будете глобальные переменные плодить, а потом в них путаться?

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

А можно еще такой вопрос. Хотя он не по теме таймера. Можно китайскую 5 вольтовую зарядку иолзовать для питания Arduino UNO. Амперы в зарадке выходные влияют на работу ардуино? Есть ЗУ от нокия 5В и 350мА. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Cesium137 пишет:

Можно китайскую 5 вольтовую зарядку иолзовать для питания Arduino UNO. 

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

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Возможно неглобальные переменные буду использовать. внутри условий. обьявляя в каждой конретной операции

bwn
Offline
Зарегистрирован: 25.08.2014

Напряжение сперва проверьте без и под нагрузкой. Хотя для нокии обычно неплохие.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn пишет:

Для следующего датчика дальше будете глобальные переменные плодить, а потом в них путаться?

Бестолку. Человек пока сам не наплодит и не запутается - не поймёт и будет считать, что "ничего, я аккуратно всё буду делать". Грабли - вещь индивидуальная :)

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Хооршо проверю

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Порверил. Без нагрузки 8В а амперы скачать от 110 до 150 и и падают от 150 до 110 и опять растут

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

bwn пишет:

Для следующего датчика дальше будете глобальные переменные плодить, а потом в них путаться?

Бестолку. Человек пока сам не наплодит и не запутается - не поймёт и будет считать, что "ничего, я аккуратно всё буду делать". Грабли - вещь индивидуальная :)

Я когда свою первую программу под Ардуино писал, так и поступил (массив из 15 значений), но сверяться потом с этой табличкой, труд великий был.(((( Хотя до сих пор работает.

bwn
Offline
Зарегистрирован: 25.08.2014

Cesium137 пишет:

Порверил. Без нагрузки 8В а амперы скачать от 110 до 150 и и падают от 150 до 110 и опять растут

Ф топку, а амперы накоротко что ли меряли?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Cesium137 пишет:

амперы скачать от 110 до 150 и и падают от 150 до 110 и опять растут

Сикока-сикока? Япоонамать! Чем Вы их такие меряли? :)

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Амперы мерил два щума мельтиметра к двум проводам.  

Я так понял исходя из характеристик ардуино зарадка 5 вольтовая не подойдет надо больше вольт

Из сайта аруино:

Характеристики

 

Микроконтроллер ATmega328
Рабочее напряжение 5 В
Входное напряжение (рекомендуемое) 7-12 В
Входное напряжение (предельное) 6-20 В

 

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Обычным мультиметром как всегда. В режиме 10ампер. Режим милиамперов пока не работает))) предохранитель сгорел(((

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn пишет:

Я когда свою первую программу под Ардуино писал, так и поступил (массив из 15 значений), но сверяться потом с этой табличкой, труд великий был.(((( Хотя до сих пор работает.

Во-во.

Есть у нас такая присказка (из классической статьи в фольклёр перешла): "Выпускник приличного ВУЗа может за день написать и отладить 1000 строк кода и считает себя суперпрограммистом. Но когда он приходит в компанию, выясняется. что писать 100 строк кода в день не нужно, а нужно модифицировать программу из полумиллиона строк говнокода, которую писали и модифицировали разные люди в течение последних 20 лет. Вот тут-то парень начинает понимает разницу между жизнью и рекламным роликом".

bwn
Offline
Зарегистрирован: 25.08.2014

Вам нужен нормальный, стабилизированный 5 вольтовый блок питания. Предварительно желательно набросать схемку хотелки и оценить потребляемый ток. MQ кажется весьма прожорливы.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Cesium137 пишет:

Амперы мерил два щума мельтиметра к двум проводам.  

К каким двум проводам? Его же надо последовательно с нагрузкой включать!

Потому и предохранитель сгорел, что так меряете.

bwn
Offline
Зарегистрирован: 25.08.2014

Cesium137 пишет:

Обычным мультиметром как всегда. В режиме 10ампер. Режим милиамперов пока не работает))) предохранитель сгорел(((

А вы почаще амперы напрямую меряйте, заодно камаз предохранителей купите.))))

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

Cesium137 пишет:

Амперы мерил два щума мельтиметра к двум проводам.  

К каким двум проводам? Его же надо последовательно с нагрузкой включать!

Потому и предохранитель сгорел, что так меряете.

Помните, сегодня, насчет оптимизма. Живой пример.))))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn пишет:

 MQ кажется весьма прожорливы.

Ещё бы! У них же спираль для нагрева 33 Ома! Это уже 151,5мА

В даташите на MQ2 сказано 800mW (160mA), а на MQ4 - 750mW (150mA). Последнее на правду не похоже, т.к. при сопротивлении спирали 33 Ома уже 151,5 получается. Так, что я бы на 160 ориентировался 

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Получается чем больше датчиков и прочих механизмов чем больше ампер должно быть в блоке питания для ардуино?

Или учше для датиков одельное питание сделать а на ардуино только сигнальные провода и питание 5в??

Блок питание от компьютера подойдет? там выход на 5 вольт есть

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Тутя сглупил то мерил амперы так.Поссчитал о если пишут 350мА подумал что выдает ЗУ столько

bwn
Offline
Зарегистрирован: 25.08.2014

Ну посчитайте вы уже.(((( А то и аккумулятор от танка неплохо.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Блок питание от компьютера подойдет? там выход на 5 вольт есть. Ток такого выхода 20А. 

bwn
Offline
Зарегистрирован: 25.08.2014

Cesium137 пишет:

Тутя сглупил то мерил амперы так.Поссчитал о если пишут 350мА подумал что выдает ЗУ столько

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Cesium137 пишет:

Блок питание от компьютера подойдет? там выход на 5 вольт есть

И целых 20+ ампер! Безусловно подойдёт, если по размеру подходит. Правда, если сумеете его включить. Вы знаете как его вне компьютера использовать? Он там не вдруг-то включается.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Знаю. зеленый провод с землей коротнуть. Я ремонтом копмьютеров занимаюсь. В основном программным ремонтов. немного техническим (перепайка конденсаторов)