Господа помогите с контроллером!

Витенька
Offline
Зарегистрирован: 03.04.2016

Уважаемые Мастера Arduino может ли кто помочь в создании контроллера на основе такого вот http://arduino.ru/forum/proekty/akvariumnyi-kontrollera-na-2-akvariuma или что то похожее? В наличии есть Arduino Mega 2560, часы DS3231, дисплей Nokia 5110, датчик температуры DS18B20, на подъезде 8 канальный модуль реле. От набора хотелось бы получить так называемый акваконтроллер, крутых наворотов не нужно, нужно семь независимых, настраиваемых по времени таймеров с отображением на дисплее текущего состояния канала, восьмой канал хотелось бы что бы можно было установить вкл/выкл при заданных температурах, если это сильно усложняет программу то хотя бы простое отображение температуры на дисплее. Собрать все в рабочее устройство мозгов хватает а вот с программированием Бог обделил.

vde69
Offline
Зарегистрирован: 10.01.2016

может Вам в этот раздел http://arduino.ru/forumy/ishchu-ispolnitelya ???

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Автор использовал специфическую библиотеку для дисплея - переписывать много придется(всю работу с дисплеем). Так что если неохота возиться или кому то платить за это -  просто закажите нужный дисплей.

Витенька
Offline
Зарегистрирован: 03.04.2016

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

Vad33
Vad33 аватар
Offline
Зарегистрирован: 02.06.2015

Витенька пишет:

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

Контроллер "почти" такой же и даже лучше. (ну может пару-тройку проводов перекинуть в другие контакты)

С дисплеем проблемы в том, что разрешение меньше, поэтому придется ужиматься, но тоже решаемо.

... а на вражеской территории, это где? В Турции? 8-/

bwn
Offline
Зарегистрирован: 25.08.2014

Vad33 пишет:

... а на вражеской территории, это где? В Турции? 8-/

триста двадцать второй батальоны подтягивает)))

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

Vad33 пишет:

... а на вражеской территории, это где? В Турции? 8-/

в Египте в пустыне с российским ПЗРК с надеждой высматривает пассажирский борт с власовским триколором и мечтает об акваримуме.

Витенька
Offline
Зарегистрирован: 03.04.2016

С дисплеем проблемы в том, что разрешение меньше, поэтому придется ужиматься, но тоже решаемо. 

Что нибудь типа вот такое возможно сделать? В принципе помещается всё что мне нужно, номерацию каналов я бы сделал горизонтальную под часами, к сожалению этот контроллер не на ардуине сделан. Вы если возможно подскажите/покажите что и где нужно переделать. http://imglink.ru/show-image.php?id=e83f3fbaf917f54eca0e758fc4e1dd75 

Vad33
Vad33 аватар
Offline
Зарегистрирован: 02.06.2015

Витенька пишет:

Что нибудь типа вот такое возможно сделать? В принципе помещается всё что мне нужно, номерацию каналов я бы сделал горизонтальную под часами, к сожалению этот контроллер не на ардуине сделан. Вы если возможно подскажите/покажите что и где нужно переделать. http://imglink.ru/show-image.php?id=e83f3fbaf917f54eca0e758fc4e1dd75 

Для начала поменять библиотеку дисплея и закоментировать все строки где в него что то выводится.

и добиться чтобы программа скомпилировалась. А потом менять закоментированные строки на новые в соответствии с новой библиотекой и смотреть что получается.

Как то так...

Витенька
Offline
Зарегистрирован: 03.04.2016

Еще такой вопрос, есть ли в природе какие то возможности увидеть загруженный в контроллере скетч, есть программа таймера с таким же дисплеем как у меня но там часы DS3102 а программа в формате hex, возможно ли откорректировать такой скетч?

Vad33
Vad33 аватар
Offline
Зарегистрирован: 02.06.2015

Если сложно отредактировать исходник, то в сторону редактирования прошивки можно даже не смотреть.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Витенька пишет:

Еще такой вопрос, есть ли в природе какие то возможности увидеть загруженный в контроллере скетч, есть программа таймера с таким же дисплеем как у меня но там часы DS3102 а программа в формате hex, возможно ли откорректировать такой скетч?

Нет.

Витенька
Offline
Зарегистрирован: 03.04.2016

Ясно, что дело темное. Спасибо!

Витенька
Offline
Зарегистрирован: 03.04.2016

