Хорошо, спасибо! А небольшой вопросик: в Вашем примере в самом начале стоит "#define"... Это вызов библиотеки? У меня, к примеру, вызов библиотеки сервы выглядит как "#include <Servo.h> " В чем разница?
Директива #define служит для замены часто использующихся лексических единиц Си (констант, ключевых слов, операторов или выражений) на другие, так называемые идентификаторы.
Перед компиляцией программы препроцессор в соответствии с директивой #define заменит все идентификаторы , встречающиеся в программе, на соответствующий им текст.
#define pinSensorT A0
#define pinServo 9 // PWM
unsigned long tTemper;
int liveTemper=6000; // измеряем каждые 60 сек
void setup()
{
tTemper=millis();
}
void loop()
{
if((millis()-tTemper)>liveTemper)
{
int T = analogRead(pinSensorT); // если датчик аналоговый - через резистивный делитель
byte angl=map(T,20,30,0,90);
analogWrite(pinServo,angl);
tTemper=millis();
}
}
Подредактировал Ваш код под эксперименты на борде... Серва каждые 6 секунд в конвульсиях)))... Чего-то не хватает видимо
Ну для начала вы в map сжали диапазон дальше некуда. на 10гр.температуры аж 90 град.поворота. Ее и будет колбасить, она у вас десятые доли температуры отрабатывает.
Спасибо вам за помощь, я за час понял больше чем за неделю благодаря вам)))... Завтра обязательно постараюсь отписаться о результатах, ибо сейчас эксперименты зашли в тупик))) А именно я не понял из кода выше, как без библиотеки сервы, в которой содержатся все паузы и прочее, заставить серву работать и поворачиваться на 0 и 90 градусов соответственно))) Может в примере нужна все таки эта библиотека?
Ну вам же SU-27-16 написал, что это пример. Подразумевается, что библиотеки, переменные вы сами проверите, подключите и объявите. Я вам когда писал про диапазон в map, подразумевал, что температуру вы уже получаете корректную. Теперь в этом не уверен.
чем управляет серва ? при detach сервы неведомые нам силы могут и подвинуть серву в сторону противодействия :(
Не могут! Не имеют права !! Проверено электроникой !!!
Разве что только если нагрузка на валу сможет серву провернуть ( а удержания то нету! ). Но это только у 4-9 граммовых можно с трудом, но свернуть её за выходной вал, а у более тяжёлых вряд-ли удастся.
А после attach будет подана "команда" на предыдущую позицию, ту что была до detach, поэтому серва никуда и не дёрнется. Это положение библиотека сама запоминает .
что за датчик температуры ? при чтении с A0 значения например 512 - T = 250 ? если датчик от авто и делитель напряжения - то делитель неправильно рассчитан.....
строки 15,16 - в строки 19, 19А, строку 27 - в 25А, 28 убрать - зачем измерять и выводить в сериал Т каждую секунду, а применять раз в 6 сек ?
строку 27 Serial.println(T); в строку
Serial.print(" T = "); Serial.print(T); Serial.print(" angl = "); Serial.println(angl);
а можно и датчик Т вазовский прилепить, если есть возможность резьбу под него в трубе нарезать - покажет непосредственно Т воды и заменить легко, если чё
Вот блин, все работает! Серва отключается, потом через 6 секунд включается и меняет положение... Я вчера и так.... и сяк... Компилятор уже матерится на меня ща чувствую начнет причем по-русски.. А чем отличается myservo.attach от myservo.attached? И я так понял при включении сервы (аттач) необходимо в скобках прописывать пин сервы, а при выключении - нет? А если у меня две сервы в одном условии if? Детач обе вырубит чтоли?
Агааа... Выдает 0-1-0 соответственно... А если будет подключена серва с шаровым краном, у которой скорость вращения меньше раза в 3, то достаточно в строке 23 delay сделать побольше опытным путем и все?
полезно добавить в код - каждый час поворот крана от мин до макс раза три - чёбы шар не закис
Ну за час точно не закиснет))) Раз в месяц вполне достаточно... Да и к чему, если каждый день он сам будет вначале растопки полностью закрыт, а в середине уже полностью открыт... Кран примерно думаю такой будет http://www.vesta-trading.ru/catalog/klapany_reduktory/elektromagnitnye_klapany/kran_sharovoj_s_servoprivodom_1_2323.html ... И, кстати, я упустил такой момент, но думаю уже благодаря вам соображу: Растопка котла - серва закрыта (ждем 60 градусов Цельсия и началы работы функции map совместно с сервой)... Котел растопился и вышел на рабочий режим - серва в любом положении между МИН и МАХ... И тут котел затухает и согласно коду серва закрывается... Но не надо, чтобы она закрывалась, а надо, чтобы в этот момент наоборот открывалась, чтобы теплоноситель в системе отопления продолжал циркулировать предотвращая замерзание системы в "слабых" местах.
Агааа... Выдает 0-1-0 соответственно... А если будет подключена серва с шаровым краном, у которой скорость вращения меньше раза в 3, то достаточно в строке 23 delay сделать побольше опытным путем и все?
Какой delay(), все эти гадости в топку. В рабочем коде, любые delay()подобные команды, считать впадением в ересь и проводить публичное аутодафе. И не важно, что "ведь все работает", эти грабли все равно однажды ударят.
Если верить паспорту, то рабочий режим, это открыто - закрыто. От постоянных ерзаний в средних положениях, он умрет достаточно быстро. А вот систему электроуправления, поищите более поподробную. Похоже это обычный двигатель с концевиками.
Andrey-S, сервопривод - широкое определение, ваш кран - это мотор-редуктор с концевыми выключателями( к Servo как вы использовали в опытах - не имеет отношения)...
И тут котел затухает и согласно коду серва закрывается... Но не надо, чтобы она закрывалась, а надо, чтобы в этот момент наоборот открывалась, чтобы теплоноситель в системе отопления продолжал циркулировать предотвращая замерзание системы в "слабых" местах.
для этого нужен ещё один признак-флаг - котёл в норме или нет
если котёл в норме и >60 - открыть, если котёл в норме и <60 - закрыть, если котёл НЕ в норме - открыть независимо от температуры и оповестить вас - АВАРИЯ
как будете отлавливать котёл ? можно по Т в топке....
Удобно управлять в двухпроводном варианте: подал напряжение- провернулся и сам остановился, напряжение можно не снимать. Подал обратную полярность- опять повернулся. Вот только там моторчик простой на 12 Вольт, как-то останавливать посередине - это надо на короткое время питание подавать и насколько повернулся неизвесно, надо смотреть результат этого управления и корректировать.. Это не серва где всё понятно.
Судя по картинке выведены концевики- а это геморройс логикой и программой
Лучше использовать 12 Вольтовые и именно двухпроводные- я уже писал как легко ими управлять с Ардуино.
Да и ток потребления при повороте там совсем смешной- миллиампер 300 будет, любой адаптер на 1 Ампер и ещё через пару диодов аккумулятор подцепить от машины с преобразователем на 100 -200 Ватт ( синусный- обязательно для работы циркуляционника) -вообще автономно достаточно долго будет. Ну и 220 Вольт не будет рядом с трубами-водой-Ардуиной
а ещё лучше поставить трёхходовой кран - один выход на котёл, второй в обход котла - циркуляция ВСЕГДА есть, управление температурой положением трёхходовика ( сколько воды через котёл для нагрева, а сколько через байпас )
Серву, да помощьней, ещё как-то закрепить на вентиле надо умудриться, да чтобы она себя саму не свернула. Упрётся- выломает всё или себя сломает. Вы сможете это сделать? А какой ток при этом упоре жрать будет?
А токи у мощьных серв при старте единицы Ампер, питание ей подай стабильное, с простой кнопки(программы) не поуправляешь. Вам 5 Вольт 5 Ампер минимум надо.
Куча минусов.
А китайский за 30 уе как бюджетный не катит? Тюх-тюх-тюх за 5- 2 секунды от 7 до 15 Вольт при 300 миллиамперах
Удобно управлять в двухпроводном варианте: подал напряжение- провернулся и сам остановился, напряжение можно не снимать. Подал обратную полярность- опять повернулся. Вот только там моторчик простой на 12 Вольт, как-то останавливать посередине - это надо на короткое время питание подавать и насколько повернулся неизвесно, надо смотреть результат этого управления и корректировать.. Это не серва где всё понятно.
А, кстати, неплохой вариант! Опытным путем можно вычислить среднее положение и заморочиться чуть с кодом. К, примеру, такой кран с "али" я бы себе поставил в подвал на капельный полив и запрограммировал ардуинку по времени.. Каждый вечер в такое то время на 2ч открывать. И еще с телефона прям врубать/вырубать :-). Благодарю за "пиннок", закажу себе такой кран для дома. А если взять опять же такой кран только необходимым диаметром для котла 1" ( http://ru.aliexpress.com/store/product/1-DN25-DC12V-Motorized-Ball-Valve... ) например.... и уйти от среднего положения совсем и от "mapинга"... Скажем, греем котел сразу до 70-80градусов (помним, что минимальная рабочая температура котла 60град) и потом полностью открываем кран. Если температура падает до 60, то снова закрываем. Ну раза 3 он крутанется за час и встенет до конца в открытом положении. И реализовать все через обычное 3х-пиновое реле как раз. Что скажете по этому поводу?
У меня сейчас на улице "0", а котёл, согласно погодному графику, готовит 35-40 градусов подачу. В тёплый пол уходит 30 ( свой регулятор), в большие радиаторы всё что даёт котёл.
Не понял что такое: (помним, что минимальная рабочая температура котла 60град). У вас что, нет запаса мощьности и приходится её где-то накапливать? Обычно стараются держать минимум температуры- так выше КПД( Карно писАл)
коды сюда не забывайте грузить :)
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Хорошо, спасибо! А небольшой вопросик: в Вашем примере в самом начале стоит "#define"... Это вызов библиотеки? У меня, к примеру, вызов библиотеки сервы выглядит как "#include <Servo.h> " В чем разница?
#define pinServo 3 // PWM
компилятор встретив в тексте pinServo подставит вместо него 3 ( макроподстановка )
удобнее в тексте применять мнемонопонятное определение, чем просто - 3.....
с инклудами - всё сложнее - читайте про С++ ( в частном случае - это подключение библиотеки )
Подредактировал Ваш код под эксперименты на борде... Серва каждые 6 секунд в конвульсиях)))... Чего-то не хватает видимо
pinMode( 3 , OUTPUT ) и pinMode( pinServo , OUTPUT ) - одно и тоже, НО второе - понятнее
Директива #define служит для замены часто использующихся лексических единиц Си (констант, ключевых слов, операторов или выражений) на другие, так называемые идентификаторы.
Перед компиляцией программы препроцессор в соответствии с директивой #define заменит все идентификаторы , встречающиеся в программе, на соответствующий им текст.
Подредактировал Ваш код под эксперименты на борде... Серва каждые 6 секунд в конвульсиях)))... Чего-то не хватает видимо
Ну для начала вы в map сжали диапазон дальше некуда. на 10гр.температуры аж 90 град.поворота. Ее и будет колбасить, она у вас десятые доли температуры отрабатывает.
а что вы повесили на пин A0 ? выше был пример с вопросами.....
в вашем коде пин A0 ловит помехи, считывает от 0 до 1023 случайно - вот серву и колбасит :(
в примере не все установки прописаны !!!!!!!!!!!!!!!!
А вроде бы как можно писать:
Это тоже самое или я ерунду написал?
так больше памяти расходуется... int - много, byte - 0....255 - хватит, ибо пинов больше не бывает
но лучше для экономии памяти так
void
setup
()
{
А вроде бы как можно писать:
Это тоже самое или я ерунду написал?
Ну а если очень сильно захотите как у вас в примере, то
const byte ledPin = 13;
const не даст вам в коде изменить его значение. И вроде как размещает эту переменную во флэш, а не в оперативке (в этом не уверен)
Спасибо вам за помощь, я за час понял больше чем за неделю благодаря вам)))... Завтра обязательно постараюсь отписаться о результатах, ибо сейчас эксперименты зашли в тупик))) А именно я не понял из кода выше, как без библиотеки сервы, в которой содержатся все паузы и прочее, заставить серву работать и поворачиваться на 0 и 90 градусов соответственно))) Может в примере нужна все таки эта библиотека?
Ну вам же SU-27-16 написал, что это пример. Подразумевается, что библиотеки, переменные вы сами проверите, подключите и объявите. Я вам когда писал про диапазон в map, подразумевал, что температуру вы уже получаете корректную. Теперь в этом не уверен.
Походу я небезнадежен:-) Осталось сюда attach-detach впихнуть и, думаю, будет практически то, что надо!
чем управляет серва ? при detach сервы неведомые нам силы могут и подвинуть серву в сторону противодействия :(
Не могут! Не имеют права !! Проверено электроникой !!!
Разве что только если нагрузка на валу сможет серву провернуть ( а удержания то нету! ). Но это только у 4-9 граммовых можно с трудом, но свернуть её за выходной вал, а у более тяжёлых вряд-ли удастся.
А после attach будет подана "команда" на предыдущую позицию, ту что была до detach, поэтому серва никуда и не дёрнется. Это положение библиотека сама запоминает .
Попрбуйте так:
int
T = analogRead(pinSensorT);
T=T*0.48828125;
что за датчик температуры ? при чтении с A0 значения например 512 - T = 250 ? если датчик от авто и делитель напряжения - то делитель неправильно рассчитан.....
строки 15,16 - в строки 19, 19А, строку 27 - в 25А, 28 убрать - зачем измерять и выводить в сериал Т каждую секунду, а применять раз в 6 сек ?
строку 27
Serial
.println(T);
в строкуSerial
.print(" T = ");
Serial
.print(T);
Serial
.print("
angl= ");
Serial
.println(
angl);про sprintf() - попозже изучите :)
trembo, спасибо за #65
Датчик вот такой http://arduino55.ru/index.php?route=record/record&blog_id=65&record_id=71 ... Пока работает неплохо, не смотря на мои всяческие издевательства))) Показывает довольно корректную температуру.
я так понимаю он для опытов ? вы же Т воды собирались измерять....
А я его через термоклей к металлической трубе пришпандорю)))) Можно предварительно наполовину залить эпоксидным клеем))
По поводу вышеизложенного кода с дополнениями ниже - попробую сейчас и отпишусь!
можно и так....
а можно и датчик Т вазовский прилепить, если есть возможность резьбу под него в трубе нарезать - покажет непосредственно Т воды и заменить легко, если чё
строка 5А - const float k=0.48828125;
строка 15 -
int
T = analogRead(pinSensorT) * k ;
это облегчение компилятору и для чтения текста удобнее...
когда проект разрастётся, может придётся поменять имя - по названию переменной/константы всё понятно, например
const float kLM35toT=0.48828125;
или k_LM35_To_T - но так выделять для копирования одним кликом не получится :(
Вот блин, все работает! Серва отключается, потом через 6 секунд включается и меняет положение... Я вчера и так.... и сяк... Компилятор уже матерится на меня ща чувствую начнет причем по-русски.. А чем отличается myservo.attach от myservo.attached? И я так понял при включении сервы (аттач) необходимо в скобках прописывать пин сервы, а при выключении - нет? А если у меня две сервы в одном условии if? Детач обе вырубит чтоли?
у второй сервы будет другое имя
аттач - указание подключиться, а аттачед - это вопрос, проверка подключена ли серва
воткните в код Serial.println( myservo.attached ); в строки 20А, 21А, 24А - увидите что происходит
при детаче МК знает пин сервы от аттача
не читали чоли ? http://arduino.ru/Reference/Library/Servo
Агааа... Выдает 0-1-0 соответственно... А если будет подключена серва с шаровым краном, у которой скорость вращения меньше раза в 3, то достаточно в строке 23 delay сделать побольше опытным путем и все?
да
у серв есть параметр уголПоворота за время - т.е. угловая скорость, можно вычислить сколько время серва будет ворочаться на заданный угол
разве в кране стоит серва ? а не мотор-редуктор ? есть фото, описание указанного шарового крана ?
полезно добавить в код - каждый час поворот крана от мин до макс раза три - чёбы шар не закис
полезно добавить в код - каждый час поворот крана от мин до макс раза три - чёбы шар не закис
Ну за час точно не закиснет))) Раз в месяц вполне достаточно... Да и к чему, если каждый день он сам будет вначале растопки полностью закрыт, а в середине уже полностью открыт... Кран примерно думаю такой будет http://www.vesta-trading.ru/catalog/klapany_reduktory/elektromagnitnye_klapany/kran_sharovoj_s_servoprivodom_1_2323.html ... И, кстати, я упустил такой момент, но думаю уже благодаря вам соображу: Растопка котла - серва закрыта (ждем 60 градусов Цельсия и началы работы функции map совместно с сервой)... Котел растопился и вышел на рабочий режим - серва в любом положении между МИН и МАХ... И тут котел затухает и согласно коду серва закрывается... Но не надо, чтобы она закрывалась, а надо, чтобы в этот момент наоборот открывалась, чтобы теплоноситель в системе отопления продолжал циркулировать предотвращая замерзание системы в "слабых" местах.
Агааа... Выдает 0-1-0 соответственно... А если будет подключена серва с шаровым краном, у которой скорость вращения меньше раза в 3, то достаточно в строке 23 delay сделать побольше опытным путем и все?
Какой delay(), все эти гадости в топку. В рабочем коде, любые delay()подобные команды, считать впадением в ересь и проводить публичное аутодафе. И не важно, что "ведь все работает", эти грабли все равно однажды ударят.
Если верить паспорту, то рабочий режим, это открыто - закрыто. От постоянных ерзаний в средних положениях, он умрет достаточно быстро. А вот систему электроуправления, поищите более поподробную. Похоже это обычный двигатель с концевиками.
Andrey-S, сервопривод - широкое определение, ваш кран - это мотор-редуктор с концевыми выключателями( к Servo как вы использовали в опытах - не имеет отношения)...
И тут котел затухает и согласно коду серва закрывается... Но не надо, чтобы она закрывалась, а надо, чтобы в этот момент наоборот открывалась, чтобы теплоноситель в системе отопления продолжал циркулировать предотвращая замерзание системы в "слабых" местах.
для этого нужен ещё один признак-флаг - котёл в норме или нет
если котёл в норме и >60 - открыть, если котёл в норме и <60 - закрыть, если котёл НЕ в норме - открыть независимо от температуры и оповестить вас - АВАРИЯ
как будете отлавливать котёл ? можно по Т в топке....
Да, это шаровой вентиль с моторчиком и концевиками.
У меня такие есть http://www.aliexpress.com/item/1-2-DN15-DC12V-3-Way-T-Port-Electric-Ball-Valve-Brass-Motorized-Ball-Valve-5/32263252100.html
Удобно управлять в двухпроводном варианте: подал напряжение- провернулся и сам остановился, напряжение можно не снимать. Подал обратную полярность- опять повернулся. Вот только там моторчик простой на 12 Вольт, как-то останавливать посередине - это надо на короткое время питание подавать и насколько повернулся неизвесно, надо смотреть результат этого управления и корректировать.. Это не серва где всё понятно.
у ТС питание 220
Судя по картинке выведены концевики- а это геморройс логикой и программой
Лучше использовать 12 Вольтовые и именно двухпроводные- я уже писал как легко ими управлять с Ардуино.
Да и ток потребления при повороте там совсем смешной- миллиампер 300 будет, любой адаптер на 1 Ампер и ещё через пару диодов аккумулятор подцепить от машины с преобразователем на 100 -200 Ватт ( синусный- обязательно для работы циркуляционника) -вообще автономно достаточно долго будет. Ну и 220 Вольт не будет рядом с трубами-водой-Ардуиной
ага, Ну и 220 Вольт не будет рядом с трубами-водой-Ардуиной
если ТС кулибин то - простой поворотный кран, плечо и серва посильней....
можно будет управлять проходным отверстием крана :)
если ТС кулибин то - простой поворотный кран, плечо и серва посильней....
можно будет управлять проходным отверстием крана :)
О, именно так и собираюсь на своей ректификационной колонне замутить.
а ещё лучше поставить трёхходовой кран - один выход на котёл, второй в обход котла - циркуляция ВСЕГДА есть, управление температурой положением трёхходовика ( сколько воды через котёл для нагрева, а сколько через байпас )
схемку нарисовать ? ;)
рисовать неохота....
выхЦиркНасос - входТрёхХод - 1выхТрёхХод - вхКотёл - выхКотёл - батареи отопления - вхЦиркНасос
- 2выхТрёхХод - выхКотёл -
:)
если ТС кулибин то - простой поворотный кран, плечо и серва посильней....
можно будет управлять проходным отверстием крана :)
О, именно так и собираюсь на своей ректификационной колонне замутить.
программное управление-защита само сбой, а поставить микрики в крайних положениях не помешает, ибо какая серва ? - может и шток крану свернуть :(
вот для домашнего пользования, бюджетный для некоторых, наверное :( http://www.payor.ru/catalog/avtomatika/Oborudovanie-Danfoss/Elektricheskie-sredstva-upravleniya-teplosnabzheniem-kottedzhej/Pogruzhnye-i-nakladnye-termostaty/087N665000/?gclid=CNuh1urf3sMCFaHhcgodi7IAVw
Серву, да помощьней, ещё как-то закрепить на вентиле надо умудриться, да чтобы она себя саму не свернула. Упрётся- выломает всё или себя сломает. Вы сможете это сделать? А какой ток при этом упоре жрать будет?
А токи у мощьных серв при старте единицы Ампер, питание ей подай стабильное, с простой кнопки(программы) не поуправляешь. Вам 5 Вольт 5 Ампер минимум надо.
Куча минусов.
А китайский за 30 уе как бюджетный не катит? Тюх-тюх-тюх за 5- 2 секунды от 7 до 15 Вольт при 300 миллиамперах
http://arduino.ru/forum/programmirovanie/zaderzhka-po-vremeni-dlya-servy?page=1#comment-100371
проектировали/делали брату на даче.... так он сразу отказался от сервы, спать говорит хочу спокойно :)
сделал ему трёхходовой вентиль из двух тюх-тюх-тюшных работающих в противофазе....
....спит спокойно :)
Да, это шаровой вентиль с моторчиком и концевиками.
У меня такие есть http://www.aliexpress.com/item/1-2-DN15-DC12V-3-Way-T-Port-Electric-Ball-Valve-Brass-Motorized-Ball-Valve-5/32263252100.html
Удобно управлять в двухпроводном варианте: подал напряжение- провернулся и сам остановился, напряжение можно не снимать. Подал обратную полярность- опять повернулся. Вот только там моторчик простой на 12 Вольт, как-то останавливать посередине - это надо на короткое время питание подавать и насколько повернулся неизвесно, надо смотреть результат этого управления и корректировать.. Это не серва где всё понятно.
А, кстати, неплохой вариант! Опытным путем можно вычислить среднее положение и заморочиться чуть с кодом. К, примеру, такой кран с "али" я бы себе поставил в подвал на капельный полив и запрограммировал ардуинку по времени.. Каждый вечер в такое то время на 2ч открывать. И еще с телефона прям врубать/вырубать :-). Благодарю за "пиннок", закажу себе такой кран для дома. А если взять опять же такой кран только необходимым диаметром для котла 1" ( http://ru.aliexpress.com/store/product/1-DN25-DC12V-Motorized-Ball-Valve... ) например.... и уйти от среднего положения совсем и от "mapинга"... Скажем, греем котел сразу до 70-80градусов (помним, что минимальная рабочая температура котла 60град) и потом полностью открываем кран. Если температура падает до 60, то снова закрываем. Ну раза 3 он крутанется за час и встенет до конца в открытом положении. И реализовать все через обычное 3х-пиновое реле как раз. Что скажете по этому поводу?
Почему бы и нет?
У меня сейчас на улице "0", а котёл, согласно погодному графику, готовит 35-40 градусов подачу. В тёплый пол уходит 30 ( свой регулятор), в большие радиаторы всё что даёт котёл.
Не понял что такое: (помним, что минимальная рабочая температура котла 60град). У вас что, нет запаса мощьности и приходится её где-то накапливать? Обычно стараются держать минимум температуры- так выше КПД( Карно писАл)