Как сделать пейджер для сигнализатора поклевки

Пейджер для сигнализатора поклевки

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

Что в результате получилось?

Поскольку сигналом с UART промодулировать несущую радиомодулей не является делом эффективным, приходится использовать манчестероподобные методы кодирования. Но в них есть одно ограничение, которое захотелось обойти. Заранее нужно знать, на какой скорости идет передача. Обошел это так:
Каждый бит передается импульсом и паузой. Длительность импульса и длительность паузы несут информацию о том, какой бит (0 или 1 или синхросигнал) передаются. Временной интервал передачи бита условно поделен на 5 интервалов. Если 1 интервал импульс а 4 интервала пауза, то передается синхроимпульс вида 0. Чтобы исключить постоянную составляющую во время синхронизации, есть синхроимпульс вида 1, в котором все наоборот. 4 интервала импульс и 1 интервал пауза.
Эти синхроимпульсы передаются поочередно. Сколько их нужно, чтобы приемник надежно вышел на режим, нужно еще исследовать. Но в моем, несколько модифицированном приемнике, собранном по подобию http://vrtp.ru/index.php?act=categories&CODE=article&article=1418 с (сверхрегенератор тот же)

Надежный выход на режим уже через несколько миллисекунд. При небольших скоростях, от пары сотен до тысяч бит в секунду было достаточно 4 таких синхросигналов. Последним синхроимпульсом перед началом передачи собственно байта, я принял, что должен быть синхроимпульс вида 1. Назовем его старт. Логическая единица байта передается импульсом в 3 интервала, пауза 2 интервала. Логический ноль байта передается импульсом в 2 интервала, пауза 3 интервала. После передачи всего байта передается синхроимпульс вида 0. Назовем его стоп. Прием байта считается удачным, если мы приняли правильный старт, 8 правильных информационных бита и правильный стоп. Если нет — байт бракуется и опять прием с самого начала. Правильный старт.

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

Очень сильно упростить условия можно выбрав в качестве приемного таймера 16-битный таймер. Но это несколько удлинит процедуры анализа принятой информации в прерывании. Дойдут руки — попробую. Сейчас все оттестировано и отмакетировано с 8-битными таймерами. С моим комплектом радиомодулей на скоростях от нескольких сот бит в секунду до выше тысячи, прием-передача правильная на расстояниях от нескольких сантиметров до 90 метров. Правда, в диапазоне 433.92 в моих условиях очень шумно. Поэтому часто происходят потери байтов из-за помех. Каждые 20-40 секунд в эфире что-то жужжыт.

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

В моем случае, передатчиком была тинька13, тактируемая 1МГЦ от внутреннего генератора. Приемником — тинька2313 тактируемая 8.2МГЦ от внутреннего генератора. После выхода генераторов на режим (секунда-две) ограничение по скорости работало очень точно. Сбои в приеме начинались, если я задавал отклонение от реальной скорости менее 2 процентов.
В общем, про систему передачи хватит.

Что собой представляет пейджер.

Стандартный радиомодуль подключенный к тиньке2313. При сработке какого-то из сигнализаторов, пейджер продублирует своим бузером сигналы с сигнализатора. После этого он на индикаторе будет моргать заданное в программе количество раз номер сработавшего сигнализатора. Если одновременно (в широком смысле слова) сработают несколько сигнализаторов, то он продублирует их сигналы и на индикаторе будет последовательно вымаргивать их номера. Если не закончено вымаргивание, а снова есть поклевка, независимо от номера сработавшего сигнализатора, моргание начнется сначала. Если номер сработавшего еще не принимался, он добавится в буфер для индикации. Таким образом, после утихания сигнализаторов гарантировано пейджер выморгает заданное количество раз с интервалом в 500мс.
Номера задаются при компиляции прошивки сигнализаторов. Они могут быть в диапазоне от 0 до 15. Отображаются на индикаторе следующим образом:
0 1 2 3 4 5 6 7 8 9 A b C d E F
Сигнализаторами они передаются одним байтом, у которого оба полубайта одинаковы и соответствуют номеру сигнализатора. Это еще один из способов защиты от приема ложных сигналов от брелков сигнализаций, работающих в этом диапазоне.

Буфер пейджера может принять до 4 сигналов с разных сигнализаторов. Это оэначает, что могут «одновременно» сработать 4 штуки. И они будут зафиксированы. Мне бы такой клев!

