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

Как Несколько способов определения пола у рыб: по отличающейся окраске; по размеру; по форме плавников; по различным выростам/наростам, например, жировым шишкам на лбу у фловер хорнов.

Судак-тудак

У дороги новый чибис

Идиакант

Alex_M

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

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

Сделал лед освещение своей банки (DMS 500PL, 72л. дисплей).

 

Лед светильник разместил внутри штатной крышки. Радиатор 300х116х26.

 

Светодиоды распределены на 6 каналов:

1. Ultra Violet. Всего 12 шт.: 8шт. 420nm (Exotic), 2шт. 400nm и 2шт. 385nm. Драйвер LDD-600H. Максимальная расчетная мощность 24.5Вт, фактический потребляемая мощность 27Вт.

2. Royal Blue. Всего 6 шт. CREE XT-E Royal Blue – 450nm. Драйвер LDD-700L. Максимальная расчетная мощность 12.5Вт, фактический потребляемая мощность 15.5Вт.

3. Blue+Turquoise. Всего 6 шт.: 4 шт. CREE XP-E Blue – 475nm. и 2шт. Turquoise (Exotic) - 495nm. Драйвер LDD-600L. Максимальная расчетная мощность 12.5Вт, фактический потребляемая мощность 8.1Вт.

4. Cool White. Всего 6 шт. CREE XP-G. Драйвер LDD-1000H. Максимальная расчетная мощность 20Вт, фактический потребляемая мощность 20Вт.

5. Deep Red. Всего 2 шт. Exotic – 660nm. Драйвер LDD-500L. Максимальная расчетная мощность 3.6Вт, фактический потребляемая мощность 5.4Вт.

6. Green. Всего 2 шт. 530nm. Драйвер LDD-500L. Максимальная расчетная мощность 2.3Вт, фактический потребляемая мощность 3.8Вт.

 

Итого суммарная максимальная мощность основных каналов (за исключением Deep Red и Green) составляет порядка 70Вт.

 

Размещение ледов на радиаторе

post-20976-1345788728_thumb.jpg

 

Питание:

Для каналов Ultra Violet и Cool White - MW LPS-50-48.

Для каналов Royal Blue, Blue, Deep Red и Green - MW PS-35-24.

 

Суммарная максимальная мощность каналов 94-96% от номинальной мощности источников питания.

 

MW PS-05-12 для питания блока управления.

 

 

Управление (ШИМ):

Используется связка Arduino Nano (ATMEGA168) + Tiny RTC DS1307 + 2-Channel 5V Relay Module.

 

Главная задача блока управления – плавная регулировка уровня по каждому каналу индивидуально в соответствии с заданными данными по каждому каналу в режиме реального времени (по DS1307):

- время начало рассвета;

- время окончания рассвета;

- время начала заката;

- время окончания рассвета;

- минимальное значение ШИМ (ночной период);

- максимальное значение ШИМ (дневной период).

 

Соответственно, ШИМ сигнал на драйвер канала:

- в ночное время минимальное значение;

- в дневное время максимальное значение;

- в период рассвета линейно увеличивается от минимального к максимальному значению;

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

 

2-Channel 5V Relay Module для управления вентиляторами и штатной ночной подсветкой (луной).

 

Несколько фотографий:

UV, RB, B+T

post-20976-1345788590_thumb.jpg post-20976-1345788612_thumb.jpg post-20976-1345788624_thumb.jpg

 

UV, RB, B+T на 100% CW 25%, CW 50%, CW 75%, CW 100%

post-20976-1345788648_thumb.jpg post-20976-1345788657_thumb.jpg post-20976-1345788665_thumb.jpg post-20976-1345788672_thumb.jpg

 

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

 

Выставил UV, RB, B и T на 75%, остальные на 50%.

Расписание рассветов и закатов

Канал – начало рассвета – конец рассвета – начало заката – конец заката

UV – 9 – 12 – 20 – 23

RB – 10 – 13 – 19 – 22

B+T – 11 – 14 – 18 – 21

CW – 11 – 15 – 17 – 21

DR – 12 – 15 – 17 – 20

G – 12 – 15 – 17 – 20

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

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


Ссылка на сообщение

Хай Alex_M.

фото супер у меня банка 80л Можно подробней саму схему включения и где что можно купить .

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

 

и прогу если можно

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


Ссылка на сообщение

Привет,

 

Леды (основную чаcть), термоклей и термопасту в http://www.ledgroupbuy.com/

Драйвера, блоки питания и вентиляторы в http://www.electronshik.ru

Радиатор в http://platan.ru/

Остальное (в т.ч. часть ледов) на http://www.ebay.com

 

Подключения стандартные, если надо могу нарисовать на выходных.

 

Программы для управления выложу вечером (сейчас нет с собой).

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

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


Ссылка на сообщение

Привет, а есть ли фотки контроллера? Какой применен дисплей, клавиатура?

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


