![]() |
|
Здравствуйте, гость ( Вход | Регистрация )
![]() | ![]() | ![]() |
![]() |
|
![]()
Сообщение
#1
|
|||
![]() Активный аквариумист ![]() ![]() ![]() Группа: Журналисты Сообщений: 260 Регистрация: 21.8.2008 Из: Днепр ![]() Благодарности: 694 раз(а) ![]() |
|
||
![]()
Сообщение
#401
|
|
Новенький на форуме ![]() Группа: Присматриваюсь Сообщений: 13 Регистрация: 20.3.2014 Из: Регенсбург ![]() Благодарности: 0 раз(а) ![]() |
Добрый день.
Не могли бы вы помочь в написании скетча. Я к сожалению в программировании полный ноль. Что имеется: Arduino Mega 2560 LCD Keypad Shield 1602 c 5-ю кропками Блок реле (двухканальное) Часы DS1307 Tiny RTC I2C module, 24C32 EEPROM Датчик температуры DS18B20 LCD Keypad Shield подключен к пинам 4,5,6,7,8,9, кнопки к А0, подсветка к 10 пину. Датчик температуры DS18B20 подключен к пину 53. Блок реле к пинам 40,41 К пинам 3,11,12 подключены LED через мосфеты. Значения для кнопок: ничего не нажато - 1023 UP - 142 DOWN - 328 LEFT - 504 RIGHT - 0 SELECT - 741 Что требуется: 1). Реле будут включать обогрев (назовём Н1 и Н2), т.е. Н1 управляется по 40 пину, а Н2 - по 41. При температуре 28 включаются оба нагревателя. При достижении температуры 28,3 нагреватель Н1 отключается. При 28,5 отключается Н2. 2). LED подсветка (назовём LW – pin3, LR – pin11 и LB – pin12) должна включаться и выключаться по времени. Т.е. например в 17:00 плавно в течении 5 минут включается LW и LR, далее в 21:55 начинает плавно гаснуть (5 минут), а в это время плавно включается LB. Затем в 23:00 плавно гаснет (5 минут) LB. 3). Меню Главный экран: Т=28,4° 14:53 Н1-Off H2-On т.е. отображается текущая температура, текущее время и состояние нагревателей. Следующий экран: Н1: On-28° Off-28,3° т.е. возможность регулирования температуры включения и выключения нагревателя Н1. Следующий экран: H2: On-28° Off-28,5° т.е. возможность регулирования температуры включения и выключения нагревателя Н2. Следующий экран: LW+LR: On-17:00 Off-21:55 т.е. возможность регулирования времени включения и выключения света LW и LR. Следующий экран: LB: On-21:55 Off-23:00 т.е. возможность регулирования времени включения и выключения света LB. Переключение между экранами - кнопками Left и Right. Выбор - кнопкой Select. Установка – кнопками Up и Down. Ещё нужна на главном экране возможность включения и выключения света LW и LR кнопкой, независимо от времени. А также возможность включения и выключения нагревателя Н1 кнопкой, независимо от температуры. И ещё возможность установки часов. Ещё нужна возможность регулировки яркости света для каждого канала в самом скетче, т.к. ещё сам не знаю будет ли свет гореть на 100% или хватит на 80%. Ну вроде всё, вроде ничего не забыл. Я конечно понимаю, что это наглость с моей стороны, и что у вас наверняка нету времени заниматься моими проблемами, но мне просто не к кому обратиться. Заранее благодарен, и надеюсь на ваше понимание и помощь. С уважением. |
![]() ![]()
Сообщение
#402
|
||
![]() Активный аквариумист ![]() ![]() ![]() Группа: Партнёры Сообщений: 291 Регистрация: 23.4.2012 Из: Сочи ![]() Благодарности: 281 раз(а) ![]() |
Вот и на моей улице праздник. Доехали диоды, месяц пролежав на китайской таможне ![]() ![]() Сегодняшний вечер потратил на разбор полетов с ардуиной и 6ти канальной сборкой от ледсидуино. появились вопросы. на PWM 127 и ниже двигатель кулера и драйвер начинают выть. Понизил частоту шим согласно Код void setup() { // nothing happens in setup TCCR3B = TCCR3B & 0b11111000 | 0x05; } Перестал выть драйвер, но теперь на низких значениях PWM вентиль рычит как трактор ![]() Вопрос: как правильно регулировать частоту вращения вентиля? Может какой кондер поставить для сглаживания ? Не позаботился о безопасности. Читать Вопрос по питанию. Драйвер 6 каналов LedSeeDuino, питается от компьютерного бп 12в 6а. Есть кластер из 4 диодов по 3-3.6в 750ма. Могу я подключить 2 такой кластер как на рисунке в паралель? Сообщение отредактировал user - 22.3.2014, 18:09 |
|
![]()
Сообщение
#403
|
|
Новенький на форуме ![]() Группа: Присматриваюсь Сообщений: 13 Регистрация: 20.3.2014 Из: Регенсбург ![]() Благодарности: 0 раз(а) ![]() |
Подскажите где ошибка.
Нужно чтобы свет плавно включался void loop() { hours = RTC.get(DS1307_HR,true); minutes = RTC.get(DS1307_MIN,false); lcd.setCursor(0,0); lcd.print(hours); // печатаем час lcd.print(":"); // печатаем разделитель lcd.print(minutes); // печатаем минуты lcd.print(":"); // печатаем разделитель lcd.print(RTC.get(DS1307_SEC,false:); // печатаем секунды lcd.setCursor(0,2); On_Time=(13*60+14); Off_Time=(13*60+15); Curent_Time=RTC.get(DS1307_HR,true)*60+RTC.get(DS1307_MIN,false);//текущее время if(On_Time < Off_Time) //Проверка, таймер в течении одних суток? { if (Curent_Time >= On_Time && Curent_Time <= Off_Time) { for(int fadeValue = 0; fadeValue <= 255; fadeValue +=3) { analogWrite(LR, fadeValue); } } } } |
![]()
Сообщение
#404
|
|
![]() Активный аквариумист ![]() ![]() ![]() Группа: Партнёры Сообщений: 291 Регистрация: 23.4.2012 Из: Сочи ![]() Благодарности: 281 раз(а) ![]() |
kirex, после
Код analogWrite(LR, fadeValue); в 500 или 1000мс паузу воткни. яб поставил 500 и вместо +=3 поставил +=1 Сообщение отредактировал user - 23.3.2014, 15:20 |
![]()
Сообщение
#405
|
|
Новенький на форуме ![]() Группа: Присматриваюсь Сообщений: 13 Регистрация: 20.3.2014 Из: Регенсбург ![]() Благодарности: 0 раз(а) ![]() |
kirex, после Код analogWrite(LR, fadeValue); в 500 или 1000мс паузу воткни. яб поставил 500 и вместо +=3 поставил +=1 Где-то ошибка Вот весь скетч: #include <Wire.h> // For some strange reasons, Wire.h must be included here #include <DS1307.h> #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int hours; int minutes; //блок реле int LW = 3; int LR = 11; int LB = 12; int On_Time =0; int Off_Time =0; int Curent_Time =0; void setup() { lcd.begin(16, 2); Serial.begin(9600); pinMode(LW, OUTPUT); pinMode(LR, OUTPUT); pinMode(LB, OUTPUT); } void loop() { hours = RTC.get(DS1307_HR,true); minutes = RTC.get(DS1307_MIN,false); lcd.setCursor(0,0); lcd.print(hours); // печатаем час lcd.print(":"); // печатаем разделитель lcd.print(minutes); // печатаем минуты lcd.print(":"); // печатаем разделитель lcd.print(RTC.get(DS1307_SEC,false:); // печатаем секунды lcd.setCursor(0,2); On_Time=(14*60+49); Off_Time=(15*60+15); Curent_Time=RTC.get(DS1307_HR,true)*60+RTC.get(DS1307_MIN,false);//текущее время if(On_Time < Off_Time) //Проверка, таймер в течении одних суток? { if (Curent_Time >= On_Time && Curent_Time <= Off_Time) { for(int fadeValue = 0; fadeValue <= 255; fadeValue +=3) { analogWrite(LR, fadeValue); delay(300); } else for(int fadeValue = 255; fadeValue >= 0; fadeValue +=3) { analogWrite(LR, fadeValue); delay(300) } } else // если сутки сменились { if ((Curent_Time >= On_Time && Curent_Time <= 2820)||(Curent_Time >= 0 && Curent_Time <= Off_Time:)//2820=24часа*60 { for(int fadeValue = 0; fadeValue <= 255; fadeValue +=3) { analogWrite(LR, fadeValue); delay(300); } else for(int fadeValue = 255; fadeValue >= 0; fadeValue +=3) { analogWrite(LR, fadeValue); delay(300) } } } } } Сообщение отредактировал kirex - 23.3.2014, 16:01 |
![]()
Сообщение
#406
|
|
![]() Активный аквариумист ![]() ![]() ![]() Группа: Партнёры Сообщений: 291 Регистрация: 23.4.2012 Из: Сочи ![]() Благодарности: 281 раз(а) ![]() |
должно загораться. паузу 50 поставь
дай весь код. Сообщение отредактировал user - 23.3.2014, 15:58 |
![]()
Сообщение
#407
|
|
Новенький на форуме ![]() Группа: Присматриваюсь Сообщений: 13 Регистрация: 20.3.2014 Из: Регенсбург ![]() Благодарности: 0 раз(а) ![]() |
И ещё пока идёт пауза, часы на экране зависают.
|
![]()
Сообщение
#408
|
|
![]() Активный аквариумист ![]() ![]() ![]() Группа: Партнёры Сообщений: 291 Регистрация: 23.4.2012 Из: Сочи ![]() Благодарности: 281 раз(а) ![]() |
из-за добавлений пауз перестало загораться?
|
![]()
Сообщение
#409
|
|
Новенький на форуме ![]() Группа: Присматриваюсь Сообщений: 13 Регистрация: 20.3.2014 Из: Регенсбург ![]() Благодарности: 0 раз(а) ![]() |
|
![]()
Сообщение
#410
|
|
![]() Активный аквариумист ![]() ![]() ![]() Группа: Партнёры Сообщений: 291 Регистрация: 23.4.2012 Из: Сочи ![]() Благодарности: 281 раз(а) ![]() |
|
![]()
Сообщение
#411
|
|
![]() Активный аквариумист ![]() ![]() ![]() Группа: Партнёры Сообщений: 291 Регистрация: 23.4.2012 Из: Сочи ![]() Благодарности: 281 раз(а) ![]() |
скайп есть?
|
![]()
Сообщение
#412
|
|
Новенький на форуме ![]() Группа: Присматриваюсь Сообщений: 13 Регистрация: 20.3.2014 Из: Регенсбург ![]() Благодарности: 0 раз(а) ![]() |
скайп есть? Скайп есть, только я в программировании почти полный ноль. Вообщето надо в этот код вставить плавное включение и выключение света в заданное время: Код // Библиотеки необходимые для работы модуля часов
#include "Wire.h" #include "DS1307new.h" // библиотека экрана #include "LiquidCrystal.h" LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup(){ Serial.begin(9600); lcd.begin(16, 2); // запускаем библиотеку экрана } void loop(){ analogWrite(10, 100); RTC.getTime();// получить время от модуля printTimeToSerial(); // выводим полученное время в лог printTimeToLCD();; // выводи время на экран lcd.setCursor(0, 1); // Set the cursor to column 0, line 1 doSerialCommands(); // слушаем и выполняем команды из Serial } // Выводит текущие время в Serial void printTimeToSerial(){ byte static prevSecond=0; // тут будем хранить, сколько секунд было при прошлом отчете if(RTC.second!=prevSecond){ // что-то делаем только если секунды поменялись Serial.print(RTC.hour); // часы Serial.print(":"); // разделитель Serial.print(RTC.minute); Serial.print(":"); Serial.println(RTC.second); prevSecond=RTC.second; // запомнили когда мы "отчитались" } } // Выводит текущие время на LCD void printTimeToLCD(){ byte static prevSecond=0; // тут будем хранить, сколько секунд было при выводе if(RTC.second!=prevSecond){ // что-то делаем только если секунды поменялись lcd.setCursor(11,0); // устанавливаем позицию курсора if(RTC.hour<10)lcd.print(" "); lcd.print(RTC.hour); // часы lcd.print( (RTC.second % 2)?" ":":"); // разделитель моргает if(RTC.minute<10)lcd.print(0); // лидирующий ноль, если нужен lcd.print(RTC.minute); prevSecond=RTC.second; // запомнили когда мы "отчитались" } } // устанавливает часы модуля на какое-то заранее определенное время void setSomeTime(){ RTC.stopClock();// останавливаем часы RTC.fillByHMS(19,15,0); // "подкручиваем стрелки на 19:15:00 RTC.setTime();// отправляем "подкрученное время" самому модулю RTC.startClock(); // и опять запускаем часы } // слушает из Serial команды и выполняет их. Каждая команда - один символ. // доступны команды: // s - установить время указанное в функции setSomeTime() void doSerialCommands(){ if(Serial.available()){ // что-нибудь пришло? char ch=Serial.read(); // читаем что пришло switch(ch){ case 's': // команда установки времени setSomeTime(); // устанавливаем break; // тут, в будущем, мы можем добавлять дополнительные команды default:; // на неизвестную команду - ничего не делаем }; } } |
![]()
Сообщение
#413
|
|
![]() Активный аквариумист ![]() ![]() ![]() Группа: Партнёры Сообщений: 291 Регистрация: 23.4.2012 Из: Сочи ![]() Благодарности: 281 раз(а) ![]() |
Вот пример
у меня он работает Код for(int fadeValue = 0; fadeValue <= 255; fadeValue +=1) { // sets the value (range from 0 to 255): analogWrite(ledPin, fadeValue); // wait to see the dimming effect delay(50); } delay(5000); // fade out from max to min : for(int fadeValue = 255; fadeValue >= 0; fadeValue -=1) { // sets the value (range from 0 to 255): analogWrite(ledPin, fadeValue); // wait for see the dimming effect delay(50); } delay(5000); |
![]()
Сообщение
#414
|
|
Новенький на форуме ![]() Группа: Присматриваюсь Сообщений: 13 Регистрация: 20.3.2014 Из: Регенсбург ![]() Благодарности: 0 раз(а) ![]() |
Вот пример у меня он работает Код for(int fadeValue = 0; fadeValue <= 255; fadeValue +=1) { // sets the value (range from 0 to 255): analogWrite(ledPin, fadeValue); // wait to see the dimming effect delay(50); } delay(5000); // fade out from max to min : for(int fadeValue = 255; fadeValue >= 0; fadeValue -=1) { // sets the value (range from 0 to 255): analogWrite(ledPin, fadeValue); // wait for see the dimming effect delay(50); } delay(5000); Ну это просто моргание светодиодом, а мне надо плавное включение и выключение света в заданное время. |
![]()
Сообщение
#415
|
|
![]() Активный аквариумист ![]() ![]() ![]() Группа: Партнёры Сообщений: 291 Регистрация: 23.4.2012 Из: Сочи ![]() Благодарности: 281 раз(а) ![]() |
Это плавное зажигание диода с 0 до 100% за 12 сек
|
![]()
Сообщение
#416
|
|
Новенький на форуме ![]() Группа: Присматриваюсь Сообщений: 13 Регистрация: 20.3.2014 Из: Регенсбург ![]() Благодарности: 0 раз(а) ![]() |
|
![]()
Сообщение
#417
|
|
![]() Активный аквариумист ![]() ![]() ![]() Группа: Партнёры Сообщений: 291 Регистрация: 23.4.2012 Из: Сочи ![]() Благодарности: 281 раз(а) ![]() |
Ладно прийду домой покопаю код.
|
![]()
Сообщение
#418
|
|
Новенький на форуме ![]() Группа: Присматриваюсь Сообщений: 13 Регистрация: 20.3.2014 Из: Регенсбург ![]() Благодарности: 0 раз(а) ![]() |
|
![]()
Сообщение
#419
|
|
Новенький на форуме ![]() Группа: Присматриваюсь Сообщений: 13 Регистрация: 20.3.2014 Из: Регенсбург ![]() Благодарности: 0 раз(а) ![]() |
Вот для этого кода нужно плавное включение света в заданное время и плавное выключение в другое заданное время.
Код // Библиотеки необходимые для работы модуля часов
#include "Wire.h" #include "DS1307new.h" // библиотека экрана #include "LiquidCrystal.h" LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int hours; int minutes; int LW = 3; int LR = 11; int LB = 12; int On_Time =0; int Off_Time =0; int Curent_Time =0; void setup(){ Serial.begin(9600); lcd.begin(16, 2); // запускаем библиотеку экрана pinMode(LW, OUTPUT); pinMode(LR, OUTPUT); pinMode(LB, OUTPUT); } void loop(){ analogWrite(10, 100); RTC.getTime();// получить время от модуля RTC.hour; RTC.minute; printTimeToSerial(); // выводим полученное время в лог printTimeToLCD();; // выводи время на экран lcd.setCursor(0, 1); // Set the cursor to column 0, line 1 doSerialCommands(); // слушаем и выполняем команды из Serial On_Time=(20*60+27); Off_Time=(20*60+29); Curent_Time=RTC.hour*60+RTC.minute;//текущее время if(On_Time < Off_Time) //Проверка, таймер в течении одних суток? { if (Curent_Time >= On_Time && Curent_Time <= Off_Time) for(int fadeValue = 0; fadeValue <= 255; fadeValue +=3) { analogWrite(LR, fadeValue); } else for(int fadeValue = 255; fadeValue >= 0; fadeValue -=3) { analogWrite(LR, fadeValue); } } else // если сутки сменились { if ((Curent_Time >= On_Time && Curent_Time <= 2820)||(Curent_Time >= 0 && Curent_Time <= Off_Time))//2820=24часа*60 for(int fadeValue = 0; fadeValue <= 255; fadeValue +=3) { analogWrite(LR, fadeValue); } else for(int fadeValue = 255; fadeValue >= 0; fadeValue -=3) { analogWrite(LR, fadeValue); } } } // Выводит текущие время в Serial void printTimeToSerial(){ byte static prevSecond=0; // тут будем хранить, сколько секунд было при прошлом отчете if(RTC.second!=prevSecond){ // что-то делаем только если секунды поменялись Serial.print(RTC.hour); // часы Serial.print(":"); // разделитель Serial.print(RTC.minute); Serial.print(":"); Serial.println(RTC.second); prevSecond=RTC.second; // запомнили когда мы "отчитались" } } // Выводит текущие время на LCD void printTimeToLCD(){ byte static prevSecond=0; // тут будем хранить, сколько секунд было при выводе if(RTC.second!=prevSecond){ // что-то делаем только если секунды поменялись lcd.setCursor(11,0); // устанавливаем позицию курсора if(RTC.hour<10)lcd.print(" "); lcd.print(RTC.hour); // часы lcd.print( (RTC.second % 2)?" ":":"); // разделитель моргает if(RTC.minute<10)lcd.print(0); // лидирующий ноль, если нужен lcd.print(RTC.minute); prevSecond=RTC.second; // запомнили когда мы "отчитались" } } // устанавливает часы модуля на какое-то заранее определенное время void setSomeTime(){ RTC.stopClock();// останавливаем часы RTC.fillByHMS(20,24,0); // "подкручиваем стрелки на 20:24:00 RTC.setTime();// отправляем "подкрученное время" самому модулю RTC.startClock(); // и опять запускаем часы } // слушает из Serial команды и выполняет их. Каждая команда - один символ. // доступны команды: // s - установить время указанное в функции setSomeTime() void doSerialCommands(){ if(Serial.available()){ // что-нибудь пришло? char ch=Serial.read(); // читаем что пришло switch(ch){ case 's': // команда установки времени setSomeTime(); // устанавливаем break; // тут, в будущем, мы можем добавлять дополнительные команды default:; // на неизвестную команду - ничего не делаем }; } } |
![]() ![]()
Сообщение
#420
|
|
![]() Активный аквариумист ![]() ![]() ![]() Группа: Партнёры Сообщений: 291 Регистрация: 23.4.2012 Из: Сочи ![]() Благодарности: 281 раз(а) ![]() |
Вот скетч по управлению
В массиве задаются данные для леда. 1 значение это 15 мин. Программа плавно изменяет значение от одного значения к другому каждую минуту и выдает ее в порт. В монитор пишется текущее значение минут, ячейка массива, промежуточная позиция между ячейками и значение для порта. Ваша задача вовремя изменять переменную min_cnt. Код честно сперт с Krusduino by Hugh Dangerfield ![]() |
![]() ![]() |
Похожие темы
Тема | Ответов | Автор | Просмотров | Последнее сообщение | |
---|---|---|---|---|---|
![]() |
![]() |
35 | Гоцман я | 38 317 | 2.2.2025, 7:04 Посл. сообщение: Гоцман я |
![]() |
![]() Декоративный мох для вашего аквариума |
72 | Bahmut | 112 892 | 24.12.2024, 11:57 Посл. сообщение: Bahmut |
![]() |
![]() |
0 | ЮраШ | 16 644 | 16.11.2024, 15:58 Посл. сообщение: ЮраШ |
![]() |
Клей аквариумный, Soma FIX 280 мл, черный. | 0 | Arowana Info | 764 | 19.12.2023, 14:18 Посл. сообщение: Arowana Info |
![]() |
Уголок проходной AQUAXER, 1/4", под шланг 8 мм. | 0 | Arowana Info | 17 634 | 17.10.2023, 8:04 Посл. сообщение: Arowana Info |
![]() ![]() |
Текстовая версия | Сейчас: 16.6.2025, 17:28 |