Трансформаторы никогда не мотал, что это значит? на схеме я так понял нарисована разная фазировка. Чтобы узнать ту что уже намотана надо вскрывать дроссель?
Ничего вскрывать не надо. Мотаете поверх первичку, подключаете, смотрите на результат. Если высокое недостаточное и накачка больше 400-500 имп. - попробуйте поменять местами концы первички.
Все-таки решил собрать ваш дозиметр. Немогу понять сколько ставить коэффициент делителя в скетче. Если 126.6М/220к = 575 почему в скетче он 420. скетч v1.06.
AleksBAM, по делителям смотрите этот пост. У автора собрано несколько версий дозиметра, и коэффициенты в скетче могли остаться от платы с другими номиналами делителя. После версии 1.06 с сайта автора форумчанами было сделано несколько багфиксов, поправленные версии ищите на предыдущих страницах этой ветки. Баги пока ещё есть)
Си3бг для запредельных уровней излучения, для бытового применения не подойдёт. Сбм20 не редкость, на вторичном рынке не столь уж дорого стоят.
"Не работает" - импульсов вообще нет?
Если высокое генерится с трудом - проверяйте транс, накопительный конденсатор, ключ накачки.
Самое простое - аккуратно припаяться к торцам датчика (естественно, не перегревая сам датчик). Можно использовать U-образные проволочные скобы, двумя концами впаяные в плату или держатели предохранителей под пайку. Так, например, реализовано в "Сталкере":
естественно скобы лучшее решение, я это и так уже раньше видел на фото. но где взять такие скобы, или как самому сделать? если бы была возможность купить в магазине такие скобы, я бы купил, но не видел нигде.
Подпаиваться к торцам (где припой) возможно? Или лучше к латуни?
Я бы паять не рискнул, лучше сделать какой-то другой крепеж. Вариантов масса и сделать несложно.
Согласен, но и сплав Розе (разбавление припоя) тоже имеет право на жизнь. Думаю локальный нагрев градусов в 150 он вполне перенесет. Изделие единичное, рассматривать экстремальные условия смысла нет. Про торец, не ясно, это просто припой или в том числе и заглушка для вакуум камеры.
естественно скобы лучшее решение, я это и так уже раньше видел на фото. но где взять такие скобы, или как самому сделать? если бы была возможность купить в магазине такие скобы, я бы купил, но не видел нигде.
Можно поискать в магазинах радиодеталей держатель предохранителя на плату. Я взял такие , отлично подошли.
В торцах припаяны выводы, уходящие в стеклянные заглушки счётчика приблизительно на уровне карболитовых изоляторов. Так что паяться можно) Минусовой вывод и вовсе соединён с корпусом, но к корпусу паяться или прилагать усилие не советую, чревато повреждением или разгерметизацией.
Что находится под колпачками можно увидеть на примере модели СБМ-20-1.
Проволочные скобы - кусок лужёного медного провода диаметром 0.2 - 0.6мм. Но для снятия счётчика скобы придётся отпаивать. Встречал также крепление в виде 3-6 витков провода вокруг колпачка, концы которого были скручены вместе и впаяны в плату.
В своём варианте припаял к торцам лужёные жилки от витухи и впаял в плату, с тех пор уже раз пять отпаивал-припаивал (тестировал другие СБМки и счётчики другого типа).
Под авторскую печатку - только у bodriy2014. Есть моя, но она отличается от авторской и под вышеуказанную печатку не подойдёт (хотя и была взята автором за исходник). Схемы в .jpg для сборки вполне достаточно.
Norsemen пишет:
Печатка ardosv1_01.lay6 файл от 16 октября это последняя версия?
Да. Но всё же я бы рекомендовал развести свою, эта версия изначально создавалась для отладки и имеет неоптимальное расположение элементов и слишком большие размеры. Ну и в ветке есть несколько версий печаток от других форумчан.
Norsemen пишет:
Я так понял она сделана tekagi.
Печатку делал bodriy2014. Я лишь убрал пару перемычек и вывел точки питания на край платы.
Norsemen пишет:
И немного не понял на этой печатке откуда берется минус на кнопки. Там вместо этого +через кондер 100n
С ардуиновского вывода gnd. Важный момент - ардуинки от разных производителей имеют разную распиновку, перед изготовлением печатки необходимо убедиться, что выбранная ардуинка совпадает по пинам.
Norsemen пишет:
И я так понял эта плата под самонамоточный трансформатор, а я собираюсь на дроссель доматывать.
Ну так плата в исходнике. Померить установочные размеры получившегося дросселя и скоректировать печатку.
Я новичок в ардуино и микроэлетронике. в прошлом году собрал рабочий аппарат для контактной сварки на ардуино, код мне помогли сделать. Подключил ардуино про мини к компу и пытался прошить 3 скетча. У всех вылетала ошибка eeprom_readS' was not declared in this scope. Причем скетч с контактной сварки (и другие) прекрасно прошивается на про мини, хотя изначально был для уны. Выкладываю полный код ошибки. Помогите пожалуйста разобраться что не так
Arduino: 1.6.12 (Windows 7), Плата:"Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)"
C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\admin\Documents\Arduino\libraries -fqbn=arduino:avr:pro:cpu=16MHzatmega328 -ide-version=10612 -build-path C:\Temp\arduino_build_964121 -warnings=none -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\admin\Documents\Arduino\libraries -fqbn=arduino:avr:pro:cpu=16MHzatmega328 -ide-version=10612 -build-path C:\Temp\arduino_build_964121 -warnings=none -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino
Using board 'pro' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
Using core 'arduino' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
Detecting libraries used...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "C:\Temp\arduino_build_964121\sketch\ARDOs_noSleep_v106.ino.cpp" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "C:\Temp\arduino_build_964121\sketch\ARDOs_noSleep_v106.ino.cpp" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Temp\arduino_build_964121\sketch\ARDOs_noSleep_v106.ino.cpp" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Temp\arduino_build_964121\sketch\gif.c" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph\DefaultFonts.c" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph\LCD5110_Graph.cpp" -o "nul"
Generating function prototypes...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Temp\arduino_build_964121\sketch\ARDOs_noSleep_v106.ino.cpp" -o "C:\Temp\arduino_build_964121\preproc\ctags_target_for_gcc_minus_e.cpp"
"C:\Program Files (x86)\Arduino\tools-builder\ctags\5.8-arduino10/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\Temp\arduino_build_964121\preproc\ctags_target_for_gcc_minus_e.cpp"
Компиляция скетча...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-gcc" -c -g -Os -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Temp\arduino_build_964121\sketch\gif.c" -o "C:\Temp\arduino_build_964121\sketch\gif.c.o"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Temp\arduino_build_964121\sketch\ARDOs_noSleep_v106.ino.cpp" -o "C:\Temp\arduino_build_964121\sketch\ARDOs_noSleep_v106.ino.cpp.o"
F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void setup()':
ARDOs_noSleep_v106:63: error: 'eeprom_readS' was not declared in this scope
ARDOs_noSleep_v106:64: error: 'eeprom_readD' was not declared in this scope
ARDOs_noSleep_v106:65: error: 'lcd_init' was not declared in this scope
ARDOs_noSleep_v106:66: error: 'Schet' was not declared in this scope
ARDOs_noSleep_v106:71: error: 'nakachka' was not declared in this scope
F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void loop()':
ARDOs_noSleep_v106:138: error: 'lcd_poisk' was not declared in this scope
ARDOs_noSleep_v106:139: error: 'poisk_f' was not declared in this scope
ARDOs_noSleep_v106:142: error: 'lcd_menu' was not declared in this scope
ARDOs_noSleep_v106:145: error: 'lcd_sys' was not declared in this scope
ARDOs_noSleep_v106:148: error: 'zamer_200s' was not declared in this scope
ARDOs_noSleep_v106:151: error: 'zamer_beta' was not declared in this scope
ARDOs_noSleep_v106:154: error: 'generator' was not declared in this scope
ARDOs_noSleep_v106:156: error: 'signa' was not declared in this scope
ARDOs_noSleep_v106:160: error: 'OK' was not declared in this scope
ARDOs_noSleep_v106:190: error: 'eeprom_wrS' was not declared in this scope
ARDOs_noSleep_v106:219: error: 'eeprom_wrD' was not declared in this scope
ARDOs_noSleep_v106:230: error: 'eeprom_wrS' was not declared in this scope
ARDOs_noSleep_v106:266: error: 'eeprom_wrS' was not declared in this scope
ARDOs_noSleep_v106:295: error: 'eeprom_wrD' was not declared in this scope
ARDOs_noSleep_v106:306: error: 'eeprom_wrS' was not declared in this scope
F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void zamer_200s()':
ARDOs_noSleep_v106:383: error: 'battery' was not declared in this scope
F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void lcd_poisk()':
ARDOs_noSleep_v106:463: error: 'time_d' was not declared in this scope
ARDOs_noSleep_v106:487: error: 'battery' was not declared in this scope
F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void lcd_sys()':
ARDOs_noSleep_v106:517: error: 'VCC_read' was not declared in this scope
ARDOs_noSleep_v106:518: error: 'speed_nakachka' was not declared in this scope
F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void zamer_beta()':
ARDOs_noSleep_v106:545: error: 'timer_soft' was not declared in this scope
ARDOs_noSleep_v106:551: error: 'battery' was not declared in this scope
F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void poisk_f()':
ARDOs_noSleep_v106:651: error: 'eeprom_wrD' was not declared in this scope
F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void generator()':
ARDOs_noSleep_v106:680: error: 'Read_HV' was not declared in this scope
F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void battery()':
ARDOs_noSleep_v106:713: error: 'VCC_read' was not declared in this scope
Используем библиотеку LCD5110_Graph в папке: C:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph (legacy)
Используем библиотеку EEPROM версии 2.0 из папки: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM
exit status 1
'eeprom_readS' was not declared in this scope
Судя по кракозябрам в логе, предположу, что мешают русские названия папок. Попробуйте переименовать или на время кинуть в другую папку. Вот такое "F:\электроника\дозиметры\РЅР° ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino" не хорошо
Решил повторить проект с голой атмегой 328, не пойму кварцем на какую частоту ее тактировать на 8 или 16мГц? На 16 она ведь не стабильно себя ведет при менее чем 5 Вольтах.
И на какой вход цеплять + аккумулятора для мониторинга напряжения? Цеплять напрямую или через резистор?
И подскажите кто где брал 1% резисторы для делителя в Украине? Может у кого в излишке и готов продать?
Большинство собравших использовало 16ти мегагерцевый вариант, особых глюков замечено не было. Можно и в соответствии с даташитом поставить 8 (соответственно при компилляции указать в ИДЕ 8М/3.3В), работать должно, но сложнее будет подобрать наиболее экономичный режим для преобразователя (получится удвоенный шаг при настройке длительности импульса накачки).
Мониторинг напряжения питания ведётся черезBANDGAP, выводы никуда цеплять не надо)
В однопроцентных резисторах тоже особого смысла нет, задача не столько измерить напряжение с точностью до вольта, сколько удержать его в пределах рабочего плато датчика. Тем более применённый делитель с накопительным конденсатором тоже вносит некую погрешность. Получившийся делитель можно откалибровать подбором коэффициентов в скетче, методика описана в данном топике.
Спасибо) А коэффициент делителя нужно где то с скетче править(я просто 0 в кодинге, только повторяю проэкты)? Сделал коэффициент строго как у автора- 470(он так сказал в видео). 102.2мОм к 217.4кОм.
По коэффициентам смотрите пост №786. Коэффициенты считаем исходя из применённого делителя, а не наоборот) Какие значения в делителе использовали - по тем и считайте.
Tekadi, подскажите пожалуйста, если в наличии есть гантелька на 10мГн с сопротивлением в 12.2 Ома ВВ часть можно собирать без умножителя?
Нет ли у Вас последней, как я понимаю версии1.6.2, со всеми правками от форумчан, от ImaSoft в частности? Тему осилил всю, но нашел только куски кода, всего скетча с багфиксами никто не выкладывал.
Tekadi, подскажите пожалуйста, если в наличии есть гантелька на 10мГн с сопротивлением в 12.2 Ома ВВ часть можно собирать без умножителя?
Пробуйте, должно завестись. С подобной гантелькой экспериментировал Medvedik, работало. Хотя я бы посоветовал гантельку поменьше размером, к примеру 6х8 при близком номинале индуктивности. Версию с умножителем собирать не советую, в свете последних изменений в скетче она может не заработать.
Dark-Dante пишет:
Нет ли у Вас последней, как я понимаю версии1.6.2, со всеми правками от форумчан, от ImaSoft в частности? Тему осилил всю, но нашел только куски кода, всего скетча с багфиксами никто не выкладывал.
Смотрите пост №871. Или 885, если возникнет проблема со входом в меню второго уровня. Правки от ImaSoft приенены пока не все. Код для ArduinoIDE берётся по кнопке в виде листа со стрелочками в правом верхнем углу портянки.
Спасибо! А удастся мне как то одно мегаомной дт-шкой измерить напряжение? Может через резистор в 10 мОм? ДТ-шка ище из первых, ей лет 15, измерил её сопротивление транзистор тестером- 1мОм.
Сомневаюсь, что преобразователь на фабричной гантельке вытянет подобную нагрузку. Можно попробовать добавить последовательно цепочку из 9ти резисторов по мегаому, и на время калибровки уменьшить дефайн ADC в скетче раза в 4 от расчётного, но это из области показаний плюс-минус лапоть. Измерять выставив мультиметр на максимальное значение постоянного напряжения.
Нашел небольшое несоответствие. В печатке коллектор BC547 соединяется на пин2 через 1 Ком. На схеме его нету. Надо ли ставить этот резистор?
А не наоборот ли на печатке кнопки? На сайте Srukami нарисована кнопка меню влево на 7 пин. На печатке вроде так и есть. Но , когда мы перевернем печатку, то это окажется вправо...?
Нашел небольшое несоответствие. В печатке коллектор BC547 соединяется на пин2 через 1 Ком. На схеме его нету. Надо ли ставить этот резистор?
Считайте этот резистор защитой пина ардуины. Работать будет и без него, ставить или нет - решайте сами.
Norsemen пишет:
А не наоборот ли на печатке кнопки? На сайте Srukami нарисована кнопка меню влево на 7 пин. На печатке вроде так и есть. Но , когда мы перевернем печатку, то это окажется вправо...?
Будьте внимательней при изготовлении печатки, запас стеклотекстолита вряд ли безлимитный)
А я вот уперся рогом в преобразователь высокого напряжения на отдельной микрухе MC34063, пока не доведу его до ума, дальше двигаться не буду. В настоящее время такой работает, работает четко, напряжение держит стабильно, ардуинку не отвлекает...но довольно много жрет, хотя это и не очень критично. Но хочу добиться комфортного режима.
А вот печатку для устройства вижу немного иначе. Вижу размер устройства чуть длиннее счетчика СБМ20, и чуть шире высоты дисплея Nokia, а в самом устройстве вижу два счетчика.
Так эта печатка делалась на скорую руку, только для отладки и проверки функционала. Повторяют её, как правило, начинающие, кто не хочет или не может создать свой вариант. Зато гарантировано рабочая.
Моя версия по размеру ещё больше, я на ней влепил и модуль еепром/ртц для логгера, а ардуинку влепил не отзеркалив... В результате ардуинка впаяна вверх ногами. Как функционал прошивки дойдёт до желаемого - буду делать более компактный вариант. Но, похоже, это будет не раньше, чем Бодрый вернётся к проекту.
Сейчас занимаюсь разводкой своей печатки на дискретных елементах с голой атмегой, как закончу, поделюсь.
Я разводил в изиЕДА печатку под стс-5 с про мини и олед дисплеем, довольно компактно получилось(110х40х20мм). Саму схему позже сделаю меньше, что бы можно было заказать плату с компонентами. а счетчик будет на корпусе крепиться
Корпус печатать не стал, ибо проект не закончен и хочется пару вещей доделать.
Одноплатную развязку не стал делать, бутербродом оказалось проще и компактнее. про мини хорошо ложится с СТС-5 и дисплеем. На фото видно то под ней размещены некоторые элементы, а под дисплеем мегаомные резисторы.
В умножителе вижу три конденсатора, но вего один диод.
Выкладывать стоит после проверки в железе. Часто подводные камни проявляются уже на этапе сборки, как в виде косяков проектирования, так и в нестабильной работе из-за взаимного влияния цепей...
Так и задумано, вместо одного конденсатора ставится диод если с умножителем, если нет, то место диода заменяется перемычкой, а на место конденсатора ставится диод) По проектированию косяков нет, ВВ часть отдельно от всего, сборка покажет что и как.
Я бы ещё железные подтяжки килоом по 10 предусмотрел. Как-то не доверяю внутренним pull-up. А устанавливать или нет - уже дело собирающих.
Девятнадцатый вывод в воздухе - светодиод индикции пойманных частиц решили не ставить? У Бодрого на сайте он не указан, поскольку используется встроенный в Ардуино светодиод на 13м пине. В полной схеме ещё была вибра через ключ на полевике на восьмом ардуиновском пине, но в коде её так и не задействовали.
Трансформаторы никогда не мотал, что это значит? на схеме я так понял нарисована разная фазировка. Чтобы узнать ту что уже намотана надо вскрывать дроссель?
Ничего вскрывать не надо. Мотаете поверх первичку, подключаете, смотрите на результат. Если высокое недостаточное и накачка больше 400-500 имп. - попробуйте поменять местами концы первички.
А есть у кого-нибудь файлы извлеченные , выложенные тут github.com/imaSoft/MyDosimetr_Pro_Mini-LCD5110-BCM20 с паролем в раровских архивах?
Добрый день.
Все-таки решил собрать ваш дозиметр. Немогу понять сколько ставить коэффициент делителя в скетче. Если 126.6М/220к = 575 почему в скетче он 420. скетч v1.06.
Подскажите!!!
AleksBAM, по делителям смотрите этот пост. У автора собрано несколько версий дозиметра, и коэффициенты в скетче могли остаться от платы с другими номиналами делителя. После версии 1.06 с сайта автора форумчанами было сделано несколько багфиксов, поправленные версии ищите на предыдущих страницах этой ветки. Баги пока ещё есть)
Сделал плату еле раскачал до 400В. И вохоже выяснил, что не работает счетчик-гейгера стс-5. Есть в наличии СИ3БГ его можно примудрить.
Си3бг для запредельных уровней излучения, для бытового применения не подойдёт. Сбм20 не редкость, на вторичном рынке не столь уж дорого стоят.
"Не работает" - импульсов вообще нет?
Если высокое генерится с трудом - проверяйте транс, накопительный конденсатор, ключ накачки.
А кто как держатель делал под сам датчик?
Самое простое - аккуратно припаяться к торцам датчика (естественно, не перегревая сам датчик). Можно использовать U-образные проволочные скобы, двумя концами впаяные в плату или держатели предохранителей под пайку. Так, например, реализовано в "Сталкере":
Самое простое - аккуратно припаяться к торцам датчика (естественно, не перегревая сам датчик).
Подпаиваться к торцам (где припой) возможно? Или лучше к латуни?
Подпаиваться к торцам (где припой) возможно? Или лучше к латуни?
естественно скобы лучшее решение, я это и так уже раньше видел на фото. но где взять такие скобы, или как самому сделать? если бы была возможность купить в магазине такие скобы, я бы купил, но не видел нигде.
Подпаиваться к торцам (где припой) возможно? Или лучше к латуни?
Согласен, но и сплав Розе (разбавление припоя) тоже имеет право на жизнь. Думаю локальный нагрев градусов в 150 он вполне перенесет. Изделие единичное, рассматривать экстремальные условия смысла нет. Про торец, не ясно, это просто припой или в том числе и заглушка для вакуум камеры.
естественно скобы лучшее решение, я это и так уже раньше видел на фото. но где взять такие скобы, или как самому сделать? если бы была возможность купить в магазине такие скобы, я бы купил, но не видел нигде.
Можно поискать в магазинах радиодеталей держатель предохранителя на плату. Я взял такие , отлично подошли.
В торцах припаяны выводы, уходящие в стеклянные заглушки счётчика приблизительно на уровне карболитовых изоляторов. Так что паяться можно) Минусовой вывод и вовсе соединён с корпусом, но к корпусу паяться или прилагать усилие не советую, чревато повреждением или разгерметизацией.
Что находится под колпачками можно увидеть на примере модели СБМ-20-1.
Проволочные скобы - кусок лужёного медного провода диаметром 0.2 - 0.6мм. Но для снятия счётчика скобы придётся отпаивать. Встречал также крепление в виде 3-6 витков провода вокруг колпачка, концы которого были скручены вместе и впаяны в плату.
В своём варианте припаял к торцам лужёные жилки от витухи и впаял в плату, с тех пор уже раз пять отпаивал-припаивал (тестировал другие СБМки и счётчики другого типа).
Варианты крепления под пайку:
Что под плюсовым колпачком:
Подтверждаю) Можно ещё и такие https://www.chipdip.ru/product/fh-103
и вообще, измерив диаметр колпачка, или взяв с собой СБМ-20, отправиться в ближайший радиомагазин)
А есть у кого-нибудь полная схема в spl7 ?
Печатка ardosv1_01.lay6 файл от 16 октября это последняя версия? Я так понял она сделана tekagi.
И немного не понял на этой печатке откуда берется минус на кнопки. Там вместо этого +через кондер 100n
И я так понял эта плата под самонамоточный трансформатор, а я собираюсь на дроссель доматывать.
А есть у кого-нибудь полная схема в spl7 ?
Под авторскую печатку - только у bodriy2014. Есть моя, но она отличается от авторской и под вышеуказанную печатку не подойдёт (хотя и была взята автором за исходник). Схемы в .jpg для сборки вполне достаточно.
Печатка ardosv1_01.lay6 файл от 16 октября это последняя версия?
Да. Но всё же я бы рекомендовал развести свою, эта версия изначально создавалась для отладки и имеет неоптимальное расположение элементов и слишком большие размеры. Ну и в ветке есть несколько версий печаток от других форумчан.
Я так понял она сделана tekagi.
Печатку делал bodriy2014. Я лишь убрал пару перемычек и вывел точки питания на край платы.
И немного не понял на этой печатке откуда берется минус на кнопки. Там вместо этого +через кондер 100n
С ардуиновского вывода gnd. Важный момент - ардуинки от разных производителей имеют разную распиновку, перед изготовлением печатки необходимо убедиться, что выбранная ардуинка совпадает по пинам.
И я так понял эта плата под самонамоточный трансформатор, а я собираюсь на дроссель доматывать.
Ну так плата в исходнике. Померить установочные размеры получившегося дросселя и скоректировать печатку.
Здравствуйте!
Я новичок в ардуино и микроэлетронике. в прошлом году собрал рабочий аппарат для контактной сварки на ардуино, код мне помогли сделать. Подключил ардуино про мини к компу и пытался прошить 3 скетча. У всех вылетала ошибка eeprom_readS' was not declared in this scope. Причем скетч с контактной сварки (и другие) прекрасно прошивается на про мини, хотя изначально был для уны. Выкладываю полный код ошибки. Помогите пожалуйста разобраться что не так
Судя по кракозябрам в логе, предположу, что мешают русские названия папок. Попробуйте переименовать или на время кинуть в другую папку. Вот такое "
F:\электроника\дозиметры\РЅР° ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino" не хорошоЯ бы ещё посоветовал обновить ArduinoIDE до текущей версии. Иначе со встроенной библиотекой задержки проблемы вылезут.
Вы правы! не знаю что помогло. Спасибо!
а ведь мог и сам додуматься)
Решил повторить проект с голой атмегой 328, не пойму кварцем на какую частоту ее тактировать на 8 или 16мГц? На 16 она ведь не стабильно себя ведет при менее чем 5 Вольтах.
И на какой вход цеплять + аккумулятора для мониторинга напряжения? Цеплять напрямую или через резистор?
И подскажите кто где брал 1% резисторы для делителя в Украине? Может у кого в излишке и готов продать?
Нормально она на 16 мегагерцах жывёт)
https://www.chipdip.ru/product/atmega328-au и питание у неё 1,8-5,5 вольт)
Спасибо) А коэффициент делителя нужно где то с скетче править(я просто 0 в кодинге, только повторяю проэкты)? Сделал коэффициент строго как у автора- 470(он так сказал в видео). 102.2мОм к 217.4кОм.
Уже увидел, отбой, пытаюсь прочесть всю тему.
По коэффициентам смотрите пост №786. Коэффициенты считаем исходя из применённого делителя, а не наоборот) Какие значения в делителе использовали - по тем и считайте.
Tekadi, подскажите пожалуйста, если в наличии есть гантелька на 10мГн с сопротивлением в 12.2 Ома ВВ часть можно собирать без умножителя?
Нет ли у Вас последней, как я понимаю версии1.6.2, со всеми правками от форумчан, от ImaSoft в частности? Тему осилил всю, но нашел только куски кода, всего скетча с багфиксами никто не выкладывал.
Tekadi, подскажите пожалуйста, если в наличии есть гантелька на 10мГн с сопротивлением в 12.2 Ома ВВ часть можно собирать без умножителя?
Пробуйте, должно завестись. С подобной гантелькой экспериментировал Medvedik, работало. Хотя я бы посоветовал гантельку поменьше размером, к примеру 6х8 при близком номинале индуктивности. Версию с умножителем собирать не советую, в свете последних изменений в скетче она может не заработать.
Нет ли у Вас последней, как я понимаю версии1.6.2, со всеми правками от форумчан, от ImaSoft в частности? Тему осилил всю, но нашел только куски кода, всего скетча с багфиксами никто не выкладывал.
Смотрите пост №871. Или 885, если возникнет проблема со входом в меню второго уровня. Правки от ImaSoft приенены пока не все. Код для ArduinoIDE берётся по кнопке в виде листа со стрелочками в правом верхнем углу портянки.
Спасибо! А удастся мне как то одно мегаомной дт-шкой измерить напряжение? Может через резистор в 10 мОм? ДТ-шка ище из первых, ей лет 15, измерил её сопротивление транзистор тестером- 1мОм.
Сомневаюсь, что преобразователь на фабричной гантельке вытянет подобную нагрузку. Можно попробовать добавить последовательно цепочку из 9ти резисторов по мегаому, и на время калибровки уменьшить дефайн ADC в скетче раза в 4 от расчётного, но это из области показаний плюс-минус лапоть. Измерять выставив мультиметр на максимальное значение постоянного напряжения.
Понял, одолжу на вчер флюк у знакомого.
Скетч под голую мегу 328 в ДИП и синий дисплей, порт А6 переназначен на А5, плюс все правки с темы от ImaSoft http://arduino.ru/forum/proekty/delaem-dozimetr?page=12#comment-295667 и tekagi
А где время счета под СТС-5 прописать?
/* ArDOs v1.063.3 ***IDE Arduino 1.8.2 */ #include <util/delay.h> //уже есть #include <EEPROM.h>//уже есть #include <LCD5110_Graph.h>//нужно установить //настройки /////////////начало LCD5110 myGLCD(A1, A0, 12, 10, 11); //подключение дисплея //LCD5110 myGLCD(12, 11, 10, A4, A5); //подключение дисплея #define contrast 60 //контрастность дисплея //#define buzzer_active //если используется активный бузер (со встроенным генератором), управляемый транзистором с выхода 6, то раскомментировать эту строчку, если пассивный (с усилителем или без) - оставить закомментированой. #define first_alarm_duration 7000 //длительность сигнала тревоги при превышении первого аварийного порога в миллисекундах byte treviga_1 = 30; //первая ступень тревоги byte treviga_2 = 60; //вторая ступень тревоги byte del_BUZZ = 11;//длительность одиночного сигнала //byte ton_BUZZ = 11; //тональность буззера #define ADC 198 //значение АЦП при котором 400В с учетом вашего делителя напряжения (0..255) #define k_delitel 472 //коефициент дельтеля напряжения, зависит от вашего делителя. byte puls = 2; //тонкая настройка длинны импульса высоковольтного транса byte scrin_GRAF = 1; //скорость построения графика в секундах bool buzz_ON = 1; //включить индикацию бузером (1) bool podsvetka = 0; //подсветка bool alarm_sound = 1; //флаг индикации превышения порога звуком bool son_OK = 0; //разрешение или запрет сна float opornoe = 1.10; //делить на opornoe/10 #define son_t 40 //время засыпания в секундах #define save_DOZ 20 //как часто сохранять накопленную дозу например каждые 20мкР byte beta_time = 5; //время замера бета излучения //настройки //////////////конец //служебные переменные extern uint8_t SmallFont[], MediumNumbers[], TinyFont[]; extern uint8_t logo_bat[], logo_rag[], logo_tr[], gif_chast_1[], gif_chast_2[]; volatile int shet = 0; unsigned long t_milis = 0, gr_milis = 0, lcd_milis = 0, toch_milis = 0, timer_mil = 0; unsigned long alarm_milis = 0; //для отсчёта длительности сигнала тревоги по превышению порога unsigned long spNAK_milis = 0, time_doza = 0, bat_mill = 0; int hv_adc, hv_400, shet_s = 0, fon = 0, shet_gr = 0, shet_n = 0; int speed_nakT = 0, speed_nak = 0, time_sh_l = 0, MIN, HOUR, result; int doza_vr = 0, val_dr_pr = 0, val_dr_OK = 0; byte mass_p[84], mass_toch[201], m = 0, n_menu = 0, sys_menu = 0, mass_36[41]; byte val_kl = 0, val_ok = 0, menu = 0, zam_180p = 0, zam_36p = 0, gif_x = 0; byte sek = 0, minute = 0, bet_z = 0, gotovo = 0; int bet_z0 = 0, bet_z1 = 0, bet_r = 0; float VCC = 0.0, doz_v = 0.0, stat_percent = 99.0; bool tr = 0, poisk = 1, fonarik = 0, g_fl = 0, toch; //------------------------------------------------------------- void setup() { //Serial.begin(19200); ACSR |= 1 << ACD; //отключаем компаратор //ADCSRA &= ~(1 << ADEN); // отключаем АЦП, pinMode(3, INPUT_PULLUP); //кнопка pinMode(4, INPUT_PULLUP); //кнопка pinMode(7, INPUT_PULLUP); //кнопка DDRB |= (0 << 0); PORTB &= ~(1 << 0); //пин пустой 8 DDRC |= (0 << 4); PORTC &= ~(1 << 4); //пин пустой А4 DDRC |= (0 << 5); PORTC &= ~(1 << 5); //пин пустой А5 DDRB |= (1 << 1);//пин фонаря DDRC |= (1 << 3);//A3 дисплей GND DDRC |= (1 << 2);//A2 дисплей Light PORTC &= ~(1 << 3); //A3 дисплей GND PORTC &= ~(1 << 2); //A2 дисплей Light eeprom_readS (); eeprom_readD (); lcd_init(); attachInterrupt(0, Schet, FALLING);//прерываниям пин 2 DDRB |= (1 << 5); //пины на выход DDRD |= (1 << 5); DDRD |= (1 << 6); DDRD |= (1 << 6);//пин бузера nakachka(); } //------------------------------------------------------------- void loop() { if (menu == 0) { if (!(PIND & (1 << PIND7))) { //нажатие <<< _delay_ms(500);//антидребезг menu = 3; shet = 0; zam_180p = 0; fon = 0; stat_percent = 99.0; if (!(PIND & (1 << PIND7))) {//нажатие <<< фонарик val_kl++; if (val_kl == 6) { val_kl = 0; fonarik = !fonarik; } } } if (!(PIND & (1 << PIND4))) { //нажатие >>> _delay_ms(500);//антидребезг menu = 4; shet = 0; bet_z0 = 0; bet_z1 = 0; bet_r = 0; bet_z = 0; gotovo = 0; sek = 0; minute = 0; if (!(PIND & (1 << PIND7))) {//нажатие <<< фонарик val_kl++; if (val_kl == 6) { val_kl = 0; fonarik = !fonarik; } } } } if (menu == 4) { if (!(PIND & (1 << PIND4))) { //нажатие >>> _delay_ms(500);//антидребезг menu = 0; shet = 0; stat_percent = 99.0; if (!(PIND & (1 << PIND7))) {//нажатие <<< фонарик val_kl++; if (val_kl == 6) { val_kl = 0; fonarik = !fonarik; } } } } if (fonarik == 0) { //фонарик PORTB &= ~(1 << 1);//пин фонаря } else if (fonarik == 1) { PORTB |= (1 << 1);//пин фонаря } if (podsvetka == 1) { PORTC |= (1 << 2); //A2 дисплей Light } if (podsvetka == 0) { PORTC &= ~(1 << 2); //A2 дисплей Light } if (millis() - lcd_milis >= 300) { //скорость отрисоаки дисплея lcd_milis = millis(); if (menu == 0) { lcd_poisk();//вывод на дисплей режима поиск poisk_f(); } if (menu == 1) { lcd_menu();//вывод на дисплей меню poisk_f(); } if (menu == 2) { lcd_sys();//вывод на дисплей системного меню poisk_f(); } if (menu == 3) { zamer_200s();//вывод на дисплей замер 180сек } if (menu == 4) { zamer_beta(); } } generator();//накачка по обратной связи с АЦП if (shet_s != shet) { signa ();//подача сигнала о частичке } if (!(PIND & (1 << PIND3))) { //нажатие ок _delay_ms(500);//антидребезг OK(); } if (menu == 1) { if (!(PIND & (1 << PIND4))) { //нажатие >>> _delay_ms(500);//антидребезг if (n_menu == 0) { treviga_1++; } if (n_menu == 1) { treviga_2++; } if (n_menu == 2) { podsvetka = !podsvetka; } if (n_menu == 3) { son_OK = !son_OK; } if (n_menu == 4) { scrin_GRAF++; if (scrin_GRAF > 10) { scrin_GRAF = 1; } } if (n_menu == 5) { buzz_ON = !buzz_ON; } if (n_menu == 6) { menu = 0; } if (n_menu == 7) { eeprom_wrS (); menu = 0; } } } if (menu == 2) { if (!(PIND & (1 << PIND4))) { //нажатие >>> _delay_ms(500);//антидребезг if (sys_menu == 0) { opornoe = opornoe + 0.01; if (opornoe < 0.98) { opornoe = 1.20; } if (opornoe > 1.20) { opornoe = 0.98; } } if (sys_menu == 1) { puls++; if (puls < 1) { puls = 200; } if (puls > 200) { puls = 1; } } if (sys_menu == 2) { time_doza = 0;//сброс накопленной дозы doz_v = 0;//сброс накопленной дозы eeprom_wrD (); myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.print("SBROS OK", CENTER, 24); myGLCD.update(); _delay_ms(1000); } if (sys_menu == 3) { menu = 0; } if (sys_menu == 4) { eeprom_wrS (); menu = 0; } if (sys_menu == 5) { beta_time++; } } } if (menu == 1) { if (!(PIND & (1 << PIND7))) { //нажатие <<< _delay_ms(500);//антидребезг if (n_menu == 0) { treviga_1--; } if (n_menu == 1) { treviga_2--; } if (n_menu == 2) { podsvetka = !podsvetka; } if (n_menu == 3) { son_OK = !son_OK; } if (n_menu == 4) { scrin_GRAF--; if (scrin_GRAF < 1) { scrin_GRAF = 10; } } if (n_menu == 5) { buzz_ON = !buzz_ON; } if (n_menu == 6) { menu = 0; } if (n_menu == 7) { eeprom_wrS (); menu = 0; } } } if (menu == 2) { if (!(PIND & (1 << PIND7))) { //нажатие <<< _delay_ms(500);//антидребезг if (sys_menu == 0) { opornoe = opornoe - 0.01; if (opornoe < 0.98) { opornoe = 1.20; } if (opornoe > 1.20) { opornoe = 0.98; } } if (sys_menu == 1) { puls--; if (puls < 1) { puls = 200; } if (puls > 200) { puls = 1; } } if (sys_menu == 2) { time_doza = 0;//сброс накопленной дозы doz_v = 0;//сброс накопленной дозы eeprom_wrD (); myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.print("SBROS OK", CENTER, 24); myGLCD.update(); _delay_ms(1000); } if (sys_menu == 3) { menu = 0; } if (sys_menu == 4) { eeprom_wrS (); menu = 0; } if (sys_menu == 5) { beta_time--; } } } if (!tr && alarm_sound) // если фон ниже порога тревоги, но сигнал тревоги ещё не выключен { res_first_alarm(); //сбрасываем сигнал тревоги } } //------------------------------------------------------------- void OK () { //нажатие ОК if (!(PIND & (1 << PIND3))) { //удержаиние OK val_ok++; if (val_ok >= 2) { val_ok = 0; menu = 2; } } if (menu == 2) { sys_menu++; if (sys_menu > 5) { sys_menu = 0; } } if (menu == 1) { n_menu++; if (n_menu > 7) { n_menu = 0; } } if (menu == 0) { menu = 1; } if (menu == 3) { menu = 1; } } //-------------------------------------------------------------- void gif_nabor() { myGLCD.drawLine(0, 24, 84, 24); myGLCD.drawLine(0, 38, 84, 38); for (int i = 83 - zam_180p * 0.47; i < 84; i++) { myGLCD.drawLine(i, 24, i, 38); } g_fl = !g_fl; if (g_fl == 0) { myGLCD.drawBitmap(gif_x, 27, gif_chast_1, 8, 8); } else { myGLCD.drawBitmap(gif_x, 27, gif_chast_2, 8, 8); } if (zam_180p < 200) { gif_x = gif_x + 1; if (gif_x >= 83 - zam_180p * 0.47) { gif_x = 0; } myGLCD.print("ANALIZ", CENTER, 40); } if (zam_180p >= 200) { myGLCD.print("OBNOVLENIE", CENTER, 40); } } //-------------------------------------------------------------- void zamer_200s() { myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.print("%", 20, 0); myGLCD.printNumF(stat_percent, 1, 26, 0); myGLCD.setFont(MediumNumbers); if (alarm_sound) //сбрасываем сигнал тревоги первого уровня, если активен { res_first_alarm(); //сбрасываем сигнал тревоги } if (fon > 0) { if (fon >= 1000) { myGLCD.printNumI(fon, LEFT, 7); } if (fon < 1000) { myGLCD.printNumI(fon, CENTER, 7); } } myGLCD.setFont(SmallFont); myGLCD.print("uR/h", RIGHT, 12); gif_nabor(); battery(); myGLCD.update(); if (millis() - toch_milis >= 1000) { toch_milis = millis(); for (int i = 0; i < 200; i++) { //сдвигаем mass_toch[i] = mass_toch[i + 1]; } mass_toch[199] = shet; shet = 0; if (zam_180p < 200) { //первый набор массива zam_180p++; int fon_vr1 = 0; for (int i = 200 - zam_180p; i < 200; i++) { fon_vr1 = fon_vr1 + mass_toch[i]; } fon = fon_vr1 * (40.0 / zam_180p); } if (zam_180p >= 200) { //набор массива int fon_vr1 = 0; for (int i = 0; i < 200; i++) { fon_vr1 = fon_vr1 + mass_toch[i]; } fon = fon_vr1 / 5; } if (zam_180p <= 36) { stat_percent = stat_percent - 2.0; } if (zam_180p > 36 && zam_180p <= 72) { stat_percent = stat_percent - 0.3; } if (zam_180p > 72 && zam_180p <= 100) { stat_percent = stat_percent - 0.2; } if (zam_180p > 100 && zam_180p <= 200) { stat_percent = stat_percent - 0.1; } if (stat_percent < 5) { stat_percent = 5.0; } } if (!(PIND & (1 << PIND7))) { //нажатие <<< _delay_ms(500);//антидребезг menu = 0; shet = 0; fon = 0; zam_36p = 0; for (int i = 0; i < 18; i++) { //чистим mass_36[i] = 0; } if (!(PIND & (1 << PIND7))) {//нажатие <<< фонарик val_kl++; if (val_kl == 6) { val_kl = 0; fonarik = !fonarik; } } } } //-------------------------------------------------------------- void lcd_poisk() {//вывод на дисплей режима поиск if (shet < treviga_1 && fon < treviga_1) {//проверяем тревогу tr = 0; } if (shet > treviga_1 || fon > treviga_1) {//проверяем тревогу check_alarm_signal(); // устанавливаем сигнал непрерывной тревоги, если "tr" переключился в "1" tr = 1; } myGLCD.clrScr(); myGLCD.setFont(SmallFont); if (tr == 1) { //опасно myGLCD.drawBitmap(0, 0, logo_tr, 24, 8); } myGLCD.print("%", 20, 0); myGLCD.printNumF(100 - (zam_36p * 2.0), 1, 26, 0); myGLCD.setFont(MediumNumbers); if (fon > 0) { if (fon >= 1000) { myGLCD.printNumI(fon, LEFT, 7); } if (fon < 1000) { myGLCD.printNumI(fon, CENTER, 7); } } myGLCD.setFont(SmallFont); myGLCD.print("uR/h", RIGHT, 12); time_d(); myGLCD.setFont(TinyFont); myGLCD.printNumI(HOUR, 0, 26); if (HOUR < 9) {myGLCD.print("h", 4, 26);myGLCD.printNumI(MIN, 12, 26); if (MIN < 9) {myGLCD.print("m", 16, 26);} else {myGLCD.print("m", 20, 26);} } else {if ((HOUR > 9) && (HOUR < 99)) {myGLCD.print("h", 8, 26);myGLCD.printNumI(MIN, 16, 26); if (MIN < 9) {myGLCD.print("m", 20, 26);} else {myGLCD.print("m", 24, 26);} } else {myGLCD.print("h", 12, 26);myGLCD.printNumI(MIN, 20, 26); if (MIN < 9) {myGLCD.print("m", 24, 26);} else {myGLCD.print("m", 28, 26);} } } myGLCD.setFont(SmallFont); if (doz_v < 1000) { myGLCD.printNumF(doz_v, 1, 41, 24); myGLCD.print("uR", RIGHT, 24); } if (doz_v >= 1000) { myGLCD.printNumF(doz_v / 1000.0, 2, 41, 24); myGLCD.print("mR", RIGHT, 24); } myGLCD.drawLine(0, 32, 83, 32);//верхняя battery(); for (int i = 0; i < 82; i ++) { //печатаем график if (mass_p[i] > 0) { if (mass_p[i] <= 15) { myGLCD.drawLine(i + 1, 47, i + 1, 47 - mass_p[i]); } if (mass_p[i] > 15) { myGLCD.drawLine(i + 1, 47, i + 1, 47 - 15); } } } myGLCD.update(); } //------------------------------------------------------------- void lcd_menu() { //вывод на дисплей меню myGLCD.clrScr(); myGLCD.setFont(TinyFont); myGLCD.print("OPASN.1", 0, 0); myGLCD.printNumI(treviga_1, CENTER, 0); myGLCD.print("uR/h", RIGHT, 0); myGLCD.print("OPASN.2", 0, 6); myGLCD.printNumI(treviga_2, CENTER, 6); myGLCD.print("uR/h", RIGHT, 6); myGLCD.print("PODSV.", 0, 12); myGLCD.printNumI(podsvetka, CENTER, 12); myGLCD.print("------", 0, 18); myGLCD.printNumI(son_OK, CENTER, 18); myGLCD.print("on/off", RIGHT, 18);//usr myGLCD.print("POISK.", 0, 24); myGLCD.printNumI(scrin_GRAF, CENTER, 24); myGLCD.print("SEK", RIGHT, 24); myGLCD.print("ZVUK", 0, 30); myGLCD.printNumI(buzz_ON, CENTER, 30); myGLCD.print("OUT", 0, 36); myGLCD.print("SAVE", 0, 42); myGLCD.print(">", 30, n_menu * 6); myGLCD.update(); } //------------------------------------------------------------- void lcd_sys() { //вывод на дисплей меню VCC_read(); speed_nakachka ();//скорость накачки имлульсы/сек myGLCD.clrScr(); myGLCD.setFont(TinyFont); myGLCD.print("OPORN", 0, 0); myGLCD.printNumF(opornoe, 2, CENTER, 0); myGLCD.print("VCC", 55, 0); myGLCD.printNumF(VCC, 2, RIGHT, 0); hv_400 = hv_adc * opornoe * k_delitel / 255; //считем высокео перед выводом myGLCD.print("NAKAH", 0, 6); myGLCD.printNumI(puls, CENTER, 6); myGLCD.printNumI(hv_400, RIGHT, 6); myGLCD.print("DOZA", 0, 12); myGLCD.print(">>", CENTER, 12); myGLCD.print("SBROS", RIGHT, 12); myGLCD.print("OUT", 0, 18); myGLCD.print("SAVE", 0, 24); myGLCD.print("BETA", 0, 30); myGLCD.printNumI(beta_time, CENTER, 30); myGLCD.print("MIN", RIGHT, 30); myGLCD.print(">", 30, sys_menu * 6); myGLCD.print("SPEED N", 0, 40); myGLCD.printNumI(speed_nak, CENTER, 40); myGLCD.print("imp/sek", RIGHT, 40); myGLCD.update(); } //------------------------------------------------------------- void zamer_beta() {// замер бета или продуктов if (gotovo == 0) { if (!(PIND & (1 << PIND3))) { //нажатие OK gotovo = 1; switch (bet_z) //проверяем, находимся ли в первом или втором замере { case 0: //если в первом замере bet_z0 = 0; //обнуляем текущие показания замера 1 shet = 0; //обнуляем счёт case 1: //если во втором замере bet_z1 = 0; //обнуляем текущие показания замера 2 shet = 0; //обнуляем счёт } } if (alarm_sound) //если активен сигнал тревоги первого уровня { res_first_alarm(); //сбрасываем сигнал тревоги } myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.print("Zamer ", 20, 10); myGLCD.printNumI(bet_z, 55, 10); myGLCD.print("nagmi OK", CENTER, 20); myGLCD.update(); } if (gotovo == 1) { timer_soft(); byte otsup = 0; if (minute > 9) { otsup = 5; } myGLCD.clrScr(); battery(); myGLCD.setFont(TinyFont); myGLCD.printNumI(minute, LEFT, 0); if (toch == 0) { myGLCD.print(":", 5 + otsup, 0); } else { myGLCD.print(" ", 5 + otsup, 0); } myGLCD.printNumI(sek, 10 + otsup, 0); myGLCD.print("time", 23 + otsup, 0); myGLCD.drawLine(0, 8, 83, 8); myGLCD.setFont(SmallFont); myGLCD.drawLine(40, 8, 40, 28); myGLCD.print("Zamer0", LEFT, 10); myGLCD.print("Zamer1", RIGHT, 10); myGLCD.printNumI(bet_z0, LEFT, 20); myGLCD.printNumI(bet_z1, RIGHT, 20); myGLCD.drawLine(0, 28, 83, 28); if (bet_z < 2) { myGLCD.print("Idet zamer", CENTER, 30); myGLCD.printNumI(bet_z, RIGHT, 30); myGLCD.printNumI(bet_r, CENTER, 38); } if (bet_z == 2) { myGLCD.print("Rezultat", CENTER, 30); myGLCD.printNumI(bet_r, CENTER, 38); myGLCD.print("mkR/h", RIGHT, 38); } myGLCD.update(); if (bet_z == 0) { //первый замер bet_z0 = bet_z0 + shet; shet = 0; if (minute >= beta_time) { bet_z = 1; sek = 0; minute = 0; gotovo = 0; tone (6,2000,70); //генерим писк 2000Гц 70миллисекунд на 6й ноге } } if (bet_z == 1) { //второй замер bet_z1 = bet_z1 + shet; shet = 0; if (minute >= beta_time) { bet_z = 2; sek = 0; minute = 0; tone (6,2000,70); //генерим писк 2000Гц 70миллисекунд на 6й ноге } } if (bet_z == 2) { //результат bet_r = bet_z1 - bet_z0; bet_r = bet_r / (1.5 * beta_time); } } if (!(PIND & (1 << PIND4))) { //нажатие >>> _delay_ms(500);//антидребезг menu = 0; shet = 0; fon = 0; zam_36p = 0; for (int i = 0; i < 18; i++) { //чистим mass_36[i] = 0; } } } //------------------------------------------------------------- void poisk_f() {//режим поиска if (poisk == 1) { if (millis() - gr_milis >= scrin_GRAF * 1000) { //счет для графика gr_milis = millis(); val_ok = 0;//сброс удержания системного меню shet_gr = shet - shet_n; if (shet_gr < 0) { shet_gr = 1; } mass_p[m] = shet_gr ; shet_n = shet; if (m < 82) { m++; } if (m == 82) { for (int i = 0; i < 83; i++) { mass_p[i] = mass_p[i + 1]; } mass_p[82] = shet_gr; } } if (millis() - toch_milis >= 1000) { toch_milis = millis(); for (int i = 0; i < 40; i++) { //сдвигаем mass_36[i] = mass_36[i + 1]; } mass_36[40] = shet; if (zam_36p < 40) { //первый набор массива zam_36p++; fon = fon + shet; } if (zam_36p >= 40) { //набор массива int fon_vr1 = 0; for (int i = 0; i < 40; i++) { fon_vr1 = fon_vr1 + mass_36[i]; } fon = fon_vr1; } shet = 0; doz_v = doz_v + fon / 100.0 / 40.0; if (time_doza < 3599940/*999h59m*/) {time_doza ++;} if (doz_v - doza_vr >= save_DOZ) { //а не пора ли сохранить дозу ?) eeprom_wrD (); doza_vr = doz_v; } } } } //------------------------------------------------------------- void signa () { //индикация каждой частички звуком светом shet_s = shet; if (alarm_sound) //если поднят флаг аварийного сигнала { #ifdef buzzer_active //если задефайнен активный бузер PORTD |= (1 << 6); // включаем непрерывный сигнал тревоги #else //пассивный tone (6, 1300); //генерим писк с частотой 1300Гц (значение можно изменить на своё) на пине 6 #endif if ((millis() - alarm_milis) > first_alarm_duration) // проверяем, не истекло ли время подачи сигнала тревоги_ { #ifdef buzzer_active //если задефайнен активный бузер PORTD &= ~(1 << 6); // выключаем непрерывный сигнал тревоги #else //пассивный бузер noTone (6); //выключаем писк на 6й ноге #endif alarm_sound = 0; // сбрасываем флаг сигнала тревоги } PORTB |= (1 << 5); //включаем светодиод delay(del_BUZZ); PORTB &= ~(1 << 5);//выключаем светодиод } else //если флаг сигнала тревоги не поднят, генерим одиночные сигналы, озвучивающие пойманные частицы { if ((buzz_ON == 1) && (shet_s > 0)) //включаем бузер #ifdef buzzer_active //если задефайнен активный бузер { PORTB |= (1 << 5); //включаем светодиод PORTD |= (1 << 6); //включаем бузер delay(del_BUZZ); //длительность одиночного сигнала PORTD &= ~(1 << 6); //выключаем бузер PORTB &= ~(1 << 5); //выключаем светодиод } #else //пассивный бузер { PORTB |= (1 << 5); //включаем светодиод tone (6,1000,30); //генерим писк 1000Гц 30миллисекунд на 6й ноге delay(del_BUZZ);//длительность одиночного сигнала PORTB &= ~(1 << 5);//выключаем светодиод } #endif } //generator();//накачка по обратной связи с АЦП } //------------------------------------------------------------- void Schet() { //прерывание от счетчика на пин 2 shet++; } //------------------------------------------------------------- void generator() {//накачка по обратной связи с АЦП hv_adc = Read_HV(); if (hv_adc < ADC) { //Значение АЦП при котором на выходе 400В int c = puls; PORTD |= (1 << 5); //пин накачки while (c > 0) { asm("nop"); c--; } PORTD &= ~(1 << 5);//пин накачки speed_nakT++; } } //------------------------------------------------------------- byte Read_HV () { ADCSRA = 0b11100111; ADMUX = 0b11100101;//выбор внутреннего опорного 1,1В и А6 for (int i = 0; i < 10; i++) { while ((ADCSRA & 0x10) == 0); ADCSRA |= 0x10; } result = 0; for (int i = 0; i < 10; i++) { while ((ADCSRA & 0x10) == 0); ADCSRA |= 0x10; result += ADCH; } result /= 10; return result; } //------------------------------------------------------------- void battery() { //батарейка if (bat_mill - millis() > 2000) { bat_mill = millis(); VCC_read(); } myGLCD.drawBitmap(59, 0, logo_bat, 24, 8); myGLCD.setFont(TinyFont); myGLCD.printNumF(VCC, 2, 63, 2); } //------------------------------------------------------------- void VCC_read() { // Чтение напряжения батареи ADCSRA = 0b11100111; ADMUX = 0b01101110;//Выбор внешнего опорного+BG _delay_ms(5); while ((ADCSRA & 0x10) == 0); ADCSRA |= 0x10; byte resu = ADCH; //ADCSRA &= ~(1 << ADEN); // отключаем АЦП, VCC = (opornoe * 255.0) / resu; } //------------------------------------------------------------- void lcd_init() { myGLCD.InitLCD(); myGLCD.setContrast(contrast); myGLCD.clrScr(); myGLCD.drawBitmap(0, 0, logo_rag, 84, 48); myGLCD.setFont(SmallFont); myGLCD.print("Arduino+", CENTER, 32); myGLCD.print("Dosimetr v1.06", CENTER, 40); myGLCD.update(); _delay_ms(1000); } //------------------------------------------------------------- void eeprom_wrS () { //запись настроек в память EEPROM.write(0, 222); EEPROM.write(1, treviga_1); EEPROM.write(2, podsvetka); EEPROM.write(3, son_OK); EEPROM.write(4, scrin_GRAF); EEPROM.write(5, buzz_ON); EEPROM.write(6, puls); EEPROM.write(7, opornoe * 100); EEPROM.write(8, treviga_2); EEPROM.write(13, beta_time); myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.print("Save OK", CENTER, 24); myGLCD.update(); _delay_ms(1000); } //------------------------------------------------------------- void eeprom_wrD () { //запись настроек в память время накопления дозы byte higi = (time_doza & 0xFF000000) >> 24; byte high = (time_doza & 0x00FF0000) >> 16; byte hi = (time_doza & 0x0000FF00) >> 8; byte low = (time_doza & 0x000000FF); EEPROM.write(20, higi); EEPROM.write(21, high); EEPROM.write(22, hi); EEPROM.write(23, low); #ifdef Debug_Serial Serial.print("time_doza-");Serial.print(time_doza,HEX);Serial.print("; higi-");Serial.print(higi,HEX);Serial.print("; high-");Serial.print(high,HEX);Serial.print("; hi-");Serial.print(hi,HEX);Serial.print("; low-");Serial.print(low,HEX);Serial.print("; result-");Serial.println(((long)higi << 24) | ((long)high << 16) | ((long)hi << 8) | low,HEX); #endif hi = int(doz_v) >> 8; low = int(doz_v); EEPROM.write(24, hi); EEPROM.write(25, low); } //------------------------------------------------------------- void eeprom_readD () { //чтание настроек из памяти время накопления дозы byte higi = EEPROM.read(20); byte high = EEPROM.read(21); byte hi = EEPROM.read(22); byte low = EEPROM.read(23); time_doza = ((long)higi << 24) | ((long)high << 16) | ((long)hi << 8) | low; #ifdef Debug_Serial Serial.print("time_doza-");Serial.print(time_doza,HEX);Serial.print("; higi-");Serial.print(higi,HEX);Serial.print("; high-");Serial.print(high,HEX);Serial.print("; hi-");Serial.print(hi,HEX);Serial.print("; low-");Serial.print(low,HEX);Serial.print("; result-");Serial.println(((long)higi << 24) | ((long)high << 16) | ((long)hi << 8) | low,HEX); #endif hi = EEPROM.read(24); low = EEPROM.read(25); doz_v = (hi << 8) | low; } //------------------------------------------------------------- void eeprom_readS () { //чтание настроек из памяти if (EEPROM.read(0) == 222) { treviga_1 = EEPROM.read(1); podsvetka = EEPROM.read(2); son_OK = EEPROM.read(3); scrin_GRAF = EEPROM.read(4); buzz_ON = EEPROM.read(5); puls = EEPROM.read(6); opornoe = EEPROM.read(7) / 100.0; treviga_2 = EEPROM.read(8); beta_time = EEPROM.read(13); } _delay_ms(10); } //------------------------------------------------------------- void nakachka() {//первая накачка byte n = 0; while (n < 30) { PORTD |= (1 << 5);//дергаем пин int c = puls; while (c > 0) { asm("nop"); c--; } PORTD &= ~(1 << 5);//дергаем пин n++; _delay_us(100); } } //------------------------------------------------------------- void speed_nakachka () { //скорость накачки имлульсы/сек if (millis() - spNAK_milis >= 1000) { spNAK_milis = millis(); speed_nak = speed_nakT; speed_nakT = 0; } } //------------------------------------------------------------- void time_d() { HOUR = time_doza / 3600; MIN = (time_doza / 60) % 60; } //------------------------------------------------------------- void timer_soft() { if (millis() - timer_mil >= 1000) { timer_mil = millis(); sek++; toch = !toch; if (sek > 60) { sek = 0; minute++; } } } void check_alarm_signal() // устанавливаем сигнал непрерывной тревоги, если "tr" переключился в "1" { if (!tr) // если счёт превысил аварийный порог, но флаг "tr" ещё не установлен { alarm_sound = 1; // поднимаем флаг аварийного сигнала alarm_milis = millis(); // запоминаем время начала тревоги } } void res_first_alarm() //подпрограмма выключения тревоги (ручного или по истечении таймаута) { alarm_sound = 0; // сбрасываем флаг звукового сигнала тревоги #ifdef buzzer_active //если задефайнен активный бузер PORTD &= ~(1 << 6); // выключаем бузер #else //пассивный бузер noTone(6); //выключаем генерацию сигнала на 6й ноге #endif }Стс-5 аналог сбм-20, ничего менять не надо.
А какой параметр отвечает за это?
А это уже вопрос к автору проекта, если б я разобрался - уже прикрутил бы поддержку нескольких типов датчиков.
Нашел небольшое несоответствие. В печатке коллектор BC547 соединяется на пин2 через 1 Ком. На схеме его нету. Надо ли ставить этот резистор?
А не наоборот ли на печатке кнопки? На сайте Srukami нарисована кнопка меню влево на 7 пин. На печатке вроде так и есть. Но , когда мы перевернем печатку, то это окажется вправо...?
Нашел небольшое несоответствие. В печатке коллектор BC547 соединяется на пин2 через 1 Ком. На схеме его нету. Надо ли ставить этот резистор?
Считайте этот резистор защитой пина ардуины. Работать будет и без него, ставить или нет - решайте сами.
А я вот уперся рогом в преобразователь высокого напряжения на отдельной микрухе MC34063, пока не доведу его до ума, дальше двигаться не буду. В настоящее время такой работает, работает четко, напряжение держит стабильно, ардуинку не отвлекает...но довольно много жрет, хотя это и не очень критично. Но хочу добиться комфортного режима.
А вот печатку для устройства вижу немного иначе. Вижу размер устройства чуть длиннее счетчика СБМ20, и чуть шире высоты дисплея Nokia, а в самом устройстве вижу два счетчика.
Так эта печатка делалась на скорую руку, только для отладки и проверки функционала. Повторяют её, как правило, начинающие, кто не хочет или не может создать свой вариант. Зато гарантировано рабочая.
Моя версия по размеру ещё больше, я на ней влепил и модуль еепром/ртц для логгера, а ардуинку влепил не отзеркалив... В результате ардуинка впаяна вверх ногами. Как функционал прошивки дойдёт до желаемого - буду делать более компактный вариант. Но, похоже, это будет не раньше, чем Бодрый вернётся к проекту.
Сейчас занимаюсь разводкой своей печатки на дискретных елементах с голой атмегой, как закончу, поделюсь.
Сейчас занимаюсь разводкой своей печатки на дискретных елементах с голой атмегой, как закончу, поделюсь.
Я разводил в изиЕДА печатку под стс-5 с про мини и олед дисплеем, довольно компактно получилось(110х40х20мм). Саму схему позже сделаю меньше, что бы можно было заказать плату с компонентами. а счетчик будет на корпусе крепиться
Корпус печатать не стал, ибо проект не закончен и хочется пару вещей доделать.
Одноплатную развязку не стал делать, бутербродом оказалось проще и компактнее. про мини хорошо ложится с СТС-5 и дисплеем. На фото видно то под ней размещены некоторые элементы, а под дисплеем мегаомные резисторы.
Вот так вышло, если кому нужно- выложу. Есь небольшие отличия от схемы и разводка сделана с учётом умножителя и без него.
В умножителе вижу три конденсатора, но вего один диод.
Выкладывать стоит после проверки в железе. Часто подводные камни проявляются уже на этапе сборки, как в виде косяков проектирования, так и в нестабильной работе из-за взаимного влияния цепей...
Так и задумано, вместо одного конденсатора ставится диод если с умножителем, если нет, то место диода заменяется перемычкой, а на место конденсатора ставится диод) По проектированию косяков нет, ВВ часть отдельно от всего, сборка покажет что и как.
Ползунковый выключатель питания на плату не думали добавить? Вверху и слева два свободных участка, куда он так и просится)
Какие изменения в схеме делали?
Там место под кнопку врезную в корпус и плату заряда лития, в этом месте плата скорей всего будет вырезана.
Добавил необходимую обвязку процессора, зашунтировал кнопки конденсаторами, фонарик висит просто на порту без транзистора, это наверное всё.
...зашунтировал кнопки конденсаторами...
Я бы ещё железные подтяжки килоом по 10 предусмотрел. Как-то не доверяю внутренним pull-up. А устанавливать или нет - уже дело собирающих.
Девятнадцатый вывод в воздухе - светодиод индикции пойманных частиц решили не ставить? У Бодрого на сайте он не указан, поскольку используется встроенный в Ардуино светодиод на 13м пине. В полной схеме ещё была вибра через ключ на полевике на восьмом ардуиновском пине, но в коде её так и не задействовали.
А вот за диод не учел- пусть будет без него, звука вполне хватит, хотя слева как раз можно его развести.
tekagi, а в меню можно отключить звук буззера? Думаю развести светодиод или нет...