Не работает реле с RTC
- Войдите на сайт для отправки комментариев
Пнд, 04/01/2016 - 10:44
День добрый. Перерыл кучу тем на форуме но так ответа и не нашел.
Имею простейший код для включения реле по часам реального времени DS1307. Чаы подключены верно, время сохранят если отключать ардуино от питания. Время пингуется, все норм. Реле тоже подклчено верно, если из кода убрать составляющие которые связаны со временем то все вклбючается. Меня террзают смутные сомнения что код как то не верно переводит время в формат UNIX, не правильно высчитывает количество секунд с начала суток.
Помогите пожалуста новичку разобраться :) Искал в сети как сделать таймер в формате обычного времени а не UNIX но так толком и не нашел ни чего :( Спасибо!
#include <Wire.h> #include <RTClib.h> RTC_DS1307 RTC; const int RelayChn1 = 6; //Используем цифровой ПОРТ 6 для ПЕРВОГО канала релейного модуля //----------Настройки времени и продолжительности включения реле const int StartRelCn_1 = 46500; //Время срабатывания в ПЕРВОМ канале релейного модуля (в секундах от начала суток) //в данном случае 25200 - это 7 часов 00 минут = ( 60 секунд *60 минут *7 = 25200) const int DurationCh_1 = 10; //ДЛИТЕЛЬНОСТЬ срабатывания реле (в секундах) void setup(){ pinMode(RelayChn1,OUTPUT); //Инициализируем порт для реле как ВЫХОД digitalWrite(RelayChn1,HIGH); //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень Wire.begin(); RTC.begin(); } void loop() { DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла long utime = myTime.unixtime(); //сохраняем в переменную - время в формате UNIX utime %= 86400; //Сохраняем в этой же переменной остаток деления на кол-во секунд в сутках, //Это дает количество секунд с начала текущих суток if ((utime >= StartRelCn_1) && //Если секунд с начала суток больше, чем задано для включения (utime < (StartRelCn_1+DurationCh_1))) //Но, одновременно и меньше, чем задано для включения + длительность { digitalWrite(RelayChn1,LOW); //Устанавливаем на ПЕРВОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает } else //во всех остальных случаях { digitalWrite(RelayChn1,HIGH); //Устанавливаем на ПЕРВОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается } }
День добрый. Перерыл кучу тем на форуме но так ответа и не нашел.
День добрый, перечитал Ваш пост раза три, но так вопроса и не нашёл!
Всё у Вас верно, всё работает, всё сохраняется, всё пингуется, а в чём же Вам помощь нужна?
Да, кстати, когда напишите в чём проблема не забудьте схему подключения тоже выложить, а то меня терзают смутные сомнения ...
спасибо за отзывчивость) вопрос в том почему реле не срабатывает в нужное время? оно вообще ни когда не включается, при любом значении прописанных секунд...
Для проверки правильности подцепления реле, меняю параметры HIGH и LOW местами в этой строке
и оно всегда включено становится, лампочка на реле загорается. Значит провода правильно подцеплены.
Часы подключены вот по такой схеме: http://zelectro.cc/Media/Default/Periphery/13_RTC_module/RTC_main.jpg
а тут как и часы и реле вместе подцеплены. Мне нужно два реле, но пока код решил упростить до одного.
День добрый. Перерыл кучу тем на форуме но так ответа и не нашел.
День добрый, перечитал Ваш пост раза три, но так вопроса и не нашёл!
Всё у Вас верно, всё работает, всё сохраняется, всё пингуется, а в чём же Вам помощь нужна?
Да, кстати, когда напишите в чём проблема не забудьте схему подключения тоже выложить, а то меня терзают смутные сомнения ...
ответил выше :)
Ну, смотрите, начнём с Вашей строки №9
const
int
StartRelCn_1 = 46500;
Число 46500 в переменную типа int не лезет. Либо заменяйте на long, либо на unsigned int. Если второе, что осторожно, т.к. всего в сутках 86400 секунд, а это не полезет и в unisgned int.
далее, в районе строк 38 и 42 я бы поставил Serial.print и посмотрел бы как оно туда попадает. Если попадает нормально и всё правильно, но реле по-прежнему не включается, я бы посмотрел, что там у Вас за релейный модуль (какой ток нужен для срабатывания реле). Если там нет транзистора, то скорее всего реле требует большого тока (например, SRD-05VDC-SL-C кушает около 70ma - нога ардуины столько не даст), тогда надо ставить транзистор. Если же в модуле уже всё есть и ток требуется небольшой (до 20ma), то по идее должно работать. Если не работает, напишите, будем внимательнее текст смотреть.
Если запустить простейшую проверку времени из модуля часов DS1307, вот такую:
То время пингуется правильное, даже если арудино на какое то время отключить от питания. После включения время будет пинговаться верное:
Но при этом не один скетч по включению реле на основе реального времени не работает :(
хотя если не трогая проводов запустить приметивный скетч включения реле, на тот же самый пин №6, но уже не используя данные из модуля реального времени, то реле будет запускаться и отключаться...
Вы поправили StartRelCn_1, как я Вам говорил? И что? Не заработало? Если нте. выложите на всякий случай новый скетч целиком - булем любоваться.
Ну, смотрите, начнём с Вашей строки №9
const
int
StartRelCn_1 = 46500;
Число 46500 в переменную типа int не лезет. Либо заменяйте на long
Ах вы ж мой спаситель!)))) заработало!!!! я блин три дня уже бьюсь над этой проблемой!)))
Попробовал сейчас вот такой таймер, нашел на забугорном форуме: http://www.lucadentella.it/2013/04/30/macchina-a-stati-finiti-e-arduino/
так он чего то тоже не срабатывает у меня... или тоже у них ошибка в коде...
Спасибо что с первым кодом помогли разобраться!!
Ну, этот код не может работать. Посмотрите на строку 42
if
(nowHourMinute > START_TIME && nowHourMinute < END_TIME) ...
Теперь, давайте переведём её на русский язык. попутно подставив значения констант из строк 12 и 13. Переводим:
ЕСЛИ nowHourMinute больше чем 1646 И nowHourMinute меньше чем 1647 ТО ...
Это условие не будет истинным никогда. Ни при каком nowHourMinute . Вы знаете такое число, которое было бы одновременно и больше чем 1646, и меньше чем 1647? Таких чисел просто не бывает.
Значит строки 43-48 не будут выполняться никогда.
Вы поправили StartRelCn_1, как я Вам говорил? И что? Не заработало? булем любоваться.
Вот полностью рабочий код на две реле, с вашей помощью все заработало :)
Вопрос, а как правильнее вписать сюда 4 и более реле? И как в случае необходимости заставить какое то из них включаться в одних сутках а выключаться в других? Спасибо
Вроде бы простейшая и распространенная задача для ардуино: включение чего либо по времени. А работающий скетч в инете фиг найдешь! Ну трудно его написать самому если ардуино видишь ты всего 3 дня и до этого не программировал вообще...
utime %= 86400; //Сохраняем в этой же переменной остаток деления на кол-во секнд в сутках, //Это дает количество секунд с начала текущих суток
Мало того, если Вы захотите включить реле незадолго до полуночи и время включения перехлестнёт полночь, то нарвётесь на неприятности.
Если хотите выделять из unixtime суточное время, то храните не точку включения и длительность, а 2 точки - включения и отключения реле. Тогда проблем никаких не будет.
Спасибо за дельный совет :) а как лучше объеденить 2 точки включения и выключения одного реле в Void loop?
и как оптимальнее там прописать допустим 4 реле, что бы случайно ни кто ни кому не помешал сработать
спасибо огромное!
а как лучше объеденить 2 точки включения и выключения одного реле в Void loop?
и как оптимальнее там прописать допустим 4 реле, что бы случайно ни кто ни кому не помешал сработать
Имею простейший код для включения реле по часам реального времени DS1307. Чаы подключены верно, время сохранят если отключать ардуино от питания. Время пингуется, все норм. Реле тоже подклчено верно, если из кода убрать составляющие которые связаны со временем то все вклбючается. Меня террзают смутные сомнения что код как то не верно переводит время в формат UNIX, не правильно высчитывает количество секунд с начала суток.
Из DS1307 можно сразу получать секунды, минуты, часы, дни и т.д. и не нужно будет считать секунды с начала суток.
http://www.youtube.com/watch?v=qq6AVdd5TFQ
А я бы для удобства сделал простенький класс, типа такого :
и потом спокойно работаем с ними :
Люди ! Не забывайте про возможности С++ ! Они вам облегчают жизнь !
Покодил немного, отлаживал в протеусе. Т.к. тут никак не прикрепить файлы, залил готовый код и файл протеуса со скетчем на другом форуме - Ссылка
Там, также, дал ссылку на текущий топик, для связки смысла топиков.
А я бы для удобства сделал простенький класс, типа такого :
есть же библиотека http://playground.arduino.cc/code/time
И что ?
Я класс создал ради простоты установки, хранения, сравнения, ... времени.
Причём тут Вами упомянутая библиотека ? Как она может заменить мной созданный класс ?
Или искать и использовать библиотеки - ваше всё, а создавать собственное - не комильфо ?
Ну, собственные классы и создаются ради частных случав. Как раз, данный случай и показывает яркий тому пример. Основная цель класса была создать объект, умеющий сравнивать временные значения. Ибо это - основная задача у ТС'а.
А Вы предлагаете по частным случаем кидаться в поиски каких-нибудь библиотек.
Это раз.
Во вторых. Вы так и не ответили на мой вопрос о замене моего класса вашей библиотекой. Обычный набор непонятных никому функций, возможно что-то там и обеспечивающих. Но какое отношение это имеет к собственным классам, как к объектам ? И где Вы видите, что я пложу сущности ? Или по-вашему, создавать собственное - плодить сущности ? Где логика ?
Или может Вам просто скучно, хочется поговорить, а не с кем ?
Ни один набор функций в стиле Си (называемый Вами библиотекой) не заменит класс, способный создать объект с перегружаемыми операциями и дающий возможность обращаться к нему как к любому типу.
Не путайте мух с котлетами и не вводите людей в заблуждение.
Находил как-то библиотеку RTClib - где все это уже было. Естественно перетащил в свою версию, но откуда взял - не смог найти. В итоге залил свою версию на GitHub https://github.com/NeiroNx/RTCLib
Люди ! Не забывайте про возможности С++ ! Они вам облегчают жизнь !
Да я ж не против научиться этому, как раз я и хочу освоить ардуино для облегчения жизни!) Но впервые в жизни взял я ардуино всего 4 дня назад!))) Да и с прогроммированием столкнулся впервые тогда же :) Склад ума технический, очень люблю подобные вещи но раньше не сталкивался. Сейчас просто искал чужой скетч под свою задачу, с внятными комментариями и пытался разобраться как он работает.
Ваш скетч обязательно опробую сегодня, и тот вчерашний попробу тоже довести до ума, сделать 2 точки включения и выключения для одного реле.
Но вот для еще одно из реле мне нужно будет добавть условие что бы оно включалось в нужное время, но только если температура с DS18B20 будет в заданных пределах. Для вас это просто всё, а для меня пока не очень)))
Может посоветуете какие нибудь материалы почитать для обучения по программированияю на ардуино? Ну что бы все описывалось с самых базовых вещей. Спасибо огромное за помощ и отзывчивость! Очень выручили :)
Может посоветуете какие нибудь материалы почитать для обучения по программированияю на ардуино? Ну что бы все описывалось с самых базовых вещей. Спасибо огромное за помощ и отзывчивость! Очень выручили :)
Для начала гораздо более правильная формулировка:
Может посоветуете какие нибудь материалы почитать для обучения по программированияю
на ардуино? Ну что бы все описывалось с самых базовых вещей. Спасибо огромное за помощ и отзывчивость! Очень выручили :)Это намного грамотнее. Потому что учиться программированию "на ардуино" - это всё равно. что учиться водить "жигули". Либо Вы умеете водить машину, либо - нет. Невозможно уметь водить "жигули" и не уметь "фольксваген". Так же и в программированни: либо Вы умеете программировать, либо нет, а уж ардуино там или Тианхе-2 - вопрос десятый.
А так, смотрите Керниган и Ритчи. Программирование на языке С и Страуструп. Язык С++
Это намного грамотнее. Потому что учиться программированию "на ардуино" - это всё равно. что учиться водить "жигули". Либо Вы умеете водить машину, либо - нет. Невозможно уметь водить "жигули" и не уметь "фольксваген". Так же и в программированни: либо Вы умеете программировать, либо нет, а уж ардуино там или Тианхе-2 - вопрос десятый.
А так, смотрите Керниган и Ритчи. Программирование на языке С и Страуструп. Язык С++
спасибо) я просто думал что на ардуино какой то упрощенный вариант С++, и возможно есть какая то "упрощенная" литература для чайников :)
Тут в соседней ветке давали ссылку на одну из книг :
Самая хорошая и вдохновляющая книга - Петин. Проекты с применением контроллера Ардуино.
http://mega-track.org/viewtopic.php?t=97696
Там все есть: и язык и проекты и черта в ступе.
ЗЫ: А с DS1820, дак эта тема, по-моему, изъезжена до дыр. И библиотеки все для дуины есть.
я просто думал что на ардуино какой то упрощенный вариант С++
Ни на грамм. Самый что ни есть С++.
Единственное, что они в IDE'шном препроцессоре добавили две фичи для "типа-упрощения" - руки бы поотрывал за такие добавления. А компилятор самый обычный - никаких упрощений.
Тут в соседней ветке давали ссылку на одну из книг :
спасибо!) обязательно почитаю :)
Ни на грамм. Самый что ни есть С++.
благодарю, будем значит изучать С++
я вот лет 5 уже слушаю Радио-Т, и часто возникало желание начать изучать какой нибудь язык программирования, но так и не мог решиться с какого именно начать :) а тут все самой подвернулось
Ну, собственные классы и создаются ради частных случав. Как раз, данный случай и показывает яркий тому пример. Основная цель класса была создать объект, умеющий сравнивать временные значения. Ибо это - основная задача у ТС'а.
А Вы предлагаете по частным случаем кидаться в поиски каких-нибудь библиотек.
Это раз.
Во вторых. Вы так и не ответили на мой вопрос о замене моего класса вашей библиотекой. Обычный набор непонятных никому функций, возможно что-то там и обеспечивающих. Но какое отношение это имеет к собственным классам, как к объектам ? И где Вы видите, что я пложу сущности ? Или по-вашему, создавать собственное - плодить сущности ? Где логика ?
Или может Вам просто скучно, хочется поговорить, а не с кем ?
Ни один набор функций в стиле Си (называемый Вами библиотекой) не заменит класс, способный создать объект с перегружаемыми операциями и дающий возможность обращаться к нему как к любому типу.
Не путайте мух с котлетами и не вводите людей в заблуждение.
блииин... начинается словоблудие простынями рассказов, про С++ и, как его полезно изучать, хотя речь не о том, а о готовых библиотеках.
Словоблудие, как раз, идёт именно с Вашей стороны. Это Вы, взамен мною созданного класса, процитировав, дали ссылку на какую-то библиотеку, так и не сказав, каким боком она к нему относится. Причём пытаясь мне доказать, что библиотеки - это верх совершенства и нужно пользоваться только ими, не создавая ничего своего (по Вашему это - некомильфо).
Про полезность изучения С++ я вообще ни слова не сказал, это ваши какие то домыслы.
И речь шла не о библиотекх вовсе, а немного о другом. Но Вы, видимо, читаете топик по-диагонали. И кроме ненужного никому совета по библиотеке и флуда, с Вашей стороны ничего полезного не наблюдается.
Если посоветовали что-то, докажите, что этот совет к месту в данном случае. Я, например, не вижу никаких оснований использовать Вами предложенную библиотеку в данном проекте. Если я не прав - обоснуйте.
Словоблудие, как раз, идёт именно с Вашей стороны. Это Вы, взамен мною созданного класса, процитировав, дали ссылку на какую-то библиотеку, так и не сказав, каким боком она к нему относится. Причём пытаясь мне доказать, что библиотеки - это верх совершенства и нужно пользоваться только ими, не создавая ничего своего (по Вашему это - некомильфо).
Про полезность изучения С++ я вообще ни слова не сказал, это ваши какие то домыслы.
И речь шла не о библиотекх вовсе, а немного о другом. Но Вы, видимо, читаете топик по-диагонали. И кроме ненужного никому совета по библиотеке и флуда, с Вашей стороны ничего полезного не наблюдается.
Если посоветовали что-то, докажите, что этот совет к месту в данном случае. Я, например, не вижу никаких оснований использовать Вами предложенную библиотеку в данном проекте. Если я не прав - обоснуйте.
давайте я сам за себя расскажу, что я сделал:
я зашёл в тему увидел скетч ТС, где у него код код "как то не верно переводит время в формат UNIX, не правильно высчитывает количество секунд с начала суток", затем увидел, что вы написали класс... как бы ладно, но зачем это всё, если существует библиотека Time?
не "какая-то библиотека", а библиотека с описанием - скачивайте и читайте.
ТСу на просьбу:Помогите пожалуста новичку разобраться :) Искал в сети как сделать таймер в формате обычного времени а не UNIX
- библиотека Time.
затем увидел, что вы написали класс... как бы ладно, но зачем это всё, если существует библиотека Time?
Прошу Вас посмотреть повнимательней на содержание класса и пример его использования, может Вы тогда всё-таки поймёте смысл его создания, который сводится к упрощению операций сравнения времён в условиях. Я же даже пример использования показал:
Вот он, смысл создания класса. И библиотека Time тут совсем не при чём.
ТСу на просьбу:Помогите пожалуста новичку разобраться :) Искал в сети как сделать таймер в формате обычного времени а не UNIX
- библиотека Time.
Повторюсь :
Alexino скажите, а это нормально: если при включенном реле открываешь ком-порт для мониторинга состояния, то реле на секунду выключается? спасибо
Alexino скажите, а это нормально:
При открытии порта Ардуинка всегда перегружается.
При открытии порта Ардуинка всегда перегружается.
Ок. Подскажите, а можно ли брать 5V для датчика температуры с ICSP разьема предназначенного для USB? Хочу вот такую схему подключения сделать. Или 5V лучше параллельно запитать от выход 5V?
Дак покажите пример её использования.
библиотека укомплектована примерами.
Или, хотя бы, расскажите, как она сможет помочь ему в этом проекте.
библиотека переводит время в обычный формат из формата Unix и обратно
Alexino скажите, а это нормально: если при включенном реле открываешь ком-порт для мониторинга состояния, то реле на секунду выключается? спасибо
библиотека переводит время в обычный формат из формата Unix и обратно
Это же обычные деления с остатком, зачем тут нужна целая библиотека ?
Ок. Подскажите, а можно ли брать 5V для датчика температуры с ICSP разьема предназначенного для USB? Хочу вот такую схему подключения сделать. Или 5V лучше параллельно запитать от выход 5V?
Это же обычные деления с остатком, зачем тут нужна целая библиотека ?
ровно для того, что попросил ТС - у него лично проблемы с делениями с остатком.
*иначе, нужно рекомендовать ТСу идти в среднюю школу, а не писать для него и за него классы.
А что значит "открываешь порт" ?
ну нажмаю кнопочку "монитор порта" и в этот момент реле на секунду отключается :)
Ааа, на ПК чтоли мониторите порт ? ))
Может дуина ресетится ? По симтомам похоже - ресет, реле рубится, секунда проходит, время совпало, реле включилось.
Возможно, при коннекте, дуина включает бутлоадер, а потом запускает программу. ХЗ в общем ... )
Тут уже я не знаю всех подробностей коннектов дуины с ПК, ибо сам не имею этого всего, за ненадобностью ))
ну и ладно, это не важно в прочем) еще раз спасибо)
КОГДА ТЕБЕ РЕЛА ВКЛЮЧАТЬ НАДО ...В КАКОЕ ВРЕМЯ И НА СКОКА?
ну нажмаю кнопочку "монитор порта" и в этот момент реле на секунду отключается :)
При этом происходит перезаггпузка Ардуины. Т.е. она просто перегружается и начинает работать с нуля. Так что это нормально, что реле ненадолго вырубается.
Спасибо! Тоже попробую и Ваш вариант :) дни недели как раз не нужны. Сейчас делаю что бы второе реле включалось только в определенные момент времени, при этом еще и брало температуру с датчика и поддерживало ее в заданных значениях всего лишь 5 минут в день. Далее оно должно быть всегда выключено :)
ну нажмаю кнопочку "монитор порта" и в этот момент реле на секунду отключается :)
При этом происходит перезаггпузка Ардуины. Т.е. она просто перегружается и начинает работать с нуля. Так что это нормально, что реле ненадолго вырубается.
ПРИ ВХОДЕ В ТЕРМИНАЛ СБРОС ПРОИСХОДИТ
Спасибо! Тоже попробую и Ваш вариант :) дни недели как раз не нужны. Сейчас делаю что бы второе реле включалось только в определенные момент времени, при этом еще и брало температуру с датчика и поддерживало ее в заданных значениях всего лишь 5 минут в день. Далее оно должно быть всегда выключено :)
У МНЯ ГОТОВОЯ ПРОГА ЕСТЬ ...НЕДАВНО ЗАКОНЧИЛ..........НО....
При этом происходит перезаггпузка Ардуины. Т.е. она просто перегружается и начинает работать с нуля. Так что это нормально, что реле ненадолго вырубается.
НО......
.// программа имеет два канала упраления 1 - по темперетуре 2- по времени. время и температура ВКЛ и ВЫКЛ устанавливается через блютуф c Android девайса
У МНЯ ГОТОВОЯ ПРОГА ЕСТЬ ...НЕДАВНО ЗАКОНЧИЛ..........НО....
НО я не буду у вас ни чего просить. Интересно разобраться самому. Просто иногда по незнанию возникают примитивные вопросы. Но всё равно форум хороший, быстро помогли разобраться :)
"мыши плакали и кололись - но продолжали жрать кактус"
Я И НЕ ПРОШУ ПРОСИТЬ ...Я ГОВОРЮ НАДО?
ПРОСТО ФУКЦИОНАЛ ОТЛИЧАЕТСЯ И НАСТРАЕВАЕТСЯ БО БЛЮТУФУ...ТАКОЕ УСТРОИТ?