go to bottom
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

Простой Arduino-контроллер "чайника" - от макета до готового изделия (страница 2)

В какой-то мере эта тема является продолжением темы уважаемого ZORS, ARDUINO для автоматизации аквариума . По крайней мере, в том, что касается контроллера, который делаю я, пользуясь наработками, схемами и критикой из той темы.
Идея иметь некоторое контролирующее аквариум устройство у меня имелась давно. Устройство, которое обслуживало бы основные потребности аквариума (контроль света, температуры, СО2, возможно рН и подачу УДО) и было бы относительно простым в сборке и гибким для приспособления к своим индивидуальным нуждам.
Про платы Arduino я впервые прочитал пару лет назад точно, но как-то не решался приступить к ее изучению. Причем, если железо и схемы "чаво-куда-воткнуть" для меня еще более менее не страшны (закон Ома не менялся последние лет 150), то вот программная часть, прямо скажу, отталкивала, ибо я боялся не разобраться. По образованию и профессии я весьма далек от программирования. Последний раз году в 1989-90 в школьном кружке работал на Бейские и (могу ошибиться) на Фортране.
Толчком послужила тема, которую я уже указал, где ТС и другие участники все подробно разжевали и в рот положили, ну а проглотить - это уже дело индивидуальное.
Вот о процессе глотания и пойдет речь. Ну, в смысле, что у меня получилось из ардуины.

2014-05-0202/05/2014 22:20:09
#1968755
Нравится skitol
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

94 1
Москва
7 года

Дядька-рыбомор



Ого! Огромное спасибо за работу!)
2014-05-2424/05/2014 16:52:20
#1974682
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

Небольшие пояснения к схеме, чаво-куды включено
Коммутация входов/выходов ардуины такая:
2 - кнопка вкл/выкл режима СО2
3 - кнопка листания меню на дисплее
4 - реле управление ЭМ-клапаном СО2
5 - ШИМ для канала "утро-вечер"
6 - ШИМ для канала "основной дневной свет"
7 - реле вкл/выкл питания драйверов от 19V AC/DC
8 - управление реле включения кулеров для воды
9 - вход для термодатчика радиаторов
10 - вход для термодатчика воды
12 - управление реле включения кулеров для радиаторов
А0 - вход для АЦП от кнопок "21:00", "подсветка дисплея", "выкл/вкл освещения в ручном режиме"
Можно запросто сэкономить 2 выхода (2 и 3), если повесить на АЦП (к А0) эти две кнопки, подобрав номиналы резисторов. Я не стал этого делать: лень и хотелось попробовать разные схемы управления кнопками.

2014-05-2424/05/2014 17:10:13
#1974686
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

Когда включается питание, появляется логотипчик, что-то типа "Хэллоуворда".

для форума

Потом экран гаснет. Чтобы вообще понимать, работает ли контроллер, я на переднюю панель вывел 3,5 мм зеленый светодиод, включенный к GND и VCC через резистор 1 ком.
После нажатия кнопки "подсветки экрана" включается подсветка экрана (все должно быть логично!), выводится время, дата, день недели (а вдруг пригодится?).
для форума

Далее кнопкой "меню" листаем меню. После первого нажатия выводится инфа, чего у нас включено, в авто или ручном режиме. Ну, к примеру
для форума

такая запись говорит о том, что свет и СО2 работают в режиме "авто", свет включен, СО2 выключено, а три буквы Evg означают evening, т.е. вечер (основной свет уже погас, но доп. подсветка еще работает). Также возможны варианты Ngt, т.е. night, ночь (весь свет выключен), Mrg, т.е. morning (включено доп.освещение), Day (включено основное освещение). Утром-вечером будут включаться 3 диода теплого белого, а днем в качестве основного света - 8 диодов холодного белого. Все, конечно, через ШИМ для плавности.
Продолжение следует.
2014-05-2424/05/2014 17:30:27
#1974691
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

На этой странице меню можно кнопками "СО2" и "свет" включать нужный режим.
Для кнопки "СО2" есть три варианта - полный автомат "AUTO", режим "ON HAND" - вкл в ручном режиме и "OFF HAND" - выкл в ручном режиме. После третьего нажатия цикл повторяется. Я это делал под свои нужны, т.е. подаю СО2 из аппарата Киппа (сода+лимонка) для настройки скорости подачт после перезарядки аппарата.
Для света есть возможность просто выключить его ("OFF HAND") или включитm в автомате ("ON AUTO" и "OFF AUTO"). Для меня это актуально, т.к. когдя лезу в аквас, то откидываю светильник и не хочу, чтобы свет бил в глаза. Примеры скриншотов

