Дозиметр не для Сережи

В постоянно изменяющемся мире дозиметр является не только способом утолить любопытство и поймать на мушку хоть немного веселых Зивертов, но и способом обнаружения вполне реальных угроз.  От проверки “любопытной старинной штуковины” из дедовского гаража, до отслеживания радиоактивного фона в зонах расположения АЭС, от обеспечения безопасности при вылазке в заброшки до мониторинга глобальных и локальных техногенных катастроф.

 Нетленной классикой Хабра является цикл статей “Дозиметр для Серёжи”. В этом материале много истории, теории и хардовой (если не сказать “крафтовой”) сборки. Мы респектуем автору, и Сереже тоже. Но ставим перед собой другую, более практическую задачу -  собрать дешёвый, функциональный и удобный дозиметр из готовых компонентов. В качестве основных элементов будут использованы Wemos D1 и модуль RadSens (ардуино-дозиметр на базе трубки Гейгера СБМ-20).

RadSensor (таково гордое имя нашего детектора) берет лучшее от прошлых проектов, а также учитывает их ошибки и расширяет функционал счетчика, в частности:

  • увеличено время автономной работы;

  • реализован функционал аудиоотклика;

  • повышена эргономичность и универсальность корпуса;

  • проект в целом упрощен и избавлен он “крафта”

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

Перед тем как листать дальше настоятельно рекомендуем ознакомиться с легендарным материалом (https://habr.com/ru/post/471236/). Краткая история и матчасть сами себя не прочитают ;)

Ознакомились? Отлично, тогда приступим!

Персональный дозиметр своими руками

Шутейки иссякли. Далее вас ждет сухая пошаговая инструкция по сборке устройства от закупки компонентов до кода и тестирования.

План покупок (BOM)

  1. Плата разработки Wemos D1, от 117 руб. на Али

  1. Модуль дозиметра RadSens, от 4550 руб. на Али / Озоне

  1. OLED-экран 1.3” с I2C, от 161 руб на Али

  1. Пассивный пьезоизлучатель, от 48.5 руб. на Али

  1. Плата заряда TP4056, от 25 руб. на Али

  1. Аккумулятор 18650, от 210 руб. на Али

  1. Бокс одинарный для 18650 аккумулятора, от 19 руб. на Али

  1. Макетная плата 7*3 см, от 17 руб. на Али

  1. Выключатель KCD-01, от 64 руб. за 10 шт на Али

  1. Разъём XH-2.54 с обжатыми проводами, от 66 руб. за две пары на Али

  1. Резисторы номиналами 220 и 100 кОм

  2. Винты/саморезы с диаметром резьбы 3 и 2.5 мм

  3. Корпус, изготовленный на 3d-кринтере - о нем ниже

Общая стоимость компонентов ~5500 рублей.

Цена сравнима с древними дозиметрами советской или китайской разработки. Аналогичное, но современное решение на Озоне обходится уже в 7-9 тысяч рублей.

Схема устройства

Соединения показаны ниже на схеме. Особенности сборки:

  • В верхней части макетной платы располагается Wemos (2 пина от края) и OLED (2 пина от края).

  • Внизу макетки установлены: зарядкаTP4056 (Type-C сдвинут максимально близко к краю платы, но не вылезает за её пределы) и пьезоизлучатель (любая удобная позиция).

  • Выключатель стоит на разрыве плюсового выходного пина контроллера заряда. Если подключить его на разрыв плюсового провода батареи, то контроллер заряда будет уходить в защиту, это ведёт к некорректной работе устройства.

Для расчёта и вывода остатка заряда батареи используется АЦП (пин А0). Для его правильной работы необходимо понизить напряжение с помощью делителя нпряжения. Подробнее о нем вы можете прочитать в статье о сборке анемометра (https://habr.com/ru/post/676348/).

В результате должно получиться подобное устройство. Рекомендуем заизолировать контакты на лицевой стороне платы. Это одна из возможных способов собрать её, поэтому мы приветствуем критику и предложения :)

Корпус для дозиметра

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

На углу предусмотрена проушина диаметром 3 мм под шнурок или брелок.

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

Посадочные места дозиметра адаптированы под длинную и короткую версии модуля RadSens.

Кнопка включения утоплена и защищена от случайных нажатий

На крышке предусмотрены посадочное место для OLED-экрана для предотвращения западания, добавлены боковые стенки для увеличения жёсткости корпуса

Модель адаптирована под 3d-печать, подобрана нормальная толщина стенки, минимизировано число поддержек

Найти модели корпуса (stl и step-файлы) вы можете в нашем GitHub.

Код

Для проекта использован слегка доработанный код из нашей предыдущей статьи "Народная дозиметрия". Нововведения:

  • добавлен звук приветствия при включении устройства;

  • добавлена индикация заряда;

  • реализовано предупреждение при превышении порога интенсивности излучения.

Для работы с OLED-экраном используется библиотека Алекса Гавера GyverOled.

Вы также можете найти код в примерах библиотеки RadSens на GitHub.

// Инициализируем библиотеки
#include <Wire.h>
#include <CG_RadSens.h>
#include <GyverOLED.h>

#define ADC_pin A0 // задаём значение пина АЦП
#define buz_pin 14 // Задаём значения пина для пищалки

GyverOLED<SSH1106_128x64> oled; // Инициализируем 1.3" OLED-экран
CG_RadSens radSens(RS_DEFAULT_I2C_ADDRESS); // Инициализируем RadSens

uint16_t ADC; // Переменная для значений АЦП
uint32_t timer_cnt; // Таймер для измерений дозиметра
uint32_t timer_bat; // Таймер для измерения заряда батареи
uint32_t timer_imp; // Таймер опроса импульсов для пьезоизлучателя
uint32_t pulsesPrev; // Число импульсов за предыдущую итерацию

//Функция аудиоприветствия
void hello() {
  for (int i = 1; i < 5; i++) {
    tone(buz_pin, i * 1000);
    delay(100);
  }
  tone(buz_pin, 0);
  delay(100);
  oled.setScale(2);
  oled.setCursor(10, 3);
  oled.print("Radsensor");
  oled.update();  
  delay(3000);
  oled.clear(); 
}

//Функция, которая создаёт "трески" пьезоизлучателя при появлении импульсов
void beep() {     // Функция, описывающая время и частоту пищания пьезоизлучателя
  tone(buz_pin, 3500);
  delay(13);
  tone(buz_pin, 0);
  delay(40);
}

//Функция предупреждения при превышении порога излучения
void warning() {
  for (int i = 0; i < 3; i++) {
    tone(buz_pin, 1500);
    delay(250);
    tone(buz_pin, 0);
    delay(250);
  }
}

void setup() {
  Wire.begin();
  oled.init(); // Инициализируем OLED в коде
  oled.clear(); 
  oled.update();  
  pinMode(ADC_pin, OUTPUT); // Инициализируем АЦП как получатель данных
  hello();  // Приветствуем пищанием  
  oled.update();  // Обновляем экран
  pulsesPrev = radSens.getNumberOfPulses(); // Записываем значение для предотвращения серии тресков на старте
}

void loop() {
  // Раз в 250 мс происходит опрос счётчика импульсов для создания тресков, если число импульсов за 250 мс превысит 5, раздастся предупреждение
  if (millis() - timer_imp > 250) {  
    timer_imp = millis();
    int pulses = radSens.getNumberOfPulses();
    if (pulses - pulsesPrev > 5 ) {
      pulsesPrev = pulses;
      warning();
    }
    if (pulses > pulsesPrev) {
      for (int i = 0; i < (pulses - pulsesPrev); i++) {
        beep();
      }
      pulsesPrev = pulses;
    }
  }
  // Снимаем показания с дозиметра и выводим их на экран
  if (millis() - timer_cnt > 1000) { 
    timer_cnt = millis();
    char buf1[50];
    char buf2[50];
    char buf3[50];
    sprintf(buf1, "%.1f мкр/ч", radSens.getRadIntensyDynamic()); // Собираем строку с показаниями динамической интенсивности
    sprintf(buf2, "Стат: %.1f мкр/ч ", radSens.getRadIntensyStatic()); // Собираем строку с показаниями средней интенсивности за период работы
    oled.setCursor(0, 2);
    oled.setScale(2);
    oled.print(buf1);
    oled.setCursor(0, 6);
    oled.setScale(1);
    oled.print(buf2);
  }
  // Считываем показание с АЦП, рисуем батарею и создаём индикацию заряда, показания АЦП вы можете подстроить под своё удобство
  if (millis() - timer_bat > 5000) { 
    timer_bat = millis();
    ADC = analogRead(ADC_pin); 
    oled.rect(110, 0, 124, 8, OLED_STROKE); 
    oled.rect(125, 3, 126, 5, OLED_FILL);
    if (ADC >= 350) {
      oled.rect(112, 2, 114, 6, OLED_FILL);
      oled.rect(116, 2, 118, 6, OLED_FILL);
      oled.rect(120, 2, 122, 6, OLED_FILL);
    }
    if (ADC < 350 && ADC >= 335) {
      oled.rect(112, 2, 114, 6, OLED_FILL);
      oled.rect(116, 2, 118, 6, OLED_FILL);
    }
    if (ADC < 335 && ADC >= 320) {
      oled.rect(112, 2, 114, 6, OLED_FILL);
    }
    if (ADC < 320){
      oled.rect(110, 0, 124, 8, OLED_STROKE);
      oled.rect(125, 3, 126, 5, OLED_FILL);
    }
  }
  oled.update(); // Обновляем экран в конце цикла
}

Сборка мобильного DIY-дозиметра

Для придания большей компактности мы свели к минимуму свободное пространство внутри корпуса. Поэтому необходимо придерживаться простого алгоритма сборки.

  1. Устанавливаем бокс для 18650 с помощью винта диаметром 3х7 мм и вставляем выключатель в отверстие с торца, подпаиваем к нему провода для разрыва линии +OUT контроллера заряда.

  1. Припаиваем провода от бокса к соответствующим выходам контроллера заряда, провода от выключателя – в разрыв между +OUT и плюсовыми контактами потребителей. Затем подключаем два шлейфа для дозиметра и экрана, выводим их и закрепляем корпус на три винта 2.5х7 мм. После вставляем батарею в бокс.

  1. Подключаем модуль RadSens через коннектор и закрепляем его винтам 2.5х7 мм.

  1. Закрепляем экран винтами 2.5х5 мм и подключаем его.

  1. Закрепляем крышку винтами 3х5 мм.

Тестирование собранного счетчика

Как и в предыдущих статьях мы проводим тестирование на сульфате калия. Если у вас в тумбочке завалялся кусок урана - можете использовать его, но помните о мерах безопасности.

Дозиметр для DIY-щиков

В рамках материала мы описали только базу дозиметра. Проект можно и нужно развивать: создать приложуху для сбора и записи статистики на телефон, интегрировать с Народным Мониторингом, добавить функции фонарика, датчика температуры и лазерной сабли. Пожалуйста, выбирайте задачку по себе, предлагайте новые идеи и помогайте нам.

Наш же новый челендж - автономный дозиметр, работающий от солнечной батареи и передающий данные по модему на Нармон. Ждите, скоро на просторах хабра...

Также мы планируем провести в Москве несколько мастер-классов по сборке дозиметров и прочих проектов. Если DIY-электроника для Вас в новинку, но очень хочется попробовать - присоединяйтесь к сообществу ClimateGuard, ловите объявления и приходите к нам в гости на Электрозавод (МЭЛЗ).

Пользуясь случаем команда инженеров ClimateGuard передает благодарности и респекты:

  • бессменному (и бессмертному, Илюха выздоравливай!) автору Илье Радченко (@octopoly) за подготовку материала;

  • Алексу Гаверу (@AlexGyver) за прекрасную библиотеку GyverOLED;

  • магазину Амперкот за предоставленные компоненты и желание создавать крутые и полезные образовательные наборы;

  • сообществу, поддерживающему проекты и участвующему в нашей жизни;

  • ...и конечно же вам, дорогие читатели, за уделенные время и интерес к статье!

Давайте сплачиваться и нести DIY в массы!

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


  1. RealBeria
    06.10.2022 13:38
    +3

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


  1. Jury_78
    06.10.2022 13:38
    +1

    ставим перед собой другую, более практическую задачу -  собрать дешёвый,
    функциональный и удобный дозиметр из готовых компонентов

    Если цель собрать, то все замечательно и без всякой иронии. Если дешёвый - то уже не так однозначно, т.к. готовое на Али будет дешевле. Такая цена это из-за Модуля дозиметра RadSens, и как я понимаю альтернативы нет?


    1. yellowknife Автор
      06.10.2022 13:57
      +1

      Альтернатив много

      • есть вариант китайской платы дозиметра на dip-компонентах, она же является репликой израильского решения - только там трубка плохая

      • есть классные решения у ребят из Украины от GGreg на СМБ 20

      • можно взять отдельно плату от RadSens на Али, и к ней дешевую китайскую трубку или трубку с Авито - платка работает с разными трубками и даже Бета-2 ребята из сообщества к плате RadSens подключали


      1. EugeneVRN
        06.10.2022 16:52

        Кликнул по ссылке "дозиметр на али", так же мне показало и другой внешне такой же но в 3 раза дешевле, вот. Он нерабочий что-ли, или почему такая разница?


        1. yellowknife Автор
          06.10.2022 18:54

          Это как раз вариант 1 - китайский израильтянин. Из минусов - он здоровый, не цифровой и со слабочувствительной трубкой.


      1. Jury_78
        06.10.2022 18:42

        СБМ20 не такая дорогая, менее 1000р предлагают...


        1. yellowknife Автор
          06.10.2022 18:56

          Да, на Авито они недорогие. Но средняя цена 1000-1200 рублей. Более дешевые - либо совсем старые, 80-х и 90-х годов, либо мятые, либо спаянные с приборов. У трубки есть ресурс. Поэтому покупайте аккуратно.


          1. Pavlitko
            06.10.2022 20:23
            +1

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


            1. yellowknife Автор
              06.10.2022 20:25
              +1

              Как разработчик RadSens - не могу))) Ну мы типа создали лучший из лучших и дешевейший их нормальных. Надеюсь на помощь сообщества Хабра.

              Могу подсказать, что на Озоне можно смело просить скидку на RadSens в 15% или дождаться одной из регулярных распродаж.


              1. Pavlitko
                06.10.2022 21:28

                Да, но это же для гиков больше. С руками и паяльником. А мне б потребительский вариант с функционалом из коробки....


          1. Sigest
            07.10.2022 08:03

            А какой ресурс у трубки? Понимаю что зависит от трубки, но предположим, у вашей? Ну если есть что-то среднее?


  1. MobCobra
    06.10.2022 14:18
    +1

    Грибникам больше пригодился бы гамма-спектрометр, но для них детали не бывают дешёвыми, насколько я понимаю.


    1. dragonnur
      07.10.2022 13:13

      Скорее, что-то чувствительное на альфу и бету, чтоб не проглотить "грязь". Гамма-спектрометр -- кучка деталек до ЕМНИМС ста баксов, но тысячи долларов за кристалл.


  1. Voldemaar
    06.10.2022 16:55
    +2

    СБМ - ну такое. Лучше "Бета".


    1. yellowknife Автор
      06.10.2022 18:41

      так точно. Но Бета дороже, и достать ее физлицу, как ребята в сообществе говорят, сложнее.


  1. VT100
    06.10.2022 19:50
    +1

    Поставить конденсатор параллельно нижнему резистору делителя напряжения. Т.к. подключение УВХ АЦП будет вызывать падение напряжения на верхнем.
    Убрать constant magic из рисования уровня зарядки и поставить формулу с комментарием?


  1. jar_ohty
    06.10.2022 19:55
    +5

    Зарядка аккумулятора сделана неправильно. При работе дозиметра ток, отдаваемый TP4056, будет равен зарядному току плюс потребление дозиметра. А по падению тока до 1/10 от начального тока заряда TP4056 детектирует окончание заряда. В итоге она не сможет определить его и будет заряжать вечно, что приведет к взрыву.
    Надо отключать потребитель от аккумулятора при подаче внешнего напряжения и переключать на внешний источник.


  1. Slonosvin
    07.10.2022 08:04
    +1

    А какой смысл в этом диайвае кроме самого процесса? За те же самые 5к на авито можно купить мкс-01са1м, который умеет в гамму и в бету, откалиброван с завода, и даже говорить немного умеет. Я уже не говорю про более лучшие датчики. Да, к вайфаю не подключить, но какой в этом смысл для носимого устройства с собственным дисплеем?


    1. AlexNixon
      07.10.2022 11:11

      del


    1. AlexanderS
      07.10.2022 21:30

      Я уже не говорю про более лучшие датчики.

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


      1. Slonosvin
        08.10.2022 21:39

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


  1. slog2
    07.10.2022 08:37

    Модуль дозиметра RadSens, от 4550 руб. на Али / Озоне

    Цена совершенно не вызывает желания купить этот полуфабрикат.


  1. MikeVC
    08.10.2022 18:22

    Интересно что есть готовая плата для сбм-20. С датчиком покупать дорого а если датчик уже есть а паять лень, то может быть. Интересно прикрутить "хардовую" щелкалку которая работает непосредственно по факту пробоя трубки. Дисплей хочу обычный 2х строчный а для беспроводной связи - блюпуп чтоб не занимать в телефоне wi-fi. У меня уже есть устройства мониторинга всякого разного с блюпупом. Управляются и конфигаются с терминала. Данные можно посмотреть им же. Если надо, можно написать програмку обработки данных на питоне.