В постоянно изменяющемся мире дозиметр является не только способом утолить любопытство и поймать на мушку хоть немного веселых Зивертов, но и способом обнаружения вполне реальных угроз. От проверки “любопытной старинной штуковины” из дедовского гаража, до отслеживания радиоактивного фона в зонах расположения АЭС, от обеспечения безопасности при вылазке в заброшки до мониторинга глобальных и локальных техногенных катастроф.
Нетленной классикой Хабра является цикл статей “Дозиметр для Серёжи”. В этом материале много истории, теории и хардовой (если не сказать “крафтовой”) сборки. Мы респектуем автору, и Сереже тоже. Но ставим перед собой другую, более практическую задачу - собрать дешёвый, функциональный и удобный дозиметр из готовых компонентов. В качестве основных элементов будут использованы Wemos D1 и модуль RadSens (ардуино-дозиметр на базе трубки Гейгера СБМ-20).
RadSensor (таково гордое имя нашего детектора) берет лучшее от прошлых проектов, а также учитывает их ошибки и расширяет функционал счетчика, в частности:
увеличено время автономной работы;
- реализован функционал аудиоотклика;
- повышена эргономичность и универсальность корпуса;
- проект в целом упрощен и избавлен от “крафта”
Не устаем повторять, что основной критерий успеха материала - наличие удачных повторов и ремейков проекта со стороны маленьких электронщиков-школьников, бесшабашных туристов-студентов, а также практичных грибников-родителей.
Перед тем как листать дальше настоятельно рекомендуем ознакомиться с легендарным материалом (https://habr.com/ru/post/471236/). Краткая история и матчасть сами себя не прочитают ;)
Ознакомились? Отлично, тогда приступим!
Персональный дозиметр своими руками
Шутейки иссякли. Далее
вас ждет сухая пошаговая инструкция по сборке устройства от закупки компонентов
до кода и тестирования..
1) Плата разработки Wemos D1, от 117 руб. на Али ()
2) Модуль дозиметра RadSens, от4550 руб. на Али/Озоне ()
3) OLED-экран 1.3” с I2C, от 161 руб на Али ()
<!--[endif]-->4) Пассивный пьезоизлучатель, от 48.5 руб. на Али (https://aliexpress.ru/item/4000785325910.html?sku_id=1000000...)
<!--[endif]-->5) Плата заряда TP4056, от 25 руб. на Али ()
<!--[endif]-->6) Аккумулятор 18650, от 210 руб. на Али (https://aliexpress.ru/item/1005004392079183.html?sku_id=1200...)
<!--[endif]-->7) Бокс одинарный для 18650 аккумулятора, от 19 руб. на Али ()
<!--[endif]-->8) Макетная плата 7*3 см, от 17 руб. на Али ()
<!--[endif]-->9) Выключатель KCD-01, от 64 руб. за 10 шт на Али ()
<!--[endif]-->10) Разъём XH-2.54 с обжатыми проводами, от 66 руб. за две пары на Али ()
<!--[endif]-->11) Резисторы номиналами 220 и 100 кОм
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->12) Винты/саморезы с диаметром резьбы 3 и 2.5 мм
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
Общая стоимость компонентов ~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(); // Обновляем экран в конце цикла
}
Для придания большей компактности мы свели к минимуму свободное пространство внутри корпуса. Поэтому необходимо придерживаться простого алгоритма сборки.
1) Устанавливаем бокс для 18650 с помощью винта диаметром 3х7 мм и вставляем выключатель в отверстие с торца, подпаиваем к нему провода для разрыва линии +OUT контроллера заряда.
2) Припаиваем провода от бокса к соответствующим выходам контроллера заряда, провода от выключателя – в разрыв между +OUT и плюсовыми контактами потребителей. Затем подключаем два шлейфа для дозиметра и экрана, выводим их и закрепляем корпус на три винта 2.5х7 мм. После вставляем батарею в бокс.
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
3) Подключаем модуль RadSens через коннектор и закрепляем его винтам 2.5х7 мм.
4) Закрепляем экран винтами 2.5х5 мм и подключаем его.
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
5) Закрепляем крышку винтами 3х5 мм.
Как и в предыдущих статьях мы проводим тестирование на сульфате калия. Если у вас в тумбочке завалялся кусок урана - можете использовать его, но помните о мерах безопасности.
В рамках материала мы описали только базу дозиметра. Проект можно и нужно развивать: создать приложуху для сбора и записи статистики на телефон, интегрировать с Народным Мониторингом, добавить функции фонарика, датчика температуры и лазерной сабли. Пожалуйста, выбирайте задачку по себе, предлагайте новые идеи и помогайте нам.
Наш же новый челендж - автономный дозиметр, работающий от солнечной батареи и передающий данные по модему на Нармон. Ждите, скоро на просторах хабра...
Также мы планируем провести в Москве несколько мастер-классов по сборке дозиметров и прочих проектов. Если DIY-электроника для Вас в новинку, но очень хочется попробовать - присоединяйтесь к сообществу ClimateGuard, ловите объявления и приходите к нам в гости на Электрозавод (МЭЛЗ).
Пользуясь случаем команда инженеров ClimateGuard передает благодарности и респекты:
бессменному автору Илье Радченко (@octopoly) за подготовку материала;
Алексу Гаверу (@AlexGyver) за прекрасную библиотеку GyverOLED;
магазину Амперкот за предоставленные компоненты и желание создавать крутые и полезные образовательные наборы;
сообществу, поддерживающему проекты и участвующему в нашей жизни;
...и конечно же вам, дорогие читатели, за уделенные время и интерес к статье!
Давайте сплачиваться и нести DIY в массы!