199

Счетчик Гейгера для Arduino

Привет всем ардуинщикам и пикабушникам.


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


Посмотрел на одном из тематических форумов и на ютубе как автор сделал с нуля счетчик на ардуино нано вроде, то есть плату по типу той, что я купил, но полностью спаял сам, в общем то там есть и схемы и код и видео, всё достаточно подробно, но он использует в своей схеме трубки СБМ20, которые оказалось достаточно сложно найти в спб, но возможно, стоят они около 250-500 р. за штуку, но как советует автор лучше брать сразу несколько, т.к. могут попасться и нерабочие и фонящие, в общем прикинул я и решил пока заказать готовую плату и не заморачиваться, плата шла уже с трубкой. Маркировка трубки J350Br, при этом поддерживает и СБМ20 как заявляют китайцы, есть второе посадочное место под СБМ20 (она подлиннее), хотя если не ошибаюсь по спецификации СБМ20 работает от большего напряжения, чем выдает китайский девайс (в документации 380-450В).


Заказал значит данную плату, пока ждал попутно купил в спб дисплей nokia 5110 и arduino mimi pro специально под сборку счетчика (благо есть один хороший магазинчик и не пришлось ждать чудес от почты россии) и начал постепенную сборку. По цене немного, около 300 рублей.


Собственно общий вид данного девайса:

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


Перепаял выходы для подключения к arduino (на фото GND, 5V, VIN) на обратную сторону, чтобы приколхозить уже спаянную мной mini pro с дисплеем, и припаял одно к другому. Подключение простое - выход GND к GND Arduino, если быть точным то просто к минусу дисплея, 5V к 5V соответственно, также от дисплея, т.к. так ближе и без проводов получилось, а VIN к D2 arduino проводком. Дисплей подключен к D3, D4, D5, D6, D7, к 5v и GND, на тему подключения данного дисплея полно инфы, многократно дублировать думаю не имеет смысла.


Получилось вот так:

На плате имеется: выключатель, разъем питания в виде круглого штекера, как я писал выше, колодка для подключения отсека с батарейками (3 пальчиковых последовательно) ну или аккума 4В, я так понял работает от 3.3v до 5v, индикатор работы в виде красного диода, индикатор попадания частицы в трубку в виде второго красного диода, бузер, переменный резистор и пара перемычек для калибровки (описание калибровки есть в прилагаемой документации).


Соединение всего вместе:

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


Ну и фотки первых запусков и работы в сборе:

В принципе и так устраивает, нужно дошаманить точность замеров, не смог только разобраться с float, т.к. не яжпрограммист, в кратце суть такая: плата замеряет в фон в CPM (counts per minute), чтобы перевести в милизиверты для данной трубки в документации указан коэффициент 151, т.е. чтобы получить милизиверты, нужно CPM разделить на 151. Естественно CPM был задан в int, после замены на float стал показывать 2 знака до и 2 знака после запятой, но как видно на первой фотке, в некоторых случаях округляет, т.е. микрорентгены показывает 7,95, а милизиверты 0,08, хотя просто умножает на 100 (в коде можно посмотреть), вот этот момент я бы попросил Вас помочь разобрать. Собственно за этим и добавил мКр, чтобы показывало поточнее.


Всем спасибо, отвечу на вопросы, приму советы и замечения =) Всем бобра!



Ссылка на код:

https://gist.github.com/anonymous/2c0814fdb82f5e8bc516285a7d...

Arduino & Pi

1.5K постов20.9K подписчика

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Вы смотрите срез комментариев. Показать все
7
DELETED
Автор поста оценил этот комментарий
Так в чем в итоге вопрос? Почему 0.08 при умножении на 100 становится 7.95?
Потому что данные на дисплее(0.08) при выводе округляются, но само значение в переменной хранится примерно как 0.0795 и при выводе не изменяется.
Поскольку вывести это невозможно данные для вывода округляются.
Собственно не пойму в чем именно вопрос
раскрыть ветку (24)
1
Автор поста оценил этот комментарий
Да, вопрос как сделать, чтоб больше знаков после запятой выводил)
Просто если поднесу источник, то думаю, что начнет показывать ересь, еще не проверял.
раскрыть ветку (20)
3
Автор поста оценил этот комментарий

Для вывода большего количества знаков после запятой должно помочь:
.println(1.23456, 4)
Проверить сейчас негде, но мануалы говорят должно работать

раскрыть ветку (19)
0
Автор поста оценил этот комментарий
Странная строка, но попробую скомпилить
раскрыть ветку (18)
2
Автор поста оценил этот комментарий

