![](https://habrastorage.org/webt/ut/sm/-2/utsm-23bhdtulza8tpma6mjtnv0.jpeg)
Однажды мой коллега Пётр предложил поучаствовать в одном интересном проекте — в создании «пещерного телефона для спелеологов», так как сам увлекается спелеологией. У спелеологов есть такая проблема: беспроводная связь под землей на практике не работает. Приемлемый радиоприем возможен только в зоне прямой видимости, но стоит зайти за пару поворотов — и связи нет. А общаться надо на протяжении всей пещеры, длина которой может быть несколько километров. Мобильная связь там, конечно же, не ловит, а значит связи с внешним миром у групп, автономно работающих в пещере несколько недель, никакой нет.
В августе 2018-го Петру предстояло участвовать в экспедиции в довольно сложную и опасную пещеру. Для этой экспедиции мы решили разработать новое устройство, которое бы решило проблему связи автономно работающих групп с внешним миром.
Описание идеи
У спелеологов есть «пещерные телефоны», работающие через полевой кабель (обычно это п-274), протянутый на всей протяженности пещеры, что-то вроде таких:
![](https://habrastorage.org/getpro/habr/post_images/e9d/664/b7e/e9d664b7e490cdfab7a8b43753548e2d.jpg)
(С) Павел Рудко, ТП17 «Недра», производство Красноярск.
Идея была в том, чтобы подземный телефон подключать к смартфону, и через сотовую «базовую станцию» на поверхности держать связь с внешним миром. Чтобы можно было из-под земли отправить SMS родным, близким и друзьям, запросить прогноз погоды на поверхности, чтобы в случае ливней заранее подняться на поверхность.
Петр с другими спелеологами планировал спуститься на дно системы Снежная, располагающейся в Абхазии и бывшей некогда второй по глубине пещерной системой в мире. Идти планировали через нижний вход, пещеру Банка. С точки зрения одной из главных пещерных опасностей — паводков, — заброска на дно этим путем намного безопаснее всех остальных известных маршрутов, но один очень опасный участок преодолевать всё же приходится — Ревущие каскады. Это совершенно непроходимые в паводок 250 метров по подземной реке. Перед прохождением этого участка мы хотели знать погоду на поверхности.
От автономного подземного лагеря, в котором планировалось жить две недели, до ближайшего выхода на поверхность 3,5 км пути, с перепадом по высоте в 800 м. На всём маршруте другими группами, работавшими в пещере, уже была оборудована подземная линия связи — протянут полевой кабель П-274. Эту линию мы планировали использовать в нашей задумке.
Оставалось сконструировать пару устройств: управляющее должно находиться у группы в пещере, управляемое — на поверхности в зоне уверенного приема GSM-сигнала. И нужно было придумать для них способ коммуникации. Управляемое устройство должно получать команды от управляющего и уметь принимать и отправлять SMS. Важным условием было полная автономность устройства на поверхности в течение двух недель, то есть всего срока экспедиции, так как у входа в пещеру нас никто не ждал. Некому было подзарядить, заменить батарейки или перезагрузить устройство.
В разработке принимали участие:
- Ковешников Петр — автор идеи, инициатор, разработка программной части.
- Матвеев Любомир — сборка, монтаж, разводка плат трансиверов.
- Шелепин Сергей — проектирование трансиверов.
Общая схема такая. На поверхности установлена базовая станция, она питается от аккумулятора, заряжаемого от солнечной батареи, должна работать не меньше двух недель учитывая среднюю продолжительность походов по пещерам, и должна быть автономной, чтобы для её работы не требовалось внимание людей. Человек внизу может с помощью зажима-«крокодильчика» или прикручивающейся клеммы присоединиться в любом месте линии (протянутого в пещерах полевого провода) и установить связь подземного телефона с наземной станцией. Она находится в «спящем» режиме, периодически «просыпается» и принимает сервисные сигналы. Спящий режим нужен для экономии заряда аккумулятора, потому что не всегда бывает солнце, чтобы питать батарею.
А теперь немного технических подробностей.
Реализация идеи
Использовавшийся нами в этой экспедиции комплекс выглядел следующим образом:
- Два смартфона на Android, на которых запущена специально написанная программа.
- Два трансивера собственной разработки, подключенных к подземной линии и к аудиопортам телефонов.
- Двужильный полевик П-274 длинной около 3600м, протянутый на глубину 800 м.
- Комплекс питания поверхностного телефона.
- Power bank для питания «поверхностного» телефона.
- Arduino, который перезапускает процесс зарядки телефона от power bank.
- Солнечная панель для зарядки power bank.
![](https://habrastorage.org/getpro/habr/post_images/851/546/6cc/8515466cc44cae2ce8c4961048903821.jpg)
За основу взяли схему обычного телефона, только вместо человека смартфон сам получает и передаёт команды. Для общения между собой устройства обмениваются последовательностями звуковых сигналов — DTMF-тонов (двухтональный многочастотный аналоговый сигнал с 16 тонами). Канал получается полудуплексным. Для передачи самих данных используется 9 тонов из 16, а остальные 7 — служебные, например указывают на начало/конец сообщения/последовательности, сигнал аварийной перезагрузки и т.п. Длительность DTMF-тонов, а значит и скорость передачи варьируется от 1 тона в секунду до 15 тонов в секунду. Без учета технических пауз это соответствует 0,3—5,5 байт в секунду. Смартфоны с помощью библиотеки dtmf-cpp преобразуют текст в тоновые сигналы и обратно.
![](https://habrastorage.org/getpro/habr/post_images/d3d/812/1ad/d3d8121ad7f280ce6e46844bf770333e.jpg)
![](https://habrastorage.org/getpro/habr/post_images/3d8/877/379/3d887737935db87ff4410aacb3900676.jpg)
Трансиверы подключены к телефонам через аудиоразъём 3,5 мм с помощью 4-PIN миниджека, как обычная гарнитура. Любой аудиосигнал, который хочет воспроизвести телефон, поступает в трансивер, и всё, что происходит в линии, трансивер усиливает и передаёт в телефон на канал микрофона. Кроме усиления входного сигнала трансивер изолирует телефон от линии во избежание его повреждения в результате случайных всплесков напряжения. Кроме того, трансивер управляет разделением среды передачи. Когда телефон пытается что-то воспроизводить, трансивер подключает к линии левый аудиоканал телефона, в остальное время к линии подключен канал микрофона, с которым соединена «земля». Когда нужно передать, то ПО в правый канал отдает служебный сигнал, чтобы трансивер переключился в режим передачи.
Послушать, как общаются наши трансиверы, можно тут: cloud.mail.ru/public/JAjQ/wuF4XMm4W
На телефонах запущена самописная программа, слушающая канал связи в ожидании определенных сигналов или ввода пользователя через интерфейс. Алгоритм передачи данных:
- Пользователь на управляющем телефоне выбирает в меню нужную команду.
- Программа формирует запрос в виде потока байтов.
- Поток делится на последовательности не больше 16 байтов, в каждую из них добавляется контрольная сумма, а затем последовательности байтов кодируются в последовательности DTMF-тонов. В набор последовательностей тонов добавляются две служебные последовательности, обозначающие начало и конец группы последовательностей.
- Каждая последовательность кодируется в PCM 16bit 8000/s mono и воспроизводится телефоном.
- Каждая последовательность считывается управляемым телефоном, декодируется, проверяется на ошибки и, в зависимости от результата, отправляется сигнал успешного или неуспешного получения.
- После получения сигнала подтверждения управляемый телефон передает следующую последовательность или повторяет текущую.
- Когда все последовательности успешно получены, управляемый телефон собирает из последовательностей поток байтов, декодирует его в команду и выполняет её.
Передача данных от управляемого телефона к управляющему выполняется по тому же алгоритму.
Видео доступно тут: https://drive.google.com/file/d/1Y4O5R1Hce0S_djni-B1k5_B9Lw7uRlyp/view?usp=sharing
![](https://habrastorage.org/getpro/habr/post_images/d00/a4e/15b/d00a4e15b57d067cecf2e3eecba4de83.jpg)
Пример: человек в пещере на своём смартфоне в программе выбирает команду «Отправить 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.
![](https://habrastorage.org/getpro/habr/post_images/c51/5ee/5f5/c515ee5f55e9c4f86978ba76195f1dc9.jpg)
Видео: cloud.mail.ru/public/76ay/F5xinJZQi
По расписанию Arduino раз в три часа с помощью реле разрывала канал +5v USB кабеля питания от power bank и через 15 минут включала его обратно. Сначала плата питалась от 4 батареек АА, а затем приспособили батарейный отсек с четырьмя банками 18650. Это оказалось самым слабым звеном, потому что именно аккумуляторы, питавшие Arduino, сели первыми. Но какую-то часть времени она проработала. Первая группа экспедиции, которая поднялась на поверхность, поменяла аккумуляторы, и система проработала ещё неделю.
Мы продолжаем наши эксперименты: есть рабочий вариант телефона-донора, к которому через отверстие в корпусе припаян большой блок с 18650. Телефон в режиме ожидания, и аккумуляторы разрядились только спустя 26,5 дней!
![](https://habrastorage.org/getpro/habr/post_images/dde/f0c/a6c/ddef0ca6c99f28bdd7090b9898bd5f5a.jpg)
![](https://habrastorage.org/getpro/habr/post_images/c79/cbd/f50/c79cbdf50dbef0304265274da72a33ca.jpg)
![](https://habrastorage.org/getpro/habr/post_images/811/0f1/950/8110f19502dafdcef146e48b1cba5774.jpg)
Поэтому в будущем мы, вероятно, откажемся от солнечной панели, которая тоже является слабым звеном: её может запорошить пылью или снегом, забрызгать грязью. За три недели экспедиции с 4,6 В рабочего напряжения аккумуляторов для трансивера «верхний» разрядился до 3,8 В, а «нижний» до 4,1 В.
Текущая версия нашего трансивера не умеет работать как обычный телефон. Хотим доработать схему, чтобы можно было использовать трансивер без смартфона в режиме обычного «пещерного телефона»: нажал — говоришь, отпустил — слушаешь.
Сейчас ПО поддерживает только прием и передачу SMS, а также ряд служебных команд. Протокол передачи данных не накладывает никаких ограничений, кроме пропускной способности, поэтому можно относительно легко запрограммировать скачивание прогноза погоды из интернета или, например, отправку сообщений в мессенджеры. К сожалению, скорости передачи не хватит, чтобы полноценно выходить в интернет и передавать картинки. Максимальная стабильная скорость сейчас около 6 байтов в секунду. На стабильном канале на передачу или получение одной SMS в 160 кириллических символов уходит около 1 минуты.
К ближайшей экспедиции мы планируем доработать ПО, добавив в него недостающие функции и исправив ошибки, а также переработать систему питания «поверхностного» комплекса. Уже реализовали функцию прозвона линии — раз в минуту даётся сервисный сигнал, чтобы проверять линию на наличие разрывов. Ещё добавили сервисные функции типа ручной установки скорости, принудительной перезагрузки и прочие мелочи. Может быть, потом сделаем чтобы телефон сам заходил в интернет и узнавал прогноз погоды. Очень хочется подключить к поверхностному телефону собственную метеостанцию, собранную, возможно, на базе Arduino и посылать актуальные данные с датчиков вниз по линии.