Obsah:

Včasné varovanie Svetlo dráhy Raspberry PI pomocou údajov mapovania letov: 14 krokov (s obrázkami)
Včasné varovanie Svetlo dráhy Raspberry PI pomocou údajov mapovania letov: 14 krokov (s obrázkami)

Video: Včasné varovanie Svetlo dráhy Raspberry PI pomocou údajov mapovania letov: 14 krokov (s obrázkami)

Video: Včasné varovanie Svetlo dráhy Raspberry PI pomocou údajov mapovania letov: 14 krokov (s obrázkami)
Video: Часть 1 - Аудиокнига Герберта Уэллса «Анна Вероника» (гл. 01–03) 2024, November
Anonim
Včasné varovanie Svetlo dráhy Raspberry PI pomocou údajov mapovania letov
Včasné varovanie Svetlo dráhy Raspberry PI pomocou údajov mapovania letov
Včasné varovanie Svetlo dráhy Raspberry PI pomocou údajov mapovania letov
Včasné varovanie Svetlo dráhy Raspberry PI pomocou údajov mapovania letov
Včasné varovanie Svetlo dráhy Raspberry PI pomocou údajov z mapovania letov
Včasné varovanie Svetlo dráhy Raspberry PI pomocou údajov z mapovania letov
Včasné varovanie Svetlo dráhy Raspberry PI pomocou údajov mapovania letov
Včasné varovanie Svetlo dráhy Raspberry PI pomocou údajov mapovania letov

Táto lampa vznikla z niekoľkých dôvodov v tom, že ma vždy zaujímajú lietadlá, ktoré lietajú nad hlavou, a cez leto cez víkendy často lietajú nejaké celkom vzrušujúce. Aj keď ich len počujete, keď prechádzajú okolo. Potom ďalším dôvodom je to, že sa zdá, že letová trasa odchádzajúcich lietadiel z letiska London City bude niekedy počuť a že sa chystajú na dosť hlučné lety. Keďže sa pustím do nahrávania niektorých videí na YouTube, je skutočne otravné zrušiť záznam kvôli hlučnému lietadlu. Zaujímalo by ma, či sú údaje, ktoré vidíte na stránkach, ako je flightradar24, verejne dostupné, akonáhle som zistil, že niečo podobné je dostupné z opensky siete, zrodila sa lampa včasného varovania. Netrvalo dlho a potom prišiel nápad použiť na umiestnenie projektu repliku dráhy.

Viac informácií o sieti OpenSky nájdete na stránke https://www.opensky-network.org Tiež som chcel tentoraz vyrobiť pekný živicový objektív namiesto použitia priesvitného PLA, a hoci mám prijímač ADS-B, chcel som si ponechať toto jednoduché a lacné. ADS-B tiež potrebuje anténu, a to by nestačilo na to, aby sa lampa dostala na poličku v kancelárii. Dúfajme, že vás bude konštrukcia zaujímať, pretože zahŕňa 3D tlač, tvarovanie živíc a matematiku a tiež extrapoláciu polôh lietadiel, ktoré by potenciálne mohli lietať nad hlavou.

Krok 1: Navrhovanie puzdra

Vyhľadávanie Google prichádza s mnohými rôznymi prevedeniami dráhových žiaroviek a tento bol vyrobený s použitím konštrukčných vplyvov z mnohých rôznych značiek skutočných žiaroviek. Je tiež vhodné, aby ste sedeli v miestnosti alebo na poličke, a nie v plnej veľkosti, pretože v skutočnom živote bývajú oveľa väčšie.

Návrhy boli vypracované vo Fusion 360 a niektoré predchádzajúce prvky, ako napríklad držiak na malinový pi nu, som importoval z predchádzajúcich projektov. Schopnosť opakovane používať prvky spôsobuje, že vás zbaví základov veľa bolesti hlavy. Súbory si môžete stiahnuť aj tu

Krok 2: Odlievanie šošoviek - #fail

Odlievanie šošoviek - #fail
Odlievanie šošoviek - #fail
Odlievanie šošoviek - #fail
Odlievanie šošoviek - #fail
Odlievanie šošoviek - #fail
Odlievanie šošoviek - #fail

