Двухпозиционный (ON/OFF) контроллер с терморезистором Pt100 и управлением со смартфона через bluetooth модуль HC-05

Состав системы
Как работает
Индикация LCD
Управление системой кнопками
Управление системой со смартфона
Подключение
Что нужно для проекта
Возможные проблемы
Скетч
Скетч для чтения данных с порта

Фото контроллера
Версия для печати

Вернуться на главную

На этой страничке представлена простейшая система управления подогревом по типу включить/выключить, которая использует в качестве измерителя температуры самодельный температурный преобразователь термосопротивления Pt100.

Двухпозиционный (ON/OFF) контроллер

Двухпозиционный (ON/OFF) контроллер

Что может данная система управления. Она включает и выключает подогреватель при заданных температурах. Выдает сигнализацию по высокой и низкой температуре. Все события выводятся на LCD-дисплей. Система позволяет настраивать все необходимые параметры и записывать их в память Arduino. В системе есть полностью ручной режим (включение/выключение).

В чем же разница с контроллером, представленным на этой страничке сайта? В данную схему добавлена возможность получать данные о температуре и управлять системой со смартфона по средством bluetooth модуля HC-05.

СОСТАВ СИСТЕМЫ

PLC Arduino UNO с шилдом Sensor Shield v 5.0 (питание 7-12 В постоянного тока), LCD-дисплей с шиной I2C, DC-DC конвертер для питания реле и дисплея, реле включения и выключения подогревателя и реле сигнализации, кнопочный пост с тремя кнопками и самодельный температурный преобразователь термосопротивления Pt100. Датчик Pt100 можно использовать штатный, установленный на системе подогрева. Также для связи смартфона и Arduino добавлен bluetooth модуль HC-05.

КАК РАБОТАЕТ

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

ИНДИКАЦИЯ LCD

Верхняя строчка :
"Auto ON" - автоматический режим, подогрев включен
"Auto OFF" - автоматический режим, подогрев выключен
"Manual ON" - ручной режим, подогрев включен
"Manual OFF" - ручной режим, подогрев выключен
"TLow" - сигнализация по низкой температуре
"THigh" - сигнализация по высокой температуре
Нижняя строчка :
"Temp=XX.XXºC" - текущая температура в ºC
"!" - введена поправка температуры (отличается от 0)
в режиме настроек : пункты меню настроек

УПРАВЛЕНИЕ СИСТЕМОЙ КНОПКАМИ

Есть два способа управления данной системой : с помощью трех кнопок : НАСТРОЙКИ, ВВЕРХ, ВНИЗ, и по средством специального приложении на смартфоне. Рассмотрим функции тактовых кнопок подробно :

Кнопка НАСТРОЙКИ

При нажатии этой кнопки вы попадете в меню настроек и будете циклично переходить по пунктам меню. После последнего пункта меню вы снова вернетесь на основной экран (показания температуры). Изменение параметров осуществляется кнопками ВВЕРХ и ВНИЗ. Все цифровые параметры имеют верхнюю и нижнюю границы, за которые вы выйти не сможете. Изменение цифровых параметров сразу принимается системой, подтверждение не нужно. Обратите внимание, верхнюю и нижнюю границы, а также значение по умолчанию вы можете сами изменять в скетче.

