На головну сторінку Аквафорум
На головну сторінку




Назад   Аквафорум - форум акваріумістів та тераріумістів > Акваріум та обладнання > "Самоделкин" > Аквариумная автоматика
Аукцион Реєстрація ЧаПи Учасники Календар Нинішні дописи

Примітки

Відповідь
 
Параметри теми Параметри перегляду
Старий 23.07.2013, 13:58  
Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD + Android
Бан за нарушения

Реєстрація: 04.01.2009
Звідки Ви: Полтава
Дописи: 5.494
Надіслати повідомлення для sae74 на ICQ Надіслати повідомлення для sae74 на Skype
 

сказав Дякую: 6.242
сказали Дякую 5.758 раз(и) в 2.264 повідомленні
sae74 sae74 поза форумом 23.07.2013, 13:58
Рейтинг: (14 голосов - 5,00 средняя оценка)

Какое то время назад решил я собрать свой вариант контроллера для аквариума.
На долго затянулся этот процесс.
Идейным вдохновителем стал Pimass,а автором графики и дизайна экранов его девушка Виктория. За что им огромное спасибо. У меня фантазии так и не хватило.

Вот на чем собран контроллер


************************************************** *************************

mega 2560
экран 3,2

переходник между экраном и ардуиной

часы RTC DS1307

Переходник нужно перепаивать 8 проводов.

У меня в теме есть плата этого переходника с часами, делителем напряжения для пш. но собирать еее нужно самому. Детали стоят копейки. Плату можно заказать у китайцев но минимум 10 штук. или у меня есть еще парочка по 5 долларов.
Тогда все аккуратно без соплей и не нужно танцев с бубном.

Это минимум что нужно для запуска программы.
Еще блок питания на 5 вольт, если будут вентиляторы то и на 12 вольт. вот такой на два напряжения 12 и 5 вольт сразу.

Для управления каналами до 24 вольт можно использовать сборку на 4 канала или на 1 канал

Для нагрузки на 220 вольт такие реле, но я использую силовую плату на симисторах.
ПШ усилитель собрать самому, лан модуль стоит 14-17 долларов, но не стоит его брать, у меня реализовано только мониторинг на андроид телефон и дальше развивать нет времени.

Датчик температуры для пресной воды

************************************************** *************************




Контроллер имеет 9 каналов для подключения нагрузки.
На каждый канал до 7 отдельных программ.
Дополнительно канал на работу с фильтром (временное отключение). Канал управления кулером охлаждения LED светильника.
Часы реального времени.


Можно подключить следующие датчики контроля:
4 датчика температуры
4 пш электрода
2 ультразвуковых датчика уровня воды

Каждый датчик можно одновременно использовать для управления несколькими каналами. Например:
1 канал осуществляет подачу СО2 согласно данным с электрода ПШ до уровня 6.00
2 канал следит что бы показания с того же электрода и как только показания достигнут 5.5 начнет работать компрессор и подавать воздух в аквариум.

Что умеет делать контроллер:
1. включать свет по таймеру (рассвет/закат)
2. контроль температуры обогрев/охлаждение
3. контроль СО2 повышение/понижение
4. контроль уровня воды слив/долив
5. подача удо или других жидкостей
6. каждый канал имеет регулировку PWM (шим) уровня,
есть возможность выбирать PWM частоту для всех каналов сразу, следующие значения в Гц: 3000, 2500, 2000, 1500, 1000, 500
7. калибровка дозатора УДО, Подача УДО с точностью 0,5 мл.
8. калибровка ПШ электродов
9. отключение фильтра от 10 до 50 минут
Пункты с 2 по 5 можно ограничить по времени. Например контроль CO2 с 8-00 до 19-00

В планах:
1 Подключить LAN модуль для управлением контроллером
2 Сделать ведение ЛОГ файла данных
3 Сделать управление помпой течения для моря

Необходима помощь в разработке силовой исполнительной платы
Буду рад любой помощи.



Главный экран
Скрытый текст



Пример работы с программы, немного устаревшая версия.


Исходники можно скачать тут
Данная версия работает у меня уже давно и вроде бы стабильно.
Есть некоторые "баги" но их исправляю.
Если я смог сделать, то Вы уж точно сможете.....


Инструкция по сборке
Тут

Для тех кто захочет повторить «MegashildSAE»
Тут

Новое в контроллере: 22 февраля 2015г.
1. Убрал внешний ЕЕПРОМ, все хранится на ардуине.
2. Заменил поплавковые датчики уровня воды 4 шт, на 2 ультразвуковых.
3. Сделал калибровку уровня воды для срабатывания датчика.
4. Добавил экран с отображением состояний выходных каналов в Диаграмме.

