Главная » Хабрахабр » Как мы из пещеры SMS отправляли

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

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

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

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


(С) Павел Рудко, ТП17 «Недра», производство Красноярск.

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

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

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

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

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

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

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

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

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

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

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

Трансиверы подключены к телефонам через аудиоразъём 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», вводит номер телефона, на который нужно отправить сообщение, и его текст. Все эти данные кодируются посредством DTMF-сигналов, в тоновом режиме передаются по проводу на поверхность, там другой телефон их декодирует и через свою SIM-карту отправляет SMS на указанный номер. С обратной связью примерно такая же схема: телефон периодически просыпается, выходит из авиарежима, получает накопленные у оператора SMS и хранит их у себя в ожидании, пока из пещер придет служебная команда «дай мне SMS». Всё, что накоплено, смартфон передает по линии вниз.
Весь комплекс в течение экспедиции должен от чего-то питаться. С питанием подземного телефона никаких проблем не возникает — и телефон, и трансивер, имеют встроенный аккумулятор, во время использования потребление не слишком большое, в остальное время они выключены. С питанием «поверхностного» управляемого телефона ситуация гораздо сложнее: ему нужно продержаться в рабочем состоянии не менее двух недель.

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

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

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

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

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

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

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

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

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

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

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

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


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Как изучение критической уязвимости DHCP в Windows 10 привело к обнаружению еще двух ошибок безопасности

Изображение: Unsplash А в некоторых случаях таких новых уязвимостей оказывается больше одной. Как было описано в предыдущей статье про CVE-2019-0726, иногда поиск деталей об уже известной уязвимости приводит к обнаружению новой уязвимости. Как всегда происходит при поиске уязвимостей, даже если ...

Быстрорастворимое проектирование

Люди учатся архитектуре по старым книжкам, которые писались для Java. Книжки хорошие, но дают решение задач того времени инструментами того времени. Время поменялось, C# уже больше похож на лайтовую Scala, чем Java, а новых хороших книжек мало. Увидим обзор типовых ...