Ссылка на сообщение

Привет,

Дисплея и клавиатуры нет, все установлено внутри крышки, только вывод usb кабеля . При необходимости мониторинг через Serial port.

Хотя есть желание добавить дисплей для визуализации информации.

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


Ссылка на сообщение

В первом сообщении есть ошибка :hmmm: в описании 3 канала, должно быть

«Blue+Turquoise. Всего 8 шт.: 6 шт. CREE XP-E Blue – 475nm. и 2шт. Turquoise (Exotic) - 495nm.»

И в мощности 3 канала, что-то напутал… :oops:

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


Ссылка на сообщение

Хорошая работа. Радует правильно подобранный спектр :vo:

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


Ссылка на сообщение

Спасибо, Дмитрий, :beer:

В начале, при проектировании, долго голову ломал :tuplu: при подборе типов ледов, сравнивая спектры солнечного света в толще воды и ледов.

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


Ссылка на сообщение

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

 

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

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] = {15, 12, 13, 14, 15, 15};	  // окончание рассвета по каналам час
int Minutes_End_Sunrise[6] = {0, 0, 0, 0, 0, 0};		  // окончание рассвета по каналам минута

int Hours_Start_Sunset[6] = {17, 20, 19, 18, 17, 17};	 // начало заката по каналам час
int Minutes_Start_Sunset[6] = {0, 0, 0, 0, 0, 0};		 // начало заката по каналам минута
int Hours_End_Sunset[6] = {21, 23, 22, 21, 21, 21};	   // окончание заката по каналам час
int Minutes_End_Sunset[6] = {0, 0, 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 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;

void setup() 
{

Serial.begin(57600);
Wire.begin();
RTC.begin();

if (! RTC.isrunning()) {
   Serial.println("RTC is NOT running!");
   //RTC.adjust(DateTime(2012, 7, 12, 22, 48, 1));
   }
	//RTC.adjust(DateTime(2012, 7, 31, 21, 53, 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];				  // Расчет минуты суток для окончания заката
}
 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.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 loop () {


Led_Dim_PWM();
RalayOnOff();

delay(60000);

} 

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

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


Ссылка на сообщение

Простенькая программа для ручного управления ШИМ каналами (пины 3, 5, 6, 9, 10, 11) arduino nano через serial port.

 

int incomingByte = 0;  
int Chan=1;
int ChanS=0;
int Val1;
int Val2;
int PWM_V;
byte PWM_Pin[6] = {3, 5, 6, 9, 10, 11};
void setup()
	{
	 Serial.begin(9600);
	 for (byte i=0; i<=5; i++)
	  {
	   pinMode(PWM_Pin[i], OUTPUT);								 
	  }
	 for (byte i=0; i<=5; i++)
	  {
	   analogWrite(PWM_Pin[i], 0
	  }
	}

void loop() {
	if (Serial.available() > 0) {
			incomingByte = Serial.read();
			if (ChanS==1) {
					if (incomingByte == 49) { Val1=1; }
					if (incomingByte == 50) { Val1=2; }
					if (incomingByte == 51) { Val1=3; }
					if (incomingByte == 52) { Val1=4; }
					if (incomingByte == 53) { Val1=5; }
					if (incomingByte == 54) { Val1=6; }
					if (incomingByte == 55) { Val1=7; }
					if (incomingByte == 56) { Val1=8; }
					if (incomingByte == 57) { Val1=9; }
					if (incomingByte == 48) { Val1=0; }
					if (Val2==0) {
							PWM_V=100*Val1;
							Val2=Val2+1;}
					else if (Val2==1) {
							PWM_V=PWM_V+10*Val1;
							Val2=Val2+1;}
					else if (Val2==2) {
							PWM_V=PWM_V+Val1;
							if (PWM_V>255) {PWM_V=255;}
							Val2=0;
							Serial.print("Chanel: ");
							Serial.print(Chan, DEC);
							Serial.print(" PWM: ");
							Serial.println(PWM_V, DEC);

							analogWrite(PWM_Pin[Chan-1], PWM_V);

							ChanS=0;
							Chan=0;
							incomingByte=0;
					  }


			}

			if (ChanS==0) {
			  if (incomingByte>0) {
					if (incomingByte == 49) { Chan=1; }
					if (incomingByte == 50) { Chan=2; }
					if (incomingByte == 51) { Chan=3; }
					if (incomingByte == 52) { Chan=4; }
					if (incomingByte == 53) { Chan=5; }
					if (incomingByte == 54) { Chan=6; }
					if (Chan != 0) {
							ChanS=1;
							Serial.print("Chanel set: ");
							Serial.println(Chan, DEC);
							Val2=0;
					  }
			  }
			}

	}
}

 

Ввод формате хууу, где х – номер канала (1-3пин, 2-5пин и т.д до 6-11пин.), ууу-значение ШИМ на канал х.

Н-р установка

ШИМ 25 на 6 пин будет 3025,

ШИМ 255 на 11пин 6255,

ШИМ 0 на 3пин 1000

 

Может кому то пригодится…

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

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


Ссылка на сообщение

можно саму схемку поглядеть ну очень охото

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


Ссылка на сообщение

можно саму схемку поглядеть ну очень охото

Я не мастер рисовать, как смог, надеюсь, будет понятно.

post-20976-1346001987_thumb.jpg

 

Не плохо не плохо!!! :vo:

Спасибо,

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


Ссылка на сообщение

красиво раставленно. интересно можно ли на неё поставить экран 4 рядный

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


Ссылка на сообщение

Я заказал цветной LCD 1.8 160x128 с интерфейсом I2C, как будет время буду добавлять...

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


Ссылка на сообщение

Я не мастер рисовать, как смог, надеюсь, будет понятно.

post-20976-1346001987_thumb.jpg

Спасибо,

Подскажите. +5В и +12В можно подать на Ардуину и часы от преобразователей на основе MC34063? Чтобы не использовать отдельный блок питания, или это нецелесообразно. Есть ли какие звуки от работы дайверов LDD?

Вентиляторами тоже управляет Ардуина? Температурный датчик не планируете поставить на Ардуину?

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


Ссылка на сообщение
Подскажите. +5В и +12В можно подать на Ардуину и часы от преобразователей на основе MC34063? Чтобы не использовать отдельный блок питания, или это нецелесообразно.

Здесь не подскажу, в этом я дуб дубом… скорее всего можно.

 

Есть ли какие звуки от работы дайверов LDD?

Вентиляторами тоже управляет Ардуина?

Никаких звуков нет, есть щелчок при переключении реле. Вентиляторами и штатной луной управляет arduina (пины 7 и 8) через реле.

 

Температурный датчик не планируете поставить на Ардуину?

Датчики (DS18S20) планирую добавить как дойдут руки. Изменено пользователем Alex_M (см. историю изменений)

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


Ссылка на сообщение

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

 

Если приводите код программы, думаю, будет корректно также приводить в виде архива все используемые библиотеки и указывать, под какой версией ардуино все это работает.

 

В частности, в вашем проекте используется какая-то версия библиотеки RTClib.h

Со скачанной из инета версией библиотеки под этим названием ваш код не компилируется.

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


Ссылка на сообщение

Про это как-то не подумал, сорри… :oops:

 

Про rtc ds1307 http://www.ladyada.net/learn/breakoutplus/ds1307rtc.html

Линк на саму библиотеку https://github.com/adafruit/RTClib

Версия Arduino 1.0

 

Надеюсь не перепутал, вечером посмотрю точно. :hmmm:

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


Ссылка на сообщение

Вот, совсем другое дело :) Компилируется и прошивается

Спасибо!

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


Ссылка на сообщение

доброго дня и ночи.

после штудирования сайтов стал искать и сравнивать компоненты, наткнулся на данный сайтик-

http://robocraft.ru/shop/index.php?route=p...ory&path=47

скажите данная модель подойдет ORduino-Nano ( ATMega168)

заранее спасибо.

 

либо использовать данный девайс

http://devicter.ru/goods/Arduino-Nano-V3-ATmega

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


Ссылка на сообщение

Лучше 328 (больше памяти), я заказывал 328, но продавец ошибся и прислал 168 (и потом сделал частичный возврат денег).

На ebay arduino nano 328 можно купить меньше, чем за 500руб. с доставкой. ;)

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