Востаннє редагував sae74: 23.02.2016 о 07:17..
Переглядів: 417645
Відповісти з цитуванням
Ці 62 користувач(ів) сказали Дякую sae74 за це повідомлення:
Afra (19.03.2015), Aleks34 (05.05.2015), Alex1970 (02.03.2016), alexhaf (03.06.2018), alex_zm (08.01.2017), AndrewUh (02.04.2017), andreymakaroff (01.04.2016), Asrok (27.10.2016), avk71 (20.12.2015), chikvlad (03.12.2017), DEaD_MOPO3 (27.10.2013), Dimgat (28.07.2017), EVGENIYS (24.07.2013), frozen (22.03.2015), GOREZ (23.07.2013), Heet (18.03.2015), iris_ko (12.03.2016), Koroba (03.04.2015), LVit (24.10.2013), maksim_pw (06.05.2015), maxkor1973 (08.07.2015), Mike Creative (19.03.2015), nanolab (20.04.2015), nikservice (18.09.2013), Opsis (05.05.2014), paradox860 (25.02.2015), pimass (23.07.2013), radiys (24.07.2013), Robby (08.07.2014), Rulik (12.10.2016), Ruslan.Kuchma (16.11.2015), ryajentzev (24.01.2016), s2dd (23.07.2013), Salton (26.07.2013), SeamanOfFortune (06.04.2015), Sem (23.07.2013), Sergey75 (01.03.2014), Sergeyg (24.07.2013), Sergio_Bad (23.04.2015), silversilversilver (19.04.2015), spav777 (23.07.2013), Starcomputer (23.07.2013), TakedaMaru (11.08.2013), Udav4ik (16.10.2015), UraUta (23.07.2013), US5TC (22.03.2015), usaty (14.05.2015), vettan (01.04.2015), viv1976 (24.07.2013), vivat_ko (23.07.2013), VOKA (25.07.2013), vsg (16.11.2013), Zoran_v (19.03.2015), zps (08.01.2017), Вечно Молодой (17.11.2013), Дима11 (21.07.2014), дух святой истины (23.07.2013), Игорь-1 (31.10.2014), КЫСЬ (11.02.2014), Маркес (23.07.2013), Снегозавр (03.03.2015), старик (24.07.2013)
Старий 01.04.2016, 21:29   #1006
Живу я тут
  
 
Реєстрація: 21.07.2009
Звідки Ви: Оболонь
Дописи: 587
сказав Дякую: 86
сказали Дякую 102 раз(и) в 82 повідомленні
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

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

alex_palace поза форумом   Відповісти з цитуванням
Старий 01.04.2016, 21:32   #1007
Бан за нарушения
  
 
Реєстрація: 04.01.2009
Звідки Ви: Полтава
Дописи: 5.494
сказав Дякую: 6.242
сказали Дякую 5.758 раз(и) в 2.264 повідомленні
Надіслати повідомлення для sae74 на ICQ Надіслати повідомлення для sae74 на Skype
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

сейчас дам новый кусок кода


__________________

sae74 поза форумом   Відповісти з цитуванням
Старий 01.04.2016, 21:34   #1008
Бан за нарушения
  
 
Реєстрація: 04.01.2009
Звідки Ви: Полтава
Дописи: 5.494
сказав Дякую: 6.242
сказали Дякую 5.758 раз(и) в 2.264 повідомленні
Надіслати повідомлення для sae74 на ICQ Надіслати повідомлення для sae74 на Skype
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

полностью замените процедуру "void VklVyklKanal(byte StaroeSostoyanie, boolean OnOff_PWM){"

