Задержка по времени для сервы
- Войдите на сайт для отправки комментариев
Добрый день уважаемые форумчане! Я новичок в ардуино и поэтому, просмотрев все простетские видеоуроки, у меня созрел, как я думаю, простой вопрос. Как без "delay", используя только "millis()" решить такой момент: есть ардуинка, датчик температуры и серва. Задача к примеру такая: при достижении температуры 60 градусов серва делает поворот на 90 градусов. Но если просто воткнуть библиотеку сервы и прописать к примеру
if (temp>60) {myservo.write(90);}
то серва начинает биться в конвульсиях, т.к. температура скачет 60-61градус еще несколько секунд, а мне бы надо добавить в условие к примеру 10ти секундную задержку... Тобишь серва поворачивается в том случае, если температура >60 градусов держится более 10ти секунд. Вот что надо в условие дописать?:-)
http://arduino.ru/tutorials/BlinkWithoutDelay
По образу и подобию
когда повернулась detach делайте чтобы не дёргалась, потом даже delay сгодится на ваши 10 секунд и снова attach ....
ИМХО не в том направлении копаете. Не проще реализовать гистерезис?
Что-то типа:
В диапазоне 59-60 градусов серва поворачивать не будет.
Т.е., серва повернётся на угол 90 если температура повыситя до 61 градуса, а обратно вернется на угол 0 только если температура опустится до 58 градусов. Получается запас на колебание температуры в два градуса. Если нужен гистерезис в один градус, то temp<=59 или temp>=60
Воооот действительно, все гениальное всегда просто:-) . А я забил башку какими-то сложными выкрутасами с millis()... Благодарю за верное направление! Это я твердотопливный котел на дровах автоматизирую)))
гистерезис снизит точность установки сервы, лучше как trembo предложил в #2
можно просто опрашивать и управлять раз в 10 секунд.... millis() как bwn в #1
чем управляет серва ? почему только 0/90=закрыть/открыть ? а не следить положение 0.....90 от температуры 10....80 ?
Воооот действительно, все гениальное всегда просто:-) . А я забил башку какими-то сложными выкрутасами с millis()... Благодарю за верное направление! Это я твердотопливный котел на дровах автоматизирую)))
А я бы попросил в нашу millis() не плеватся, вы спросили: "Тобишь серва поворачивается в том случае, если температура >60 градусов держится более 10ти секунд. Вот что надо в условие дописать?:-)", я вам за секунды и ответил))). Может у вас в них величайший сакральный смысл сокрыт, мне откуда знать?
Плеваться? Да ни в коем случае!))) Я перепробую все, что тут предложили ради собственного наглядного опыта! Кстати, а кто бы что посоветовал в плане attach-detach сервы после каждого маневра? Обязательно это делать или же желательно или же без разницы?
чем управляет серва ? при detach сервы неведомые нам силы могут и подвинуть серву в сторону противодействия :(
чем управляет серва ? почему только 0/90=закрыть/открыть ? а не следить положение 0.....90 от температуры 10....80 ?
На самом деле это я для примера спросил. Для полноты картины опишу процесс полностью, может ошибки подскажите или совет дадите... Есть твердотельный котел длительного горения (котел Стропува так называемый)... Накидал дров один раз и на сутки забыл про него якобы... Но есть в нем один капризный момент: котел не должен работать при температуре теплоносителя в нем ниже 60 градусов, иначе попрет конденсат дуром. Приходится закрывать кран подачи и сидеть ждать, пока котел не наберет температуру градусов 75 и тогда наполовину кран можно приоткрыть (если открыть наполную то из обратки холодная вода мигом снизит температуру с 75 до 50-55 градусов и придется вновь прикрывать). Вот и поставил задачу: перед затопкой котла нажал кнопочку - серва закрылась(та серва что стоит на шаровом кране, большая такая и будет управляться как я понял не напрямую с ардуинки а еще через транзистор в импульсном режиме) и при достижении температуры 75 градуов серва сама откроет кран на угол 45 ну и т.д. Хочу в эту картину впихнуть эзернет модуль, для управления сервой и чтения инфы из дома (правда тут я еще пока ноль). Вот такая нехитрая задумка
управлением заслонкой приточного воздуха в камеру сгорания ?
вам нужно два канала управления - 1-управление горением, 2-управление циркуляцией теплоносителя
И это тоже можно организовать, если уж прям ПОЛНОСТЬЮ практически его автоматизировать... У него есть небольшая встроенная "управлялка" заслонки приточного воздуха на основе что-то теплового расширения бака (температура повышается - заслонка опускается немного и наоборот), но нету полностью возможности перекрытия (к примеру если то, что я описал выше сделать и по какой то причине сдохнет датчик температуры и начнет показывать все время 40градусов когда в котле уже 100, то произойдет так сказать "паровозик")))). Поэтому управление заслонкой приточного воздуха - планы на будущее при условии, что справлюсь с уже поставленными, а пока вместо одног датчика температуры будет стоять 2 с ординаковыми программными условиями (ведь вероятность крайне мала, что оба датчика сдохнут разом)
ваша изначальная постановка - открывать кран на нужный поток теплоносителя ( воды ) в зависимости от температуры воды на обратке ?
60 - приоткрыть, 70 - приприоткрыть, 80 - приприприоткрыть ?
Ну не сказать, что в ависимости от температуры воды в обратке... Скорее в подаче, ибо обратка как ни крути не станет 60 градусов даже за 3 часа... Все те цифры, что я написал выше (минимум 60град, среднее положение сервы - 75град и полное открытие 80град) были получены исключительно опытным путем
И это тоже можно организовать, если уж прям ПОЛНОСТЬЮ практически его автоматизировать... У него есть небольшая встроенная "управлялка" заслонки приточного воздуха на основе что-то теплового расширения бака (температура повышается - заслонка опускается немного и наоборот), но нету полностью возможности перекрытия (к примеру если то, что я описал выше сделать и по какой то причине сдохнет датчик температуры и начнет показывать все время 40градусов когда в котле уже 100, то произойдет так сказать "паровозик")))). Поэтому управление заслонкой приточного воздуха - планы на будущее при условии, что справлюсь с уже поставленными, а пока вместо одног датчика температуры будет стоять 2 с ординаковыми программными условиями (ведь вероятность крайне мала, что оба датчика сдохнут разом)
А сама система теплоносителя гравитационная или принудительная? Если принудиловка, то самая ваша большая проблема, это обесточивание. Оставлять в таком варианте на сутки без присмотра не рискнул бы. Прошлой зимой два раза принудительно гасить пришлось, пока на генератор не разорился(((.
Да и все эти три положения сервы (закрыть, полуоткрыть и открыть) можно разделить штук на 10 вообще для плавности и точности, но торговое здание 300квадратов не заметит этот так скажем комфорт.
Система принудительная. Я уже поставил ИБП с 8ю аккумуляторами))). Так что отключение электричества даже на сутки мне не страшны. Еще стоит Teplocom GSM, который мне смски шлет и звонит когда вырубает свет. Я к нему присобачил вместо датчика протечки воды датчик вентилятора от а/м Ока, и теперь если вдруг забыли открыть кран подачи и котел набрал 92 градуса - звонит телефон и приходит смска - АВАРИЯ!))
итого - замер Т, установка сервы, ждать 10.....60 сек через millis() - замер Т, устано........ цикл-песня про бычка :)
итого - замер Т, установка сервы, ждать 10.....60 сек через millis() - замер Т, устано........ цикл-песня про бычка :)
Благодарю! Сейчас буду на борде пробовать с низкими температурами))). А что на счет attach-detach?
и котел набрал 92 градуса - звонит телефон и приходит смска - АВАРИЯ!))
нет - ПЕРЕГРЕВ ! :)
А что на счет attach-detach?
не нужно - если мерить Т каждые 10.......60 сек - серва не будет дёргаться....
и котел набрал 92 градуса - звонит телефон и приходит смска - АВАРИЯ!))
нет - ПЕРЕГРЕВ ! :)
К сожалению, Teplocom GSM хоть и полезная вещь, но примитивная... На все срабатывания датчиков пишет одну и ту же аварию, не подразделяя вообще. Поэтому опять же в планах (когда научусь хоть чему-то) захреначить к ардуинке GSM модуль))))
и котел набрал 92 градуса - звонит телефон и приходит смска - АВАРИЯ!))
нет - ПЕРЕГРЕВ ! :)
А, понял, "авария" приходит когда от земли отрвался)))
А что на счет attach-detach?
не нужно - если мерить Т каждые 10.......60 сек - серва не будет дёргаться....
Тобишь Вы предлагаете делать замеры не постоянно, а раз, допустим, в пол-минуты приблизительно с помощью millis()? В принципе верно, у системы инерция как у поезда и за пол-минуты или минуту температурный скачок не будет выше 1-2 градусов...
analogWrite( map( T , 60 , 90 , 0 , 90 ));
А что на счет attach-detach?
не нужно - если мерить Т каждые 10.......60 сек - серва не будет дёргаться....
Тобишь Вы предлагаете делать замеры не постоянно, а раз, допустим, в пол-минуты приблизительно с помощью millis()? В принципе верно, у системы инерция как у поезда и за пол-минуты или минуту температурный скачок не будет выше 1-2 градусов...
Практически в любом случае нет смысла в частом мониторинге температуры. Лучше это процессорное время задействовать на другие задачи.
и котел набрал 92 градуса - звонит телефон и приходит смска - АВАРИЯ!))
нет - ПЕРЕГРЕВ ! :)
А, понял, "авария" приходит когда от земли отрвался)))
ну, да - когда систему порвало :)
Тобишь Вы предлагаете делать замеры не постоянно, а раз, допустим, в пол-минуты приблизительно с помощью millis()? В принципе верно, у системы инерция как у поезда и за пол-минуты или минуту температурный скачок не будет выше 1-2 градусов...
даааааааааа, тепловыыыыыыыые процееееееессы ооооооооооооооооочень длиииииииииииииииииииииииителные.....
analogWrite( map( T , 60 , 90 , 0 , 90 ));
нууу,вы поняли, надеюсь :)
посмотрите про ПИД-регуляторы - на какой угол открывать кран в зависимости от Т - чёбы не попасть в раскачку.....
Не совсем понял зачем функция map? Для чего конвертация 60 в 0? А так то саму логику понял, теперь бы ее еще буковками правильно написать))))
значения Т = 60........90 маппируются ( приводятся ) в значение угла поворота сервы....
это уже П-регулятор.... Пропорционалный регулятор....
60 - закрыт, 70 - приоткрыт, 80 - приприоткрыт..... и т.д.
analogWrite( пинСервы , map( T , 60 , 90 , 0 , 90 ));
Т=60 - угол=0, Т=65 - угол=10, Т=70 - угол=25, Т=80 - угол=45 - это пример !!!!!!
Для чего конвертация 60 в 0
конвертируется Т в положение сервы !
значения Т = 60........90 маппируются ( приводятся ) в значение угла поворота сервы....
это уже П-регулятор.... Пропорционалный регулятор....
60 - закрыт, 70 - приоткрыт, 80 - приприоткрыт..... и т.д.
Воооот теперь вроде догнал!:-) Получается, что каждый градус температуры будет не давать покоя серве. Я представляю процесс, но вот буууковкиииии....... Я всего недели 2 как с нулевым знанием языка программирования сюда прибыл))) Диодами мигать по-всякому могу уже, а вот с этим делом похоже зависну не слабо))
А так то саму логику понял, теперь бы ее еще буковками правильно написать))))
для этого нужны параметры вашего датчика Т
и весь код дайте, если это не теория, а есть замеры Т....
Диодами мигать по-всякому могу уже, а вот с этим делом похоже зависну не слабо))
да ладно........ тут всё просто....
Диодами мигать по-всякому могу уже, а вот с этим делом похоже зависну не слабо))
да ладно........ тут всё просто....
Аппетит приходит во время еды, как и скорость действия ложкой)))
А так то саму логику понял, теперь бы ее еще буковками правильно написать))))
для этого нужны параметры вашего датчика Т
и весь код дайте, если это не теория, а есть замеры Т....
Датчик обыный LM35DZ вроде как с коэффициентом 0.48828125. А насчет кода - его само-собой нет, я для этого зашел на форум советов набираться умных и затем стараться что-то там написать под свои нужды со 100500 попытки если получится)). Вот Вам большой спасибо за подсказки и советы).
А так то саму логику понял, теперь бы ее еще буковками правильно написать))))
для этого нужны параметры вашего датчика Т
и весь код дайте, если это не теория, а есть замеры Т....
Датчик обыный LM35DZ вроде как с коэффициентом 0.48828125. А насчет кода - его само-собой нет, я для этого зашел на форум советов набираться умных и затем стараться что-то там написать под свои нужды со 100500 попытки если получится)). Вот Вам большой спасибо за подсказки и советы).
Вот с датчика с сервой и начните. Ток сразу совет, разбивайте все на самодостаточные функции, а в loop оставляйте проверки условий, таймингов и т.п. Тогда будет достаточно легко проводить дополнения кода.
Ну и само собой набросайте для себя, что в это устройство будет входить и что вы от него ожидаете мин-макс. Дальше в свете хотелок можно прикинуть требуемое кол-во исполнительных выводов. И начав с малого, творчески продолжать. Глядишь и вытешем каменный цветок)))
Это что значит разбивать на самодостаточные функции? Типа "void bla_bla" - первая функция... "void bla_bla_bla" - вторая... И потом в loop просто их подставлять в условия?
Это что значит разбивать на самодостаточные функции? Типа "void bla_bla" - первая функция... "void bla_bla_bla" - вторая... И потом в loop просто их подставлять в условия?
из loop их вызывать по условиям. а так, да управление сервой это одна, считывание температуры другая, опрос клавиш третья. Кстати по температуре, если собираетесь несколько точек измерения делать, то лучше DS18B20, их все на один пин подцепите, а для ваших на каждый свой потребуется.
набросок :
этапы - 1-измерить Т, 2-повернуть серву
блииииин, в строке с17 совместил и маппирование, и поворот :( , но это только схема :)
у вас пока два действия в одной ветке - измерить Т и повернуть серву
можно-нужно разбить на две ветки - замер Т и поворот сервы
Это что значит разбивать на самодостаточные функции? Типа "void bla_bla" - первая функция... "void bla_bla_bla" - вторая... И потом в loop просто их подставлять в условия?
из loop их вызывать по условиям. а так, да управление сервой это одна, считывание температуры другая, опрос клавиш третья. Кстати по температуре, если собираетесь несколько точек измерения делать, то лучше DS18B20, их все на один пин подцепите, а для ваших на каждый свой потребуется.
Да да, я что-то читал про это... Опрос с одного пина по ID... Штука полезная... Спасибо за совет - закажу такие))
у вас пока два действия в одной ветке - измерить Т и повернуть серву
можно-нужно разбить на две ветки - замер Т и поворот сервы
Спасибо за пример! Сейчас покудесничаю))
коды сюда не забывайте грузить :)
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...