Делаем дозиметр!

Arezus
Arezus аватар
Offline
Зарегистрирован: 26.06.2013

bogdannin1 пишет:
 Мощно получилось. А сколько по весу примерно?

Общий вес  корпуса - 120 грамм при заполнении 100%.

bogdannin1
Offline
Зарегистрирован: 27.10.2018

Нет, я имел в виду вес готового устройства. 

alexadresat
alexadresat аватар
Offline
Зарегистрирован: 22.02.2017

Arezus   - Печатку разрабатывал под С1815, и все элементы подписаны, так что если ставити что-то другое сооброжайте сами. На Arduino пины CTS и GND соеденены вместе поэтому и нет пина, посчитал его не нужным. Применил батарею от телефона Nokia и там контроллер разряда уже установлен в батарее, если ставите что-то другое, то как говорится флаг Вам в руки. И при замене переключателя, я б перерисовам печатку для него. И еще момент, надо сделать прорезь под датчик, так лучше уместятся датчики, и возможно корпус будет потоньше.

Arezus
Arezus аватар
Offline
Зарегистрирован: 26.06.2013

bogdannin1 пишет:

Нет, я имел в виду вес готового устройства. 

Полный вес с батареями - 240 грамм.

Arezus
Arezus аватар
Offline
Зарегистрирован: 26.06.2013

alexadresat пишет:

Печатку разрабатывал под С1815, и все элементы подписаны, 

Я тоже ставил аналог С1815, но на принципиальной схеме указан ВС547 с другой цоколевкой, поэтому указал тем, кто будет повторять схему обратить на это внимание. По поводу подписей, названия элементов там отсутствуют, да и номиналы кондеров не все. Те, кто околоэлектронщики -- не осилят подобрать номиналы. По поводу названий -- в моем дополнении Вашей платы указаны все позиции элементов как на принципиалке, R7, C17 и тп. Очень упростит людям сборку и настройку. Если Вы в моей версии по ссылке выше в Sprint Layout выберете "Опции" - "Перечень компонентов" (или кнопка справа-сверху), то поймете о чем я написал. Так ориентироваться гораздо проще при поиске компонента на принципиалке. Кроме того можно экспортировать весь список для покупки в магазе в такой формат:

* Перечень компонентов: "ArDOs_SOT23+Modul-TP4056.lay6" / 17.02.2019 21:36:09
*
* №	Обозн	Номин	Корпус	Коммент
*
1	C	100n	1206	
2	C1	1000pF	1206	
3	C5	1n	1206	
4	C6	100n	1206	
5	C8	100n	1206	
6	C17		---	
7	C13a	220u	---	
8	C13b	220u	---	
9	Ca	10u	1206	
10	Cb	10u	1206	
11	D2	1N4007	1206	
12	LEDa		---	
13	LEDb		---	
14	R	200k	1206	
15	R	200k	1206	
16	R1	10k	1206	
17	R2	470k	1206	
18	R3	10k	1206	
19	R4	1k	1206	
20	R7	2M	1206	
21	R12	10M	1206	
22	R13	10M	1206	
23	R14	10M	1206	
24	R15	10M	1206	
25	R16	10M	1206	
26	R17	10M	1206	
27	R18	200k	1206	
28	R19	2M	1206	
29	R20	2M	1206	
30	R21	2M	1206	
31	R22	2M	1206	
32	R23	200k	1206	
33	R24	10M	1206	
34	R25	10M	1206	
35	R26	10M	1206	
36	R27	10M	1206	
37	R36	100k	1206	
38	Ra	0.4	1206	
39	Rb	1k2	0402	
40	Rc	1k	0402	
41	Rd	1k	0402	
42	R_Pull1	10k	1206	
43	R_Pull2	10k	1206	
44	R_Pull3	10k	1206	
45	T2	IRML6346	SOT23	
46	T3	IRML2502	SOT23	
47	T4	IRML2502	SOT23	
48	T5	BC547	SOT23	
49	U1	TP4056	---	 

alexadresat пишет:
На Arduino пины CTS и GND соеденены вместе поэтому и нет пина, посчитал его не нужным.

На ардуино -- да, но не на программаторах, то есть земля не доходит. 

alexadresat пишет:
И при замене переключателя, я б перерисовам печатку для него.

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

alexadresat пишет:
И еще момент, надо сделать прорезь под датчик, так лучше уместятся датчики, и возможно корпус будет потоньше.

Обязательно вырежу, фото примерочные сразу после печати, поэтому не вырезано, по плану там будет прорезь почти до верхнего плеча, тк хочу туда втулить еще экран на подобие того, как в Припяти 20.03 стоит, чтобы можно было раздельно гамму измерить и гамму+бету условно со снятым фильтром.

alexadresat
alexadresat аватар
Offline
Зарегистрирован: 22.02.2017

 Arezus  -  Надо быть уж совсем дауном чтоб не понять какая деталь стоит (просто навести мышку на деталь, это же как в космос слетать...)

bogdannin1
Offline
Зарегистрирован: 27.10.2018

Arezus пишет:

bogdannin1 пишет:

Нет, я имел в виду вес готового устройства. 

Полный вес с батареями - 240 грамм.

Масивненько)

alexadresat
alexadresat аватар
Offline
Зарегистрирован: 22.02.2017

3000 мА батарея это уж слишком. 1500 мА за глаза хватит. Ну если только ват на 10 фонарик сделать. Или с учетом ядерной зимы, то нормально. Я такую поставил.

Arezus
Arezus аватар
Offline
Зарегистрирован: 26.06.2013
alexadresat пишет:
  Надо быть уж совсем дауном чтоб не понять какая деталь стоит (просто навести мышку на деталь, это же как в космос слетать...)

Хрен знает, у меня многие обращаются, кто умеет паять, хочет что-то делать, но не умеет читать схемы, а в печатке названий элементов нет, им сложно сопоставить позицию элементов (а в мануале по первому запуску указан С11/С18, а в последней схеме он -- С3 и R47 мануала, который в этой печатке является R6. По факту и ослу понятно, что надо разорвать цепь накачки и замерять потом ток, но все же). К тому же если в спринте есть специально разработанная функция для этого, то почему бы ей не пользоваться. Я всегда в своих печатках расписываю названия и номиналы элементов в этой таблице, потом проще и закупать и запаивать все. Если говорить о степени обеспеченности мозгами и оборудованием, то в мануале и этой ветке обсуждается ограничитель тока на LM317, но это каким же великим электронщиком надо быть чтобы не иметь лабораторника? Первые три вещи на столе -- паяльник, мультиметр нормальный и за ним ЛБП, а потом уже осциллографы, транзистор-тестеры, преднагреватели и тп. Чтобы городить ограничитель на ЛМ-ках это совсем уже все печально должно быть.

bogdannin1 пишет:
Масивненько

Собрал с батареей, фактически получилось 194 грамма.

alexadresat пишет:
  3000 мА батарея это уж слишком. 1500 мА за глаза хватит. Ну если только ват на 10 фонарик сделать. Или с учетом ядерной зимы, то нормально. Я такую поставил.

По факту оказалось, что батареи от iPhone 6S с разбоки, после того, как из них выдрать плату защиты не паяются никак даже с кислотой, хрен знает из чего они сделали выводы, но это скорее всего не никель. Поэтому я взял элемент от iPhone 5, обрезал плату и припаялся к никелю, который приварен на эти выводы из непонятного металла. Емкость 1400 мАч, согласен, что этого за глаза хватит.

Западло еще прилетело, заказал два СТС-5, один нерабочий пришел, хорошо хоть, что стоимость двух была как один у других продавцов, по 4$ за штуку. А СБМ-20 ниже 10$ вообще сложно найти.

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Arezus пишет:

(а в мануале по первому запуску указан С11/С18, а в последней схеме он -- С3 и R47 мануала, который в этой печатке является R6. По факту и ослу понятно, что надо разорвать цепь накачки и замерять потом ток, но все же).

Проблема в том, что многие приходят в эту тему с ютуба или сайта srukami, и приходится как базовую использовать схему оттуда. Думаю в пост запуска добавить схему с выделением нужных элементов и мест подключения красным цветом. А где эти элементы на печатке уж пусть разбираются, под каждую не распишешь.
Arezus пишет:

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

Про транзистор-тестер не соглашусь. При сборке чего-либо как б/у, так и новые элементы прогоняю через ТТ, знатно экономит время и нервы при настройке/отладке. Среди новых тоже брак попадается.
Лабораторник... многие ардуинщики кроме юсб о других источниках и не слышали. А в "бюджетных" ЛБП (это которые по 30-35$) фиг поставишь ограничение в 30мА, а 50-100 при корявой сборке уже могут мегу подпалить. А на ЛМках можно накидать за десять минут. Питать от импульсного ЛБП схемы, чувствительные к наводкам, пока они не настроены/отлажены тоже не хочется. Уж лучше транс, мостик да линейник, пусть даже на ЛМ317/338. У меня такой колхоз в качестве тестового БП который год уже стоит.

Arezus
Arezus аватар
Offline
Зарегистрирован: 26.06.2013

tekagi пишет:
Думаю в пост запуска добавить схему с выделением нужных элементов и мест подключения красным цветом. А где эти элементы на печатке уж пусть разбираются, под каждую не распишешь.

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

tekagi пишет:
Про транзистор-тестер не соглашусь. При сборке чего-либо как б/у, так и новые элементы прогоняю через ТТ, знатно экономит время и нервы при настройке/отладке. Среди новых тоже брак попадается.

ТТ однозначно крайне полезный инструмент, но для его сборки уже неплохо бы обладать какими-то навыками, а ЛБП собрать -- посмотрел пару-восемь роликов, заказал платы "по ссылкам в описании", проводочками соединил и все.

tekagi пишет:
Лабораторник... многие ардуинщики кроме юсб о других источниках и не слышали. А в "бюджетных" ЛБП (это которые по 30-35$) фиг поставишь ограничение в 30мА, а 50-100 при корявой сборке уже могут мегу подпалить.

Я сам собирал первый ЛБП, да, пульсации, да емкости навесил на выход, но получил бюджетно готовый ЛБП с пятью разрядами отображения. По калибровке все просто -- я в стандартах работаю, тут эталонов как у дурака фантиков. Сейчас еще два заводских ЛБП купил для разных задач, но старенький самопал все равно работает наряду с нормальными. Да и вообще ЛБП полезная вещь, хоть литий заряжай, хоть автомобильный АКБ, хоть ленту светодиодную питай, хоть дозиметр. 

ЛМка тоже нормальна, тем более что линейная, но начинает крепко греться уже с 150 мА если радиатор минимальный не навесить.

Сусемьбек
Offline
Зарегистрирован: 08.02.2019

Всем доброго вечера. Как думаете можно ли так подсчитывать импульсы?

volatile uint32_t  old_time =0;  // время предидущего импульса
volatile uint32_t  current_time =0;
volatile uint32_t  pulse_interval =0;  //ИНТЕРВАЛ МЕЖДУ ИМпульсами

void setup() { 
DDRD=~((1<<2)|(1<<3)); //        23 пины вход    
attachInterrupt(1, Particle_counting, FALLING);
}
void loop() {}

void Particle_counting ()
{
pulse_interval= micros() - old_time; // вычисляем промежуток между импулсами
old_time =micros(); // сохранем время текущего импульса для последующих вычислений
uint32_t frequency_S = 1000000/pulse_interval;
}