В комплекте есть исходник самого пейджера под ИАР-компилятор.
Он конфигурируется при помощи директив #define в файлике setting.h
Имеется возможность свободного выбора пинов для бузера и семисегментного индикатора. Входом выбран пин PCINT0. Его смена не предусмотрена. Но при желании это тоже возможно.

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

Можно использовать радиомодули с инверсией сигнала или без таковой. Обычно они с инверсией. Мой модифицированный без инверсии. И много других параметров определяются директивами #define.

Читайте также:  Катамаран с пластиковыми поплавками

Исходник подробно прокомментирован. Смотрите, модифицируйте.

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

Для правильной компиляции на вкладке Options/C/C++ Compiler/Code в окошке Register utilisations резервируем все 12 регистров.
на вкладке options/General Options ставим птичку Enable bit definitions.

Естественно, просим компилятор сгенерировать понятный вашему программатору выходной файл прошивки. У меня это intel standart. Оптимизация — по вкусу.

В комплекте лежит откомпилированная прошивка, которая полностью соответствует приложенной схеме. Радиоканал выбран с инверсией. Индикатор с общим анодом.

Сами радиомодули естественно можно использовать любые. Хоть самопальные, хоть покупные. Но не модемы. Лишь бы они работали на одинаковых частотах.

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

Fuses
OSCCALs = 4D 4A — Можно не трогать. В Вашем случае могут быть другими. Но если хотите точно подогнать частоту, можно поиграться.
_LOW = 0xE4
CKDIV = 1 — Пусть так будет. Если поставите 0, то будет работать не на 8МГЦ.
CKOUT = 1
SUT = 2
CKSEL = 4 — Работаем от внутреннего генератора.
_HIGH = 0xDF
DWEN = 1
EESAVE = 1
WDTON = 1
BODLEVEL = 7
RSTDISBL = 1 — Не трогать! Угробите контроллер. Снять можно только параллельным.
_EXT = 0xFF
SELFPRGEN = 1

Версия 01 Поменял инициализацию портов. Был кратковременный перегруз выхода приемника.

Кроме того, спалил операционник в приемнике. Пришлось менять. Переделал саму схему усилителя.

Теперь выглядит так:

Из преимуществ, не требует пилота. Первый же импульс с усилителя в полную амплитуду, поскольку усиливает сигнал, приподнятый от земли (на С1 около 0.6в со сверхрегенератора). Имеет большое входное сопротивление. По постоянному напряжению-повторитель напряжения. Компаратор со схемотехники Блейза. Среднюю точку на компаратор можно бы брать с С2, как в предыдущем варианте, но тогда усилитель превращается в своеобразный фильтр, подрезающий низкие частоты. На высоких скоростях это благо а на низких — зло. Тут надо будет подумать.

Пейджер для сигнализатора своими руками

Ниже представлено описание постройки пейджера для стандартного сигнализатора поклевки.
С дальностью действия 200 метров. Устройство работает в двух режимах:
1)Световая +вибро оповещение
2) Световая +вибро и + подключаемый звуковой сигнал

Для работы нам потребуется:
1)Корпуса (сами подбираете как вам удобнее)
2)Кнопки
3)светодиоды
4)Аудио штекеры и аудио входы на 2.5 мм
5)Стандартный сигнализатор поклевки
6)Паяльник
7)4 оптопары

И так начнем по порядку. Есть у меня вот такой сигнализатор поклевки

За основу была взята вот эта схема СХЕМА и доработана.


И припаял все детали. Вибро моторчик взял из старого телефона.

Вот как в итоге получилось




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

Как видно на схемах батарейки стоят на 9 и 12 вольт, что намного превышает порог питания нашей схемы, поэтому пришлось поставить стабилизатор напряжения на 3.3 вольта AMS1117

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

Далее берем кусок провода подходящей длины и припаиваем к нему штекера


Вот видео его работы

Данный самодельный пейджер подходит абсолютно для всех видов сигнализаторов.

Сигнализатор поклевки с пейджером

Описание старого проекта. Оставил как было, просто дополнил!

Разберите старую мышку (но не оптическую и не лазерную). В ней есть два вала. На концах этих валов есть колеса с прорезями. Эти колеса размещены между инфракрасными светоизлучателями и светоприемниками. Светоизлучатель светит постоянно. Когда валы вращаются, на светоприемник приходит прерывистый световой поток. В результате светоприемник вырабатывает пачки импульсов напряжения.Вот эти светоизлучатели и светоприемники, валики с колесиками и частью их подвески перенесены в корпус нашего сигнализатора поклевки таким образом, чтобы леска, попадающая в прорезь корпуса, прижималась к валику.

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

