В споменахме, че през август всички хабражители очаква конкурс с награди. Време е да разкрием тайните. Някога ни хрумна, че фразата "сервер в облаците" може да се разбира буквално. А да стартираме ли наистина работещ сервер в небето, който да можем да пингваме! Първоначално идеята изглеждаше луда, но след като я обмислихме от всички страни и обсъдихме, измислихме начин да изпратим сървера срещу птиците. В края на август ще се проведе епохално стартиране, а засега работим по хардуерната част на проекта. Подробности под кат.
- Сървърът ще бъде с база Raspberry Pi 3
Беше интересно да издигнем еднопанелен сървър, но теглото + теглото на UPS... За всичко това би била нужна значителна подемна сила. И кой знае, ако можем да развием приличен сървър, базиран на компактна Raspberry Pi 3, с изчислителна мощност стотици пъти по-голяма от машината, с която се е забавлявал Тим Бернерс-Ли през 1991 година.
- Сървърът ще бъде пуснат на балон
Имахме идеи да издигнем сървъра на хелиев зонд, но в такъв случай сървърът би бил активно пингван преди балонът да се спука на голяма височина в разредената атмосфера и цялата конструкция да падне на земята. Искахме да удължим "времевия прозорец" до един час и половина. И решихме да използваме балон. Продължителността на полета е два часа. Освен това, въпреки че полетът не е напълно управляем, в коша може да бъде наш инженер, който в случай на неизправност може бързо, на място да "включи и изключи".
- Като транспортна мрежа ще използваме мобилна свързаност
Съвременните WiFi антените могат да "пробият" доста големи разстояния, но за това трябваше да изградим комуникационен комплекс, който само малко отстъпва по параметри на военна радиолокационна станция. И за 1,5-2 часа свързаност не има смисъл да се изгражда такава система, защото на височината на полета на балона мобилната свързаност трябва да работи стабилно.
След формулирането на тези "постулати" проектът престана да изглежда неизпълним и скоро започнахме работа по трите направления.
Първо се обърнахме за помощ към момчетата от , които имат опит с изстрелването на различни устройства на въздуха (с последващо търсене и спасяване).
След това извадихме Raspberry Pi 3, която лежеше в шкафа на нашия администратор, и започнахме да я настройваме.

Свързахме камерата:

И я тестваме на нашия 'Семен':

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

Powerbank се използва за наземно тестване, за стартиране е нужно нещо по-надеждно.
Най-интересният компонент е платката за получаване на данни от всички сензори:

Хората от много се мъчиха с различни аналози, а след това сами създадоха бордови компютър, защото надеждността е решаваща, а данните от телеметрията определят съдбата на целия проект. Бордният компютър е отговорен за получаването на данни от всички свързани сензори и предава информацията на 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; — температурен датчик на платката
Как изглеждат извежданите данни:
Масив
(
[N] => 647
[Т] => 10м55с
[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] => N56д43м23с,E37д55м68с
[GPS_Home] => N56д43м23с,E37д55м68с
[Dst] => 5
[GPS_HSpeed] => 0
[GPS_Course] => 357
[GPS_Time] => 11ч17м40с
[GPS_Date] => 30.07.2018
[DS_Temp] => [fс] 33.56
[Volt] => 5.19, 0.00,0.00,0.00,0.00,0.00,0.00,0.00
)
А какво да правим, ако мобилният сигнал "падне"? За този случай имаме втора карта, в модема се поставят две сим карти (една след друга в един слот):

Той автоматично преминава на резервен канал, ако основният внезапно престане да отговаря.
А какво ще стане, ако и двете мобилни мрежи станат недостъпни?
(Момчето от не случайно чете "Теория на вероятностите")
В такъв случай ще имаме независим GPS-трекер, който изпраща сигнал за местоположението си. Обърнете внимание, че той не го прави чрез мобилна мрежа, чиято достъпност на голямо разстояние не е гарантирана, а чрез сателит.

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