Введение
В этой статье я расскажу как подключить дозиметр 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)
olekl
12.12.2016 13:17+1А про сам дозиметр бы еще написали, насколько хорошо меряет?
KbRadar
12.12.2016 14:04+1Меряет прекрасно. Это довольно уникальный приборчик по весу, размеру и времени непрерывной работы на одной зарядке аккумулятора. При отсутствии связи со смартфоном или планшетом работает автономно в режиме сигнализатора, имеет три порога по мощности дозы и дозе и настраиваемые сигналы звук\вибрация.
Здесь лежит более подробное описание.
Alexeyslav
12.12.2016 16:23+1Меряет хорошо… но что именно? СБМ-20 это можно сказать датчик низшего ценового сегмента, ширпотреб. Изначальная погрешность у него +-30% и то на излучение которое он улавливает, а это довольно узкий участок возможных ионизирующих излучений — в основном это мягкое гамма-излучение, иногда бетта-излучение если корпус прибора мешать не будет. А вообще в целом, нормальных компактных датчиков не существует по приемлемой стоимости, везде какие-то компромиссы в датчиках. И если взять несколько датчиков разных конструкций то в целом они все будут показывать по разному, в зависимости от энергии(спектра) излучения которое измеряют. У них только одна общая характеристика — показания будут тем больше чем сильнее одно и то же излучение, при условии что они его вообще чувствуют т.е. классические показометры.
СБМ-20 например ни при каких условиях не зарегистрирует альфа-излучение, за исключением сверхбольших мощностей доз когда из корпуса датчика будут тупо выбиваться электроны и вызывать ионизацию вторичным излучением.olekl
12.12.2016 16:44+1Собственно вопрос — есть ли адекватный датчик для бытовых нужд? Чтоб ситуации типа протерянной на стройке ампулы с цезием или сданного на переплавку ритега обнаружить вовремя :)
KbRadar
12.12.2016 16:49+1Да, есть. История нашего «атомного» проекта началась именно с того что мне захотелось иметь датчик который можно всегда носить с собой. За эти 4 года было разработано довольно много приборов (от простейшего брелока-сигнализатора до сцинтилляционных спектрометрических детекторов) и все они выпускаются мелкими сериями. Практически все имеют довольно уникальные характеристики.
KbRadar
12.12.2016 16:46СБМ20 с завода имеет чувствительность нормированную с точностью лучше чем +-5%, по другим данным +-7.6%.
ссылка для изучения
Кто сказал что СБМ20 «не улавливает» жёсткое гамма-излечение?
«Нормыльные компактные датчики» — понятие весьма широкое. Да, у недорогих малогабаритных счётчиков Гейгера-Мюллера чувствительность невысокая, но на них свет клином не сошёлся и есть из чего выбрать если известна задача которую будет решать детектор. Кстати у нас есть сцинтилляционная версия этого приборчика имеющая чувствительность около 1700 и 4300 имп\мкР (в первом и втором варианте исполнения, отличаются размерами кристаллов), это примерно как 25 и 65 штук СБМ20 соответственно.
Чистые альфа-источники крайне редки и встретиться с ними в жизни простому человеку сложно. Да и если встретится наш человек с альфа-источником то для его обнаружения надо будет детектор к нему довольно близко подносить, в идеале — почти вплотную, главное детектор не испачкать.
И ещё интересный момент: крайне мало кому нужна метрологическая точность при измерении ИИ. Стабильность работы прибора нужна. Скорость реакции нужна. А 55 или 62 мкР\ч на поверхности кирпичей — разницы никакой, лучше в обоих случаях поискать для строительства дачи материалы почище. Скорость реакции и стабильность нужна чтобы обнаружить малые количества радиоактивных веществ, например ПДК цезия-137 в ягодах (160 Бк\кг) создаёт на поверхности пробы кубической формы объёмом в один литр дополнительно к фону порядка 0.55 мкР\ч.
SpiritOfVox
12.12.2016 20:31У ТС есть сцинтилляторный вариант, но дорого
KbRadar
12.12.2016 20:39+1А если сравнить с другими приборами аналогичного класса то внезапно выйдет что отнюдь нет.
SpiritOfVox
12.12.2016 20:55Тем не менее 16 штук, это 16 штук. Понятно, что имеем вещь, но всё равно… земноводное так осуждающе смотрит при малейшей мысли ;-)
А софт поддерживает два разных одновременно?KbRadar
12.12.2016 21:40И да, вариант с кристаллом 4*7*35 мм — всего 12500 рублей. Практически по цене бутерброда.
iliar
12.12.2016 21:47+1по андройд сложнее. Но я решаю проблему двумя приложениями. Атом Некс для Таг-а, Атом Свифт для Фаст-а.
SpiritOfVox
12.12.2016 21:58А нельзя сделать одно, но с разными настройками под каждый тип?
KbRadar
12.12.2016 22:11Любое из этих приложений можно использовать с любым прибором, они друг друга поймут.
iliar
13.12.2016 00:14+1Вы меня видимо не совсем правильно поняли. Каждое из этих приложений способно работать как с Tag так и с Fast. Однако одно приложение умеет работать только с одним прибором одновременно. Так как у меня два прибора одновременно работает, то я использую Atom Swift для Fast (мне это приложение больше нравится, поэтому так) и Atom Next для Tag. Естественно можно наоборот. Возможно в будущих весиях разработчики сделают так, что бы можно было бы с несколькими датчиками из одного приложения одновременно работать.
WildHorn
13.12.2016 10:57У ТС есть сцинтилляторный вариант
Ну, у меня тоже есть сцинтилляционный вариант. и не один. И на постоянном мониторинге. Вот только мы так и не смогли прийти к решению как пересчитывать темп счёта в дозу.
ТС, не поделитесь методикой?shodan_x
13.12.2016 11:05Темп счета пересчитывается в дозу в два этапа:
1 — определение чувствительности датчика к конкретному изотопу с известной активностью, чтобы получить МЭД.
2 — А вот уже потом считается сколько времени под какой МЭД был датчик и получается накопленная доза.
Можно погуглить фразы «гамма-константа» и «Health Physics and Radiological Health»WildHorn
13.12.2016 11:09Нет, это понятно. Непонятно как получаются те самые пресловутые мкР/Ч. Ибо в фоновом спектре по определению нет (ну по крайней мере не должно) быть линий изотопов.
shodan_x
13.12.2016 11:15Фоновые получаются от рандомной бомбардировки датчика фотонами с практически-рандомной энергией.
Тут не получится никак сказать конкретную дозу, т.к. некоторые частицы очень высоко-энергитическеские, и их энергия никак не может быть точно измерена.
Если стоит задача максимально точно измерить фоновую дозу, ее можно посчитать из спектра, по формуле в книжке о которой я писал. Но опять-же не все энергии фотонов могут быть зафиксированны корректно. Поэтому это скорее задача больше теоретическая чем практическая.WildHorn
13.12.2016 11:41Ну вот и я о том-же. Даже зная профиль эффективности регистрации кристалла, долю заряженных частиц (сцинтиллятор одинаково считает и гамму и электроны) и энергетический спектр излучения, аргументированно посчитать дозу не получается. Чем глубже закапываешься, том больше вопросов вылазит. Самый адекватный совет, действительно откалиброваться по уже известному детектору.
Просто была в своё время идея подключиться к тому самому «Народному мониторингу». Ибо пишем мы действительно всё и данные никто в институте не закрывает.shodan_x
13.12.2016 12:44+2Ну учитывая что «известные детекторы» скорее всего сами калибруются классически по эталонам типа ОСГИ, то это только потеря в точности. Ибо при передаче едениц измерения от эталона к «детектору» происходит потеря точности, а при передаче едениц от «известного детектора» к вашему точность дополнительно «просядет».
Лучше уж калибровать ваш детектор сразу по раб. эталону типа ОСГИ и т.п.
Конечно результат всеравно будет как в известном мультике про 38 попугаев. Но хотя-бы будет известно что попугаи при калибровке были живые :) :) :)
shodan_x
13.12.2016 08:41+1Alexeyslav — на самом деле все даже еще веселее чем ты описал. Даже реакция на два гамма-изотопа будет разной. Если скажем прибор калиброван по Цезию, то на Натрии он будет уже «врать».
Что касательно Атомов, рад за Макса, что у него все получается в плане серийного выпуска, но порекомендовал-бы ему, пройти обязательную, предусмотренную законодательством РФ сертификацию для данного вида продукции. Иначе его поделки не имеют права называться Дозиметрами/Спектрометрами и т.п.shodan_x
13.12.2016 09:18N 184-ФЗ — статья 25
и
ПОСТАНОВЛЕНИЕ от 1 декабря 2009 г. N 982 — ОБ УТВЕРЖДЕНИИ ЕДИНОГО ПЕРЕЧНЯ ПРОДУКЦИИ, ПОДЛЕЖАЩЕЙ ОБЯЗАТЕЛЬНОЙ СЕРТИФИКАЦИИ
«4362 Приборы, установки, системы для измерения и контроля ионизирующих излучений»
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 стоит дешевле чем существенно худшее по параметрам(потребление, размер, вес) устройство «гамма сапиенс».
Я всегда открыт для сотрудничества и диалога, и если появится покупатель которому понадобится устройство имеющее сертификат то скорее всего сертификат будет получен, разумеется за деньги покупателя.
shodan_x
13.12.2016 12:29Максим, с формулировкой «Индикатор радиактивности» согласен, не нуждается в сертификации.
Просто смущает факт что Атомы и Атом-спектры вами называются гордо спектрометрами и дозиметрами.
Даже на вашем офф. сайте
Типа как тут
http://kbradar.org/p223290497-dozimetr-radiatsii-atom.html
shodan_x
13.12.2016 12:36Тоесть корректно было бы писать не " bluetooth-радиометр Atom Tag", а " bluetooth-индикатор радиактивности Atom Tag"
Не «спектрометр Атом-Спектра» а какой-нибудь «Индикатор спектра .....»
Иначе закон нарушаете.
Ты не подумай, я без претензий, просто совет.
iliar
12.12.2016 17:27+2У него точно такая же точность как и у других приборов на датчике СБМ-20 без фильтра. Та же чувствительность, тот же ход жесткости, и т д. Собственно СБМ-20 крайне примитивен в использовании. Считай импульсы, делай поправку на мертвое время (нужно только при больших МЭД, при околофоновых практически не влияет на результат) и собственную скорость счета счетчика). Никакой свободы для творчества.
Нет конечно в ПО Таг-а есть некоторые фишки которых нет в некоторых бытовых дозиметрах. Вроде скользящего среднего в режиме поиска, неограниченно долгого усреднения для уменьшения статистической погрешности, собственно расчет статистической погрешности при измерении и вывод её на экран и вычитание фона (с учетом статистической погрешности) для фиксации небольшой активности. Но во первых эти штуки на точность не влияют. Во вторых я считаю правильнее не хвалить разработчиков этого прибора, а ругать разработчиков других бытовых приборов которые не делают такие в принципе простые вещи.
Но если говорить о приборе в целом. Главная его фишка это не точность измерения, а отсутствие необходимости в его выключении. При таком времени автономной работы в этом нет смысла. А при таком размере он может быть всегда с собой
0x25
12.12.2016 15:09+2Может имеет смысл подключиться к более глобальной сети мониторинга? uRADMonitor
UksusoFF
А можно вкратце дополнить статью что такое этот «Народный мониторинг»? Только датчики можно посмотреть?
KbRadar
Добавил описание во введение. Кроме датчиков там еще можно посмотреть вебкамеры.
Интересная функция есть в приложении под Android: можно отображать показания выбранного датчика через виджет на рабочем столе. Очень удобно и всегда перед глазами.
Добавил ссылку на приложение в конец статьи.