Схема — ryba13.jpg (схемы к сожалению нет)

Led1, T1- инфракрасный излучатель и датчик от старой компьютерной мышки. Между ними вращается колесо от той же мышки, с прорезями, прерывая световой поток. У моего датчика вал диаметром 5мм. Я на него одел отрезок термоусадочного кембрика для более надежного сцепления с леской. а колесо имеет 34 прорези. Если вал будет большего диаметра, или прорезей окажется меньше, чувствительность сигнализатора упадет.

Гр1 — электромагнитная пищалка от китайского будильника, купленного на рынке за 2 UAH (Украинские гривни). Это оказалось дешевле, чем покупать его отдельно у торговцев радиодеталями. У нее сопротивление около 15 ом. И при питании 3вольт, кричит она неслабо. У тех, что используются в качестве комп. спикера, сопротивление около 50 ом. Они звучат несколько тише и светодиоды горят тусклее.

T3 Любой транзистор с максимальным импульсным током коллектора более 250ма. например КТ503 (если включить сигнализатор без, или с неисправными Led1, Led2, то на коллекторе будут импульсы довольно большой амплитуды. Намного выше, чем напряжение питания. Поэтому лучше взять транзисторы с возможно большим предельно допустимым напряжением коллектора)

Led1, Led2 в моем варианте простые красные светодиоды с падением напряжения на каждом около 1.5вольт. Здесь есть особенность: Два последовательно включенных светодиода начинают светиться при более 3вольт. Батарея у нас 3вольт. В результате они почти не светятся, если нету звукового сигнала. И только во время звукового сигнала на пищалке возникает противоэдс, в результате чего они начинают светиться. Если использовать сверхяркие, с падением напряжения 3вольт, то вместо 2 последовательных, нужно включать их параллельно. В любом случае, если будет беспокоить подсветка при отсутствии звукового сигнала, включите последовательно со светодиодами любой диод в прямом включении.

Читайте также:  Как подобрать спиннинг для начинающих

D1 Любой диод. Можно даже древний, германиевый.

T2 Любой кремниевый транзистор с максимально возможным коэффициентом усиления. Например КТ3102Е. Транзистор Т2 я поставил, когда боролся за энергопотребление всей схемы, максимально увеличивая R1, R2, R3. Их величины даны ориентировочно и зависят от параметров конкретных светоизлучателей и светоприемников. Мне удалось добиться потребления в дежурном режиме 1.25ма. Во время звукового сигнала она потребляла около 70ма. Можно в принципе не ставить R3 и T2, а ножку 6 контроллера соединить с коллектором Т1. При этом придется уменьшить R2 где-то до 100Ком. В любом случае необходимо подбирая R1 и R2 добиться на ножке 6 контроллера, импульсов амплитудой более 1.5в при вращении колеса датчика. При этом не забывая, что датчики хотя и инфракрасные, но они не брезгуют и обычным белым светом. Так что настраивая схему датчика, нужно позаботиться об отсутствии внешней засветки. В корпусе сигнализатора тоже необходимо гарантировать отсутствие проникновения солнечного света. Ведь рыбу ловят и на ярком солнце.

Микроконтроллер ATTINY13 поддерживает внутрисхемное программирование, т.е.программировать можно прямо не отключая его от схемы. Я именно так его и программировал. Поэтому ножку 1(reset) подключил на плюс питания через резистор. Если программировать будете отдельно, то ножку 1(reset) можно подключить на плюс питания без резистора.

Для программирования AVREAL_ом,(http://ln.ua/

real/avreal/index.html) в комплекте лежит ват-файлик PGM.BAT, в котором не указаны FUSES. (используются установленные производителем по-умолчанию)
Для других программаторов:
Fuses
OSCCAL = 86
CKDIV = 0
CKOUT = 1
SUT = 2
CKSEL = 2
RSTDISBL = 1
DWEN = 1
WDTON = 1
EESAVE = 1
BODLEVEL = 7
SELFPRGEN = 1
Файл прошивки — ryba13.hex.

Алгоритм работы:

Удочка ложится на сигнализатор так, чтобы леска попала в прорезь корпуса сигнализатора. Сам сигнализатор устанавливается в рогатину, воткнутую в грунт Протяжка лески по сигнализатору одинаково фиксируется, как на вытяг, так и на отпускание. Если сначала был вытяг, а затем без паузы (не более секунды) отпуск, то вытягом считается сумма длин этих протяжек.
Протяжка лески учитывается, если только леска протягивается со скоростью не менее 1.5-2мм/сек. — фиксировано. Факт поклевки регистрируется тогда, когда леска протянута более чем (регулируется) на 2, 6.5, 18, 55мм. (без пауз более 1 сек.) Если за время протяжки леска останавливалась на время, больше, чем 1сек, она считается ложной (считается, что ее не было).
По факту поклевки генерируется 3 громких бипа в сопровождении ярких вспышек 2-х красных светодиодов. Если поклевки не прекращаются, бипы продолжаются, моргают светодиоды. Если поклевки прекратились, бипы замолкают, а светодиоды продолжают просто гореть в пол-накала еще в течение 20секунд. Естественно, в это время тоже идет анализ фактов повторных поклевок. Регулируется только длина зачетного вытяга лески. При первом включении сигнализатора, он бипает и моргает светодиодами столько раз, какой уровень чувствительности он будет отрабатывать. (например 1) Если его выключить, а затем повторно включить, он настроится на следующую ступень чувствительности (например 2) и даст 2 бипа с двумя вспышками. Далее — 3 сигнала, потом 4 и по кругу, опять 1. Это сделано, чтобы минимизировать количество органов управления до единственного выключателя питания.

P.S. Параллельно питанию контроллера желательно поставить электролитический конденсатор на 47-100мкф.

В новой версии схема распространяется с исходным кодом, который можно перекомпилировать ИАР-компилятором.

Теперь возможно, манипулируя в файлике setting.h, определениями
#define senselevel1 66
#define senselevel2 23
#define senselevel3 7
#define senselevel4 3
задавать свои уровни чувствительности. В моем случае 66-минимальная и 3-максимальная чувствительности. Они обозначают, после какого числа импульсов с датчика в течение около секунды подавать сигнал поклевки.
Теперь можно использовать любой датчик, который бы генерировал импульсы при протяжке лески. Просто эти числа нужно подобрать под свой датчик, на свой вкус.

Много других параметров также определяются директивами #define. В том числе и распределение пинов. Теперь в зависимости от удобства при разводке печатной платы (чего я не делаю никогда) можно переназначать все пины, кроме пина INT0. Почему? Попробуйте догадаться сами.

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

Кроме того, учитывая то, что в последнее время несколько возобновился интерес к этой поделке, я решил ее немножко проапгрейдить. Теперь сигнализатор способен работать по радиоканалу на пейджер.
Прежний функционал и схема (ранее была с ошибкой. 6 и 7 ноги были перепутаны) полностью сохранены. Новая прошивка так же будет работать и на старой схеме. Но если дополнительно подключить радиомодуль, к примеру вот этот: http://vrtp.ru/index.php?act=categories&CODE=article&article=1418 то получится полнофункциональный сигнализатор с пейджером.

Пейджер тоже самодельный (статья про пейджер). Если сделать несколько сигнализаторов, то нужно будет каждому из них присвоить свой серийный номер. В исходнике это директива
#define serial_nomer 0
и перекомпилировать проект.
Номера допустимы из диапазона 0..15

Таким образом на один пейджер возможно принимать сигналы с 16 сигнализаторов. Мне кажется этого вполне достаточно. В комплекте прилагается файлик прошивки с номером 0

Предусмотрен механизм «одновременного» приема до 4 сигнализаторов. Такого бешенного клева нужно еще поискать.

Читайте также:  Пеллетс для рыбалки своими руками рецепты

В ИАР_е открываете main.c Файлик ass.asm добавляете в проект на вкладке workspace. Для правильной компиляции на вкладке Options/C/C++ Compiler/Code в окошке Register utilisations резервируем все 12 регистров.
на вкладке options/General Options ставим птичку Enable bit definitions.
Естественно, просим компилятор сгенерировать понятный вашему программатору выходной файл прошивки. У меня это intel standart.

Оптимизация — по вкусу. Даже без оптимизации прошивка полностью помещается в микроконтроллер.