для форума
для форума

Следующее нажатие кнопки "меню" выводит на экран температуру воды и ридиаторов, тут все понятно
для форума

Значок "*" обозначает, что температура превысила установленный порог+гистерезис и включились соответствующие кулеры (в последнем варианте скетча для радиаторов установлено 40 градусов). После падения температуры ниже установленного порога-гистерезис кулеры отключаются. Работает терморегуляция в период 9:00 - 22:00, т.к. аквас стоит в спальном помещении, слушать ночью джаз кулеров я и жена не хотели бы.
Третье нажатие на кнопку "меню" возвращает нас к часам, и так по кругу.
Выключается подсветка экрана повторным нажатием на кнопку "подсветка экрана". Была мысль сделать автоматом выключение экрана через заданное время, но мне так показалось неудобным.
2014-05-2424/05/2014 17:56:58
#1974699
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

Кнопка "21:00" на задней панели устанавливает часы на 21:00 по сигналам программы "Время". Часы программно корригируются, у меня установлена коррекция минус 1 секунда каждые 38 мин. Этот показатель индивидуальный для разных RTC.

2014-05-2424/05/2014 17:59:37
#1974700
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

Еще добавлю, что несмотря на обилие соединений на схеме, внутри корпуса проводов относительно мало, т.к. вся коммутация выполнена на самодельном шилде к ардуине, и все компоненты подключены шлейфами через разъемы типа "мама-папа".

2014-05-2424/05/2014 18:20:05
#1974703
Нравится Bwzs
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

94 1
Москва
7 года

Спасибо Вам огромное за данную тему. Собрал почти все как у Вас, только проще. У меня нет требований ставить датчики температуры и кулеров, в связи с этим поставил 2 реле вместо 4, так же у меня всего одна линейка СД поэтому поставил только один драйвер, в связи с этим возникает вопрос как можно переделать скетч под эти требования? Вырезал из скетча все что связано с Ldd2 и и температурой, теперь вообще все работает криво косо, подскажите как решить?

2014-07-1111/07/2014 08:13:19
#1984711
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

237 15
Курчатов
6 года

Bwzs

нужен оригинальный скетч и тот, что получился, искать, где затронули основную логику
выкладывайте
2014-07-1414/07/2014 14:13:55
#1985361
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

94 1
Москва
7 года

Оригинальный в данной теме
Простой Arduino-контроллер "чайника" - от макета до готового изделия


мой http://my-files.ru/u...

с шимом вроде работает только теперь включает СД на полную. Пробовал менять значения на 180 вместо 255, все равно палит на всю.


//Установки параметров ШИМ
#define PWM_MIN 0 //минимальное значение ШИМ
#define PWM_MAX 180//максимальное значение ШИМ

2014-07-1616/07/2014 16:06:43
#1985885
Малёк
Аквафорум рыбка
Аватар пользователя

13 1
Kazakhstan Kostanay
2 года

Дядька-рыбомор


Помогите пожалуйста с кодом в этой теме.У меня четырёх канальное реле включается в off а выключается в On.Где и что нужно поменять в скетче?

/*Скетч с использованием UNIX-времени
По материалам www.aqa.ru и благодаря стараниям ZORS
Версия от 03 мая 2014
Управление 4-мя реле (СО2, термореле воды и радиаторов ЛЭД, вкл/выкл драйверов ЛЭД)
ШИМ ЛЭД по 2-м каналам
Вывод на экран температуры, времени, даты, состояния включенных функций
Коррекция неточных RTC
Работа с 5-ю кнопками: вкл/выкл подсветки дисплея меню дисплея, время на 21:00,
управление СО2, светом.
*/

//Загрузка библиотек
#include
#include
#include
#include

//Установка экрана
LiquidCrystal_I2C lcd(0x27,16,2);


