Введение


В этой статье я расскажу как подключить дозиметр AtomTag через Bluetooth модуль Bluegiga BLED112 к Raspberry PI для того, чтобы передавать результаты измерений на сервис «Народный Мониторинг».

AtomTag – Bluetooth Low Energy дозиметр для смартфона и планшета со счетчиком Гейгера СБМ-20. Устройство будет передавать на сервер: мощность дозы, статистическую погрешность и заряд аккумулятора. В конце статьи посмотрим как связаны показания дозиметра с погодными явлениями.

Народный мониторинг (narodmon.ru) — геоинформационный SaaS сервис по отображению на карте мира и контролю (на ПК, смартфонах и других гаджетах) показаний датчиков своих участников (температуры, влажности, атм.давления, скорости и направления ветра, радиации, энергопотребления и многих других), а также частных и городских веб-камер для публичного или частного(приватного) просмотра.

Generic Attribute Profile (GATT)


Дозиметр AtomTag поддерживает профиль GATT. По терминологии Bluetooth профиль – это набор функций или возможностей, доступных для определенного устройства Bluetooth.

GATT профиль определяет иерархическую структуру хранения данных. Структура представлена на рисунке:



Сервис – это контейнер, содержащий несколько атрибутов, которые называются характеристиками. Все сервисы имеют уникальные идентификаторы UUID и HANDLE. Например, дозиметр имеет 2 сервиса:

1. Сервис для пользователя, в котором содержатся характеристики для считывания результатов измерений и записи пользовательских настроек (настройки звуковой сигнализации).

2. Сервис, который содержит характеристики для хранения заводских настроек: калибровочные коэффициенты, имя устройства и т.д.

Характеристика – состоит из:

1. Значения (обычно не более 20 байт).

2. Дескриптора – здесь описано назначение характеристики, тип хранимых данных, а также настройки характеристики.

3. Уникального идентификатора UUID и HANDLE.
Интересующие нас данные: количество зарегистрированных импульсов и заряд батареи хранятся как раз в характеристиках.

BLED112



Модуль представляет из себя USB-CDC устройство, которое определяется в системе как /dev/ttyACM0 и не требует установки никаких драйверов на Raspbian Jessie Lite с версией ядра 4.4. Обмен данными с модулем производится также как с последовательным портом. Протокол обмена – бинарный. Мы не будем сами писать парсер протокола, т.к. команд у этого модуля довольно много и возьмем SDK на языке Си от производителя. Ссылка на SDK будет в конце статьи.

ПО для Raspberry PI


Нам потребуются следующие файлы из SDK:

1. cmd_defs.c, cmd_defs.h
2. apitypes.h
3. commands.c
4. uart.c, uart.c

API является callback-based. В файле commands.c объявлены реализации-«заглушки» для неиспользуемых коллбеков. В SDK определены 2 типа сообщений, которые могут прийти от модуля: событие и результат выполнения операции. В нашей программе мы будем получать данные от дозиметра при помощи оповещений, которые отправляются дозиметром каждые 2 секунды при изменении измерительной характеристики. В итоге раз в 2 секунды будет приходить событие от модуля и вызываться соответствующий коллбек.

Разберем алгоритм подключения и обмена данными с дозиметром:

1. Открывает порт /dev/ttyACM0

2. Перезагружаем Bluetooth модуль при помощи функции api ble_cmd_system_reset();

3. Подключаемся к устройству по его адресу при помощи ble_cmd_gap_connect_direct()

4. Запрашиваем список сервисов устройства и диапазоны значений, в которых лежат HANDL’ы характеристик в этих сервисах ble_cmd_attclient_read_by_group_type()

5. После события ble_evt_attclient_procedure_completed запрашиваем список характеристик при помощи ble_cmd_attclient_find_information().

6. В событии ble_evt_attclient_find_information_found запоминаем HANDL’ы измерительной характеристики и Client Characteristic Configuration Descriptor (CCCD).

7. В событии ble_evt_attclient_procedure_completed включаем оповещения. В предыдущем пункте мы узнали HANDLE дескриптора CCCD и можем его прочесть или записать. Чтобы включить оповещения, нужно установить флаг «notifications enabled» в дескрипторе CCCD при помощи функции ble_cmd_attclient_attribute_write(). После отключения от устройства значение этого дескриптора обнулится.

8. Теперь при изменении значений характеристик устройства будет вызываться событие ble_evt_attclient_attribute_value(const struct ble_msg_attclient_attribute_value_evt_t *msg). Отличить одну характеристику от другой можно по параметру:
msg->atthandle.

Определим структуру значения измерительной характеристики:

typedef struct __attribute__((__packed__)){
uint8 status_flags;
float dose; //накопленная доза с момента включения
float doserate_search; //мощность дозы в режиме поиска
uint16 pulses_last2sec; //кол-во импульсов со счетчика Гейгера за последние 2 секунды
uint8 battery; //заряд батареи в процентах от 0 до 100
uint8 temperature; //температура в градусах
} atomtag_measurement_t;

atomtag_measurement_t measurement_char;

Поскольку порядок байт в значении измерительной характеристики – little endian, то достаточно скопировать все эти байты в упакованную структуру:

memcpy((uint8 *)&measurement_char, msg->value.data, msg->value.len);

Мощность дозы будем рассчитывать на временном интервале 6 минут. Отправлять показания на сервер narodmon.ru будем не чаще, чем раз в 6 минут. Помимо мощности дозы будем отправлять заряд батареи и статистическую погрешность. Все расчеты происходят в коллбеке ble_evt_attclient_attribute_value() в файле main.c.

Показания отправляются на порт 8283 narodmon.ru по протоколу tcp. Ответ от сервера не проверяется. Протокол текстовый:

#00:00:00:00:00:00\n
#R1#10.5#err = 10%, batt = 100%\n
##

Вначале следует MAC адрес устройства (6 байт). В исходниках MAC адрес вбит для примера, не забудьте его поменять! Далее, где 10.5 – это мощность дозы в мкР/ч, err – статистическая погрешность
Скомпилировал всё это при помощи gcc:

gcc -std=gnu99 -lm  main.c cmd_def.c commands.c uart.c web.c -o narodmon-bin

Для того, чтобы программа автоматически запускалась после загрузки ОС, я добавил следующие строки перед exit 0 в файл rc.local:

cd /
./home/pi/narodmon/narodmon-bin /dev/ttyACM0 5c:31:3e:da:e8:9c

5c:31:3e:da:e8:9c – адрес устройства Bluetooth, который можно узнать, если запустить эту программу с параметром scan:

./narodmon-bin /dev/ttyACM0 scan

Результаты


Спустя пару дней работы устройства на графиках появились интересные вещи. Здесь видно, как изменилась мощность дозы во время снегопада. 11 ноября в ~17:00…18:00 часов прекратился ледяной дождь и начал идти снег. По мере роста толщины снежного покрова средняя мощность дозы уменьшалась. Дозиметр установлен на высоте 2 метра от земли.

Снижение мощности дозы объясняется тем, что слой снега частично экранирует естественное гамма излучение у поверхности земли. Также снежный слой перекрывает доступ газа радона на поверхность, дочерние продукты распада которого можно засечь обычным дозиметром.

Теперь мы можем оценить толщину снега :) В те дни выпало около 8-10 сантиметров снега. В мире практикуется аэрогаммасъемка для оценки толщины снега в районах где находятся ГЭС, чтобы понять какого наводнения ожидать весной. Только там применяются гамма спектрометры со сцинтилляционными детекторами из-за их большей чувствительности.

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

Программу можно доработать, если добавить буфер, в который будут сохраняться показания дозиметра в моменты отсутствия подключения к интернету. API народного мониторинга позволяет отправлять показания «задним числом». Также стоит подключить raspberry pi к бесперебойнику. Несмотря на простоту конструкции удалось получить uptime около тридцати дней. Дозиметр на карте народного мониторинга можно найти здесь. Прошу не пинать — в linux я новичок.




Ссылки


1. Дозиметр AtomTag
2. SDK и документация Bluegiga BLED112
3. Сервис народный мониторинг
4. Bluetooth LE, спецификации
5. Исходный код
программы для Raspberry PI

