Реклама ⓘ
Главная » Автоматика в быту
Призовой фонд
на июль 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Комнатный термовлагобарометр

Недавно я решил попробовать сделать термовлагобарометр или комнатную метеостанцию и заказал датчики GXHT30 и BMP280. Только после их получения я узнал, что большинство программ к ним написаны для платформы Arduino. Поскольку главной целью было не покупка комплектов Arduino, а знакомство с работой датчиков и их применением, я выбрал другой путь - все сделать самому. Если ограничить точность измерений температуры и влажности двумя знаками,  давление измерять с точностью 1-2 мм.рт.ст., для управления датчиками можно попробовать использовать самый скромный контроллер PIC16F84A. При этом измеряемая температура должна быть больше нуля градусов, влажность больше 10% и атмосферное давление находиться в пределах 730-780 мм.рт.ст..Контроллер не имеет аппаратного интерфейса I2C и не может пересчитать показания В280, но с принятыми ограничениями точности и диапазона измерений  задача может быть решена. Не просто, но зато, сколько интересного на этом пути можно узнать!

Программа для PICa написана на ассемблере. Для связи с датчиками использован интерфейс I2C. В интернете и учебниках есть много примеров его программной реализации. Нередко пишут, что команды интерфейса хорошо укладываются в тайминги контроллера при тактовой частоте 4МГц. У меня использован кварц на 8МГц, поэтому после команд установки уровней на шинах введены паузы даже по 10мкс (на всякий случай).

Схема метеостанции изображена на рисунке ниже

На полученном датчике GXHT30 есть надпись 2,4V-2,5V. Видимо, это значит, что для него требуется преобразование интерфейса с 5В (у микроконтроллера) на 2,5В (у датчика). Напряжение интерфейса устанавливает стабилизатор на TL431. Для преобразования использована схема на N-канальных MOS транзисторах 2N7000; мои транзисторы имели пороговое напряжение 2,0В. Для открывания это напряжение должно быть меньше требуемых 2,5В,- так и получалось. Обратный диод, изображенный на схеме, входит в состав транзистора. Диод показан для наглядной демонстрации работы интерфейса.

О командах инициализации и связи с датчиком подробно рассказано в описании Datasheet SHT3x-DIS SENSIRION. В табл.9 дейташита показаны команды измерения. Для меня оказался удобным вариант с контролем нуля на SCL (SCL pulled low). Байты CRC не использовались - контроллер просто принимал их и давал в ответ АСК. Адрес датчика 44h. Также по табл.9- масштабирование времени включено (clock stretching enabled), байты конфигурации MSB=2Ch, LSB=10h.

Расчетные формулы приведены в Datasheet SHT3x-DIS SENSIRION на странице 14/22.

где RH-относительная влажность, Т- температура, S-значение соответствующего параметра в десятичном виде. В руководстве даже уточнено - именно в десятичном))

Для того, чтобы сделать расчет, используем свойство степенного ряда, состоящее в том, что любое число можно представить с заданной точностью в виде конечного числа его членов. Это утверждение справедливо для операций с вещественными числами. В моей программе для PICа используются двухбайтные  целые числа, поэтому  любую точность обеспечить нельзя, но два правильных десятичных знака получаются (погрешность расчета оценим ниже), но только при пересчете не очень маленьких чисел. Отсюда и появилось ограничение диапазона температуры и влажности по минимуму. Для двоичных чисел основанием ряда удобно выбрать 1/2.

А теперь к делу - расчету, например, температуры:

  • пренебрегаем единицей в знаменателе формулы т.к. 1<<65536,
  • переписываем формулу в виде T= - 45 + 175 x ST/2*16 = -45 + (175/2*8)x(ST/2*8),
  • заменим 175/2*8 на примерно равную ему сумму дробей 128/256 + 32/256 + 16/256 с ошибкой в плюс полпроцента,
  • отметим, что St/2*8 - это старший байт значения температуры MSB.

Получаем алгоритм вычисления температуры:

  • взять старший байт значения температуры MSB,
  • сдвинуть его вправо командой RRF (конечно, предварительно обнуляя бит status,0) и сохранить,
  • проделать сдвиг еще два раза и сложить с первым результатом,
  • проделать сдвиг еще раз и сложить с предыдущим результатом,
  • из полученного вычесть 45.

Каждый сдвиг добавляет малую отрицательную ошибку из-за 'теряющегося' младшего бита, но вес возможной потери с каждым шагом уменьшается. Так что общую погрешность такого вычисления можно  оценить как 1% (с учетом ошибок разного знака).

Расчет влажности делается аналогично. Преобразованная приближенная формула для вычисления RH :  (64/256+ 32/256+ 4/256)x(h/2*8)

Правильность выкладок подтвердила проверка. В диапазоне +5 - +40 градусов показания по датчику и показания термометра совпадают градус в градус , это невероятно! Поэтому проверять показания влажности не стал- датчик реагирует на дыхание и открытое окно.

Датчик ВМР280 предназначен для измерения давления и температуры. Он мог бы давать показания атмосферного давления для метеостанции. Программное обеспечение для расчета его показаний сложное и, как сказано в даташите, требует 32-битный микроконтроллер Cortex-M3 с уровнем оптимизации GCC -O2. Датчик можно бы было сразу убирать, но если ограничиться очень узким диапазоном измерений, то PIC16F84A еще может пригодиться)). Датчик работает в диапазоне давлений 225-825 мм.рт.ст с точностью до 0,1 мм.рт.ст и температуры -40 - +85С. Но я не планирую поднимать его в горы или привинчивать к дрону, а изготавливаемая метеостанция должна измерять давление 730-780 мм.рт.ст. при температуре 5-40 градусов с точностью 2мм.рт.ст.. Остается попытаться снять зависимость показаний давления и выбрать способ температурной компенсации в требуемых пределах. Для температурной компенсации используем показания температуры датчика GHXT30, а измерения температуры ВМР280 отключим за ненадобностью.

 Для ВМР280 также требуется преобразовать напряжение интерфейса, для этого используется такое же переходное устройство, как и у GXHT30, но на 3,5В. Для выбора интерфейса I2С вывод SCB подключается к VVD через резистор. Для назначения адреса 77h вывод SDO также подключен к +5В.

Команды инициализации, измерений и распределение памяти подробно и доходчиво описаны в Datasheet BST-BMP280-DS001-10 V.1.12 2014 Bosch Sensortec. Не смогу пересказать дейташит, лучше приведу запись команд (процедур), которую набросал при его изучении . Если рассмотреть ее совместно с дейташитом, то в основном все будет ясно.

Здесь,

  • STIC старт ,
  • SPIC  стоп,
  • SENDB .х (примечание) посылка байта х  ,
  • RECVB прием байта,
  • NACKM NACK мастера.

Инициализация ВМР280 (Дейташит, раздел 5.2.1)

  • STIC
  • SENDB  .238+0 (RW=0)
  • SENDB  .244 (reg F4h)
  • SENDB  .7  (t dis)
  • SENDB  .245 (config)
  • SENDB  .108 (bit conf)
  • SPIC

 Измерения BMP280  (Даташит, раздел 5.2.2)   

  • STIC
  • SENDB  .238+0 (RW=0)
  • SENDB  .247 (reg F7h p_msb)
  • STIC
  • SENDB  .238+1 (RW=1)
  • RECVB (p_msb =>TEH)
  • NACKM  
  • RECVB (p_lsb =>TEL)
  • SPIC

В результате исполнения команд мы получаем 16-битное значение p_msb & p_lsb, которое подлежит обработке. Поскольку мы уже отказались от Cortex-M3, то можем только понаблюдать за содержание байтов давления без какой-либо гарантии успеха. Было понятно, что рассчитываемое  Cortex давление Р есть функция от р_ и t (температуры). При изменениях атмосферного давления, и постоянной температуре оказалось, что истинное атмосферное давление Р  пропорционально р  (понятное дело, в пределах точности моего механического барометра). Это дает возможность предположить,  что Р можно попробовать представить как комбинацию двух взаимонезависимых на малом промежутке линейных функций от p и t.  Остается подобрать коэффициенты, знаки и постоянную. Если оставить подобности, то можно сразу представить очевидную зависимость.

 P=1149-(p/32-(t-10)x2,25)/2

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

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

Для индикации результатов использован ЖКИ-индикатор FDCC1602, включенный с четырехбитным интерфейсом. Монтаж схемы выполнен на макетной плате.  К заметке приложен HEX-файл прошивки bmp4, тактовая частота контроллера 8 МГц. На рисунках показаны фотографии датчиков, макетной платы и внешнего вида метеостанции.

Питается метеостанция от старой платы неизвестного назначения. Потребляемый ток устройства около 30 мА. Значит, на макетной плате рассеивается мощность 150 мВт. Поскольку маломощные стабилизатор и сетевой трансформатор, расположенные внутри, имеют низкий КПД, в корпусе барометра может рассеиваться мощность около 0,5 Вт. Это вызывает небольшое нагревание конструкции и искажает показания. Поэтому пришлось, по возможности, избавляться от нагрева.

Индикация результатов и дизайн метеостанции скромные и не претендуют на обсуждение. В конструкции могут быть использованы любые радиодетали. Единственно- надо проверить напряжения интерфейсов датчиков и стабильность напряжения питания в пределах 5,2В - 4,8В.

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

1. Datasheet SHT3x-DIS SENSIRION, 2018, V.5

2. Datasheet BST-BMP280-DS001-10 V.1.12 2014 Bosch Sensortec.

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Ручной профессиональный инструмент KINGTUL оптом с доставкой.

Комментарии (4) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
+1
MACTEPok #
Тепловыделения силовой части не влияют на показания датчиков?
Ответить
0

[Автор]
sathv #
Простая схема и дешевые радиоэлементы ТВБМ позволяют легко повторять устройство. Недавно я сделал его "клон ", используя как индикаторы два четырехзначных ТМ1637 (индикатор с большим количеством знаков уже не нужен, потому что данные от GXHT30 и BMP280 проанализированы при разработке первого экземпляра). ТМ1673 имеет интерфейс I2C. В устройстве он упрощен для сокращения программы- передача идет только от контроллера к индикатору. АСК игнорируется, на него отводится промежуток времени побольше. Для удобства использования в программу внесены небольшие изменения. В файлах прилагается схема, прошивка и фото устройства.
Отредактирован 19.10.2023 09:57
Прикрепленный файл: Схема.JPG
Ответить
0

[Автор]
sathv #
Прошивка
Прикрепленный файл: bmtm3.HEX
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Радиореле 220В
Радиореле 220В
Бокс для хранения компонентов Квадрокоптер Syma X11
вверх