Цель проекта - получить устройство с возможностью простого подключения множества термосенсоров. Термосенсоры должны однозначно идентифицироваться по месту. Все температуры должны отображаться на одном экране и логироваться в файл. За основу была взята шина 1-Wire и сенсоры DS18S20+.
Проект-концепция, такой можно сделать практически на любой отладочной плате с любым микроконтроллером. Но под рукой был именно модуль K66BLEZ1.
Перечень необходимых деталей
Модуль K66BLEZ1
Открытый проект модуля находится здесь. Модуль на борту имеет энергонезависимые часы реального времени, USB high speed с двумя виртуальными COM портами, микро SD карту с поддержкой FAT32, Blertooth LE 4.0 модуль, зарядник литиевых аккумуляторов 3.7 В. Питание от USB или источника питания 5 В или от аккумулятора 3.4...4.2 В.
Макетная плата
Схема макетной платы
Дисплей
Полная информация о дисплее собрана здесь. Дисплей управляется по шине SPI. Работает только на запись. Значит при работе с ним надо применять технологию фрагментированного фреймбуфера.
Сенсоры DS18S20+
Вся конструкция в сборе выглядит вот так:
За счёт того что сенсоры просто накалываются на плоский шлейф в произвольных местах сделать вариант под собственные нужды можно буквально за минуты. Длина шлейфа может достигать сотен метров и даже километра. Это обеспечивается сравнительно низкой скоростью работы с сенсорами и подводкой отдельной линии питания. Питание 3.3 В подаётся в шлейф из модуля. Все сенсоры подключены на одну информационную линию DQ, по которой осуществляется двунаправленный обмен данными.
В данном проекте реализовано считывание данных максимум с 8-и сенсоров. Считывание каждого сенсора длиться около 0.6 сек. Проект легко переделать под большее количество сенсоров. На многие десятки.
Настраивается дивайс через USB и виртуальный COM порт. На стороне PC применяется программа терминал типа TeraTerm. Можно задать разворот экрана по всем 4 направлениям, задать максимальный размер лог файлов с записью температур, просмотреть и изменить идентификаторы сенсоров.
Способ привязки сенсоров DS18S20
Все сенсоры DS18S20 имеют глобально уникальные 8-байтные идентификаторы. Это позволяет к каждому из них обращаться по отдельности. Однако если изначально все сенсоры подключить одновременно, то останется неясным какой сенсор стоит на какой позиции. Поэтому была разработана процедура привязки сенсоров к месту. Процедура выполняется следующим образом:
Питание выключено. Со шлейфа все сенсоры сняты. Распределяем по своему желанию номера позициям установки сенсоров.
Устанавливается один сенсор на шлейф в позицию с номером 1.
Включаем питание. Ожидаем появления данных с сенсора на экране. Выключаем питание.
Устанавливаем следующий сенсор в следующую по порядку позицию и переходим к пункту 3. Если все сенсоры установлены, то процедура завершена.
После выполнения всей процедуры на экране напротив каждого номера позиции будут показания сенсора находящегося в именно в этой позиции.
Выполненные настройки сенсоров сохраняются в файле на SD карте и при переносе шлейфа на другое устройство нужно будет только перенести файл с настройками.
Каналы коммуникации с дивайсом
Устройство соединяется через USB интерфейс с компьютером. При этом на компьютере появляется два виртуальных COM порта. Порт с номером интерфейса 0 служит для управления через терминал, просмотра лога и управления настройками. Порт с интерфейсом 2 работает по протоколу FreeMaster и соответственно через него ведёт обмен данными среда FreeMaster на компьютере.
Лог-файл с результатами измерений
Лог файл с результатами измерений по всем зонам сохраняется в формате CSV и может быть импортировал в Excel или другую подходящую программу для анализа. Каждая запись сопровождается датой и временем. Периодичность записи около 5.5 сек.
Управление через терминал
Главное меню в терминале показано ниже. Кроме сохранения лога с результатами измерения температуры устройство ведёт также свой внутренний лог. Его можно просмотреть через терминал. Здесь также настраивается дата и время и все параметры.
Обмен через USB со средой FreeMaster
Работа с FreeMaster была описана в предыдущих статьях. Стоит только напомнить что компонент FreeMaster обеспечивает доступ и в MATLAB в реальном времени.
Проект для среды FreeMaster находится в файле MZTS.pmp.
Наблюдение за температурой по Bluetooth LE.
Для этого используется кастомный набор характеристик и была написана простая утилита на PC под управлением Windows 10..11 , Утилита умеет сканировать все BLE устройства в эфире и из списка выбирает только те которые поддерживают кастомную характеристику термосенора. Перед этим устройство должно быть спарено с PC. Пин код и имя устройства задаются через терминал.
Исходники проекта
Главный репозитарий здесь
Проект для главного микроконтроллера модуля MK66FX1M0VLQ18 . Применена RTOS MQX 4.2. Среда разработки IAR Embedded Workbench for ARM 7.5
Проект для микроконтроллера модуля MKW40Z160VHT4, обеспечивающего соединение по BLE. Применена RTOS FreeRTOS. Среда разработки IAR Embedded Workbench for ARM 7.5
Проект утилиты для PC принимающей данные от устройства по Bluetooth. Язык - Delphi. Среда разработки RAD 11.1 Подойдёт триальная версия.
Статьи с предыдущими концептами на модуле K66BLEZ1
Комментарии (18)
beeptec
01.10.2022 13:02Как обстоят дела калибрацией DS18S20?
Считывание каждого сенсора длиться около 0.6 сек. Проект легко переделать под большее количество сенсоров. На многие десятки.
т.е. в цикле по всей шине из 8 сенсоров это 600 мс., т.е. 100 сенсоров - теоретически 6 с.
Или я что-то пропустил, какая частота опроса?
Для систем климат контроля это довольно интересно, где еще ну разве что для формального контроля не сильно разнесенных точек.Indemsys Автор
01.10.2022 13:18+1Эт на самом деле концепт для контроля больших аккумуляторный систем или больших парков инвертеров или солнечных панелей или других распределённых преобразователей энергии где нужны данные для предсказательной диагностики.
Про сенсоры все написано в их мануале.
±0.5°C Accuracy from -10°C to +85°C
На 100 сенсоров время опроса будет 60 сек с данной схемой и софтом.
beeptec
01.10.2022 13:58±0.5°C Accuracy from -10°C to +85°C
Дело хозяйское, но в.у. это погрешность в указанном диапазоне температур, это никак не связано с реальными показаниями. Все сенсоры температуры подлежат в калибровке аппаратно или программно. Возьмите точный фабричный градусник и сравните свои показания.
Indemsys Автор
01.10.2022 16:42Вот эту мысль совершенно не понял
это погрешность в указанном диапазоне температур, это никак не связано с реальными показаниями
Что такое реальные показания?
beeptec
01.10.2022 20:25Несмотря на заверения производителя данной серии сенсоров о том, что он поставляется уже с безупречной фабричной калибровкой, на деле все обстоит как обычно. Тема калибрации этих сенсоров больше раскрыта на англоязычных ресурсах. Некоторые ардуиноводы так же. Мне нравится как это раскрыто здесь:
Итак Вы используете функции, предоставляемые библиотекой.readTemperature() используется с датчиком BME, а getTemp используется с DS18B20. ТемаIndemsys Автор
01.10.2022 23:23+1Согласен что могут быть клоны DS18S20 с непредсказуемыми искажениями.
Но мои показывают все одинаковый результат. И хорошо усредняются.
На гитхабе проекта лежит файл с результатами. Можете проверить.
Zuy
02.10.2022 04:52+2А помех в случае инвенторов не боитесь? 1-wire интерфейс совсем не помехоустойчивый.
Я как-то делал софт для зарядника EV, там подобный сенсор поставили в саму ручку, которая к машине подключается, ну и кабель метра три до зарядника. Зарядник был 300kw. Когда ток начали качать, этот датчик стал чудеса показывать. В конце концов заменили на обычную термопару.
beeptec
02.10.2022 07:01+1Эт на самом деле концепт для контроля больших аккумуляторный систем или
Идея так себе, если это всего лишь контроль температуры. Не знаю всех таких аспектов в Вашем случае, как правило хорошие силовые драйвера, те же BMC изначально несут на себе всю логику под специфику конкретного типа аккумуляторов, могут включать в себя контроль каждого элемента с аварийным отключением питания по всей батарее. Для больших хозяйств уже давно налажено производство станций в соответствии со всем стандартам и нормативным требованиям производителей источников.
serafims
02.10.2022 11:22Если сенсоров прям много, можно по шлейфу цеплять две шины 1wire, и обрабытвать их параллельно..
Indemsys Автор
02.10.2022 12:00Можно, только надо чтобы между сигналами DQ лежа проводник земли, чтобы эти сигналы не наводили друг на друга. Еще возможно понадобится где-то на шлейфе ставить блокирующие конденсаторы чтобы сенсорам хватало напряжения при импульсной работе.
Потом, как верно тут заметили, надо думать о помехах и не класть шлейф на металлические поверхности к которым где-то присоединены мощные преобразователи. Не забывать о об антенном эффекте и делать проводящий корпус у устройства и т.д.Хотя микроконтроллеры серии Kinetis имеют на всех пинах аппаратные фильтры высокочастотных помех. Поэтому вполне возможно они будут работать стабильно, там другие серии уже бы сбоили. Например в моем частотном преобразователе сенсор с разрешающей способностью 0.1 С касался прямо радиатора силовых транзисторов и достаточно надежно работал.
beeptec
02.10.2022 12:32Проект-концепция, такой можно сделать практически на любой отладочной плате с любым микроконтроллером. Но под рукой был именно модуль K66BLEZ1.
Я не случайно попытался понять область применения решения с такой архитектурой.
Эт на самом деле концепт для контроля больших аккумуляторный систем или больших парков инвертеров или солнечных панелей или других распределённых преобразователей энергии где нужны данные для предсказательной диагностики.
Такие задачи ведут в никуда, т.к. RISC архитектура заточена под другие вещи, прежде всего потому что в качестве ведущего центра она не даст многопоточность. Если в качестве АЦП то все в порядке.
Обратите внимание на это решение, когда где все контролирует CISC (х86). Это Ваш проект, когда можно организовать счет данных (12 bit, 0.001V ) одновременно или селективно по определенной группе сенсоров, количество которых может достигать !1600.
Indemsys Автор
02.10.2022 12:58Вы видимо что-то упустили. Но в статье представлено три проекта!
Два для ARM (RISC ) и один для PC (CISC х86).
Ни в коем случае я не собирался умалять роль CISC. Более того сейчас в работе проект где PC будет брать на себя роль embedded дивайса в концепции software-in-the-loop (SIL).
Действительно удивительная технология.
При масштабировании до тысяч дивайсов проблемой становится уже не технология их подключение и сбора информации с них, а технология их менеджмента.
Тут прогресс минимален, нужна по любому команда людей.
beeptec
02.10.2022 19:56Да, вижу упустил, но и в таком исполнении дизайн топологии довольно перенасыщен. Счет данных при наличии х86 не вопрос. Существует множество способов и недорогих коммуникационных решений опроса в.у. сенсоров, по части блютус, так же перебор, т.к. имеем дело с ответственными задачами, а не "умными веселыми вещами". Что да, чтоб что то не хоббийное с размахом на стартап, важен опыт и понимание среды с ее плюсами и минусами для разработки логики, мониторинга и все прочее, что дальше требуется.
Indemsys Автор
02.10.2022 22:21В основном правильный анализ.
Такое решение окупиться если его нагрузить еще парочкой полевых шин.
И в софте есть уже драйверы. Там и RS485 c MODBUS можно найти, и CAN и проч. И даже голосовой информатор.
Может потом выложу более обширную хардварную часть для этого дела.А блютус между тем как раз и нужен тут для "умной веселой вещи" - предсказательной диагностики. Такая диагностика может быть в очень ответственной вещи, но при этом она не несет ответственности. Она нужна для повышения качества обслуживания. Поначалу вообще служит только для сбора больших данных.
GenkaOk
Интересное решение с шлейфом, это готовый такой или вы сами прокалываете его?
Не подскажете, где купить?
Дома связка ESPHome (ESP32) + DS18S20, но все датчики держатся либо на скрутке, либо на вагах, что не очень удобно, особенно делать ответвление от точки на 3 датчика сразу.
Indemsys Автор
Эти коннекторы прямо пальцами зажимаются на шлейфе в любом месте.
Я так примерно их расположил с шагом 25 см чтобы 2 метра получилось.
saege5b
https://www.chipdip.ru/catalog-show/idc-connectors?x.744=cMt
Indemsys Автор
Тут нужны коннекторы с шагом 1.27 мм. В сокетах с шагом 2.54 мм сенсоры не будут держаться