Alex_M 89 Опубликовано 24 Августа 2012 (изменено) Сделал лед освещение своей банки (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Вт. Размещение ледов на радиаторе Питание: Для каналов 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 UV, RB, B+T на 100% CW 25%, CW 50%, CW 75%, CW 100% Новый светильник радует глаза, особенно медленные рассветы и закаты. Выставил 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 Изменено 24 Августа 2012 пользователем Alex_M (см. историю изменений) 1 Поделиться этим сообщением Ссылка на сообщение
xromis 0 Опубликовано 24 Августа 2012 Хай Alex_M. фото супер у меня банка 80л Можно подробней саму схему включения и где что можно купить . заранее спасибо и прогу если можно Поделиться этим сообщением Ссылка на сообщение
Alex_M 89 Опубликовано 24 Августа 2012 (изменено) Привет, Леды (основную чаcть), термоклей и термопасту в http://www.ledgroupbuy.com/ Драйвера, блоки питания и вентиляторы в http://www.electronshik.ru Радиатор в http://platan.ru/ Остальное (в т.ч. часть ледов) на http://www.ebay.com Подключения стандартные, если надо могу нарисовать на выходных. Программы для управления выложу вечером (сейчас нет с собой). Изменено 24 Августа 2012 пользователем Alex_M (см. историю изменений) Поделиться этим сообщением Ссылка на сообщение
sergeynim 0 Опубликовано 24 Августа 2012 Привет, а есть ли фотки контроллера? Какой применен дисплей, клавиатура? Поделиться этим сообщением Ссылка на сообщение
Alex_M 89 Опубликовано 24 Августа 2012 Привет, Дисплея и клавиатуры нет, все установлено внутри крышки, только вывод usb кабеля . При необходимости мониторинг через Serial port. Хотя есть желание добавить дисплей для визуализации информации. Поделиться этим сообщением Ссылка на сообщение
Alex_M 89 Опубликовано 24 Августа 2012 В первом сообщении есть ошибка :hmmm: в описании 3 канала, должно быть «Blue+Turquoise. Всего 8 шт.: 6 шт. CREE XP-E Blue – 475nm. и 2шт. Turquoise (Exotic) - 495nm.» И в мощности 3 канала, что-то напутал… :oops: Поделиться этим сообщением Ссылка на сообщение
DNK 202 Опубликовано 24 Августа 2012 Хорошая работа. Радует правильно подобранный спектр :vo: Поделиться этим сообщением Ссылка на сообщение
Alex_M 89 Опубликовано 24 Августа 2012 Спасибо, Дмитрий, :beer: В начале, при проектировании, долго голову ломал :tuplu: при подборе типов ледов, сравнивая спектры солнечного света в толще воды и ледов. Поделиться этим сообщением Ссылка на сообщение
Alex_M 89 Опубликовано 24 Августа 2012 (изменено) Текущая версия программы. #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); } Изменено 24 Августа 2012 пользователем Alex_M (см. историю изменений) 1 Поделиться этим сообщением Ссылка на сообщение
Alex_M 89 Опубликовано 24 Августа 2012 (изменено) Простенькая программа для ручного управления ШИМ каналами (пины 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 Может кому то пригодится… Изменено 24 Августа 2012 пользователем Alex_M (см. историю изменений) 1 Поделиться этим сообщением Ссылка на сообщение
xromis 0 Опубликовано 26 Августа 2012 можно саму схемку поглядеть ну очень охото Поделиться этим сообщением Ссылка на сообщение
Aleksandr Pogrebnoi 3 Опубликовано 26 Августа 2012 Не плохо не плохо!!! :vo: Поделиться этим сообщением Ссылка на сообщение
Alex_M 89 Опубликовано 26 Августа 2012 можно саму схемку поглядеть ну очень охото Я не мастер рисовать, как смог, надеюсь, будет понятно. Не плохо не плохо!!! :vo: Спасибо, Поделиться этим сообщением Ссылка на сообщение
xromis 0 Опубликовано 27 Августа 2012 красиво раставленно. интересно можно ли на неё поставить экран 4 рядный Поделиться этим сообщением Ссылка на сообщение
Alex_M 89 Опубликовано 27 Августа 2012 Я заказал цветной LCD 1.8 160x128 с интерфейсом I2C, как будет время буду добавлять... Поделиться этим сообщением Ссылка на сообщение
Дмитрий_2012 2 Опубликовано 27 Августа 2012 Я не мастер рисовать, как смог, надеюсь, будет понятно. Спасибо, Подскажите. +5В и +12В можно подать на Ардуину и часы от преобразователей на основе MC34063? Чтобы не использовать отдельный блок питания, или это нецелесообразно. Есть ли какие звуки от работы дайверов LDD? Вентиляторами тоже управляет Ардуина? Температурный датчик не планируете поставить на Ардуину? Поделиться этим сообщением Ссылка на сообщение
Alex_M 89 Опубликовано 27 Августа 2012 (изменено) Подскажите. +5В и +12В можно подать на Ардуину и часы от преобразователей на основе MC34063? Чтобы не использовать отдельный блок питания, или это нецелесообразно. Здесь не подскажу, в этом я дуб дубом… скорее всего можно. Есть ли какие звуки от работы дайверов LDD?Вентиляторами тоже управляет Ардуина? Никаких звуков нет, есть щелчок при переключении реле. Вентиляторами и штатной луной управляет arduina (пины 7 и 8) через реле. Температурный датчик не планируете поставить на Ардуину? Датчики (DS18S20) планирую добавить как дойдут руки. Изменено 27 Августа 2012 пользователем Alex_M (см. историю изменений) Поделиться этим сообщением Ссылка на сообщение
vahegan 101 Опубликовано 27 Августа 2012 Текущая версия программы. Если приводите код программы, думаю, будет корректно также приводить в виде архива все используемые библиотеки и указывать, под какой версией ардуино все это работает. В частности, в вашем проекте используется какая-то версия библиотеки RTClib.h Со скачанной из инета версией библиотеки под этим названием ваш код не компилируется. Поделиться этим сообщением Ссылка на сообщение
Alex_M 89 Опубликовано 27 Августа 2012 Про это как-то не подумал, сорри… :oops: Про rtc ds1307 http://www.ladyada.net/learn/breakoutplus/ds1307rtc.html Линк на саму библиотеку https://github.com/adafruit/RTClib Версия Arduino 1.0 Надеюсь не перепутал, вечером посмотрю точно. :hmmm: Поделиться этим сообщением Ссылка на сообщение
vahegan 101 Опубликовано 27 Августа 2012 Вот, совсем другое дело Компилируется и прошивается Спасибо! Поделиться этим сообщением Ссылка на сообщение
xromis 0 Опубликовано 27 Августа 2012 доброго дня и ночи. после штудирования сайтов стал искать и сравнивать компоненты, наткнулся на данный сайтик- http://robocraft.ru/shop/index.php?route=p...ory&path=47 скажите данная модель подойдет ORduino-Nano ( ATMega168) заранее спасибо. либо использовать данный девайс http://devicter.ru/goods/Arduino-Nano-V3-ATmega Поделиться этим сообщением Ссылка на сообщение
Alex_M 89 Опубликовано 27 Августа 2012 Лучше 328 (больше памяти), я заказывал 328, но продавец ошибся и прислал 168 (и потом сделал частичный возврат денег). На ebay arduino nano 328 можно купить меньше, чем за 500руб. с доставкой. Поделиться этим сообщением Ссылка на сообщение
xromis 0 Опубликовано 27 Августа 2012 все понял штудируем ebay arduino nano 328. еще вопрос для подключения монитора можно расширение ставить как я понимаю. http://viewitem.eim.ebay.ru/Servo-Sensor-S...0634266015/item Поделиться этим сообщением Ссылка на сообщение
Alex_M 89 Опубликовано 28 Августа 2012 Я заказал lcd c i2c, соответственно для подключения буду использовать А4(SDA), А5(SCL) и питание. Иначе пинов не хватит для иного варианта подключения (могу ошибаться). Плата расширения это лишнее (ИХМО). Поделиться этим сообщением Ссылка на сообщение
vahegan 101 Опубликовано 28 Августа 2012 Разница между нано 168 и нано 328 всего 2 доллара, и поэтому прямой смысл покупать на 328. Я купил 168 за 12 долларов всего, но у меня это будет slave-контроллер, ему должно хватить. Кроме того, на платке с RTC китайцы обычно ставят также EEPROM на 8КБ, а это немало памяти (а встроенная в контроллер память остается чисто под программу - что тоже немало, если не перегружать ее сложными менюшками. С другой стороны, если стоит вопрос недостатка памяти, то всего за 20 долларов можно купить Мегу 2560 (всего 8 долларов разницы, зато проблему нехватки памяти забываешь), в которой аж 256Мб памяти (см. проект с тачскрином на ее основе в соседней ветке). Поделиться этим сообщением Ссылка на сообщение