то есть замерять промежуток между импульсами. потом перевести импульс в секунду, в час и поделить на чувствительность датчика. так же завести массив на 4-8 ячеек обновляемый сдвигом ячеек.и находить усредненное значение. в принципе все работает. до частоты 150 гц все успевает точно посчитаться, 200 гц уже идут отклонения +-1%. до 300 гц -+2%. в переводе на чувствительность датчика СБТ-11 получается, что таким способом можно точно фиксировать дозу ( (100 имп/с * 3600 )/ 44 (чувствительность СБТ-11 44 импульса на мкр/ч) получается, до 8181 мкр/ч можно вполне точно фиксировать импульсы. 

ну и собственно вопрос, какой метод лучше, как в Ардосе или подсчет частоты импульсов?

 

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Из обработчика прерываний выкинуть всю математику, особенно деление, и перенести в луп. Ну и луп должен быть коротким, чтобы поспевал при высокой частоте импульсов. А в обработчике только присваивать текущее значение. Не знаю, как поведёт себя micros() в прерывании, по идее значение должен отдавать.
При малой частоте следования импульсов (СБМ10, СБМ21) имхо лучше такой метод, при высокой - подсчёт за секунду.

Сусемьбек
Offline
Зарегистрирован: 08.02.2019

спасибо за ответ. видно неудачный способ(. 

tekagi пишет:
Из обработчика прерываний выкинуть всю математику, особенно деление, и перенести в луп.

в этом то вся загвоздка(((. что в лупе средней длины, точно обсчитывается только до 100 импульсов в секунду, дальше идет погода на марсе. если вычислять сразу в прерывании то до 300 имп/с можно обсчитать вполне вменяемо.  

tekagi пишет:
Не знаю, как поведёт себя micros() в прерывании, по идее значение должен отдавать. 

все работает, проверял с помощью генератора импульсов.

tekagi пишет:
При малой частоте следования импульсов (СБМ10, СБМ21) имхо лучше такой метод, при высокой - подсчёт за секунду. 
 

это как раз про СБТ-11 с его 44 импульсами на микроренген, из которых 2.5 имп/с собственный фон.

еще один плюс этого способа, что обновление данных можно привязать не к фиксированным промежуткам времени, а к моменту когда зарегистрируется 4-8 импулсов. быстрее наберет пакет импульсов, быстрее обновятся данные на экране. (хотя может это и не +). Но увы, вне прерывания подсчет работает мягко говоря плохо. кстати строка с делением занимает 44 мкс (если правильно подсчитал).

 

 

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Сусемьбек пишет:
...если вычислять сразу в прерывании...

Почитайте статью Di Halt'а о прерываниях, особенно части "Грабли вторые — не тормози!" и "Грабли третьи — атомарный доступ", познавательно.

Arezus
Arezus аватар
Offline
Зарегистрирован: 26.06.2013

Сусемьбек пишет:
Всем доброго вечера. Как думаете можно ли так подсчитывать импульсы?

Мое мнение, что нельзя.

Обьясню. Этот метод применяется, действительно, но работать он будет только если импульсы равномерны, то есть у нас какой-либо меандр, равномерно распределенный во времени. Так можно измерять скорость автомобиля, обороты насоса, ДВС и тп., тк они имеют равномерное нарастание и спадание по экспоненте или линейно или по другой степенной функции. То есть следующий интервал импульса не может отличаться от предыдущего значительно. При замере количества частиц и при условии, что у нас не 500 мкР/ч валит, а фоновые 15-25 мкР/ч, импульсы приходят неравномерно, между двумя соседними может пройти 20 мкс, а может и 10 с. При этом показания будут адово скакать от 700 мкР/ч до 4 мкР/ч за какие-нибудь отдельные 2-3с замера. Прийдется усреднять за те же 40с, нормированые для СБМ-20 или СТС-5. А если усреднять все равно прийдется, то почему бы это не сделать сразу?

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Arezus, усреднение необходимо, но применительно к дозиметру хоть при малом уровне фона мы массив будем набирать долго, при повышении гораздо быстрее.  Если же брать фиксированный временной интервал - то при повышении фона приходится изобретать разные алгоритмы ускорения счёта. Чем раньше определим каку - тем быстрее сделаем ноги (из подручных средств :) ).

У метода есть свои плюсы. Но для СБМ-20 и более быстрых я бы его не использовал.

Сусемьбек
Offline
Зарегистрирован: 08.02.2019

спасибо, понял что велосипед не изобрести). будем считать по старинке)

Arezus
Arezus аватар
Offline
Зарегистрирован: 26.06.2013

tekagi, я, кстати, экспериментировал, брал для сбм не 40 сек, а 20 и умножал на два, а затем усреднял последние 20 сек до достижения 40, потом, как обычно — седнее за 40 секунд. На нижних пределах разница не заметна. Но если брать два соседних и экстраполировать интервал на время нормального замера, то точно дичь будет.

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Два соседних, конечно, не вариант, хотя бы пару десятков для двадцатого или десяток для двадцать первого. Или, как в некоторых конструкциях, считаем импульсы посекундно, если за половину времени натикало 20+ импульсов - пересчитываем результат по половинному времени, если те же 20+ натикали за 5 секунд за - восьмую часть.

Evo333
Offline
Зарегистрирован: 20.02.2019

Добрый вечер, прошу прощения за возможно глупый вопрос, но уже голову сломал. Пытаюсь скомпилировать скетч автора (прошивка 1.05) а Arduino IDE выдает ошибку "Ошибка компиляции для платы Arduino Pro or Pro Mini." палата pro mini 328atmega, пробовал и другие платы, другие версии IDE, другой комп, одна и та же ошибка. 

G:\рабочий стол\Проэкты\Дозиметр\Прошивка1,05 и библиотека\ARDOs_noSleep_v105/ARDOs_noSleep_v105.ino:603: undefined reference to `logo_rag'
 
G:\рабочий стол\Проэкты\Дозиметр\Прошивка1,05 и библиотека\ARDOs_noSleep_v105/ARDOs_noSleep_v105.ino:603: undefined reference to `logo_rag'
 
C:\Users\Evo\AppData\Local\Temp\ccnCjYQs.ltrans0.ltrans.o: In function `lcd_poisk':
 
G:\рабочий стол\Проэкты\Дозиметр\Прошивка1,05 и библиотека\ARDOs_noSleep_v105/ARDOs_noSleep_v105.ino:403: undefined reference to `logo_tr'
 
G:\рабочий стол\Проэкты\Дозиметр\Прошивка1,05 и библиотека\ARDOs_noSleep_v105/ARDOs_noSleep_v105.ino:403: undefined reference to `logo_tr'
 
C:\Users\Evo\AppData\Local\Temp\ccnCjYQs.ltrans0.ltrans.o: In function `gif_nabor':
 
G:\рабочий стол\Проэкты\Дозиметр\Прошивка1,05 и библиотека\ARDOs_noSleep_v105/ARDOs_noSleep_v105.ino:304: undefined reference to `gif_chast_1'
 
G:\рабочий стол\Проэкты\Дозиметр\Прошивка1,05 и библиотека\ARDOs_noSleep_v105/ARDOs_noSleep_v105.ino:304: undefined reference to `gif_chast_1'
 
G:\рабочий стол\Проэкты\Дозиметр\Прошивка1,05 и библиотека\ARDOs_noSleep_v105/ARDOs_noSleep_v105.ino:306: undefined reference to `gif_chast_2'
 
G:\рабочий стол\Проэкты\Дозиметр\Прошивка1,05 и библиотека\ARDOs_noSleep_v105/ARDOs_noSleep_v105.ino:306: undefined reference to `gif_chast_2'
 
C:\Users\Evo\AppData\Local\Temp\ccnCjYQs.ltrans2.ltrans.o: In function `battery()':
 
G:\рабочий стол\Проэкты\Дозиметр\Прошивка1,05 и библиотека\ARDOs_noSleep_v105/ARDOs_noSleep_v105.ino:692: undefined reference to `logo_bat'
 
G:\рабочий стол\Проэкты\Дозиметр\Прошивка1,05 и библиотека\ARDOs_noSleep_v105/ARDOs_noSleep_v105.ino:692: undefined reference to `logo_bat'
 
collect2.exe: error: ld returned 1 exit status
 
exit status 1
Ошибка компиляции для платы Arduino Pro or Pro Mini.
Arezus
Arezus аватар
Offline
Зарегистрирован: 26.06.2013

Evo333 я хрен его знает что за простыню вы вывесили тут, но попробую угадать, что ветку форума вы вообще не читали и поэтому не в курсе, что в Arduino IDE необходимо чтобы все пути содержали только латинские символы. Между прочим это касается и остальных путей для папок и файлов ПК, тк в русских и украинских символах, как и в некоторых других языках буква занимает на бит больше. Просто перенесите папку в расположение без кириллических символов в адресе. И файл gif.c должен лежать рядом с листингом, то есть рядом с файлом скетча.

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

1. Не используйте старые версии скетчей, их поддержка не ведётся. Ссылка на новые на первой странице, пост #26. Этот же пост рекомендуется к вдумчивому прочтению.

2. В папке рядом со скетчем должен лежать файл gif.c соответствующей скетчу версии.

3.Нежелательно использовать кириллицу в путях к скетчу.

Создайте папку G:\Ardos, положите в неё файл скетча с именем Ardos.ino и файл графики gif.c. Запускайте двойным кликом на Ardos.ino.

Arezus, ИДЕ матерится на отсутствующий файл графики.

Evo333
Offline
Зарегистрирован: 20.02.2019

Большое человеческое спасибо! все заработало.

Arezus-да есть такой грешок, всю ветку форума не осили((( то что путь должен содержать латинские символы я догадался,пробовал переносить папку со скетчем, но вот знаний не хватило чтобы понять, что и gif.c тоже должен лежать там(( 

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

Arezus
Arezus аватар
Offline
Зарегистрирован: 26.06.2013

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

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018

Сусемьбек пишет:
Всем доброго вечера. Как думаете можно ли так подсчитывать импульсы?....

ну и собственно вопрос, какой метод лучше, как в Ардосе или подсчет частоты импульсов?

идея с частотами сама по себе хорошая, но в таком виде, как у вас она стабильно работать не будет. Не буду повторять почему, все уже сказано выше. Можно, конечно, попытаться допилить, чтобы получить рабочий код. Только одно замечание: Конкретные интервалы между импульсами нас не интересуют, поэтому нет никакого смысла в функции прерывания их вычислять, тем более с помощью micros(). По большему счету, нас интересует среднее значение интервала между импульсами (это почти тоже, что и средняя частота в единицу времени). Поэтому поступаем следующим образом: в loop() делаем короткие выборки по 5-10 штук, для этого берём суммарное время каждой такой выборки micros()-_start_time и делим ее на число элементов _discharge_counter. для каждой выборки подсчитываем среднее и заносим ее частоту в рабочий массив. далее следует статистическая обработка данных... как всегда. Код может выглядеть примерно так:

// global variables
uint32_t _start_time;
volatile uint16_t _discharge_counter; // counter of the registered particles
const uint8_t _max_number = 5U; // maximum number of registered particles in one sample, from 5 to 255 (depends on the GM-tube type)
const uint16_t _max_CPS = 2700U; // maximum operating frequency of pulses per second (depends on the GM-tube type)
uint16_t mass_poisk[128]; // основной рабочий массив

void setup() { 
  DDRD=~((1<<2)|(1<<3)); //        23 пины вход
  attachInterrupt(1, Particle_counting, FALLING);
  _discharge_counter = 0U; // reset the discharge counter and the start time
  _start_time = micros();
}

void loop() {
  if ( _discharge_counter > _max_number )
  {
    float mean_interval = (micros() - _start_time)/_discharge_counter;
    float frequency_S = 1000000/mean_interval;
    // shift( mass_poisk );
    if ( frequency_S < _max_CPS ) mass_poisk[127] = int( frequency_S );
    // else overflow_error();
    // following calculations...
    // todo

    _discharge_counter = 0U; // reset the discharge counter and the start time
    _start_time = micros();
  }
}

void Particle_counting ()
{
  _discharge_counter++;
}

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

А можно поступить немного по-другому - накапливать в рабочем массиве не выборки по частотам, а выборки среднего времени, которые, кстати говоря, имеют распределение Пуассона, ну почти... Пуассона))

Сусемьбек
Offline
Зарегистрирован: 08.02.2019

Вечер добрый. Спасибо вам за рабочую программу.

Потестил его с генератором импульсов. При частоте импульсов

100 гц;   100.24   100.16   100.12   100.16   100.14   100.14

200 гц;   200.64   200.64   200.32   200.64   200.68   200.80

300 гц;   301.57   301.39   301.57   301.39   301.75

400 гц;   402.90   403.06   402.74   402.25   401.28

1000 гц;   975.61   967.12   1094.09   975.61   972.76   1092.90 (а если усреднить в массиве из 10 ячеек == 1013)

На «медленных» датчиках, наверное вполне пойдет. до 300 имп/с считает  достойно.

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

(хотя может рискнуть, переделать свою прошивку под такой способ, ведь для домашнего дозиметра 300 имп/с == 24000 мкр/ч, вполне хватит. образец с таким излучением вряд ли найти удастся)

Пуассона пытался осилить - не смог(

добавил позднее:

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

 

blokerun2
Offline
Зарегистрирован: 27.01.2019

Может ли напряжение на вторичке трансформатора быть недостаточным (270-300 В) из за того что конденсаторы по питанию не керамика а электролит танталовый?

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Да, если по питанию преобразователя. Конденсаторы другого типа (даже тантал и электролиты LowESR) не могут отдать ток необходимой величины в коротком импульсе.

Arezus
Arezus аватар
Offline
Зарегистрирован: 26.06.2013

 blokerun2 пишет:
Может ли напряжение на вторичке трансформатора быть недостаточным (270-300 В) из за того что конденсаторы по питанию не керамика а электролит танталовый?

Мне кажется, что тут больше влияет сама котушка (может попробовать перемотать или поменять местами выводы первичкиили она вообще низкой индуктивности, типа 2-3 мГн) и ВВ кондер. Какая емкость у ВВ кондера? По питанию кондеры будут оказывать сильное влияние только если батарея хиленькая ну совсем уже. Но на всякий случай укажу что ставил я. Кондер на питании около дуни -- тантал, около 33 мкФ, рядом керамика 100 нФ, по питанию около транзистора буззера еще 100 нФ, ближе к контроллеру заряда по питанию стоит электролит, выводная бочка на 470 мкФ 16 В, на котушке, между землей и постоянным плюсом два керамика по 35 мкФ. Сейчас 400 В при накачке 2, скорость 130-140.

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Упс, пардон, проглядел. В цепи преобразователя обязательно керамика. По общему питанию (vcc-gnd) можно любой.

hawk23
Offline
Зарегистрирован: 09.06.2017

Сделал и я свой дозиметр.

Из сюрпризов только то, что приехала ардуинка с A5 вместо земли сбоку возле A6. Пришлось досверлить еще одно отверстие. 
Плату подправил под себя. Фонарик и вибру не ставил. Корпус купил готовый. Маску делал первый раз.

      

Ток х.х. без счетчика и с выпаяными светиками на ардуинке:

Вместо СГ перемычка:

Всем спасибо!

Muxi
Offline
Зарегистрирован: 22.01.2019

Скажите, как измерить напряжение на сбм20? Пробовал uni-t u61e показывает 160в, пробовал осциллографом dso201 pro, тоже примерно 160, но кванты считаются, значит должно быть выше

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Подручными средствами - никак. Измерять нужно не на самом счётчике Гейгера, а на накопительном конденсаторе, используя высокоомный вольтметр (не менее нескольких ГигаОм, например Микрон Гига Вольт), а ещё лучше электростатический вольтметр.

В АрДосе для этих целей есть встроенный  вольтметр, который просто нужно откалибровать.

hawk23, отлично получилось. Если планируте эксплуатацию в разных условиях - то высоковольтную часть стоит покрыть пластик-70 поверх пайки и элементов, чтобы уменьшить влияние влажности.

hawk23
Offline
Зарегистрирован: 09.06.2017

tekagi спасибо! Я немного поюзаю, понаблюдаю, затем маской покрою. 

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018

Сусемьбек пишет:
Потестил его с генератором импульсов. При частоте импульсов...

1000 гц;   975.61   967.12   1094.09   975.61   972.76   1092.90 (а если усреднить в массиве из 10 ячеек == 1013)

На «медленных» датчиках, наверное вполне пойдет. до 300 имп/с считает  достойно...

спасибо за результаты теста. Сам я, к сожалению, проверить не могу. Пока нет ни макетки, ни генератора импульсов.

Между тем нашел в моём скетче небольшую ошибку в строке 18-й - пропустил cast. Но на такой разбег значений влиять  как бы не должно. Еще подсмотрел в одном из проектов задержку в функции прерывания. Как-бы должна помочь убрать эффекты переходных процессов на частотах > 300 Гц. Еще одно мое ноу-хау - добавить адаптивный алгоритм. В режиме поиска можно динамически менять длину выборки/сэмпла (sample_size). Если интенсивность частиц спадёт, то и длина сэмпла опустится на прежнее значение. В данном случае пострадает только точность измерений, но зато увеличится реакция прибора. От днины сэмпла будет зависеть точность измерений среднего интервала. Цифры примерно следующие:
при относительной ошибки измерения 30% достаточно sample_size > 10,
при относительной ошибки измерения 10% достаточно sample_size  100,
при относительной ошибки измерения 1% достаточно sample_size  10000.
#define GMTUBE_INPUT 2 // pin 2 or 3 for GM-tube
#define GMTUBE_INT digitalPinToInterrupt( GMTUBE_INPUT ) // interrupt Nr for GM-tube
uint32_t _start_time;
volatile uint16_t _discharge_counter = 0U; // counter of the registered particles
uint8_t _sample_size = 10U; // number of registered particles in one sample, from 10 to 255 (depends on the GM-tube type)
const uint16_t _max_CPS = 2700U; // maximum operating frequency of pulses per second (depends on the GM-tube type)
uint16_t mass_poisk[128]; // основной рабочий массив

void setup() { 
  pinMode( GMTUBE_INPUT, INPUT ); // set pin for capturing GM-tube events
  digitalWrite( GMTUBE_INPUT, HIGH );
  interrupts(); // enable interrupts
  attachInterrupt( GMTUBE_INT, particle_counting, FALLING ); // interrupt on GMTUBE_INT
  _start_time = micros(); // set start time
}

void loop() {
  if ( _discharge_counter > _sample_size )
  {
    float mean_interval = float(micros() - _start_time)/_discharge_counter;
//    if ( (mean_interval < 1000) && (_sample_size < 245) ) _sample_size += 10; // step up _sample_size
//    if ( (mean_interval > 100000) && (_sample_size > 10) ) _sample_size -= 10; // step down _sample_size
// todo
    float frequency_S = 1000000/mean_interval;
    // shift( mass_poisk );
    if ( frequency_S < _max_CPS ) mass_poisk[127] = int( frequency_S );
    // else overflow_error();
    // following calculations...
    // todo
    _discharge_counter = 0U; // reset the discharge counter and set start time
    _start_time = micros();
  }
}

void particle_counting ()
{
  detachInterrupt( GMTUBE_INT );
  _discharge_counter++;
  while( digitalRead( GMTUBE_INPUT ) == 0 ) {}
  attachInterrupt( GMTUBE_INT, particle_counting, FALLING );
}
Относительно Пуассона можно почитать методичку к лабораторной работе. Распределение Пуассона обладает многими замечательными свойствами, например, математическое ожидание численно совпадает с дисперсией. Значит, что при подсчёте допустимой ошибки на среднем квадратическом можно попросту съэкономить, вместо него взять уже подсчитанное среднее.
Сусемьбек
Offline
Зарегистрирован: 08.02.2019

мысль замечательная, но не смог ее до ума довести(. в том варианте как у вас, довольно точно считает с 1000 имп/с, но до 1000 дичь полнейшая. 

думаю из за хитрой конструкции

void particle_counting ()
{
  detachInterrupt( GMTUBE_INT );
  _discharge_counter++;
  while( digitalRead( GMTUBE_INPUT ) == 0 ) {}
  attachInterrupt( GMTUBE_INT, particle_counting, FALLING );
}

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

думаю можно на таймерах счетчиках воплотить вашу идею. но лениво даташит раскуривать, да и у меня вечно все таймеры заняты то шимом то компаратором.

всячески пробовал заставить адекватно работать. получалось 2 варианта) или хорошо считает до сакральных 300 имп/с но выше непонятно что, или наоборот до 1000 ерунда но выше норм. если медленный датчик и не собираетесь рентгены мерять, для домашнего дозиметра до 10000 мкр/ч, ваш 1 вариант более чем рабочий. 

Muxi
Offline
Зарегистрирован: 22.01.2019

Скажите есть ли разводка платы на смд с последней версией схемы? (Последняя ли?) Все, что не нахожу не бьёт с схемой

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Нет. А чем версия alexadresat не устраивает? Там минимум дип компонентов. Если важны габариты - то только рисовать самостоятельно.

Arezus
Arezus аватар
Offline
Зарегистрирован: 26.06.2013

Плата alexadresat почти полностью совпадает со схемой по топологии, если нужно совпадение по названиям компонентов, то на предыдущей странице есть она же, но с названиями правильными. Если нужна плата исключительно на смд, то прийдется рисовать самому. Хотя смысла не много добавит, габариты сбм все равно меньше не станут.

Muxi
Offline
Зарегистрирован: 22.01.2019

Проблема с корпусом, сбм будет на провадах, плата 9*6см максимум. Ещё вопрос можно ли как-то установить дисплей вверх ногами, но чтобы показывал правильно? Критичны лишние 5мм

Muxi
Offline
Зарегистрирован: 22.01.2019

Сорри, сервер выдавал

504 Gateway Time-out
nginx/1.6.0

А сообщения отправлялись, удалить сам не могу :(

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

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

Muxi
Offline
Зарегистрирован: 22.01.2019

tekagi пишет:
Не обновляйте страницу после отправки сообщения, даже если выдаёт ошибку. Закройте вкладку и зайдите в тему заново. Под специфический корпус только разводить плату самостоятельно, адаптировать существующие никакого смысла.

Да, я уже понял. А что на счет поворота дисплей вверх ногами? В голову пришло только в библиотеке дисплея добавить поворот, т.к. там такого я не нашел изначально. Но может есть вариант проще?

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

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

Muxi
Offline
Зарегистрирован: 22.01.2019

А как при помощи джамперов можно перевернуть изображение? Проблема в том, что в корпусе уже есть окошко под дисплей с отсупом от верхней грани корпуса всего 5мм. потому если ставить как положено, то будет видна железная оправа дисплея, если его развернуть, то все красиво :)

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

       int16_t t;
        switch(rotation) {
            case 1:
                t = x;
                x = WIDTH  - 1 - y;
                y = t;
                break;
            case 2:
                x = WIDTH  - 1 - x;
                y = HEIGHT - 1 - y;

                break;
            case 3:
                t = x;
                x = y;
                y = HEIGHT - 1 - t;
                break;
	}

Текст и картинки работают, а вот с горизонтальной линией пока засада, не могу воткнуть где косячу :( Не думаю, что это сильно скажется на оперативке, но если будет вариант проще буду примного благодарен :)

alexadresat
alexadresat аватар
Offline
Зарегистрирован: 22.02.2017

Muxi -  Дисплей можно сдвинуть и повернуть используя шлейф. Крепи дисплей к корпусу как надо тебе и соединяй с платой гибким шлейфом.

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

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

Arezus
Arezus аватар
Offline
Зарегистрирован: 26.06.2013

Muxi, линии в листинге прописаны в четырех местах, может проще сместить эти линии зеркально относительно центра и не мучаться? А по поводу того, чего они не заработали со старта, предположу, что в библиотеке drawline() может использовать другую переменную, отличную от drawbitmap() и print()

Muxi
Offline
Зарегистрирован: 22.01.2019

В общем решил попробовать и добавил в библиотеку функцию поворота экрана, на ресурсах особо не сказалось

С Оригинальной библиотекой:
Скетч использует 11512 байт (35%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 612 байт (29%) динамической памяти, оставляя 1436 байт для локальных переменных. Максимум: 2048 байт.

С функцией поворота экрана:
Скетч использует 11580 байт (35%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 618 байт (30%) динамической памяти, оставляя 1430 байт для локальных переменных. Максимум: 2048 байт.

Если оригинальную библиотеку причесать нормально, то можно ее ужать, там всюду int где значения от 0-84 максимум.

Зато сейчас можно хоть G-сенсор добавляй в дозиметр :D