//Подключение выходов
const int RelCO2 = 4; //реле СО2 на выходе 4
const int RelLdd = 7;//выход 7 реле DC для драйверов LDD
const int Led1 = 5; //ШИМ утро-вечер выходе 5
const int Led2 = 6; //ШИМ день на выходе 6
const int TermRel1 = 8;//выход 8 для реле термодатчика воды
const int TermRel2 = 12; //выход 12 для реле термодатчика радиаторов

//Установки параметров ШИМ
#define PWM_MIN 0 //минимальное значение ШИМ
#define PWM_MAX 255//максимальное значение ШИМ

//Значения минут и часов в секундах
#define mn 60UL
#define hr 3600UL

//Установки времени вклвыкл ШИМ-сигнала на 5 и 6 выходах (время в секундах UNIX)
const long Led1On = 13*hr;//включение ШИМ на 5 выходе в 13:00
const long Led1Off = 21*hr+30*mn;//выключение (начало заката) в 21:30
const long Led1Dur = 30*mn;//длительность восхода-заката 30 мин

const long Led2On = 15*hr;//включение ШИМ на 6 выходе в 15:00
const long Led2Off = 20*hr+30*mn;//выключение (начало заката) в 20:30
const long Led2Dur = 30*mn;//длительность восхода-заката
const long CO2On = 14*hr+30*mn;//включение СО2
const long CO2Off = 20*hr+30*mn;//выключение СО2

//Установка RTC и их коррекция
RTC_DS1307 RTC;
uint32_t TimeAdjustPeriod = 38*mn; //корректирровка времени на -1 сек за 38 мин
uint32_t TimeCorrection = 1;
unsigned long nextAdjustTime = 0;

//Установки для печати месяцев на экране
const char* months[] = {
"Jan", "Feb", "Mar",
"Apr", "May", "Jun",
"Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"};

//Установки для термодатчика
int TSensorPin1 = 10;
int TSensorPin2 = 9;
OneWire ds1(TSensorPin1);// создаем объект температурного датчика
OneWire ds2(TSensorPin2);
float t1 = 27.0;//установка температуры
float tGist1 = 0.2;//установка гистерезиса

float t2 = 40.0;//установка температуры
float tGist2 = 0.5;//установка гистерезиса

//Установки для кнопки СО2 на выходе 2
const int ButtonCO2 = 2;
boolean flagCO2 = false;
int regimCO2 = 1;

//Установки для кнопок "Время 21:00", "Свет" и "Подсветка LCD на аналоговом входе А0
const int ButtonA0 = A0;
int analogA0 = 0;
boolean flagA0 = false;
int regimA0 = 1;
boolean flagA0LCD = false;
int regimA0LCD = 1;

//Установки для кнопки "Меню экрана" на выходе 3
const int ButtonMenu = 3;
boolean flagMenu = false;
int regimMenu = 1;


//*********************************************************
void setup () {
Wire.begin();
RTC.begin();
//RTC.adjust(DateTime(__DATE__, __TIME__)); // строка только для первой компиляции!!!
DateTime myTime = RTC.now();
//RTC.adjust(DateTime(myTime.unixtime()+15)); //строка только для первой компиляции!!!
RTC.adjust(DateTime(myTime.unixtime()+3));//для второй компиляции, коррекция при перезагрузках Arduino на 3 сек.

//Первоначальные установки выходов
pinMode (RelCO2, OUTPUT);
pinMode (RelLdd, OUTPUT);
pinMode (TermRel1, OUTPUT);
pinMode (TermRel2, OUTPUT);
digitalWrite (RelCO2, LOW);
digitalWrite (RelLdd, LOW);
digitalWrite (TermRel1, LOW);
digitalWrite (TermRel2, LOW);

analogWrite(Led1, PWM_MIN);
analogWrite(Led2, PWM_MIN);

//Первоначальные надписи на дисплее
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("iAQUA");//Слава мне, любимому
lcd.setCursor(3, 1);
lcd.print("v.3.05.14");
delay (3000);
lcd.clear();
lcd.noBacklight();
}
//***************************************************
void loop () {
//Работа часов с коррекцией
DateTime myTime = RTC.now();
uint32_t UTime = myTime.unixtime();
if (UTime > nextAdjustTime){
nextAdjustTime = UTime+TimeAdjustPeriod;
RTC.adjust(DateTime(UTime-TimeCorrection));
}
UTime %=86400;
analogA0=analogRead(A0);
if (analogA0>685 && analogA0 {
DateTime myTime = RTC.now();
uint32_t UTime = myTime.unixtime();
UTime = 75600 + (UTime-UTime%86400);
RTC.adjust(DateTime(UTime));
}
if (analogA0>810 && analogA0 {
regimA0++;
flagA0 = true;
if (regimA0>2)
{
regimA0=1;
}
}
else if (analogA0 {
flagA0=false;
}
if (regimA0==1)
{
if ((UTime>=(Led1On-1*mn)) && (UTime {
digitalWrite(RelLdd, HIGH);
}
else
{
digitalWrite(RelLdd, LOW);
}
}
if (regimA0 !=1)
{
digitalWrite(RelLdd, LOW);
}

if (analogA0>580 && analogA0 {
regimA0LCD++;
flagA0LCD = true;
if (regimA0LCD > 2)
{
regimA0LCD = 1;
}}
else if(analogA0 {
flagA0LCD = false;
}
if (regimA0LCD==1)
{
lcd.noBacklight();
}
if (regimA0LCD !=1)
{
lcd.backlight();
}


//Управление СО2
if (digitalRead(ButtonCO2)==HIGH && !flagCO2)
{
regimCO2++;
flagCO2=true;
if(regimCO2>3)
{
regimCO2=1;
}
}
else if (digitalRead(ButtonCO2)==LOW && flagCO2)
{
flagCO2=false;
}
if(regimCO2==1)

{
if (UTime>=CO2On && UTime {
digitalWrite (RelCO2, HIGH);
}
else
{
digitalWrite (RelCO2, LOW);
}
}
else if(regimCO2==2)
{
digitalWrite(RelCO2, HIGH);
}
else if(regimCO2==3)
{
digitalWrite(RelCO2, LOW);

}

//управление термореле воды в период 9:00-22:00
float temp1 = getTemp1();
//lcd.setCursor(9,1);
if((temp1 > (t1 + tGist1)) && (UTime >= 9*hr) && (UTime {
digitalWrite(TermRel1,HIGH);
}
else if ((temp1 = 22*hr)
{
digitalWrite(TermRel1,LOW);
}

float temp2 = getTemp2();//управление термореле радиаторов
if (temp2>(t2+tGist1) && UTime>=9*hr && UTime {
digitalWrite(TermRel2, HIGH);
}
else if (temp2=22*hr)
{
digitalWrite(TermRel2, LOW);
}

//Управление кнопкой "Меню экрана"
if (digitalRead(ButtonMenu)==HIGH && !flagMenu)
{
lcd.clear();
flagMenu = true;
regimMenu ++;
if (regimMenu>3)
{
regimMenu=1;
}
}
else if (digitalRead(ButtonMenu)==LOW && flagMenu)
{
flagMenu=false;
}
if (regimMenu==1) //меню "1" вывод на экран времени и календаря
{
lcd.setCursor(4, 0);
if (myTime.hour() lcd.print(myTime.hour());
lcd.print(':');
if (myTime.minute() lcd.print(myTime.minute());
lcd.print(':');
if (myTime.second() lcd.print(myTime.second());
lcd.setCursor(0, 1);
if (myTime.day() lcd.print(myTime.day());
lcd.setCursor(3, 1);
lcd.print (months[myTime.month()-1]);
lcd.setCursor(7,1);
lcd.print(myTime.year());
lcd.setCursor(13,1);
int dow = (myTime.dayOfWeek());
switch (dow){
case 0:
lcd.print("Sun");
break;
case 1:
lcd.print("Mon");
break;
case 2:
lcd.print("Tue");
break;
case 3:
lcd.print("Wed");
break;
case 4:
lcd.print("Thu");
break;
case 5:
lcd.print("Fri");
break;
case 6:
lcd.print("Sat");
break;
}
}
else if (regimMenu==2)//меню "2" вывод на экран CO2, T, режима работы диодов
{
lcd.setCursor(0,0);
lcd.print("CO2");
lcd.setCursor(4,0);
if (digitalRead(RelCO2)==HIGH)
{
lcd.print("On ");
}
else
{
lcd.print("Off");
}
lcd.setCursor(8,0);
if (regimCO2 == 1)
{
lcd.print("Auto");
}
else if (regimCO2 !=1)
{
lcd.print("Hand");
}

lcd.setCursor(13,1);
if(UTime=(Led1Off+Led1Dur))
{
lcd.print("Ngt");
}
else if (UTime>=(Led1On) && UTime {
lcd.print("Mrg");
}
else if(UTime >= Led2On && UTime {
lcd.print("Day");
}
else if (UTime >= Led2Off && UTime {
lcd.print("Evg");
}
lcd.setCursor(0,1);
if (digitalRead(RelLdd)==HIGH && regimA0 ==1)
{
lcd.print("LED On Auto");
}
else if (digitalRead(RelLdd) == LOW && regimA0 ==1)
{
lcd.print("LED Off Auto");
}
else
{
lcd.print("LED Off Hand");
}

}
else if(regimMenu==3)// меню "3" вывод на экран температуры
{
lcd.setCursor(0,0);
lcd.print("Water t=");
lcd.print(temp1,1);
lcd.setCursor(13,0);
if (digitalRead(TermRel1)==HIGH)
{
lcd.print("*");
}
else
{
lcd.print(" ");
}
lcd.setCursor(0,1);
lcd.print("LED t=");
lcd.print(temp2,1);
lcd.setCursor(13,1);
if(digitalRead(TermRel2)==HIGH)
{

lcd.print("*");
}
else
{
lcd.print(" ");
}
}


//Управление ШИМ
//для выхода 5 (утро и вечер)
long pwm;
if ((UTime=Led1Off + Led1Dur))
{
pwm=PWM_MIN;
}
else if((UTime>=Led1On) && (UTime {
pwm = ((UTime - Led1On)*(PWM_MAX-PWM_MIN)) / Led1Dur;
}
else if((UTime>=Led1Off) && (UTime {
pwm=((Led1Off + Led1Dur - UTime)*(PWM_MAX-PWM_MIN))/Led1Dur;
}
else
{
pwm=PWM_MAX;
}
analogWrite(Led1, pwm);

//для выхода 6 (день)
if ((UTime=Led2Off + Led2Dur))
{
pwm=PWM_MIN;
}
else if((UTime>=Led2On) && (UTime {
pwm = ((UTime - Led2On)*(PWM_MAX-PWM_MIN)) / Led2Dur;
}

else if((UTime>=Led2Off) && (UTime {
pwm=((Led2Off + Led2Dur - UTime)*(PWM_MAX-PWM_MIN))/Led2Dur;
}
else
{
pwm=PWM_MAX;
}
analogWrite(Led2, pwm);


}
//*****************************************************
//Функции чтения с датчиков температуры
float getTemp1(){
byte data[12];
byte addr[8];
if ( !ds1.search(addr)) {
//no more sensors on chain, reset search
ds1.reset_search();
return -1001;
}

if ( OneWire::crc8( addr, 7) != addr[7]) {

return -1002;
}

if ( addr[0] != 0x10 && addr[0] != 0x28) {

return -1003;
}

ds1.reset();
ds1.select(addr);
ds1.write(0x44,1);

byte present = ds1.reset();
ds1.select(addr);
ds1.write(0xBE);


for (int i = 0; i data[i] = ds1.read();
}

ds1.reset_search();

byte MSB = data[1];
byte LSB = data[0];

float TRead = ((MSB float Temperature = TRead / 16;

return Temperature;
}
float getTemp2(){
byte data[12];
byte addr[8];
if ( !ds2.search(addr)) {
//no more sensors on chain, reset search
ds2.reset_search();
return -1001;
}

if ( OneWire::crc8( addr, 7) != addr[7]) {

return -1002;
}

if ( addr[0] != 0x10 && addr[0] != 0x28) {

return -1003;
}

ds2.reset();
ds2.select(addr);
ds2.write(0x44,1);

byte present = ds2.reset();
ds2.select(addr);
ds2.write(0xBE);


for (int i = 0; i data[i] = ds2.read();
}

ds2.reset_search();

byte MSB = data[1];
byte LSB = data[0];

float TRead = ((MSB float Temperature = TRead / 16;

return Temperature;
}
2014-10-1616/10/2014 19:38:16
#2008340
Малёк
Аквафорум рыбка
Аватар пользователя

13 1
Kazakhstan Kostanay
2 года

Дядька-рыбомор

Добавил фото -где на дисплее видно что при off реле включено.А при On наоборот выключается.Где искать?У меня реле видать отличается от реле (Дядька-рыбомор)?
Как это исправить в коде?
2014-10-1616/10/2014 21:18:58
#2008383
Малёк
Аквафорум рыбка
Аватар пользователя

13 1
Kazakhstan Kostanay
2 года

Всё разобрался.В реле с нормально-разомкнутых контактов переставил на - нормально-замкнутые контакты.А мучился искал причину несколько дней в скетче.Смайлик :mad:

2014-10-1919/10/2014 13:12:27
#2009156
Малёк
Аквафорум рыбка
Аватар пользователя

13 1
Kazakhstan Kostanay
2 года

Дядька-рыбомор
Сбивается время на контролёре, после отключения питания, батарейка живая.В чём может быть причина? Подскажите пожалуйста.
2014-10-2727/10/2014 11:16:26
#2012006
Малёк
Аквафорум рыбка
Аватар пользователя

13 1
Kazakhstan Kostanay
2 года

Выдёргиваю питание из USB, затем жду минуты 3-5, потом вставляю USB, -время показывает то что было 3-5 минут назад.Для чего тогда батарейка?

2014-10-2727/10/2014 12:37:37
#2012025
Малёк
Аквафорум рыбка
Аватар пользователя

13 1
Kazakhstan Kostanay
2 года

Прочитал внимательно тему уважаемого ZORS и понял свою ошибку.Мне надо было раскомментировать и загрузить а второй раз закомментировать и ещё раз загрузить вот это RTC.adjust(DateTime(__DATE__, __TIME__));

2014-10-2727/10/2014 19:31:20
#2012176
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

Давненько не был в теме и вообще на форуме, работа замучала. Да и со светильником еще вожусь, пока собрал рабочий макет, времени не хватает.
Полугодовые ходовые испытания показали полную надежность контроллера. Время сильно не убегает, релешки щелкают, светодиоды горят. Несколько изменил скетч,он тут Основное отличие: добавилась функция включения диодов вручную вне зависимости от времени суток, иногда это необходимо, что бы посмотреть, что там в банке делается.

2014-11-0606/11/2014 22:21:28
#2015765
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

Настало время завершать проект, начатый весной. Мешало отсутствие свободного времени, а то бы закончил все еще летом.
расскажу все по-порядку.
последний вариант скетча выложен здесь. Главное отличие - доработка управления кулерами. Теперь кулер, охлаждающий драйверы, включается одновременно с подачей напряжение на драйверы (раньше включался в зависимости от температуры), а датчик показывает температуру воздуха в комнате.

Изменено 30.11.14 автор Дядька-рыбомор

2014-11-3030/11/2014 20:26:14
#2025734
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

Теперь перейду непосредственно к светильнику, который должен управляться контроллером. В качестве диодов выбраны Сree XML, 3 штуки нейтральный белый, 8 штук холодный белый, если кому надо бины - поищу. Диоды расположил на радиаторах (купены на развале радиорынка), а радиаторы закрепил на раме из алюминиевого профиля, купленного в кастораме. Это так сказать остов всего светильника.
Фото форумаФото форума
Питание осуществляется тремя драйверами MW LDD-1000H, отдельно на холодные и нейтральный диоды. Эти драйверы диммируемые. Драйвера расположил в отдельном корпусе, вместе с преобразователем напряжения на микросхеме LM-317 (он нужен для кулеров).
Фото форума
Честно говоря, вынесение драйверов в отдельный корпус признаю не совсем удачным решением. На будущее буду планировать однокорпусный контроллер, благо есть еще два аквариума.
У меня кто-то из форумчан спрашивал, как я располагаю драйвера на плате. Отвечаю - я их не впаиваю, а вставляю в гнездо мама-папа, которое и припаяно к плате.
Фото форума

Изменено 30.11.14 автор Дядька-рыбомор

2014-11-3030/11/2014 20:51:32
#2025749
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

Теперь про корпус светильника. Он сделан из фанеры и бруса, а сама рама с радиаторами крепится уже к этому ящику.
Фото форумаФото форумаФото форумаФото форума

Все в сборе: контроллер, драйвера и корпус.
Фото форумаФото форума
Остался последний штрих: обклеить корпус пленкой под цвет окружающей мебели и поставить на аквариум.
Фото форума
Вот и все. Этот проект завершен. Остались мелкие поправки и доработки.
Но на очереди еще один проект - "iAQUA NANO" для моих наноаквариумов (10 и 20 литров). Этот контроллер планируется однокорпусным (плата ардуино и диммируемый драйвер в одном корпусе) на плате arduino nano. Так что продолжение следует...

Изменено 30.11.14 автор Дядька-рыбомор

2014-11-3030/11/2014 21:10:04
#2025772
Малёк
Аквафорум рыбка
Аватар пользователя

13 1
Kazakhstan Aktobe
2 года

Молодец. А я всё светильник никак не зделаю.Уже собираю другой контролёр на мега 2560 с цветным дисплеем TFT32.

2014-12-2323/12/2014 23:45:31
#2033782
Малёк
Аквафорум рыбка
Аватар пользователя

13 1
Kazakhstan Aktobe
2 года

Последний скетч не открывается.

2014-12-2323/12/2014 23:51:13
#2033785
Малёк
Аквафорум рыбка
Аватар пользователя

21 1
Москва
10 года

какова стоимость контроллера?

2015-01-2727/01/2015 11:08:13
#2044924
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

Сергей.Б

Ссылка пропала Смайлик :( Выкладываю еще раз
За 2 месяца аквариум просто зарос и регулярно пропалывается.
Фото форума
Несколько уменьшил максимальное значение PWM_MAX для основного света и назвал его PWM_LOW, чтобы приглушить интенсивность света, а то на анубиасах по краю листа черная бородка пошла. Подобрал интенсивность света просто "на глазок". Динамика растений покажет.



Изменено 3.2.15 автор Дядька-рыбомор
2015-02-0303/02/2015 19:58:52
#2047850
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

Не останавливаясь на достигнутом, решил сделать совсем ужо простенький контроллер для нано-аквариумов и обозвал его iAQUA-nano. Умеет-то он немного: только включать/выключать диоды с диммированием (и то одну линейку), работать в ручном и автоматическом режимах, а также служит часами. Делать температурный контроллер я не стал за ненадобностью. Зато поместил все комплектующие на одну плату: Arduino-nano, часики DS3231, релешку с развязкой на n-p-n транзисторе, LED-драйвер и стабилизатор на 5 вольт, зробленный на преобразователе L7805 (для питания самой ардуины). Вся конструкция питается от импульсного ИП на 12 В 30 Вт (какой нашел в хозяйстве).
Фото форумаФото форума
Плата размером 10*8 см, но можно было еще меньше сделать, достаточно много свободного места на ней неиспользовано.
Плюсы:
1. Все в одном флаконе, т.е. в одной коробке.
2. Часы ds3231 просто сказка, за два месяца не убежали ни на секунду (по крайней мере по данным доступных мне измерений).
3. Ну и вообще - зело просто повторить. Кто читал все мою тему (а также тему уважаемого ZORS'а) - сделают то же самое без труда. Скетч во многом повторяет таковой от предыдущей конструкции, но только очень упрощенный.
Минусы, а как же без них:
1. Больше не буду связываться с L7805, греется, собака!!! Пришлось радиатор нехилый присобачить, что повлияло на выбор размеров корпуса. Субъективно, LM317 греется меньше.
2. Больше не придумал. а они есть Смайлик :)
К концу недели "упакую" все это в корпус и покажу.

Изменено 3.2.15 автор Дядька-рыбомор

2015-02-0303/02/2015 21:23:46
#2047892
Завсегдатай, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

1362 586
Ростов-на-Дону
4 года

А теперь самое главное! Я тут задумался, а нельзя ли еще более уменьшить в размере и удешивить наши конструкции? А что если вместо ардуины использовать микроконтроллер, к примеру Atmega? Только так, чтобы не изучать тонкости программирования, просто - залил скетч, как в ардуину - и работает. Покопался в инете и вот что нашел.
Оказывается, Ардуину саму можно использовать в качестве программатора для микроконтроллеров через программы Arduino IDE! Может и невелико открытие, но не забываем, что я - чайник и гуманитарий-ботаник, а слова типа "фьюз" или "аппаратное прерывание" вводят меня в кратковременный транс.
Сказано - сделано. Запасся я простенькими контроллерами Atmega8-16PU (один уже спалил), а arduino-nano у меня была. Залил скечт часов на контроллер - и ура! Все работает!
Фото форумаФото форума

2015-02-0303/02/2015 21:37:39
#2047898



Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Top