+1 голос
Только начал изучать возможности Ардуино и прочел "конспект хакера" ))

Заранее прошу прощения за нуберские вопросы.

Хочу собрать схему управления отоплением и возник вопрос управления трехпроводными шаровыми кранами  CWX-15Q.

Схема управления следующая: Дано 4 контура отопления, на обратке каждого контура ставим шаровый кран и крепим датчик температуры и еще один датчик температуры высовываем в окно. Задача поддерживать в обратке температуру 42-50 град в зависимости от температуры датчика наружного воздуха, показания которого беруться из простого одномерного массива данных на 20 чисел, где уличной температуре 0 и выше град соответствует 43 град в обратке и при - 20 и ниже температура в обратке 58град.

Алгоритм управления следующий, если температура в обратке выше чем соответствующая в массиве то подаем напряжение на закрытие на 10мсек, если ниже то соответственно на открытие.

Мне не понятно следующее:

1. Как подать напряжение на двигатель 12 вольт? Схема расмотренная в примере с реле мне не подходит, так как в схеме кран или закрыт или открыт. У меня он должен потихоньку закрываться и открываться.

2. Как сократить количество занятых управляемых пинов, сейчас получается по два на двигатель и пять на датчики температуры итого 13.

3. Так как система инерциальная необходимо после каждого импульса на открытие или закрытие жать какое-то время для изменения температуры воды, но вставка задержки на 60 секунд в конце Loop не даст мне возможность использовать Ардуино для чего-то еще. Я вижу возможность решения только с модулем  времени, поправьте меня если есть возможность вести как-то еще учет времени не используя задержки.
(6 баллов) 1 1 3

2 Ответы

+2 голосов
 
Лучший ответ

Данный кран не подходит для оперативного регулирования расхода, т.к. имеет нелинейную характеристику зависимости расхода от положения затвора. Фактически это означает, что интенсивное управление расходом будет осуществляться на очень малых углах открытия затвора. На углах более 20-30 градусов расход меняться практически не будет. 

1. Как подать напряжение на двигатель 12 вольт? 

От отдельного источника питания. Включить двигатель можно через тоже реле, или через интегральный драйвер. 

2. Как сократить количество занятых управляемых пинов, сейчас получается по два на двигатель и пять на датчики температуры итого 13.

Количество свободных или занятых пинов никак не влияет на работоспособность и быстродействие программы. 

3. Так как система инерциальная необходимо после каждого импульса на открытие или закрытие жать какое-то время для изменения температуры воды, 

Идеальный вариант здесь - использовать ПИД регулятор. Но для начала можно использовать обычный интегратор. Недостатки такого решения - система очень долго будет пытаться войти в тепловой режим и также долго будет реагировать на изменения внешней температуры. При попытке ускорить этот процесс система запросто уйдет в колебательный режим.

но вставка задержки на 60 секунд в конце Loop не даст мне возможность использовать Ардуино для чего-то еще. 

Необходимо запомнить текущий штамп времени (с помощью millis()),  а впоследствии проверять, не прошло ли необходимое количество времени. Если прошло, то исполняем необходимую функцию.

(2.7 тыс. баллов) 9 29 55
выбран
+1 голос

1. Для управления двигателем используйте ШИМ и простейшую схему преобразователя ШИМ в постоянное напряжение


В качестве операционного усилителя используйте LM358.

2. Что за датчики температуры? Если ds18b20, то их все можно подключить на одну шину.

3. Используйте millis(). Для примера почитайте Мигаем светодиодом без delay

(221 баллов) 4 16
исправил
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.
  1. Un_ka

    8 балл(ов)

  2. Eriak

    4 балл(ов)

  3. AlexGorr

    2 балл(ов)

...