Постоянный посетитель


693 80
Выкса
7 мес.

ARDUINO для автоматизации аквариума

Создал отдельную тему по вопросам использования простых и не дорогих плат ARDUINO для целей автоматизации аквариума.
Идея такая - довести это устройство до полнофункционального контроллера для аквариума, в итоге - с WEB сервером для управления по сети в т.ч. Интернет, и GSM модулем с отправкой SMS.
Начало обсуждения в теме про дозатор :
дозатор

Информация будет, в основном, в виде конкретных примеров.

Пример 1. Использоание плат Arduino UNO и Arduino NANO для управления по времени суток устройствами в 2-х каналах посредством релейного модуля.
Предполагается использование для создания 2-х канального дозатора, но и для включения света, например подойдет, и для многих других целей также.

Используется модуль часов реального времени, для точного планирования по времени суток, и релейный модуль. В данном примере используется 4-канальный, но 2 канала не используются...

Схема коммутации в случае использования платы UNO R3:


Схема коммутации в случае использования платы NANO:


Программа для среды программирования Arduino:
//***************************************************
// Скетч для управления релейным модулем, в котором *
// использовано два канала. Используется также RTC *
// Релейный модуль - с инверсной логикой на входе *
// Автор: ZORS *
// Версия 1. Дата 21.12.2013 02:40 *
//***************************************************
//----------ИМПОРТ БИБЛИОТЕК-------------------------
#include <Wire.h> //Подключаем библиотеку для использования I2C интерфейса с модулем RTC
#include <RTClib.h> //Подключаем библиотеку для использования модуля часов реального времени RTC

RTC_DS1307 RTC; //Создаем переменную класса - для использования RTC

//----------Объявляем разные переменные------------
const int RelayChn1 = 6; //Используем цифровой ПОРТ 6 для ПЕРВОГО канала релейного модуля
const int RelayChn2 = 7; //Используем цифровой ПОРТ 7 для ВТОРОГО канала релейного модуля
//----------Настройки времени и продолжительности включения реле

//----------ПЕРВЫЙ канал----------------------------
const long StartRelCn_1 = 25200; //Время срабатывания в ПЕРВОМ канале релейного модуля (в секундах от начала суток)
//в данном случае 25200 - это 7 часов 00 минут = ( 60секунд *60 минут *7 = 25200)
const long DurationCh_1 = 10; //ДЛИТЕЛЬНОСТЬ срабатывания реле в ПЕРВОМ канале (в секундах)

//----------ВТОРОЙ канал----------------------------
const long StartRelCn_2 = 37800; //Время срабатывания во ВТОРОМ канале релейного модуля (в секундах от начала суток)
//В данном случае 10 часов 30 минут = (60 секунд * 60 минут * 10 часов + 60сек*30мин = 37800)
const long DurationCh_2 = 15; //ДЛИТЕЛЬНОСТЬ срабатывания реле во ВТОРОМ канале (в секундах)

//----------Модуль инициализации setup() - выполняется один раз при инициализации платы при подаче напряжение (и аналогичных событиях)
void setup(){

pinMode(RelayChn1,OUTPUT); //Инициализируем порт для ПЕРВОГО канала как ВЫХОД
pinMode(RelayChn2,OUTPUT); //Инициализируем порт для ВТОРОГО канала как ВЫХОД

digitalWrite(RelayChn1,HIGH); //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень
digitalWrite(RelayChn2,HIGH); //Т.к. используемый релейный модуль с опторазвязкой - управляется инверсной логикой



Wire.begin(); //Инициируем I2C интерфейс
RTC.begin(); //Инициирум RTC модуль

// RTC.adjust(DateTime(__DATE__, __TIME__)); //С этой строки необходимо убрать комментарии один раз в начале,
//для того, чтобы загрузить в RTC дату и время на момент компиляции программы
//Иногда необходимо заливать СКЕТЧ на плату со снятым комментарием - для поправки
//времени в RTC, НО оставлять такой СКЕТЧ в работе НЕЛЬЗЯ !!!!!!!!!!!!!

} // КОНЕЦ ИНИЦИАЛИЗАЦИИ