Najdôležitejším dizajnovým prvkom tejto žiarovky budú šošovky. Riešil som to teda najskôr, pretože bez pekného autenticky vyzerajúceho skla by projekt fungoval. Dokumentujem tu zlyhania, ktoré som mal pri pokuse dosiahnuť to, bez ohľadu na to, že som sa pôvodne rozhodol urobiť šošovku jantárovou. Dráhové svetlá prichádzajú v jantárovej aj modrej farbe a až potom, ako som začal vyrábať jantárové, som zmenil názor a rozhodol som sa, že chcem modré.

Z toho, čo môžem rozlíšiť, sa na pridržiavacej čiare používajú jantárové a modré na pristávaciu dráhu, a to sú tie, ktoré sa zdajú byť archetypálnejšími, ak hľadáte dráhové svetlá. Tu je však môj prvý pokus o výrobu jantárovej šošovky. Na výrobu šošovky som použil čistú zliatinu živice s farebnou prísadou, a hoci som už urobil niekoľko foriem, premýšľal som, či bude možné vytlačiť 3D formu a použiť ju. Začal som teda s výrobou delenej formy v 3D a vytlačením v PetG. Uvážlivé množstvo uvoľňovania plesní, o ktorom som bol presvedčený, že bude stačiť na to, aby sa forma rozptýlila. Ako sa ukázalo pri niekoľkých pokusoch, nechal som živicu prilepiť k forme ako lepidlo a nezdalo sa, že by bolo možné ich oddeliť. Napriek tomu, že som mal ten plný, ktorý sa chystám použiť, rozhodol som sa pre to a vytlačil som šošovku na použitie s tradičným silikónovým tvarovaním.

Krok 3: Rôzne druhy živíc

Rôzne druhy živíc
Rôzne druhy živíc
Rôzne druhy živíc
Rôzne druhy živíc
Rôzne druhy živíc
Rôzne druhy živíc
Rôzne druhy živíc
Rôzne druhy živíc

Ako rýchle bokom som na tento projekt použil 3 druhy čírych/farebných živíc.

Prvý z nich bol Hobby market s názvom Pebeo - Gedeo a bežne sa predáva na zapuzdrenie drobných predmetov a používa sa na šperky a stolové ťažítka. Toto fungovalo celkom dobre a pekne sa vyliečilo za 24 až 36 hodín. Je to však dosť drahé za sumu, ktorú získate, ale je praktické a ľahko dostupné v hobby a remeselných obchodoch. Je zmiešaný v pomere 2: 1. Druhou bola vopred zafarbená živica, ktorá sa zmieša v pomere 10: 1 s tužidlom a jej vytvrdzovanie trvalo najdlhšie, asi týždeň, aby sa úplne vytvrdlo. Posledná bola číra živica, ktorá bola tiež zmiešaná v pomere 2: 1 a ktorá bola vytvrdená asi za 2 dni, môžete ju zafarbiť kvapkami pigmentu, ale musíte sa uistiť, že vždy použijete rovnaký pomer farieb, ak vyrábajú samostatné dávky. Funguje to aj nákladovo najefektívnejšie. Nakoniec bol RTV pre formu GP-3481 RTV a jeho nastavenie trvá asi 24 hodín a má dosť dlhý čas na prípravu, takže máte dostatok času na jeho premiešanie a nalievanie.

V súčasnej dobe nemám vákuový hrniec (v súčasnej dobe na objednávku), aby vás mohli sužovať bublinky vo forme aj v odlievanej živici. Nie je to príliš veľký problém, ale s čistým objektívom alebo podobným objektom by ste chceli premýšľať o tom, ako dostať bubliny zo zmesí.

Krok 4: Odliatok objektívu do silikónovej formy č. 2

Image
Image
Odliatok objektívu do silikónovej formy č. 2
Odliatok objektívu do silikónovej formy č. 2
Odliatok objektívu do silikónovej formy č. 2
Odliatok objektívu do silikónovej formy č. 2

Toto je druhý pokus o výrobu živicovej šošovky a prvým krokom bolo vyrobiť šošovku vo Fusion 360 a potom ju vytlačiť v ABS a vedre, ktoré ju držia. Toto by bolo prvé pre formu a pomohlo by to obmedziť množstvo použitého silikónu. Môžete to ľahko vytvoriť z karty, ale je to len iný prístup. Aby som mal väčšiu šancu, že sa uvoľní z formy, najskôr som ho nalakoval a potom som naň dobre zakryl voskom.

