Перейти к контенту
МОРСКОЙ АКВАРИУМ - форум Аква Лого

Специальные цены на внешние фильтры Eheim! Десятки моделей внешних фильтров Eheim по отличным ценам. Выбирайте!
Подробнее

Клоун Кларка Шоколадный

Леопардовый групер

Малый полосатик или просто Минке

Alex_M

Лед светильник 70Вт. для DMS 500PL (72л.)

Рекомендуемые сообщения

Попробуйте загрузить этот скетч для запуска часов

#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup()
{
    Serial.begin(57600);
    Wire.begin();
    RTC.begin();

    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);
}

 

и посмотреть serial port.

 

Если все нормально, то можно грузить основной скетч.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо большое. Вечером попробую.

 

Время установил например 14 01 01

 

По сериал порту показывает каждую секунду:

 

14 01 01

14 01 01

14 01 01

14 01 01

Изменено пользователем Natalichev (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

(до замены батарейки все работало, потом села бат и после замены часы идут на одном месте)

Возможно батарейка бракованная, померьте тестером, если есть возможность.

Я уже писал выше, если на батарейке 2,5 вольта - часы не запустятся, кроме того батарейки бывают 2-х видов на 3v и на 3,6 и обе CR2032

 

tiny-rtc-i2c-ds1307-real-time-clock-module-arm-pic-for-arduino_epjibe1345611796020.jpgrtcnn1.jpg

Изменено пользователем svyaz (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
http://devicter.ru/goods/modul-rtc?from=MDg3 - Вот такая. Там указано, что можно ставить или cr1225 или cr 1220. Заменил на 1220 и часики не идут.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все заработало после кода Alex_M. Спасибо тебе огромное!

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все заработало после кода Alex_M. Спасибо тебе огромное!

Рад, что смог помочь. :)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сейчас получил письмо – рекламная рассылка от магазина «Каталог Электронщик».

 

Первый пункт «DIY - LED светильник для аквариума», решил посмотреть и увидел до боли знакомые картики. :))

Ссылка на новость http://www.electronshik.ru/news/show/3973

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сейчас получил письмо – рекламная рассылка от магазина «Каталог Электронщик».

 

Первый пункт «DIY - LED светильник для аквариума», решил посмотреть и увидел до боли знакомые картики. :))

Ссылка на новость http://www.electrons.../news/show/3973

 

Это успех )

 

ну хоть ссылку вставили на тему и то хорошо )

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день.

Alex_M Вы случайно не пробовали к Arduino Nano подключить модули HC-06 (BlueTooth модуль cвязи UART) или NRF24L01 (WiFi модуль cвязи 2,4ГГц)? Возможно ли это, чтобы было 6 димируемых канала и беспроводная связь с контролером для установки времени и яркости каждого канала? Есть ли разница, или какой модуль лучше подключить? За 1,5 года эксплуатации контролера как себя проявила Arduino Nano, были сбои?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день, Дмитрий,

 

Была мысль добавить модуль для управления по воздуху, но по причине острой нехватки времени и знаний так и не реализовал эту идею. По технической стороне (возможность подключения при 6 ШИМ каналов) возможности подключения не подскажу, не хватает знаний.

 

На мой взгляд, управление по воздуху это приятное, но не необходимое дополнение. Сейчас на рынке уже достаточно хороших готовых продуктов для управления светильником, в т.ч. с управлением по воздуху. В большинстве случаев, проще и быстрее взять готовый продукт, чем делать самому. В новом светильнике для новой банки не стал заморачиваться и взял контроллер от Димы (DNK).

 

За 1.5 года явных сбоев не было, все работает как надо. Когда села батарейка RTC, сбилась время, это наверное единственный сбой.

 

Из замеченных недостатков:

- вспышка при инициализаций/включении, лечится подтягиванием выходов ШИМ на землю через резистор;

- невозможно задать интервал для каналов через полночь, но это проблема программы, для исправления надо переписывать часть программы.

  • Upvote 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

А почему луна отдельно? Почему не сделали из одно из каналов основных диодов? Или это не возможно?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Была штатная луна, вот и использовал штатную.

При желании можно использовать любой канал как луну.

  • Upvote 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Помогите пожалуйста. Вот для этого кода нужно плавное включение света в заданное время и плавное выключение в другое заданное время. Что-то у меня с плавностью никак не получается.

 

// Библиотеки необходимые для работы модуля часов
#include "Wire.h"
#include "DS1307new.h"
// библиотека экрана
#include "LiquidCrystal.h"
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int hours;
int minutes;
int LW = 3;	
int LR = 11;
int LB = 12;	
int On_Time =0;
int Off_Time =0;
int Curent_Time =0;
void setup(){
 Serial.begin(9600);
 lcd.begin(16, 2); // запускаем библиотеку экрана
 pinMode(LW, OUTPUT);
 pinMode(LR, OUTPUT);
 pinMode(LB, OUTPUT);
}
void loop(){
 analogWrite(10, 100);
 RTC.getTime();// получить время от модуля
 RTC.hour;
 RTC.minute;
 printTimeToSerial(); // выводим полученное время в лог
 printTimeToLCD();; // выводи время на экран
 lcd.setCursor(0, 1);	    // Set the cursor to column 0, line 1
 doSerialCommands(); // слушаем и выполняем команды из Serial
On_Time=(20*60+27);
Off_Time=(20*60+29);
Curent_Time=RTC.hour*60+RTC.minute;//текущее время
if(On_Time < Off_Time) //Проверка, таймер в течении одних суток?
 {
   if (Curent_Time >= On_Time && Curent_Time <= Off_Time)
    for(int fadeValue = 0; fadeValue <= 255; fadeValue +=3)
  {
    analogWrite(LR, fadeValue);
}
 else 
  for(int fadeValue = 255; fadeValue >= 0; fadeValue -=3)
  {
    analogWrite(LR, fadeValue);
 }
}
else // если сутки сменились
{
    if ((Curent_Time >= On_Time && Curent_Time <= 2820)||(Curent_Time >= 0 && Curent_Time <= Off_Time))//2820=24часа*60
    for(int fadeValue = 0; fadeValue <= 255; fadeValue +=3)
  {
    analogWrite(LR, fadeValue);
   }
   else
  for(int fadeValue = 255; fadeValue >= 0; fadeValue -=3)
  {
    analogWrite(LR, fadeValue);
  }
  }
}
// Выводит текущие время в Serial
void printTimeToSerial(){
 byte static prevSecond=0; // тут будем хранить, сколько секунд было при прошлом отчете

 if(RTC.second!=prevSecond){ // что-то делаем только если секунды поменялись
   Serial.print(RTC.hour); // часы

   Serial.print(":"); // разделитель
   Serial.print(RTC.minute);

   Serial.print(":");
   Serial.println(RTC.second);

   prevSecond=RTC.second; // запомнили когда мы "отчитались"
 }
}
// Выводит текущие время на LCD
void printTimeToLCD(){
   byte static prevSecond=0; // тут будем хранить, сколько секунд было при выводе

   if(RTC.second!=prevSecond){ // что-то делаем только если секунды поменялись
   lcd.setCursor(11,0); // устанавливаем позицию курсора

  if(RTC.hour<10)lcd.print(" ");
  lcd.print(RTC.hour); // часы

  lcd.print( (RTC.second % 2)?" ":":"); // разделитель моргает

  if(RTC.minute<10)lcd.print(0); // лидирующий ноль, если нужен
  lcd.print(RTC.minute);

   prevSecond=RTC.second; // запомнили когда мы "отчитались"
 }
}
// устанавливает часы модуля на какое-то заранее определенное время
void setSomeTime(){
 RTC.stopClock();// останавливаем часы
 RTC.fillByHMS(20,24,0); // "подкручиваем стрелки на 20:24:00
 RTC.setTime();// отправляем "подкрученное время" самому модулю
 RTC.startClock(); // и опять запускаем часы
}
// слушает из Serial команды и выполняет их. Каждая команда - один символ.
// доступны команды:
//  s - установить время указанное в функции setSomeTime()
void doSerialCommands(){
 if(Serial.available()){ // что-нибудь пришло?
   char ch=Serial.read(); // читаем что пришло

   switch(ch){
  case 's': // команда установки времени
	   setSomeTime(); // устанавливаем
	   break;

   // тут, в будущем, мы можем добавлять дополнительные команды
  default:;
	   // на неизвестную команду - ничего не делаем
   };
 }
}

 

Заранее спасибо

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Alex_M, интересно, а ваш код часиков, пойдет на DS1302?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Помогите пожалуйста. Вот для этого кода нужно плавное включение света в заданное время и плавное выключение в другое заданное время. Что-то у меня с плавностью никак не получается.

 

Заранее спасибо

Добрый день,

Я не специалист в программировании ардуины и с ходу не могу сказать что тут не так.

На форуме есть специалисты, возможно, они подскажут вам.

Или как вариант обратиться за помощью на форум http://arduino.ru/forum

 

Alex_M, интересно, а ваш код часиков, пойдет на DS1302?

Не знаю, не пробовал. Если библиотека поддерживает DS1302, то должны работать.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Alex_M, первый раз в жизни собрал сам светильник один в один как ваш (всё делал по вашим описаниям и фоткам) - аква тоже Resun Dms-500. У меня к вам несколько вопросов: когда в первый раз (после установки времени и основного скетча) включаю светильник (например я это делаю в 12 часов ночи) должны ли светодиоды сразу загогораться (луну не считаю - она родная)? Мне кажется что не должны - там же прописано, что ночью всё по 0! А у меня весь свет горит! Т.е они сразу должны димироваться? И еще вопрос как вы устанавливали непосредственно сам радиатор в крышку - чем прикрепляли? И еще на ваших фотках платки прикреплены к крышке аквы - вы их в родные отверстия ставили или как-то иначе?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день,

 

Если время установлено и загружен основной свет, то после включения питания должно быть кратковременное (примерно 1с) включение всех каналов на 100% на время инициализации ардуины. Этот эффект можно устранить методом «притягивания» выходов ШИМ на «землю» через резисторы.

Если все каналы горят на 100% постоянно после включения в период ночи, то возможно нет контакта «земли» БП/драйверов и «земли» ардуины.

 

Радиатор прикручен в 2х точках, в которые ранее были держатели ламп.

Платки в основном прикреплены в родные отверстия крышки, часть на двухсторонний скотч (вроде так называется).

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо большое! Теперь всё понял!

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Со светом разобрался. Теперь нужно сделать возможным включение и выключение света LW и LR кнопками (UP-Вкл., DOWN-Выкл.), независимо от времени. А также возможность включения и выключения нагревателя Н2 кнопками (LEFT-Вкл., RIGHT-Выкл.), независимо от температуры.

Вот часть кода по срабатыванию реле:

// Если температура достигает 28,3 (с погрешностью), отключаем кипятильник
if (celsius > 28.3)
{
digitalWrite(40, Relay_Off);
lcd.setCursor(0, 1);
lcd.print("H1-Off");
}
if (celsius < 28.0)
{
digitalWrite(40, Relay_On);
lcd.setCursor(0, 1);
lcd.print("H1-On ");
}[/background][/size][/font][/color]
[color=#141414][font=Georgia, 'Times New Roman', Times, serif][size=4][background=rgb(252, 252, 255)]// Если температура достигает 28,5 (с погрешностью), отключаем кипятильник
if (celsius > 28.5)
{
digitalWrite(41, Relay_Off);
lcd.setCursor(7, 1);
lcd.print("H2-Off");
}
if (celsius < 28.0)
{
digitalWrite(41, Relay_On);
lcd.setCursor(7, 1);
lcd.print("H2-On ");
}
lcd_key = read_LCD_buttons(); // read the buttons
switch (lcd_key)			 // depending on which button was pus hed, we perform an action
{
case btnRIGHT:
{
digitalWrite(41,!digitalRead(41));
lcd.setCursor(7, 1);
lcd.print("H2-Off");
break;
}
case btnLEFT:
{
digitalWrite(41, Relay_On);
lcd.setCursor(7, 1);
lcd.print("H2-On ");
break;
}
case btnUP:
{
lcd.print("UP ");
break;
}
case btnDOWN:
{
lcd.print("DOWN ");
break;
}
}
}//------------Конец ЦИКЛА-----------------------------
Изменено пользователем kirex (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день всем! Извините за оффтоп. Собрал такую же схему как и у автора темы. Но появилась проблема. Не могу подключить часы DS1302. Время на самих часах настроил, а как его считывать в скетче увы не могу понять, тем более передавать значения для расчета. Во всех примерах написано что структура инициализируется так: Time t; Но почему то как раз с этой строчки и компиляция прерывается. Если кто может помочь модернизировать скетч автора, буду очень признателен.

 

Сейчас завис на вот этой строчкой:

 

void Led_Dim_PWM()

{

Time t = rtc.time();

 

Current_MinuteDay = (t.hour() * 60) + t.min();

 

Ругается во так:

sketch_aug03a.ino:123:47: error: macro "min" requires 2 arguments, but only 1 given

sketch_aug03a.ino: In function 'void Led_Dim_PWM()':

sketch_aug03a:123: error: 'class Time' has no member named 'hour'

sketch_aug03a:165: error: 'now' was not declared in this scope

sketch_aug03a.ino: In function 'void loop()':

sketch_aug03a:235: error: 'class DS1302' has no member named 'getTimeStr'

 

И я так понимаю ошибка еще в след строчке:

 

 

void loop () {

 

 

Serial.print("Requesting temperatures...");

sensors.requestTemperatures(); // Send the command to get temperatures

Serial.println("DONE");

 

Serial.print("Temperature for Device 1 is: ");

Serial.println(sensors.getTempCByIndex(0));

 

{

Led_Dim_PWM();

RalayOnOff();

delay(6000);

}

DateTime now = rtc.getTimeStr();

sensors.requestTemperatures();

v=sensors.getTempCByIndex(1);

Изменено пользователем XCIL (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуйте использовать другую библиотеку часов или проверьте есть ли в нужном месте обьявленная DS1307new.h

 

Я использую стандартную DS1307.h

 

Больше информации по часам на Arduino можно посмотреть тут http://playground.arduino.cc/code/time

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день всем! Извините за оффтоп. Собрал такую же схему как и у автора темы. Но появилась проблема. Не могу подключить часы DS1302. Время на самих часах настроил, а как его считывать в скетче увы не могу понять, тем более передавать значения для расчета. Во всех примерах написано что структура инициализируется так: Time t; Но почему то как раз с этой строчки и компиляция прерывается. Если кто может помочь модернизировать скетч автора, буду очень признателен.

 

Сейчас завис на вот этой строчкой:

 

void Led_Dim_PWM()

{

Time t = rtc.time();

 

Current_MinuteDay = (t.hour() * 60) + t.min();

 

Ругается во так:

sketch_aug03a.ino:123:47: error: macro "min" requires 2 arguments, but only 1 given

sketch_aug03a.ino: In function 'void Led_Dim_PWM()':

sketch_aug03a:123: error: 'class Time' has no member named 'hour'

sketch_aug03a:165: error: 'now' was not declared in this scope

sketch_aug03a.ino: In function 'void loop()':

sketch_aug03a:235: error: 'class DS1302' has no member named 'getTimeStr'

 

И я так понимаю ошибка еще в след строчке:

 

 

void loop () {

 

 

Serial.print("Requesting temperatures...");

sensors.requestTemperatures(); // Send the command to get temperatures

Serial.println("DONE");

 

Serial.print("Temperature for Device 1 is: ");

Serial.println(sensors.getTempCByIndex(0));

 

{

Led_Dim_PWM();

RalayOnOff();

delay(6000);

}

DateTime now = rtc.getTimeStr();

sensors.requestTemperatures();

v=sensors.getTempCByIndex(1);

 

Добрый день!

Спасибо автору Alex M! У меня пошло все, но измените в конце:

 

void loop ()

{

if ( ( millis() % 60000 ) == 0 )

{

Led_Dim_PWM();

RalayOnOff();

}

}

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Текущая версия программы.

Алексей, не могли бы вы выложить обновленную версию программы?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Алексей, не могли бы вы выложить обновленную версию программы?

Добрый день,

Выложу вечером.

Программа не менялась уже более года (нет времени, да и скетч работает без сбоев).

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти

×