void VklVyklKanal(byte StaroeSostoyanie, boolean OnOff_PWM){
culer();
techenie();
if (filtr >0 && filtr<maxFilterStop) {
TimeFiltra();
digitalWrite(k_Filtr, HIGH);
s_k_10="smoff.raw";
}
else if (filtr ==0){
digitalWrite(k_Filtr, LOW);
s_k_10="smon.raw";
}
else if (filtr >maxFilterStop+9){
digitalWrite(k_Filtr, HIGH);
s_k_10="smoff.raw";
}
boolean UrovenKanala=LOW;
if(OnOff_PWM ==LOW && StaroeSostoyanie>1)UrovenKanala=HIGH;// если выключен шим то устанавливаем режим выхода
switch (NomerKanalaSostoyaniya) {
case 1:

if(OnOff_PWM==LOW){

if(UrovenKanala==HIGH){
K_1_PWM=255;
digitalWrite(k1, LOW);
}
else{
K_1_PWM=0;
digitalWrite(k1, HIGH);
}
s_k_1=icon;
}
else{
pwmWrite(k1, StaroeSostoyanie);
K_1_PWM=StaroeSostoyanie;
// //Serial.println(K_1_PWM);
//s_k_1=String(StaroeSostoyanie);
s_k_1=icon;
}
if (icon != icon1 && nomer_ekrana ==9){
icon1=icon;
myFiles.loadBitmap(3, 171, 33, 33, icon1);
}

break;
case 2:
if(OnOff_PWM==LOW){

if(UrovenKanala==HIGH){
K_2_PWM=255;
digitalWrite(k2, LOW);
}
else{
K_2_PWM=0;
digitalWrite(k2, HIGH);
}
s_k_2 =icon;
// }
}
else{
pwmWrite(k2, StaroeSostoyanie);
K_2_PWM=StaroeSostoyanie;
// s_k_2=String(StaroeSostoyanie);
s_k_2 =icon;
}
if (icon != icon2 && nomer_ekrana ==9){
icon2=icon;
myFiles.loadBitmap(38, 171, 33, 33, icon2);
}

break;
case 3:
if(OnOff_PWM==LOW){

if(UrovenKanala==HIGH){
K_3_PWM=255;
digitalWrite(k3, LOW);
}
else{
K_3_PWM=0;
digitalWrite(k3, HIGH);
}
s_k_3 =icon;
// }
}
else{
pwmWrite(k3, StaroeSostoyanie);
K_3_PWM=StaroeSostoyanie;
// s_k_3=String(StaroeSostoyanie);
s_k_3 =icon;
}
if (icon != icon3 && nomer_ekrana ==9){
icon3=icon;
myFiles.loadBitmap(73, 171, 33, 33, icon3);
}
break;
case 4:
if(OnOff_PWM==LOW){

if(UrovenKanala==HIGH){
K_4_PWM=255;
digitalWrite(k4, LOW);
}
else{
K_4_PWM=0;
digitalWrite(k4, HIGH);
}
s_k_4 =icon;
// }
}
else{
pwmWrite(k4, StaroeSostoyanie);
K_4_PWM=StaroeSostoyanie;
// s_k_4=String(StaroeSostoyanie);
s_k_4 =icon;
}
if (icon != icon4 && nomer_ekrana ==9){
icon4=icon;
myFiles.loadBitmap(108, 171, 33, 33, icon4);
}

break;
case 5:
if(OnOff_PWM==LOW){

if(UrovenKanala==HIGH){
K_5_PWM=255;
digitalWrite(k5, LOW);
}
else{
K_5_PWM=0;
digitalWrite(k5, HIGH);
}
s_k_5 =icon;
// }
}
else{
pwmWrite(k5, StaroeSostoyanie);
K_5_PWM=StaroeSostoyanie;
// s_k_5=String(StaroeSostoyanie);
s_k_5 =icon;
}
if (icon != icon5 && nomer_ekrana ==9){
icon5=icon;
myFiles.loadBitmap(143, 171, 33, 33, icon5);
}

break;
case 6:
if(OnOff_PWM==LOW){

if(UrovenKanala==HIGH){
K_6_PWM=255;
digitalWrite(k6, LOW);
}
else{
K_6_PWM=0;
digitalWrite(k6, HIGH);
}
s_k_6 =icon;
// }
}
else{
pwmWrite(k6, StaroeSostoyanie);
K_6_PWM=StaroeSostoyanie;
// s_k_6=String(StaroeSostoyanie);
s_k_6 =icon;
}
if (icon != icon6 && nomer_ekrana ==9){
icon6=icon;
myFiles.loadBitmap(178, 171, 33, 33, icon6);
}

break;
case 7:
if(OnOff_PWM==LOW){

if(UrovenKanala==HIGH){
K_7_PWM=255;
digitalWrite(k7, LOW);
}
else{
K_7_PWM=0;
digitalWrite(k7, HIGH);
}
s_k_7 =icon;
// }
}
else{
analogWrite(k7, StaroeSostoyanie);
K_7_PWM=StaroeSostoyanie;
//s_k_7=String(StaroeSostoyanie);
s_k_7 =icon;
}
if (icon != icon7 && nomer_ekrana ==9){
icon7=icon;
myFiles.loadBitmap(213, 171, 33, 33, icon7);
}

break;
case 8:
if(OnOff_PWM==LOW){

if(UrovenKanala==HIGH){
K_8_PWM=255;
digitalWrite(k8, LOW);
}
else{
K_8_PWM=0;
digitalWrite(k8, HIGH);
}
s_k_8 =icon;
// }
}
else{
pwmWrite(k8, StaroeSostoyanie);
K_8_PWM=StaroeSostoyanie;
//s_k_8=String(StaroeSostoyanie);
s_k_8 =icon;
}
if (icon != icon8 && nomer_ekrana ==9){
icon8=icon;
myFiles.loadBitmap(248, 171, 33, 33, icon8);
}

break;
case 9:
if(OnOff_PWM==LOW){

if(UrovenKanala==HIGH){
K_9_PWM=255;
digitalWrite(k9, LOW);
}
else{
K_9_PWM=0;
digitalWrite(k9, HIGH);
}
s_k_9 =icon;
// }
}
else{
//pwmWrite(k9, StaroeSostoyanie);
pwmWrite(k9, StaroeSostoyanie);
K_9_PWM=StaroeSostoyanie;
//s_k_9=String(StaroeSostoyanie);
s_k_9 =icon;
}
if (icon != icon9 && nomer_ekrana ==9){
icon9=icon;
myFiles.loadBitmap(283, 171, 33, 33, icon9);
}

break;
default:
break;
}
}


__________________

sae74 поза форумом   Відповісти з цитуванням
cказали "Дякую" sae74 за цей допис:
andreymakaroff (01.04.2016)
Старий 01.04.2016, 22:06   #1009
Придивляюся
  
 
Реєстрація: 01.04.2016
Звідки Ви: Харьков
Дописи: 3
сказав Дякую: 3
сказали Дякую 2 раз(и) в 2 повідомленні
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

Все заработало!!!!
Как все было:
Компилятор ругался на "maxFilterStop"
Заменил на 60
Чтоб получилось вот так:
if (filtr >0 && filtr<60) {
TimeFiltra();
digitalWrite(k_Filtr, HIGH);
s_k_10="smoff.raw";
}
else if (filtr ==0){
digitalWrite(k_Filtr, LOW);
s_k_10="smon.raw";
}
else if (filtr >59){
digitalWrite(k_Filtr, HIGH);
s_k_10="smoff.raw";
}

И все! Все получилось)))
Есть небольшой баг при калибровке УДО - Инверсия осталась.
Но это не существенная проблема.))))
Огромное спасибо автору!!!

andreymakaroff поза форумом   Відповісти з цитуванням
cказали "Дякую" andreymakaroff за цей допис:
sae74 (01.04.2016)
Старий 01.04.2016, 22:28   #1010
Бан за нарушения
  
 
Реєстрація: 04.01.2009
Звідки Ви: Полтава
Дописи: 5.494
сказав Дякую: 6.242
сказали Дякую 5.758 раз(и) в 2.264 повідомленні
Надіслати повідомлення для sae74 на ICQ Надіслати повідомлення для sae74 на Skype
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

andreymakaroff, калибровку удо - посмотрю и тоже скину.


__________________

sae74 поза форумом   Відповісти з цитуванням
Старий 01.04.2016, 22:32   #1011
Бан за нарушения
  
 
Реєстрація: 04.01.2009
Звідки Ви: Полтава
Дописи: 5.494
сказав Дякую: 6.242
сказали Дякую 5.758 раз(и) в 2.264 повідомленні
Надіслати повідомлення для sae74 на ICQ Надіслати повідомлення для sae74 на Skype
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

andreymakaroff, если мне не изменяет память - то на вкладке "KalibrovkaUDO" все LOW заменить на HIGH, и наоборот.

на вкладке полностью замените код "KalibrovkaUDO"

//Старт калибровки УДО

unsigned long start_udo;

void StartKalibrovkiUDO(){
myFiles.loadBitmap(120, 80, 81, 48, "stop.raw");
myGLCD.setColor (VGA_YELLOW);
myGLCD.print (UDO6,CENTER, 200 );
myGLCD.setColor (osnova);
OnOff=1;
kalibrovka_time=millis();
while(OnOff==1){
Zapusk();
if(myTouch.dataAvailable()==1)OnOff=0;
}
StopKalibrovkaUDO();
}
void StopKalibrovkaUDO(){
Zapusk();
kalibrovka_time= millis()-kalibrovka_time;
kalibrovka_time=kalibrovka_time/(obem_udo_kalibrovki/10);
save_kalibrovka_udo(kanal);
myFiles.loadBitmap(120, 80, 81, 48, "start.raw");
myGLCD.setColor (VGA_LIME);
myGLCD.print (UDO4,CENTER, 200 );
myGLCD.setColor (osnova);

}


