Re: Відповідь: Ардуино для чайника или знатоки форума для аквариумиста ===www.aquaforum.ua===
Kolyanich, полностью согласен с каждым словом sae74, не один месяц уйдёт новичку на изучение программирования ардуино, и ещё не мало для написания скетча и тестирования на все баги.
А во-вторых - я прочитал много тем на разных форумах, и в каждой теме где есть скетчи+библиотеки+драйвера+компиляторы+и куча всего остального ..... - больше 95% всех постов в каждой теме - не прошилось/ошибки компиляции/не хватает библиотеки/нет того-сего .....
Я пробовал прошить самую простую Ардуино Нано - невышло, 10 ошибок при компиляции, полный бред в "мониторе", установить часы - "вызовите функцию РТС а потом не забудьте закомментировать вызов функции" - что это я пока не понял. Как новичку - это всё слишком сложно ...
С файлом .нех мне проще, запустил хлоадер, нажал "обновить" и готово, и вооообще никаких переживаний о библиотеках, компиляций, закоментирований и прочего непонятного для меня сверхсложного программирования ардуинки.
Re: Ардуино для чайника или знатоки форума для аквариумиста ===www.aquaforum.ua===
согласен с sae74, написать свое проще, чем переделать чужое.
Да долго, да нужно разбираться.
Плюс в том, что если освоите, реализация последующих проектов (не обязательно аквариумных) значительно упрощается.
Re: Ардуино для чайника или знатоки форума для аквариумиста ===www.aquaforum.ua===
Цитата:
Допис від MaxKr
согласен с sae74, написать свое проще, чем переделать чужое.
Да долго, да нужно разбираться.
Плюс в том, что если освоите, реализация последующих проектов (не обязательно аквариумных) значительно упрощается.
чем написать самому - проще купить готовый софт.
А уж если есть бесплатно - даже и мысли не возникнет код писать.
Re: Ардуино для чайника или знатоки форума для аквариумиста ===www.aquaforum.ua===
И снова к интересному ))
Всё на тех же просторах интернета нарыл интересный контроллер для самого необходимого, никаких наворотов, никаких супер пупер функций, все предельно просто:
6 каналов ШИМ с функцией рассвет-закат Скрытый текст
Главная задача блока управления – плавная регулировка уровня по каждому каналу индивидуально в соответствии с заданными данными по каждому каналу в режиме реального времени (по DS1307):
- время начало рассвета;
- время окончания рассвета;
- время начала заката;
- время окончания рассвета;
- минимальное значение ШИМ (ночной период);
- максимальное значение ШИМ (дневной период).
Соответственно, ШИМ сигнал на драйвер канала:
- в ночное время минимальное значение;
- в дневное время максимальное значение;
- в период рассвета линейно увеличивается от минимального к максимальному значению;
- в период заката линейно уменьшается от максимального к минимального значению.
2 канала (реле) - вентиляторы и лунная подсветка
2 канала (реле) - на что угодно, настраиваются на любое время.
Для всего этого нам потребуется всего ничего :
Arduino Nano 3.0 - http://ru.aliexpress.com/item/Nano-3...272435407.html
RTC ds1307 часы реального времени - http://ru.aliexpress.com/item/1pcs-M...7-d444767a6c23
4-канальный релейный модуль - http://ru.aliexpress.com/item/Free-S...999.277.8dfywV Рекомендую именно этот модуль, так как в нём есть H / L триггер, переключатель входного сигнала. И тогда не нужно будет переписывать программу, подключать "наоборот" или ещё разные выдумки.
Как видите, имея всего 7.5$ Вы можете собрать вполне хороший контроллер ...
Полностью прост и надёжен, хоть есть нюанс - для корректировки яркости и настройки силовых каналов, нужно каждый раз подключать к компу, вносить изменения в скетч и заливать на контроллер. Хотя знаю что после нескольких настроек, Вы полностью довольные картинкой и работой - просто туда не будет необходимости ещё что-то настраивать )))
Итак к сборке, и снова всё предельно просто -
Часы / Arduino : SDA / A4 , SCL / A5 , VCC / +5V , GND / GND
ШИМ каналы подключаются на пины : D3, D5, D6, D9, D10,D11
Каналы реле: на ардуине - D7, D8 ( вентилятор и лунн.подсв), D4, D12 (любые другие нагрузки), +5V и GND , на реле IN1,IN2,IN3,IN4 (или CTR1,CTR2,CTR3,CTR4) , VCC и GND
Для программирования потребуется : Среда разработки для Arduino 1.0.5 (https://www.arduino.cc/en/Main/OldSo...Releases#1.0.x ), библиотека RTC (во вложении) и драйвер для Вашего - Arduino (у меня WIN 10 сам определил и установил драйвер, если что в сети легко найти)
Программирование:
Сначала выполняем скетч для запуска часов, дату вводите свою !! - Скрытый текст
RTC.adjust(DateTime(2013, 8, 6, 10, 30, 1)); //Установка даты и времени в формате год, месяц, день, час, минута, сек.
}
void loop () {
DateTime now = RTC.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
}
Проверяете в мониторе порта - правильность настройки времени, после этого загружаем скетч : Скрытый текст
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
int Hours_Start_Relay34[2] = {11, 12}; // включение реле 3 и 4 час
int Minutes_Start_Relay34[2] = {0, 0}; // включение реле 3 и 4 минута
int Hours_End_Relay34[2] = {20, 21}; // выключение реле 3 и 4 час
int Minutes_End_Relay34[2] = {0, 0}; // выключение реле 3 и 4 минута
int MinuteDay_Start_Relay34[2]; // день в минутах для включения реле 3 и 4
int MinuteDay_End_Relay34[2]; // день в минутах для выключения реле 3 и 4
int Hours_Start_Sunrise[6] = {11, 9, 10, 11, 12, 12}; // начало рассвета по каналам час
int Minutes_Start_Sunrise[6] = {0, 0, 0, 0, 0, 0}; // начало рассвета по каналам минута
int Hours_End_Sunrise[6] = {14, 11, 12, 13, 14, 14}; // окончание рассвета по каналам час
int Minutes_End_Sunrise[6] = {0, 0, 0, 0, 0, 0}; // окончание рассвета по каналам минута
int Hours_Start_Sunset[6] = {18, 21, 20, 19, 18, 18}; // начало заката по каналам час
int Minutes_Start_Sunset[6] = {0, 0, 0, 0, 0, 0}; // начало заката по каналам минута
int Hours_End_Sunset[6] = {21, 22, 22, 21, 21, 21}; // окончание заката по каналам час
int Minutes_End_Sunset[6] = {0, 30, 0, 0, 0, 0}; // окончание заката по каналам минута
int MinuteDay_Start_Sunrise[6]; // день в минутах для начала рассвета
int MinuteDay_End_Sunrise[6]; // день в минутах для окончания рассвета
int MinuteDay_Start_Sunset[6]; // день в минутах для начала заката
int MinuteDay_End_Sunset[6]; // день в минутах для окончания заката
int Current_MinuteDay; // текущая минута суток
int Current_Period[6]; // текущая часть суток 1-рассвет, 2-день, 3-закат, 4-ночь для каждого ШИМ
//int Meridian_PWM[6] = {128, 192, 192, 192, 128, 128}; // максимальное значение ШИМ
int Meridian_PWM[6] = {255, 255, 255, 255, 5, 255}; // максимальное значение ШИМ
int Midnight_PWM[6] = {0, 0, 0, 0, 0, 0}; // минимальное значение ШИМ
int Current_PWM[6] = {0, 0, 0, 0, 0, 0}; // текущее значение ШИМ
/* ************************************************** *** */
/* * * */
/* * ШИМ пин для CW, TV, RB, NB, DR, NG * */
/* * Пин - 3 - CW - Cool White * */
/* * Пин - 5 - TV - True Violet * */
/* * Пин - 6 - RB - Royal Blue * */
/* * Пин - 7 - NB - Blue * */
/* * Пин - 10 - DR - Deep Red * */
/* * Пин - 11 - NG - Green * */
/* * * */
/* ************************************************** *** */
int PWM_Pin[6] = {3, 5, 6, 9, 10, 11}; // ШИМ пин для CW, TV, RB, NB, DR, NG
int Relay1 = 7; //вент
int Relay2 = 8; //луна
byte Relay1Status=false;
byte Relay2Status=false;
int Relay34[2] = {4, 12}; //Реле 3 и 4
byte Relay34Status[2] = {false, false};
void setup()
{
Serial.begin(57600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(2013, 1, 1, 12, 59, 1));
}
//RTC.adjust(DateTime(2013, 1, 1, 12, 59, 1));
for (int i=0; i<=5; i++)
{
pinMode(PWM_Pin[i], OUTPUT); // Установка пин для ШИМ
}
for (int i=0; i<=5; i++)
{
analogWrite(PWM_Pin[i], Midnight_PWM[i]); // Установка минимального значения ШИМ
Current_PWM[i]=Midnight_PWM[i]; // установка текущих значений ШИМ в минимум
}
for (int i=0; i<=5; i++)
{
MinuteDay_Start_Sunrise[i]=60*Hours_Start_Sunrise[i] + Minutes_Start_Sunrise[i]; // Расчет минуты суток для начала рассвета
MinuteDay_End_Sunrise[i]=60*Hours_End_Sunrise[i] + Minutes_End_Sunrise[i]; // Расчет минуты суток для окончания рассвета
MinuteDay_Start_Sunset[i]=60*Hours_Start_Sunset[i] + Minutes_Start_Sunset[i]; // Расчет минуты суток для начала заката
MinuteDay_End_Sunset[i]=60*Hours_End_Sunset[i] + Minutes_End_Sunset[i]; // Расчет минуты суток для окончания заката
}
for (int i=0; i<=1; i++)
{
MinuteDay_Start_Relay34[i]=60*Hours_Start_Relay34[i] + Minutes_Start_Relay34[i]; // Расчет минуты суток для включения реле 3 и 4
MinuteDay_End_Relay34[i]=60*Hours_End_Relay34[i] + Minutes_End_Relay34[i]; // Расчет минуты суток для выключения реле 3 и 4
pinMode(Relay34[i], OUTPUT);
digitalWrite(Relay34[i], LOW);
}
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
digitalWrite(Relay1, LOW);
digitalWrite(Relay2, HIGH);
}
// Процедура расчета текущего периода и значения PWM по каналам
void Led_Dim_PWM()
{
DateTime now = RTC.now();
Current_MinuteDay = (now.hour() * 60) + now.minute();
for (int i=0; i<=5; i++)
{
Current_Period[i]=4;
if (Current_MinuteDay>=MinuteDay_Start_Sunrise[i] && Current_MinuteDay<=MinuteDay_End_Sunrise[i]) {Current_Period[i]=1;}
if (Current_MinuteDay>MinuteDay_End_Sunrise[i] && Current_MinuteDay<MinuteDay_Start_Sunset[i]) {Current_Period[i]=2;}
if (Current_MinuteDay>=MinuteDay_Start_Sunset[i] && Current_MinuteDay<=MinuteDay_End_Sunset[i]) {Current_Period[i]=3;}
if (Current_Period[i]==1)
{
Current_PWM[i]=(float)(((float)Current_MinuteDay-MinuteDay_Start_Sunrise[i])/((float)MinuteDay_End_Sunrise[i]-MinuteDay_Start_Sunrise[i]))*((float)Meridian_PWM[i]-Midnight_PWM[i]);
if (Current_PWM[i]<Midnight_PWM[i]) {Current_PWM[i]=Midnight_PWM[i];}
analogWrite(PWM_Pin[i], Current_PWM[i]);
}
if (Current_Period[i]==2)
{
if (Current_PWM[i]!=Meridian_PWM[i])
{
Current_PWM[i]=Meridian_PWM[i];
analogWrite(PWM_Pin[i], Current_PWM[i]);
}
}
if (Current_Period[i]==3)
{
Current_PWM[i]=(float)(((float)MinuteDay_End_Sunset[i]-Current_MinuteDay)/((float)MinuteDay_End_Sunset[i]-MinuteDay_Start_Sunset[i]))*((float)Meridian_PWM[i]-Midnight_PWM[i]);
analogWrite(PWM_Pin[i], Current_PWM[i]);
}
if (Current_Period[i]==4)
{
if (Current_PWM[i]!=Midnight_PWM[i])
{
Current_PWM[i]=Midnight_PWM[i];
if (Current_PWM[i]<Midnight_PWM[i]) {Current_PWM[i]=Midnight_PWM[i];}
analogWrite(PWM_Pin[i], Current_PWM[i]);
}
}
}
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(" Current_MinuteDay: ");
Serial.print(Current_MinuteDay, DEC);
Serial.println();
for (int i=0; i<=5; i++)
{
Serial.print("Channel #");
Serial.print(i, DEC);
// Serial.println();
Serial.print(", Current Period: ");
if (Current_Period[i]==1) {Serial.print("Sunrise");}
if (Current_Period[i]==2) {Serial.print("Meridian");}
if (Current_Period[i]==3) {Serial.print("Sunset");}
if (Current_Period[i]==4) {Serial.print("Midnight");}
Serial.print(", Current PWM: ");
Serial.print(Current_PWM[i], DEC);
Serial.println();
}
Serial.println();
}
void RalayOnOff()
{
int SumPWM=0;
for (int i=0; i<=5; i++)
{
SumPWM=SumPWM+Current_PWM[i];
}
if (SumPWM>=50 && Relay1Status==false)
{
Relay1Status=true;
Relay2Status=false;
digitalWrite(Relay1, HIGH);
digitalWrite(Relay2, LOW);
}
if (SumPWM<50 && Relay1Status==true)
{
Relay1Status=false;
Relay2Status=true;
digitalWrite(Relay1, LOW);
digitalWrite(Relay2, HIGH);
}
}
void Ralay34OnOff()
{
for (int i=0; i<=1; i++)
{
if (Current_MinuteDay>=MinuteDay_Start_Relay34[i] && Current_MinuteDay<=MinuteDay_End_Relay34[i])
{
if (Relay34Status[i]==false)
{
Relay34Status[i]=true;
digitalWrite(Relay34[i], HIGH);
}
}
if (Current_MinuteDay<MinuteDay_Start_Relay34[i] || Current_MinuteDay>MinuteDay_End_Relay34[i])
{
if (Relay34Status[i]==true)
{
Relay34Status[i]=false;
digitalWrite(Relay34[i], LOW);
}
}
}
}
void loop () {
if ( ( millis() % 30000 ) == 0 )
{
Led_Dim_PWM();
RalayOnOff();
Ralay34OnOff();
}
}
Вот и всё )))
Полюбому что-то мог пропустить, если что спрашивайте, вместе разберёмся ))
Кстати, каналы вентилятора и лунной подсветки я так понимаю каким-то образом привязаны к времени освещения, то-есть, если вентилятор включается с включением света, а луна с выключением света - то логично попробовать (ну кому это нужно конечно ) подключить СО2 и компрессор соответственно, таким образом ещё 2 канала свободных под что-то ))
Востаннє редагував Сергій М: 20.02.2016 о 00:45..
Ці 13 користувач(ів) сказали Дякую Сергій М за це повідомлення:
Re: Ардуино для чайника или знатоки форума для аквариумиста ===www.aquaforum.ua===
Сергій М,
Привет! сборку как указано у вас в посте № 37 собрал. Залил скетч RTClib. Скетч залился без ошибок. При проверке через монитор порта вместо времени показывает постоянно меняющиеся краказябры. Что делаю не так? Заранее благодарю за ответ
Re: Ардуино для чайника или знатоки форума для аквариумиста ===www.aquaforum.ua===
kapelan, И в Вашем проекте, мне придётся заказывать реле с триггером HI/LO, так как при любом включении/выключении - срабатывает реле полностью на 1 секунду, а когда отключаю ардуину от реле - все нагрузки включаются одновременно, пока не отключу всё от сети.
Всё это происходит из-за того что я описывал на РифЦентрале, а именно что все пины в состоянии спокойствия выдают HIGH, а для включения нагрузки на пине - LOW, поэтому при подключении нагрузок на реле - приходится подключать к замкнутым контактам, чтоб при включении ардуины все контакты разомкнулись и ждали свей очереди, и при срабатывании канала - ардуина его "отключает" тем самым включая на реле...
Всё бы ничего, но хочу поставить дозаторы как у Вас, но если будут какие-то скачки, и не один, неизвестно сколько УДО уйдёт за это количество включений по пару секунд...
Поэтому выход один - для максимально идеального подключения реле - http://ru.aliexpress.com/item/DC-12V...999.270.CsO8Bg
и ещё один хороший предохранитель ))) - http://ru.aliexpress.com/item/DC-12V...b-6e18f2927f35 - для того чтоб реле не стартовало сразу
Re: Ардуино для чайника или знатоки форума для аквариумиста ===www.aquaforum.ua===
Так прямо в скетче и вводится, выделил синим, и скрин доложу.
Кстати, для лунной подсветки можно оставить синий канал не выключенным до конца, просто вместо 0, поставить нужное значение на нужном канале:
int Midnight_PWM[6] = {0, 0, 0, 0, 0, 0}; // минимальное значение ШИМ
Re: Ардуино для чайника или знатоки форума для аквариумиста ===www.aquaforum.ua===
Добавлю и сюда и в соседнюю тему
Везде читаю что при пропадении напруги ардуинка начнет исполнять черти-что в т.ч с подачей УДО
решение то есть на поверхности.
Re: Ардуино для чайника или знатоки форума для аквариумиста ===www.aquaforum.ua===
alex_palace, Суперская идея ! только пожалуйста точную схему (например как в шапке темы), так как в некоторых нюансах на видео вообще не понимаю, и точное название диода "шотке"(название из видео).
Да и придётся чуток переделать, так как на видео одна ардуина, у меня другая, побольше и с ТФТ экраном, а значит потребление повыше, поэтому для бесперебойника 1 аккумулятора 1.2В будет маловато, и продержится всего пару секунд. У меня точно такие-же аккумуляторы есть, от какой то машинки на радиоуправлении, 4 шт. получилось бы 4.8В, значит уже повышающий и не нужен (возможно), поэтому осталось схемку понятную нарисовать, все составляющие детали описать, всё нужное заказать, получить, спаять и радоваться )))
Может кто-то нарисовать схемку подключения с рекомендуемыми деталями ?
Re: Ардуино для чайника или знатоки форума для аквариумиста ===www.aquaforum.ua===
Цитата:
Допис від Сергій М
alex_palace, Суперская идея ! только пожалуйста точную схему (например как в шапке темы), так как в некоторых нюансах на видео вообще не понимаю, и точное название диода "шотке"(название из видео).
Да и придётся чуток переделать, так как на видео одна ардуина, у меня другая, побольше и с ТФТ экраном, а значит потребление повыше, поэтому для бесперебойника 1 аккумулятора 1.2В будет маловато, и продержится всего пару секунд. У меня точно такие-же аккумуляторы есть, от какой то машинки на радиоуправлении, 4 шт. получилось бы 4.8В, значит уже повышающий и не нужен (возможно), поэтому осталось схемку понятную нарисовать, все составляющие детали описать, всё нужное заказать, получить, спаять и радоваться )))
Может кто-то нарисовать схемку подключения с рекомендуемыми деталями ?
ну по первах там аккум системы (в убей после 150 коньяку не вспомню ) Но 3.8 в который идет в аккумы ноутов. Ноут на этих банках живет по часу и больше.
Это раз. ВТорое - в емкости банки никто не ограничивает - велкам купить литий на 10-20 ампер если денег есть
для силовой части есть волшебная штука УПС. тут именно забекапить слаботочную часть чтоб после броска напруги не иметь гембель с слетевшими программами. В принципе система почти 1 к 1 это павербанки (уже только что заказал партию 5 шт зарядка + повышающий)
Пока идет про мини я уже и тут отметился и заказал комплект Разве что кроме силовых реле взял 5 шт готовых мосфет модулей для низковольтной регулируемой нагрузки АЖ по 20 грн 5 шт. Нагрузка до 5 ампер с радиатором так что лампы релюхами а светодиоды на закаты рассветы и ночную подсветку вполне могу посадить на эти драйвера.
Re: Ардуино для чайника или знатоки форума для аквариумиста ===www.aquaforum.ua===
Цитата:
Допис від Сергій М
alex_palace, Суперская идея ! только пожалуйста точную схему (например как в шапке темы), так как в некоторых нюансах на видео вообще не понимаю, и точное название диода "шотке"(название из видео).
Да и придётся чуток переделать, так как на видео одна ардуина, у меня другая, побольше и с ТФТ экраном, а значит потребление повыше, поэтому для бесперебойника 1 аккумулятора 1.2В будет маловато, и продержится всего пару секунд. У меня точно такие-же аккумуляторы есть, от какой то машинки на радиоуправлении, 4 шт. получилось бы 4.8В, значит уже повышающий и не нужен (возможно), поэтому осталось схемку понятную нарисовать, все составляющие детали описать, всё нужное заказать, получить, спаять и радоваться )))
Может кто-то нарисовать схемку подключения с рекомендуемыми деталями ?
http://www.aliexpress.com/item-img/0...0005.12.DkSVRa
тот что с большим ЮСБ єто віход, с маленьким - вход
по схеме - самое тяжелое будет на входе юсб найти плюсовую клемму
в кратце а то что-то картинка вішла не очень. От платки с маленьким юсб минус (бат-) соединяем с минусом платки с большим (ин-), туда-же минус от аккума. На бат+ маленькой вешаем + аккума и через диод например MBR360RL (5 грн шт) анодом к аккуму а катодом к ин+ ин+обоих плат тоже соединяем чтоб внешние 5в питали напрямую при наличии напруги.
аккум - любой живой аккум на 3.7 (у меня например вот такие есть)
но при наличии часу та натхнення и лишних денег можно втулить http://tab-parts.com.ua/batarei/svys...212532-mm.html - 8 амперчасов (но тогда ИМХО уже проще ВСЮ систему повесить на УПС с автомобильнім аккумом ))
Re: Ардуино для чайника или знатоки форума для аквариумиста ===www.aquaforum.ua===
да же стесняюсь спросить для каких целей аккум?
Я бы понял 20-60 а\ч. Типа для моря переключение помп и аэрации\холодильника.
А эти хлюпики зачем?
Настройки таймеров\каналов в эпром.
Часовая мс имеет свой аккум.
Что еще защищать?