|
|
19.12.2014, 20:51
|
#16
|
Я тут недавно
Регистрация: 19.02.2014
Адрес: Харьков
Сообщений: 88
Поблагодарил(а) : 46
Поблагодарили 106 раз(а) в 49 сообщениях
|
Re: Крышка с простым контроллером на Arduino ===www.aquaforum.ua===
Продолжаем развлекаться в свободное время и попутно обеспечиваем друзей аквариумистов светом! В этот раз жертвой эксперимента стала крышка природа для маленького преснячка. Канала 2: белый и красный+рояль. Мозги спрятал в коробок на боку крышки. Дисплея нет, датчика температуры нет. Только свет, настраиваемый с компьютера/ноута. Остается проблема с сбоем времени при отключении света...
Программка: Скрытый текст
#include <Wire.h> // Подключаем библиотеки
#include "RTClib.h" // Подключаем библиотеки
RTC_DS1307 RTC; // Подключаем часики
int Hours_Start_Sunrise[2] = {7, 6}; // Начало рассвета по каналам час
int Minutes_Start_Sunrise[2] = {0, 30}; // Начало рассвета по каналам минута
int Hours_End_Sunrise[2] = {11, 10}; // Окончание рассвета по каналам час
int Minutes_End_Sunrise[2] = {0, 0}; // Окончание рассвета по каналам минута
int Hours_Start_Sunset[2] = {17, 18}; // Начало заката по каналам час
int Minutes_Start_Sunset[2] = {0, 0}; // Начало заката по каналам минута
int Hours_End_Sunset[2] = {21, 22}; // Окончание заката по каналам час
int Minutes_End_Sunset[2] = {0, 0}; // Окончание заката по каналам минута
int MinuteDay_Start_Sunrise[2]; // День в минутах для начала рассвета
int MinuteDay_End_Sunrise[2]; // День в минутах для окончания рассвета
int MinuteDay_Start_Sunset[2]; // День в минутах для начала заката
int MinuteDay_End_Sunset[2]; // День в минутах для окончания заката
int Current_MinuteDay; // Текущая минута суток
int Current_Period[2]; // Текущая часть суток 1-рассвет, 2-день, 3-закат, 4-ночь для каждого ШИМ
int Meridian_PWM[2] = {250, 250}; // Максимальное значение ШИМ
int Midnight_PWM[2] = {0, 0}; // Минимальное значение ШИМ
int Current_PWM[2] = {0, 0}; // Текущее значение ШИМ
/* ******************************************** */
/* * * */
/* * ШИМ пин для UV+RB, B+C, CW, HR * */
/* * Пин - 10 - HR+RB * */
/* * Пин - 11 - White * */
/* * * */
/* ******************************************** */
int PWM_Pin[2] = {10, 11}; // ШИМ пин для HR+RB, White
void setup()
{
RTC.adjust(DateTime(__DATE__, __TIME__));
Serial.begin(57600); // Подключаем порт
Wire.begin(); // Включаем шину часиков
RTC.begin(); // Включаем часики
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
//RTC.adjust(DateTime(__DATE__, __TIME__));
//RTC.adjust(DateTime(2014, 10, 28, 11, 17, 1));
}
for (int i=0; i<=1; i++)
{
pinMode(PWM_Pin[i], OUTPUT); // Установка пин для ШИМ
}
for (int i=0; i<=1; i++)
{
analogWrite(PWM_Pin[i], Midnight_PWM[i]); // Установка минимального значения ШИМ
Current_PWM[i]=Midnight_PWM[i]; // Установка текущих значений ШИМ в минимум
}
for (int i=0; i<=1; 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]; // Расчет минуты суток для окончания заката
}
}
// Процедура расчета текущего периода и значения PWM по каналам
void Led_Dim_PWM()
{
DateTime now = RTC.now();
Current_MinuteDay = (now.hour() * 60) + now.minute();
for (int i=0; i<=1; 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<=1; i++)
{
Serial.print("Channel #");
Serial.print(i, DEC);
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 loop () {
Led_Dim_PWM();
// Выставляем частоту обновления данных 10 секунд
delay(1000);
}
Последний раз редактировалось Alexander_Kharkov; 20.12.2014 в 21:33..
Причина: Забыл выложить скетч
|
|
|
2 пользователей поблагодарили Alexander_Kharkov за данный пост:
|
|
05.02.2015, 09:35
|
#17
|
Живу я тут
Регистрация: 03.08.2013
Адрес: Николаев
Сообщений: 274
Поблагодарил(а) : 47
Поблагодарили 142 раз(а) в 109 сообщениях
|
Re: Крышка с простым контроллером на Arduino ===www.aquaforum.ua===
собрал эту схемку , все отлично работает и просто!!!! только сделал дополнительный выход на управление вентилятором охлаждения диодов, на рассвете он включается на закате отключается, и еще один выход на компрессор пенника также чтоб ночью отключался(для тишины) )))
|
|
|
Пользователь, который поблагодарил Sergeys за данный пост:
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 09:05. Часовой пояс GMT +3.
|