DIY Zigbee датчик температуры

z5ljrbuxmp0u4s8lsksxw4amjoi.jpeg


Приветствую читателей Habr! В этой статье расскажу вам о своём очередном zigbee проекте беспроводного датчика. Проект называется Efekta THP_LR \ THP, это небольшой датчик измерения температуры и влажности воздуха на чипе СС2530. Есть несколько модификаций датчика, в одном из вариантов датчик дополнительно измеряет атмосферное давление. Ещё в одном варианте датчик работает на радиомодуле СС2530 с усилителем сигнала. В этом варианте возможна установка радиомодуля с печатной антенной или с выносной. Все модификации датчика работают на батарейках ААА, это обеспечивает длительный срок работы на одном комплекте батареек. Датчик предназначен для работы в сетях Zigbee. Проект с открытым исходным кодом.
Идея разработки этого датчика базировалась на потребности в недорогом датчике температуры для размещения на улице. Опыт использования готовых датчиков с Алиэкспресс на улице показал, что есть несколько нюансов, которые было бы здорово решить.

  • Батарейки, которые используются в готовых датчиках, очень плохо держат заряд при минусовых температурах.
  • Дальность передачи данных при использовании на улице тоже чаще недостаточна, приходилось где-то в доме и недалеко от уличного датчика размещать роутер.
  • Также очень важным моментом при разработке собственного diy датчика является софтовая часть, тут я сам могу решать, что, как и c каким временным интервалом датчик будет читать сенсоры и отправлять данные.


Плата датчика разрабатывалась в программе DipTrace, разработка заняла несколько дней. Плата датчика получился в размерах 29 мм х 67 мм. Место под напайку радиомодуля сделал универсальным, для возможности установки нескольких видов радиомодулей: EBYTE E18-MS1-PCB (200 м), EBYTE E18-MS1PA2-PCB (800 м), EBYTE E18–2G4Z27SI IPEX (2500 м).

bhczbzect89_sg3ziby9wfy9e9u.jpeg

  • Рабочая частота: 2400~2480 MHz
  • Мощность передатчика: 4 dBm, с усилителем 20 dBm
  • Чувствительность приёмника: -96.4 dBm, с усилителем -98 dBm
  • Скорость передачи данных: 250kbps
  • Протокол: ZigBee
  • Энергонезависимая память: 256 KB
  • Энергозависимая память: 8 KB
  • Ядро: Микроконтроллер 8051
  • Напряжение питания: 2.0 — 3.6V
  • Потребление при передаче: 28mA, с усилителем 98mA
  • Потребление при приёме: 27mA, с усилителем 36mA
  • Потребление во сне: 1.2μA, с усилителем 2μA
  • Диапазон рабочей температуры -40 — +85℃


Для удобства сборки все электронные компоненты располагаются на одной стороне платы, за исключением держателя батарейки, который напаивается на обратную сторону платы. В проекте использовались цифровые сенсоры BME280, BMP280 и SHTC3. В первом варианте датчика использовался сенсор bme280, но из-за кризиса производства полупроводников и, как следствие, роста цен в дальнейшем в проект был добавлен сенсор BMP280. Это самый недорогой вариант, стоимость bmp280 на Али экспресс составляет примерно 40 рублей. Но данный сенсор измеряет только атмосферное давление и температуру, а хотелось ещё и влажность, поэтому позднее в проект был добавлен сенсор SHTC3.

xomdkvfqyz8ey97sl6poiyhungq.jpeg

BME280 (Bosch)

  • Напряжение питания: 1.71V — 3.6V;
  • Интерфейс обмена данными: I2C или SPI;
  • Диапазон измерения атмосферного давления: 300hPa — 1100hPa (Arp ±0.12hPa), что эквивалентно диапазону от -500 до 9000 м над уровнем моря;
  • Диапазон измерения температуры: -40°С … +85°С (At ±0.5°С);
  • Диапазон измерения влажности: 0% … 100% (Arh ±3%);
  • Энергопотребление: режим измерений: 340 — 714uА; в спящий режим: — 0.1 uА


BMP280 (Bosch)

  • Напряжение питания: 1.71V — 3.6V;
  • Интерфейс обмена данными: I2C или SPI;
  • Диапазон измерения атмосферного давления: 300hPa — 1100hPa (Arp ±0.12hPa), что эквивалентно диапазону от -500 до 9000 м над уровнем моря;
  • Диапазон измерения температуры: -40°С … +85°С (At ±0.5°С);
  • Энергопотребление: режим измерений: 325 — 720uА; в спящий режим: — 0.1 uА


SHTC3 (Sensorion)

  • Напряжение питания: 1.62V — 3.6V;
  • Интерфейс обмена данными: I2C;
  • Диапазон измерения температуры: -40°С … +125°С (At ±0.2°С);
  • Диапазон измерения влажности: 0% … 100% (Arh ±2%);
  • Энергопотребление: режим измерений: 270 — 430uА нА; в спящий режим: — 0.3 uА


На плате установлен светодиод для индикации режимов работы: вход в сеть, выход из сети, отправка данных, две кнопки: кнопка сброса и пользовательская кнопка (вход в сеть, выход из сети, чтение и отправка данных не по расписанию), порт программирования.
Датчик получился простой и лёгкий в изготовлении, время сборки датчика при ручной пайке составляет 10–15 минут, схема датчика состоит всего из 10 элементов, включая радиомодуль.

Убедиться в этом вы можете, изучив схему проекта.

tbdotsry8rs9mr_1tetsfptkehe.jpeg

sy3xs5fv8ea71chqsr0c2rsdtdy.png

Программная часть этого проекта доступна на моём github в виде исходного кода, а также в виде уже скомпилированной прошивки. Прошивка скомпилирована для варианта датчика с самым простым и дешёвым радио модулем EBYTE E18-MS1-PCB. Установлен интервал чтения сенсора один раз в минуту и отправка данных при изменении значений на 0.33 градуса для температуры, на 2.5 процента для влажности и на 1 единицу для атмосферного давления. Отправка информации об уровне заряда батареек происходит один раз в 6 часов.

Для загрузки прошивки в радиомодуль может понадобиться СС Debager, или SmartRF04EB это такая не очень догорая платка которую можно купить на Али экспресс.

rkzel1hx3mi7z3pirjawrrfjsmk.jpeg

Впрочем, прошить можно и через ардуино/есп, для этих целей написан удобный и бесплатный онлайн-сервис ZESP_multitool. Заходите на сайт, выбираете тип модуля, который планирует прошить, в нашем случае TI CCХХХХ. Справа в интерфейсе будет картинка с тем, что, как и куда подключать. Подключаете вашу ESP к USB порту, в интерфейсе сервиса выбираете make adapter и кликаете esp32adapter.json. Далее выбираете самый нижний пункт слева в интерфейсе — local и выбираете на своём компьютере прошивку, которую требуется загрузить в датчик.

nnw971s_xw1qilionjfghh9zibi.png

Исходные файлы проекта EFEKTA THP\THPLR Outdoor\Indoor sensor находятся папке /PROJECT SOURCE, это может быть интересно тем, кто хочет изменить какие-либо параметры работы датчика или, например, скомпилировать прошивку для радиомодуля с усилителем сигнала. Для такой настройки проекта необходимо переконфигурировать настройки проекта в файле /PROJECT SOURCE/THP/Source/preinclude.h, нужно закомментировать или, наоборот, раскомментировать нужные вам #define и в #define APP_REPORT_DELAY указать нужные вам значения времени в миллисекундах.

//#define OUTDOOR_LONG_RANGE
//#define BMP
//#define SHTC3
#ifdef OUTDOOR_LONG_RANGE
#define APP_REPORT_DELAY ((uint32) 300000) //5 minutes
#else
#define APP_REPORT_DELAY ((uint32) 60000) //1 minute
#endif


Корпус для датчика был разработан под печать на FDM принтере, модели корпуса также доступны на моём гитхабе в папке /ENCLOUSER/. В корпусе предусмотрено место для вывода внешней антенны, в этом месте толщина стенок тоньше, если необходим вариант с внешней антенной, то в этом месте нужно будет высверлить отверстие.

1gs8uaw21onlyto2amktq_kddwq.png

Проект уже не новый, первую публикацию о проекте я разместил 1 ноября 2021 года на площадке hackaday.io. С того времени проект пережил несколько ревизий дизайна платы, был протестирован при минусовых температурах (до -20С) на улице, в помещении, и даже в морозильной камере (-24С). Датчик работает очень стабильно. Информация о датчике уже добавлена в проект z2m, так что внешний конвертер не нужен, также датчик отлично работает в zha.

{
        zigbeeModel: ['EFEKTA_THP_LR'],
        model: 'EFEKTA_THP_LR',
        vendor: 'Custom devices (DiY)',
        description: 'DIY outdoor long-range sensor for temperature, humidity and atmospheric pressure',
        fromZigbee: [fz.temperature, fz.humidity, fz.pressure, fz.battery],
        toZigbee: [tz.factory_reset],
        configure: async (device, coordinatorEndpoint, logger) => {
            const endpoint = device.getEndpoint(1);
            await reporting.bind(endpoint, coordinatorEndpoint, [
                'genPowerCfg', 'msTemperatureMeasurement', 'msRelativeHumidity', 'msPressureMeasurement']);
            const overides = {min: 0, max: 64800, change: 0};
            await reporting.batteryVoltage(endpoint, overides);
            await reporting.batteryPercentageRemaining(endpoint, overides);
            await reporting.temperature(endpoint, overides);
            await reporting.humidity(endpoint, overides);
            await reporting.pressureExtended(endpoint, overides);
            await endpoint.read('msPressureMeasurement', ['scale']);
        },
        exposes: [e.battery(), e.temperature(), e.humidity(), e.pressure()],
    },


Гербер файлы проекта размещены в каталоге проектов на сервисе по заказу плат pсbway.com, сейчас (04.2022) это, наверное, единственный доступный сервис.

Фото датчика


Чтобы не потеряться, подписывайтесь на мой профиль на Habr и на Youtube канал. Также приглашаю в телеграмм чат DIYDEV, где можно почитать, как заказывать PCB в апреле 2022 года, как легче всего их оплачивать не потеряв лишних денег и как приобрести уже готовые мои датчики, если по какой-то из причин вы не сможете их самостоятельно собрать.


Ссылки:
Всем добра!

oug5kh6sjydt9llengsiebnp40w.png

© Habrahabr.ru