Potom som nalial GP-3481, ktorý je asi na brehu 27 RTV, a potom som nechal 24 hodín stuhnúť, než som vyformoval. Akonáhle to bolo hotové, použil som číru živicu zmiešanú v pomere 2: 1 s asi 4/5 kvapkami farebného pigmentu a dobre premiešal dobré štyri minúty. Nalial to do formy a potom sa tiež vložil do živice sklenený pohár, aby sa neskôr vytvorila prázdnota pre lampu alebo LED diódy. Asi po 24 hodinách bola táto živica pripravená na odstránenie a šošovka vyšla celkom dobre. Sú tam prítomné vzduchové bubliny, ale zatiaľ nemám vákuovú nádobu na odplynenie živice pred nalievaním.

Krok 5: 3D tlač a príprava

3D tlač a príprava
3D tlač a príprava
3D tlač a príprava
3D tlač a príprava
3D tlač a príprava
3D tlač a príprava

Model bol navrhnutý tak, aby sa stredová časť zapojila do základne. To sa malo vyhnúť maskovaniu počas procesu maľovania. Celý model bol vytlačený v Hatchbox ABS a potom brúsený. Počnúc 60 zrnitosťami až po 800 zrnitostí poskytla tomuto modelu dostatočne dobrú povrchovú úpravu.

Krok 6: Montáž a lakovanie

Montáž a lakovanie
Montáž a lakovanie
Montáž a lakovanie
Montáž a lakovanie
Montáž a lakovanie
Montáž a lakovanie

Akonáhle sú výtlačky brúsené, boli potom natreté nejakým základným náterom. Mierne brúsené a potom striekané sivým základným náterom. Hlavné časti boli natreté signalizačnou žltou ford a potom ako základňa bola použitá brooklandská zeleň. vrcholy striebra tamiya sa potom použili na skrutky a na držiak šošoviek sa použil nejaký chróm molotow silver.

Krok 7: Najprv nájdite lietadlá v ohraničujúcej oblasti

S vytriedeným hardvérom bolo potrebné na softvéri zapracovať. V súčasnosti existuje niekoľko webových stránok, ktoré poskytujú sledovanie letov, ale nie veľa z nich poskytuje rozhranie API na prístup k týmto údajom. Niektoré z nich to robia iba na komerčnom základe, ale našťastie existuje jedna stránka s názvom https://opensky-network.org, ktorú môžete používať zadarmo.

Na prístup k týmto údajom sa musíte zaregistrovať a potom môžete použiť ich API, ktoré poskytuje niekoľko funkcií a spôsobov získavania údajov. Máme záujem o všetky lety v rámci oblasti a majú na to výzvu Live API. https://opensky-network.org/apidoc/ nazývaný ohraničovací rámček. Hovor API vyžaduje rohy poľa, ktoré vás zaujímajú, samozrejme ako stredový bod našu zemepisnú šírku/dĺžku. Môžete skontrolovať matematické práce na tomto webe, ktorý nakreslí pole podľa toho, čo zadáte. “Http://tools.geofabrik.de, ale zatiaľ nasledujúci skript uvádza body, ktoré musíme do rozhrania API zapojiť.

funkcia get_bounding_box ($ latitude_in_degrees, $ longitude_in_degrees, $ half_side_in_miles) {$ half_side_in_km = $ half_side_in_miles * 1,609344; $ lat = deg2rad ($ latitude_in_degrees); $ lon = deg2rad ($ longitude_in_degrees); polomer $ = 6371; $ paralelný_radius = $ polomer*cos ($ lat); $ lat_min = $ lat - $ half_side_in_km/$ radius; $ lat_max = $ lat + $ half_side_in_km/$ radius; $ lon_min = $ lon - $ half_side_in_km/$ paralelný_radius; $ lon_max = $ lon + $ half_side_in_km/$ parallel_radius; $ box_lat_min = rad2deg ($ lat_min); $ box_lon_min = rad2deg ($ lon_min); $ box_lat_max = rad2deg ($ lat_max); $ box_lon_max = rad2deg ($ lon_max); návratové pole ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max);

Ak chcete otestovať svoj kód, existuje stránka, kde môžete zadať zemepisnú šírku a dĺžku a zobraziť výsledky na mape: Pozrite si príklad ohraničujúceho rámčeka na mape

Krok 8: Výpočet nadpisu rovín vo vzťahu k nám

Výpočet nadpisu rovín vo vzťahu k nám
Výpočet nadpisu rovín vo vzťahu k nám

Výsledky z volania API ohraničujúceho rámčeka nám poskytujú zoznam lietadiel, ich dĺžku/šírku, rýchlosť, nadmorskú výšku a smer. Ďalšia vec, ktorú musíme urobiť, je získať smerovanie každej roviny vo vzťahu k nám, aby sme mohli ďalej spracovávať tie, ktoré smerujú aspoň naším všeobecným smerom. Môžeme to urobiť, pretože poznáme svoju polohu a dokážeme vypočítať uhol od nás k každej rovine.

Na to používam kúsok kódu, z ktorého bol pôvodne Javascript, takže som ho tu previedol do PHP, * vypočítajte (počiatočné) ložisko medzi dvoma bodmi * * z: Aviation Formulary Eda Williamsa, https://williams.best.vwh.net/avform.htm#Crs * source = instantglobe.com/CRANES/GeoCoordTool.html */ funkcia get_bearing ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ lat1 = deg2rad ($ home_lat); $ lat2 = deg2rad ($ plane_lat);

$ dLon = deg2rad ($ plane_lon- $ home_lon);

$ y = hriech ($ dLon) * cos ($ lat2);

$ x = cos ($ lat1)*sin ($ lat2) - sin ($ lat1)*cos ($ lat2)*cos ($ dLon); $ z = atan2 ($ y, $ x); $ zz = (rad2deg ($ z) +360)% 360; vrátiť $ zz;

Ak sa chcete pozrieť na stránku, kde sú pôvodné verzie javascriptu, toto je odkaz:

v rámci tohto kódu môžete tiež vidieť rôzne čiastkové rutiny pre každý typ výpočtu.

Krok 9: Výpočet priesečníka pohľadom na kruh

Výpočet priesečníka pohľadom na kruh
Výpočet priesečníka pohľadom na kruh

Teraz teda máme rovinu, kde ložisko medzi ním a našou polohou je menšie ako 90 (kladné alebo záporné), a preto to znamená, že existuje šanca, že by mohla lietať blízko. Pomocou vzorca haversine môžeme tiež vypočítať vzdialenosť Lon/Šírka roviny a Lon/Šírka nášho domu na vzdialenosť, ktorá je od nás vzdialená.

Keď sa pozrieme na diagram, ak nakreslíme kruh okolo nášho domu, povedzme v okruhu 3 míle, dáva nám to šancu vidieť, ako niečo letí. Poznáme rozdiel v smerovaní medzi rovinou a nami, poznáme aj vzdialenosť lietadla od nás, aby sme potom mohli vypočítať trojuholník pomocou starého dobrého SOHCAHTOA a v tomto prípade pomocou Tan uhla, ktorý dostaneme dĺžka opačnej strany. Ak teda porovnáme túto hodnotu s hodnotou polomeru kruhu okolo domu, môžeme zistiť, či lietadlo bude lietať dostatočne blízko na to, aby sme ho videli. Ďalší kúsok, ktorý môžeme urobiť, je vypočítať čas, za ktorý lietadlo preletí, pomocou rýchlosti vzduchu a vzdialenosti, a ak je to menej ako 45 sekúnd, zapneme svetlo. Toto je trochu kód, ktorý používam na výpočet šance na prelet. Robím to, pretože v blízkosti je letisko a keď lietajú lietadlá okolo, nevyhnutne ukazujú na dom. Keďže je však ich výška nulová a rýchlosť kráča, nemalo by to spustiť alarm.

funkcia get_intercept ($ home_head, $ plane_head, $ plane_distance) {

$ flight_angle = abs (abs ($ home_head - $ plane_head) - 180); $ flight_angle_r = deg2rad ($ flight_angle); $ flight_angle_t = tan ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ plane_distance;

if (($ flight_angle <90) && ($ flight_intercept <3)) {// možné prelet

}

vrátiť $ flight_intercept;

}

Krok 10: Vzdialenosť medzi dvoma bodmi na mape - vzorec Haversine

Vzdialenosť medzi dvoma bodmi na mape - Haversine Formula
Vzdialenosť medzi dvoma bodmi na mape - Haversine Formula