Здравствуйте Всем! С таймерами разобрался, в наличии уже несколько программ, сейчас больше нужен вот этот, все работает, устраивает пока но часы заметно отстают, за час примерно на 2-3 минуты, за ночь минут на 20-25. Не поможет ли кто советом что где ковырнуть? https://cloud.mail.ru/public/Lo44/aq5UiSgCc

Vad33
Vad33 аватар
Offline
Зарегистрирован: 02.06.2015

Нужно ковырнуть часы. Где то в районе кварца. :)

Витенька
Offline
Зарегистрирован: 03.04.2016

Не, ненужно, там мне барану нужно было вникнуть внимательно в коментарии,  на картинке строка показана где устанаваливается время, не знаю как правильно нужно сделал как понял, сначала загрузил скетч с раскоментированой строкой, время выравнялось по компу, потом закоментировал и снова загрузил, сбой времени шел когда строка оставалась раскоментированая, вот скоро сутки часы идут точно. Во вторых, я не объяснил, извините, часы DS3231, у них кварц встроен в микросхеме. В любом случае Большое спасибо за внимание!

Витенька
Offline
Зарегистрирован: 03.04.2016
Витенька
Offline
Зарегистрирован: 03.04.2016

Здравия Всем Крепкого! Вот снова требуется помощь, имеется скетч так сказать многоканального таймера, скетч проверен, работает. Правда установки времени таймеров нужно производить с компьютера, может ли кто помочь доделать скетч что бы можно было устанавливать время автономно, не используя компьютер. В наличии, Arduino Mega 2560, часы DS3231, термопара DS18B20, 8 канальный модуль реле и Arduino LCD Keypad Shield 1602. В данный момент на дисплей выводится основная информация, время, температура, номера каналов и состояние каналов влючен или отключен, https://cloud.mail.ru/public/7BoK/YFHshXbKW включенный канал обозначается звездочкой, отключенный прочерком. Многого не требуется, только изменять время таймеров с кнопок шильда, в скетче эти значения в строках с 25 до 47 включительно.
 

//Загрузка библиотек 
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <Wire.h>
#include <RTClib.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7 );
int TSensorPin1 = 41;       //Используем цифровой ПОРТ 41 для термодатчика
OneWire ds1(TSensorPin1);