void Zapusk(){
//Включить помпу!!!!!!!!!!!!!!!!!!!!!!!!!!!!
switch (kanal) {
case 1:
if(OnOff == 1){
digitalWrite(k1, LOW);
}
else{
digitalWrite(k1, HIGH);
}
break;
case 2:
if(OnOff == 1){
digitalWrite(k2, LOW);
}
else{
digitalWrite(k2, HIGH);
}
break;
case 3:
if(OnOff == 1){
digitalWrite(k3, LOW);
}
else{
digitalWrite(k3, HIGH);
}
break;
case 4:
if(OnOff == 1){
digitalWrite(k4, LOW);
}
else{
digitalWrite(k4, HIGH);
}
break;
case 5:
if(OnOff == 1){
digitalWrite(k5, LOW);
}
else{
digitalWrite(k5, HIGH);
}
break;
case 6:
if(OnOff == 1){
digitalWrite(k6, LOW);
}
else{
digitalWrite(k6, HIGH);
}
break;
case 7:
if(OnOff == 1){
digitalWrite(k7, LOW);
}
else{
digitalWrite(k7, HIGH);
}
break;
case 8:
if(OnOff == 1){
digitalWrite(k8, LOW);
}
else{
digitalWrite(k8, HIGH);
}
break;
case 9:
if(OnOff == 1){
digitalWrite(k9, LOW);
}
else{
start_udo= millis()-start_udo;
digitalWrite(k9, HIGH);
}
break;
default:
break;
}
}


void PuskUDO(){
byte PodatiUDO=0;
flag_prioritet_udo = 0;
// запись во внешний еппром
unsigned long Unsigned_long_0;
Unsigned_long_0 =read_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma));
unsigned long Unsigned_long_1;
Unsigned_long_1 =read_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma)+4);
if (Unsigned_long_0 == 0){// расчет времени подачи удо и запись в еепром
int odin_ml = read_kalibrovka_udo(RaschKanal)/10;//Получаем время для канала на 1 мл объема
byte kol_ml = obiem();//количество мл удо
unsigned long time_podachi_udo =(unsigned long)odin_ml*(unsigned long)kol_ml; // сколько милисикунд подавать удо
unsigned long time_kon_udo = millis()+(time_podachi_udo/10);
write_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma), millis()); //время подачи удо
write_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma)+4, time_kon_udo);//во сколько нужно прекратить подачу удо
PodatiUDO=1;
start_udo= millis();
icon ="smudo.raw";
flag_prioritet_udo = 1;
//Serial.print(millis());
//Serial.print(" ");
// Serial.print(time_kon_udo);
//Serial.print(" ");
// Serial.print(time_podachi_udo);
// Serial.print(" ");
// Serial.println((time_podachi_udo/10));
if (( time_kon_udo-millis()) <= 1100){//подаем удо до 1 секунды
//analogWriteKanal=UrovenPWM(PodatiUDO, 2, 1, 2);
kanal=RaschKanal;
OnOff=1;
Zapusk();
while(millis() < time_kon_udo){
PodatiUDO = 0;
// Serial.print("1 ");
//Serial.println(millis());
}
kanal=RaschKanal;
OnOff=0;
Zapusk();
flag_prioritet_udo = 0;
write_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma), 4294967295); //больше не подаем удо
}
}
else if(Unsigned_long_1 > Unsigned_long_0){// нужно подавать удо
long time_podachi_udo;
if (millis()<Unsigned_long_0){//была перегрузка контролерра
Unsigned_long_1 =read_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma)+4);
time_podachi_udo= Unsigned_long_1 - Unsigned_long_0;
}
else{
Unsigned_long_1 =read_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma)+4);
time_podachi_udo=Unsigned_long_1 - millis();
}
if (time_podachi_udo<0)time_podachi_udo=0;
unsigned long time_kon_udo = millis()+time_podachi_udo;
write_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma), millis()); //время подачи удо
write_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma)+4, time_kon_udo);//во сколько нужно прекратить подачу удо
PodatiUDO=1;
icon ="smudo.raw";
flag_prioritet_udo = 1;
//Serial.println(time_podachi_udo);
if (( time_kon_udo-millis()) <= 1100){//подаем удо до 1 секунды
//analogWriteKanal=UrovenPWM(PodatiUDO, 2, 1, 2);
kanal=RaschKanal;
OnOff=1;
Zapusk();
while(millis() < time_kon_udo){
PodatiUDO = 0;
// Serial.print("2 ");
//Serial.println(millis());
}
kanal=RaschKanal;
OnOff=0;
Zapusk();
flag_prioritet_udo = 0;
write_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma), 4294967295); //больше не подаем удо
}

}
else if (Unsigned_long_0 !=4294967295) {//прекартить подачу до новой даты
//Serial.print(millis());
// Serial.print(Unsigned_long_1);Serial.print(" - ");Serial.print(Unsigned_long_0); Serial.print(" = "); Serial.println(Unsigned_long_0-Unsigned_long_1);
write_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma), 4294967295); //больше не подаем удо
PodatiUDO=0;
icon ="smoff.raw";
flag_prioritet_udo = 0;
// Serial.println(" stop ");
// Serial.print(" 4294967295 = ");
//Unsigned_long_0 =read_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma));
//Serial.println(Unsigned_long_0);
}
analogWriteKanal=UrovenPWM(PodatiUDO, 2, 1, 2);
//Serial.print("analogWriteKanal ");
//Serial.println(analogWriteKanal);
}


void UdoTimeStop(unsigned long StopTime, unsigned long TekTime, unsigned long StartTime){
if(TekTime > StopTime || TekTime < StartTime) {// если вышло время выполнения условия обнулить данные подачи удо
icon ="smoff.raw";
unsigned long Unsigned_long_0;
Unsigned_long_0 =read_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma));
if (Unsigned_long_0 !=0){
int adr_vrem = AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma);
write_znach(adr_vrem, 0);//больше не подаем удо
//Serial.println(read_znach(adr_vrem));
//Serial.println(" stop 2");
}
analogWriteKanal=UrovenPWM(0, 2, 1, 2);
}
}

//void TestUDO1(){
// byte Start_UDO=1;
// write_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma), 0);//больше не подаем удо
// //Serial.print(RaschKanal);Serial.print(" ");Serial.println(RaschProgramma);
// while(Start_UDO!=0){
// PuskUDO();
// kanal=RaschKanal;
// Start_UDO=analogWriteKanal;
// OnOff=1;
// Zapusk();
// if(myTouch.dataAvailable()==1)write_znach(AdrHrane nieVneshEeprom_UDO(RaschKanal, RaschProgramma), 4294967295);//больше не подаем удо;
// }
// // Serial.print(RaschKanal);Serial.print(" ");Serial.println(RaschProgramma);
// OnOff=0;
// Zapusk();
// write_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma), 4294967295);//больше не подаем удо
//}



void TestUDO(){
unsigned long Unsigned_long_0;
Unsigned_long_0 =0;//read_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma));
unsigned long Unsigned_long_1;
Unsigned_long_1 =read_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma)+4);
if (Unsigned_long_0 == 0){// расчет времени подачи удо и запись в еепром
int odin_ml = read_kalibrovka_udo(RaschKanal)/10;//Получаем время для канала на 1 мл объема
byte kol_ml = obiem();//количество мл удо
unsigned long time_podachi_udo =(unsigned long)odin_ml*(unsigned long)kol_ml; // сколько милисикунд подавать удо
unsigned long time_kon_udo = millis()+(time_podachi_udo/10);
// if (( time_kon_udo-millis()) <= 1100){//подаем удо до 1 секунды
//analogWriteKanal=UrovenPWM(PodatiUDO, 2, 1, 2);
kanal=RaschKanal;
OnOff=1;
Zapusk();
while(millis() < time_kon_udo){
//PodatiUDO = 0;
if(myTouch.dataAvailable()==1)time_kon_udo = 0;//больше не подаем удо;
// Serial.print("time_kon_udo ");
// Serial.print(time_kon_udo);
// Serial.print("millis() ");
// Serial.println(millis());
}
kanal=RaschKanal;
OnOff=0;
Zapusk();
flag_prioritet_udo = 0;
write_znach(AdrHranenieVneshEeprom_UDO(RaschKanal, RaschProgramma), 4294967295); //больше не подаем удо
delay(100);
// }

}
}


__________________

sae74 поза форумом   Відповісти з цитуванням
Старий 01.04.2016, 23:28   #1012
Живу я тут
  
 
Аватар для Сергій М
 
Реєстрація: 31.12.2014
Звідки Ви: Львов
Дописи: 1.421
сказав Дякую: 278
сказали Дякую 830 раз(и) в 533 повідомленні
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

Именно поэтому я и заказал модуль-реле с триггером и теперь его можно использовать в любом проекте, просто переставляя перемычки.
Возможная аварийная ситуация и заставила над этим задуматься, так как бесконтрольная подача УДО убила бы акву.
Модуль - http://ru.aliexpress.com/item/12V-8-...b-967b6c409614

Сергій М поза форумом   Відповісти з цитуванням
cказали "Дякую" Сергій М за цей допис:
sae74 (01.04.2016)
Старий 02.04.2016, 08:22   #1013
Бан за нарушения
  
 
Реєстрація: 04.01.2009
Звідки Ви: Полтава
Дописи: 5.494
сказав Дякую: 6.242
сказали Дякую 5.758 раз(и) в 2.264 повідомленні
Надіслати повідомлення для sae74 на ICQ Надіслати повідомлення для sae74 на Skype
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

