- PVSM.RU - https://www.pvsm.ru -
Готов поспорить, что вы хоть раз задумывались о покупке дозиметра для бытовых целей - измерить уровень радиации дома, на прогулке или в путешествиях.
Сегодня мы соберем простой бюджетный дозиметр на базе wifi-контроллера ESP32 и платы RadSens. RadSens - готовый I2C-модуль для газоразрядного счетчика Гейгера-Мюллера. В качестве сенсора будет использована надежная и распространенная трубка СБМ20-1. Впрочем, вместо нее к модулю можно подключить любую другую трубку - J305, M4011, СТС-5 и др.
Целью статьи является создание максимально подробной инструкции по сборке. Если повторить описанные шаги сможет самый юный инженер-дозиметрист - мы достигли успеха.
Но сначала, как принято, немного истории и теории…

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

В 1925 году под началом Ханса Гейгера Вальтер Мюллер создаёт ещё несколько типов счётчиков с чувствительностью к каждому открытому на тот момент виду излучения, а именно для α-, β- и γ-излучения (нейтроны были открыты только в 1932 году).
Как показало время, надёжный, дешёвый и простой счетчик Гейгера-Мюллера остаётся одним из самых распространённых способов измерения уровня радиации как в быту, так и в промышленности.
Принцип работы основан на эффекте ударной ионизации газа в межэлектродном пространстве под действием радиоактивных частиц.
Трубка состоит из герметичного баллона из металла или стекла, наполненного инертным газом или газовой смесью. Внутри баллона имеются катод и анод. Для облегчения возникновения электрического разряда в газовом баллоне создается пониженное давление. Электроды подключаются к источнику высокого напряжения постоянного тока через нагрузочный резистор, на котором формируются электрические импульсы при регистрации радиоактивных частиц.

В исходном состоянии газовый промежуток между электродами имеет высокое сопротивление, и тока в цепи нет. Когда заряженная частица с высокой энергией сталкивается с элементами конструкции датчика (корпус, баллон, катод), она выбивает некоторое количество электронов, которые оказываются в промежутке между электродами. Под действием ускоряющего напряжения электроны устремляются к аноду. Процесс многократно повторяется, и количество электронов увеличивается, что приводит к разряду между катодом и анодом. В состоянии разряда промежуток в межэлектродном пространстве становится токопроводящим, что вызывает скачок тока в нагрузочном резисторе.
Иными словами, под действием ионизирующего излучения происходит пробой, приводящий к разряду между электродами. Интенсивность разрядов прямо пропорциональна интенсивности ионизирующего излучения.
Важнейшим критерием при выборе платы и комплектующих выступала стоимость используемых компонентов. Мы ставили задачу сделать дозиметр максимально бюджетным.
Для создания дозиметра-радиометра были выбраны следующие компоненты:
Модуль дозиметра - RadSens (от 3900 руб.)
RadSens - готовый модуль в сборе с популярной трубкой СБМ-20. Не требует ничего кроме установки библиотеки в менеджере библиотек Arduino. Дозиметр готов к работе “из коробки”.
Плата ESP8266 / ESP32 (от 700 руб.)
Модуль RadSens имеет интерфейс I2C, совместим с Arduino, esp, Raspberry. Но цены на ардуинки в последнее время совсем не радуют…
OLED-экран диагональю 0.96” (от 300 руб.)
Можно взять любой экран с I2C. Но OLED-экран позволяет добавлять простую анимацию и цветовую маркировку текущего уровня радиации.
Модуль бузера (пищалки) для звуковой индикации импульсов (от 80 руб.)
Бузер предназначен для звукового информирования пользователя, когда нет доступа к информации на экране.
Кнопка-выключатель (от 60 руб.)
Макетная плата 120*80 мм (от 130 руб.)
Плата используется для удобного (эротичного) размещения и организации проводки между элементами.
Итоговая стоимость сборки - 5170 рублей.
Самый дешёвый дозиметр на маркетплейсе Ozon - 8700 рублей.

Необходимо произвести следующие шаги:
Припаять к макетной плате элементы в желаемом положении.
Соединить все элементы по предложенной схеме.
Проверить правильность подключения сначала визуально, затем подключив ESP к USB.
Подключить библиотеку RadSens и плату ESP32 в Arduino IDE.
Добавить код в IDE и загрузить его.
Для подключения нам потребуется припаять все элементы и соединить их. Пины SDA и SCL на RadSens и OLED-экране требуется подключить к портам D22 (SCL) и D21 (SDA), они обмениваются данными по интерфейсу I2C, важно их не перепутать. Остальное подключить согласно схеме на рисунке.


На фото один из вариантов компоновки дозиметра.

Подключение расширения для плат в Arduino IDE для платы ESP32 осуществляется следующим образом:
Arduino -> Инструменты -> Плата -> Менеджер плат -> Написать “ESP32” в поисковой строке.

После установки необходимо в пункте “Плата” указать “ESP32 Dev module”.

Далее необходимо выбрать необходимую нам плату. Для этого переходим во вкладку “Инструменты”, выбираем раздел “Плата”, далее выбираем “ESP32 Dev Module” в подразделе “ESP32 Arduino”.

Готово! Перейдем к установке библиотеки.
Для установки библиотеки RadSens необходимо проделать почти такую же операцию:
Arduino -> Скетч -> Подключить библиотеку -> Управлять библиотеками -> Написать “RadSens” в поисковой строке.


Далее необходимо установить библиотеку GyverOLED в менеджере библиотек тем же путём.

