Простой поисковый радио маячок.

Pavel_liev

Vladimir_N спасибо, будем стараться. На днях тестировал заводскую антенку рации Баофенг дешевого ценового диапазона, разницы в сравнении с проволочной самодельной не заметил, не превышала погрешности замера, обе антенны вели себя одинаково, вместе теряли связь и находили ее, показав одинаковую максимальную дальность. Для уменьшения потерь модуль связи паял сразу на разъем антенны.
По мере доработки выложу на форуме стабильную версию но на это уйдет еще с месяц. Еще охота протестить 1Вт версию, теоретически дальность должна удвоится, что было бы замейчательно.

Pavel_liev

Провел испытания радиомодуля мощностью 1Вт, серьезная штука но габаритная и сильно потребляющая, о портативности с таким можно забыть, а дальность тесты подтвердили.
Согласно мануалу максимальная дальность получается при 5в питании, проверил, так и есть, из-за чего пришлось применить повышающий преобразователь. Средняя дальность в лесу получилась 1.5км а в условиях поля такой думаю 15км покажет.

Vladimir_N
Pavel_liev:

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

Насмотревшись Ваших видео, тоже захотелось попробовать маяк с Лорой. Есть несколько вопросов. Я так понял используете канал 62кГц SF12, но при этом вроде желательно чтобы в модуле стоял TCXO, с кварцем такие параметры могут не прокатить. Делаете калибровку модулей? Сколько байт передаете в пакете? Как кодируете GPS координаты в пакете? Измеряли длительность передачи пакета?

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

Pavel_liev

ТСХО требуется для каналов ниже 62кГц, а этот еще позволяет пользоваться в стоке, и недавно перешел на SF11, у этого радиомодуля преамбула связи составляет минимум 18 байт, если меньше связь становится очень неустойчивой, в результате с SF12 пакет в 12 байт передавался 1.8 секунды, а с SF11 - 0.95с, что лучше для батарейки, и на местности разница между ними показалась незначительной, потери дальности не обнаружил, лишь незначительное повышение количества ошибок на границе приема. Еще на рынке появилось 6’е поколение таких чипов, 1261/62/68, о котором пишут чуть ниже потребление в режиме приема и на 2дБм лучше чуйка во всех режимах.

При подъеме модуля дальность будет очень сильно расти, есть статья где на воздушном шаре в страросфере они почти тысячу км взяли используя 25мВт, но это случай идеальных условий.

Еще по модулях, для UART конфиги сделаны под обмен пакетами, а управление SPI очень похоже на ваш маяк с Si4432, такой же буфер фифо и конфиги радио, та же преамбула и байт состояний модуля, правда мануал у LoRa написан послабее, меньше примеров и разъяснений. Но есть и приятные бонусы, LoRa калибруются на заводе и их частота не отличается друг от друга, проверил сразу 5 модулей разных сборок, и все они не требовали подгонок частоты, работали с заданным значением, что показалось просто обалденным после Si4432, где без калибровки никуда. А вот работать ниже 62кГц без стабилизированного модуля не получается, частота плавает и связь нарушается во время обмена, и дальность даже при подстроенной частоте не получается выжать совсем никакую.
В пакете передаю 12 байт, 10 из них координаты в формате *НЕХ символов модуля GPS Neo6, долгота и широта без градусов и букв, градусы это сотни километров, посчитал они лишние, а в *НЕХ оставил для защиты, при приеме проверяю на допустимость символа в списке цифр, и если он не в диапазоне цифры, то это указчик ошибки приема, ну и тини13 так меньше думать о шифровании, а оставшиеся 2 байта далее это скорость по GPS и уровень батарейки в однобайтовых числовых значениях, их сбой при передаче не критичен. На данный момент у тини13 памяти почти не осталось а функционал маловат, если нужно могу привести пример конфига модулей приемника и передатчика, а вот программу мне еще доделывать пару неделек, тогда смогу закинуть для повторения товарищами, уж больно сырая 😃

Vladimir_N
Pavel_liev:

…На данный момент у тини13 памяти почти не осталось а функционал маловат, если нужно могу привести пример конфига модулей приемника и передатчика…

На конфиг было бы интересно взглянуть.

Я думаю упаковывать координаты в два четырех байтовых числа это будет 8 байт, плюс 1 байт напряжения аккумулятора. Желательно бы еще высоту 2 байта (а то зависнет где нибудь на дереве) и количество принимаемых спутников 1 байт (для оценки качества приема). Тоже получается 12 байт.

Pavel_liev

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

Конфиг передатчика:

;***LoRa включится только в sleep***
ldi R16,0x01
ldi R17,0b10001000
rcall spi_write	;R16-адрес,R17-дата
rcall delay40mks
ldi R16,0x01	;stdby mode
ldi R17,0b10001001
rcall spi_write	;R16-адрес,R17-дата
rcall delay40mks

