Глава 6. Контроллер водоснабжения, завершение разработки. Конструкция, отладка, выбор коэффициентов, испытания.

Система Умный дом

Надеюсь, заключительная статья по контроллеру водоснабжения для системы ”Умный дом”.

Предыдущая глава     Список статей     Следующая глава

В статье я подкорректирую аппаратное и программное обеспечение, представлю макетный вариант конструкции контроллера, приведу рекомендации по выбору коэффициентов и расскажу об испытаниях контроллера с реальными объектами.

В эту статью я буду дописывать всю новую информацию по незначительным доработкам и испытаниям контроллера.

 

Принципиальная схема и конструкция контроллера водоснабжения.

Подкорректированная схема контроллера выглядит так.

Схема контроллера водоснабжения

В схему добавлен диод D3, через который подключается внешнее питание 12 В. Диод защищает контроллер от подключения питания неправильной полярности.

Также диод D3 защищает стабилизатор платы Arduino Nano при подключении контроллера к USB интерфейсу компьютера. В этом случае питание + 5 В USB поступает на выход стабилизатора LM1117IMPX-5.0. Вход стабилизатора может быть замкнут на землю (при отсутствии диода) через вход питания контроллера. В этом случае через защитный диод LM1117IMPX-5.0 будет протекать недопустимый ток, что приведет к выходу стабилизатора из строя.

Некоторые сомнения по этому же поводу вызывает емкость конденсатора C6 ( 1000 мкФ ). В документации на LM1117IMPX-5.0 такая емкость указана, как предельная для защитного диода. Возможно, стоит уменьшить ее до 470 мкФ.

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

Вид устройства

Контроллер получился явно завышенных размеров. Михаил не стал тратить время на тщательную разводку печатной платы, полагая, что сейчас главное проверить полную работоспособность устройства. Разработку рабочей конструкции он решил сделать следующим этапом.

В корпусе контроллер выглядит так.

Корпус

В рабочем варианте кнопка ”Установка адреса ” должна быть скрытой. Например, небольшое отверстие, через которое ее можно нажать скрепкой или булавкой подобно кнопке ”сброс” на планшетах.

Вот макет конвертера USB – RS-485.

Конвертер USB – RS-485

Все компоненты системы на данном этапе разработки могут быть завышенных размеров, неэстетичными, но надежность страдать не должна. Прежде всего, мы проверяем надежность и стабильность системы ”Умный дом”.

 

Корректировка программного обеспечения.

Я совершил одну ошибку. Все аналоговые входы работают в диапазоне от 0 до 5 В. Значения аналоговых сигналов мы умножаем на коэффициенты, переводим в другие единицы измерения, но все равно, диапазон выходной величины остается от нуля до максимального значения.

Продавец датчиков давления USP-G41-1.2 заявляет, что устройство формирует на выходе аналоговый сигнал, линейно пропорциональный давлению жидкости, но со смещением 0,5 В.

  • давлению 0 соответствует выходное напряжение 0,5 В;
  • максимально допустимому давлению 1,2 мПа соответствует напряжение 4,5 В.

У меня была надежда, что это ошибка. Что датчик имеет стандартный аналоговый интерфейс 0…5 В. Но нет. Михаил проверил. При нулевом давлении на выходе датчика напряжение 0,5 В.

Для преобразования выходного напряжения датчика в давление недостаточно умножить значение АЦП на коэффициент. Необходимо перед умножением вычесть из кода АЦП число, соответствующее напряжению 0,5 В.

Пришлось изменить программное обеспечение, как резидентное, так и верхнего уровня. Изменение коснулись трех аналоговых каналов:

  • A0 – давление;
  • A6 – резерв 1;
  • A7 – резерв 2.

В новой версии программного обеспечения для этих каналов, перед умножением на коэффициент, к значению АЦП прибавляется аддитивная поправка. Аддитивная поправка это число типа int, которое может быть как положительным, так и отрицательным. Таким образом, можно сместить линейную характеристику датчика по вертикали, как вверх, так и вниз. В нашем случае с датчиком давления USP-G41-1.2 надо прибавить отрицательную поправку, соответствующую 0,5 В. Таким образом выходная характеристика датчика вернется к нулю.

Более подробно об аддитивной поправке я напишу ниже.

Новое программное обеспечение можно загрузить по ссылкам:

  • Glava_6_1.zip для резидентной программы контроллера;
  • DiagnWater_6_1.zip для программы верхнего уровня.

В программе верхнего уровня внешне изменилось только окно редактирования EEPROM.

Новое окно редактирования EEPROM

Появилась панель Аддитивные поправки. Значения поправок задается в вольтах в диапазоне – 5 … + 5 В.

 

Коэффициенты и аддитивные поправки.

Для аналоговых входов:

  • A1 – протечка;
  • A2 – охранный шлейф;
  • A3 – напряжение питания;
  • A4 – ток двигателя;

контроллер вычисляет значение параметра по формуле:

значение параметра = код АЦП * коэффициент.

Для аналоговых входов:

  • A0 – давление;
  • A6 – резерв 1;
  • A7 – резерв 2;

значение параметра = ( код АЦП – аддитивная поправка )* коэффициент.

Код АЦП – это сумма 20 последовательных выборок.

Аддитивные поправки это положительные или отрицательные числа типа int. В программе они задаются как напряжение смещения в диапазоне -5 … + 5 В. При загрузке в EEPROM контроллера поправки переводятся в числа целого формата, соответствующего заданному напряжению.

Такой способ возможен благодаря тому, что все аналоговые входы контроллера работают в одном диапазоне 0 … 5 В. Если кому-то необходимо задать поправки в кодах АЦП, необходимо нужный код умножить на коэффициент для  диапазона 5 В.

 

Коэффициенты и поправки для конкретных входов.

Базовый коэффициент.

Каждый аналоговый вход контроллера Ардуино работает в диапазоне 0…5 В. Значит, для всех входов есть один базовый коэффициент преобразования, соответствующий диапазону 0…5 В. Он будет использоваться для расчета окончательных коэффициентов каждого входа с учетом характеристик датчиков.

Если нам необходимо передать на центральный контроллер напряжение с аналогового входа без учета характеристики датчика, т.е. реальное напряжение на входе, то мы должны установить базовый коэффициент:

K = 5 В / 1024 / 20 = 0,00024414062.

Такие коэффициенты мы использовали для тестирования контроллера в предыдущей главе. На входы мы подавали напряжение с переменных резисторов в диапазоне 0…5 В.

Коэффициент для входа A0 (давление).

Датчик давления воды USP-G41-1.2 преобразует давление в выходное напряжение с линейной характеристикой, смещенной на 0,5 В:

  • давление 0 – выходное напряжение 0,5 В;
  • давление 1,2 мПа – выходное напряжение 4,5 В.

Чтобы сместить характеристику до 0 необходимо установить отрицательную аддитивную поправку – 0,5 В.

Масштабирующий коэффициент вычисляется так:

Коэффициент = базовый коэффициент * 1,2 мПа / ( 4,5 В – 0,5 В ) = 0,00024414062 * 1,2 / 4 = 0,00007324218.

После умножения на этот коэффициент мы получим значение давления в мПа. Если необходимо измерять давление в кПа, то коэффициент должен быть в 1000 раз больше.

Проверяем на границах диапазона:

  • для 0,5 В получается 0,5 – 0,5 = 0;
  • для 4,5 В будет ( 4,5 – 0,5 ) * 1,2 / 4 = 1,2 мПа.

Все правильно.

Коэффициент для входа A1 (протечка).

На этот вход мы подаем напряжение в диапазоне 0…5 В и сравниваем его с эмпирически определенным пороговым значением. Поэтому используем базовый коэффициент 0,00024414062.

Коэффициент для входа A2 (охранный шлейф).

Схему охранного шлейфа мы взяли из урока 17. Там же определили пороговые значения на входе АЦП.

Сопротивление шлейфа Напряжение на входе A2
5900 Ом 3,6 В
2000 Ом 2,43 В
540 Ом 1,04 В

Будем использовать:

  • базовый коэффициент;
  • минимальное напряжение шлейфа (мин. U шлейфа) 1,04 В;
  • максимальное напряжение шлейфа (макс. U шлейфа) 3,6 В.

Коэффициент для входа A3 (напряжение питания).

Для измерения напряжения питания мы используем резисторный делитель.

Схема делителя напряжения

При указанных номиналах резисторов максимальное напряжение измерения:

Uмаксимальное = ( 5 В / R2 ) * ( R1 + R2 ) = 25,5 В.

Исходя из этого, рассчитывается окончательный коэффициент:

Коэффициент = базовый коэффициент * 25,5 В / 5 В = 0,00124511716.

Этот коэффициент легко определить с помощью эксперимента:

  • установить базовый коэффициент;
  • измерить реальное значение напряжения на входе делителя;
  • вычислить коэффициент по формуле коэффициент = базовый коэффициент * реальное напряжение / измеренное программой напряжение.

Коэффициент для входа A4 (ток двигателя).

В качестве датчика тока двигателя используется резистор R20. Изначально его сопротивление было 1 Ом. После испытаний с реальным краном сопротивление было изменено на 3 Ом.

  • Слишком высокое сопротивление датчика тока приведет к большому падению напряжения на нем, что снизит напряжение на двигателе крана.
  • Слишком низкое сопротивление уменьшит точность измерения тока. Хотя высокая точность этого параметра не нужна, но мы используем небольшую часть входного диапазона АЦП. При сопротивлении R20 равном 3 Ом и токе двигателя 100 мА, на входе аналоговом входе будет напряжение всего 0,3 В. Это составляет 5 В / 0,3 В = 17. Т.е. будет использована только 1 / 17 полного диапазона АЦП. Соответственно уменьшится точность измерения. Надо искать компромисс.

Коэффициент для перевода тока в амперы будет:

Коэффициент = базовый коэффициент  / R20 = 0,00024414062 / 3 = 0,0000813802

 

Увеличение точности измерения.

О точности измерения аналоговых входов АЦП у меня есть небольшая статья на форуме сайта.

В значительной мере на погрешность измерения влияет точность и стабильность опорного напряжения. В качестве источника опорного напряжения мы используем напряжение питания микроконтроллера, которое формируется стабилизатором NCP1117ST5.0. Стабилизатор обеспечивает поддержание выходного напряжения с точностью 1% и температурной погрешностью не более 0,5 % во всем диапазоне рабочих температур.

В большинстве случаях вполне достаточная точность, но ее можно повысить простым способом. Необходимо измерить реальное значение напряжения питания микроконтроллера и пересчитать базовый коэффициент преобразования по формуле:

K = Uреальное / 1024 / 20

Подкорректированный базовый коэффициент необходимо использовать для вычисления всех коэффициентов.

Если есть возможность точно определить значения измеряемых параметров, то можно вычислить коэффициенты на основе экспериментальных данных. Пример, как это сделать, я привел для входа A3 (напряжение питания).

В этом случае будут скорректированы все статические погрешности, в том числе и погрешности датчиков.

Коэффициенты загружаются в энергонезависимую EEPROM память микроконтроллера. В принципе, этого вполне достаточно, но можно повысить надежность системы, если задать значения коэффициентов непосредственно в программе. При ”испорченных” коэффициентах EEPROM они будут загружаться из области резервных коэффициентах.

//резервные коэффициенты
#define RES_KOEFF_PREASSURE 0.00024414062 // для давления
#define RES_KOEFF_LEAK 0.00024414062 // для протечки
#define RES_KOEFF_GUARD 0.00024414062 // для охраны
#define RES_KOEFF_POWER 0.00024414062 // для питания
#define RES_KOEFF_CURRENT 0.00024414062 // для тока двигателя
#define RES_KOEFF_RES1 0.00024414062 // для резерв 1
#define RES_KOEFF_RES2 0.00024414062 // для резерв 2

Эта операция требует компиляции программы и загрузки ее в плату Ардуино. Оптимальный вариант – задать в программе теоретически вычисленные резервные коэффициенты, а в EEPROM использовать подкорректированные значения.

 

Испытания устройства с реальным краном, параметры для крана.

Михаил провел испытания контроллера водоснабжения по моей методике, затем подключил кран. Вот два коротких фильма про управление моторизированным краном.

Для управления краном необходимо задать В EEPROM 4 параметра:

Параметры крана

  • Минимальный ток – ток, при достижении которого считается, что двигатель работает.
  • Максимальный ток – ток, при превышении которого считается, что двигатель заклинило, надо снимать напряжение.
  • Время защиты – время, в течение которого после пуска двигателя защита по превышению максимального тока игнорируется. Время на пуск двигателя из статического состояния.
  • Время операции – время, отведенное на открытие или закрытие крана. При его превышении определяется ошибка.

