Server în nori: ne pregătim de lansare

В postare despre regata Am menționat că în august va avea loc un concurs cu premii pentru toți Habrazhitels. A sosit timpul să rupem vălul secretului. Cumva ne-a venit ideea că expresia „server în nori” poate fi luată la propriu. Să lansăm, de fapt, un server de lucru în cer, care poate fi ping! La început ideea părea nebunească, dar după ce am răsucit-o într-un loc, discutând în toate privințele, am venit în sfârșit cu o modalitate de a trimite serverul către păsări. O lansare de epocă va avea loc la sfârșitul lunii august, dar deocamdată lucrăm la partea hardware a proiectului. Detalii sub croiala.

Server în nori: ne pregătim de lansare

  1. Serverul va fi bazat pe Raspberry Pi 3

    Ar fi interesant să ridici în aer un server cu o singură unitate, dar greutatea lui + greutatea UPS-ului... Toate acestea ar necesita o forță de ridicare considerabilă. Și de ce, dacă pe baza unui Raspberry Pi 3 compact poți implementa un server destul de decent, cu o putere de calcul de câteva sute de ori mai mare decât mașina pe care Tim Berners-Lee s-a distrat în 1991.

  2. Să lansăm serverul într-un balon cu aer cald

    Aveam idei pentru a ridica serverul pe o sondă de heliu, dar apoi serverul nu va suna mult timp înainte ca balonul să explodeze la mare altitudine într-o atmosferă rarefiată și întreaga structură să cadă la pământ. Am vrut să extind „fereastra” timpului de antenă la o oră și jumătate. Și apoi au decis să folosească un balon. Durata zborului este de două ore. În plus, deși zborul nu este în întregime controlabil, este posibil să existe în coș inginerul nostru, care, în cazul unei defecțiuni, poate rapid, chiar la fața locului, „porni și opri”.

  3. Vom folosi comunicațiile celulare ca rețea de transport

    Antenele WiFi moderne pot „perfora” distanțe destul de lungi, dar pentru aceasta ar fi necesar să se construiască un complex de comunicații care nu este cu mult inferior în parametrii săi unei stații radar militare. Și de dragul a 1,5-2 ore de comunicare, nu are sens să construim un astfel de sistem, deoarece la altitudinea balonului, comunicațiile celulare trebuie să funcționeze stabil.

După formularea acestor „postulate”, proiectul nu mai părea impracticabil, iar curând am început să lucrăm în toate cele trei direcții deodată.

În primul rând, am apelat la băieții de la nearspace.ru, care a mâncat câinele în timp ce a lansat în aer tot felul de bucăți de fier (cu căutare și salvare ulterioară).

Apoi am scos Raspberry Pi 3, care stătea pe noptiera administratorului nostru și am început să-l instalăm.

Server în nori: ne pregătim de lansare
Camera conectată:

Server în nori: ne pregătim de lansare
Și l-am testat pe „Semyon” nostru:

Server în nori: ne pregătim de lansare
Semyon este foarte convenabil ca model și asistent - nu cere mâncare, nu este distras de telefon, este întotdeauna într-o dispoziție grozavă și cu un zâmbet larg de peste tot pe cască. Desigur, nu avem nevoie de un astfel de costum spațial pentru zbor, dar creează atmosfera potrivită în birou.

Schema proiectului este după cum urmează:

Server în nori: ne pregătim de lansare
Powerbank este folosit pentru testarea la sol; este nevoie de ceva mai fiabil pentru lansare.

Poate cea mai interesantă piesă hardware este o placă pentru primirea datelor de la toți senzorii:

Server în nori: ne pregătim de lansare
Băieți de la nearspace.ru Ne-am luptat mult timp cu diverși analogi, apoi am făcut singuri un computer de bord, deoarece fiabilitatea este de o importanță decisivă, soarta întregului proiect depinde de datele de telemetrie. Computerul de bord este responsabil pentru primirea datelor de la toți senzorii conectați și transmiterea acestora către Raspberry Pi.

L-am lansat, l-am configurat și, după câteva săptămâni de programare și ghemuiri cu tamburine, am reușit să obținem date de telemetrie și o fotografie a lui Semyon de la o cameră cu unghi larg:

Server în nori: ne pregătim de lansare
Datele de telemetrie sunt transmise pe o singură linie sub următoarea formă:

Server în nori: ne pregătim de lansare
Acest cod convertește apoi șirul într-o matrice și trimite datele pe site:

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

Descrierea unor date:

  • N:2432; — numărul pachetului de date, în continuă creștere
  • T:40m39s; — timpul din momentul în care controlerul de zbor este pornit
  • MP.Stage:0; — etapa de zbor (0 — la sol sau sub 1 km, 1 — urcare, 2 — planare la altitudine, 3 — coborâre)
  • MP.Alt:54; — altitudinea barometrică în metri față de nivelul mării — ar trebui să fie afișată
  • MP.VSviteza:0.0; — viteza verticală în metri pe secundă cu filtru median
  • MP.AvgVSspeed:0.0; — viteza verticală în metri pe secundă cu filtru de mediere
  • Baro.Press:1006.49; — presiunea barometrului în milibari
  • Baro.Alt:54; - altitudinea conform barometrului
  • Baro.Temp:36.99; - temperatura barometrului propriu-zis
  • GPS.Coord:N56d43m23s,E37d55m68s; - coordonatele curente
  • GPS.Acasă:N56d43m23s,E37d55m68s; — coordonatele punctului de plecare
  • GPS.Alt:165; — Altitudine GPS în metri
  • GPS.Dst:10; — distanța de la punctul de plecare în metri
  • DS.Temp:[fc]=34.56; - senzor de temperatura de pe placa

Cum arată rezultatul:

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 
)

Ce să faci dacă comunicarea celulară „cade”? Pentru acest caz, avem o a doua cartelă; două cartele SIM sunt introduse în modem (câte un slot):

Server în nori: ne pregătim de lansare
Poate comuta automat la un canal de rezervă dacă cel principal nu mai răspunde brusc.

Ce se întâmplă dacă ambele rețele celulare devin indisponibile?

Server în nori: ne pregătim de lansare(Băiat din ediția „Yeralash” nr. 45 Nu degeaba citește „Teoria probabilității”)

În acest caz, vom avea un tracker GPS independent care trimite un semnal despre locația sa. Vă rugăm să rețineți că nu face acest lucru printr-o rețea celulară, a cărei disponibilitate pe distanțe lungi nu este garantată de nimeni, ci printr-un satelit.

Server în nori: ne pregătim de lansare
Da, tracker-ul GPS este ceva mai mare decât cel care a fost implantat sub pielea lui James Bond. Deoarece competiția noastră depinde de coordonatele serverului de zbor, această parte a datelor primite de la bord va fi cea mai importantă. Dar despre asta vom vorbi în următoarea postare. În curând, urmăriți blogul nostru!

Credem atât de mult în succesul întregii întreprinderi încât am anunțat chiar și un concurs pentru cei care vor dintr-o dată să ghicească unde va ateriza mingea. Detalii în nostru postare noua.

Sursa: www.habr.com

Adauga un comentariu