//--------------------------------------------------
void loop() // ПРОГРАММЫй безусловный ЦИКЛ
{
DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла

//----------Раздел обработки реле по времени ----
long utime = myTime.unixtime(); //сохраняем в переменную - время в формате UNIX
utime %= 86400; //Сохраняем в этой же переменной остаток деления на кол-во секнд в сутках,
//Это дает количество секунд с начала текущих суток

//------------КАНАЛ 1------------------------------
if ((utime >= StartRelCn_1) &&
(utime < (StartRelCn_1+DurationCh_1)))
//Если секунд с начала суток больше, чем задано для включения
//Но, одновременно и меньше, чем задано для включения + длительность
{
digitalWrite(RelayChn1,LOW); //Устанавливаем на ПЕРВОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else //во всех остальных случаях
{
digitalWrite(RelayChn1,HIGH); //Устанавливаем на ПЕРВОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}

//------------КАНАЛ 2 - все аналогично -----------
if ((utime >= StartRelCn_2) &&
(utime < (StartRelCn_2+DurationCh_2)))
{
digitalWrite(RelayChn2,LOW); //Устанавливаем на ВТОРОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else
{
digitalWrite(RelayChn2,HIGH); //Устанавливаем на ВТОРОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}

}//------------Конец ЦИКЛА-----------------------------


(Редактор текста на данном сайте - к сожалению, "ломает" красивое форматирование.

PS: Выложил этот скетч на файлообменник :
http://my-files.ru/h...

В данной программе реализован, довольно-таки простой подход, а простота - основа надежности.

Каждое из 2-х реле срабатывают один раз в сутки в указанное время, причем время указывается в количестве секунд от начала суток, и удерживается указанное количество времени в секундах.
Такой способ задания времени - несколько сложен для понимания, но за это - не нагружает программу и процессор лишним функционалом, который понадобится всего один раз.
Для определения времени наступления события начала включения и выключения реле - используется время в формате UNIX.

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

У комплектных минутных и секундных таймеров "с розеткой" - об этом можно только мечтать....не реализован такой функционал, и еще у них есть один минус. Реле в таких таймерах - не удерживаемое, а переключаемое, со всеми вытекающими последствиями....

Для программирования нескольких включений каждого реле в течение суток - естественно, потребуется несколько другой подход....спрашивайте когда кому-то потребуется, пока не хочу все усложнять...
В принципе, можно добавить константных переменных, содержащих время и длительность срабатывания, и соответственно добавить проверку на условия.
Если количество необходимых срабатываний каждого реле в сутках больше чем 2 - лучше оформить проверку условий в отдельной функции. Как, говорил человек, учивший меня программированию - "все, что ты делаешь в программе больше двух раз - оформляй отдельной процедурой, или функцией".

Главное ограничение этого подхода - включение и выключение реле - должно произойти в одних сутках. Если необходимо чтобы, реле включилось в одних сутках, а выключилось в других - необходимо разбить это задание на 2 задания, или применить другой метод проверки условий наступления событий включения и выключения.

Весь этот пример тестировался на "живом" железе :

Для наглядности отладки был еще подключен LCD дисплей 16 сим в 2 строках.
Схема итоговая была такая:

Обратите внимание, что при использовании I2C последовательного интерфейса - соединения значительно упрощаются. И LCD дисплей подключен транзитом через модуль RTC (часов реального времени). Никаких паяных соединений нет вообще....все скоммутировано - проводами с разъемами.
Скетч - естественно, несколько другой использовался с добавлением строк инициализации и использования LCD 16x2.

Плата использовалась типа такой:
http://www.ebay.com/...
цена примерно 350 руб.

Релейный модуль
http://www.ebay.com/...
цена примерно 150 руб.

Модуль часов реального времени:
http://www.ebay.com/...
Цена примерно 55 руб.

Для сокращения бюджета можно использовать плату проще:
http://www.ebay.com/...
Цена примерно 200 руб.

Если есть потребность подключить ЖК дисплейчик, то лучше брать ЖК дисплей (LCD) c I2C интерфейсом - это сильно упрощает коммутацию, и сокращает количество использованных портов на микроконтроллере.
Например такой можно использовать :
http://www.ebay.com/...
цена около 180 руб.

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

Для использования I2C интерфейса - необходима библиотека Wire. Она есть в стандартном дистрибутиве среды программирования Arduino.
Для использования модуля RTC на микросхеме DS1307 нужна библиотека RTClib.
Если ее не будет в стандартном дистрибутиве, то ее можно взять в интернет. Например здесь :
http://arduino-info....

Необходимо, скачать, и разархивировать zip-файл в папку с понятным названием, например RTCLib. Затем эту папку поместить в папку, где среда Arduino хранит свои библиотеки. Если ставили среду программирования с настройками по умолчанию, то этой папкой будет :
C:Program FilesArduinolibraries
Сюда и помещайте папки с подключаемыми библиотеками. Если на этот момент, среда программирования была запущена - ее необходимо закрыть, и запустить заново. После этого библиотека будет доступна в меню Скетч/Импортировать библиотеку.

Микросхема RTC модуля DS1307, как правило использует адрес на шине I2C равный 0x68
поэтому, необходимо проверить в библиотечных файлах, библиотеки RTClib наличие строки типа этой:
#define DS1307_ADDRESS 0x68

Если будет использоваться LCD 16x2 с I2C интерфейсом, то - понадобиться библиотека LiquidCrystal_I2C. Можно скачать здесь :
http://dvrobot.ru/lc...
Как подключить к среде программирования Arduino - см. выше

ВАЖНО : при использовании I2C устройств - в скетче, библиотека Wire - должна быть объявлена первой, иначе - будут ошибки компиляции.

По этому примеру - все....

в следующем - присоединение термо-датчика DS18B20, и создание несложного терморегулятора.....


Изменено 24.12.13 автор Z0RS
2013-12-2121/12/2013 15:57:48
#1907148
Посетитель


179 20
Сергиев Посад
1.5
1 час.

Z0RS
ARDUINO для автоматизации аквариума


Мне это напомнило фильм Картофельный Папа, там бросают шар в отверстие и ракета вылетает в космос.
2018-01-1010/01/2018 11:10:03
#2450049
Посетитель


66 2
Russian Federation Moscow
11 мес.
Я просто достал это из лазерной указки для кота из фикспрайса)
Кнопку отпаять, провода припаять. Питается от ардуинки без проблем и резисторов

kalibri
Мне это напомнило фильм Картофельный Папа, там бросают шар в отверстие и ракета вылетает в космос.
Кажется, я не понял Вашей ассоциации...

Изменено 10.1.18 автор B_wolf
2018-01-1010/01/2018 12:31:50
#2450075
Посетитель


179 20
Сергиев Посад
1.5
1 час.

Lex_vx

Если у вас получится то здорово!
2018-01-1010/01/2018 12:36:32
#2450079
Посетитель


66 2
Russian Federation Moscow
11 мес.

kalibri

А, я понял. Скепсис.
Объясню зачем я это делаю.
Я использую реактор по принципу аппарата Киппа. И у него есть один недостаток-после определенного расхода реагентов давление в системе может повыситься и подача СО2 увеличивается. Также недавно после перезаправки я предварительно настроил подачу и пошел спать. Человеческий фактор. Давление вышло на рабочее значение и подача зашкаливала. Придя с работы обнаружил рыб в критическом состоянии. Апистограмма аварию не пережила. Остальных откачал.
А это устройство будет считать пузыри и сервоприводом регулировать подачу, удерживая её в заданном интервале. Выставил на дисплее 2 пуз/сек и всё хорошо. Плюс можно посчитать количество СО2 в литрах, вырабатываемое за одну заправку, и выводить на дисплей расход реагентов в процентах. А если реагенты совсем уж закончились-попищать (в вечернее время, конечно же).
Также оно будет управлять ЭМ клапаном. Выкинется один таймер из под аквы, у которого, кстати, реле не удерживаемое, а переключаемое. Другими словами если электроника таймера выходит из строя при включенном реле-оно не выключится.
При зависании, отказе, перезагрузке ардуины по вачдогу-клапан всегда будет закрываться.

Если бы я только пузыри считал-да, извращение. Но в таком ключе устройство для меня полезно и надежно.
2018-01-1010/01/2018 13:34:33
#2450103
Посетитель


179 20
Сергиев Посад
1.5
1 час.

Lex_vx

Не хотел вас обидеть. То что вы говорите будет очень здорово использовать в деле. И искринне желаю вам успеха в задумке . Да, если посидеть и подумать то множество процессов можно автоматизировать. Сам купил себе контроллер закатов и рассветов, хочу прикрутить к нему клапан блокировки углекислоты на ночь.
2018-01-1010/01/2018 13:41:35
#2450109
Посетитель


66 2
Russian Federation Moscow
11 мес.
Я не обидчивый) Да, можно еще сказать "а что не баллон?". Ну да, баллон с одной стороны удобнее. Но есть и минусы. Цена и необходимость возить баллон на заправку. Ну лень мне это делать!
А реактор... 1200р комплект с али и 60р раз в месяц на заправку.

Автоматизировать буду постепенно. Начал с этого. Остальное пока едет из Китая.
Следующее на очереди-кулеры. На оборотах, которые обеспечивают тишину ночью, они не справляются с охлаждением днем. Опять же на прошлых выходных включил свет пораньше. К вечеру обнаружил в банке температуру в 31 градус.
Следующее-оповещение звуком и по СМС в случае отключения электричества. Уже дважды отрубали свет на несколько часов. Последствия всем известны. Замена аэробных бактерий в фильтре аэробными, старт внешника, выброс сероводорода... От этих напастей у меня скончалось уже 8 (!!!) цихлид! Пусть унитаз им будет пухом.
Конечно, неплохо бы иметь ИБП.
А пока-при отключении электричества более чем на 50 минут-внешник не запускать, включить внутренную помпу.
2018-01-1010/01/2018 13:56:42
#2450123
Новичок


1
Ukraine Poltava
5 мес.

Z0RS
МНОГОКОМАНДНЫЙ МНОГОКАНАЛЬНЫЙ ТАЙМЕР


Народ подкиньте пожалуйста код из первой страницы (он удален из диска). Очень нужен таймер на несколько включений в день. Для дозатора Балинга на перистальтических насосах. Хочу за несколько раз вносить дневную дозу. Спасибо
2018-07-0808/07/2018 16:16:26
#2515146
Посетитель


126 4
Russian Federation Togliatti
2 мес.

Рабочий, код кривой вставляется, нужно поправлять

// Скетч для управления релейным модулем и PWM* // Используется также RTC для точных часов без корректировки* // Релейный модуль - с инверсной логикой на входе *
// PWM UNO: 3-й, 5-й, 6-й, 9-й, 10-й и 11-й. Могут являться выходами
//***************************************************
//----------ИМПОРТ БИБЛИОТЕК-------------------------
#include <Wire.h> //Подключаем библиотеку для использования I2C интерфейса с модулем RTC
#include <RTClib.h> //Подключаем библиотеку для использования модуля часов реального времени RTC

RTC_DS1307 RTC; //Создаем переменную класса - для использования RTC

//Значения минут и часов в секундах
#define mn 60UL
#define hr 3600UL

//----------Объявляем разные переменные------------
const int RelCYAN = 8; //Используем цифровой ПОРТ -> на реле_4 = CYAN
const int RelRED = 9; //Используем цифровой ПОРТ -> на реле_3 = RED
const int RelLED1 = 7; //Используем цифровой ПОРТ -> на реле_2 включает БП 360W = Основной свет_1
const int RelLED2 = 10; //Используем цифровой ПОРТ -> на релеБиг_1 = Основной свет_2
const int RelLED3 = 11; //Используем цифровой ПОРТ -> на релеБиг_2 Реле = Дополнительный свет
const int RelPROTOKA = 12; //Используем цифровой ПОРТ -> на релеБиг_4
const int RelVOZDUH = 13; //Используем цифровой ПОРТ -> на релеБиг_4

const long OnRelCYAN1 = 8*hr; //Время срабатывания реле
const long OffRelCYAN1 = 10*hr; //Время выключения реле

const long OnRelCYAN2 = 14*hr;
const long OffRelCYAN2 = 15*hr;

const long OnRelCYAN3 = 21*hr+3100;
const long OffRelCYAN3 = 22*hr+450;

const long OnRelRED1 = 17*hr;
const long OffRelRED1 = 20*hr;

const long OnRelRED2 = 21*hr+3100;
const long OffRelRED2 = 22*hr+900;

const long OnRelLED1 = 15*hr;
const long OffRelLED1 = 22*hr;

const long OnRelLED2 = 17*hr;
const long OffRelLED2 = 20*hr;

const long OnRelLED3 = 18*hr;
const long OffRelLED3 = 19*hr;

const long OnRelVOZDUH = 15*hr;
const long OffRelVOZDUH = 22*hr;


const long OnRelPROTOKA1 = 8*hr+900;
const long OnRelPROTOKA2 = 18*hr+1800;
const long OnRelPROTOKA3 = 20*hr;
const long DurationPROTOKA = 1200;

//----------Модуль инициализации setup() - выполняется один раз при инициализации платы при подаче напряжение
void setup(){

pinMode (RelCYAN, OUTPUT);//Инициализируем порт канала как ВЫХОД
digitalWrite(RelCYAN,HIGH); //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень

pinMode (RelRED, OUTPUT);
digitalWrite(RelRED,HIGH);

pinMode (RelLED1,OUTPUT);
digitalWrite(RelLED1,HIGH);

pinMode (RelLED2,OUTPUT);
digitalWrite(RelLED2,HIGH);

pinMode (RelLED3,OUTPUT);
digitalWrite(RelLED3,HIGH);

pinMode (RelPROTOKA, OUTPUT);
digitalWrite(RelPROTOKA,HIGH);

pinMode (RelVOZDUH, OUTPUT);
digitalWrite(RelVOZDUH,HIGH);

Wire.begin(); //Инициируем I2C интерфейс
RTC.begin(); //Инициирум RTC модуль

//RTC.adjust(DateTime(__DATE__, __TIME__)); //С этой строки необходимо убрать комментарии один раз в начале установки часов,
//Иногда необходимо заливать СКЕТЧ на плату со снятым комментарием - для поправки времени в RTC, НО оставлять такой СКЕТЧ в работе НЕЛЬЗЯ !!!!!!!!!!!!!

} // КОНЕЦ ИНИЦИАЛИЗАЦИИ

//--------------------------------------------------
void loop() // ПРОГРАММЫй повторяющийся ЦИКЛ
{
DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла

//----------Раздел обработки реле по времени ----
long utime = myTime.unixtime(); //сохраняем в переменную - время в формате UNIX
utime %= 86400; //Сохраняем в этой же переменной остаток деления на кол-во секунд в сутках, Это дает количество секунд с начала текущих суток


//------------Реле----------
if ((utime >= OnRelCYAN1) && (utime <= (OffRelCYAN1))
or (utime >= OnRelCYAN2) && (utime <= (OffRelCYAN2))
or (utime >= OnRelCYAN3) && (utime <= (OffRelCYAN3)))
{ digitalWrite(RelCYAN,LOW);} else { digitalWrite(RelCYAN,HIGH);}

//------------Реле----------
if ((utime >= OnRelRED1) && (utime <= (OffRelRED1))
or (utime >= OnRelRED2) && (utime <= (OffRelRED2)))
{ digitalWrite(RelRED,LOW);} else { digitalWrite(RelRED,HIGH);}



//------------Реле----------
if ((utime >= OnRelLED1) && (utime <= (OffRelLED1))) //Если секунд с начала суток больше, чем задано для включения, и одновременно меньше, чем задано для включения
{ digitalWrite(RelLED1,LOW); //Устанавливаем на входе релейного модуля НИЗКИЙ уровень - реле включается
} else{digitalWrite(RelLED1,HIGH);}

//------------Реле-----------
if ((utime >= OnRelLED2) && (utime <= (OffRelLED2)))
{ digitalWrite(RelLED2,LOW);} else { digitalWrite(RelLED2,HIGH);}

//------------Реле-----------
if ((utime >= OnRelLED3) && (utime <= (OffRelLED3)))
{ digitalWrite(RelLED3,LOW);} else { digitalWrite(RelLED3,HIGH);}

//------------Реле-----------
if ((utime >= OnRelVOZDUH) && (utime <= (OffRelVOZDUH)))
{ digitalWrite(RelVOZDUH,LOW);} else { digitalWrite(RelVOZDUH,HIGH);}


//------------Реле ПРОТОКИ-----------
if ((utime >= OnRelPROTOKA1) && (utime < (OnRelPROTOKA1+DurationPROTOKA))
or (utime >= OnRelPROTOKA2) && (utime < (OnRelPROTOKA2+DurationPROTOKA))
or (utime >= OnRelPROTOKA3) && (utime < (OnRelPROTOKA3+DurationPROTOKA)))
{ digitalWrite(RelPROTOKA,LOW);} else {digitalWrite(RelPROTOKA,HIGH);}


}
2018-08-0606/08/2018 09:41:43
#2522122
Нравится Zebraj, Чешир
Новичок


3
Russian Federation Kaluga
6 дн.
Всем доброго времени суток, подкиньте пожалуйста скетч Z0RS ,многокомандный таймер. Подскажите как сделать что-бы реле срабатывало каждые 30 секунд.
Заранее спасибо.

Изменено 21.8.18 автор Евгений 2601
2018-08-2121/08/2018 14:39:53
#2526044
Новичок


3
Russian Federation Izhevsk
2 мес.

Z0RS

Здравствуйте. Ссылка не рабочая, где можно скачать?

Изменено 14.10.18 автор Moderator
2018-10-1414/10/2018 08:47:47
#2543741
Новичок


3
Russian Federation Izhevsk
2 мес.

Zebraj
А как такой код на часах DS1302 будет выглядеть?
2018-10-1414/10/2018 22:33:57
#2544120
Посетитель


126 4
Russian Federation Samara
2 мес.

Khabibra
DS1302

Думаю, что 1302 много чего не поймут в этой библиотеке, но можно пробовать....
2018-10-1515/10/2018 11:50:51
#2544263
Посетитель


410 59
Подольск
1 дн.

Khabibra

Для 1302 надо искать другую библиотеку, ибо она не I2C и RTClib с Wire работать не будут.
А лучше вообще саму 1302 заменить на гораздо более точный DS3231.
2018-10-1515/10/2018 12:18:12
#2544277
Новичок


3
Russian Federation Izhevsk
2 мес.
Есть такой код
#include <DS1302.h>

Time t;
int t1=5; // Час включения света
int m1=0; // Минуты включения
int t2=5; // Час вылючения света
int m2=30; // Минуты вылючения
int d; // Переменная в которую записываются текущий показатель часов
int m; // Переменная в которую записываются текущий показатель минут
// Реле модуль подключен к цифровому выводу 5
int Relay = 5;
// Подключение the DS1302
// DS1302: CE pin (RES) -> Arduino Digital 2
// I/O pin (DAT) -> Arduino Digital 3
// SCLK pin(CLK) -> Arduino Digital 4
DS1302 rtc(2, 3, 4);

void setup()
{
pinMode(Relay, OUTPUT);


// Setup Serial connection (Установки подключения)
Serial.begin(9600);

// The following lines can be commented out to use the values already stored in the DS1302(Строки ниже нужно раскоментировать если вы устанавливаете дату и время в модуль после установки нужно опять закоментировать)
// Set the clock to run-mode, and disable the write protection
// rtc.halt(false);
// rtc.writeProtect(false);
//rtc.setDOW(FRIDAY); // Set Day-of-Week to FRIDAY
// rtc.setTime(21, 17, 0); // Set the time to 12:00:00 (24hr format)
// rtc.setDate( 4, 2, 2017); // Set the date to August 6th, 2010
}

void loop()
{
t = rtc.getTime();
// Send Day-of-Week(Передать день недели)
//Serial.print(rtc.getDOWStr());
// Serial.print(" ");

// Передать дату
Serial.print(rtc.getDateStr());
Serial.print(" -- ");
d=t.hour,DEC;
m=t.min,DEC;
// Передать время
Serial.println(rtc.getTimeStr());



if (d >= t1 && d <= t2) {
if (d==t1 && m<m1) {goto label;}
if (d==t2 && m>m2) {goto label;}
digitalWrite(Relay, HIGH); // реле включено
Serial.println(" HIGH ");
}
else
{
label:
digitalWrite(Relay, LOW); // реле выключено
Serial.println(" LOW ");
}
delay(10000); // задержка 10 сек
}

Не могу поставить время. то есть один таймер устанавливается, два нет (утро и вечер) Не подскажите?
2018-10-1515/10/2018 20:47:03
#2544465
Посетитель


410 59
Подольск
1 дн.

Khabibra

Что вы понимаете под "два таймера" и что значит "устанавливается" ?
В приведенном коде единственное реле включается на интервал t1:m1-t2:m2, причем эти тэ и мэ забиты константами в программе и это сложно назвать "установкой"
2018-10-1717/10/2018 11:52:45
#2545013



Top /