Мы установили эти параметры следующим способом.

  • Проверили работу измерителя тока. Для этого подключили вместо двигателя сопротивление 100 Ом и убедились, что система показывает ток 12 В / 100 Ом = 0,12 А.
  • Измерили сопротивление обмотки двигателя. Оно оказалось равным 30 Ом. Из этого можно заключить, что ток через двигатель не может превышать 12 В / 30 Ом = 0,4 А.
  • Измерили ток через двигатель в рабочем режиме. Он оказался равным 20…30 мА. Установили минимальный ток равным 10 мА.
  • Пусковой ток легко определить с помощью осциллографа. Инерционные вольтметры не позволяют это сделать.  При отсутствии осциллографа можно сделать так:
    • Практически отключить время защиты, т.е. задать его очень маленьким. Мы задали 0,01 сек.
    • Увеличивать значение параметра максимальный ток до тех пор, пока при пуске двигателя не станет срабатывать защита. Это и будет значение пускового тока. Параметр максимальный ток должен быть меньше этого значения. Мы установили его равным 150 мА.
  • Время защиты задали 1 сек.
  • Кран закрывается или открывается за 5,5 сек. Время операции задали 10 сек.

На реальный объект контроллер водоснабжения еще не установлен. Так что будут еще результаты испытаний.

 

Если материал получится небольшим, то буду дописывать в эту статью.

Предыдущая глава     Список статей     Следующая глава

16 комментариев на «Глава 6. Контроллер водоснабжения, завершение разработки. Конструкция, отладка, выбор коэффициентов, испытания.»

  1. Опечатка «•Кран ЗАкрывается или ЗАкрывается за 5,5 сек. Время операции задали 10 сек»

  2. Добрый день, Эдуард!
    Спасибо за огромную работу! Использую Ваши разработки в своих проектах, только одна проблема: при загрузке скетчей с сайта комментарии на русском языке выглядят как абракадабра.
    Исправить кодировку текстовыми редакторами не получается. Подскажите, пожалуйста, как исправить.
    Windows10 64. WORD2016.

    • Здравствуйте!
      Нажимаете на ссылку.
      Открывается окно с текстом программы.
      Нажимаете на окно правой кнопкой мыши.
      Выбираете «сохранить как».
      Сохраняется исходный файл.

  3. Хочу опять повторится, что не согласен с тем, что вы называете умным домом. Умный дом дорогой хотя бы по причине того, что его не нужно программировать хозяину. Если вы программируете что-то, возитесь с какими-то контроллерами, это ваше хобби по автоматизации, а не умная система.

    • Какая разница как это называется?
      От того, что кто-то «что-то программирует и возится с какими-то контроллерами», система построенная ими не становится глупой, а будет пожалуй поумнее готовых решений из коробки.
      Как Вы наверное заметили, здесь собрались люди для которых программирование контроллеров хобби или профессия.

  4. Здравствуйте Эдуард!
    Не могли бы Вы уточнить один вопросик? Вы пробовали замерять ток в крайних положениях? На сколько он увеличивается? И сколько времени тратится на отключение питания клапана?

    • Здравствуйте!
      У Михаила осциллографа нет. Заблокировать вал двигателя крана нельзя, кран сломается. Поэтому мы пытались ка-то косвенным путем определить пусковой ток. Я не помню результаты. Я в статье писал.
      Что значит сколько времени тратится на отключения питания клапана? Несколько микросекунд. По сравнению с временем на механические операции крана это ничто.

  5. Предлагаю добавить в код для Ардуино и программу верхнего уровня (во вкладку «Вода») измерение температуры воды датчиком 18B20. Если можно, добавьте пожалуйста, 2 шт датчика на резервные входы А6, А7.

    • Здравствуйте!
      Это проблематично. Входы A6 и A7 в AtMega328 работают только в аналоговом режиме.Аналоговые датчики температуры можно подключить без переделки программы Ардуино. Только диапазон выходного напряжения датчиков желательно ближе к 5 В. Иначе точность упадет.

      • Кстати, можно задать коэффициенты, которые будут переводить в температуру. Тогда даже в программе верхнего уровня ничего переделывать не надо. Только единицы измерения будут неправильные — вольты.

      • Давайте подключим к цифровым выходам (урок 48). 13 вывод свободный. Только нужно регулировка пределов температуры срабатывания.

  6. Здравствуйте Эдуард!
    Подскажите, какова судьба этого проекта? Будут ещё статьи, или забросили проект? Очень интересны темы программ управления (высокого уровня) для Windows и Android. Ещё было интересно рассмотреть кроссплатформенное решение — типа WEB-интерфейса

    • Здравствуйте!
      Только вчера звонил Михаил. Он готовит техническое задание на новый контроллер для управления мощными нагрузками. Думаю, в ближайшее время проект продолжится. Спасибо, что поинтересовались.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *