Уже завтра мы отправим наш сервер в стратосферу. Во время полета стратостат будет раздавать интернет, снимать и передавать видео и данные телеметрии на землю. Мы несколько раз писали, что расскажем про техническую сторону нашего проекта «Космический ЦОД» (раньше отзывался на имя «Сервер в облаках 2.0»). Обещали — выполняем! Под катом горсть железок и кода.
Веб-сервер
Даже в прошлом проекте «Сервер в облаках», когда мы поднимались на полноценном воздушном шаре с экипажем из двух человек, брать с собой полноценный сервер с аккумуляторной сборкой было, скажем так, не рационально. А сейчас речь идёт о маленьком стратостате, которому предстоит подъём на 30 км, а не на 1. Поэтому мы в качестве веб-сервера выбрали тот же Raspberry Pi. Этот микрокомпьютер будет формировать HTML-страничку и показывать её на отдельном дисплее.
Спутниковая связь
Кроме Raspberry на борту полетят модемы сетей спутниковой связи Iridium и Globalstar. Как вы помните, мы планировали им в компанию добавить и модем отечественной сети «Гонец», но мы не успели получить его заранее, поэтому отправим его в следующий полёт. Через спутниковые модемы веб-сервер будет получать ваши сообщения, которые можно будет отправлять на странице проекта. Эти сообщения будут передаваться на Raspberry Pi, которая станет выстраивать из них очередь и отображать на HTML-страничке.
Важный момент: ограничение на длину текстового сообщения на русском языке — 58 символов (включая пробелы). Если сообщение будет длиннее, то при передаче оно будет обрезано. Также из текста будут вырезаться все спец.символы, например,
/\+$%&;''""<>\n
и подобные.Поскольку у Raspberry Pi всего один UART-порт, мы подключим спутниковые модемы через промежуточный концентратор, который будет собирать данные с модемов и отправлять на Raspberry Pi.
Радиомодем
Все полученные от вас сообщения веб-сервер будет не только отображать на дисплее, но и транслировать на Землю по радиомодему LoRa. Так мы хотим протестировать идею раздачи интернета из стратосферы (трибьют проекту Google Loon). Конечно, наш стратостат — это не полноценный ретранслятор связи, но даже если его возможностей хватит для устойчивой передачи данных, без больших потерь информации, то уж специализированные системы точно справятся с раздачей интернета из предкосмоса.
Телеметрия
Кроме того, мы планируем на той же HTML-страничке выводить данные телеметрии. Брать их Raspberry Pi будет с отдельного полётного контроллера.
Он опрашивает разные датчики, которые можно поместить как внутри, так и снаружи аппаратного гермобокса, собирает информацию в кучу, причёсывает и в удобном виде отдаёт тем, кто попросит. В нашем случае попросит Raspberry Pi. Мы будем регистрировать давление, высоту, GPS-координаты, вертикальную и горизонтальную скорость и температуру.
Данные с полётного контроллера передаются длинными строками, которые затем с помощью этого кода:
$str = 'N:647;T:10m55s;MP.Stage:0;MP.Alt:49;MP.VSpeed:0.0;MP.AvgVSpeed:0.0;Baro.Press:1007.06;Baro.Alt:50;Baro.Temp:35.93;GPS.Coord:N56d43m23s,E37d55m68s;GPS.Home:N56d43m23s,E37d55m68s;Dst:5;GPS.HSpeed:0;GPS.Course:357;GPS.Time:11h17m40s;GPS.Date:30.07.2018;DS.Temp:[fc]=33.56;Volt:5.19,0.00,0.00,0.00,0.00,0.00,0.00,0.00';
parse_str(strtr($str, [
':' => '=',
';' => '&'
]), $result);
print_r($result);
превращаются в массив в удобном для отображения виде:
Array
(
[N] => 647
[Т] => 10m55з
[MP_Stage] => 0
[MP_Alt] => 49
[MP_VSpeed) => 0.0
[MP_AvgVSpeed] => 0.0
[Baro Рrеss] => 1007.06
[Baro_Alt] => 50
[Baro_Temp] => 35.93
[GPS_Coord] => N56d43m23s,E37d55m68s
[GPS_Home) => N56d43m23s,E37d55m68s
[Dst] => 5
[GPS_HSpeed] => 0
[GPS_Course] => 357
[GPS_Time] => 11h17m40s
[GPS_Date] => 30.07.2018
[DS_Temp] => [fс] ЗЗ.56
[Volt] => 5.19, 0.00,0.00,0.00,0.00,0.00,0.00,0.00
)
Телеметрические данные мы тоже будем транслировать на Землю вместе с вашими сообщениями. Для этого в месте запуска развернём приёмную станцию.
Дисплей и камера
Чтобы вы могли убедиться, что сервер действительно получает ваши сообщения через спутниковую связь, и что он вообще полетел в стратосферу, а не стоит у нас в офисе, мы решили выводить все сообщения с телеметрией на дисплей, который будет снимать GoPro. Времени на подготовку проекта было мало (да когда же его бывает много?!), поэтому мы не стали мучить Алиэкспресс и паяльник, а вместо этого взяли готовый прибор. Для наших нужд его более чем достаточно. Дисплей мы подключим к Raspberry через HDMI.
Ещё мы планируем транслировать видеоряд с GoPro по отдельному радиоканалу, но как оно будет работать, пока неизвестно — возможно, низкая облачность сильно уменьшит дальность связи. Но в любом случае, после того, как мы найдём приземлившийся стратостат, мы выложим видео с камеры и вы сможете сами убедиться, какие сообщения получил наш «предкосмический ЦОДик» и на какую высоту он забрался — телеметрия будет выводиться в той же HTML-страничке, к тому же будет виден кусочек горизонта.
Питание
Вся вышеописанная красота будет запитана от сборки литиевых аккумуляторов, собранных по схеме 3S4P — три последовательно, четыре параллельно. Общая ёмкость около 14 А·ч при напряжении в 12 В. По нашим прикидкам, этого должно хватить, но после финальной сборки, конечно, измерим фактическое потребление, и если нужно, накинем ещё аккумуляторов.
Ещё добавьте ко всему этому GPS-маяки, по которым мы будем искать приземлившийся стратостат. А «домиком» для сервера и прочих приборов будет гермобокс.
Он убережёт нежную аппаратуру от перепадов температур и давления. Заодно и радиационную дозу уменьшит, хотя для нашего проекта это никакой роли не играет, слишком недолго сервер будет летать в стратосфере, да и фон там не такой высокий, как на МКС.
Кроме отправки сообщений на сайте проекта, вы можете поучаствовать в конкурсе и угадать место приземления зонда. Главный приз — поездка на Байконур на запуск пилотируемого корабля Союз-МС-13.