На всеобщее тестирование выложил новую версию контроллера.
Тут скачать

Новые архивы начинаются с (2016)........rar

Пробуйте, тестируйте, пишите.


__________________

sae74 поза форумом   Відповісти з цитуванням
Старий 02.04.2016, 09:27   #1014
Живу я тут
  
 
Реєстрація: 21.07.2009
Звідки Ви: Оболонь
Дописи: 587
сказав Дякую: 86
сказали Дякую 102 раз(и) в 82 повідомленні
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

на 1.6.8 даже без правки скомпилировалось отлично! Т.к бутер на работе то залить пока не могу
несколько глупых вопросов
1 при отсутствии датчиков PH можно подачу повесить на реле по таймеру - правильно понял? (а аэрацию на нормальнозамкнутый контакт этого реле (как-то релюшек маловато заказал
2 светики К З С и Б повешу на ШИМ, уровнями по каналам смогу подогнать нужный цвет (а заменой картинок на карте с цифровых на буквенные еще и подписать их) но вот или туплю или как синхронизировать эти каналы? (таки поигрался чуть с ШИМами и приблизительно вырисовал себе ооочень красивую и надеюсь таки полезную цветовую картину. Утро с возрастающего синего через переход зеленого в красный и увеличение яркости белого. Когда белый 100% остальные 3 цвета выходят в 100%. (Сейчас у меня свет 4-2-4-2-4 т.е свет по 4 часа с перерывами и таки правду вычитал что при таких перерывах фотосинтез максимальный т.к при 12 часах подряд пузырять под конец почти переставало.. но мож это частный случай.) вместо выключения света в перерывах белый уходит в 20-30% а цвета уходят в синевато-красный (попробовать эмулировать тучи ) ну и на ночь синевато-белый 5-10% ) с уходом к желтому. (на словах описать трудно с работы выложу для критики цветографик отрисовал. Так вот вопрос синхронизации. В Олеговском (который для меня лично еще более избыточен Вашего) для этого графики по каналам, тут я так понял надо добавлять несколько программ на каждый канал и играться с ШИМ ?
ЗЫ - не на столько еще к сожалению еще освоил ардуиностроение но вдруг это не слишком сложно... Добавить +1 переменную которая 0 при ресете (очищенном ЕЕПРОМ) и 1 при сохраненных настройках и отдельной процедурой дать ЯВНОЕ из кода задание переменных, т.е вместо сидеть 2 часа с нуля настраивать задать предварительные настройки тех-же таймеров и подачи УДО итд...и через меню их уже корректировать по мере надобности. Логично?
3 вентилятор охлаждения ЛЕД ов вижу, а вентилятор охлаждения воды? или через шим, по если т ниже 25 (к примеру) то вкл реле обогревателя выкл шим канала Н на котором вентилятор и если выше то наоборот?
ЗЫ - сорри за многобукафф - до 3 ночи отбивал ДДоС удаленно
__________________
реанимация компьютеров, серверов, сетей, телефонов-планшетов.

alex_palace поза форумом   Відповісти з цитуванням
Старий 02.04.2016, 09:32   #1015
Бан за нарушения
  
 
Реєстрація: 04.01.2009
Звідки Ви: Полтава
Дописи: 5.494
сказав Дякую: 6.242
сказали Дякую 5.758 раз(и) в 2.264 повідомленні
Надіслати повідомлення для sae74 на ICQ Надіслати повідомлення для sae74 на Skype
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

alex_palace,
1 - да можно.
2 - да нужно по времени разбивать уровни.График у меня тоже отображает. Там есть новая иконка для этого.
3 - для охлаждения воды используйте любой из 9 каналов. там есть выбор режимов работы.


__________________

sae74 поза форумом   Відповісти з цитуванням
cказали "Дякую" sae74 за цей допис:
alex_palace (02.04.2016)
Старий 02.04.2016, 16:15   #1016
Живу я тут
  
 
Реєстрація: 21.07.2009
Звідки Ви: Оболонь
Дописи: 587
сказав Дякую: 86
сказали Дякую 102 раз(и) в 82 повідомленні
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

а по тому что ЗЫ - сильно сложно? Чисто в теории понял куда конкретно сохраняются все настройки и +- адресацию их но вот склепать из этого всего процедуру пока нет (очень осложняет жизнь остутствие нормального эмулятора .. в протеусе 8 вроде как уже и ардуинка и даже ИДЕ к ней но к примеру экрана с тачем так и не появилось... да и ардуина в нем еще сырая - внешние библиотеки поддерживат не хочет а на железе туда-сюда гонять при отсутствии ясного понимания это таки слишком долго...
сам принцип понравился вот тут
Скрытый текст
http://www.aquaforum.ua/showpost.php...6&postcount=37
Если сюда добавить
if reset = 0 then
{ timerUdo1vkl = .....
Ресет по логике ж вычищает ЕЕПРОМ, значит и 1й байт там станет нулем. Ну а при заполнении настройками нулем уже быть перестанет - логично?
Не пинайте сильно ногами т.к вообще учился на Бейсике, потом уже сам осваивал паскаль, до С дошло но т.к на то время более практично было админить то и забросил и теперь единственное программирование это скрипты на Bash

ЗЫ ЗЫ - таки буду морально решаться на покупку хотя-бы одного ПШ датчика
в
__________________
реанимация компьютеров, серверов, сетей, телефонов-планшетов.


Востаннє редагував alex_palace: 02.04.2016 о 16:25..
alex_palace поза форумом   Відповісти з цитуванням
Старий 02.04.2016, 18:31   #1017
Живу я тут
  
 
Реєстрація: 11.12.2011
Звідки Ви: Москва
Дописи: 112
сказав Дякую: 14
сказали Дякую 15 раз(и) в 13 повідомленні
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

Цитата:
Допис від alex_palace Переглянути допис
Ресет по логике ж вычищает ЕЕПРОМ...
Не знаю как в ARDUINO, но вообще-то Reset EEPROM не обнуляет. А то нет никакого смысла туда что-то сохранять.

AndrewUh поза форумом   Відповісти з цитуванням
cказали "Дякую" AndrewUh за цей допис:
sae74 (02.04.2016)
Старий 02.04.2016, 18:58   #1018
Живу я тут
  
 
Реєстрація: 21.07.2009
Звідки Ви: Оболонь
Дописи: 587
сказав Дякую: 86
сказали Дякую 102 раз(и) в 82 повідомленні
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

так смысл ресета (не кнопки ресет на ардуинке для перезапуска а ресет в настройках скетча) как раз и в вычистке сохраненных туда настроек
Логично?
__________________
реанимация компьютеров, серверов, сетей, телефонов-планшетов.

alex_palace поза форумом   Відповісти з цитуванням
Старий 02.04.2016, 19:13   #1019
Бан за нарушения
  
 
Реєстрація: 04.01.2009
Звідки Ви: Полтава
Дописи: 5.494
сказав Дякую: 6.242
сказали Дякую 5.758 раз(и) в 2.264 повідомленні
Надіслати повідомлення для sae74 на ICQ Надіслати повідомлення для sae74 на Skype
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

eeprom можно очистить только программно.

alex_palace, если честно, то из Вашего большого сообщения не понял в чем именно вопрос.


__________________

sae74 поза форумом   Відповісти з цитуванням
Старий 02.04.2016, 19:26   #1020
Живу я тут
  
 
Реєстрація: 21.07.2009
Звідки Ви: Оболонь
Дописи: 587
сказав Дякую: 86
сказали Дякую 102 раз(и) в 82 повідомленні
Re: Контроллер на базе Arduino Mega 2560 + 3.2" TFT Touch LCD ===www.aquaforum.ua===

я про програмно и говорю.
вопрос сложно ли при первом запуске скетча после сброса выставлять уже готовые и забитые вручную данные для таймеров ? т.е предварительно забить в код и сразу при первом старте уже настроенный контроллер ( вопрос к чему.. у меня считай 4 канала света и на каждом минимум 8 изменений яркости за день. 4 дозатора с подачей каждые 2 часа (в идеале)
а программа для таймеров сейчас 6 раз меняется за год ( не считая перевода времени.)
Если сложно и кроме меня никому не надо то со временем разберусь сам
__________________
реанимация компьютеров, серверов, сетей, телефонов-планшетов.

alex_palace поза форумом   Відповісти з цитуванням


Share/Bookmark

Відповідь


Тут присутні: 1 (учасників - 0 , гостей - 1)
 

Ваші права у розділі
Ви не можете створювати теми
Ви не можете писати дописи
Ви не можете долучати файли
Ви не можете редагувати дописи

BB-код є Увімк.
Усмішки Увімк.
[IMG] код Увімк.
HTML код Вимк.

Швидкий перехід


Часовий пояс GMT +3. Поточний час: 13:11.


vBulletin 3.8.7 ; Copyright © 2000-2025 Jelsoft Enterprises Limited
Переклад: © Віталій Стопчанський, 2004-2010
(с)Бешлега Олександр Анатолійович, 2002-2025. Використання матеріалів сайту без посилання на джерело заборонено.
Дякуємо за ліцензійну версію форума компанію Барбус, представника торгової марки Sera в Україні.


no new posts