Ссылка на сообщение

все понял штудируем ebay arduino nano 328.

еще вопрос для подключения монитора можно расширение ставить как я понимаю.

http://viewitem.eim.ebay.ru/Servo-Sensor-S...0634266015/item

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


Ссылка на сообщение

Я заказал lcd c i2c, соответственно для подключения буду использовать А4(SDA), А5(SCL) и питание. Иначе пинов не хватит для иного варианта подключения (могу ошибаться).

 

Плата расширения это лишнее (ИХМО).

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


Ссылка на сообщение

Разница между нано 168 и нано 328 всего 2 доллара, и поэтому прямой смысл покупать на 328. Я купил 168 за 12 долларов всего, но у меня это будет slave-контроллер, ему должно хватить. Кроме того, на платке с RTC китайцы обычно ставят также EEPROM на 8КБ, а это немало памяти (а встроенная в контроллер память остается чисто под программу - что тоже немало, если не перегружать ее сложными менюшками.

С другой стороны, если стоит вопрос недостатка памяти, то всего за 20 долларов можно купить Мегу 2560 (всего 8 долларов разницы, зато проблему нехватки памяти забываешь), в которой аж 256Мб памяти (см. проект с тачскрином на ее основе в соседней ветке).

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


Ссылка на сообщение

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

Вы сможете оставлять комментарии после авторизации



Войти

×
×
  • Создать...

Политика обработки персональных данных