;***R5R6R7-frequency***
;***frequency*61=Hz***
ldi R16,0x6C	;H
mov R5,R16
ldi R16,0x0F	;M
mov R6,R16
ldi R16,0xF0	;L
mov R7,R16
;***0х6C0FF0*61dec=432MHz
ldi R16,0x06	;High
mov R17,R5
rcall spi_write	;R16-адрес,R17-дата
ldi R16,0x07	;Mid
mov R17,R6
rcall spi_write	;R16-адрес,R17-дата
ldi R16,0x08	;low
mov R17,R7
rcall spi_write	;R16-адрес,R17-дата

;ширина канала
ldi R16,0x1d
ldi R17,0b01100011;62kHz,rate4/5,Implicit mode
rcall spi_write	;R16-адрес,R17-дата
;настройки модема
ldi R16,0x1e
ldi R17,0b10110100;SF11
rcall spi_write	;R16-адрес,R17-дата
;ModemConfig3
ldi R16,0x26
ldi R17,0b00001000;реж.низкой скорости
rcall spi_write	;R16-адрес,R17-дата

;слово синхронизации
ldi R16,0x39
ldi R17,0x34
rcall spi_write	;R16-адрес,R17-дата
;мощность передатчика
ldi R16,0x09
ldi R17,0x8F	;min=0x80;max=0x8F
rcall spi_write	;R16-адрес,R17-дата
;длина пакета,байт в FIFO
ldi R16,0x22
ldi R17,5+5+2	;широта+долгота+скорость+АЦП
rcall spi_write	;R16-адрес,R17-дата
;указатель адреса в FIFO для TX
ldi R16,0x0e	;FiFoTxBaseAddr
ldi R17,0x00
rcall spi_write	;R16-адрес,R17-дата
;текущий адрес курсора в FIFO
ldi R16,0x0d	;SPI Pointer
ldi R17,0x00
rcall spi_write	;R16-адрес,R17-дата

;память FIFO
;0x00    ;адрес FIFO
;заполняем сколько надо байт в FIFO
;...
;...
;end FIFO

;после операций с FIFO нужно восстановить каретку базового адреса FIFO
ldi R16,0x0e	;FiFoTxBaseAddr
rcall spi_read	;R16-адрес,R17-дата
ldi R16,0x0d	;SPI pointer
rcall spi_write	;R16-адрес,R17-дата
;далее активация режима передачи буфера FIFO длиной указаной в байте конфига

;***TX mode ON***
;сброс байта прерываний
ldi R16,0x12	;clearLoRaIrq
ldi R17,0xff
rcall spi_write	;R16-адрес,R17-дата
;вкл режима передатчика
ldi R16,0x01
ldi R17,0b10001011
rcall spi_write	;R16-адрес,R17-дата

;передача считается выполненной когда в статус рег. 0x12 бит 3(TxDone) будет 1

Когфиг приемника

;***LoRa включится только в sleep***
ldi R16,0x01
ldi R17,0b10001000
rcall spi_write	;R16-адрес,R17-дата
rcall delay40mks
ldi R16,0x01	;stdby mode
ldi R17,0b10001001
rcall spi_write	;R16-адрес,R17-дата
rcall delay40mks

;***R5R6R7-frequency***
;***frequency*61=Hz***
ldi R16,0x06	;High
mov R17,R5
rcall spi_write	;R16-адрес,R17-дата
ldi R16,0x07	;Mid
mov R17,R6
rcall spi_write	;R16-адрес,R17-дата
ldi R16,0x08	;low
mov R17,R7
rcall spi_write	;R16-адрес,R17-дата

;ширина канала
ldi R16,0x1d
ldi R17,0b01100011;62kHz,rate4/5,Implicit mode
rcall spi_write	;R16-адрес,R17-дата
;настройки модема
ldi R16,0x1e
ldi R17,0b10110100;SF11
rcall spi_write	;R16-адрес,R17-дата
;ModemConfig3
ldi R16,0x26
ldi R17,0b00001000;реж.низкой скорости
rcall spi_write	;R16-адрес,R17-дата
;слово синхронизации
ldi R16,0x39
ldi R17,0x34
rcall spi_write	;R16-адрес,R17-дата

;задержка ожидания приема
;этот параметр отвечает через сколько времени после вкл. RX произойдет
;превышение времени до приема пакета и вывод ошибки приема
;величина плавает в зависимости от параметров канала
ldi R16,0x1f
ldi R17,100		;def=100,(sf12)50=3.2c,(sf11)50=1.6c
rcall spi_write	;R16-адрес,R17-дата
;длина пакета,байт в FIFO
ldi R16,0x22
ldi R17,5+5+2	;широта+долгота+скорость+АЦП
rcall spi_write	;R16-адрес,R17-дата
;указатель адреса в FIFO для RX
ldi R16,0x0f	;FiFoRxBaseAddr
ldi R17,0x00
rcall spi_write	;R16-адрес,R17-дата
;текущий адрес курсора в FIFO
ldi R16,0x0d	;SPI Pointer
ldi R17,0x00
rcall spi_write	;R16-адрес,R17-дата