Если будете программировать контроллер внутрисхемно, через шлейфик, то возможно самовозбуждение. Поскольку во время снятия сигнала Reset, он должен пропикать свой уровень чувствительности. Одновременно с этим он выдаст на передатчик сигналы пейджеру. Поскольку вход сигнализатора очень высокоомный, то на него по шлейфу могут навестись импульсы для пейджера. Он среагирует на поклевку и опять пропищит. И так может повторяться бесконечно. Это нормальная ситуация. Если отключите шлейф, или зашунтируете вход INT0 резистором менее 100к, возбуд прекратится.

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

И наконец об фьюзах.

У моего они такие:
OSCCALs = 60 63 — Можно не трогать. В Вашем случае они могут отличаться.
_LOW = 0x6A
EESAVE = 1
WDTON = 1
CKDIV = 0 — Это важно. Иначе загудит на 8 мгц вместо 1
SUT = 2
CKSEL = 2 — Это важно. Внутренний генератор
_HIGH = 0xFF
SELFPRGEN = 1
DWEN = 1
BODLEVEL = 3
RSTDISBL = 1 — Если установите в 0, Все. Реанимируете только параллельным

P.S. Поскольку у 13 тиньки таймер только один и он уже занят в обработке сигналов с датчика поклевки, то в качестве источника регулярных прерываний для передатчика выбран АЦП. Для сигнализатора поклевок высокие скорости не обязательны. При тактировании от 1 МГЦ, с прескалером =64 скорость получилась около 250 бит/сек. Для нашего применения вполне достаточна.

Еще одна модернизация сигнализатора поклевки.
Версия 2.01

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

Задумался над схемой сигнализации факта поклевки. У меня светодиоды питались напряжением обратной эдс, возникающей при гудении бузера. Это, с моей точки зрения неплохо, поскольку эта энергия просто рассеивалась бы. Кроме того напряжения, возникающие при этом на бузере стремились бы повредить транзистор. А так светодиоды защищают транзистор от пробоя при этом более экономично жрут батарею. Также по этому же проводу было возможно просто подсветить сигнализатор после факта поклевки, подав на бузер напряжение ультразвуковой частоты. Из недостатков такой схемы нужно отметить паразитную засветку обычных светодиодов от очень свежих батарей. Но эта проблемка снимается установкой сверхярких всетодиодов. Еще один сомнительный недостаток это вероятность слышимости у молодых людей звуков на грани ультразвукового диапазона.

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

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

Примерная схема одного из возможных вариантов:

Диод D1 защищает 7 ногу контроллера от перенапряжений. D2 – защитный для транзистора. Перерисовал управление ключем бузера. На 3 пине постоянной единицы не будет! Можно смело включать так, как нарисовано. С диодами и конденсатором включалось на всякий случай, чтобы не было проблем при отладке программы.

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

Вместо бипа было что-то похожее на улюлюкание. Это было следствием того, что контроллер для снижения потребления работал на частоте 1МГЦ. Во время формирования бипа возникали прерывания для передатчика и от поклевок, которые вносили очень большую задержку и как следствие- искажение звука.

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

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

Перевел контроллер на тактирование от 9МГЦ. Звук стал практически чистым. Возросла скорость передачи на пейджер. Теперь она около 1 Кбит/сек. На такой частоте это минимально возможная скорость. Но с пейджером ничего менять не нужно. Он способен принимать и на таких скоростях. Также возросло потребление от батареи. Ток возрос с 1.2ма до 4ма! Это неприемлимо. Пришлось разбираться с режимом сна контроллера. Так, как для фиксации сработок датчика использовался запрос INT0 по фронту импульса, не было возможности положить контроллер в глубокий сон, т.к. разбудить его возможно только если прерывания по INT0 настроены по низкому уровню. Но по логике работы это тоже невозможно. Пришлось менять прерывание на PСINT. Теперь чувствительность по количеству сигналов с датчика возросла вдвое, поскольку это прерывание возникает по каждому фронту сигнала. Чтобы оставить чувствительность на прежнем уровне, пришлось константы чувствительности удвоить.

Теперь ток потребления в режиме ожидания с моим постоянно жрущим датчиком 0.66ма!

Это при том, что у меня постоянно светится ИК-светодиод LED1. С герконовым датчиком потребление будет менее 0.5 микроампер.

Фьюзы те же, за исключением одного.
CKDIV = 1 -Тактирование без внутреннего делителя на 8.

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

Оцените статью
Adblock
detector