Пройдемся по пунктам меню Настройки.

  • MinTemp XXºC (minimum temperature) : температура включения подогревателя в ºC. Значение по умолчанию - 29ºC. Нижняя граница - 0ºC, верхняя - 980ºC.
  • MaxTemp XXºC (maximum temperature) : температура выключения подогревателя в ºC. Значение по умолчанию - 33ºC. Нижняя граница - 0ºC, верхняя - 999ºC.
  • AlarMin XXºC (alarm minimum temperature) : температура активации сигнализации по низкой температуре в ºC. Значение по умолчанию - 28ºC. Нижняя граница - 0ºC, верхняя - 990ºC.
  • AlarMax XXºC (alarm maximum temperature) : температура активации сигнализации по высокой температуре в ºC. Значение по умолчанию - 40ºC. Нижняя граница - 0ºC, верхняя - 999ºC.
  • AlarmDiff (alarm temperature differential) : дифференциал сигнализации в ºC. Значение по умолчанию - 0ºC. Нижняя граница 0ºC, верхняя 990ºC.
  • TempCor (temperature correction) : поправка температуры в ºC. Значение по умолчанию - 0ºC. Нижняя граница -100ºC, верхняя +100ºC. Эта поправка добавляется к замеренной температуре. Если поправка отличается от нуля, в нижней строчке появится восклицательный знак.
  • Min_Volt нижняя граница вольтажа с аналогового порта датчика Pt100, переведенная в цифровой вид. Значение по умолчанию - 39. Нижняя граница 0, верхняя 1023. Эта величина и далее необходимы для калибровки самодельного преобразователя термосопротивления Pt100.
  • MinPt соответствующая нижней границе температура в ºC. Значение по умолчанию - 0ºC. Нижняя граница 0ºC, верхняя +1000ºC.
  • Max_Volt верхняя граница вольтажа с аналогового порта датчика Pt100, переведенная в цифровой вид. Значение по умолчанию - 546. Нижняя граница 0, верхняя 1023.
  • MaxPt соответствующая верхней границе температура в ºC. Значение по умолчанию +100ºC. Нижняя граница 0ºC, верхняя +1000ºC.
  • Alarm ON/OFF включение или выключение сигнализации по температуре. Значение по умолчанию - ON (сигнализация включена). При включенной сигнализации и выходе температуры за пределы уставок подается питание на реле сигнализации, а на LCD выводится "TLow" - низкая температура или "THigh" - высокая температура. При отключенной сигнализации реле срабатывать не будет, но текст на экране все равно появится.
  • Auto/Man переключение между автоматическим и ручным режимом. Значение по умолчанию - Auto (автоматический режим). При переходе в ручной режим реле подогревателя отключается.
  • Heater ON/OFF включение или выключение подогревателя. Значение по умолчанию - OFF (выключен). Этот пункт меню работает только в ручном режиме.
  • ReadSet. (UP) : чтение настроек из энергонезависимой памяти Arduino. При нажатии кнопки ВВЕРХ настройки из памяти PLC перейдут в оперативную. Обратите внимание, в настройки записываются только цифровые параметры (пункты 1 - 6).
  • SaveSet. (UP) : запись настроек в энергонезависимую память Arduino. При нажатии кнопки ВВЕРХ текущие параметры запишутся в постоянную память PLC. Обратите внимание, в настройки записываются только цифровые параметры. При перезагрузке контроллера (выключение - включение) именно эти настройки загрузятся в программу.
  • Default (UP) : загрузка значений по умолчанию (пункты 1 - 6). При нажатии кнопки ВВЕРХ параметры, определенные в начале скетча, загрузятся в оперативную память PLC (в текущие настройки). Эта функция может быть полезна, когда вы запутались в регулировках и хотите все вернуть в исходное положение. Но есть и еще одна причина ее использования. Если вы на одну и ту же плату Arduino постоянно записываете скетчи разных проектов, возможна ситуация, когда параметры одного проекта запишутся в настройки другого. Конечно, это можно исправить, но представьте, что в параметре, где должно быть, например, число 10, стоит 32000. Вручную кнопками ВВЕРХ или ВНИЗ корректировать это очень долго, проще сбросить настройки к заводским, а уже затем их подправить.

Кнопки ВВЕРХ-ВНИЗ

Этими кнопками меняются значения параметров.

УПРАВЛЕНИЕ СИСТЕМОЙ СО СМАРТФОНА

Второй способ управления системой - из приложения на смартфоне через bluetooth модуль HC-05. Как его подключить, рассказывается ниже. Для работы нам необходимо установить на смартфон специальное приложение. Их довольно много, и чтобы выбрать правильное, нужно ответить на вопрос, что мы хотим от него получить. Конкретно в этом проекте необходимо заменить (продублировать) функции тактовых кнопок, а также иметь возможность получать данные о текущей температуре с датчика. Исходя из этого, в арсенале приложения должны быть джойстик или четыре кнопки (право-лево для перемещения по пунктам меню настройки, и вверх-вниз для изменения параметров). Также понадобятся переключатели ON/OFF для ручного управления системой. А чтобы получать данные с датчика, подойдет любой индикатор цифрового типа с возможностью настройки диапазона, например, спидометр (естественно, в нашем случае он будет показывать температуру).

Раз уж зашла речь о приложениях, расскажу, какие я попробовал и почему от некоторых отказался.

Arduino Bluetooth Controller 5.3 (MyValley Apps)
Почему то джойстик не работает без подключения к интернету. После подключения выдает ошибку. Удалил.
Ardutooth 1.2.4 (Frederik Hauke)
Чистый терминал. Функций управления нет. Удалил.
Dabble 1.0.6 (STEMpedia)
Не подсоединяет bluetooth, пока не включена gps-навигация (а зачем?), но при этом выдает предупреждение, что gps нельзя включить, если работает bluetooth - замкнутый круг. Удалил.
Arduino Controller - Bluetooth Terminal for Arduino (AMSoftwares)
Не обнаруживает модуль HC-05. Удалил.
Arduino BlueControl 4.5 (Broxcode)
Очень хорошее приложение, много настроек. Есть и джойстик и кнопки. Единственный минус - кривая реализация получения данных (панель Metrics). Оставил, как запасной вариант.
Bluetronics 1.0.1 (Aniket Raj)
Это приложение было взято за основу для этого проекта. Но это не значит, что оно самое лучшее. При всех своих плюсах : красивый дизайн, много возможностей по управлению, продвинутые функции (например, построение графика полученных данных), есть и минус - практически нет настроек, а те, что есть, не записываются в память при выходе из программы. Учитывая, что версия приложения 1.0.1, надеюсь, автор его не забросит и в будущем доработает.

ПОДКЛЮЧЕНИЕ СМАРТФОНА

Установите приложение Bluetronics на свой смартфон. Активизируйте Bluetooth. Запустите приложение. При первом запуске оно попросит разрешение на определение местоположения, разрешите. Нажмите на "Select Your Device".

Приложение Bluetronics

В открывшемся списке доступных устройств выберите модуль HC-05.

Приложение Bluetronics

Кнопка "Connect" станет активной. Нажмите на нее.

Приложение Bluetronics

Дождитесь окончания процесса подсоединения.

Приложение Bluetronics

Об успешном подсоединении вам подскажет надпись внизу экрана.

Приложение Bluetronics

Теперь пройдемся по некоторым элементам управления. Для начала выберем джойстик "Arrow Key". Здесь представлены пять кнопок. Две из них (лево - left - L и право - right - R) в нашем проекте отвечают за переход по пунктам меню Настройки. С помощью двух других (верх - top - T и низ - bottom - B) можно изменять текущий параметр в настройках. Эти четыре стрелки дублируют функции тактовых кнопок. Пятая кнопка OK в проекте не используется.

Приложение Bluetronics

Следующим элементом управления будет переключатель "Switch". На этой вкладке их несколько штук. Конкретно в этом проекте переключатель №1 включает-выключает автоматический режим работы подогревателя, переключатель №2 включает-выключает подогреватель, если он находится в ручном режиме, а переключатель №3 включает-выключает сигнализацию по температуре. К сожалению в этом приложении нельзя переименовать названия переключателей.

Приложение Bluetronics

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

Приложение Bluetronics

Итак, стоит ли вообще использовать управление со смартфона, чтобы заменить им те же тактовые кнопки и LCD-экран. Можно, только, если вы напишите свое собственное приложение под конкретный проект. В остальных случаях (при использовании универсальных приложений) это не имеет смысла, так как главное преимущество такого управления - дистанционность полностью нивелируется отсутствием обратной связи от контроллера к смартфону. Например, управляя со смартфона настройками, вы не видите реакцию на ваши действия на экране смартфона и вам нужно подходить и смотреть ее на экране LCD.

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

ПОДКЛЮЧЕНИЕ

Здесь приведено соединение всех элементов системы управления, Arduino (через шилд) и самого подогревателя. В виде схемы подключение представлено ниже.

Подключение подогревателя

Подключение подогревателя

Плата Arduino и Sensor-shield

  • питание Arduino : от адаптера 7-12VDC (2A)
  • питание шилда (перемычка убрана) : от адаптера 7-12VDC (2A) через понижающий DC-DC преобразователь типа LM2596 (не менее 2А)
  • LCD-дисплей 1602 + модуль I2C : питание от шилда (подсоединяем GND и VCC к любым свободным пинам G и V цифровых входов), SDA (I2C) - A4 (шилд), SCL (I2C) - A5 (шилд)
  • реле включения/выключения подогревателя : сигнал от Arduino - цифровой пин 9, питание от шилда (подсоединяем GND и VCC реле к пинам G и V пина 9)
  • реле сигнализации : сигнал от Arduino - цифровой пин 8, питание от шилда (подсоединяем GND и VCC реле к пинам G и V пина 8). Контакты реле вы можете подключить к общесудовой сигнализации или сделать местную
  • сигнал от кнопки НАСТРОЙКИ : вход в Arduino - цифровой пин 7. Пины + и - кнопочного поста, общие для всех кнопок НАСТРОЙКИ, ВВЕРХ, ВНИЗ, подсоединяем к любым свободным пинам V и G цифровых входов. Линию сигнала и земли шунтируем резистором 10кОм
  • сигнал от кнопки ВВЕРХ : вход в Arduino - цифровой пин 6. Линию сигнала и земли шунтируем резистором 10кОм
  • сигнал от кнопки ВНИЗ : вход в Arduino - цифровой пин 5. Линию сигнала и земли шунтируем резистором 10кОм
  • сигнал от контроллера Pt100 к Arduino - аналоговый пин A0. Питание к любым свободным пинам G и V цифровых входов.
  • входы от термодатчика Pt100 - к клеммам на самодельном термоконтроллере

Подогреватель

Настоятельно рекомендуется подключать подогреватель через контактор, катушку которого питать от реле системы. Реле включения/выключения подогревателя : COM - источник питания с напряжением аналогичным катушке контактора подогревателя, NO - клемма катушки контактора подогревателя (например А1). Минусовой или нулевой провод контактора можно оставить штатный.

Bluetooth модуль HC-05

  • пин VCC модуля - к любому пину питания 5 вольт Arduino или шилда. Лучше питание брать с Arduino - оно более стабильно.
  • пин GND модуля - к любому пину земли Arduino или шилда.
  • пин TX модуля - к пину D0 или RX Arduino или RX шилда.
  • пин RX модуля - к пину D1 или TX Arduino или TX шилда. Обратите внимание, сигнал с Arduino (пин TX) на модуль HC-05 (пин RX) нужно снизить с 5 вольт до 3,3 вольт. Для этого используется делитель напряжения. Схему смотрите ниже.
  • пины KEY и STATE в данном проекте не используются.

Примечание. Рекомендую использовать для проекта шилд версии 5.0 - на нем есть отдельная колодка для подключения bluetooth модуля.

Плата для bluetooth модуля HC-05

Для удобства работы с модулем HC-05 вы можете собрать небольшую плату. На ней, кроме колодок под пины, устанавливается и делитель напряжения. Ниже представлена электросхема платы.

Электросхема платы

Электросхема платы

Ниже приведена схема пайки. За базу взята макетная плата 30х25 мм. Конечно вы можете расположить элементы по другому и более компактно. Обратите внимание, для экономии места на плате резисторы установлены вертикально. Колодка ARDUINO(M) - это штыревой соединитель на 6 пинов, колодка ARDUINO(F) - это разъем PBS на 6 пинов, колодка HC-05 - тоже разъем PBS на 6 пинов.

Схема пайки платы

Схема пайки платы

ЧТО НУЖНО ДЛЯ ПРОЕКТА

  • PLC Arduino UNO (datasheet) - 1 шт
  • Sensor Shield v 5.0 (datasheet) - 1 шт
  • понижающий DC-DC преобразователь типа LM2596 (не менее 2А) (datasheet) - 1 шт
  • LCD-дисплей 1602 (datasheet) + модуль I2C - 1 шт
  • самодельный температурный преобразователь термосопротивления Pt100 - 1 шт
  • реле одноканальное (катушка 5VDC) (datasheet) - 2 шт
  • кнопка тактовая с колпачком (datasheet) - 3 шт
  • резистор 10 кОм (0,25 Вт) - 4 шт
  • резистор 20 кОм (0,25 Вт) - 1 шт
  • макетная плата под пайку 30х55 - 1 шт (для монтажа кнопок)
  • макетная плата под пайку 30х25 - 1 шт (для монтажа HC-05)
  • Bluetooth модуль HC-05 (datasheet) - 1 шт
  • стойка мама-мама М3х15 - 8 шт (для монтажа LCD-дисплея и самодельного термопреобразователя)
  • гайка М3 - 50 шт и более в зависимости от способа крепления вышеуказанных элементов
  • болт М3х15, М3х10 - 20 шт и более
  • провод Dupont мама-мама или папа-мама (20 см) - 30 шт и более в зависимости от типа пинов соединяемых элементов
  • провод типа AWG - 50 см (соединение штекер - DC-DC преобразователь - Sensor Shield)
  • штыревой соединитель - 12 шт
  • разъем PBS - 12 шт
  • штекер питания DC 2.1 мм с клеммной колодкой папа и мама - 1 пара (для подключения шилда)
  • кусок оргстекла или т.п. - 20х30 см (для монтажа всех элементов)
  • болт М6х15 и гайка - 4 шт (ножки оргстекла)

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Главная проблема, возникшая при полевых испытаниях, большая чувствительность Arduino к электромагнитным полям (плата зависает). Это явление возникает при коммутации через реле токов переменного напряжения 220 В и более. В этом случае вынесите реле К1 на расстояние не менее полуметра от платы.

СКЕТЧ

Немного о программировании для HC-05

На самом деле все программирование для модулей, подобных HC-05, сводится к обработке сигналов, полученных с bluetooth модуля. Подобно тому, как мы обрабатываем сигналы с кнопок, датчиков и т.п. Условно этот процесс можно разбить на несколько этапов. Рассмотрим их бегло с примерами.

Запуск передачи данных
Команда Serial.begin(9600); в секции void setup()
Устанавливаем время ожидания приема данных
Команда Serial.setTimeout(50); в секции void setup(). Время в мс. По умолчанию это 1000 мс, что довольно много.
Выявляем момент, когда началась передача данных

Данный блок помещается в секцию void loop(). Здесь ReadBT() - функция обработки данных со смартфона, хотя вы сразу можете писать обработчик в фигурных скобках условия if (Serial.available() > 0)
Читаем, что получили с HC-05
Для этого в функции обработки данных объявляем переменную, которая примет информацию от модуля. Тип переменной зависит от ваших целей. В моем примере это будет тип string. Затем присвоим этой переменной полученное с модуля значение.
Вычленяем из my_string нужные нам маркеры и реагируем на них
Что это значит? Когда авторы создают приложение для смартфона, они присваивают всем элементам управления индивидуальные маркеры, которые определяют сам элемент и его состояние. Как правило, это буква, число или их сочетание. Эти символы берутся из таблицы ASCII. Например в приложение Bluetronics, переключателю №1 в положении ON соответствует сочетание "1A", а в положении OFF "1a". Соответственно, если мы в строке my_string обнаружим символы "1A", то выключатель №1 включен, а если "1a", то выключен. Ниже пример кода включения и выключения лампочки.
Если что-то нужно передать на смартфон
Просто в секции void loop() пишем Serial.println(My_Value);, где My_Value - параметр, который мы хотим передать на смартфон. Если в приложении есть интерпретатор соответствующего My_Value типа данных, вы увидите его в смартфоне.

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

Внимание! Bluetooth-модуль использует тот же порт, что и USB-кабель при подключении Arduino к компьютеру, а вместе они работать не могут. Поэтому при одновременной загрузке скетча с компьютера по USB-кабелю и подключенным HC-05 вы получите ошибку. Чтобы этого не случилось, отключите bluetooth модуль от Arduino (можно отбросить только провода TX и RX).

Для работы этого скетча вам понадобятся дополнительные библиотеки :

  • EEPROM.h - библиотека работы с памятью (она нужна для чтения и записи наших настроек в энергонезависимую память Arduino). Это стандартная библиотека, она входит в комплект среды программирования Arduino IDE.
  • Wire.h - библиотека для работы с протоколом I2C. Это тоже стандартная библиотека, ее устанавливать не нужно.
  • LiquidCrystal_I2C.h - библиотека для работы с LCD по протоколу I2C. Скачать.

Если есть возможность, проверьте эти библиотеки на наличие обновлений.

ТЕСТОВЫЙ СКЕТЧ ДЛЯ ЧТЕНИЯ ДАННЫХ С BLUETOOTH МОДУЛЯ

Я думаю, что после начала программирования у вас может возникнуть вопрос : а как узнать символы, которые авторы приложений определили для элементов управления. В теории, для этого достаточно открыть окно порта в среде программирования Arduino IDE и прочитать символы, которые появятся после воздействия на те или иные органы управления на смартфоне. Но, как говорилось выше, bluetooth-модуль использует тот же порт, что и USB-кабель при подключении Arduino к компьютеру, и одновременно они работать не могут. Конечно, есть библиотека для переопределения портов и пинов, но чтобы не лезть в дебри, вы можете воспользоваться скетчем, представленным ниже.

Загрузите этот скетч в Arduino, поиграйтесь с кнопками и т.п., и в верхней строчке LCD вы увидите искомые символы. Обратите внимание, они будут замыкаться двумя "крякозябриками" - это символы перевода строки. Чтобы скачать скетч в формате ino, воспользуйтесь этой ссылкой.