Передмова
Розробляючи і тестуючи власний пристрій вимірювання рівня радіації з трубкою СБМ-20, ми зіштовхнулися із завищеними рівнями, які показував наш пристрій. Задача перетворення імпульсів з трубки Гейгера-Мюллера, що надходять на вхід контролера виявилася непростою, принаймні підштовхнула нас досконало розібратися у темі. Пошук у інтернет не дав однозначного розуміння, яку формулу приймати за основу розрахунків. Одне що ми знали однозначно, приступаючи до програмування, що весь принцип роботи побудовано на підрахунку імпульсів, які виникають в трубці під час пролітання крізь площину колби трубки радіоактивних частинок.
Врешті-решт, ми розібралися і розробили власний програмний модуль radCounter, що гнучко налаштовується, а головне, вимірює еквівалентну потужність випромінювання з точністю розташованого поруч еталонного дозиметра.
Для того, щоб досягнути якісних результатів вимірювання, необхідно правильно розуміти і налаштувати ключові параметри програмно-апаратної системи вимірювання. Оскільки у більшості випадків ми не можемо впливати на апаратну частину, а також завдяки осцилографу нам відомо, що електроніка працює вірно, залишається сконцентрувати зусилля на програмній частині. Програмний модуль radCounter враховує можливість налаштування усіх важливих параметрів. Деякі параметри доступні для налаштування у змінних виклику на етапі ініціалізації, а деякі константи користувач може налаштувати у вихідному коді. Користувач модуля може легко змінити код для застосування, наприклад, з іншою трубкою Гейгера-Мюллера.
Для мети даної публікації виокремимо наступні характеристки і відповідні їм параметри модуля radCounter
:
- Час одиничного циклу вимірювання;
- Коефіцієнт перетворення;
- Дискретна логіка реєстрації вхідних імпульсів контролером;
- Фільтри брязкоту;
- Ковзне середнє;
- Статистика, що накопичується.
Час одиничного циклу вимірювання;
Вивчаючи пропозиції магазинів, читач міг помітити, що однією з характеристик, котру продавці часто наводять у якості переваги, є час вимірювання з моменту вмикання живлення.
Дійсно, час необхідний на вимірювання є дуже важливим, але ми не радимо оцінювати цю характеристику як якусь певну перевагу і ось чому: проміжки часу, через котрі радіоактивні частинки пролітають крізь трубку є неоднорідними, а тому чим коротшим є час вимірювання, тим більшою є похибка. Ідеально було б взагалі, для отримання мікрозівертів на годину, проводити вимірювання протягом години. Але на щастя, у документації трубки наводяться дані, котрі дозволяють нам проводити вимірювання протягом хвилини.
Також слід відмітити, що є технічне рішення, котре дозволяє скоротити час вимірювання за рахунок застосування не однієї, а кількох трубок Гейгера-Мюллера одночасно. На наш погляд це значно підвищує витрати як на самі трубки так і на електроніку довкола трубки і в приладах побутового призначення не є економічно виправданим.
В інших трубках параметри можуть вимагати проводити вимірювання протягом значно більшого або меншого проміжку часу, тому radCounter надає можливість задавати значення тривалості циклу вимірювання у мілісекундах. За замовчуванням radCounter використовує проміжок часу у 60 000 мілісекунд (1 хвилина) див. Рис.1.
Рис.1 Формат виклику метода radCounter.init()
, параметр time_out
Наші практичні тести показали, що ні чверть хвилини ні половина хвилини не є гарним рішенням – результати є або сильно завищеними, або заниженими. У той же час, професійний дозиметр (з іншою трубкою), лише робить вигляд, що за 15 секунд щось вимірює – ця цифра також дуже сильно коливається приблизно протягом 60 секунд.
Коефіцієнт перетворення імпульсів у потужність випромінювання
Для того, щоб вивести у консоль розробника чи на дисплей пристрою значення рівня потужності випромінювання у мікро зівертах на годину, нам необхідно знати коефіцієнт перерахунку. Адже реєстратор імпульсів і трубка СБМ-20 у його складі постачає на вхід контролера лише безрозмірні імпульси. Також ми знаємо час, протягом котрого цю кількість імпульсів було отримано.
Документація дає неоднозначні дороговкази для обчислення коефіцієнту перерахунку, а тому ми вирішили перевірити отримані розрахункові дані. Математично ми отримали коефіцієнт 0.0092.
Пошук коефіцієнту і принципів розрахунку у інтернет, для трубки СБМ-20, дав нам декілька результатів:
- найчастіше, на форумах приводиться коефіцієнт 0.0057;
- одна з провідних аматорських мереж вимірювання радіації, застосовує 0.0063;
в той же час, нас розрахунки за документацією на СБМ-20
- приводять до цифри 0.0092.
Відразу скажемо, наш програмний продукт radCounter використовує коефіцієнт 0.0057. Ми зупинилися на цьому значенні, бо провели випробування з еталонним дозиметром в різних умовах і цей коефіцієнт дав аналогічні результати на нашому тестовому стенді з різницею в десятитисячних значеннях після коми.
Про те, яким чином ми розрахувати коефіцієнт перетворення 0.0092 за документацією виробника, ви можете прочитати за посиланням: Перерахунок імпульсів у потужність випромінювання. Але ми радимо не заглиблюватися у математичні розрахунки і будувати перевірене рішення на базі radCounter
.
Метод ініціалізації radCounter.init()
не дозволяє з боку виклику явно задавати коефіцієнт перерахунку, але у вихідному коді цей коефіцієнт присутній у вигляді константи SBM20_COEF
і може бути налаштованим за потреби.
Дискретна логіка реєстрації вхідних імпульсів контролером
Під час розробки власного пристрою, як було вже зазначено, ми зіткнулися із завищеними рівнями радіації, що проявляє себе у значно більшій кількості імпульсів, ніж це має бути за нормальних умов. Наприклад, імпульсів має бути 18-20, а ми бачимо 35-50, а іноді і 70. Вирішили проблему завдяки зміні програмної обробки вхідних імпульсів. Також у процесі розробки фільтрів, вирішення цієї проблеми знайшло своє відображення у системі налаштувань модуля radCounter
– ми ввели у метод ініціалізації параметр dir
, відповідає за вибір типів обробки переривання на GPIO:
Рис.2 Формат виклику метода radCounter.init()
, параметр dir
Як результат наших зусиль, маємо універсальний модуль radCounter, що дозволяє гнучко налаштуватися і видавати правильну кількість імпульсів і відповідну потужність іонізуючого випромінювання.
Пояснення ефекту, з котрим ми зіткнулися, криється у перехідних процесах, що створює розряд у трубці. Контролер на вході очікує сигнал правильної квадратної форми, але в реальності сигнал має наближену до квадратної форми, та з великою кількістю “зубів” по амплітуді.
Апаратно приводити форму до очікуваної немає сенсу, адже тоді ми самі собі “засліплюємо очі” при підрахунку і одночасно підвищуємо собівартість пристрою надлишковою електронікою узгодження і формування форми сигналу.
Фільтри брязкоту
Для додаткового захисту від завад, модуль radCounter
надає можливість користувачеві вмикати/вимикати два фільтри, що працюють на різних рівнях обробки вхідних імпульсів від трубки.
Перший, так званий lo_flt
, дозволяє ігнорувати подвійні та потрійні хибні-позитивні імпульси, що виникають на порту контролера. Ці хибні спрацювання найчастіше пов’язані з поганими контактами в роз’ємах (штирьові провідники для швидкого монтажу чого тільки вартують у негативному сенсі). Фільтр застосовує можливості API NodeMCU, що надає метод модуля обробки переривань gpio.trig()
.
Другий фільтр, так званий hi_flt
, працює вже на вищому рівні обробки результатів і в свою чергу відкидає всі ті імпульси, котрі фізично не може генерувати трубка СБМ-20 відповідно своїх технічних характеристик. У якості параметра застосовується константа deadtime = 190 мікросекунд. Імпульс, що прямує за попереднім на відстані меншій за deadtime, буде відфільтровано.
Для зручності користування, radCounter
передбачає вмикання “ON” чи “OFF” вимикання цих фільтрів з рядка виклику під час ініціалізації:
Рис.3 Формат виклику методу radCounter.init()
, параметри lo_flt
та hi_glt
Наведемо приклад роботи фільтрів:
Рис.4 Результат циклу роботи модуля radCounter
без фільтрів
Ковзне середнє
Для того, щоб усталити покази лічильника, як і в будь-яких сенсорних системах вимірювання, в radCounter використовується ковзне середнє на масиві з п’яти циклів вимірювання. Виглядає це так, як показано на Рис.5:
Рис.5 Результати вимірювання за перші 6 хвилин роботи пристрою – ковзне середнє
Як результат, користувач отримує усталене значення потужності випромінювання, що оновлюється щохвилини без втрати контексту вимірювання за останні 5 одиничних циклів вимірювання, по хвилині кожний.
Як тільки масив з п’яти елементів наповнюється, маркер переходить на перший елемент і оновлює вже його, рухаючись у нескінченному циклі: [1-5]-[1-5]-…[1
У випадку різкої зміни результату вимірювання, кожен наступний цикл вимірювання безпосередньо впливає на цифру поточного середнього значення результату, що є прийнятним. В той же час, випадкові відхилення системи вимірювання, які неодмінно спостерігаються без ковзного середнього, а також заявлені виробником, не впливають і не розгойдують результат.
За зручності потрібно платити – кожна зміна значення можлива не частіше одного разу на хвилину. З іншого боку, вимірювання протягом хвилини, є запорукою правильного вимірювання і це вже було розглянуто раніше.
Статистика, що накопичується
Модуль radCounter
крім основних параметрів, також розраховує:
- вилку мінімального і максимального значення потужності випромінювання;
- сумарну кількість імпульсів;
- дозу опромінення мкЗв, як суму доз отриманих за час роботи.
- кількість циклів вимірювання, що також дорівнює часу вимірювання у хвилинах.
Метод radCounter.read()
повертає параметри як функція, що значно спрощує програмування.
Зручне виконання у вигляді модуля з публічними методами
Програмний продукт radCounter
виконано як модуль, що легко інтегрується до складу будь-якого проекту на Lua, завдяки реєстрації публічних методів radCounter.init()
і radCounter.read()
у системному оточенні прошивки NodeMCU.
З описом програмного модуля radCounter
можливо за посиланням: Модуль лічильника імпульсів
Висновки
Шановний читач також може прочитати нашу статтю про самостійну розробку модуля вимірювання радіації, але з огляду на власний досвід, що ми отримали під час розробки нашого продукту, ми радимо придбати і використовувати готовий модуль, що вже враховує необхідні налаштування і виконує розрахунок всіх необхідних параметрів. Якби на момент розробки нами лічильника Гейгера для власних потреб ми натрапили на radCounter
, то неодмінно придбали б його – модуль дозволяє заощадити купу часу і отримати концентрований досвід.
Бажаємо успіхів!