Сервер у хмарах: готуємось до запуску

В посту про регату ми обмовилися, що у серпні на всіх хабражителів чекає конкурс із призами. Настав час зірвати покриви завісу секретності. Якось нам спало на думку, що фразу «сервер у хмарах» можна зрозуміти буквально. А давайте справді запустимо у небо працюючий сервер, який можна буде попінгувати! Спочатку ідея виглядала божевільною, але покрутивши її так і так, обговоривши на всі лади, ми все ж таки придумали спосіб відправити сервер назустріч птахам. Вже наприкінці серпня відбудеться епохальний запуск, а поки що ми відпрацьовуємо апаратну частину проекту. Деталі під катом.

Сервер у хмарах: готуємось до запуску

  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.Stage:0; - стадія польоту (0 - на землі або нижче 1км, 1 - підйом, 2 - зависання на висоті, 3 - спуск)
  • MP.Alt: 54; — барометрична висота за метри від рівня моря — її слід виводити
  • MP.VSpeed:0.0; - Вертикальна швидкість в метрах в секунду з медіанним фільтром
  • MP.AvgVSpeed:0.0; - Вертикальна швидкість в метрах в секунду з середнім фільтром
  • Baro.Press:1006.49; - Тиск по барометру в мілібарах
  • Baro.Alt:54; - Висота по барометру
  • Baro.Temp:36.99; - Температура самого барометра
  • GPS.Coord:N56d43m23s,E37d55m68s; - поточні координати
  • GPS.Home: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 
)

А що робити, якщо стільниковий зв'язок «впаде»? На цей випадок у нас є друга картка, в модем вставляються дві сімки (в один слот по черзі):

Сервер у хмарах: готуємось до запуску
Він вміє автоматично перемикатися на запасний канал, якщо основний раптом перестає відгукуватися.

А що буде, якщо обидві стільникові мережі стануть недоступними?

Сервер у хмарах: готуємось до запуску(Хлопчик із випуску «Єралаш» №45 не дарма читає «Теорію ймовірностей»)

На цей випадок у нас буде незалежний GPS-трекер, який надсилає сигнал про своє місцезнаходження. Зверніть увагу, що робить це не через стільникову мережу, доступність якої на великій відстані ніким не гарантована, а через супутник.

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

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

Джерело: habr.com

Додати коментар або відгук