Musíme teda vypočítať vzdialenosť medzi lietadlom a našou polohou. Na krátkych vzdialenostiach na mape ste mohli približne vypočítať vzdialenosť, ale keďže Zem je sférická, existuje vzorec nazývaný haversínový vzorec, ktorý vám umožňuje vziať do úvahy zakrivený povrch. Ďalej si môžete prečítať vzorec:

Teraz, keď je vypočítaná vzdialenosť a poznáme rýchlosť lietadla, dokážeme vypočítať, koľko sekúnd bude trvať, kým bude lietadlo nad hlavou. Svetlo sa teda rozsvieti, ak je do 30 sekúnd od minulej pasty niečo, a konečne máme výstražné svetlo.

* založené na 0n JS na instantglobe.com/CRANES/GeoCoordTool.html a zmenené na PHP */

funkcia get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // priemerný polomer Zeme v km $ dLat = deg2rad ($ plane_lat- $ home_lat); $ dLon = deg2rad ($ plane_lon- $ home_lon); $ lat1 = deg2rad ($ home_lat); $ lat2 = deg2rad ($ plane_lat);

$ a = sin ($ dLat/2) * sin ($ dLat/2) + cos ($ lat1) * cos ($ lat2) * sin ($ dLon/2) * sin ($ dLon/2);

$ c = 2 * atan2 (sqrt ($ a), sqrt (1- $ a)); $ d = $ R * $ c; vrátiť $ d; }

Krok 11: Import a definícia databázy lietadiel

Jedným z ďalších kúskov je, že stránka opensky ponúka databázu lietadiel na stiahnutie spolu s ich značkami a identitami. Je to niekoľko stoviek tisíc záznamov. Môžeme to teda stiahnuť a lokálne načítať do databázy MariaDB na vyhľadávanie (MySQL). Pri každom lietadle, ktoré sa objaví nad hlavou, získavame jeho detaily a aktualizujeme počítadlo, aby sme ukázali, koľkokrát ho videli.

Aktuálne tiež upravujem databázu, aby som zvýraznil lietadlá, ktoré ma zaujímajú. Hlavne staré vojnové vtáky a iné podobné zaujímavé lietadlá. V lete toto lietadlo niekoľkokrát preletelo. cieľom je teda použiť výstražné pole, ktoré som pridal, a potom rýchlo zablikať, keď niečo zaujímavé smeruje

Krok 12: Zlepšenie výsledkov a nových funkcií

Vylepšenie výsledkov a nových funkcií
Vylepšenie výsledkov a nových funkcií
Vylepšenie výsledkov a nových funkcií
Vylepšenie výsledkov a nových funkcií
Vylepšenie výsledkov a nových funkcií
Vylepšenie výsledkov a nových funkcií

Takže teoreticky všetko funguje celkom dobre, ale s údajmi zistíte, že lietajú lietadlá, ktoré sa v rozhraní API nezobrazujú.

Dôvodom je, že nie všetky lietadlá používajú transpondér ADS-B a používajú staršie transpondéry založené na MLAT. Na získanie údajov o polohe lietadiel pomocou systému MLAT je potrebná séria prijímačov na zemi na trianguláciu ich polohy a niektoré stránky, ako napríklad flightradar24, majú v porovnaní s opensky väčšiu sieť prispievateľov. Našťastie sa postupom času zlepší aj ich pokrytie a nastavujem vlastný prijímač MLAT na doplnenie týchto údajov.

Krok 13: Kódová základňa

Nezabudnite, že ak to použijete, možno budete chcieť odstrániť príkazy SQL, ak nemáte databázu lietadiel, a tiež pridať vlastnú hodnotu Lon/Lat a kľúč API na prístup k letovým údajom.

github.com/ajax-jones/runway-light-awacs

definovať („INTERVAL“, (20 * 1)); funkcia fexp () {$ lat = "vaša zemepisná šírka"; $ lon = "vaša zemepisná dĺžka"; $ strana = 15,75; $ box = get_bounding_box ($ lat, $ lon, $ side); $ latmin = $ box [0]; $ lonmin = $ box [1]; $ latmax = $ box [2]; $ lonmax = $ box [3]; $ flyurl = "https://opensky-network.org/api/states/all?lamin=$latmin&lomin=$lonmin&lamax=$latmax&lomax=$lonmax"; echo „Skenovanie neba“; $ start_time = mikrotime (true); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, TRUE); $ inbound = FALSE; $ num_planes = počet ($ data ['stavy']); if ($ num_planes> 0) {echo "a vidíme $ num_planes roviny / n"; pre ($ x = 0; $ x 0) {$ plane_eta = $ distplane/$ air_speed_kmh; } else {$ eta = 1; } if ((($ intercept) 0)) && ($ distplane0) {$ inbound = TRUE; echo “------------------------------------------------ -------------------- / n "; echo "$ icao24 - [$ country $ callsign] na [$ geo_altitude_m M - $ geo_altitude_f ft]"; echo "[rýchlosť $ air_speed_kmh kmh a", okrúhle ($ distplane, 1), "km ďaleko] n"; echo "[na záhlaví", okrúhle ($ plane_heading, 1), "] [homeangle $ nadpis_d]"; echo "[$ zemepisná šírka, $ zemepisná dĺžka] n"; echo "[flypast in", decimal_to_time ($ plane_eta), "now", round ($ intercept, 1), "km away / n"; echo “------------------------------------------------ -------------------- / n "; $ DBi = nový mysqli ("127.0.0.1", "root", "vaše heslo", "awacs"); $ sql = "vyberte * z databázy lietadiel, kde` icao24` = '$ icao24' "; mysqli_set_charset ($ DBi, "utf8"); $ getplanedata = mysqli_query ($ DBi, $ sql) alebo die (mysqli_error ($ DBi)); $ row_getplanedata = mysqli_fetch_assoc ($ getplanedata); $ row_getplanedata = mysqli_num_rows ($ getplanedata); if ($ rows_getplanedata> 0) {do {echo "callsign ="; echo $ row_getplanedata ['registrácia']; echo "je"; echo $ row_getplanedata ['výrobné meno']; echo ""; echo $ row_getplanedata ['model']; ozvena „od“; echo $ row_getplanedata ['manufacturingicao']; echo „vo vlastníctve“; echo $ row_getplanedata ['vlastník']; echo „vidieť“; echo $ row_getplanedata ['návštevy']; echo „časy“; echo "špeciálne hodnotenie ="; echo $ row_getplanedata ['special']; echo "\ n"; $ visit = $ row_getplanedata ['visit']+1; } while ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "AKTUALIZOVAŤ databázu lietadiel NASTAVIŤ návštevy = $ návštevy WHERE icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) alebo die (mysqli_error ($ DBi)); } else {echo "Túto rovinu sa nepodarilo nájsť v databáze, takže ju pridávam"; $ sqli = "VLOŽIŤ DO DATABÁZE lietadiel (icao24, návštevy, špeciálne) HODNOTY ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) alebo die (mysqli_error ($ DBi)); } echo "----------------------------------------------- --------------------- / n "; } else {// echo "$ volacia znacka"; }}} else {echo "a obloha je jasná / n"; } if ($ inbound) {echo "Inbound plane / n"; $ command = "ošípané w 17 1"; execInBackground (príkaz $); } else {echo "žiadne prichádzajúce lety / n"; $ command = "ošípané w 17 0"; execInBackground (príkaz $); }} funkcia decimal_to_time ($ desatinne) {$ offset = 0,002778; if ($ decimal> $ offset) {$ decimal = $ decimal - 0,002778; } $ hours = gmdate ('H', floor ($ decimal * 3600)); $ minutes = gmdate ('i', floor ($ decimal * 3600)); $ seconds = gmdate ('s', floor ($ decimal * 3600)); vrátiť str_pad ($ hodín, 2, „0“, STR_PAD_LEFT). ":". str_pad ($ minút, 2, „0“, STR_PAD_LEFT). ":". str_pad ($ sekúnd, 2, „0“, STR_PAD_LEFT); }/ * * vypočítajte (počiatočný) vzťah medzi dvoma bodmi * * z: Aviation Formulary Eda Williamsa, https://williams.best.vwh.net/avform.htm#Crs * source = instantglobe.com/CRANES/GeoCoordTool. html */ funkcia get_bearing ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ lat1 = deg2rad ($ home_lat); $ lat2 = deg2rad ($ plane_lat); $ dLon = deg2rad ($ plane_lon- $ home_lon); $ y = hriech ($ dLon) * cos ($ lat2); $ x = cos ($ lat1)*sin ($ lat2) - sin ($ lat1)*cos ($ lat2)*cos ($ dLon); $ z = atan2 ($ y, $ x); $ zz = (rad2deg ($ z) +360)% 360; vrátiť $ zz; } funkcia get_intercept ($ home_head, $ plane_head, $ plane_distance) {$ flight_angle = abs (abs ($ home_head - $ plane_head) - 180); $ flight_angle_r = deg2rad ($ flight_angle); $ flight_angle_t = tan ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ plane_distance; vrátiť $ flight_intercept; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *// * * Na výpočet vzdialenosti (v km) medzi dvoma bodmi určenými * zemepisnou šírkou/dĺžkou (v číselných stupňoch) * * z: Haversinovho vzorca - RW použite vzorec HaversineSinnott, „Virtues of the Haversine“, * Sky and Telescope, zv. 68, č. 2, 1984 * https://williams.best.vwh.net/avform.htm#Crs * * príklad použitia z formulára: * result.value = LatLon.distHaversine (lat1.value.parseDeg (), long1.value.parseDeg (), * lat2.value.parseDeg (), long2.value.parseDeg ()); * kde lat1, long1, lat2, long2 a result sú polia formulára * source = instantglobe.com/CRANES/GeoCoordTool.html */function get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // priemerný polomer Zeme v km $ dLat = deg2rad ($ plane_lat- $ home_lat); $ dLon = deg2rad ($ plane_lon- $ home_lon); $ lat1 = deg2rad ($ home_lat); $ lat2 = deg2rad ($ plane_lat); $ a = sin ($ dLat/2) * sin ($ dLat/2) + cos ($ lat1) * cos ($ lat2) * sin ($ dLon/2) * sin ($ dLon/2); $ c = 2 * atan2 (sqrt ($ a), sqrt (1- $ a)); $ d = $ R * $ c; vrátiť $ d; } funkcia get_bounding_box ($ latitude_in_degrees, $ longitude_in_degrees, $ half_side_in_miles) {$ half_side_in_km = $ half_side_in_miles * 1,609344; $ lat = deg2rad ($ latitude_in_degrees); $ lon = deg2rad ($ longitude_in_degrees); polomer $ = 6371; # Polomer rovnobežky na danej zemepisnej šírke; $ paralelný_radius = $ polomer*cos ($ lat); $ lat_min = $ lat - $ half_side_in_km/$ radius; $ lat_max = $ lat + $ half_side_in_km/$ radius; $ lon_min = $ lon - $ half_side_in_km/$ paralelný_radius; $ lon_max = $ lon + $ half_side_in_km/$ parallel_radius; $ box_lat_min = rad2deg ($ lat_min); $ box_lon_min = rad2deg ($ lon_min); $ box_lat_max = rad2deg ($ lat_max); $ box_lon_max = rad2deg ($ lon_max); návratové pole ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max); } funkcia execInBackground ($ cmd) {if (substr (php_uname (), 0, 7) == "Windows") {pclose (popen ("start /B". $ cmd, "r")); } else {exec ($ cmd. "> /dev /null &"); }} funkcia checkForStopFlag () {// úplne voliteľný návrat (TRUE); } funkcia start () {echo "začína / n"; $ command = "ošípané w 17 1"; execInBackground (príkaz $); $ aktívny = PRAVDA; while ($ active) {usleep (1000); // voliteľné, ak chcete byť ohľaduplní, ak (microtime (true)> = $ nextTime) {fexp (); $ nextTime = mikrotime (true) + INTERVAL; } $ active = checkForStopFlag (); }} fexp (); štart (); ?>

Krok 14: Zapojenie LED diódy a vypínača

Zapojenie LED a vypínača
Zapojenie LED a vypínača

Zapojenie tohto projektu nemôže byť skutočne jednoduchšie. Existuje iba jedna LED dióda, ktorá je pripojená k kolíku 17 a uzemneniu vloženým odporom 270R.

Tiež zahrnujem tlačidlo vypnutia a zapnutia spolu s LED diódou napájania, ktorá prebieha mimo dátového kolíka TXd. Viac informácií o funkcii vypnutia a požadovanom kóde nájdete na https://github.com/Howchoo/pi-power-button.git zo stránky https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow … O pridaní kontrolky napájania si môžete prečítať tu

Odporúča: