Контроллер для аквариума своими руками, НО чужими мозгами...

А что вы сделали своими руками для своего аквариума?

Модератор: r00tGER

Аватара пользователя
Библиотекарь

За активность За позитив За то, что мы все вместе За спонсорство Старая гвардия
Участнику съезда 2018
Дежурный по чату
Дежурный по чату
Сообщения: 678
Зарегистрирован: 11 янв 2015, 09:39
Награды: 7
Благодарил (а): 194 раза
Поблагодарили: 229 раз

Контроллер для аквариума своими руками, НО чужими мозгам

Сообщение Библиотекарь »

Natalia писал(а):
Михаил Игоревич писал(а):
шелть писал(а):Natalia, как в тему! Читаю и думаю о том же (везёт тем, у кого есть соображалка и МОЗГ) :laughter2: Но читать всё равно интересно (хоть и ни фига не понимаю)))
Зато у Нас у всех есть МеГаМоЗг)))))
МеГаМозг один, а ручки-крЮчки у каждого второго... И шо ж нам делать???
Это да, МеГаМоЗг есть, а вот мега рук нет)))
Аватара пользователя
Analog

За активность За дружелюбие и отзывчивость За вклад в развитие За то, что мы все вместе За помощь
Участнику Лит. конкурса 2014 Новогодний 2017 Участник съезда №1 Aquakmv Участнику съезда 2017 Участнику съезда 2018
Администратор
Администратор
Сообщения: 7768
Зарегистрирован: 05 апр 2013, 15:23
Награды: 11
Благодарил (а): 2021 раз
Поблагодарили: 1998 раз

Re: Контроллер для аквариума своими руками, НО чужими мозгам

Сообщение Analog »

Народ затих, читает ссылки?
Самое непростое в жизни – понять, какой мост следует перейти, а какой сжечь.
Если вам помогли, не забудте за кнопку "Сказать спасибо"!
ПОНРАВИЛСЯ ФОРУМ? - ПОМОГИ ЕМУ РАЗВИВАТЬСЯ!
КАРТА ЗООМАГАЗИНОВ КМВ
Аватара пользователя
Dirty Harry

За продвижение форума! Старая гвардия Участник съезда №1 Aquakmv
Кандидат наук
Кандидат наук
Сообщения: 892
Зарегистрирован: 09 сен 2013, 16:43
Награды: 3
Благодарил (а): 205 раз
Поблагодарили: 207 раз

Re: Контроллер для аквариума своими руками, НО чужими мозгам

Сообщение Dirty Harry »

И лекцию по Ассемблеру, пожалуйста, очень просим!!! :)
Хорошая идея ничего не стоит, но может принести много денег!!!
Аватара пользователя
Библиотекарь

За активность За позитив За то, что мы все вместе За спонсорство Старая гвардия
Участнику съезда 2018
Дежурный по чату
Дежурный по чату
Сообщения: 678
Зарегистрирован: 11 янв 2015, 09:39
Награды: 7
Благодарил (а): 194 раза
Поблагодарили: 229 раз

Контроллер для аквариума своими руками, НО чужими мозгам

Сообщение Библиотекарь »

А из присутствующих кто-то имел опыт своими руками собирать данный контроллер?)
Аватара пользователя
r00tGER

За активность За уникальный материал За вклад в развитие За спонсорство За помощь
Старая гвардия Участнику Лит. конкурса 2014
Кандидат наук
Кандидат наук
Сообщения: 1230
Зарегистрирован: 12 янв 2014, 17:54
Награды: 8
Благодарил (а): 593 раза
Поблагодарили: 641 раз

Re: Контроллер для аквариума своими руками, НО чужими мозгам

Сообщение r00tGER »

Собирал много, до готового устройства довел всего несколько. :lol:
Обычно находятся в состоянии "перманентная допилка": вот придут детальки, вот перепишу тот кусок, перепаяю там, вот корпус найду...

В итоге "Сапожник без сапог"

Сейчас пилю простой 4-х канальный контроллер на свет:
Контроллер для аквариума своими руками, НО чужими мозгами... - DSC_9622.jpg
Atmega328 (можно и 6-ть диммируемых каналов).
Рассвет, закат, расписание - ничего необычного.
В принципе, извращаться можно, как угодно - хоть изменение спектра в течении суток для многоканальных лед-сборок (например, как у Юры "риф-лед-лаб").

