Аквариумный контроллера на 2 аквариума
- Войдите на сайт для отправки комментариев
Представляю Вам свою версию простого акваконтроллера
Дано:
1 шт. Arduino nano v3.
1 шт. Oled дисплей 128 X 64 I2C 0,96".
2 шт. Водонепроницаемых DS18B20 температурных датчика.
1 шт. DS3231 модуль часов реального времени.
1 шт. 8 канальный релейный модуль
Итого:
Управление 2мя аквариумами
1 аквариум 4 таймера света + 1 канал на охлаждение (включение вентилятора)
2 аквариум 2 таймера света + 1 канал на охлаждение (включение вентилятора)
вывод на дисплей:
Температуру с 2х датчиков
Статус каналов освещения, охлаждения (включено выключено)
Время контроллера (нужно настроить отображение "0" в скетче код имеется)
Скетч
https://cloud.mail.ru/public/2JgH/LZp3KUEvg
Библиотеки
https://cloud.mail.ru/public/JjC3/34fWJ6rzA
Не понятно, а где акваконтроллер-то? Кроме голого дисплейчика с надписями типа: темпер 1 -1001 (чего-то там) ничего не вижу. Где органы управления??? А... понял все дело в уникальной софт-начинке... )))) Пора мне представить в разделе проектов свою версию "мигалки диодиком на 13 ножке" )))))))
смысл тыкалок если все в скетче указано когда что ключается, выключается, про температуру датчики не подключены в момент съемки. выкладывайте свою мигалку если она кому то пригодиться тут готовое издели с описанием компанентов и работой аналогичные контроллеры имеются либо с 2хстрочными дисплеями либо усложненные конструкции я преследовал цель 1 дисплей для вывода информации включил и забыл.
"смысл тыкалок если все в скетче указано когда что ключается, выключается" А если нужно изменить световой день на часок в ту или иную сторону? А если нужно поднять или опустить температуру на 1-2 градуса? если часики убежали и нужна коррекция? Тащить все это к компу и лить новый скетч?
Смысл от цветного экранчика 128 X 64? Вглядываться в эту кучку пикселей, что бы понять включен свет или нет?
"готовое издели с описанием компанентов и работой" Где оно, это изделие???
Вот, к примеру, мои "изделия":
Этот рулит большим аквасом.
А этот :
рулит банкой по-меньше. (Часики к аквариуму отношения не имеют, пока не придумал куда поставить :) )
Все это собрано самодельной паялкой:
Хоть внешний вид и "ниочем", будет время и желание переделаю, но это хотябы похоже на готовое изделие.
А ваше изделие это дисплейчик+дунька+релейный модуль+пучок проводков на столе ? так?
Так это не изделие, это макет из говна и палок.
P.S. Орфография с пунктуацией жесть )
пусть так) просто выложил скетч быть может кому будет полезен делов то) пунктуация согласен мне минус)
Спасибо за скетч. Двое суток лопатил интернет ища именно такой скетч для релюшек. Дисплея нет-это именно то, что мне надо,настроил один раз и забыл.
Подскажите, а как на первый канал добавить третий период срабатывания реле "включить"..."выключить"?
а кроме освещения и температуры он больше ничегоне умеет? Ph и пр?
а кроме освещения и температуры он больше ничегоне умеет? Ph и пр?
нет
/*Готовая версия контроллера я рад) * Роман Четин */ //Загрузка библиотек #include <OneWire.h> #include <Wire.h> #include <RTClib.h> int TSensorPin1 = 2; int TSensorPin2 = 3; OneWire ds1(TSensorPin1); OneWire ds2(TSensorPin2); RTC_DS1307 RTC; //Подключение выходов const int RelayChn1 = 5; //Используем цифровой ПОРТ 5 для ПЕРВОГО канала релейного модуля const int RelayChn2 = 6; //Используем цифровой ПОРТ 6 для ВТОРОГО канала релейного модуля const int RelayChn3 = 7; //Используем цифровой ПОРТ 7 для ТРЕТЬЕГО канала релейного модуля const int RelayChn4 = 8; //Используем цифровой ПОРТ 8 для ЧЕТВЕРТОГО канала релейного модуля const int RelayChn5 = 9; //Используем цифровой ПОРТ 9 для ПЯТОГО канала релейного модуля const int RelayChn6 = 10; //Используем цифровой ПОРТ 10 для ШЕСТОГО канала релейного модуля const int RelayChn7 = 11; //Используем цифровой ПОРТ 11 для СЕДЬМОГО канала релейного модуля const int RelayChn8 = 12; //Используем цифровой ПОРТ 12 для ВОСЬМОГО канала релейного модуля #define sc 1UL #define mn 60UL #define hr 3600UL //----------Настройки времени и продолжительности включения реле //----------Первый канал LED 5ШТ.*10ВТ. Реле №3 ------------ const long StartRelCn_1 = 8*hr+00*mn+00*sc; //Время срабатывания на ПЕРВОМ канале релейного модуля const long DurationCh_1 = 2*hr+00*mn+00*sc; //ДЛИТЕЛЬНОСТЬ срабатывания реле на ПЕРВОМ канале //----------Первый канал LED 5ШТ.*10ВТ Реле №3 ------------- const long StartRelCn_1L = 17*hr+00*mn+00*sc; const long DurationCh_1L = 5*hr+00*mn+00*sc; //----------Первый канал---------------------------- //const long StartRelCn_1G = 15*hr+3*mn; //const long DurationCh_1G = 0*hr+5*mn; //----------Второй канал LED 7ШТ.*10ВТ. Реле №4 ------------ const long StartRelCn_2 = 10*hr+00*mn+00*sc; const long DurationCh_2 = 7*hr+00*mn+00*sc; //----------Третий канал LED (24 BLUE+10 RED)*3ВТ. Реле №5 ---- const long StartRelCn_3 = 7*hr+30*mn+00*sc; const long DurationCh_3 = 15*hr+00*mn+00*sc; //----------Четвертый канал CO2 Реле №2 -------------- const long StartRelCn_4 = 9*hr+00*mn+00*sc; const long DurationCh_4 = 12*hr+00*mn+00*sc; //----------Пятый канал Удобрения Реле №1 ------------ const long StartRelCn_5 = 10*hr; const long DurationCh_5 = 30*sc; //----------Шестой канал Кормушка --------------------- const long StartRelCn_6 = 9*hr; const long DurationCh_6 = 0*hr; //----------Терморегуляторы //----------Седьмой КАНАЛ---------------------------- float t1 = 24.5; //Уставка температуры для СЕДЬМОГО канала релейного модуля 1 аквариум float tGistrsis1 = 0.7; //Уставка гистерезиса - т.е отклонения от темп-ры уставки т.е. в данном случае 0,7 = плюс минус 0,35 градуса //----------Восьмой КАНАЛ---------------------------- float t2 = 24.5; //Уставка температуры для ВОСЬМОГО канала релейного модуля 2 аквариум float tGistrsis2 = 0.7; //********************************************************* void setup () { Wire.begin(); RTC.begin(); // RTC.adjust(DateTime(__DATE__, __TIME__)); // строка только для первой компиляции!!! DateTime myTime = RTC.now(); //Первоначальные установки выходов pinMode(RelayChn1,OUTPUT); //Инициализируем порт для 1 канала как ВЫХОД pinMode(RelayChn2,OUTPUT); //Инициализируем порт для 2 канала как ВЫХОД pinMode(RelayChn3,OUTPUT); //Инициализируем порт для 3 канала как ВЫХОД pinMode(RelayChn4,OUTPUT); //Инициализируем порт для 4 канала как ВЫХОД pinMode(RelayChn5,OUTPUT); //Инициализируем порт для 5 канала как ВЫХОД pinMode(RelayChn6,OUTPUT); //Инициализируем порт для 6 канала как ВЫХОД pinMode(RelayChn7,OUTPUT); //Инициализируем порт для 7 канала как ВЫХОД pinMode(RelayChn8,OUTPUT); //Инициализируем порт для 8 канала как ВЫХОД digitalWrite(RelayChn1,LOW); //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень digitalWrite(RelayChn2,LOW); //Т.к. используемый релейный модуль с опторазвязкой - управляется инверсной логикой digitalWrite(RelayChn3,LOW); digitalWrite(RelayChn4,LOW); digitalWrite(RelayChn5,LOW); digitalWrite(RelayChn6,HIGH); digitalWrite(RelayChn7,LOW); digitalWrite(RelayChn8,LOW); } //*************************************************** void loop () { DateTime myTime = RTC.now(); uint32_t utime = myTime.unixtime(); utime %=86400; //----------------------------релейная настройка начало------------------ //------------КАНАЛ 1------------------------------ if ((utime >= StartRelCn_1) && (utime < (StartRelCn_1+DurationCh_1)) or (utime >= StartRelCn_1L) && (utime < (StartRelCn_1L+DurationCh_1L))) // if ((utime >= StartRelCn_1) && // (utime < (StartRelCn_1+DurationCh_1)) or (utime >= StartRelCn_1G) && // (utime < (StartRelCn_1G+DurationCh_1G))) { digitalWrite(RelayChn1,LOW); //Устанавливаем на входе релейного модуля ВЫСОКИЙ уровень - реле срабатывает } else { digitalWrite(RelayChn1,HIGH); //Устанавливаем на входе релейного модуля НИЗКИЙ уровень - реле выключается } //------------КАНАЛ 2 ------------------------------ if ((utime >= StartRelCn_2) && (utime < (StartRelCn_2+DurationCh_2))) { digitalWrite(RelayChn2,LOW); //Устанавливаем на ВТОРОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает } else { digitalWrite(RelayChn2,HIGH); //Устанавливаем на ВТОРОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается } //------------КАНАЛ 3------------------------------ if ((utime >= StartRelCn_3) && (utime < (StartRelCn_3+DurationCh_3))) { digitalWrite(RelayChn3,LOW); //Устанавливаем на ТРЕТЬЕМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает } else { digitalWrite(RelayChn3,HIGH); //Устанавливаем на ТРЕТЬЕМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается } //------------КАНАЛ 4------------------------------ if ((utime >= StartRelCn_4) && (utime < (StartRelCn_4+DurationCh_4))) { digitalWrite(RelayChn4,LOW); //Устанавливаем на ЧЕТВЕРТОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает } else { digitalWrite(RelayChn4,HIGH); //Устанавливаем на ЧЕТВЕРТОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается } //------------КАНАЛ 5------------------------------ if ((utime >= StartRelCn_5) && (utime < (StartRelCn_5+DurationCh_5))) { digitalWrite(RelayChn5,LOW); //Устанавливаем на ПЯТОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает } else { digitalWrite(RelayChn5,HIGH); //Устанавливаем на ПЯТОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается } //------------КАНАЛ 6------------------------------ if ((utime >= StartRelCn_6) && (utime < (StartRelCn_6+DurationCh_6))) { digitalWrite(RelayChn6,HIGH); //Устанавливаем на ШЕСТОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает } else { digitalWrite(RelayChn6,LOW); //Устанавливаем на ШЕСТОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается } //------------КАНАЛ 7 Контроль температуры ------- float temp1 = getTemp1(); //Читаем температуру с датчика if (temp1 < t1-tGistrsis1/2) { digitalWrite(RelayChn7,LOW); //Устанавливаем на 7 входе релейного модуля НИЗКИЙ уровень - реле срабатывает } else if (temp1 > t1+tGistrsis1/2) { digitalWrite(RelayChn7,HIGH); //Устанавливаем на 7 входе релейного модуля ВЫСОКИЙ уровень - реле выключается } //------------КАНАЛ 8 Контроль температуры ----------- float temp2 = getTemp2(); //Читаем температуру с датчика //------------КАНАЛ 3 Контроль температуры ------- if (temp1 < t1-tGistrsis2/2) { digitalWrite(RelayChn8,LOW); //Устанавливаем на 8 входе релейного модуля НИЗКИЙ уровень - реле срабатывает } else if (temp2 > t2+tGistrsis2/2) { digitalWrite(RelayChn8,HIGH); //Устанавливаем на 8 входе релейного модуля ВЫСОКИЙ уровень - реле выключается } } //***************************************************** //Функции чтения с датчиков температуры float getTemp1(){ byte data[12]; byte addr[8]; if ( !ds1.search(addr)) { //no more sensors on chain, reset search ds1.reset_search(); return -1001; } if ( OneWire::crc8( addr, 7) != addr[7]) { return -1002; } if ( addr[0] != 0x10 && addr[0] != 0x28) { return -1003; } ds1.reset(); ds1.select(addr); ds1.write(0x44,1); byte present = ds1.reset(); ds1.select(addr); ds1.write(0xBE); for (int i = 0; i < 9; i++) { data[i] = ds1.read(); } ds1.reset_search(); byte MSB = data[1]; byte LSB = data[0]; float TRead = ((MSB<<8) | LSB); float Temperature = TRead / 16; return Temperature; } float getTemp2(){ byte data[12]; byte addr[8]; if ( !ds2.search(addr)) { //no more sensors on chain, reset search ds2.reset_search(); return -1001; } if ( OneWire::crc8( addr, 7) != addr[7]) { return -1002; } if ( addr[0] != 0x10 && addr[0] != 0x28) { return -1003; } ds2.reset(); ds2.select(addr); ds2.write(0x44,1); byte present = ds2.reset(); ds2.select(addr); ds2.write(0xBE); for (int i = 0; i < 9; i++) { data[i] = ds2.read(); } ds2.reset_search(); byte MSB = data[1]; byte LSB = data[0]; float TRead = ((MSB<<8) | LSB); float Temperature = TRead / 16; return Temperature; }Народ, подскажите, кто разбирается, как в этом скетче сделать третье, четвертое срабатывание таймера первого канала на включение\выключение? Автор скетча не появляется в теме, а я нуб в программировании, а скетч очень нужен для аквы, спасибо.