;***RX mode ON***
;сброс байта прерываний
ldi R16,0x12	;clearLoRaIrq
ldi R17,0xff
rcall spi_write	;R16-адрес,R17-дата
ldi R16,0x01
ldi R17,0b10001110
rcall spi_write	;R16-адрес,R17-дата

;по завершению приема валидного пакета статус рег. 0x12 бит 6(RxDone) будет отображать 1

Так же для работы спящего режима удобно применять опрос в режиме CAD на наличие несущей сигнала LoRa, работает примерно так же как спящий режим на Si4432:

;...
;все конфиги по каналу связи
;...
;сброс байта прерываний
ldi R16,0x12	;clearLoRaIrq
ldi R17,0xff
rcall spi_write	;R16-адрес,R17-дата
;CAD mode On
ldi R16,0x01
ldi R17,0b10001111;CAD mode
rcall spi_write	;R16-адрес,R17-дата

;далее ждем когда статус рег.0х12 бит 2(CadDone) будет 1
;для 62кГц,SF12=120ms
;для 62кГц,SF11=58ms
;для 62кГц,SF10=28ms
;если при этом рег.0х12 бит 0(valid LoRa signal detected during Cad)=1 значит нужно просыпаться
Vladimir_N

Спасибо за инфу! Буду разбираться.
Ну если высоту не передавать. Тогда 10 байт останется. 😃
Интересно как Вы реализовали спящий режим на GPS модуле на тини13, в идеале его нужно гасить по питанию.

Опять-же куда цеплять пищалку и светодиод, у Тини выводов мало. Думаю взять контроллер пожирнее.

Pavel_liev

с Тини13 пищалку не прицепить, ног не хватит, а так да, GPS нужно выключать транзистором, или использовать модули что имеют ногу “reset”, например L70-R, ног как раз хватает, только придется reset тини13 в фюзах переключить на пин РВ5, и это путь в один конец, программатор залочится. Еще GPS около пол минуты прогревается если не включался более пары суток и не сразу выдает точные координаты, при холодном старте даже с резервным питанием в том же лесу требуется до 40с чтобы дрейф в 200м ушел и показания стали точными, но дальше с горячим стартом это будет быстрее, и как решить эту штуку полностью не придумал, один из вариантов делать режим чтобы GPS передавался больше одного раза по требованию пульта, а это уже полноценная двухсторонняя связь.
с АЦП красиво получилось, у радиомодуля в спящем режиме сопротивление по пинам более 15МОм, и шунт выбрал таким образом чтобы его напряжение было менее лог.1, как результат нога данных позволяет мерить напряжение на акуме не влияя на работу.

Vladimir_N

У меня GPS разогревается минуты 2 до начала выдачи первых координат, а потом постепенно уходит дрейф, на это тоже нужно время. Я думаю здесь сильно экономить не стоит, если включился то пусть работает пока маяк не заснет. Но тут тоже есть нюанс, передатчик модуля, сильно гадит на GPS (количество спутников падает) поэтому передавать координаты желательно с умом. А полноценная обратная связь очень нужна. Через нее много чего можно сделать. 😃

Интересно цифровые выводы у модуля лоры терпимы к 4V? У SI4432 были терпимы. Можно было питать тинку напрямую от аккумулятора, а модуль питать от стабилизатора. Тогда измерения питания делаются прямо внутри контроллера без внешней обвязки. Это у меня во всех маяках реализованно.

Pavel_liev

LoRa терпима даже к 5в питания, оставлял работать на программаторе шнура компа, за пол часа ничего не произошло, стабилизаторы не использую нигде(исключение 1Вт, там нужно 5в), LoRa отлично работает с 4.2в лития.
GPS тоже не требует стабилизации, которую почему-то постоянно паяют с завода на модулях Нео6, в даташите к GPS черным по белому пишется что при 4.3в просто пару мА тока будет кушаться за зря, вот только в случае КРЕНки эти сами пару мА кушает она, сливая в тепло, так какая разница? Резисторы “ресета” тоже никогда не применяю, лишний обвяз, меня учили: нужное - просто! 😁

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

Vladimir_N

У меня сейчас модули GPS L80-R простенький GPS, зато маленький и с антенной, он без батареек. Ищю модули L80-M39 они в таких же габаритах, но мультисистемные и чуйка выше, пока не вижу в продаже по нормальным ценам. Модули лора есть только RFM98 других пока нет, но он судя по даташиту максимум до 3.6V. Буду экспериментировать на них. Они по размерам совпадают с RFM22B, распайка немного отличается, но не критично. Буду использовать существующие платы приемника и маяка.