RTC_DS1307 RTC;
//Подключение выходов
const int RelayChn1 = 23;   //Используем цифровой ПОРТ 23 для ПЕРВОГО    канала релейного модуля
const int RelayChn2 = 25;   //Используем цифровой ПОРТ 25 для ВТОРОГО    канала релейного модуля
const int RelayChn3 = 27;   //Используем цифровой ПОРТ 27 для ТРЕТЬЕГО   канала релейного модуля
const int RelayChn4 = 29;   //Используем цифровой ПОРТ 29 для ЧЕТВЕРТОГО канала релейного модуля
const int RelayChn5 = 31;   //Используем цифровой ПОРТ 31 для ПЯТОГО     канала релейного модуля
const int RelayChn6 = 33;   //Используем цифровой ПОРТ 33 для ШЕСТОГО    канала релейного модуля
const int RelayChn7 = 35;   //Используем цифровой ПОРТ 35 для СЕДЬМОГО   канала релейного модуля
const int RelayChn8 = 37;   //Используем цифровой ПОРТ 37 для ВОСЬМОГО   канала релейного модуля
#define mn 60UL
#define hr 3600UL
//----------Настройки времени срабатывания и продолжительности включения реле
//----------Первый канал----------------------------
const long StartRelCn_1 = 5*hr+45*mn;       //Время срабатывания на ПЕРВОМ канале релейного модуля
const long DurationCh_1 = 7*mn;            //ДЛИТЕЛЬНОСТЬ срабатывания реле на ПЕРВОМ канале
//----------Второй канал----------------------------
const long StartRelCn_2 = 5*hr+46*mn;                    
const long DurationCh_2 = 7*mn;                   
//----------Третий канал----------------------------
const long StartRelCn_3 = 5*hr+47*mn;                      
const long DurationCh_3 = 7*mn;                     
//----------Четвертый канал-------------------------
const long StartRelCn_4 = 5*hr+48*mn;                     
const long DurationCh_4 = 7*mn;                     
//----------Пятый канал-----------------------------
const long StartRelCn_5 = 5*hr+49*mn;                
const long DurationCh_5 = 7*mn;                    
//----------Шестой канал----------------------------
const long StartRelCn_6 = 5*hr+50*mn;                    
const long DurationCh_6 = 7*mn;                    
//----------Седьмой КАНАЛ---------------------------
const long StartRelCn_7 = 5*hr+51*mn;                    
const long DurationCh_7 = 7*mn;
//----------Терморегулятор--------------------------   
//----------Восьмой КАНАЛ---------------------------
float t1 = 26.5;                            //Установка температуры для ВОСЬМОГО канала релейного модуля
float tGistrsis1 = 0.7;                     //Уставка гистерезиса - т.е отклонения от темп-ры уставки т.е. в данном случае 0,7 = плюс минус 0,35 градуса
//***************************************************
void setup () {
  Wire.begin();            
  RTC.begin();
//RTC.adjust(DateTime(__DATE__, __TIME__)); // строка только для первой компиляции!!!
  DateTime myTime = RTC.now();

//Первоначальные установки выходов
  pinMode(RelayChn1,OUTPUT);          //Инициализируем порт для 1 канала как ВЫХОД
  pinMode(RelayChn2,OUTPUT);          //Инициализируем порт для 2 канала как ВЫХОД   
  pinMode(RelayChn3,OUTPUT);          //Инициализируем порт для 3 канала как ВЫХОД  
  pinMode(RelayChn4,OUTPUT);          //Инициализируем порт для 4 канала как ВЫХОД
  pinMode(RelayChn5,OUTPUT);          //Инициализируем порт для 5 канала как ВЫХОД   
  pinMode(RelayChn6,OUTPUT);          //Инициализируем порт для 6 канала как ВЫХОД 
  pinMode(RelayChn7,OUTPUT);          //Инициализируем порт для 7 канала как ВЫХОД
  pinMode(RelayChn8,OUTPUT);          //Инициализируем порт для 8 канала как ВЫХОД   
   
  digitalWrite(RelayChn1,LOW);        //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень 
  digitalWrite(RelayChn2,LOW);        //Т.к. используемый релейный модуль с опторазвязкой - управляется инверсной логикой 
  digitalWrite(RelayChn3,LOW);        //   
  digitalWrite(RelayChn4,LOW);        //
  digitalWrite(RelayChn5,LOW);        // 
  digitalWrite(RelayChn6,LOW);        //   
  digitalWrite(RelayChn7,LOW);        //
  digitalWrite(RelayChn8,LOW);        //

lcd.begin(16, 2);
      //Первоначальные надписи на дисплее
lcd.begin(16, 2);
lcd.setCursor(3, 0);
lcd.print("* PRIVET *");
lcd.setCursor(2, 1);
lcd.print("* VITYUSHA *");

delay(5000);
}
//***************************************************
void loop () {
  DateTime myTime = RTC.now();
  uint32_t utime = myTime.unixtime();
  utime %=86400;

lcd.setCursor(0, 0);

lcd.print(String(myTime.hour()));
lcd.print(".");
lcd.print(String(myTime.minute()));
lcd.print(".");
lcd.print(String(myTime.second()));
lcd.print(". ");
delay(200);
//--------релейная настройка начало-----------
//----------------КАНАЛ 1----------------
if ((utime >= StartRelCn_1) && 
   (utime < (StartRelCn_1+DurationCh_1))) 
{
digitalWrite(RelayChn1,LOW);               //Устанавливаем на входе релейного модуля НИЗКИЙ уровень - реле срабатывает

lcd.setCursor(0, 1);     
lcd.print("1*");
}  
else
{
digitalWrite(RelayChn1,HIGH);              //Устанавливаем на входе релейного модуля ВЫСОКИЙ уровень - реле выключается    

lcd.setCursor(0, 1);
lcd.print("1-");  
} 
//-----------------КАНАЛ 2----------------
if ((utime >= StartRelCn_2) && 
   (utime < (StartRelCn_2+DurationCh_2)))
{
digitalWrite(RelayChn2,LOW);                 //Устанавливаем на ВТОРОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает

lcd.setCursor(2, 1);
lcd.print("2*");      
}  
else
{
digitalWrite(RelayChn2,HIGH);              //Устанавливаем на ВТОРОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
lcd.setCursor(2, 1);
lcd.print("2-");   
} 
//-----------------КАНАЛ 3----------------
if ((utime >= StartRelCn_3) && 
   (utime < (StartRelCn_3+DurationCh_3)))
{
digitalWrite(RelayChn3,LOW);               //Устанавливаем на ТРЕТЬЕМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает

lcd.setCursor(4, 1);
lcd.print("3*"); 
}  
else
{
digitalWrite(RelayChn3,HIGH);              //Устанавливаем на ТРЕТЬЕМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается

lcd.setCursor(4, 1);
lcd.print("3-");
} 
//-----------------КАНАЛ 4-----------------
if ((utime >= StartRelCn_4) && 
   (utime < (StartRelCn_4+DurationCh_4)))
{
digitalWrite(RelayChn4,LOW);               //Устанавливаем на ЧЕТВЕРТОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает

lcd.setCursor(6, 1);
lcd.print("4*"); 
}  
else
{
digitalWrite(RelayChn4,HIGH);              //Устанавливаем на ЧЕТВЕРТОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается

lcd.setCursor(6, 1);
lcd.print("4-");
} 
//------------------КАНАЛ 5-----------------
if ((utime >= StartRelCn_5) && 
   (utime < (StartRelCn_5+DurationCh_5)))
{
digitalWrite(RelayChn5,LOW);               //Устанавливаем на ПЯТОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает

lcd.setCursor(8, 1);
lcd.print("5*"); 
}  
else
{
digitalWrite(RelayChn5,HIGH);              //Устанавливаем на ПЯТОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается

lcd.setCursor(8, 1);
lcd.print("5-"); 
} 
//------------------КАНАЛ 6-----------------
if ((utime >= StartRelCn_6) && 
   (utime < (StartRelCn_6+DurationCh_6)))
{
digitalWrite(RelayChn6,LOW);               //Устанавливаем на ШЕСТОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает

lcd.setCursor(10, 1);
lcd.print("6*"); 
}  
else
{
digitalWrite(RelayChn6,HIGH);              //Устанавливаем на ШЕСТОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается

lcd.setCursor(10, 1);
lcd.print("6-");
}
//-------------------КАНАЛ 7----------------
if ((utime >= StartRelCn_7) && 
   (utime < (StartRelCn_7+DurationCh_7)))
{
digitalWrite(RelayChn7,LOW);               //Устанавливаем на СЕДЬМОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает

lcd.setCursor(12, 1);
lcd.print("7*");
}  
else
{
digitalWrite(RelayChn7,HIGH);              //Устанавливаем на СЕДЬМОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается

lcd.setCursor(12, 1);
lcd.print("7-");
}        
//-----КАНАЛ 8 Контроль температуры--------
float temp1 = getTemp1();                  //Читаем температуру с датчика 
       
lcd.setCursor(10, 0);
lcd.print(String(temp1)); 

if (temp1 < t1-tGistrsis1/1)
{
digitalWrite(RelayChn8,LOW);                //Устанавливаем на 8 входе релейного модуля НИЗКИЙ уровень - реле срабатывает

lcd.setCursor(14, 1);
lcd.print("8*");
}     
else if (temp1 > t1+tGistrsis1/1)
{
digitalWrite(RelayChn8,HIGH);               //Устанавливаем на 8 входе релейного модуля ВЫСОКИЙ уровень - реле выключается

lcd.setCursor(14, 1);
lcd.print("8-");
 }
}
//***************************************************
//Функции чтения с датчиков температуры
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 < 9; i++) 
{ 
    data[i] = ds1.read();
}

ds1.reset_search();

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

  float TRead = ((MSB<<8) | LSB); 
  float Temperature = TRead / 16;

return Temperature;
}

 

Vad33
Vad33 аватар
Offline
Зарегистрирован: 02.06.2015

Нужно менять время старта или длительность? Наверно то и другое? И еще и часы иметь возможность устанавливать?
А еще наверно нужно меню многоуровневое чтобы сам процесс отображать?
Всего-ничего... ))

Витенька
Offline
Зарегистрирован: 03.04.2016

Да время старта и длительность что бы устанавливать, а на 8 канале температуру, установка часов ненужна, мне не в лом будет раз в пол года в год подключить нетбук что бы часы выровнять, и то если это понадобится. Vad говорите ваши условия, будем подумать. vik.r.65@mail.ru

Vad33
Vad33 аватар
Offline
Зарегистрирован: 02.06.2015

Если не к спеху то можно здесь потихоньку и самому написать, с консультациями.

"И овцы сыты и деньги целы." )))

vad3333@inbox.ru