Сървър в облаците: подготвя се за стартиране

В публикация за регатата Споменахме, че през август ще има състезание с награди за всички Хабражители. Дойде време да откъснем булото на тайната. Някак си ни хрумна идеята, че фразата „сървър в облаците“ може да се приема буквално. Нека всъщност пуснем работещ сървър в небето, който може да бъде пингуван! Първоначално идеята изглеждаше налудничава, но след като я завъртяхме насам-натам, обсъждайки я по всякакъв начин, най-накрая измислихме начин да изпратим сървъра към птиците. В края на август предстои епохален старт, но засега се работи по хардуерната част на проекта. Детайли под кройката.

Сървър в облаците: подготвя се за стартиране

  1. Сървърът ще бъде базиран на Raspberry Pi 3

    Би било интересно да се вдигне единичен сървър във въздуха, но теглото му + теглото на UPS... Всичко това ще изисква значителна повдигаща сила. И защо, ако на базата на компактен Raspberry Pi 3 можете да разположите доста приличен сървър, с изчислителна мощност няколкостотин пъти по-голяма от машината, на която Тим Бърнърс-Лий се забавляваше през 1991 г.

  2. Нека стартираме сървъра в балон с горещ въздух

    Имахме идеи да вдигнем сървъра върху хелиева сонда, но тогава сървърът нямаше да пингва дълго, преди балонът да се спука на голяма надморска височина в разредена атмосфера и цялата конструкция да падне на земята. Исках да разширя „прозореца“ на ефирно време до час и половина. И тогава решиха да използват балон. Продължителността на полета е два часа. Освен това, въпреки че полетът не е напълно контролируем, в кошницата може да има наш инженер, който в случай на неизправност може бързо, на място, да го „включи и изключи“.

  3. Ще използваме клетъчните комуникации като транспортна мрежа

    Съвременните WiFi антени могат да „пробиват“ доста големи разстояния, но за това ще е необходимо да се изгради комуникационен комплекс, който не е много по-нисък по параметрите си от военна радарна станция. И в името на 1,5-2 часа комуникация няма смисъл да се изгражда такава система, тъй като на надморската височина на балона клетъчните комуникации трябва да работят стабилно.

След формулирането на тези „постулати“ проектът вече не изглеждаше неосъществим и скоро започнахме да работим и в трите посоки едновременно.

На първо място се обърнахме към момчетата от nearspace.ru, който изяде кучето, докато изстрелва всякакви железа във въздуха (с последващо търсене и спасяване).

След това извадихме Raspberry Pi 3, който лежеше в нощното шкафче на нашия администратор, и започнахме да го настройваме.

Сървър в облаците: подготвя се за стартиране
Свърза камерата:

Сървър в облаците: подготвя се за стартиране
И ние го тествахме на нашия „Семьон“:

Сървър в облаците: подготвя се за стартиране
Семьон е много удобен като модел и помощник - не иска храна, не се разсейва от телефона, винаги е в страхотно настроение и с широка усмивка от цялата си каска. Разбира се, нямаме нужда от такъв скафандър за полет, но той създава подходящата атмосфера в офиса.

Схемата на проекта е както следва:

Сървър в облаците: подготвя се за стартиране
Powerbank се използва за наземно тестване; необходимо е нещо по-надеждно за стартиране.

Може би най-интересната част от хардуера е платка за получаване на данни от всички сензори:

Сървър в облаците: подготвя се за стартиране
Момчета от nearspace.ru Дълго време се борихме с различни аналози и след това сами направихме бордови компютър, защото надеждността е от решаващо значение, съдбата на целия проект зависи от телеметричните данни. Бордовият компютър отговаря за получаването на данни от всички свързани сензори и предаването им към Raspberry Pi.

Пуснахме го, конфигурирахме го и след няколко седмици програмиране и клякания с тамбури, успяхме да получим телеметрични данни и снимка на Семьон от широкоъгълна камера:

Сървър в облаците: подготвя се за стартиране
Телеметричните данни се предават в един ред в следната форма:

Сървър в облаците: подготвя се за стартиране
След това този код преобразува низа в масив и извежда данните на сайта:

$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);

Описание на някои данни:

  • N:2432; — номер на пакета данни, винаги нарастващ
  • T:40m39s; — време от момента на включване на контролера на полета
  • MP.Етап:0; — етап на полет (0 — на земята или под 1 км, 1 — изкачване, 2 — висене на височина, 3 — спускане)
  • MP.Alt:54; — барометрична надморска височина в метри от морското равнище — трябва да се показва
  • MP.VSpeed:0.0; — вертикална скорост в метри в секунда със среден филтър
  • MP.AvgVSpeed:0.0; — вертикална скорост в метри в секунда с осредняващ филтър
  • Баро.Преса:1006.49; — барометърно налягане в милибари
  • Baro.Alt:54; - надморска височина според барометъра
  • Baro.Temp:36.99; - температура на самия барометър
  • GPS.Коорд:N56d43m23s,E37d55m68s; — текущи координати
  • GPS.Начало:N56d43m23s,E37d55m68s; — координати на началната точка
  • GPS.Alt:165; — GPS надморска височина в метри
  • GPS.Dst:10; — разстояние от началната точка в метри
  • DS.Temp:[fc]=34.56; - температурен датчик на платката

Как изглежда изходът:

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 
)

Какво да направите, ако клетъчната комуникация „падне“? За този случай имаме втора карта; в модема се поставят две SIM карти (по един слот):

Сървър в облаците: подготвя се за стартиране
Може автоматично да превключи на резервен канал, ако основният внезапно спре да отговаря.

Какво се случва, ако и двете клетъчни мрежи станат недостъпни?

Сървър в облаците: подготвя се за стартиране(Момче от брой "Ералаш" №45 Не напразно той чете "Теорията на вероятностите")

В този случай ще имаме независим GPS тракер, който изпраща сигнал за местоположението си. Моля, имайте предвид, че той прави това не чрез клетъчна мрежа, чиято наличност на големи разстояния не е гарантирана от никого, а чрез сателит.

Сървър в облаците: подготвя се за стартиране
Да, GPS тракерът е малко по-голям от този, който беше имплантиран под кожата на Джеймс Бонд. Тъй като нашата конкуренция зависи от координатите на летящия сървър, тази част от данните, получени от дъската, ще бъдат най-важни. Но ще говорим за това в следващата публикация. Очаквайте скоро, следете нашия блог!

Ние толкова много вярваме в успеха на цялото начинание, че дори обявихме конкурс за тези, които внезапно искат да познаят къде ще кацне топката. Подробности в нашия нова публикация.

Източник: www.habr.com

Добавяне на нов коментар