Автономный температурный датчик

Создаем датчик температуры с автономным питанием

Цель

Измерение температуры с помощью датчика с батарейным питанием, и передача данных от него по радио

Что потребуется

  • Модуль MBee-868-2.0 или MBee-868-3.0 – 2 шт
  • Антенны 868 МГц с разъемом SMA - 2 шт
  • Трансивер USB-UART MB-USBridge – 1 шт
  • Плата MB-Tag – 1 шт
  • Батарейка CR2032 – 1 шт
  • USB-провод – 1 шт
  • Компьютер с терминальной программой

Что делаем

Модуль на плате MB-USBridge

  1. Устанавливаемоба модуляна платы MB-USBridge, в соответствии с изображением.
  2. Предполагаем, что ПО SerialStar в модуль уже загружено. Если нет, то посмотрите, как это сделать здесь. Не забываем сбросить все настройки к заводским значениям. Там рассказано, как это сделать.
  3. Запускаем терминальную программу, выбираем номер порта и устанавливаем для него 9600 8N1 CTS/RTS.
  4. Входим в командный режим («+++» или «SYSTEMBUTTON»).
  5. Решаем, с какой периодичностью нам бы хотелось получать данные о температуре. Если интервал 15 секунд, установленный «по умолчанию» Вас устраивает, то переходим к следующему пункту. Если нет, то печатаем AT SP 500⏎ (здесь и далее  ⏎ означает нажатие клавиши «ENTER»). Период задается в десятках миллисекунд, поэтому мы с Вами только что сделали его равным 5 секундам. Понятно, что можете установить свой собственный интервал в пределах от 10 мс до 8 дней. За подробной информацией по настройке режимов сна, Вы всегда можете обратиться к основному документу по проекту - sw_SerialStar.pdf.
  6. Теперь надо включить циклический режим сна. Для этого отдаем команду AT SM 4⏎ и затем применяем сделанные изменения с одновременным выходом из командного режима напечатав AT CN⏎. Собственно, мы только что подготовили модуль автономного термодатчика.
  7. Устанавливаем его на плату MB-Tag, как показано на Рисунке 2, вставляем батарейку и подаем питание, замкнув перемычку JP1. Модуль на плате MB-TAG
  8. Смотрим на светодиоды RF TX и RF RX. Если до сих пор все шло правильно, то они должны загораться с периодом 5 секунд. Кстати, сняв JP1 и подключив вместо нее микроамперметр, Вы можете убедиться, что ток потребления автономного датчика между выходами в эфир не превышает 3-5 мкА.
  9. Берем второй модуль и вставляем его в MB-USBridge.
  10. Если Вы проводите эксперимент на столе, то антенну достаточно прикрутить на один модуль. Если же планируете измерять температуру на большем расстоянии, то антенны надо установить на оба модуля.
  11. Переключаем терминал на режим отображения 16-тиричных чисел, и пытаемся принять данные от нашего датчика.
  12. Если все хорошо, то с периодом 5 секунд вы должны получать пакеты, длиной 28 байт и содержащих приблизительно следующее:
    18 98 04 83 06 0E 00 00 
    00 00 09 04 1D 02 FF FF 
    1F 04 21 02 FF FF 22 0D 
    00 00 00 00
  13. Получили? Ну значит все в порядке. Начинаем потихоньку разбирать что здесь и к чему. На самом деле этот пакет содержит, с точки зрения простого датчика температуры, очень много лишнего. Просто модуль рапортует о всех активных линиях ввода/вывода, установленных в SerialStar «по умолчанию». А их достаточно много.
  14. Однако, даже если мы желаем ограничиться только температурой, то нам это не удастся. Все равно в нагрузку получите еще и напряжение на батарейке. Вам же требуется понимание, когда батарейку необходимо будет заменить?
  15. А теперь смотрим на первые 2 байта в посылке. Собственно, это все, что на нам надо. Первый байт – это текущая температура микросхемы, установленной на радиомодуле. Температура передается в дополнительном коде. То есть, если полученное число меньше 128, то никаких действий с ним не требуется. Ну разве что перевести его в привычный десятичный вид. В нашем случае температура микросхемы модуля равна 24 градуса. Ну а если число больше 128? Тогда вычитаем из полученного числа 1 и затем инвертируем. Если бы мы получили, например, число F9, то действуя так, как описано выше, получили бы число 7. Сразу понятно, что в месте установки модуля температура минус 7°.
  16. Второй байт – это напряжение на батарейке. А как получить значение в вольтах? Да очень просто. Переводим его в десятичное и делим на 51. В нашем случае – 2,98В.
  17. Если все устраивает, то на этом можно остановиться.

Для тех кому требуется нечто большее

Приведем вопросы, которые обычно возникают в этой точке повествования.

А как избавиться от лишней информации в пакете?

Очень правильный вопрос. Главное почему это надо сделать – чтобы увеличить время автономной работы датчика. Ведь понятно, чтобы передать информацию, требуется энергия. А если информация не нужна, то и энергия расходуется зря. В нашем случае из 28 байт, нас интересуют только 2. Значит от ненужных данных надо избавиться. Делаем это, отключая соответствующие входы. Для этого, переставив модуль датчика опять в MB-USBridge и войдя в командный режим, последовательно отдаем команды

AT L2 0
AT L3 0
AT L5 0
AT R1 0
AT R2 0
AT R4 0
AT R6 0
AT CN

Смысл этого действа вы можете узнать из документа «app_SerialStar_IO_Control.pdf». После того, как Вы вернете модули на свои места, Вы увидите, что от 28 байт осталось только 2 с температурой и батарейкой.

А если датчик расположен далеко?

Увеличьте выходную мощность с помощью соответствующей AT-команды или воспользовавшись программой SysmcBootLoader. Только помните о пагубном влиянии высокой выходной мощности на время автономной работы. Ну и о ГКРЧ не забывайте.

Мой сосед, который тоже осваивает SerialStar жалуется, что у него в терминал валятся неизвестные пакеты длиной 2 байта. Что делать?

Ничего удивительного. Ведь на модуле автономного датчика температуры адрес для передачи оставлен «по умолчанию». А он установлен как широковещательный 0xFFFF. Вот о Вашей температуре и батарейке всем вокруг и известно. Меняем его командой AT TX на собственный адрес модуля, подключенного к терминалу. Будет лучше если предварительно Вы поменяете и его командой AT MY со значения по умолчанию 0x0001 на что-нибудь более экзотическое. А еще можно перейти на другой частотный канал, изменить битовую скорость, идентификатор сети или системы.

Мне требуется несколько датчиков температуры. Что будем делать?

В этом случае на модуле концентратора без пакетного режима не обойтись. Кроме этого, потребуется каждому автономному датчику присвоить свой собственный уникальный адрес. Иначе, разобрать у кого какая температура и напряжение будет непросто. А как пакетный режим включить и как в нем существовать можно с опять же с помощью основного документа по проекту Техническое руководство ПО «SerialStar».

Датчик «врет», почему?

Как мы уже говорили, датчик расположен непосредственно в микросхеме радиомодуля. Поэтому и меряет он температуру кристалла. Если Вы выберете очень маленький период передачи данных, то кристалл между двумя последовательными передачами не будет успевать остыть. А ведь ток потребления, в зависимости от установленной выходной мощности, может достигать 200 мА. Что при напряжении 3,3В дает в итоге 660 мВт. Понятно, что это все длится миллисекунды, но совсем не обращать на это внимание нельзя. Встроенный датчик температуры достаточно хорошо откалиброван и погрешность у него небольшая. Так что при разумной установке периода передачи данных его показаниям вполне можно доверять.

Что-то не работает

Модули разнесены хотя бы на полметра? А светодиод RF TX на MB-Tag загорается с установленным периодом? На MB-USBridge горит светодиод RF RX? Терминал часом «не отъехал» после того, как Вы случайно отключили от компьютера плату MB-USBridge?

Появились вопросы?

Пишите на форум. Вам обязательно ответят.