Теперь мы готовы переходить к программированию.
Код был написан с использованием библиотеки для OLED от Алекса Гавера. Она проста в изучении и поддерживает вывод русского языка без дополнительных манипуляций. Допустимо использовать U8G2, Adafruit или любой удобную вам библиотеку.
// Подключаем необходимые библиотеки
#include <radSens1v2.h> // Библиотека RadSens
#include <Wire.h> // I2C-библиотека
#include <GyverOLED.h> // Библиотека для OLED Gyver'а идеально подойдёт для понимания методики работы с OLED-экраном, к тому же тут сразу есть русский шрифт
#define buz 18 // Устанавливаем управляющий пин пьезоизлучателя. Если вы выбрали другой управляющий пин - замените значение
GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled; // Инициализируем OLED-экран
ClimateGuard_RadSens1v2 radSens(RS_DEFAULT_I2C_ADDRESS); // Инициализируем RadSens
uint32_t timer_cnt; // Таймер опроса интенсивности излучения и импульсов для OLED-экрана
uint32_t timer_imp; // Таймер опроса импульсов для пьезоизлучателя
uint32_t timer_oled; // таймер обновления дисплея
float dynval; // Переменная для динамического значения интенсивности
float statval; // Переменная для статического значения интенсивности
uint32_t impval; // Переменная для кол-ва импульсов
uint32_t pulsesPrev; // Переменная, содержащая кол-во импульсов за прошлый цикл
void setup() {
pinMode(buz, OUTPUT); // Инициализируем пьезоизлучатель как получатель данных
ledcSetup(1, 500, 8); // Инициализируем ШИМ (только для ESP, для Arduino это необходимо стереть)
ledcAttachPin(buz, 1); // Задаём пин вывода пьезоизлучателя для ШИМа (только для ESP, для Arduino это необходимо стереть)
oled.init(); // Инициализируем OLED в коде
oled.flipV(1); // Я перевернул экран для удобства
oled.flipH(1); // Для нормального отображения после переворота нужно инвертировать текст по горизонтали
oled.clear();
oled.setScale(2); // Устанавливаем размер шрифта
radSens.radSens_init();
oled.clear();
radSens.setSensitivity(105); // Задаем чувствительность трубки (если вы заменили СБМ-20 на другую - проверьте чувствительность в документации и измените значение в скобках)
int16_t sensval = radSens.getSensitivity();
oled.setCursor(10, 2);
oled.print("Чувствит:");
oled.setCursor(42, 4);
oled.print(sensval);
delay(4000);
oled.clear();
pulsesPrev = radSens.getNumberOfPulses(); //Обнуляем значение перед началом работы пьезоизлучателя для предотвращения длинных тресков
}
void beep(int deltime) { // Функция, описывающая время и частоту пищания пьезоизлучателя
ledcWriteTone(1, 500); // Включаем на частоте 500 Гц
delay(3);
ledcWriteTone(1, 0); // Выключаем
delay(deltime);
}
/*
void beep(int deltime){
tone(buz, 500, deltime)
} та же функция для Arduino */
void loop() {
if (millis() - timer_imp > 250) { // Функция, создающая "треск" пьезоизлучателя
timer_imp = millis();
int pulses = radSens.getNumberOfPulses();
if (pulses > pulsesPrev) {
for (int i = 0; i < (pulses - pulsesPrev); i++) {
beep(30); // Вы можете изменить параметр, если хотите, чтобы интервал между тресками был больше или меньше
}
pulsesPrev = pulses;
}
}
if (millis() - timer_cnt > 1000) { // Записываем в объявленные глобальные переменные необходимые значения
timer_cnt = millis();
dynval = radSens.getRadIntensyDynamic();
statval = radSens.getRadIntensyStatic();
impval = radSens.getNumberOfPulses();
}
if (millis() - timer_oled > 1000) { //Записываем переменные в строки и выводим их на OLED-экран
timer_oled = millis();
String dynint = "Дин: ";
dynint += dynval;
String statint = "Ст: ";
statint += statval;
String nimp = "Имп: ";
nimp += impval;
oled.setCursor(0, 1);
oled.print(dynint);
oled.setCursor(0, 3);
oled.print(statint);
oled.setCursor(0, 5);
oled.print(nimp);
}
}
Сегодня нами был рассмотрен самый бюджетный вариант дозиметра-радиометра. Добавив фантазии, мы заказали прозрачные пластины из оргстекла, чтобы сделать прибор более удобным и наглядным. Для проверки работы был использован сульфат калия из ближайших хозтоваров. Удобрение богато радиоактивным изотопом калием-40, активно испускающим бета-излучение.

Стандартный уровень радиации в помещении - 15-20 мкР/ч. При прямом контакте сульфат калия получаем 32-39 мкР/ч, что вдвое выше нормы.
Несмотря на всю эстетическую привлекательность, проект является сугубо домашним и предназначен, в большей части, для измерения порошков, предметов старины и прочих вещей, непонятным образом попавших в ваш дом :)
В рамках следующего материала постараемся разработать портативный и многофункциональный дозиметр с возможностью вывода информации (графиков, минимумов, максимумов) на экран и выгрузкой статистики в мобильное приложение на Блинке.

А какие возможности в следующей версии DIY-дозиметра хотели бы видеть вы? Оставляйте свои предложения в комментариях!
Команда инженеров передает приветы и благодарности соавтору и стажеру Илье Радченко за долгие часы возни с железкой и кодом, мастерской Барсуки с МЭЛЗ за стеклышки, а также магазину Duino.ru и лично @CyberBot [1] за любезно предоставленные компоненты.
Ну и конечно крепко обнимаем сообщество Хабра за уделенное время и интерес к электронике и DIY. Нас мало - держимся, надеваем тельняшки.
Автор:
yellowknife
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/374365
Ссылки в тексте:
[1] @CyberBot: https://habr.com/ru/users/CyberBot/
[2] Источник: https://habr.com/ru/post/662343/?utm_source=habrahabr&utm_medium=rss&utm_campaign=662343
Нажмите здесь для печати.