Официальный сайт компании Arduino по адресу arduino.cc
ВКЛ и ВЫКЛ реле по времени
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 04/05/2013 - 19:54
Подскажите как правильно сделать нужно включать и выключать реле по времени в void loop крутиться так и еше выводим инфу на дисплей. проблема часыки тормозяться ....
HELP
void loop() { lcd.setCursor(0,0); lcd.print(RTC.get(DS1307_HR,true)); // печатаем час lcd.print(":"); // печатаем разделитель lcd.print(RTC.get(DS1307_MIN,false)); // печатаем минуты lcd.print(":"); // печатаем разделитель lcd.print(RTC.get(DS1307_SEC,false)); // печатаем секунды hours = RTC.get(DS1307_HR,true); minutes = RTC.get(DS1307_MIN,false); if (hours == 21){if (minutes == 48) digitalWrite(Relay1, LOW);} ; minutes = RTC.get(DS1307_MIN,false); if (hours == 21){if (minutes == 49) digitalWrite(Relay1, HIGH);} ; }
Не совсем понятно в чем проблема. И в вашем коде зачем считывать минуты еще раз? Они и так считаны двумя строками выше.
Для гарантированного срабатывания, нужно использовать не == , а < или >
или окончание
может тогда будет правильней тогда так чтоб избежать ошибки. вдруг прибор откл и прив включении он понял что надо включить реле.
может тогда будет правильней тогда так чтоб избежать ошибки. вдруг прибор откл и прив включении он понял что надо включить реле.
Вот вот, что бы такого не получаось легче превести все к минутам, и работать с ними
И кстати можно было поиском по сайту воспользоваться и найти уже готовый программируемый таймер http://arduino.ru/forum/obshchii/izmenenie-vremeni-taimera-na-ds1307#comment-28970 с сохранением в ЕЕПРОМ.
Вот вот, что бы такого не получаось легче превести все к минутам, и работать с ними
допустили ошибку
допустили ошибку
Обьясни плз, в чем ошибка?
по вашему коду на минуту позже срабатывает.
Посмотри вот это...очень неплохой вариант вроде как)...
http://www.lucadentella.it/2013/04/30/macchina-a-stati-finiti-e-arduino/
https://github.com/lucadentella/SimpleTimer
по вашему коду на минуту позже срабатывает.
Похоже ты набирал текст, а не копировал отсюда, и в проверке использовал >
Вместо >=
Вашь код
снова перепроверил срабатыввает на минуту позже или раньше проверял раз 10.
модправил так работает как часы
Похоже задержка у вас конкретная.
Ладно главное работает.
спасибо. как с вами можно связаться ...... icq 601712
Подскажите , пожалуйста, нужно тоже самое от ардуины , но этот скетч выдает ошибку при компиляции "sketch_oct04a.ino:32:17: error: 'DS1307_HR' was not declared in this scope
не тот модуль значит. качай другой.
Скачал другую библиотеку и заменил в коде . Теперь другая ошибка sketch_oct04acklock2.ino:49:47: error: 'class DS1307new' has no member named 'get' #include <DS1307new.h> #include <Wire.h> // For some strange reasons, Wire.h must be included here #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int hours; int minutes; //блок реле int Relay1 = 2; int Relay2 = 3; int Relay3 = 11; int Relay4 = 12; int On_Time =0; int Off_Time =0; int Curent_Time = 0; void setup() { lcd.begin(16, 2); Serial.begin(9600); pinMode(Relay1, OUTPUT); pinMode(Relay2, OUTPUT); pinMode(Relay3, OUTPUT); pinMode(Relay4, OUTPUT); digitalWrite(Relay1, HIGH); digitalWrite(Relay2, HIGH); digitalWrite(Relay3, HIGH); digitalWrite(Relay4, HIGH); } void loop() { hours = RTC.get(DS1307new_HR,true); minutes = RTC.get(DS1307new_MIN,false); lcd.setCursor(0,0); lcd.print(hours); // печатаем час lcd.print(":"); // печатаем разделитель lcd.print(minutes); // печатаем минуты lcd.print(":"); // печатаем разделитель lcd.print(RTC.get(DS1307new_SEC,false)); // печатаем секунды lcd.setCursor(0,2); On_Time=(21*60+29)-1; Off_Time=(22*60+30)-1; Curent_Time=RTC.get(DS1307new_HR,true)*60+RTC.get(DS1307new_MIN,false);//текущее время if(On_Time < Off_Time) //Проверка, таймер в течении одних суток? { if (Curent_Time >= On_Time && Curent_Time <= Off_Time) { digitalWrite(Relay1, LOW); } else { digitalWrite(Relay1, HIGH); } } else // если сутки сменились { if ((Curent_Time >= On_Time && Curent_Time <= 2820)||(Curent_Time >= 0 && Curent_Time <= Off_Time))//2820=24часа*60 { digitalWrite(Relay1, LOW); } else { digitalWrite(Relay1, HIGH); } } }
прошу обьяснить почему необходимо все перевести в минуты, не проще ли будет в условии прописать == вместо >=
if( Hour == 12 && Minute >= 24 ){digitalWrite(ledPin, HIGH);}
if( Hour == 12 && Minute >= 25 ){digitalWrite(ledPin, LOW);}
Всем доброго вечера, у меня вопрос, хочу сделать включение 1 канала реле один раз в неделю (регулярно), допустим в понедельник на 3 секунды с 12.00.00. При этом присоединив к ардуино часы реально времени (RTC) на случай отключения питания, питать хочу от блока питания зарядки для телефона. Набросал схему и код, прошу умов проверить (я новичок), сам пока не могу, жду часы с ebay.
Ссылка на схему http://hostingkartinok.com/show-image.php?id=33e7d260718768146bb0e4cb8305cc48
Вы какими библиотеками пользуетесь. Мои не понимают:
int
DAY
06
int
HR
07
int
MIN
08
int
SEC
А так понимает?
int DAY ;
int HR ;
int MIN ;
int SEC ;
Ещё........
if ( DOW == 1 && HR == 12 && MIN == 0 && SEC == 0)
Если раз в неделю то надо было DC1302, там запросить неделю (типа byte) , а тут вам счётчик нужно делать.
Интересно, а можно (реально это) сделать многоканальное (например 4-5 каналов), программируемое недельное реле времени с 10-15 программами вкл-откл. на каждый канал?
Если можно (думаю можно), то на какой друине? Нано достаточно, или Уно для этого нужно?
Программирование вкл.-откл. организовать кнопками, дисплей такой http://pt.aliexpress.com/item/New-0-96-I2C-IIC-Serial-128X64-OLED-LCD-LED-Display-Module-For-Arduino-55785/32357566914.html?spm=2114.031030708.3.19.DrdFCx&ws_ab_test=searchweb201556_1,searchweb201644_1_79_78_77_82_80_62_81,searchweb201560_5
Ну и релюшки соответственно. Решал кто подобную задачу? Реально это?
Можно, и Nano отличается от Uno только размерами, выводов столько же.
Но на такие сроки однозначно нужны часы. Экран имхо лучше 1602, меньше кода уходит на него.
10-15 программ включений 4 релюх должны по-идее поместиться в штатной памяти EEPROM, но если нет - можно поставить внешнюю, тем более на многих модулях с часами она есть.
Очасах я даже не упоминал, т.к. без них создание полноценного, автономного реле времени в принципе невозможно. А почему 1602. Там выводов куча,, которые занимают полезные пины, а в этом всего 2 вывода, кроме +-. Да и красивше выглядит. В цене разница, но не критичная. Тем более на eBay есть и за 3 бакса.
На 1602 сожрете меньше памяти, да и для начинающего попроще. Чтобы 1602 стал с двумя выводами, нужно купить переходник i2C за 90 рублев. В целом, дело вкуса.
из кода выше if
((Curent_Time >= On_Time && Curent_Time <= 2820)||(Curent_Time >= 0 && Curent_Time <= Off_Time))
//2820=24часа*60
if
((Curent_Time >= On_Time && Curent_Time <= 2820)||(Curent_Time >= 0 && Curent_Time <= Off_Time))
//2820=24часа*60
и одназначно Curent_Time >= 0 не может быть меньше
и вообще это как 2820=24часа*60
Так как же правельно сделать проверку если таймер перескакивает на следующие сутки?
Включить в переменную сутки.
То есть
А если таймер ежедневный:
начало 11:00
конец 02:00 (следующий день)
И нужна проверка, если пропало питание и после его включения если время входит в этот промежуток то включить реле
А вот как сделать проверку если конец переходит на следующие сутки сообразить немогу.
Две проверки, если более 11*60+.. и менее 23*60+59 вторая, более 0 и менее 2*60+... Если входит в оба диапазона, тру.
Приветствую!
Я в работе с ардуинкой совсем новичок, но есть поставленная задача и её хотелось бы решить.
Нужно сделать реле времени что бы реле включались каждый день в разное время. Например реле 1 включалось с 7.00 до 16.00 , реле 2 включалось с 9.00 до 15.00 и реле 3 включалось с 12.00 до 14.30.
Есть ардуинка нано, 8 релейный модуль и часы реального времени ds1307. Подскажите как реализовать? Буду очень благодарен!
1. Написать алгоритм.
2. Прошить его в Ардуину.
3. Спаять схему.
4. Подключить питание.
Добрый день!
Есть следующий рабочий код, как прикрутить включение и выключение реле на 13 пине по заранее установленному времени.
Спасибо!
и шо это было?!!(c)
Кто поможет написать скетч нужна что бы ардуина просыпалась 2 раза в день с утра и вечером и вкльчала 2 двигателя по 3.3 в на разных пинах есть китайська ардуино уно и датчик реального времини DS3231AT24C32IIC модуль памяти DS3231SN
Двигатели нужно включять токо от 10 до 20 секунд
Кто поможет написать скетч нужна что бы ардуина просыпалась 2 раза в день с утра и вечером и вкльчала 2 двигателя по 3.3 в на разных пинах есть китайська ардуино уно и датчик реального времини DS3231AT24C32IIC модуль памяти DS3231SN
подразумевается что кто то вам должен написать программу, ?
Не должен а еще то кто бескорысно поможет в этой ситуацыи
Не должен а еще то кто бескорысно поможет в этой ситуацыи
Бескорыстно помочь в этой ситуации тебе поможет учебник русского языка, плюс воспитание в себе навыка связно излагать свои мысли - мало кто владеет таким, как у тебя, дзеном, поэтому твой поток сознания не только лишь все дешифровать могут.
Не должен а еще то кто бескорысно поможет в этой ситуацыи
Вы сами начните хоть что то делать. Тогда возможно и помогут. Хотя бы последние темы по форуму почитайте. Где то в ваш адрес отвечал, что буквально пару дней назад человек закончил подобный скетч, правда на один канал и с часовыми интервалами. Взяв его за основу легко сделаете и свою задачу. Искать за вас и писать вряд ли у кого есть желание.
Подскажите пожалуйста, а как на 1302 организовать управление нагрузкой по времери.?
Утром вкл на 3 сек, выкл. И вечером то же действие?
Ручками: получаем время с часов, смотрим - утро? Включили на 3 секунды. Смотрим - вечер? Включили на 3 секунды.
Спасибо за помощь добрый человек.
Есть такой код: #include <DS1302.h>
Не поможете?
Отчего ж не помочь? Конечно, помогу: http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii