Детектор Судного дня или как я разработал датчик радиации для Home Assistant

в 8:01, , рубрики: arduino, esp8266, homeassistant, IOT разработка, timeweb_статьи, датчик радиации, разработка электроники
Внешний вид датчика BME680, установленного на плате

С чего всё началось

В начале 2023 года, во многих СМИ появилась информация, что стрелки часов Судного дня перевели на десять секунд. Сейчас они замерли на отметке 90 секунд до полуночи, и теперь часы показывают самый высокий уровень риска ядерной катастрофы за всю историю проекта. Эта информация побудила меня создать устройство для мониторинга фоновой радиации — мог бы написать я, но на самом деле, всё началось гораздо раньше и об этом расскажу далее.

Однажды вечером, в 2015 году, мне захотелось посмотреть статистику фоновой радиации в регионе где я проживаю, зашел на мой любимый проект под названием «Народный мониторинг» и начал искать близлежащие датчики, которые могли бы измерять фоновую радиацию. На моё удивление, я не обнаружил подобных датчиков. Ладно, не беда, сказал я себе, ведь я живу в регионе, где есть государственные предприятия атомной энергетики, на их сайте должна же быть публичная информация об уровне фонового излучения. Зашел на сайт, да, действительно, есть статистика по уровню фонового излучения, где на графике показана прямая линия без намека на динамику, естественно, данный результат меня не устроил и я решил собирать статистику самостоятельно, разработав свое устройство.

Немного информации о том, что собой представляет ионизирующее излучение (радиация)

image

На рисунке схематично изображена проникающая способность трех видов излучения

Альфа-излучение представляет собой поток альфа-частиц (ядер гелия-4). Альфа-частицы излучаются при радиоактивном распаде и могут быть легко остановлены листом бумаги. Бета-излучение — это поток электронов, возникающих при бета-распаде, для защиты от бета-частиц энергией до 1 МэВ достаточно алюминиевой пластины толщиной в несколько миллиметров. Гамма-излучение обладает гораздо большей проникающей способностью, поскольку состоит из фотонов с высокой энергией, не обладающих зарядом, для защиты эффективны тяжёлые элементы (свинец и т. д.), поглощающие фотоны Гамма-излучения в слое толщиной несколько см.

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

Так, немного разобрались что такое радиация, надеюсь, эта информация не утомила вас. Предлагаю перейти к конструкции устройства.

Аппаратная часть устройства

Так как основным эффектом радиационного излучения является ионизация, то для детектирования излучения используется простое решение — трубка (счетчик) Гейгера-Мюллера.

image
image

Краткое описание работы трубки(счетчика) Гейгера-Мюллера:

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

Чтобы работать с трубкой, необходим источник высокого напряжения на 400В. В качестве источника высокого напряжения я решил применить повышающий Step-UP преобразователь на базе ШИМ контроллера MAX1771, который хорошо себя показал в проекте часов на ламповых индикаторах. За интеллектуальную часть устройства отвечает микроконтроллер ESP8266.
Итак, ниже размещена принципиальная схема разработанного устройства.

image

  • Рендер печатной платы:

image

  • Печатная плата в собранном виде:

image

  • Один из вариантов корпуса устройства:

image

Разработка корпуса устройства

Корпус спроектирован во FreeCAD, данный вариант корпуса изготовлен с учетом применения трубки СИ180Г.

image

Еще немного картинок готового устройства:

image
image

На фото вариант устройства с применением массива трубок СИ1-Г/

Разработка программной части устройства

Программная часть не подразумевает каких-то сложных решений, наша задача подсчитать импульсы, приходящие с трубки Гейгера-Мюллера за определенный промежуток времени и применить расчетный коэффициент трубки. В прошивке устройства будет использоваться несколько временных интервалов подсчета импульсов, 10 сек, 1 мин, 5 мин, 60 мин. Подсчет импульсов будет выполняться с помощью аппаратного прерывания.

attachInterrupt(digitalPinToInterrupt(4), count_tube, FALLING);

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

  • Ниже представлена функция счетчиков импульса:

ICACHE_RAM_ATTR void count_tube(){ 
     bCP10s++;
     bCP1m++;
     bCP5m++;
     bCP60m++; 
}

  • Функция вычисления накопленной дозы для разных временных интервалов:

void timers(){
   unsigned long currentMillis = millis();  
     if((currentMillis - t10s) > 10000 ){ 
            val10s  = bCP10s*0.06*settings.tubecof;
            t10s    = currentMillis;
            CP10s   = bCP10s;
            bCP10s  = 0;  
        }
        
    if((currentMillis - t60s) > 60000 ){ 
             val1m  = bCP1m*0.01*settings.tubecof;
             t60s   = currentMillis;
             CP1m   = bCP1m;
             bCP1m  = 0;     
        }

    if((currentMillis - t5min) > 300000){ 
              val5m = bCP5m*0.002*settings.tubecof;
              t5min = currentMillis;
              CP5m  = bCP5m;
              bCP5m = 0; 
        }    
     
    if((currentMillis - t60min) > 3600000){ 
             val60m = bCP60m*0.00017*settings.tubecof;
             t60min = currentMillis;
             CP60m  = bCP60m;
             bCP60m = 0;
        }  
}

Ссылка на исходный код будет добавлена конце статьи.

Конфигурация устройства / интерфейс

В данной версии программного обеспечения для конфигурации устройства используется веб-интерфейс. Для первичной настройки при отсутствии подключения к сети устройство создает Wi-Fi точку доступа, при подключение к которой выполняется автоматическая переадресация на веб-страницу устройства (реализована с применением технологии Captive portal).

  • Интерфейс главной страницы:

image

Доступ к конфигурации устройства выполняется только после авторизации.

  • Интерфейс настройки подключения по MQTT протоколу:

image

Интеграция в Home Assistant

Для передачи данных в Home Assistant, как вы уже могли догадаться, используется протокол MQTT. Ниже приведен пример интеграции, в примере использован формат данных JSON и имя топика «r_sensor/jsondata».

Формат данных JSON для данного устройства:


{
"CP10s":"6",
"CP1m":"34",
"CP5m":"158",
"CP60m":"1977",
"val10s":"11.16","
val1m":"10.54","
val5m":"9.80",
"val60m":"10.42",
"WORKTIME":"3900" }

Ключи, которые начинаются на «CP» — это «сырые» данные, полученные от трубки, Ключи начинающиеся на «val» — это итоговое значение уровня излучения.

Для интеграции в Home Assistant в конфигурационном файле configuration.yaml, добавьте следующий код (пример):


mqtt:
  sensor:
    - name: "Сенсор фонового излучения (10 сек)"
      unique_id: 5bc54f8b-7767871-47fg74-e98e92456
      state_topic: "r_sensor/jsondata"
      unit_of_measurement: "uRh"
      value_template: "{{ value_json.val10s }}"
    - name: "Сенсор фонового излучения (1 мин)"
      unique_id: 5bc54f8b-7767871-47fg74-e98e926456
      state_topic: "r_sensor/jsondata"
      unit_of_measurement: "uRh"
      value_template: "{{ value_json.val1m }}"
    - name: "Сенсор фонового излучения (5 мин)"
      unique_id: 5bc54f8b-7767871-47fg74-ee92456
      state_topic: "r_sensor/jsondata"
      unit_of_measurement: "uRh"
      value_template: "{{ value_json.val5m }}"
    - name: "Сенсор фонового излучения (60 мин)"
      unique_id: 5bc54f8b-7767871-47fg4-e6e92456
      state_topic: "r_sensor/jsondata"
      unit_of_measurement: "uRh"
      value_template: "{{ value_json.val60m }}"

Чтобы добавить в dashboard Home Assistant карточку с отображением данных, создайте карточку «Объекты» и в текстовом редакторе необходимо вставить следующий код:

type: entities
entities:
  - entity: sensor.sensor_fonovogo_izlucheniia_10_sek
  - entity: sensor.sensor_fonovogo_izlucheniia_1_min
  - entity: sensor.sensor_fonovogo_izlucheniia_5_min
  - entity: sensor.sensor_fonovogo_izlucheniia_60_min_2
state_color: true
title: Мониторинг излучения

В итоге должна получиться подобная карточка с отображением данных:

image

На этом мы закончили базовую интеграцию датчика в Home Assistant.

Немного информации о дополнительных функциях

В устройстве предусмотрена функция звуковой индикации. Да-да, это тот самый звук потрескивания при регистрации частицы. Думаю, радиофилы и радиофобы будут довольны).

Так же в устройстве предусмотрена звуковая сигнализация о превышении допустимого уровня излучения, она срабатывает при достижении уровня радиации более 100 мкР/ч.
Демонстрацию можно увидеть здесь

Итог

В итоге у нас получилось интересное и компактное решение для мониторинга уровня фоновой радиации, которое запитывается от обычного USB порта.

image

Устройство прошло несколько итераций развития, как программного, так и аппаратного. На данный момент это проверенное временем и отлаженное устройство, которое не стыдно показать.

Первая версия устройства (2015 год)

Детектор Судного дня или как я разработал датчик радиации для Home Assistant - 16

На этом можно завершать. Всем большое спасибо за внимание!

Небольшая бонусная история, связанная с данным устройством

В конце сентября 2017 года, внезапно устройство начало регистрировать повышенный уровень фоновой радиации, о чем оно меня предупредило. Я не мог понять, что происходит и склонялся к тому, что возникла какая-то аппаратная проблема и не принял в серьез эту ситуацию. Спустя пару минут всё нормализовалось. Диагностика не показала каких-либо проблем с устройством. В начале октября появилась информация в СМИ о выбросе изотопа Рутений-103 и все стало ясно. Облако Рутения-103 пролетело где-то рядом. Это была первая аномалия, которая была зафиксирована моим устройством.

Исходники проекта


Автор: Valeriy

Источник

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


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