Pavel_liev

L80R отличный модуль, хотел купить но цены поднялись, кажется он с керамикой припаянной идет сразу, и у него тоже есть нога для резервного питания, с нею горячий старт за 5с, это когда модуль помнит актуальную математику спутников, и включается не реже чем раз в двое суток.
За все время ни один модуль, ни GPS, LoRa и Si4432 не пострадал от питания, к заявлениям в мануалах из-за этого давно отношусь скептически, ну не верю что транзисторы логики держат 3.6-3.8 и не держат 4.5в, сложно очень такое “г” изготовить, они все до 5-6в будут жить 😒

Vladimir_N

Собрал для проверки на существующих платах маяка и приемника. Залил тестовые прошивки. К сожалению, испытать полностью пока не получается, то работа, то дожди мешают. Но, в моей тестовой зоне, в городе, модули лоры показали весьма неплохой результат. Там, где модули Si4432 уже работали на пределе, лора при той же мощности показала приличный запас по дальности. Также понял, что лора довольно сильно гадит на GPS модули. Стоит включить передачу и резко уменьшается точность определения координат. При выключенных передатчиках координаты приемника и маяка совпадали с точность около 1метра, при включенных точность плавает порядка 10-30метров.

Pavel_liev

В моих испытаниях LoRa 0.1Вт в среднем выдает х2.5 от дальности Si4432 и +30% радейки Баофенг. Проблему с GPS не замечал, поскольку собираю координаты в неактивном режиме модуля связи, и на момент передачи они уже давно в ОЗУ тини13. А так во всех испытаниях получалось что устойчивая дальность связи LoRa больше чем самый слабый прием на аналоге радейки, превосходит она аналог по дальности в любых условиях 😒

Vladimir_N

Поигрался вчера на природе с комплексом, дальность связи получилась примерно раза в два выше чем с Si4432. Пеленговать не пробовал, у меня антенны простые неправленые, но обратил внимание на интересную особенность: RSSI действительно с расстоянием меняется слабо, а вот параметр SNR меняется существенно. Возможно его можно будет использовать для определения направления. Также пока не придумал алгоритм работы после того как маяк проснется. Понятно, что маяку нужно дать время для запуска GPS и фиксации координат (сколько?) при этом желательно не включать маяк на передачу. Но в тоже время неплохо было бы сообщить приемнику, что маяк проснулся и ловит спутники. Приемнику также желательно дать время для фиксации координат. Поэтому я думаю, обратная связь очень желательна для маяка и приемника. Нужно только продумать алгоритм взаимодействия.

Pavel_liev

Около года играюсь с LoRa а на существование SNR не обратил внимания, в мануале на ст.87 дана формула корректного подсчета реального уровня сигнала в дБм: dBm= -164+RSSI+SNR*0.25; а у меня на видео получается значения в попугаях 😛

Pavel_liev

По работе логики в маячке пришел к вот такой схеме, где основным идет спящий режим, но из-за длительного разогрева GPS маяк при выходе из сна сразу отвечает коротким одиночным пакетом, в котором уровень RSSI, и мы сразу видим, что он проснулся и насколько он “видит” нас. Дальше в зависимости от RSSI маяк ставит у себя конфиг мощности, если мы близко то зачем валить 100мВт, ведь можно экономить батарейку, и подает питание на свой GPS, сам процесс прогрева очень рандомный, а ждать не всегда выгодно, поэтому пришел к выводу что удобнее дать модулю 8 сек. после приема валидных спутников, и передавать на пульт что есть. Дрейф в 30-50 метров первого пакета может не мешать, а дальше у нас есть выбор, если на пульте активна опция “работать непрерывно”, то после приема с маячка пульт сразу пошлет короткий пакет, и маячек увидев активность канала пойдет на повторный GPS с повторным прогревом 8 сек, и уже третий или четвертый пакет будет точным.
Такой алгоритм позволяет работать как одиночно так и непрерывно, что кажется удобным. Код маячка кажется готов, а пульт еще допиливаю.

Vladimir_N

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

Pavel_liev

Порой очень не хватеет такого гиромодуля, у меня направление идет с GPS, а он любит потупить пару секунд и работает лишь в прямолинейном движении, еще видел ряд видео где дешевые модули компасов работали очень нестабильно, им мешали любые устройства что рядом, и осиливать связку компаса с акселерометром HMC5883 + MPU6050 пока руки не дошли. А у вас оно работает здорово, практически как на телефоне, к стати еще один вариант поиска - вбить координаты в гугл карту 😁

Pavel_liev

Кажется допилил тестовую программу маячка до вида на блок-схеме выше(режимы сна), памяти тини13 чудом хватило, включая софтварный UART с плюшками. Впереди испытания 😒