Проблемы по дозиметру. Помогите

Дончанин
Offline
Зарегистрирован: 08.11.2017

Люди добрые, помогите, пожалуйста. Несколько дней бьюсь над схемой, но никакого результата. Сразу прошу прощения за коряво нарисованную схему. Собираю дозиметр на примере вот этого (https://usamodelkina.ru/11527-prostoj-dozimetr-na-arduino-nano-svoimi-rukami.html#comment). Все запитано от телефонной зарядки 5В, 0.7А. Далее повышалка до 10В, т.к. ВВ преобразователь включается с 9-10В. Напряжение на выходе 380В, на ардуинку идет 10В. Земля везде общая, на высоковольтном преобразователе, на входе и на выходе, земля тоже общая. Датчик рабочий, если параллельно ему подсоединить писчалку с конденсатором, сигналы есть, но очень тихие. На ардуине нет никаких сигналов. Пробовал разные схемы снятия сигнала, в том числе и как на ArDos. Тишина. На входе ардуино включен подтягивающий резистор. Если мультиметром в режиме измерения напряжения коснуться концов датчика, светодиод загорается. Ставил транзистор как у автора, потом КТ315-ничего… Вчера уже хотел сворачиваться, но вдруг случайно задел рукой корпус датчика и сигналы пошли, такие как и на писчалке. Пока держишь руку, сигналы идут, убираю-нет. На утро все повторил, даже если и прикасаюсь рукой сигналов все равно нет, уже башню сносит…. Проверил транзистор и датчик, все в норме. В чем бока не пойму. Может, кто подскажет.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

а пошто ты проект повторяешь хрен знает чей, с другого сайта, а вопросы не там задаешь, а здесь?

Дончанин
Offline
Зарегистрирован: 08.11.2017

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

b707
Offline
Зарегистрирован: 26.05.2017

Дончанин пишет:

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

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

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

Дончанин
Offline
Зарегистрирован: 08.11.2017

Хорошо. Спрошу в соседней ветке. А эту тему проше не удалять и не переносить пока чего-то не посоветуют.

bwn
Offline
Зарегистрирован: 25.08.2014

Все таки перенесу.

nik182
Offline
Зарегистрирован: 04.05.2015

Вообще то подключение датчика нарисовано неправильно. Точно так подключен?  

Дончанин
Offline
Зарегистрирован: 08.11.2017

Все правильно подключено. Проблема была в том, что на входе поставил (по привычке) защиту от дребезга.

Сейчас замечательно считает. По трем замерам было 12, 12 и 15 щелчков за 36 сек. Сегодня купил 3 маленьких пакетика калиевой селитры, положил рядом с датчиком, фон раза в 3-4 повысился, но это примерно на глаз, точно не подсчитывал.

Вот видео: 

https://youtu.be/xdRf-fIu1xM

В дальнейшем планирую поставить OLED дисплей, распечатать корпус, хочу также поставить хороший УФ фонарик, ну и может быть сделать компактный искровой альфа детектор. 

nik182
Offline
Зарегистрирован: 04.05.2015

Во всех промышленных дозиметрах на этом датчике корпус датчика замкнут на землю. На Вашей схеме этого нет. 

Дончанин
Offline
Зарегистрирован: 08.11.2017

А разве корпус не соединен с катодом?

Дончанин
Offline
Зарегистрирован: 08.11.2017

Столкнулся с такой проблемой. Для теста использую LCD 1602. При физическом его подключении работает все нормально. Прошивку делаю в Florog. Но если в программе подключаю дисплей и пытаюсь вывести на него информацию, то при старте ардуино возникает короткий сигнал зуммера (чего без этого не было) и счетчик считает раз в 10 реже. Убираю в программе дисплей, все работает нормально. Еще раз повторю, что физическое подключение дисплея никак не влияет. Почему такое может быть?

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C _lcd1(0x3F, 16, 2);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;

int _gtv1 = 0;
bool _count1I = 0;
unsigned long _count1_Value = 0UL;
int _disp1oldLength = 0;
void setup()
{
Wire.begin();
delay(10);
pinMode(2, INPUT_PULLUP); 
pinMode(7, OUTPUT); 
pinMode(5, OUTPUT); 

_lcd1.init();
_lcd1.backlight();
}
void loop()
{if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}





//Плата:1
digitalWrite(7,  (digitalRead (2)));
if ( (digitalRead (2))){
if ( ! _count1I) { 
_count1I = 1;
_count1_Value = _count1_Value + 1;
}} else {
_count1I = 0;}
_gtv1 = _count1_Value;
digitalWrite(5, !( (digitalRead (2))));
if (1) {
_dispTempLength1 = (((String(_gtv1, DEC)))).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(int((16 - _dispTempLength1)/2), 0);
_lcd1.print(((String(_gtv1, DEC))));
} else {
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;} 
}




}

 

Дончанин
Offline
Зарегистрирован: 08.11.2017

А так все работает

int _gtv1 = 0;
bool _count1I = 0;
unsigned long _count1_Value = 0UL;
void setup()
{
pinMode(2, INPUT_PULLUP); 
pinMode(7, OUTPUT); 
pinMode(5, OUTPUT); 

}
void loop()
{




//Плата:1
digitalWrite(7,  (digitalRead (2)));
if ( (digitalRead (2))){
if ( ! _count1I) { 
_count1I = 1;
_count1_Value = _count1_Value + 1;
}} else {
_count1I = 0;}
_gtv1 = _count1_Value;
digitalWrite(5, !( (digitalRead (2))));




}

 

Logik
Offline
Зарегистрирован: 05.08.2014

Так Вы же даже не в прерывании считаете импульсы! Вывод на дисплей занимает время, в течении которого импульсы и пропускаются. Решение - прерывания использовать.

См. http://arduino.ru/forum/programmirovanie/schetchik-geigera-arduino , может пригодится. Сейчас я еще экран олед 1,3дюйма доцепил.

 

Дончанин
Offline
Зарегистрирован: 08.11.2017

В общем, пока результата нет. Сам хочу поставить ОЛЕД дисплей, но с ЛСД уже просто дело принципа. Пробовал такой вариант, на дисплей вывожу просто счет секунд и все. Импульсы на дисплей не подаются, а детектируются звуком и светодиодом, в итоге счетчик считает пару импульсов. Удаляю дисплей все работает. Мистика. 

Потом сделал так: С пина 2 импульсы идут на вход генератора, который подает свои импульсы, условно 100 мсек, эти импульсы идут на выходы светодиода и динамика (буззер со своим генератором) и на переменную через счетчик. Результат тот же, пока дисплея нет, все пищит и светится, с дисплеем нет.

И еще загадка, почему с дисплеем при включении питания 1 раз пикает (около 1 сек) буззер, без дисплея не пикает вообще.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C _lcd1(0x3F, 16, 2);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;

int _gtv1 = 0;
bool _count1I = 0;
unsigned long _count1_Value = 0UL;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
int _disp1oldLength = 0;
void setup()
{
Wire.begin();
delay(10);
pinMode(2, INPUT_PULLUP); 
pinMode(7, OUTPUT); 
pinMode(5, OUTPUT); 

_lcd1.init();
_lcd1.backlight();
}
void loop()
{if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}





//Плата:1
if (!( (digitalRead (2)))) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
 if (_gen1I) {  if ( _isTimer ( _gen1P , 50 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
digitalWrite(7, !(_gen1O));
digitalWrite(5, _gen1O);
if (_gen1O){
if ( ! _count1I) { 
_count1I = 1;
_count1_Value = _count1_Value + 1;
}} else {
_count1I = 0;}
_gtv1 = _count1_Value;
if (1) {
_dispTempLength1 = (((String(_gtv1, DEC)))).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(int((16 - _dispTempLength1)/2), 0);
_lcd1.print(((String(_gtv1, DEC))));
} else {
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;} 
}




}
bool _isTimer(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }

 

Дончанин
Offline
Зарегистрирован: 08.11.2017

Может проблема типа этой.

https://forum.flprog.ru/viewtopic.php?t=2557

bwn
Offline
Зарегистрирован: 25.08.2014

Ох, почитали бы, вы, Ритчу с Керниганом, да писали по человечески. Попробуйте, легше будет.))))

Дончанин
Offline
Зарегистрирован: 08.11.2017

Ну, извините, как могу.

Logik
Offline
Зарегистрирован: 05.08.2014

Дончанин пишет:

 Мистика. 

 

И будет так дальше, если не хочешь читать что те пишут. Я ж те все обяснил выше. 

ПС. Оту херню из стр.62 убери нафиг пока тя здесь на тряпки не порвали. А лучше убери все с стр.58.

Дончанин
Offline
Зарегистрирован: 08.11.2017

Какие страницы? О чем ты???

Единственное, что я писал так это на странице 69 в теме "Делаем дозиметр".

А то что ты советовал помогло, но та чтобы разобраться надо время (мне по крайней мере). Теперь все прекрасно работает и совпадает с контрольным светодиодом, который подключен на через ардуино.

https://youtu.be/hrz-k3Gk4Zs

Теперь будем заниматься дальше...

Logik
Offline
Зарегистрирован: 05.08.2014

строки )) В коде. Твоем, что выше. С миллисом так не работают, на форуме уже столько раз это было, в поиск.

Дончанин
Offline
Зарегистрирован: 08.11.2017

Аааааа :) Так то не я писал, это Flprog. Наверное не корректно его код здесь выкладывать. 

Logik
Offline
Зарегистрирован: 05.08.2014

Там, смотри и с прерываниями все не так просто. Эти датчики имеют св-ва "звенеть", т.е. вместо одного импульса выдавать несколько. Это или аппаратно или программно надо учитывать. Правда звенят не все и не всегда.

Дончанин
Offline
Зарегистрирован: 08.11.2017

В Flprog, есть блок "скоростной счетчик" его используют для быстрого счета, тахометры например. Я использовал его, единственное что в нем настроил, это "удлинил" импульс до 10 мс. И все сработало. Конечно, совсем не исключаю, ошибок в измерении. Но на любительских "скоростях-частотах", должно пройти, не в реактор же мне с ним ходить. Когда соберу прибор, отнесу на калибровку по эталонам. Вот там, конечно и выясним...

Logik
Offline
Зарегистрирован: 05.08.2014

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

Дончанин
Offline
Зарегистрирован: 08.11.2017

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

Дончанин
Offline
Зарегистрирован: 08.11.2017

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

По прибору. Распечатан корпус из АБС пластика, экран дисплея дополнительно защитил, стеклышком от образцов для микроскопа (1мм), кнопка вкл/выкл и переключение экрана. Одно нажатие меняется страничка, второе гасит полностью, третье - опять первая страница.

Быстрый замер проводится благодаря стоковому массиву и обновляется каждые 6 сек. Средний замер считает все средние значения за все время работы прибора. Также считается общее время и накопленная доза радиации.

 

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