Официальный сайт компании Arduino по адресу arduino.cc
Счетчик Гейгера Ардуино
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 09/02/2017 - 15:23
Добрый день!
Собрал счетчик Гейгера из готовых модулей:
1. Плата счетчика Гейгера с газоразрядной лампой J305ß, купил на алиэкспресс https://ru.aliexpress.com/item/Free-Shipping-Assembled-DIY-Geiger-Counter-Kit-Nuclear-Radiation-Detector-GM-Tube/32336592385.html?spm=2114.13010708.0.0.fUg3h5
2. Ардуино Уно
3. LCD 1602 I2C
Скетч брал отсюда (маленько подредактировал под себя) https://www.cooking-hacks.com/documentation/tutorials/geiger-counter-radiation-sensor-board-arduino-raspberry-pi-tutorial/
Текст скетча:
/*
* Geiger Counter - Radiation Sensor Board
*
* Copyright (C) Libelium Comunicaciones Distribuidas S.L.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* a
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*
* Version: 3.0
* Design: David Gascón
* Implementation: Marcos Yarza
*/
// include the library code:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal_I2C lcd(0x27,16,2);
// Threshold values for the led bar
#define TH1 45
#define TH2 95
#define TH3 200
#define TH4 400
#define TH5 600
// Conversion factor - CPM to uSV/h
#define CONV_FACTOR 0.00812
// Variables
int ledArray [] = {10,11,12,13,9};
int geiger_input = 2;
long count = 0;
long countPerMinute = 0;
long timePrevious = 0;
long timePreviousMeassure = 0;
long time = 0;
long countPrevious = 0;
float radiationValue = 0.0;
void setup(){
pinMode(geiger_input, INPUT);
digitalWrite(geiger_input,HIGH);
for (int i=0;i<5;i++){
pinMode(ledArray[i],OUTPUT);
}
Serial.begin(19200);
//set up the LCD\'s number of columns and rows:
lcd.init();
lcd.backlight();// Включаем подсветку дисплея
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Radiation Sensor");
lcd.setCursor(0,1);
lcd.print("Board - Arduino");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Cooking Hacks");
delay(1000);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("www.cooking-hacks.com");
delay(500);
for (int i=0;i<5;i++){
delay(200);
lcd.scrollDisplayLeft();
}
delay(500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" - Libelium -");
lcd.setCursor(0,1);
lcd.print("www.libelium.com");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CPM=");
lcd.setCursor(4,0);
lcd.print(6*count);
lcd.setCursor(0,1);
lcd.print(radiationValue);
attachInterrupt(0,countPulse,FALLING);
}
void loop(){
if (millis()-timePreviousMeassure > 10000){
countPerMinute = 6*count;
radiationValue = countPerMinute * CONV_FACTOR;
timePreviousMeassure = millis();
Serial.print("cpm = ");
Serial.print(countPerMinute,DEC);
Serial.print(" - ");
Serial.print("uSv/h = ");
Serial.println(radiationValue,4);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CPM=");
lcd.setCursor(4,0);
lcd.print(countPerMinute);
lcd.setCursor(0,1);
lcd.print(radiationValue,4);
lcd.setCursor(6,1);
lcd.print(" uSv/h");
//led var setting
if(countPerMinute <= TH1) ledVar(0);
if((countPerMinute <= TH2)&&(countPerMinute>TH1)) ledVar(1);
if((countPerMinute <= TH3)&&(countPerMinute>TH2)) ledVar(2);
if((countPerMinute <= TH4)&&(countPerMinute>TH3)) ledVar(3);
if((countPerMinute <= TH5)&&(countPerMinute>TH4)) ledVar(4);
if(countPerMinute>TH5) ledVar(5);
count = 0;
}
}
void countPulse(){
detachInterrupt(0);
count++;
while(digitalRead(2)==0){
}
attachInterrupt(0,countPulse,FALLING);
}
void ledVar(int value){
if (value > 0){
for(int i=0;i<=value;i++){
digitalWrite(ledArray[i],HIGH);
}
for(int i=5;i>value;i--){
digitalWrite(ledArray[i],LOW);
}
}
else {
for(int i=5;i>=0;i--){
digitalWrite(ledArray[i],LOW);
}
}
}
Работает нормально, не стал выкидывать из скетча информацию о разработчиках и "светодиодном баре" - чего нет в моей схеме. Что хотелось бы:
Так как схема импульсная - не хватает показаний усредненных.
Помогите, кто разбирается - подредактировать скетч - чтоб показывал не только текущиее значение CPM и уровень фона в мкЗВ/ч но и среднее значение мкЗВ/ч.
Большое Спасибо.
Думал проигнорить сообщение, т.к. код вставлен не по правилам форума, вопрос пустяковый, что в целом уже говорит кое чего и о его авторе, но не смог проигорить.... $41.80 за датчик с преобразователем напряжения и пищалкой... Strannic1924, Вы как себя вобще чувствуете? цыфры в нике - год рождения?
У меня есть датчик, имя не помню, квадратный такой, с металлической крышкой, для работы необходим источник высокого напряжения, вот думаю, а нужен ли он мне?
Думал проигнорить сообщение, т.к. код вставлен не по правилам форума, вопрос пустяковый, что в целом уже говорит кое чего и о его авторе, но не смог проигорить.... $41.80 за датчик с преобразователем напряжения и пищалкой... Strannic1924, Вы как себя вобще чувствуете? цыфры в нике - год рождения?
Если вы знаете, где купить трубку-счетчик гейгера дешевле, поделитесь, пожалуйста, с нами, а то тоже хочу купить именно такое изделие, дешевле ничего не находил, а готовые соэксы стоят от $95.
Да я чайник, помочь то конечно нельзя, только постебаться можно...
А газоразрядная трубка сколько стоит?...
Я собирал, как было мне проще и нигде не писал, что это самое лучшее (простое и дешовое) решение.
Я прошу помочь с кодом скетча...
http://zapadpribor.com/sbm-10/ Первый попавший. 15 баксов. И это еще дороговато, гуглите найдете.
Преобразовательн напряжения - по ситуации, от чего питаемся, от 220 - проще всего его и выпрямлять, от аккумов - любой импульсный повышающий до требуемых 300-400В. Его цена в пару баксов будет.
ага, спасибо
Да я чайник, помочь то конечно нельзя, только постебаться можно...
А газоразрядная трубка сколько стоит?...
Я собирал, как было мне проще и нигде не писал, что это самое лучшее (простое и дешовое) решение.
Я прошу помочь с кодом скетча...
Здесь Logik присутствует, можно у него спросить, а если в цифровой фильтр первого порядка показания загнать, можно ли считать, что на выходе получим усреднённые показания???
Как мне в моём чёрном ящике подсказал сделать
///если в цифровой фильтр первого порядка показания загнать, можно ли считать, что на выходе получим усреднённые показания???
Грубо говоря да. Я бы с такого и начинал. Но смотря чего нужно человеку. Может нужно истиное среднее за час, чтоб дозу облучения считать.
///если в цифровой фильтр первого порядка показания загнать, можно ли считать, что на выходе получим усреднённые показания???
Грубо говоря да. Я бы с такого и начинал. Но смотря чего нужно человеку.
Да, наверное это и надо.
Вообщем мне приходится записывать 10 показаний прибора - суммировать и делить их на 10, так я получаю среднее значение. А нужно, чтобы контроллер делал это сам...
помочь то конечно нельзя, только постебаться можно...
Кончено нельзя, Вам же написали как человеку
Думал проигнорить сообщение, т.к. код вставлен не по правилам форума
Вы читать не умеете?
Я прошу помочь с кодом скетча...
Так вставьте его нормально. В таком виде его никто и читать-то не будет.
Дело не в том. Если прибор стационарный, постоянно включенный, то можна и накапливать число импульсов за час и вычислять истиное среднее. Если прибор носимый и изменения фона быстрые - цифровой фильтр в помощ. Если прибор включается для проведения измерений только на время измерения, то наверно наилучший подход - от момента включения сумировать импульсы и измерять время работы, периодически, например раз в 5 сек вычисляем текущее среднее за время работы. Если оно отличилось от предыдущего не более чем на заданый процент, то считаем что это результат, выводим его, но далее, до выключения прибора продолжаем уточнять по тому же алгоритму.
Дело не в том. Если прибор стационарный, постоянно включенный, то можна и накапливать число импульсов за час и вычислять истиное среднее. Если прибор носимый и изменения фона быстрые - цифровой фильтр в помощ. Если прибор включается для проведения измерений только на время измерения, то наверно наилучший подход - от момента включения сумировать импульсы и измерять время работы, периодически, например раз в 5 сек вычисляем текущее среднее за время работы. Если оно отличилось от предыдущего не более чем на заданый процент, то считаем что это результат, выводим его, но далее, до выключения прибора продолжаем уточнять по тому же алгоритму.
Прибор включается для проведения измерений только на время измерения.
Призадумался я, а не замутить ли себе счетчик гейгера, для начала как стационарный. СБМ-10 у меня давно валяется, если не сдох, надеюсь. Весь функционал на ардуине, она выдает ШИМ на мосфет, тот формирует импульсы тока через трансформатор, с вторички выпрямляем (может и умножаем) далее с высоковольтного делителя снимаем на ардуину напряжение для ОС для стабилизации напряжения. Импульсы тока с кондера разряжающегося на гейгер подсчитываем. Все просто, кроме мотать трансформатор(( Интересно с компактных люминисценках нет подходящего трансформатора? Или еще где в распостраненном хламе?
Призадумался я, а не замутить ли себе счетчик гейгера, для начала как стационарный. СБМ-10 у меня давно валяется, если не сдох, надеюсь. Весь функционал на ардуине, она выдает ШИМ на мосфет, тот формирует импульсы тока через трансформатор, с вторички выпрямляем (может и умножаем) далее с высоковольтного делителя снимаем на ардуину напряжение для ОС для стабилизации напряжения. Импульсы тока с кондера разряжающегося на гейгер подсчитываем. Все просто, кроме мотать трансформатор(( Интересно с компактных люминисценках нет подходящего трансформатора? Или еще где в распостраненном хламе?
Ломаем неисправный блок питания ATX, включаем наоборот, и будет нам счастье, 5 вольт на вход на выходе - 300, трансформаторы там точно целые )))
Хммм.... Спасибо!
//Ломаем неисправный блок питания ATX
Это я уже давно начал )))
Пойду посотрю на трансформатор.
на дросселе кллки и мосфете 800 вольт как с куста, а 400 как для счетчика вообще не проблема
кстати, вот для общего развития http://www.ecorad.com/articles/kak-ne-obmanutsya-pri-vybore-dozimetra-ra...
на одном сбм-19 для фона меньше 10 минут накопление смысла делать нет, а сбм-20 надо штуки четыре
Погуглите "бегущее среднее", возможно тоже поможет..
Пардон, "скользящее среднее".
Гололед. Все бегущее становится скользящим ;)
Спасибо XOR, гляну. Правда я уже из компютерного БП трансформатор выковырял и даже схему прикинул на нем.
Нашел в загашнике девайс. СБМ20 91года есть 2 шт. Поиграюсь ))
совет: выбирайте побольше, с обмоткой 10 ом фигня, лучше 3-4 ома, и диод не хуже чем HER208, транзистор желательно что-то типа IRF840, от этого сильно зависит потребление, чем выше добротность тем реже придется давать импульсы накачки. кстати, старая совдеповская пленка типа К73-17 лучший выбор))
мосфет - AO4828 открытый канал не более 0,054Ом, обмотки померял низковольтная 0,2Ом высоковольтная 10Ом. диоды с того же БП FR153, быстрые но обратное только 200В, поставлю два последовательно и постараюсь выше 350В не лазить.
Ребята. Что вы про среднее тут говорите? Это же счётчик гейгера. Он же единички импульсов дает. Если перейдет в токовый режим, то можно идти на кладбище место бронировать. Посмотрите паспорт. Там число есть - чувствительность. Обычно импульсы в минуту. В размере с палец это обычно 15 в минуту для фона. Так примерно и надо писать. Посчитали импульсы за минуту. Скоректировали на чувствительность. С фоном как хотите.
Ну как бы да. Но скетч Вы не смотрели ;) Там уже за 10сек импульсы вроде считает. Но это не достаточное усреднение, считает ТС. А я для себя решил, не гоже датчику 26 лет, валятся пора или выкинут или спалить и выкинутьь;) Ну вот и трындим по теме. А шо низя?! Даже проект наклевывается...
Вот я и говорю. 10 сек это мало. Да ещё не знаю как в этом датчике сигнал выдается. Положительными или отрицательными импульсами. Если отрицательными то сойдёт.
Погуглите "бегущее среднее", возможно тоже поможет..
Пардон, "скользящее среднее".
...иду, скользя, и в мире нет таких вершин, что взять - нельзя... В. Высоцкий (всё таки он гений)
Гололед. Все бегущее становится скользящим ;)
Спасибо XOR, гляну. Правда я уже из компютерного БП трансформатор выковырял и даже схему прикинул на нем.
Нашел в загашнике девайс. СБМ20 91года есть 2 шт. Поиграюсь ))
Схему выложишь, как одолеешь, я тоже тогда поиграюсь
Имею дозиметр "Белла". В нём время подсчёта импульсов около 40 секунд.
http://www.hemul.org/lplaces.com/images/stories/dosimeter/bella_04.jpg
По поводу большой стоимости устройства с алиэкспресс:
1. не у всех есть возможность изготовления аналогичных схем "вручную".
2. посчитайте: стоимость газоразрядной трубки + стоимость почтовой доставки газоразрядной трубки + стоимость печатной платы + стоимость доставки печатной платы (не в каждом малом городке России встретишь магазин радиодеталей, а про села и деревни вообще говорить не приходится) + стоимость разъемов и радиодеталей + стоимость доставки радиодеталей + стоимость припоя ПОС61 + стоимость электроэнергии (работа электропаяльником)... так что не такая и огромная цена у этого устройства... если собирать самому выйдет дешевле, но не у каждого есть возможность и комплектующие...
Надеюсь, что помогут со скетчем...
Был у меня дозиметр советского производства, собран на логике и счетчиках 176 серии, очень простой алгоритм: счетчик считает и импульсы ровно 45 сек. на индикаторах будут высвечиваться значения в МкР/час., при этом больше ни какой обработки не требуется.
Так чего от логики 176 еще требовать?! Убожество, никакой гибкости.
У меня датчик СБТ10А, такой годится?
А ХЗ. Загуглил картинку - прифигел что такое бывает ))
В соседней теме Дима сделал высокое напряжение. http://arduino.ru/forum/apparatnye-voprosy/arduino-nixie-lampovye-indikatory#comment-137609 Вполне можно и эдесь использовать. Только параметры подобрать.
Только надао 300-400В а там 180. В принципе мысль интересная, использовать просто дроссель вместо трансформатора. Но думаю не все так просто, выше XOR напомнил про важность низкого сопротивления обмотки, чтоб низкие потери были. Но низкое сопротивление подразумеват малое число витков, или большое сечение провода что габариты ,а мало витков значить большое межвитковое напряжение и риски пробоя. Чтоб избежать нужна изоляция хорошая что тоже габариты. В общем на дросселе весьма компромисный вариант, вполне может и получится при грамотном подходе, но я уже трансформатор выпаял ;)
такая штука набивает 0.47 мкф до 400 вольт качков за 50, а то и меньше, помехи от нее на катоде счетчика больше полувольта, импульсы от пробоя около трех вольт, в аноде 5.1М, в катоде 4.7К. борьба с помехами может стать нетривиальной задачей
Вы характеристику счётчика смотрели? Там полочка вольт на 50-100. Пульсации высокого напряжения на столько ни как ни повлияют на счётчик. Потребление тока микроамперы. Про потери можно не заморачиваться на таких токах. Пробоя как такового нет. Слишком мало носителей заряда внутри счётчика. Ток сильно ограничен. Разряды идут раз в несколько секунд. Какие помехи? Сигнал от разряда настолько больше всех помех вместе взятых, что ничего особенного предпринимать не надо.
http://gstube.com/data/2398/
теоретик? еще раз, на 4,7к сигнал от разряда, как вы выразились, 3 вольта, помеха от накачки 500-800мв, счетчик сбм-19.
Делаю замеры устройством в квартире показывает:
1. 0,2923 мкЗв/ч
2. 0,2436 мкЗв/ч
3. 0,3898 мкЗв/ч
4. 0,1462 мкЗв/ч
5. 0,2923 мкЗв/ч
6. 0,0974 мкЗв/ч
7. 0,1949 мкЗв/ч
8. 0,1462 мкЗв/ч
9. 0,3898 мкЗв/ч
10. 0,2436 мкЗв/ч
Приходится суммировать вручную, делить на число показаний получаем среднее значение 0,24 мкЗв/ч. Что неудобно. Как оптимизировать скетч, чтоб МК делал это сам?...
Делаю замеры устройством в квартире показывает:
1. 0,2923 мкЗв/ч
2. 0,2436 мкЗв/ч
3. 0,3898 мкЗв/ч
4. 0,1462 мкЗв/ч
5. 0,2923 мкЗв/ч
6. 0,0974 мкЗв/ч
7. 0,1949 мкЗв/ч
8. 0,1462 мкЗв/ч
9. 0,3898 мкЗв/ч
10. 0,2436 мкЗв/ч
Приходится суммировать вручную, делить на число показаний получаем среднее значение 0,24 мкЗв/ч. Что неудобно. Как оптимизировать скетч, чтоб МК делал это сам?...
Может так?
При проверке вышеуказанного скетча, выдает ошибку, в среде arduino 1.0.3:
D_rs was not declared in this score
sketch_feb11a.ino: In function void loop ():
sketch_feb11a.ino:115:error: D_rs was not declared in this score
И что? Дописать в начале строки 115 слово float (или auto) не судьба?
C float в начале строки 115 компилируется.
Но при работе также выдает разные значения и еще пишет четыре нуля впереди
К примеру :
0.1949 . 0000 мкЗв/ч
Это уже к автору, я не знаю, что он вообще делает :)
....0.47 мкф до 400 вольт качков за 50, а то и меньше, помехи от нее на катоде счетчика больше полувольта, импульсы от пробоя около трех вольт, в аноде 5.1М, в катоде 4.7к
Отнюдь. Практик, которого ещё в советском институте научили читать даташиты перед использованием компонент и считать токи и напряжения схемы. Если на 400 вольт поставить делитель 5М на 4.7К получим: 400*4700/(5000000+4700)=0.37 вольта. Раскажите мне как вы 3 вольта получаете? Вот фото советского дивайса которым жена иногда проверяет продукты.
Изредка его приходится приводить в чувство - пропаивать. На фото хорошо видно, что делитель 5М на 100К. На выходе импульс 6 вольт. Наводок нет. Считает 1 минуту. Получаем от 10 до 18 счетов. На продуктах из Белларуссии бывает до 22. Около калиброванного источника радиоактивного железа около сотни.
ок, открываем схему на беллу, я не знаю что это на картинке но пусть будет она, там 4,7М и 10к, импульсы на вход кмоп логики с питанием 9 вольт, значит амплитуда импульсов должна быть вольт 5, но
400*10000/(4700000+10000)=0.85 вольт, упсссс....
досадная оплошность легко решается конденсатором 4.7п параллельно резистору
У меня не Белла, Горизонт. Стоит 100К. Конденсатора нет. И во многих схемах дозиметров его тоже нет. Про него в ваших постах ничего не было. Счетчик гейгера вне пробоя имеет сопротивление больше 100М. Откуда наводка на резисторе 4.7К? Параллельно счётчику гейгера ещё конденсатор висит?
Хорошо. Конденсатор может дать по мозгам резистору, но тогда фронт импульса будет как раз равен напряжению питания,т.е 400 вольт. Дальше его конечно ограничат, но зачем такие экстремальные нагрузки?
C float в начале строки 115 компилируется.
Но при работе также выдает разные значения и еще пишет четыре нуля впереди
К примеру :
0.1949 . 0000 мкЗв/ч
Может LOGIK поможет, я выдрал из своего скетча, можно ли сделать цифровой фильтр первого порядка если используется не unsigned long а float понятия не имею, но код точно не правильный, так как идет преобразование в unsigned long ((( ...я думал вам идеи достаточно...
Что-то подсказывает, что нельзя...остается суммуровать в эту переменную, подсчитывать количество слагаемых, и после десятка измерений разделить на это количество и вывести на экран
Нашёл статью по цифровым фильтрам, из неё следует, что попробовать то можно, для этого надо float перевести в long, к примеру умножив на 10000
А может сделать еще проще?
Ругается на функцию D_rs выдает ошибку указанную выше в посте 40
Как по мне, так делать как в "Белла". С помощью таймера - счётчика, аппаратно, за 40 секунд подсчитать импульсы. Всё.
Ругается на функцию D_rs выдает ошибку указанную выше в посте 40
на переменную, ну так её объявить перед использованием надо, вам же уже выше писали, здесь она будет unsigned long
В версии 1.8.0 откомпилировалось однако! Перенёс некоторые функции в начало, объявлены до использования, добавил строку для моей библиотеки LCD
Попробуйте, это с цифровым фильтром 1-го порядка, самому попробовать не на чем, только в планах