Turinys:
- 1 žingsnis: dėklo projektavimas
- 2 žingsnis: lęšių liejimas - #fail
- 3 žingsnis: Įvairių rūšių derva
- 4 žingsnis: Objektyvo liejimas silikoninėje formoje #2
- 5 žingsnis: 3D spausdinimas ir paruošimas
- 6 žingsnis: surinkimas ir dažymas
- 7 žingsnis: pirmiausia raskite lėktuvus ribojančioje zonoje
- 8 žingsnis: apskaičiuokite lėktuvų kryptį, susijusią su mumis
- 9 žingsnis: perėmimo apskaičiavimas žiūrint į apskritimą
- 10 žingsnis: atstumas tarp dviejų žemėlapio taškų - Haversine formulė
- 11 veiksmas: plokštumos duomenų bazės importavimas ir apibrėžimas
- 12 veiksmas: rezultatų ir naujų funkcijų tobulinimas
- 13 žingsnis: kodų bazė
- 14 veiksmas: šviesos diodo ir išjungimo jungiklio prijungimas
Video: Išankstinio įspėjimo Raspberry PI kilimo ir tūpimo tako šviesa naudojant skrydžio žemėlapių duomenis: 14 žingsnių (su paveikslėliais)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:46
Ši lempa atsirado dėl kelių priežasčių, nes mane visada domina virš galvos skrendantys lėktuvai, o vasarą savaitgaliais dažnai skraido gana įdomūs. Nors jūs linkę juos girdėti tik einant pro šalį. Kita priežastis yra ta, kad atrodo, kad iš Londono Sičio oro uosto atvykstančių lėktuvų skrydžio trajektorija kartais bus išgirsta ir jie turi gana triukšmingų skrydžių. Kadangi aš užsiimu kai kurių „YouTube“vaizdo įrašų įrašymu, tai tikrai erzina, kad dėl triukšmingo lėktuvo reikia atsisakyti įrašo. Taigi aš susimąsčiau, ar duomenys, kuriuos matote tokiose svetainėse kaip „flightradar24“, yra viešai prieinami, kai sužinojau, kad kažkas panašaus yra prieinama iš „openky“tinklo, atsirado ankstyvoji įspėjamoji lemputė. Neilgai trukus kilo mintis panaudoti kilimo ir tūpimo tako šviesos kopiją.
Daugiau apie „OpenSky“tinklą galite sužinoti adresu https://www.opensky-network.org. Aš taip pat norėjau, kad šį kartą padarytumėte gražų dervos objektyvą, o ne permatomą PLA, ir nors turiu ADS-B imtuvą, kurį norėjau pasilikti tai paprasta ir pigu. ADS-B taip pat reikia antenos, o tai nepadarytų lempos, esančios biuro lentynoje. Tikimės, kad konstrukcija jums bus įdomi, nes ji apima 3D spausdinimą, dervos formavimą ir matematiką, taip pat ekstrapoliuoti orlaivių, galinčių praskristi virš galvos, pozicijas.
1 žingsnis: dėklo projektavimas
„Google“paieška siūlo daugybę skirtingų kilimo ir tūpimo tako lempų dizaino, o šios lempos dizainas buvo sukurtas naudojant dizaino įtaką iš daugelio skirtingų gamintojų tikrų lempų. Taip pat yra mastelis sėdėti kambaryje ar lentynoje, o ne visu dydžiu, nes realiame gyvenime jie yra daug didesni.
Dizainai buvo sukurti naudojant „Fusion 360“, o iš ankstesnių projektų importavau kai kuriuos ankstesnius elementus, pvz., Aviečių pi nulio laikiklį. Galimybė pakartotinai naudoti elementus atima daug galvos skausmo, kai nesugadinama pagrindų. Failus taip pat galite atsisiųsti čia
2 žingsnis: lęšių liejimas - #fail
Svarbiausias šios lempos dizaino elementas buvo objektyvas. Taigi aš pirmiausia išsprendžiau tai, nes be gražios autentiškos išvaizdos projekto projektas veiks. Čia dokumentuoju nesėkmes, kurias patyriau bandydamas tai pasiekti, neatsižvelgdamas į tai, kad iš pradžių taip pat nusprendžiau objektyvą padaryti gintaro spalvos. Kilimo ir tūpimo tako žibintai būna ir gintaro, ir mėlynos spalvos, ir tik tada, kai pradėjau gaminti gintarinį, persigalvojau ir nusprendžiau, kad noriu mėlyno.
Iš to, ką suprantu, gintaro spalvos yra naudojamos laikymo linijoje, o mėlynos spalvos - tiesti kilimo ir tūpimo taką, ir tai yra tie, kurie atrodo labiau archetipiniai, jei ieškote kilimo ir tūpimo tako žiburių. Tačiau čia yra mano pirmasis bandymas pasigaminti gintaro spalvos objektyvą. Norėdami pagaminti objektyvą, ketinau naudoti skaidrią dervą su spalvų priedu, ir nors aš padariau keletą formų, kol pagalvojau, ar bus įmanoma atspausdinti 3D formą ir ją naudoti. Taigi aš pradėjau padaryti padalintą formą 3D formatu ir išspausdinti ją „PetG“. Buvau įsitikinęs, kad pelėsio išsiskyrimui pakaks protingo pelėsio išsiskyrimo. Kaip paaiškėja po kelių bandymų, dervą prilipdžiau prie formos kaip klijus, ir neatrodė įmanoma juos atskirti. Nors turėjau visą mastelį, kurį ketinau naudoti, nusprendžiau prieš jį ir išspausdinau objektyvą, kuris bus naudojamas su tradiciniu silikoniniu liejimu.
3 žingsnis: Įvairių rūšių derva
Greitai šiam projektui panaudojau 3 rūšių skaidrias/spalvotas dervas.
Pirmasis buvo „Hobby“turgaus tipas, vadinamas „Pebeo - Gedeo“ir paprastai parduodamas smulkių daiktų kapsuliavimui, naudojamas juvelyriniams dirbiniams ir staliniams popieriaus svoriams ir pan. Tai veikė gana gerai ir gerai sukietėjo maždaug per 24–36 valandas. Tačiau jis yra gana brangus už gautą sumą, tačiau yra patogus ir lengvai prieinamas pomėgių ir amatų parduotuvėse. Jis sumaišomas santykiu 2: 1. Antroji buvo iš anksto nuspalvinta derva, sumaišyta su kietikliu santykiu 10: 1, ir tai užtrunka ilgiausiai, maždaug savaitę, kol jis visiškai sukietėja. Paskutinis buvo skaidrus derva, kuris taip pat buvo sumaišytas santykiu 2: 1 ir sukietėjo maždaug per 2 dienas. Galite nuspalvinti pigmento lašais, tačiau turite įsitikinti, kad visada naudojate tą patį spalvų santykį, gamina atskiras partijas. Tai taip pat yra ekonomiškiausia. Galiausiai pelėsių RTV buvo GP-3481 RTV, o tai užtrunka apie 24 valandas ir turi gana ilgą puodą, todėl turite daug laiko jį sumaišyti ir tada supilti.
Šiuo metu neturiu dulkių siurblio (šiuo metu užsakomas), kad jus galėtų apimti burbuliukai tiek formoje, tiek liejant dervą. Tai nėra per daug problema, tačiau turėdami aiškų ar panašų objektyvą, jūs norėtumėte galvoti apie tai, kaip pašalinti burbuliukus iš mišinių.
4 žingsnis: Objektyvo liejimas silikoninėje formoje #2
Taigi tai yra antrasis bandymas gaminti „Resin“objektyvą, o pirmasis etapas buvo pagaminti abu „Fusion 360“lęšius, tada atspausdinti juos ABS ir kibirą, kad būtų galima laikyti. Tai būtų pirmasis pelėsiui ir padėtų sumažinti naudojamo silikono kiekį. Tai galite lengvai padaryti iš kortelės, tačiau tai tik kitoks požiūris. Kad būtų didesnė tikimybė, kad ji bus išleista iš formos, aš pirmiausia ją nulakuosiu, o paskui gerai padengiau vaško išsiskyrimo priemonę.
Tada užpyliau GP-3481, kuris yra maždaug 27 kranto RTV, ir palikau nusistovėti per kitas 24 valandas prieš išardymą. Kai tai buvo padaryta, aš panaudojau skaidrią dervą, sumaišytą santykiu 2: 1, su maždaug 4/5 lašais spalvoto pigmento ir gerai išmaišiau geras keturias minutes. Įpylė tai į formą, o po to į dervą įdėjo stiklinę, kad vėliau būtų tuštuma lempai arba šviesos diodams. Po maždaug 24 valandų ši derva buvo paruošta pašalinti, o lęšis pasirodė gana geras. Yra oro burbuliukų, bet kol kas neturiu vakuuminio indo, kuriuo prieš pilant degazuoti dervą.
5 žingsnis: 3D spausdinimas ir paruošimas
Modelis buvo sukurtas taip, kad centrinė dalis būtų prijungta prie pagrindo. Taip buvo siekiama išvengti maskavimo dažymo metu. Visas modelis buvo atspausdintas „Hatchbox ABS“ir tada šlifuotas. Pradedant nuo 60 smėlio iki maždaug 800 grūdų, šiam modeliui buvo suteikta pakankamai gera paviršiaus apdaila.
6 žingsnis: surinkimas ir dažymas
Kai atspaudai nušlifuoti, jis buvo nudažytas aukšto lygio gruntu. Švelniai šlifuojama, o po to purškiama pilku gruntu. Pagrindinės dalys buvo nudažytos „Ford signalo“geltona spalva, o vėliau bazė buvo naudojama žalia. Tamiya sidabro akcentai buvo pritvirtinti prie varžtų ir šiek tiek sidabro chromo, naudojamo ant objektyvo laikiklio.
7 žingsnis: pirmiausia raskite lėktuvus ribojančioje zonoje
Sutvarkius aparatūrą, reikėjo dirbti su programine įranga. Dabar yra keletas svetainių, kuriose teikiamas skrydžio stebėjimas, tačiau nedaug yra tokių, kurios teikia API, kad galėtų pasiekti šiuos duomenis. Kai kurie tai daro tik komerciniais pagrindais, bet, laimei, yra viena svetainė, pavadinta https://opensky-network.org, kurią galite naudoti nemokamai.
Norėdami pasiekti šiuos duomenis, turite užsiregistruoti, o tada galėsite naudoti jų API, jame pateikiamos kelios funkcijos ir būdai duomenims ištraukti. Mus domina visi skrydžiai tam tikroje vietovėje, ir jie tam turi „Live API“kvietimą. https://opensky-network.org/apidoc/ vadinamas ribojimo langeliu. Norint iškviesti API, reikalingi jus dominantys langelio kampai, žinoma, mūsų centras „Lat/Lon“. Galite patikrinti, ar šioje svetainėje matematika veikia, ir ji piešia langelį, priklausomai nuo to, ką įvedate."
funkcija get_bounding_box ($ platumos_in_degrees, $ longitude_in_degrees, $ half_side_in_miles) {$ half_side_in_km = $ half_side_in_miles * 1.609344; $ lat = deg2rad ($ platumos_in_degrees); $ lon = deg2rad ($ longitude_in_degrees); $ spindulys = 6371; $ parallel_radius = $ spindulys*cos ($ lat); $ lat_min = $ lat - $ half_side_in_km/$ spindulys; $ lat_max = $ lat + $ half_side_in_km/$ spindulys; $ lon_min = $ lon - $ half_side_in_km/$ parallel_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); grąžinimo masyvas ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max);
Jei norite išbandyti savo kodą, yra svetainė, kurioje galite įvesti lat/lon ir pamatyti rezultatus žemėlapyje: Žr. Ribojimo langelio pavyzdį žemėlapyje
8 žingsnis: apskaičiuokite lėktuvų kryptį, susijusią su mumis
Ribojimo langelio API iškvietimo rezultatai pateikia mums lėktuvų sąrašą, jų Lon/lat, greitį, aukštį ir kryptį. Taigi kitas dalykas, kurį turime padaryti, yra gauti kiekvienos plokštumos poziciją mūsų atžvilgiu, kad galėtume toliau apdoroti tas kryptis, kurios bent jau krypsta mūsų bendra kryptimi. Mes galime tai padaryti žinodami savo poziciją ir galime nustatyti kampą nuo mūsų į kiekvieną plokštumą.
Norėdami tai padaryti, naudoju kodą, iš kurio iš pradžių buvo „Javascript“, todėl čia jį konvertavau į PHP, * apskaičiuoti (pradinę) atramą tarp dviejų taškų * * iš: Ed Williams aviacijos formulė, https://williams.best.vwh.net/avform.htm#Crs * source = instantglobe.com/CRANES/GeoCoordTool.html */ funkcija 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 = nuodėmė ($ dLon) * cos ($ lat2);
$ x = cos ($ lat1)*sin ($ lat2) - sin ($ lat1)*cos ($ lat2)*cos ($ dLon); $ z = atan2 ($ y, $ x); $ zz = (rad2deg ($ z) +360)% 360; return $ zz;
Jei norite peržiūrėti puslapį, kuriame yra originalios „JavaScript“versijos, tai yra nuoroda:
tame kode taip pat galite pamatyti įvairias kiekvieno skaičiavimo tipo paprogrames.
9 žingsnis: perėmimo apskaičiavimas žiūrint į apskritimą
Taigi dabar mes turime plokštumą, kurioje guolis tarp jo ir mūsų vietos yra mažesnis nei 90 (teigiamas arba neigiamas), taigi tai reiškia, kad yra tikimybė, kad jis gali skristi šalia. Naudodami „hadrsine“formulę, taip pat galime apskaičiuoti lėktuvo Lon/Lat ir mūsų namo Lon/Lat atstumą, kuris yra toli nuo mūsų.
Žvelgiant į diagramą, jei aplink namą nupiešiame maždaug 3 mylių spindulį apskritimą, tai suteikia mums galimybę pamatyti viską, kas skrenda. Mes žinome skirtumą tarp lėktuvo ir mūsų, taip pat žinome atstumą nuo plokštumos, kad galėtume išsiaiškinti trikampį naudodami seną gerą SOHCAHTOA, o šiuo atveju, naudodami kampo įdegį, galime gauti priešingos pusės ilgis. Taigi, jei palyginsime šią vertę su apskritimo aplink namą spindulio reikšme, galime sužinoti, ar lėktuvas skris pakankamai arti, kad galėtume jį pamatyti. Kitas dalykas, kurį galime padaryti, yra apskaičiuoti laiką, per kurį lėktuvas praskris, naudodami oro greitį ir atstumą, o jei tai yra mažiau nei maždaug 45 sekundės, įjungiame šviesą. Tai yra šiek tiek kodo, kurį naudoju, norėdamas išsiaiškinti perskridimo galimybę. Aš tai darau, nes netoliese yra oro uostas ir kai lėktuvai važiuoja taksi, jie neišvengiamai rodo į namą. Tačiau kadangi jų aukštis yra lygus nuliui, o greitis vaikšto, tai neturėtų sukelti aliarmo.
funkcija 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 = įdegis ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ plane_distance;
if (($ flight_angle <90) && ($ flight_intercept <3)) {// galima skristi pro šalį
}
return $ flight_intercept;
}
10 žingsnis: atstumas tarp dviejų žemėlapio taškų - Haversine formulė
Taigi turime apskaičiuoti atstumą tarp lėktuvo ir mūsų buvimo vietos. Žemėlapyje trumpus atstumus galite apytiksliai apskaičiuoti atstumą, tačiau kadangi žemė yra sferinė, yra formulė, vadinama hasrsino formule, kuri leidžia atsižvelgti į išlenktą paviršių. Toliau galite perskaityti formulę:
Dabar, apskaičiuodami atstumą ir žinodami lėktuvo oro greitį, galime išsiaiškinti, kiek sekundžių praeis, kol lėktuvas bus virš galvos. Taigi lemputė užsidegs, jei per 30 sekundžių nuo „flypast“atsiras kažkas ir pagaliau turėsime įspėjamąją lemputę.
* pagrįstas 0n JS adresu instantglobe.com/CRANES/GeoCoordTool.html ir paverstas PHP */
funkcija get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // vidutinis žemės spindulys 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; grąžinti $ d; }
11 veiksmas: plokštumos duomenų bazės importavimas ir apibrėžimas
Viena iš kitų dalių yra ta, kad „OpenSky“svetainė siūlo atsisiunčiamą lėktuvų duomenų bazę kartu su jų šaukiniais ir identifikacijomis. Jo keli šimtai tūkstančių įrašų. Taigi galime tai atsisiųsti ir įkelti vietoje į „MariaDB“duomenų bazę paieškai („MySQL“). Su kiekvienu lėktuvu, atsirandančiu virš galvos, mes gauname išsamią informaciją ir atnaujiname skaitiklį, kad parodytume, kiek kartų jis buvo matytas.
Taip pat šiuo metu redaguoju duomenų bazę, kad paryškčiau mane dominančius lėktuvus. Daugiausia seni paukščiai ir kiti panašūs įdomūs lėktuvai. Šią vasarą porą kartų skrido „Mig-15“. Taigi tikslas yra naudoti mano pridėtą įspėjimo lauką ir greitai mirksėti, kai kažkas įdomaus baigiasi
12 veiksmas: rezultatų ir naujų funkcijų tobulinimas
Taigi teoriškai viskas veikia gana gerai, tačiau su duomenimis pamatysite, kad yra lėktuvų, skraidančių virš jų, kurie nerodomi API.
Taip yra todėl, kad ne visi lėktuvai naudoja ADS-B atsakiklį ir naudoja senesnius atsakiklius, pagrįstus MLAT. Norint gauti orlaivių, naudojančių MLAT, padėties duomenis, reikia, kad ant žemės esančių imtuvų padėtų trikampio padėties padėtis, o kai kuriose svetainėse, tokiose kaip „flightradar24“, yra didesnis bendradarbių tinklas, kuris tai daro, palyginti su „openky“. Tikimės, kad laikui bėgant jų aprėptis taip pat pagerės, ir aš sukuriu savo MLAT imtuvą, kad galėčiau pridėti prie šių duomenų.
13 žingsnis: kodų bazė
Nepamirškite, jei ketinate tai naudoti, galbūt norėsite pašalinti SQL sakinius, jei neturite lėktuvų duomenų bazės, taip pat pridėti savo „Lon/Lat“vertę ir API raktą, kad galėtumėte pasiekti skrydžio duomenis.
github.com/ajax-jones/runway-light-awacs
define ("INTERVAL", (20 * 1)); funkcija fexp () {$ lat = "tavo platuma"; $ lon = "jūsų ilguma"; $ šonas = 15,75; $ box = get_bounding_box ($ lat, $ lon, $ side); $ latmin = $ box [0]; $ lonmin = $ dėžutė [1]; $ latmax = $ langelis [2]; $ lonmax = $ langelis [3]; $ flyurl = "https://opensky-network.org/api/states/all?lamin=$latmin&lomin=$lonmin&lamax=$latmax&lomax=$lonmax"; aidas „DANGO Nuskaitymas“; $ start_time = mikro laikas (tiesa); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, TRUE); $ inbound = FALSE; $ num_planes = count ($ data ['state']); if ($ num_planes> 0) {echo "ir matome $ num_planes lėktuvus / n"; už ($ x = 0; $ x 0) {$ plane_eta = $ distplane/$ air_speed_kmh; } dar {$ eta = 1; } if ((($ perimti) 0)) && ($ distplane0) {$ inbound = TRUE; aidas "------------------------------------------------ -------------------- / n "; echo "$ icao24 - [$ country $ zvano ženklas] ties [$ geo_altitude_m M - $ geo_altitude_f ft]"; echo "[greitis $ air_speed_kmh kmh and", apvalus ($ distplane, 1), "km away] n"; echo "[ant antraštės", apvalus ($ plane_heading, 1), "] [homeangle $ title_d]"; echo "[$ platuma, $ ilguma] n"; echo "[flypast in", decimal_to_time ($ plane_eta), "dabar", apvalus ($ perimti, 1), "km away / n"; aidas "------------------------------------------------ -------------------- / n "; $ DBi = new mysqli ("127.0.0.1", "root", "your password", "waitcs"); $ sql = "pasirinkite * iš lėktuvų duomenų bazės, kurioje` icao24` = '$ icao24' "; mysqli_set_charset ($ DBi, "utf8"); $ getplanedata = mysqli_query ($ DBi, $ sql) arba mirti (mysqli_error ($ DBi)); $ row_getplanedata = mysqli_fetch_assoc ($ getplanedata); $ rows_getplanedata = mysqli_num_rows ($ getplanedata); if ($ rows_getplanedata> 0) {do {echo "callign ="; echo $ row_getplanedata ['registracija']; aidas "yra"; echo $ row_getplanedata ['gamintojo pavadinimas']; aidas ""; echo $ row_getplanedata ['modelis']; aidas „pagal“; echo $ row_getplanedata ['productionricao']; aidas „priklauso“; echo $ row_getplanedata ['savininkas']; aidas „matytas“; echo $ row_getplanedata ['vizitai']; aidas "laikai"; echo "specialus įvertinimas ="; echo $ row_getplanedata ['specialus']; aidas "\ n"; $ vizitai = $ row_getplanedata ['vizitai']+1; } while ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "ATNAUJINTI lėktuvų duomenų bazės SET apsilankymus = $ apsilankymų KUR icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) arba mirti (mysqli_error ($ DBi)); } else {echo "Nepavyko rasti šios plokštumos DB, todėl ją pridėjome"; $ sqli = "INSERT INTO lėktuvų duomenų bazė (icao24, vizitai, specialūs) VALUES ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) arba mirti (mysqli_error ($ DBi)); } aidas "----------------------------------------------- --------------------- / n "; } else {// echo "$ zvano ženklas"; }}} else {echo "ir dangus aiškus / n"; } if ($ inbound) {echo "Įeinantis lėktuvas / n"; $ command = "kiaulės w 17 1"; execInBackground (komanda $); } else {echo "jokių įeinančių skrydžių / n"; $ command = "kiaulės w 17 0"; execInBackground (komanda $); }} funkcija decimal_to_time ($ decimal) {$ offset = 0.002778; if ($ decimal> $ offset) {$ decimal = $ decimal - 0,002778; } $ hours = gmdate ('H', aukštas ($ dešimtainis * 3600)); $ minutes = gmdate ('i', grindys ($ dešimtainis * 3600)); $ sekundės = gmdate ('s', grindys ($ dešimtainis * 3600)); return str_pad ($ hours, 2, "0", STR_PAD_LEFT). ":". str_pad ($ minutes, 2, „0“, STR_PAD_LEFT). ":". str_pad ($ sek., 2, „0“, STR_PAD_LEFT); }/ * * apskaičiuoti (pradinę) atramą tarp dviejų taškų * * iš: Ed Williams aviacijos formulė, https://williams.best.vwh.net/avform.htm#Crs * source = instantglobe.com/CRANES/GeoCoordTool. html */ function 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 = nuodėmė ($ dLon) * cos ($ lat2); $ x = cos ($ lat1)*sin ($ lat2) - sin ($ lat1)*cos ($ lat2)*cos ($ dLon); $ z = atan2 ($ y, $ x); $ zz = (rad2deg ($ z) +360)% 360; return $ zz; } funkcija 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 = įdegis ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ plane_distance; return $ flight_intercept; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *// * * Naudokite Haversine formulę, kad apskaičiuotumėte atstumą (km) tarp dviejų taškų, nurodytų * platumos/ilgumos (skaitiniais laipsniais) * * iš: Haversine formulė - RWSinnott, „Haversine dorybės“, * „Sky and Telescope“, t. 68, Nr. 2, 1984 * https://williams.best.vwh.net/avform.htm#Crs * * naudojimo pavyzdys iš formos: * result.value = LatLon.distHaversine (lat1.value.parseDeg (), long1.value.parseDeg (), * lat2.value.parseDeg (), long2.value.parseDeg ()); * kur lat1, long1, lat2, long2 ir rezultatas yra formos laukai * source = instantglobe.com/CRANES/GeoCoordTool.html */function get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // vidutinis žemės spindulys 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; grąžinti $ d; } funkcija get_bounding_box ($ platumos_in_degrees, $ longitude_in_degrees, $ half_side_in_miles) {$ half_side_in_km = $ half_side_in_miles * 1.609344; $ lat = deg2rad ($ platumos_in_degrees); $ lon = deg2rad ($ longitude_in_degrees); $ spindulys = 6371; # Lygiagretės spindulys tam tikroje platumoje; $ parallel_radius = $ spindulys*cos ($ lat); $ lat_min = $ lat - $ half_side_in_km/$ spindulys; $ lat_max = $ lat + $ half_side_in_km/$ spindulys; $ lon_min = $ lon - $ half_side_in_km/$ parallel_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); grąžinimo masyvas ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max); } funkcija execInBackground ($ cmd) {if (substr (php_uname (), 0, 7) == "Windows") {pclose (popen ("start /B". $ cmd, "r")); } else {exec ($ cmd. "> /dev /null &"); }} function checkForStopFlag () {// visiškai neprivalomas grįžimas (TRUE); } funkcija start () {echo "Start / n"; $ command = "kiaulės w 17 1"; execInBackground (komanda $); $ aktyvus = TRUE; while ($ active) {usleep (1000); // neprivaloma, jei norite būti dėmesingas if (microtime (true)> = $ nextTime) {fexp (); $ nextTime = mikro laikas (tiesa) + INTERVAL; } $ active = checkForStopFlag (); }} fexp (); pradėti (); ?>
14 veiksmas: šviesos diodo ir išjungimo jungiklio prijungimas
Šio projekto prijungimas tikrai negali būti paprastesnis. Yra tik vienas šviesos diodas, prijungtas prie 17 kaiščio ir įžemintas su 270R rezistoriumi.
Aš taip pat įtraukiu išjungimo ir įjungimo mygtuką kartu su maitinimo šviesos diodu, kuris eina nuo TXd duomenų kaiščio. Daugiau apie išjungimo funkciją ir reikalingą kodą galite perskaityti https://github.com/Howchoo/pi-power-button.git iš svetainės https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow … Apie maitinimo lemputės pridėjimą galite skaityti čia
Rekomenduojamas:
Skaidrių išankstinio įspėjimo sistema: 6 žingsniai
Skaidrių išankstinio įspėjimo sistema: „Brown Dog Gadgets“dirbtuvėse transliuojame daug vaizdo įrašų, o mūsų sąrankoje yra vienas asmuo kameroje, o kitas - gamintojas, kuris valdo programinę įrangą, stebi pokalbių langą ir keičia fotoaparatą bei daro pažangą skaidres
Sukurkite įspėjimo apie kalbėjimą / balsu įspėjimo sistemą: 4 žingsniai
Sukurkite įspėjimo apie kalbėjimą / balsu įspėjimo sistemą: Šiame projekte mes sukūrėme pranešimo apie kalbą / įspėjimo sistemą. Šiame projekte galima naudoti mažiausiai du jutiklius
Veikiantis LED oro uosto kilimo ir tūpimo takas: 7 žingsniai
Veikiantis LED oro uosto kilimo ir tūpimo takas: tai peržiūra ir įkvėpimas iš https://www.instructables.com/id/Running-LEDs-Ardu. Pakeičiu šaltinio kodą, kad šviesa mirksėtų pirmyn ir atgal ir lėčiau. Tai yra rankų darbo oro uosto kilimo ir tūpimo tako modelis
„Makey Makey“- išankstinio įspėjimo apie stiprų vėją sistema: 5 žingsniai
„Makey Makey“- išankstinio įspėjimo apie stiprų vėją sistema: ši " išankstinio įspėjimo sistema " dizaino iššūkis būtų pateiktas studentų grupei. Tikslas yra tai, kad studentų komanda (po du ar tris grupėje) suprojektuotų sistemą, kuri įspėtų žmones ieškoti prieglobsčio nuo pavojingų vėjų
Kelių spalvų kilimo ir tūpimo tako šviesa: 4 žingsniai
Daugiaspalvis kilimo ir tūpimo tako žibintas: ši instrukcija yra modifikuota įvairių šioje svetainėje esančių LED saulės indelio ir naktinės šviesos instrukcijų versija. Tai yra pirmasis mano nurodomas pranešimas, kuris šiuo metu yra tik koncepcijos įrodymas. Peržiūros planai jau pradėti. Ši pa