Как мы из пещеры SMS отправляли

в 13:52, , рубрики: diy или сделай сам, diy-проекты, sms, Блог компании Mail.Ru Group, пещера, Разработка систем связи, смартфон, спелеолог

Как мы из пещеры SMS отправляли - 1

Однажды мой коллега Пётр предложил поучаствовать в одном интересном проекте — в создании «пещерного телефона для спелеологов», так как сам увлекается спелеологией. У спелеологов есть такая проблема: беспроводная связь под землей на практике не работает. Приемлемый радиоприем возможен только в зоне прямой видимости, но стоит зайти за пару поворотов — и связи нет. А общаться надо на протяжении всей пещеры, длина которой может быть несколько километров. Мобильная связь там, конечно же, не ловит, а значит связи с внешним миром у групп, автономно работающих в пещере несколько недель, никакой нет.

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

Описание идеи

У спелеологов есть «пещерные телефоны», работающие через полевой кабель (обычно это п-274), протянутый на всей протяженности пещеры, что-то вроде таких:

Как мы из пещеры SMS отправляли - 2
(С) Павел Рудко

Идея была в том, чтобы подземный телефон подключать к смартфону, и через сотовую «базовую станцию» на поверхности держать связь с внешним миром. Чтобы можно было из-под земли отправить SMS родным, близким и друзьям, запросить прогноз погоды на поверхности, чтобы в случае ливней заранее подняться на поверхность.

Петр с другими спелеологами планировал спуститься на дно системы Снежная, располагающейся в Абхазии и бывшей некогда второй по глубине пещерной системой в мире. Идти планировали через нижний вход, пещеру Банка. С точки зрения одной из главных пещерных опасностей — паводков, — заброска на дно этим путем намного безопаснее всех остальных известных маршрутов, но один очень опасный участок преодолевать всё же приходится — Ревущие каскады. Это совершенно непроходимые в паводок 250 метров по подземной реке. Перед прохождением этого участка мы хотели знать погоду на поверхности.

От автономного подземного лагеря, в котором планировалось жить две недели, до ближайшего выхода на поверхность 3,5 км пути, с перепадом по высоте в 800 м. На всём маршруте другими группами, работавшими в пещере, уже была оборудована подземная линия связи — протянут полевой кабель П-274. Эту линию мы планировали использовать в нашей задумке.

Оставалось сконструировать пару устройств: управляющее должно находиться у группы в пещере, управляемое — на поверхности в зоне уверенного приема GSM-сигнала. И нужно было придумать для них способ коммуникации. Управляемое устройство должно получать команды от управляющего и уметь принимать и отправлять SMS. Важным условием было полная автономность устройства на поверхности в течение двух недель, то есть всего срока экспедиции, так как у входа в пещеру нас никто не ждал. Некому было подзарядить, заменить батарейки или перезагрузить устройство.

В разработке принимали участие:

  • Ковешников Петр — автор идеи, инициатор, разработка программной части.
  • Матвеев Любомир — сборка, монтаж, разводка плат трансиверов.
  • Шелепин Сергей — проектирование трансиверов.

Общая схема такая. На поверхности установлена базовая станция, она питается от аккумулятора, заряжаемого от солнечной батареи, должна работать не меньше двух недель учитывая среднюю продолжительность походов по пещерам, и должна быть автономной, чтобы для её работы не требовалось внимание людей. Человек внизу может с помощью зажима-«крокодильчика» или прикручивающейся клеммы присоединиться в любом месте линии (протянутого в пещерах полевого провода) и установить связь подземного телефона с наземной станцией. Она находится в «спящем» режиме, периодически «просыпается» и принимает сервисные сигналы. Спящий режим нужен для экономии заряда аккумулятора, потому что не всегда бывает солнце, чтобы питать батарею.

А теперь немного технических подробностей.

Реализация идеи

Использовавшийся нами в этой экспедиции комплекс выглядел следующим образом:

  1. Два смартфона на Android, на которых запущена специально написанная программа.
  2. Два трансивера собственной разработки, подключенных к подземной линии и к аудиопортам телефонов.
  3. Двужильный полевик П-274 длинной около 1,5 км, протянутый на глубину 800 м.
  4. Комплекс питания поверхностного телефона.
    1. Power bank для питания «поверхностного» телефона.
    2. Arduino, который перезапускает процесс зарядки телефона от power bank.
    3. Солнечная панель для зарядки power bank.

Как мы из пещеры SMS отправляли - 3

За основу взяли схему обычного телефона, только вместо человека смартфон сам получает и передаёт команды. Для общения между собой устройства обмениваются последовательностями звуковых сигналов — DTMF-тонов (двухтональный многочастотный аналоговый сигнал с 16 тонами). Канал получается полудуплексным. Для передачи самих данных используется 9 тонов из 16, а остальные 7 — служебные, например указывают на начало/конец сообщения/последовательности, сигнал аварийной перезагрузки и т.п. Длительность DTMF-тонов, а значит и скорость передачи варьируется от 1 тона в секунду до 15 тонов в секунду. Без учета технических пауз это соответствует 0,3—5,5 байт в секунду. Смартфоны с помощью библиотеки dtmf-cpp преобразуют текст в тоновые сигналы и обратно.

Как мы из пещеры SMS отправляли - 4

Как мы из пещеры SMS отправляли - 5

Трансиверы подключены к телефонам через аудиоразъём 3,5 мм с помощью 4-PIN миниджека, как обычная гарнитура. Любой аудиосигнал, который хочет воспроизвести телефон, поступает в трансивер, и всё, что происходит в линии, трансивер усиливает и передаёт в телефон на канал микрофона. Кроме усиления входного сигнала трансивер изолирует телефон от линии во избежание его повреждения в результате случайных всплесков напряжения. Кроме того, трансивер управляет разделением среды передачи. Когда телефон пытается что-то воспроизводить, трансивер подключает к линии левый аудиоканал телефона, в остальное время к линии подключен канал микрофона, с которым соединена «земля». Когда нужно передать, то ПО в правый канал отдает служебный сигнал, чтобы трансивер переключился в режим передачи.

Послушать, как общаются наши трансиверы, можно тут: cloud.mail.ru/public/JAjQ/wuF4XMm4W

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

  1. Пользователь на управляющем телефоне выбирает в меню нужную команду.
  2. Программа формирует запрос в виде потока байтов.
  3. Поток делится на последовательности не больше 16 байтов, в каждую из них добавляется контрольная сумма, а затем последовательности байтов кодируются в последовательности DTMF-тонов. В набор последовательностей тонов добавляются две служебные последовательности, обозначающие начало и конец группы последовательностей.
  4. Каждая последовательность кодируется в PCM 16bit 8000/s mono и воспроизводится телефоном.
  5. Каждая последовательность считывается управляемым телефоном, декодируется, проверяется на ошибки и, в зависимости от результата, отправляется сигнал успешного или неуспешного получения.
  6. После получения сигнала подтверждения управляемый телефон передает следующую последовательность или повторяет текущую.
  7. Когда все последовательности успешно получены, управляемый телефон собирает из последовательностей поток байтов, декодирует его в команду и выполняет её.

Передача данных от управляемого телефона к управляющему выполняется по тому же алгоритму.

Видео доступно тут: https://drive.google.com/file/d/1Y4O5R1Hce0S_djni-B1k5_B9Lw7uRlyp/view?usp=sharing

Как мы из пещеры SMS отправляли - 6

Пример: человек в пещере на своём смартфоне в программе выбирает команду выбирает команду «Отправить SMS», вводит номер телефона, на который нужно отправить сообщение, и его текст. Все эти данные кодируются посредством DTMF-сигналов, в тоновом режиме передаются по проводу на поверхность, там другой телефон их декодирует и через свою SIM-карту отправляет SMS на указанный номер. С обратной связью примерно такая же схема: телефон периодически просыпается, выходит из авиарежима, получает накопленные у оператора SMS и хранит их у себя в ожидании, пока из пещер придет служебная команда «дай мне SMS». Всё, что накоплено, смартфон передает по линии вниз.

Электропитание

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

Если смартфон непрерывно будет слушать линию, да еще и подключен к GSM-сети, питания ему хватит на несколько часов, и солнечная панель не решит эту проблему, поскольку она даёт меньше энергии, чем потребляет смартфон, и power bank лишь растянет время работы на день-два. Пришлось делать режим ожидания, в котором линия не прослушивается, а также включить авиарежим. Программа после 5 минут бездействия засыпает и просыпается раз в 10 минут на 15 секунд, ожидая специального сигнала пробуждения. Авиарежим отключается 6 раз в сутки на 10 минут для получения SMS. Проблема в том, что управление авиарежимом требует для приложения повышенных прав, которые нельзя получить, не рутуя телефон. Вся остальная функциональность приложения, не связанная с энергосбережением, не требует повышенных прав и работает на любом телефоне с Android 4.1 и выше.

Полевые испытания и планы

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

Было две больших программных проблемы, проблема с питанием «поверхностного» аппарата и с герметизацией «поверхностного» комплекса, проблема с коннектором. К большинству проблем ребята оказались готовы и использовали заранее подготовленные запасные варианты, с чем-то импровизировали на ходу. Так или иначе, система работала, нам удалось провести полноценное тестирование. Вторая группа, оставшаяся на дне пещеры, чтобы доисследовать первопрохождение после отъезда основной части экспедиции, сообщала о результатах, а также узнавала текущую погоду и прогноз. Почти все обнаруженные проблемы и недоработки были легко устранимы и мы их исправили к следующей экспедиции в Снежную, которая прошла в декабре 2018 — январе 2019 года.

В ходе испытаний мы выяснили максимальную стабильную скорость передачи данных. Она не отличается от максимальной стабильной скорости, полученной в лабораторных условиях при подключении аппаратов напрямую друг к другу. Сигнал, передаваемый через протянутую через пещеру линию связи, никак не искажался, посторонних шумов сопоставимой громкости не замечено. Лишь незначительно с глубиной спуска падала громкость сигнала. Из-за программных проблем также удалось проверить работу в условиях искаженного, «заикающегося», прерывающегося сигнала, при котором, на первый взгляд, успешной передачи не добиться. Тем не менее, удалось подобрать режим работы, при котором даже в таких условиях поддерживается связь двух устройств — это наводит на мысли о потенциально очень высокой устойчивости созданного нами протокола передачи.

Изначально планировалось использовать power bank для питания верхнего телефона. Оказалось, что имевшийся у нас power bank заряжал телефон до 100 % и выключался. Чтобы снова инициализировать зарядку нужно было вытащить провод из power bank и вставить обратно, иначе он не понимал, что телефон сел и пора снова отдавать энергию. До экспедиции оставалась пара дней. Я не придумал ничего лучше, кроме как приколхозить Arduino.

Как мы из пещеры SMS отправляли - 7

Видео: cloud.mail.ru/public/76ay/F5xinJZQi

По расписанию Arduino раз в три часа с помощью реле разрывала канал +5v USB кабеля питания от power bank и через 15 минут включала его обратно. Сначала плата питалась от 4 батареек АА, а затем приспособили батарейный отсек с четырьмя банками 18650. Это оказалось самым слабым звеном, потому что именно аккумуляторы, питавшие Arduino, сели первыми. Но какую-то часть времени она проработала. Первая группа экспедиции, которая поднялась на поверхность, поменяла аккумуляторы, и система проработала ещё неделю.

Мы продолжаем наши эксперименты: есть рабочий вариант телефона-донора, к которому через отверстие в корпусе припаян большой блок с 18650. Телефон в режиме ожидания, и аккумуляторы разрядились только спустя 26,5 дней!

Как мы из пещеры SMS отправляли - 8

Как мы из пещеры SMS отправляли - 9

Как мы из пещеры SMS отправляли - 10

Поэтому в будущем мы, вероятно, откажемся от солнечной панели, которая тоже является слабым звеном: её может запорошить пылью или снегом, забрызгать грязью. За три недели экспедиции с 4,6 В рабочего напряжения аккумуляторов для трансивера «верхний» разрядился до 3,8 В, а «нижний» до 4,1 В.

Текущая версия нашего трансивера не умеет работать как обычный телефон. Хотим доработать схему, чтобы можно было использовать трансивер без смартфона в режиме обычного «пещерного телефона»: нажал — говоришь, отпустил — слушаешь.

Сейчас ПО поддерживает только прием и передачу SMS, а также ряд служебных команд. Протокол передачи данных не накладывает никаких ограничений, кроме пропускной способности, поэтому можно относительно легко запрограммировать скачивание прогноза погоды из интернета или, например, отправку сообщений в мессенджеры. К сожалению, скорости передачи не хватит, чтобы полноценно выходить в интернет и передавать картинки. Максимальная стабильная скорость сейчас около 6 байтов в секунду. На стабильном канале на передачу или получение одной SMS в 160 кириллических символов уходит около 1 минуты.

К ближайшей экспедиции мы планируем доработать ПО, добавив в него недостающие функции и исправив ошибки, а также переработать систему питания «поверхностного» комплекса. Уже реализовали функцию прозвона линии — раз в минуту даётся сервисный сигнал, чтобы проверять линию на наличие разрывов. Ещё добавили сервисные функции типа ручной установки скорости, принудительной перезагрузки и прочие мелочи. Может быть, потом сделаем чтобы телефон сам заходил в интернет и узнавал прогноз погоды. Очень хочется подключить к поверхностному телефону собственную метеостанцию, собранную, возможно, на базе Arduino и посылать актуальные данные с датчиков вниз по линии.

Автор: Qubique

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js