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

в 9:00, , рубрики: BME280, bmp280, CC2530, diy или сделай сам, efekta, humidity sensor, long range, Mesh-сети, outdoor sensor, ruvds_статьи, shtc3, temperature sensor, zha, zigbee, zigbee2mqtt, Беспроводные технологии, Блог компании RUVDS.com, умный дом

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


Приветствую читателей 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м).

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

  • Рабочая частота: 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.

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

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 элементов, включая радиомодуль.

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

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

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

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

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

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

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

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

Исходные файлы проекта EFEKTA THPTHPLR OutdoorIndoor 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/. В корпусе предусмотрено место для вывода внешней антенны, в этом месте толщина стенок тоньше, если необходим вариант с внешней антенной, то в этом месте нужно будет высверлить отверстие.

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

Проект уже не новый, первую публикацию о проекте я разместил 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) это, наверное, единственный доступный сервис.

Фото датчика

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

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

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

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

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

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

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

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

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

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

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

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

Ссылки:

Всем добра!

Автор:
Berkseo

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js