Разве, что блютуз (зелёненький модуль торчит) будет для конфигурации с компа/смартфона.
Аватара пользователя
Analog

За активность За дружелюбие и отзывчивость За вклад в развитие За то, что мы все вместе За помощь
Участнику Лит. конкурса 2014 Новогодний 2017 Участник съезда №1 Aquakmv Участнику съезда 2017 Участнику съезда 2018
Администратор
Администратор
Сообщения: 7768
Зарегистрирован: 05 апр 2013, 15:23
Награды: 11
Благодарил (а): 2021 раз
Поблагодарили: 1998 раз

Re: Контроллер для аквариума своими руками, НО чужими мозгам

Сообщение Analog »

r00tGER писал(а):Собирал много, до готового устройства довел всего несколько. :lol:
Обычно находятся в состоянии "перманентная допилка": вот придут детальки, вот перепишу тот кусок, перепаяю там, вот корпус найду...

В итоге "Сапожник без сапог"
А я думал только у меня "перманентная допилка", начато всего дофига, а закончить некогда(((
Мой голубой зуб едет из славного городу Шанхай.
Ну вот, решил с вами поделится кодом немного
Быдлокод
#include <EEPROM.h>
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>


#define ONE_WIRE_BUS 12
#define MENU 10
#define ENTER 11
#define EX 9

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

LiquidCrystal lcd(2,4,5,6,7,8); // выбор рабочих портов
int rtc[7]; // создание переменной типа int представляющией собой массив из 7 ячеек
int lcdoff1,lcdoff2;
int menu_val=6;
int numberOfDevices;
int cool=22;
float tempC,xtemp;
int co2on[2]={0,0};
int co2off[2]={0,0};
int ledon[2]={0,0};
int ledoff[2]={0,0};
int ledon2[2]={0,0};
int ledoff2[2]={0,0};
int temp_crit=0;
DeviceAddress tempDeviceAddress;
byte up[8] =
{
B00100,
B01110,
B10101,
B00100,
B00100,
B00100,
B00100,
B00100,
};

byte down[8] =
{
B00100,
B00100,
B00100,
B00100,
B00100,
B10101,
B01110,
B00100,
};
byte cels[8] =
{
B01111,
B01001,
B01111,
B00000,
B00000,
B00000,
B00000,
B00000,
};
byte co2[8] =
{
B00011,
B00011,
B01100,
B01100,
B00011,
B00011,
B01100,
B01100,
};
void setup(void)
{
lcd.createChar(0, up);
lcd.createChar(1, down);
lcd.createChar(2, cels);
lcd.createChar(4, co2);
cool = EEPROM.read(0);
co2on[0]=EEPROM.read(10);
co2on[1]=EEPROM.read(20);
temp_crit=EEPROM.read(15);
co2off[0]=EEPROM.read(30);
co2off[1]=EEPROM.read(40);

ledon[0]=EEPROM.read(50);
ledon[1]=EEPROM.read(60);
ledoff[0]=EEPROM.read(70);
ledoff[1]=EEPROM.read(80);
ledon2[0]=EEPROM.read(100);
ledon2[1]=EEPROM.read(110);
ledoff2[0]=EEPROM.read(120);
ledoff2[1]=EEPROM.read(130);

if ((cool > 100)||(ledon[0]>100)||(co2off[0]>100))
{
cool = 25;
co2on[0]=0;
co2on[1]=0;
temp_crit=25;
co2off[0]=0;
co2off[1]=0;

ledon[0]=0;
ledon[1]=0;
ledoff[0]=0;
ledoff[1]=0;
}

pinMode(MENU, INPUT);
pinMode(EX, INPUT);
pinMode(ENTER, INPUT);
pinMode(0, OUTPUT);

lcd.begin(16, 2);

sensors.begin();


}
/*void TIME(String Sec)
{
if (rtc[2]<10)
{lcd.print("0");}
lcd.print(rtc[2]); //вывод часов
lcd.print(":"); // вывод символа :
(rtc[1]<10)?(lcd.print("0"),lcd.print(rtc[1])):(lcd.print(rtc[1]));
if (Sec =="YES"){

lcd.print(":");// вывод символа :
(rtc[0]<10)?(lcd.print("0"),lcd.print(rtc[0])):(lcd.print(rtc[0])); }

}*/

void Time ()
{
if (rtc[2]<10)
{lcd.print("0");}
lcd.print(rtc[2]); //вывод часов
lcd.print(":"); // вывод символа :
(rtc[1]<10)?(lcd.print("0"),lcd.print(rtc[1])):(lcd.print(rtc[1]));

lcd.print(":");// вывод символа :
(rtc[0]<10)?(lcd.print("0"),lcd.print(rtc[0])):(lcd.print(rtc[0])); }



void LCD_WRITE(int on[2], int off[2],String name_par)
{
lcd.setCursor(0,0);
lcd.print(name_par);
lcd.setCursor(0,1);
lcd.print("On");
lcd.setCursor(2,1);
if (on[0]<10)
{
lcd.print("0");
}
lcd.print(on[0]);
lcd.print(":");
if (on[1]<10)
{
lcd.print("0");
}
lcd.print(on[1]);

if(digitalRead(ENTER)==HIGH)
{
if ((on[0]>=23)&(on[1]>=45))
{
on[0]=0;
on[1]=0;
}
else{

on[1]=on[1]+15;
if (on[1]>=60)
{
on[1]=0;
on[0]++;
}
}
}
lcd.setCursor(8,1);
lcd.print("Off");
lcd.setCursor(11,1);

if (off[0]<10)
{
lcd.print("0");
}
lcd.print(off[0]);
lcd.print(":");
if (off[1]<10)
{
lcd.print("0");
}
lcd.print(off[1]);



if(digitalRead(EX)==HIGH)
{
if ((off[0]>=23)&(off[1]>=45))
{
off[0]=0;
off[1]=0;
}
else{

off[1]=off[1]+15;
if (off[1]>=60)
{
off[1]=0;
off[0]++;
}}
}
}






void Temp()
{
numberOfDevices = sensors.getDeviceCount();
sensors.requestTemperatures();
if(sensors.getAddress(tempDeviceAddress, 0))
{
float xtemp = sensors.getTempC(tempDeviceAddress);
if (xtemp!=85)
{
tempC=xtemp;
}

}


}


void loop() // основной программный цикл
{
RTC.get(rtc,true); // получение данных из DS1307

if(digitalRead(MENU)==HIGH)
{
lcd.clear();
if (menu_val<6)
{
menu_val++;
}

else{
menu_val=1;
}
delay(500);
}


switch (menu_val) {




case 1:

if ((digitalRead(ENTER)==HIGH)&(digitalRead(EX)==HIGH))

{

EEPROM.write(10, co2on[0]);
EEPROM.write(20, co2on[1]);
EEPROM.write(30, co2off[0]);
EEPROM.write(40, co2off[1]);
lcd.clear();
delay(300);
}
else{

lcd.setCursor(8,0);
Time ();
LCD_WRITE(co2on,co2off,"Co2") ;
}
delay(200);
break;


case 2:
if ((digitalRead(ENTER)==HIGH)&(digitalRead(EX)==HIGH))

{
EEPROM.write(50, ledon[0]);
EEPROM.write(60, ledon[1]);
EEPROM.write(70, ledoff[0]);
EEPROM.write(80, ledoff[1]);

lcd.clear();
delay(300);
}
else{
lcd.setCursor(8,0);
Time ();
LCD_WRITE(ledon,ledoff,"Led") ;
}
delay(200);
break;


case 3:
if ((digitalRead(ENTER)==HIGH)&(digitalRead(EX)==HIGH))

{
EEPROM.write(100, ledon2[0]);
EEPROM.write(110, ledon2[1]);
EEPROM.write(120, ledoff2[0]);
EEPROM.write(130, ledoff2[1]);

lcd.clear();
delay(300);
}
else{
lcd.setCursor(8,0);
Time ();
LCD_WRITE(ledon2,ledoff2,"Led2") ;
}
delay(200);
break;

case 4:
// lcd.clear();

if((digitalRead(ENTER)==HIGH)&(digitalRead(EX)==HIGH))
{
EEPROM.write(0, cool);
EEPROM.write(15, temp_crit);
lcd.clear();
delay(1000);
}
lcd.setCursor(0,0);
lcd.print("Cooling");
lcd.setCursor(0,1);
lcd.print(tempC);
lcd.write(2);
lcd.setCursor(8,1);
lcd.print(">>");
lcd.setCursor(12,1);
lcd.print(cool);
lcd.setCursor(9,0);
lcd.print(">T<");
lcd.setCursor(13,0);
lcd.print(temp_crit);
lcd.write(2);
if(digitalRead(ENTER)==HIGH)
{

if (cool<50){
cool++;}else{cool=15;}
}
if(digitalRead(EX)==HIGH)
{
if (temp_crit<40){
temp_crit++;}else{temp_crit=15;}
}
lcd.setCursor(14,1);
lcd.write(2);
delay(200);
break;



case 5:
lcd.setCursor(0,0);
lcd.print("Time");
lcd.setCursor(4,1);

Time ();
if((digitalRead(ENTER)==HIGH)&(digitalRead(EX)==HIGH))
{
delay(1000) ;
RTC.stop();
RTC.set(DS1307_SEC,0); //set the seconds
RTC.set(DS1307_MIN,0); //set the minutes
RTC.set(DS1307_HR,0); //set the hours
RTC.start();
lcd.clear();
delay(1000) ;
}

if(digitalRead(ENTER)==HIGH)
{
if (rtc[2]==23 )
{
rtc[2]=0;
RTC.set(DS1307_HR,rtc[2]);
}
else{
RTC.set(DS1307_HR,rtc[2]+1);
}
}
if(digitalRead(EX)==HIGH)
{
if (rtc[1]==59 )
{
rtc[1]=0;
RTC.set(DS1307_MIN,rtc[1]);
}else{
RTC.set(DS1307_MIN,rtc[1]+1);}
}
delay(200);
break;


case 6:
Temp();
lcd.setCursor(0,0);
Time ();
lcd.setCursor(9,0);

//////////температура
if (tempC-cool>0.2)
{
lcd.write(1);
analogWrite(A1,128);
}
if (tempC-cool>0.4)
{
lcd.write(1);
analogWrite(A1,255);
}
if (tempC<cool)
{
lcd.write(0);
analogWrite(A1,0);
}


lcd.setCursor(10,0);
lcd.print(tempC);
lcd.write(2);
//////////температура

/////////////////со2
if ((co2on[0]*60+co2on[1])<=(rtc[2]*60+rtc[1])&&(rtc[2]*60+rtc[1])<(co2off[0]*60+co2off[1]))

{

lcd.setCursor(13,1);
lcd.print("+\4");
digitalWrite(0, HIGH);
}

else{
lcd.setCursor(13,1);
lcd.print(" ");
digitalWrite(0, LOW);
}
/////////////////со2

//////////свет 1
if (tempC > temp_crit)
{
lcd.setCursor(10,1);
lcd.print(" ");
analogWrite(A3,0);
lcdoff1 =1;
}

else {
//////////свет 1
if (((ledon[0]*60+ledon[1])<=(rtc[2]*60+rtc[1])&&(rtc[2]*60+rtc[1])<(ledoff[0]*60+ledoff[1]))==true)

{

lcd.setCursor(0,1);
lcd.print("+L1");
analogWrite(A3,255);
lcdoff1=0;
}

else{
lcd.setCursor(0,1);
lcd.print(" ");
analogWrite(A3,0);
lcdoff1=1;
}
}

//////////свет 1

//////////свет 2
if (tempC > temp_crit + 2)
{
lcd.setCursor(3,1);
lcd.print(" ");
analogWrite(A2,0);
lcdoff2=1;
}
else {

if (((ledon2[0]*60+ledon2[1])<=(rtc[2]*60+rtc[1])&&(rtc[2]*60+rtc[1])<(ledoff2[0]*60+ledoff2[1]))==true)

{

lcd.setCursor(3,1);
lcd.print("+L2");
analogWrite(A2,255);
lcdoff2=0;
}

else{
lcd.setCursor(3,1);
lcd.print(" ");
analogWrite(A2,0);
lcdoff2=1;
}
}
//////////свет 2
break;

}
delay(200);
}
Это ознакомительный пример прошивки на 2 канала света и 1 канал Со2 + контроль температуры. Прошивка под версию IDE 0.8.2, но при желании легко допиливается под свежие верии IDE.
Самое непростое в жизни – понять, какой мост следует перейти, а какой сжечь.
Если вам помогли, не забудте за кнопку "Сказать спасибо"!
ПОНРАВИЛСЯ ФОРУМ? - ПОМОГИ ЕМУ РАЗВИВАТЬСЯ!
КАРТА ЗООМАГАЗИНОВ КМВ
Аватара пользователя
Analog

За активность За дружелюбие и отзывчивость За вклад в развитие За то, что мы все вместе За помощь
Участнику Лит. конкурса 2014 Новогодний 2017 Участник съезда №1 Aquakmv Участнику съезда 2017 Участнику съезда 2018
Администратор
Администратор
Сообщения: 7768
Зарегистрирован: 05 апр 2013, 15:23
Награды: 11
Благодарил (а): 2021 раз
Поблагодарили: 1998 раз

Re: Контроллер для аквариума своими руками, НО чужими мозгам

Сообщение Analog »

Я так понимаю вопросов нет? Ну хоть поделитесь информацией как продвигается?
Самое непростое в жизни – понять, какой мост следует перейти, а какой сжечь.
Если вам помогли, не забудте за кнопку "Сказать спасибо"!
ПОНРАВИЛСЯ ФОРУМ? - ПОМОГИ ЕМУ РАЗВИВАТЬСЯ!
КАРТА ЗООМАГАЗИНОВ КМВ
Аватара пользователя
26rus

За спонсорство Старая гвардия
Аспирант
Аспирант
Сообщения: 310
Зарегистрирован: 20 янв 2014, 14:41
Награды: 2
Благодарил (а): 51 раз
Поблагодарили: 90 раз

Контроллер для аквариума своими руками, НО чужими мозгам

Сообщение 26rus »

Ни фига ничего не продвигается. Инфы полно, а вот практики - "0". Очень много вопросов, в частности, по написанию скэтча.
26 rus
Аватара пользователя
Analog

За активность За дружелюбие и отзывчивость За вклад в развитие За то, что мы все вместе За помощь
Участнику Лит. конкурса 2014 Новогодний 2017 Участник съезда №1 Aquakmv Участнику съезда 2017 Участнику съезда 2018
Администратор
Администратор
Сообщения: 7768
Зарегистрирован: 05 апр 2013, 15:23
Награды: 11
Благодарил (а): 2021 раз
Поблагодарили: 1998 раз

Re: Контроллер для аквариума своими руками, НО чужими мозгам

Сообщение Analog »

26rus писал(а):Ни фига ничего не продвигается. Инфы полно, а вот практики - "0". Очень много вопросов, в частности, по написанию скэтча.
Конструктивные вопросы??
Основы понятны? Куда какой проводок? Как запустить дисплей? Часы Ds1307?
Самое непростое в жизни – понять, какой мост следует перейти, а какой сжечь.
Если вам помогли, не забудте за кнопку "Сказать спасибо"!
ПОНРАВИЛСЯ ФОРУМ? - ПОМОГИ ЕМУ РАЗВИВАТЬСЯ!
КАРТА ЗООМАГАЗИНОВ КМВ
Аватара пользователя
26rus

За спонсорство Старая гвардия
Аспирант
Аспирант
Сообщения: 310
Зарегистрирован: 20 янв 2014, 14:41
Награды: 2
Благодарил (а): 51 раз
Поблагодарили: 90 раз

Контроллер для аквариума своими руками, НО чужими мозгам

Сообщение 26rus »

Analog писал(а):
26rus писал(а):Ни фига ничего не продвигается. Инфы полно, а вот практики - "0". Очень много вопросов, в частности, по написанию скэтча.
Конструктивные вопросы??
Основы понятны? Куда какой проводок? Как запустить дисплей? Часы Ds1307?
Куда какой проводок подключить понятно. А вот написать прогу конкретно к UNO R3 - вот в этом и проблема. Не хватает знаний. Часы DS1302. Нужна помощь квалифицированного мегамозга!
26 rus
Ответить

Вернуться в «Самоделкин»