Глава 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 для резидентной программы контроллера;

Зарегистрируйтесь и оплатитеВсего 60 руб. в месяц за доступ ко всем ресурсам сайта!

  • DiagnWater_6_1.zip для программы верхнего уровня.

Зарегистрируйтесь и оплатитеВсего 60 руб. в месяц за доступ ко всем ресурсам сайта!

В программе верхнего уровня внешне изменилось только окно редактирования 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 сек.

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

 

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

 

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

0

Автор публикации

не в сети 4 часа

Эдуард

280
Комментарии: 1936Публикации: 197Регистрация: 13-12-2015

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      0
  7. Эдуард, добрый день! Подскажите, если сможете по такому вопросу. Допустим, есть контроллер на Ардуино микро, который управляет гелиосистемой. Необходимо к этому контроллеру подключить ESP8266, для передачи данных в облако и управление удаленно. И также необходимо подключить местный пульт управления, находящийся в метрах 20-30 от этого контроллера. Пульт управления представляет собой такой же контроллер Ардуино, с подключенным дисплеем 16х2, кнопками и энкодером. Как можно подключить этот местный пульт к центральному контроллеру, если UART будет занят обменом с ESP8266. В Ваших уроках вы использовали сеть RS-485. Что можно использовать в данном случае?

    0
    • Здравствуйте!
      Я бы сделал так. С пульта передается небольшое количество информации и только в одну сторону. Скорость передачи может быть невысокой. Реализовал бы односигнальный протокол, например.
      —__———__———________—__———
      Это передача кода 1101. Новый бит начинается с отрицательного фронта. Если лог 1, то импульс короткий, если 0, то длинный. Алгоритм очень простой. Выделяется отрицательный фронт и с задержкой принимается состояние сигнала.
      Передавать циклически. Длинная пауза — признак начала цикла.
      Реализовать все это в прерывании от таймера, например 500 мкс. Длительность низкого состояния импульса при лог. 1 должна быть больше 500 мкс, чтобы можно было выделить ее в обработчике прерывания по таймеру.
      Я часто использую такой способ передачи информации от периферийных контроллеров. Он простой и надежный.

      0
  8. Но если пульт отображает информацию, которая приходит на центральный контроллер, и в тоже время может передавать центральному контроллеру, допустим, задание на поддержание температуры. Тогда необходим двунаправленный обмен. У Вас в 49 уроке описывается распределенная система, в которой информацию отображает центральный контроллер, а локальные собирает ее с датчиков А мне хотелось бы сделать, чтобы локальный контроллер работал бы как задатчик и отображал рабочие параметры. А все датчики, исполнительные механизмы были бы подключены к центральному контроллеру.
    Я такую реализацию подсмотрел в приточных установках, недавно подключал на объекте. Сам центральный контроллер смонтирован в установке, к нему подключены датчики и исполнительные механизмы. Также подключен проводной пульт по RS-485. Правда не знаю какой протокол. И при желании есть опции WiFi, который дублирует проводной пульт через Web-интерфейс. И этот адаптер WiFi подключается в те же клеммы, что и проводной пульт. Походу нужно подключать не напрямую к UART, а через преобразователь интерфейсов и использовать адресацию

    0
  9. Здравствуйте Эдуард.
    Большое спасибо за статьи. С нетерпением жду продолжения. По вашим урокам начал делать Умный Дом. Большинство переключателей и датчиков подключаю проводами, но есть некоторые расположенные не удобно. По этому хотелось бы подключить их беспроводным способом. Но при этом не хочется менять батарейки слишком часто. Разрекламированный ZiGBee дороговат. Есть ли альтернатива?

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

      0
  10. Эдуард, здравствуйте!
    Хотелось бы узнать — чем все закончилось и по результатам испытаний.
    Спасибо

    0
    • Здравствуйте!
      Ничем. Михаил, который был инициатором проекта и проводил испытания на своем объекте, как-то затих, перестал интересоваться проектом.

      0

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

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

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".