6. Приложение под Android сервиса «Народный Мониторинг»
Поделиться с друзьями
-->

Комментарии (37)


  1. UksusoFF
    11.12.2016 23:04
    +1

    А можно вкратце дополнить статью что такое этот «Народный мониторинг»? Только датчики можно посмотреть?


    1. KbRadar
      12.12.2016 10:17
      +3

      Добавил описание во введение. Кроме датчиков там еще можно посмотреть вебкамеры.
      Интересная функция есть в приложении под Android: можно отображать показания выбранного датчика через виджет на рабочем столе. Очень удобно и всегда перед глазами.
      Добавил ссылку на приложение в конец статьи.


  1. olekl
    12.12.2016 13:17
    +1

    А про сам дозиметр бы еще написали, насколько хорошо меряет?


    1. KbRadar
      12.12.2016 14:04
      +1

      Меряет прекрасно. Это довольно уникальный приборчик по весу, размеру и времени непрерывной работы на одной зарядке аккумулятора. При отсутствии связи со смартфоном или планшетом работает автономно в режиме сигнализатора, имеет три порога по мощности дозы и дозе и настраиваемые сигналы звук\вибрация.
      Здесь лежит более подробное описание.


    1. Alexeyslav
      12.12.2016 16:23
      +1

      Меряет хорошо… но что именно? СБМ-20 это можно сказать датчик низшего ценового сегмента, ширпотреб. Изначальная погрешность у него +-30% и то на излучение которое он улавливает, а это довольно узкий участок возможных ионизирующих излучений — в основном это мягкое гамма-излучение, иногда бетта-излучение если корпус прибора мешать не будет. А вообще в целом, нормальных компактных датчиков не существует по приемлемой стоимости, везде какие-то компромиссы в датчиках. И если взять несколько датчиков разных конструкций то в целом они все будут показывать по разному, в зависимости от энергии(спектра) излучения которое измеряют. У них только одна общая характеристика — показания будут тем больше чем сильнее одно и то же излучение, при условии что они его вообще чувствуют т.е. классические показометры.
      СБМ-20 например ни при каких условиях не зарегистрирует альфа-излучение, за исключением сверхбольших мощностей доз когда из корпуса датчика будут тупо выбиваться электроны и вызывать ионизацию вторичным излучением.


      1. olekl
        12.12.2016 16:44
        +1

        Собственно вопрос — есть ли адекватный датчик для бытовых нужд? Чтоб ситуации типа протерянной на стройке ампулы с цезием или сданного на переплавку ритега обнаружить вовремя :)


        1. KbRadar
          12.12.2016 16:49
          +1

          Да, есть. История нашего «атомного» проекта началась именно с того что мне захотелось иметь датчик который можно всегда носить с собой. За эти 4 года было разработано довольно много приборов (от простейшего брелока-сигнализатора до сцинтилляционных спектрометрических детекторов) и все они выпускаются мелкими сериями. Практически все имеют довольно уникальные характеристики.


      1. KbRadar
        12.12.2016 16:46

        СБМ20 с завода имеет чувствительность нормированную с точностью лучше чем +-5%, по другим данным +-7.6%.
        ссылка для изучения

        Кто сказал что СБМ20 «не улавливает» жёсткое гамма-излечение?

        «Нормыльные компактные датчики» — понятие весьма широкое. Да, у недорогих малогабаритных счётчиков Гейгера-Мюллера чувствительность невысокая, но на них свет клином не сошёлся и есть из чего выбрать если известна задача которую будет решать детектор. Кстати у нас есть сцинтилляционная версия этого приборчика имеющая чувствительность около 1700 и 4300 имп\мкР (в первом и втором варианте исполнения, отличаются размерами кристаллов), это примерно как 25 и 65 штук СБМ20 соответственно.

        Чистые альфа-источники крайне редки и встретиться с ними в жизни простому человеку сложно. Да и если встретится наш человек с альфа-источником то для его обнаружения надо будет детектор к нему довольно близко подносить, в идеале — почти вплотную, главное детектор не испачкать.

        И ещё интересный момент: крайне мало кому нужна метрологическая точность при измерении ИИ. Стабильность работы прибора нужна. Скорость реакции нужна. А 55 или 62 мкР\ч на поверхности кирпичей — разницы никакой, лучше в обоих случаях поискать для строительства дачи материалы почище. Скорость реакции и стабильность нужна чтобы обнаружить малые количества радиоактивных веществ, например ПДК цезия-137 в ягодах (160 Бк\кг) создаёт на поверхности пробы кубической формы объёмом в один литр дополнительно к фону порядка 0.55 мкР\ч.


      1. SpiritOfVox
        12.12.2016 20:31

        У ТС есть сцинтилляторный вариант, но дорого


        1. KbRadar
          12.12.2016 20:39
          +1

          А если сравнить с другими приборами аналогичного класса то внезапно выйдет что отнюдь нет.


          1. SpiritOfVox
            12.12.2016 20:55

            Тем не менее 16 штук, это 16 штук. Понятно, что имеем вещь, но всё равно… земноводное так осуждающе смотрит при малейшей мысли ;-)

            А софт поддерживает два разных одновременно?


            1. KbRadar
              12.12.2016 21:36

              Под iOs — да. Хоть десять.



            1. KbRadar
              12.12.2016 21:40

              И да, вариант с кристаллом 4*7*35 мм — всего 12500 рублей. Практически по цене бутерброда.


            1. iliar
              12.12.2016 21:47
              +1

              по андройд сложнее. Но я решаю проблему двумя приложениями. Атом Некс для Таг-а, Атом Свифт для Фаст-а.


              1. SpiritOfVox
                12.12.2016 21:58

                А нельзя сделать одно, но с разными настройками под каждый тип?


                1. KbRadar
                  12.12.2016 22:11

                  Любое из этих приложений можно использовать с любым прибором, они друг друга поймут.


                1. iliar
                  13.12.2016 00:14
                  +1

                  Вы меня видимо не совсем правильно поняли. Каждое из этих приложений способно работать как с Tag так и с Fast. Однако одно приложение умеет работать только с одним прибором одновременно. Так как у меня два прибора одновременно работает, то я использую Atom Swift для Fast (мне это приложение больше нравится, поэтому так) и Atom Next для Tag. Естественно можно наоборот. Возможно в будущих весиях разработчики сделают так, что бы можно было бы с несколькими датчиками из одного приложения одновременно работать.


        1. WildHorn
          13.12.2016 10:57

          У ТС есть сцинтилляторный вариант

          Ну, у меня тоже есть сцинтилляционный вариант. и не один. И на постоянном мониторинге. Вот только мы так и не смогли прийти к решению как пересчитывать темп счёта в дозу.
          ТС, не поделитесь методикой?


          1. shodan_x
            13.12.2016 11:05

            Темп счета пересчитывается в дозу в два этапа:
            1 — определение чувствительности датчика к конкретному изотопу с известной активностью, чтобы получить МЭД.
            2 — А вот уже потом считается сколько времени под какой МЭД был датчик и получается накопленная доза.

            Можно погуглить фразы «гамма-константа» и «Health Physics and Radiological Health»


            1. WildHorn
              13.12.2016 11:09

              Нет, это понятно. Непонятно как получаются те самые пресловутые мкР/Ч. Ибо в фоновом спектре по определению нет (ну по крайней мере не должно) быть линий изотопов.


              1. shodan_x
                13.12.2016 11:15

                Фоновые получаются от рандомной бомбардировки датчика фотонами с практически-рандомной энергией.

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

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


                1. WildHorn
                  13.12.2016 11:41

                  Ну вот и я о том-же. Даже зная профиль эффективности регистрации кристалла, долю заряженных частиц (сцинтиллятор одинаково считает и гамму и электроны) и энергетический спектр излучения, аргументированно посчитать дозу не получается. Чем глубже закапываешься, том больше вопросов вылазит. Самый адекватный совет, действительно откалиброваться по уже известному детектору.
                  Просто была в своё время идея подключиться к тому самому «Народному мониторингу». Ибо пишем мы действительно всё и данные никто в институте не закрывает.


                  1. shodan_x
                    13.12.2016 12:44
                    +2

                    Ну учитывая что «известные детекторы» скорее всего сами калибруются классически по эталонам типа ОСГИ, то это только потеря в точности. Ибо при передаче едениц измерения от эталона к «детектору» происходит потеря точности, а при передаче едениц от «известного детектора» к вашему точность дополнительно «просядет».

                    Лучше уж калибровать ваш детектор сразу по раб. эталону типа ОСГИ и т.п.
                    Конечно результат всеравно будет как в известном мультике про 38 попугаев. Но хотя-бы будет известно что попугаи при калибровке были живые :) :) :)


      1. shodan_x
        13.12.2016 08:41
        +1

        Alexeyslav — на самом деле все даже еще веселее чем ты описал. Даже реакция на два гамма-изотопа будет разной. Если скажем прибор калиброван по Цезию, то на Натрии он будет уже «врать».

        Что касательно Атомов, рад за Макса, что у него все получается в плане серийного выпуска, но порекомендовал-бы ему, пройти обязательную, предусмотренную законодательством РФ сертификацию для данного вида продукции. Иначе его поделки не имеют права называться Дозиметрами/Спектрометрами и т.п.


        1. shodan_x
          13.12.2016 09:18

          N 184-ФЗ — статья 25

          и

          ПОСТАНОВЛЕНИЕ от 1 декабря 2009 г. N 982 — ОБ УТВЕРЖДЕНИИ ЕДИНОГО ПЕРЕЧНЯ ПРОДУКЦИИ, ПОДЛЕЖАЩЕЙ ОБЯЗАТЕЛЬНОЙ СЕРТИФИКАЦИИ
          «4362 Приборы, установки, системы для измерения и контроля ионизирующих излучений»


          1. KbRadar
            13.12.2016 12:12
            +1

            Вот когда будет «прибор, установка или система» — так сразу и почитаю что там написано. А у меня формально — бытовой индикатор радиоактивности с питанием от гальванического элемента, а такая вещица не нуждается в обязательной сертификации. С точки зрения закона что мои приборчики, что «соэкс» с «радексом» — одно и то же. Последние, правда, имеют какие-то добровольно полученные сертификаты которые только увеличивают стоимость устройств так как подтверждают только то что производитель поделился деньгами с дармоедами-бумагомарателями коих у нас в стране критическая масса давно превышена. Вторая проблема ситуации в том что эти бумагомаратели только жрут деньги и время, а ответственности никакой за свои действия не несут.

            За примерами далеко ходить не надо.

            Зашёл недавно на майдозиметр.ру посмотреть какой на данный момент времени есть самый дешёвый бытовой индикатор радиации на СБМ20. Оказалось — SMG-1, 4900 рублей.
            Там были любезно выложены сертификаты по которым я пробежался глазами и охуудивился. Скачал и на всякий случай сохранил — мало ли, осознают всю шедеВральность и удалят.
            Пусть полежат и здесь: раз, два, три.

            Внимание моё привлекла бумажка номер три, первая строка в таблице, говорящая о том что приборчик поместили в поле с мощностью дозы 7000 мкЗв/ч и он её померил с точностью 3%. Давайте разберёмся возможно ли это.
            В описании приборчика на сайте сказано что диапазон мощности дозы измеряемый им — до 999 мкЗв/ч. Для исключения ошибки скачал описание производителя в ПДФе — там те же данные.
            Из описания счётчика СБМ20 следует что максимальная мощность дозы для него — 144 мР/ч, или около 1440 мкЗв/ч. Пусть этот «сертификат» останется на совести тех кто его писал и выкладывал в сеть…

            Мне с моими приборчиками не нужен поток покупателей ради которых другие магазины выкладывают такие «сертификаты». Производительность у меня крайне ограничена, поэтому то что меня бывает не так просто найти в некотором плане мне на руку. Кому надо — тот найдёт. Мой средний покупатель — здравомыслящий человек который хочет чтобы вся оплаченная им сумма пошла в прибор а не 30% магазину, 15% дизайнерам, 25% на сертификаты, 5% Ирочке-секретарше, а остальное так уж и быть можно пустить в производство. Также следут отметить тот факт что своих покупателей консультирую, помогаю в настройке ПО и интерпретации результатов измерений, а это часто дорогого стоит.
            Результат такого подхода не заставил себя ждать: на некоторые изделия цену получилось снизить в пять раз относительно ближайших аналогов (Atom Fast 8*8*50 против Полимастер 1703 с таким же объёмом кристалла, Atom Spectra 1 против Прогресс-гамма), даже простой bluetooth-радиометр Atom Tag стоит дешевле чем существенно худшее по параметрам(потребление, размер, вес) устройство «гамма сапиенс».

            Я всегда открыт для сотрудничества и диалога, и если появится покупатель которому понадобится устройство имеющее сертификат то скорее всего сертификат будет получен, разумеется за деньги покупателя.


            1. shodan_x
              13.12.2016 12:29

              Максим, с формулировкой «Индикатор радиактивности» согласен, не нуждается в сертификации.
              Просто смущает факт что Атомы и Атом-спектры вами называются гордо спектрометрами и дозиметрами.
              Даже на вашем офф. сайте
              Типа как тут
              http://kbradar.org/p223290497-dozimetr-radiatsii-atom.html


            1. shodan_x
              13.12.2016 12:36

              Тоесть корректно было бы писать не " bluetooth-радиометр Atom Tag", а " bluetooth-индикатор радиактивности Atom Tag"

              Не «спектрометр Атом-Спектра» а какой-нибудь «Индикатор спектра .....»

              Иначе закон нарушаете.

              Ты не подумай, я без претензий, просто совет.


    1. iliar
      12.12.2016 17:27
      +2

      У него точно такая же точность как и у других приборов на датчике СБМ-20 без фильтра. Та же чувствительность, тот же ход жесткости, и т д. Собственно СБМ-20 крайне примитивен в использовании. Считай импульсы, делай поправку на мертвое время (нужно только при больших МЭД, при околофоновых практически не влияет на результат) и собственную скорость счета счетчика). Никакой свободы для творчества.

      Нет конечно в ПО Таг-а есть некоторые фишки которых нет в некоторых бытовых дозиметрах. Вроде скользящего среднего в режиме поиска, неограниченно долгого усреднения для уменьшения статистической погрешности, собственно расчет статистической погрешности при измерении и вывод её на экран и вычитание фона (с учетом статистической погрешности) для фиксации небольшой активности. Но во первых эти штуки на точность не влияют. Во вторых я считаю правильнее не хвалить разработчиков этого прибора, а ругать разработчиков других бытовых приборов которые не делают такие в принципе простые вещи.

      Но если говорить о приборе в целом. Главная его фишка это не точность измерения, а отсутствие необходимости в его выключении. При таком времени автономной работы в этом нет смысла. А при таком размере он может быть всегда с собой


  1. 0x25
    12.12.2016 15:09
    +2

    Может имеет смысл подключиться к более глобальной сети мониторинга? uRADMonitor


  1. SpiritOfVox
    12.12.2016 20:58
    +1


    1. KbRadar
      12.12.2016 21:38

      Тогда уж лучше вот это видео.


  1. user343
    14.12.2016 13:15

    А можно ли сделать подобную измерялку для ЭМИ 0,01-80ГГц и без «смертьфонов»?


    1. KbRadar
      14.12.2016 16:10

      Можно конечно. Какие характеристики нужны и зачем до 80 ГГц?


      1. Alexeyslav
        14.12.2016 16:33

        Много всякой фигни работает до 70ГГц например. Измерители скорости авто, радиорелейные линии, беспроводные сетевые карты диапазона 70ГГц, сигнализатор опасного сближения на авто — порядка 20-30ГГц, доплеровский датчик движения — 10-20ГГц…
        Наш быт уже начинают окружать подобные частоты… и причём не первый год.


        1. KbRadar
          14.12.2016 16:40

          Это понятно что много всякой фигни работает. Но конструирование таких вещей надо начинать с понимания того что, в каких условиях и с какой точностью мы хотим померить. Выше 24.150 уже крайне мало всего, а если и есть то надо вылезать на крышу и направлять антенну с узкой ДН на источник сигнала.