Ardiuno shell должен понять такой формат.

Вот тут написано более подробно:

http://arduino.ru/Reference/Serial/Print


Правда, там, походу ошибка в том плане что Println все таки возвращает значение, просто считывать его необязательно.

Как я понимаю, в строке 50 можно попробовать вот это:

display.println(MSVh,4);
раскрыть ветку (5)
0
Автор поста оценил этот комментарий

да, тут println возвращает значения


если будет display.println(msvh, 4) думаю ничего не поменяется, так как переменная имеет формат x.xx

раскрыть ветку (4)
0
Автор поста оценил этот комментарий

Те переменная типа float в принципе имеет только 2 знака после запятой?

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

как писали выше, хранит и оперирует она большем кол-вом (не знаю сколько, может до 8 знаков), но выводит два


вот в работе девайса считывает он попадания частиц в трубку за интервал времени (CPM), в данном случае за 15 секунд и умножает на кэф 4 (60сек/15сек=4) для подсчета попаданий в минуту. Изначально CPM был int и имел значения при работе 4, 8, 12, 16, 20 и так далее, что не позволяло вычислить милизиверты, т.к. int/151=0, после перевода на float 4.00, 8.00, 12.00 и т.д.

0
DELETED
Автор поста оценил этот комментарий

переменная float хранит ~7 знаков. Поскольку это переменная с плавающей точкой то количество десятичных знаков перед запятой влияет на количество после запятой. Но суммарно они составят 7 знаков.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

тогда должно по идее сработать опциональный параметр этот

2
Автор поста оценил этот комментарий

http://arduino.ru/Reference/Serial/Println или так)

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

похоже это самый нормальный ответ(и видимо самый правильный) из тех что тут насоветовали :)

Подождем вечера - узнаем.

1
Автор поста оценил этот комментарий

если я не ошибаюсь, код на C.

eps - точность, которая нужна, например, 0.01, тогда будет выведено 2 знака.

val - значение, которое нужно вывести

void PrintRes(double eps, double val){

for (int n = 0; floor( eps ) <= 0; eps *= 10, n++ );

printf( "%.*f\n", n, val ); //можно написать display.printf()

}

https://ideone.com/kwntXW - пример.

раскрыть ветку (6)
1
Автор поста оценил этот комментарий
Не, Arduino shell более простой, и такой формат не понимает.
0
Автор поста оценил этот комментарий

вот это вот похоже на правду, спасибо, попробую вечерком

раскрыть ветку (4)
1
Автор поста оценил этот комментарий

Небольшое дополнение, данная функция работает только для double, поэтому советую не использовать явное преобразование и сразу задать тип исходной переменной в double.

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

ок, покавыряю, если не сработает .println(msvh, 4), может тут всё проще :))

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

кстати говоря, возможно это происходит из-за того, что Вы используете float, а также неявное преобразование типов.

cpm = counts * multiplier;

MSVh = cpm/151;

Т.к. Си очень требовательный ко всему такому, советую попробовать разные варианты.

https://foxford.ru/wiki/informatika/yavnoe-i-neyavnoe-preobrazovanie-tipov-v-c

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Всем спасибо за советы, самым правильном оказалось поправить строки

display.println(MSVh, 4);

display.println(MR, 2);


результат на фото, осталось проверить как будет показывать большие числа, может наползти на текст или сдвинуть

Иллюстрация к комментарию
1
DELETED
Автор поста оценил этот комментарий

Так вы код собственно дайте, а то не очень понятно о чем идет речь. Как я вижу тут отвечают сплошные не "яжпрограммисты" :)

Я так вообще экономист. Но разобраться могу попробовать

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

Так ТС же оставил ссыль на гитхаб там есть исходники. Строки 50 и 55.

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

точно. провтыкал.

1
Автор поста оценил этот комментарий

Как я понял он хочет чтоб не округлялось в первом случае....

0
Автор поста оценил этот комментарий
В дополнение замеры с компаса Адрианова, максимум выдавал около 950мкр/час по замеру за 15 секунд, но это вплотную к трубке, с расстояния около 10см, уже 100мкр, а с 20см уже в пределах фона. Ну и показание пофикшены и не уехал текст.
Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

А смысл вообще пытаться приводить показания к Зивертам? Всё равно они останутся попугаями без калибровки по другому прибору. Я в своём так и оставил имп/мин. Что на прямую связано с Рентгенами и только косвенно с Зивертами.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества