go to bottom
Постоянный посетитель
Аквафорум рыбкаАквафорум рыбкаАквафорум рыбка
Аватар пользователя

693 90
Выкса
2 года

ARDUINO для автоматизации аквариума (страница 12)

Создал отдельную тему по вопросам использования простых и не дорогих плат 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 //Подключаем библиотеку для использования I2C интерфейса с модулем RTC
#include //Подключаем библиотеку для использования модуля часов реального времени 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
//Если секунд с начала суток больше, чем задано для включения
//Но, одновременно и меньше, чем задано для включения + длительность
{
digitalWrite(RelayChn1,LOW); //Устанавливаем на ПЕРВОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else //во всех остальных случаях
{
digitalWrite(RelayChn1,HIGH); //Устанавливаем на ПЕРВОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}

//------------КАНАЛ 2 - все аналогично -----------
if ((utime >= StartRelCn_2) &&
(utime
{
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
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 583
Ростов-на-Дону
3 года

Z0RS

Рад приветствовать! Давно не было слышно. Ваша тема уже выросла в целое направление ардуинистов-аквариумистов Смайлик :)
2015-07-0606/07/2015 21:57:14
#2105720
Постоянный посетитель
Аквафорум рыбкаАквафорум рыбкаАквафорум рыбка
Аватар пользователя

693 90
Выкса
2 года

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


Да. Спасибо Вам, что поддерживаете данную тему.
Мне, к сожаленью, не легко на это находить время. Изменилось многое в жизни, работа, место жительства и пр. обстоятельства. Даже банками жена занимается...еще тот аквариумист получился...Смайлик :DСмайлик :DСмайлик :D
Извиниюсь за "не в тему"....

PS: Главного то не сказал...Смайлик :D
Перечитал сейчас тему, и вообщем-то обнаружил, что в ней есть практически все, что нужно для построения несложного и довольно-таки надежного аквариумного контроллера, по среднестатистическим требованиям, и за не большие деньги.
Значит не зря...

Изменено 6.7.15 автор Z0RS
2015-07-0606/07/2015 22:19:00
#2105725
Постоянный посетитель
Аквафорум рыбкаАквафорум рыбкаАквафорум рыбка
Аватар пользователя

625 482
Москва
20 дн.

Z0RS
спасибо за код , завтра попробую-) но коль все здесь, ещё немного понаглею .
Но как теперь написать , что бы он озлаждал допустим на 1 градус до 25 и отключался . Ведь в данном случае он будет дёргаться он оф .
Или может проще иф темпер больше 26 , работать 20 мин . затем проверить значение температуры?
2015-07-0606/07/2015 22:27:39
#2105730
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 583
Ростов-на-Дону
3 года

Bloody

К примеру, вот кусочек моего кода (там у меня еще одним условием было время, чтобы кулер не жужжал по ночам, но я его убрал, чтоб вас не путать).
if(temp > (t + tGist))
{ digitalWrite(TermRel, HIGH); }
else if (temp
{ digitalWrite(TermRel, LOW); }
Понятно, что значения t ( у меня 27 гр) и гистерезиса tGist (у меня 0,25 гр), вывода TermRel заданы заранее. Т.е. при достижении 27,25 гр кулер включается, а при опускании до 26,75 гр - выключается. Т.е. вегда есть люфт в 0,5 градусов, и релешка не щелкает постоянно. На этой основе можно постоить вообще кучу всего, типа датчика движения, пардон, в сортире, и т.д.
2015-07-0606/07/2015 22:40:21
#2105738
Постоянный посетитель
Аквафорум рыбкаАквафорум рыбкаАквафорум рыбка
Аватар пользователя

625 482
Москва
20 дн.

Дядька-рыбомор

Всё работает , всё теперь понятно . Но теперь хочется большего !!!
Хочется рассветзакат. Да да , для начала бутафорная лента на крии 5050 диодах .
Всё это надо реализовывать на таких димирующих платах?
http://ru.aliexpress...
или есть на 1 канал? не могу найти .
2015-07-1212/07/2015 13:49:36
#2107510
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

373 92
Ижевск
5 года

Для светодиодной ленты не нужно никаких диммирующих плат.
Я для функции рассвет-закат использую одну полоску Warm White ленты (хватает), наклеенную спереди под крышкой аквариума. Нашёл место. 12 В управляю посредством ШИМ через полевой транзистор IRL520. После выключения основного света лента освещает аквариум до 22.00, потом закат на пол часа. Рассвет только в темные месяцы года. Летом рассвет натуральный. Ночью мягкая подсветка на 3, чтобы рыбкам не страшно было. Смайлик :)

Изменено 13.7.15 автор Mr.Sim

Изменено 13.7.15 автор Mr.Sim

2015-07-1313/07/2015 19:08:18
#2107816
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

373 92
Ижевск
5 года

Bloody

Может Вам пригодиться как сделано у меня. Июнь был жарким, но в аквариуме вода выше 26 градусов не поднималась.
Кулер состоит из 4-х обычных компьютерных 80-ти мм. вентиляторов. Управление через ШИМ на том же IRL520.
Ниже приведена функция охлаждения. Кратко: f_temp - показания температурного датчика, f_tAqua - нужная температура в аквариуме. Остальные переменные, думаю, интуитивно понятны.
Логика такая:
void WaterCooling() {
static int fansValue = 0;
static boolean b_hotTrigger = 0;
boolean b_waterHot = f_temp > (f_tAqua + f_hotGist);
boolean b_waterNorm = !b_waterHot;
boolean b_waterHotToNorm = f_temp boolean b_light_1 = digitalRead(pinMainLight) == ON;
boolean b_light_2 = digitalRead(pinAuxLight) == ON;
boolean b_coolingOn_1 = b_light_1 && !b_light_2;
boolean b_coolingOn_2 = b_light_1 && b_light_2;
boolean b_coolingOff = !(b_coolingOn_1 || b_coolingOn_2);

if (b_waterHot) { //Максимальное вращение вентиляторов
fansValue = 255; // при перегреве воды.
b_hotTrigger = 1;
}
if (b_hotTrigger && !b_waterHotToNorm) { //Охлаждаем на максимальных оборотах до температуры f_tAqua + f_aquaGist
fansValue = 255;
}
else if (b_waterHotToNorm && b_hotTrigger) {
b_hotTrigger = 0;
}
if (b_waterNorm && b_coolingOn_1 && !b_hotTrigger) { //Охлаждение ламп при норм. темп-ре воды.
fansValue = 80;
}
else if (b_waterNorm && b_coolingOn_2 && !b_hotTrigger) { //Включение дополнительного охлаждения при включении всех ламп.
fansValue = 120;
}
else if (b_waterNorm && b_coolingOff && !b_hotTrigger) {//Выключение охлаждения на ночь, если темп-ра в пределах нормы
fansValue = 0;
}
analogWrite(pinFans, fansValue);
}

Изменено 13.7.15 автор Mr.Sim

Изменено 14.7.15 автор Mr.Sim
2015-07-1313/07/2015 19:24:24
#2107819
Малёк
Аквафорум рыбка
Аватар пользователя

13
Пермь
9 года

2 DS18B20 на 2х каналах arduino (страница 12)

Добрый день , купил ардуино нано 3 дисплей олед, 8 канальное реле, часовой модуль, столкнулся с проблемой. Нашел пример как подключается 1 термодатчик и в зависимости от температуры включает или выключает вентилятор, не выходит переделать его в 2 датчика и 2 канала.
т.е. допустим термодатчики подключаю к цифровым входам 3 и 4
int TSensorPin1 = 3; //Определяем порт шины OneWire (IC) для температурного датчика DS18B20 1
int TSensorPin2 = 4; //Определяем порт шины OneWire (IC) для температурного датчика DS18B20 2
OneWire ds1(TSensorPin1); //Создаем соответсвующий объект 1 термодатчик
OneWire ds2(TSensorPin2); //Создаем соответсвующий объект 2 термодатчик
далее
const int RelayChn7 = 11; //Используем цифровой ПОРТ 8 для 7 канала релейного модуля Для включения охлаждения
const int RelayChn8 = 12; //Используем цифровой ПОРТ 8 для 8 канала релейного модуля Для включения охлаждения
---------------------
//----------Седьмой КАНАЛ----------------------------
float t0 = 26.5; // правильно ли задаю переменную t0 ?
float tGistrsis = 0.7; //Уставка гистерезиса - т.е отклонения от темп-ры уставки
//т.е. в данном случае 0,7 = плюс минус 0,35 градуса
//----------Восьмой КАНАЛ----------------------------
float t1 = 26.5; // правильно ли задаю переменную t1 ?
float tGistrsis = 0.7; //Уставка гистерезиса - т.е отклонения от темп-ры уставки
//т.е. в данном случае 0,7 = плюс минус 0,35 градуса
после

//------------КАНАЛ 7 Контроль температуры -------
if (temp {
digitalWrite(RelayChn7,LOW); //Устанавливаем на 7 входе релейного модуля НИЗКИЙ уровень - реле срабатывает
lcd.setCursor(13, 1);
lcd.print("1");
}
else if (temp > t0+tGistrsis/2)
{
digitalWrite(RelayChn7,HIGH); //Устанавливаем на 7 входе релейного модуля ВЫСОКИЙ уровень - реле выключается
lcd.setCursor(13, 1);
lcd.print("0");
}

//------------КАНАЛ 8 Контроль температуры -------
if (temp {
digitalWrite(RelayChn8,LOW); //Устанавливаем на 8 входе релейного модуля НИЗКИЙ уровень - реле срабатывает
lcd.setCursor(13, 1);
lcd.print("1");
}
else if (temp > t1+tGistrsis/2)
{
digitalWrite(RelayChn8,HIGH); //Устанавливаем на 8 входе релейного модуля ВЫСОКИЙ уровень - реле выключается
lcd.setCursor(13, 1);
lcd.print("0");
}
и даже если все что выше было верным то ниже уже не могу разобраться
//-------------Объявления и реализация функций---------
float getTemp(){ //функция чтения значения температуры с датчика DS18B20 по шине OneWire
byte data[12]; // Что это за адреса?
byte addr[8]; // Что это за адреса?

if ( !ds.search(addr)) { // тут тоже вроде понятно во втором случае все ds заменить на ds1
//no more sensors on chain, reset search
lcd.setCursor(0, 0);
lcd.print("NO more addrss!");

ds.reset_search();
return -1001;
}

if ( OneWire::crc8( addr, 7) != addr[7]) {
lcd.setCursor(0, 0);
lcd.print("CRC is not valid!");

return -1002;
}

if ( addr[0] != 0x10 && addr[0] != 0x28) {
lcd.setCursor(0, 0);
lcd.print("NOT recognizd!");

return -1003;
}

ds.reset();
ds.select(addr);
ds.write(0x44,1);

byte present = ds.reset();
ds.select(addr);
ds.write(0xBE);


for (int i = 0; i data[i] = ds.read();
}

ds.reset_search();

byte MSB = data[1];
byte LSB = data[0];

float TRead = ((MSB float Temperature = TRead / 16;

return Temperature;
}

2015-07-2727/07/2015 10:01:40
#2111667
Малёк
Аквафорум рыбка
Аватар пользователя

12
Ukraine Kiev
9 года

Код рассвета/заката (страница 12)

Добрый день. Оч. хочется посмотреть код рассвет/закат, который выкладывал Z0RS на второй-третей странице темы. К сожалению ссылки уже не работают. Если есть возможность, обновите ссылки пожалуйста. (SunRiseSunSet_2.rar удален из-за сбоя)

Изменено 29.9.15 автор Alex_T

2015-09-2929/09/2015 10:03:44
#2132031
Новичок

Аватар пользователя

1
Ukraine Odessa
9 года

Доброго времени суток.
Очень замечательная тема, автору респект.
Волей случая , вместе с аквариумом досталась коробка с шилдами ардуино. а именно, Uno , модуль lcd с кнопками, часы, релюшки, датчик температуры.
Из темы всё понятно, что куда подключать, что писать, как проверить.
Только проблемма в том, что мой дисплей дисплей занимает все разьемы на Uno.
Подскажите, как происходит расключение всей остальной перефирии в таком случае?
Как то я далёк от этого((
Шилд LCD вот такой http://ru.aliexpress...
Спасибо.

Изменено 10.11.15 автор Aleksandr_N

2015-11-1010/11/2015 12:45:45
#2147954
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

373 92
Ижевск
5 года

Aleksandr_N
мой дисплей дисплей занимает все разьемы на Uno.

Поменять дисплей на такой (кнопки реализовать отдельно), либо купить такой порт-адаптер. Дисплей будет подключён по интерфейсу I2C, который, помимо двух проводов для питания, работает всего по двум проводам.
2015-11-1010/11/2015 13:56:37
#2147987
Малёк
Аквафорум рыбка
Аватар пользователя

20 1
Борисоглебск
4 года

Доброе время суток. Имеется Лед светильник, который питается от двух разных НИПТ. Т.е. половина СД питаются от НИПТ-64350, а вторая половина от НИПТ-125300/350. Хочу сделать контроллер закат-рассвет. Вот такие компаненты я подобрал: Arduino Nano и модуль часов и Реле .
Правильно ли я подобрал компоненты?
Или же мне придется менять источник питания?

Изменено 6.12.15 автор Sk13dust

2015-12-0607/12/2015 00:05:05
#2158093
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

347 79
Москва
3 дн.

Sk13dust
Если позволите, часы лучше брать на DS3231, не будет проблем с точностью хода, и релейный блок достаточно на два реле (если только для света). Вы же ступенчатое управление светом хотите, правильно?

Изменено 7.12.15 автор fogary
2015-12-0707/12/2015 10:44:49
#2158186
Малёк
Аквафорум рыбка
Аватар пользователя

20 1
Борисоглебск
4 года

fogary
да, хочется рассвет- закат. Правильно-ли я понял что мои НИПТ подключаются к реле. Простите если задаю глупые вопросы, но честное слово, я читал тему и пытался понять, что к чему. Просто у автора на блок схеме дальше реле нет нечего.

Изменено 7.12.15 автор Sk13dust
2015-12-0707/12/2015 11:08:31
#2158198
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

347 79
Москва
3 дн.

Sk13dust
Да, НИПТ подключаете через реле.

Вобщем-то, для Вашего случая достаточно использовать два таймера (для разетки). Подключаете НИПТ каждый к своему таймеру. Программируете один таймер на весь световой день. Второй так что бы включался позже, а выключался раньше на несколько часов.
2015-12-0707/12/2015 11:39:49
#2158212
Малёк
Аквафорум рыбка
Аватар пользователя

20 1
Борисоглебск
4 года

fogary

Это все понятно. Но мне нужно диммировать оба канала по средствам ардуино.

Изменено 7.12.15 автор Daxel
2015-12-0707/12/2015 11:54:32
#2158223
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

347 79
Москва
3 дн.

Sk13dust
Вроде у Ваших НИПТ нет функции диммирования.
Если хотите использовать диммирование, то зачем тогда блок реле?
2015-12-0707/12/2015 12:54:11
#2158240
Малёк
Аквафорум рыбка
Аватар пользователя

20 1
Борисоглебск
4 года

fogary
Если хотите использовать диммирование, то зачем тогда блок реле?
А какой блок использовать? чтобы не убирать НИПТ? я понимаю, что нужно чтото вроде "реостата"))) под управлением ардуино.
2015-12-0707/12/2015 13:29:56
#2158249
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

413 62
Подольск
4 года

Sk13dust

С неуправляемыми драйверами не получится регулировать яркость. Это не светодиодная лента с БП, где можно тупо в разрез воткнуть ШИМ-ключ.
Тут при отрубании нагрузки драйвер задерет напряжение на максимум и при подключении будет удар по диодам, пока не стабилизирует ток. И так много раз в секунду. Кому-то из них от такой работы может поплохеть.
Управлять надо самим драйвером.
2015-12-0707/12/2015 13:47:20
#2158252
Малёк
Аквафорум рыбка
Аватар пользователя

20 1
Борисоглебск
4 года

dkozyrev
Спасибо, понял.
2015-12-0707/12/2015 13:59:52
#2158260
Новичок

Аватар пользователя

1
Russian Federation Cheboksary
8 года

Здравствуйте!!!
Огромная просьба, у кого есть скетч ZORS-а (многопрограмный многокомандный таймер) скиньте пожалуйста на почту (gfi_gs21@mail.ru) или залейте на файлообменник.
Заранее спасибо.

2016-02-1111/02/2016 12:45:41
#2184028
Новичок

Аватар пользователя

8 1
Russian Federation Moscow
2 года

Z0RS

Для программирования нескольких включений каждого реле в течение суток - естественно, потребуется несколько другой подход....спрашивайте когда кому-то потребуется, пока не хочу все усложнять...

Здравствуйте господа хорошие. Возникла потребность в четвертом канале с включением реле два раза в течении дня. Освещение аквариума с 9-13 и с15-21 часа

Изменено 26.2.16 автор кикстартер
2016-02-2626/02/2016 19:09:40
#2191869
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

127 4
Russian Federation
4 мес.

Есть такой вариант:
const long OnRelPROTOKA1 = 18*hr+1800;
const long OnRelPROTOKA2 = 19*hr;
const long OnRelPROTOKA3 = 19*hr+1800;
const long OnRelPROTOKA4 = 20*hr;
const long OnRelPROTOKA5 = 20*hr+1800;
const long OnRelPROTOKA6 = 21*hr;
const long OnRelPROTOKA7 = 21*hr+1800;
const long DurationPROTOKA = 240;

Это в начале, пр определении переменных.

Далее в void loop()
if ((utime >= OnRelPROTOKA1) && (utime or (utime >= OnRelPROTOKA2) && (utime or (utime >= OnRelPROTOKA3) && (utime or (utime >= OnRelPROTOKA4) && (utime or (utime >= OnRelPROTOKA5) && (utime or (utime >= OnRelPROTOKA6) && (utime or (utime >= OnRelPROTOKA7) && (utime { digitalWrite(RelPROTOKA,LOW);} else {digitalWrite(RelPROTOKA,HIGH);}


Изменено 27.2.16 автор Zebraj

2016-02-2727/02/2016 08:08:38
#2192088
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

127 4
Russian Federation
4 мес.

Еще есть вариант, через массив:
long OnRelPROTOKA[7]={18*hr+1800,19*hr,19*hr+1800,20*hr,20*hr+1800,21*hr,21*hr+1800};
void loop(){
boolean RelProtokaStatus = false;
for (int i=0;i if ((utime >= OnRelPROTOKA[i]) && (utime RelProtokaStatus = true;}
}
digitalWrite(RelPROTOKA, !RelProtokaStatus); // именно !RelProtokaStatus, включенному реле соответствует LOW.
}
Криво вставляется код на форум

Изменено 27.2.16 автор Zebraj

2016-02-2727/02/2016 08:13:20
#2192091
Новичок

Аватар пользователя

8 1
Russian Federation Yaroslavl
2 года

БОЛЬШОЕ СПАСИБО за отклики но в программировании я "0", но зато очень хочется сотворить контроллер своими руками (руки чешутсяСмайлик :) ). Во втором варианте скетча уважаемый ZORS запустил третий канал под регулировку температуры воды. А вот четвертый канал с с двойным включения реле в течении суток для этого скетча с коментариями, вот что мне нужно!

2016-02-2727/02/2016 15:56:41
#2192254



Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Top