Господа помогите с контроллером!
- Войдите на сайт для отправки комментариев
Уважаемые Мастера Arduino может ли кто помочь в создании контроллера на основе такого вот http://arduino.ru/forum/proekty/akvariumnyi-kontrollera-na-2-akvariuma или что то похожее? В наличии есть Arduino Mega 2560, часы DS3231, дисплей Nokia 5110, датчик температуры DS18B20, на подъезде 8 канальный модуль реле. От набора хотелось бы получить так называемый акваконтроллер, крутых наворотов не нужно, нужно семь независимых, настраиваемых по времени таймеров с отображением на дисплее текущего состояния канала, восьмой канал хотелось бы что бы можно было установить вкл/выкл при заданных температурах, если это сильно усложняет программу то хотя бы простое отображение температуры на дисплее. Собрать все в рабочее устройство мозгов хватает а вот с программированием Бог обделил.
может Вам в этот раздел http://arduino.ru/forumy/ishchu-ispolnitelya ???
Автор использовал специфическую библиотеку для дисплея - переписывать много придется(всю работу с дисплеем). Так что если неохота возиться или кому то платить за это - просто закажите нужный дисплей.
Думал и о таком варианте как заказывать дисплей, но в той программе и контроллер не такой как у меня, не заказывать же и контроллер. Повозиться я бы и рад для самообучения но если бы носом ткнули где и что переписывать, маленькие тренировки делал для себя на примерах тестовых программ типа Heiio World, но все что смог изменить в тексте буквы и перемещать надпись по дисплею, это пока все навыки программирования. Заказать программу с нуля тоже как бы можно было но действительно и дорого очень но в основном проблемма не в деньгах, на наших форумах отдельно программу писать никто нехочет даже и за деньги, а может дело и не в хотении совсем. Заказть на этом форуме можно было бы но могут быть проблеммы с оплатой, я нахожусь на так называемой вражеской территории.
Думал и о таком варианте как заказывать дисплей, но в той программе и контроллер не такой как у меня, не заказывать же и контроллер. Повозиться я бы и рад для самообучения но если бы носом ткнули где и что переписывать, маленькие тренировки делал для себя на примерах тестовых программ типа Heiio World, но все что смог изменить в тексте буквы и перемещать надпись по дисплею, это пока все навыки программирования. Заказать программу с нуля тоже как бы можно было но действительно и дорого очень но в основном проблемма не в деньгах, на наших форумах отдельно программу писать никто нехочет даже и за деньги, а может дело и не в хотении совсем. Заказть на этом форуме можно было бы но могут быть проблеммы с оплатой, я нахожусь на так называемой вражеской территории.
Контроллер "почти" такой же и даже лучше. (ну может пару-тройку проводов перекинуть в другие контакты)
С дисплеем проблемы в том, что разрешение меньше, поэтому придется ужиматься, но тоже решаемо.
... а на вражеской территории, это где? В Турции? 8-/
... а на вражеской территории, это где? В Турции? 8-/
триста двадцать второй батальоны подтягивает)))
... а на вражеской территории, это где? В Турции? 8-/
в Египте в пустыне с российским ПЗРК с надеждой высматривает пассажирский борт с власовским триколором и мечтает об акваримуме.
С дисплеем проблемы в том, что разрешение меньше, поэтому придется ужиматься, но тоже решаемо.
Что нибудь типа вот такое возможно сделать? В принципе помещается всё что мне нужно, номерацию каналов я бы сделал горизонтальную под часами, к сожалению этот контроллер не на ардуине сделан. Вы если возможно подскажите/покажите что и где нужно переделать. http://imglink.ru/show-image.php?id=e83f3fbaf917f54eca0e758fc4e1dd75
Что нибудь типа вот такое возможно сделать? В принципе помещается всё что мне нужно, номерацию каналов я бы сделал горизонтальную под часами, к сожалению этот контроллер не на ардуине сделан. Вы если возможно подскажите/покажите что и где нужно переделать. http://imglink.ru/show-image.php?id=e83f3fbaf917f54eca0e758fc4e1dd75
Для начала поменять библиотеку дисплея и закоментировать все строки где в него что то выводится.
и добиться чтобы программа скомпилировалась. А потом менять закоментированные строки на новые в соответствии с новой библиотекой и смотреть что получается.
Как то так...
Еще такой вопрос, есть ли в природе какие то возможности увидеть загруженный в контроллере скетч, есть программа таймера с таким же дисплеем как у меня но там часы DS3102 а программа в формате hex, возможно ли откорректировать такой скетч?
Если сложно отредактировать исходник, то в сторону редактирования прошивки можно даже не смотреть.
Еще такой вопрос, есть ли в природе какие то возможности увидеть загруженный в контроллере скетч, есть программа таймера с таким же дисплеем как у меня но там часы DS3102 а программа в формате hex, возможно ли откорректировать такой скетч?
Нет.
Ясно, что дело темное. Спасибо!
Здравствуйте Всем! С таймерами разобрался, в наличии уже несколько программ, сейчас больше нужен вот этот, все работает, устраивает пока но часы заметно отстают, за час примерно на 2-3 минуты, за ночь минут на 20-25. Не поможет ли кто советом что где ковырнуть? https://cloud.mail.ru/public/Lo44/aq5UiSgCc
Нужно ковырнуть часы. Где то в районе кварца. :)
Не, ненужно, там мне барану нужно было вникнуть внимательно в коментарии, на картинке строка показана где устанаваливается время, не знаю как правильно нужно сделал как понял, сначала загрузил скетч с раскоментированой строкой, время выравнялось по компу, потом закоментировал и снова загрузил, сбой времени шел когда строка оставалась раскоментированая, вот скоро сутки часы идут точно. Во вторых, я не объяснил, извините, часы DS3231, у них кварц встроен в микросхеме. В любом случае Большое спасибо за внимание!
http://imglink.ru/show-image.php?id=95aab1f648ae4749ebeff2f1f95e28c6
Здравия Всем Крепкого! Вот снова требуется помощь, имеется скетч так сказать многоканального таймера, скетч проверен, работает. Правда установки времени таймеров нужно производить с компьютера, может ли кто помочь доделать скетч что бы можно было устанавливать время автономно, не используя компьютер. В наличии, 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; }Нужно менять время старта или длительность? Наверно то и другое? И еще и часы иметь возможность устанавливать?
А еще наверно нужно меню многоуровневое чтобы сам процесс отображать?
Всего-ничего... ))
Да время старта и длительность что бы устанавливать, а на 8 канале температуру, установка часов ненужна, мне не в лом будет раз в пол года в год подключить нетбук что бы часы выровнять, и то если это понадобится. Vad говорите ваши условия, будем подумать. vik.r.65@mail.ru
Если не к спеху то можно здесь потихоньку и самому написать, с консультациями.
"И овцы сыты и деньги целы." )))
vad3333@inbox.ru