Kazalo:

Zgodnje opozarjanje Raspberry PI luč za vzletno -pristajalno stezo z uporabo podatkov o kartiranju leta: 14 korakov (s slikami)
Zgodnje opozarjanje Raspberry PI luč za vzletno -pristajalno stezo z uporabo podatkov o kartiranju leta: 14 korakov (s slikami)

Video: Zgodnje opozarjanje Raspberry PI luč za vzletno -pristajalno stezo z uporabo podatkov o kartiranju leta: 14 korakov (s slikami)

Video: Zgodnje opozarjanje Raspberry PI luč za vzletno -pristajalno stezo z uporabo podatkov o kartiranju leta: 14 korakov (s slikami)
Video: It Became Unliveable! ~ Abandoned Home Of The Spenser's In The USA 2024, Julij
Anonim
Zgodnje opozarjanje Raspberry PI luč na vzletno -pristajalni stezi z uporabo podatkov o kartiranju letov
Zgodnje opozarjanje Raspberry PI luč na vzletno -pristajalni stezi z uporabo podatkov o kartiranju letov
Zgodnje opozarjanje Raspberry PI luč z vzletno -pristajalne steze z uporabo podatkov o kartiranju letov
Zgodnje opozarjanje Raspberry PI luč z vzletno -pristajalne steze z uporabo podatkov o kartiranju letov
Zgodnje opozarjanje Raspberry PI luč na vzletno -pristajalni stezi z uporabo podatkov o kartiranju letov
Zgodnje opozarjanje Raspberry PI luč na vzletno -pristajalni stezi z uporabo podatkov o kartiranju letov
Zgodnje opozarjanje Raspberry PI luč z vzletno -pristajalne steze z uporabo podatkov o kartiranju letov
Zgodnje opozarjanje Raspberry PI luč z vzletno -pristajalne steze z uporabo podatkov o kartiranju letov

Ta svetilka je nastala iz več razlogov, ker me vedno zanimajo letala, ki letijo nad glavo, poleti pa ob vikendih pogosto letijo kar nekatera zelo vznemirljiva letala. Čeprav jih slišite šele, ko gredo mimo. Drugi razlog je ta, da se zdi, da bo pot leta za odhodna letala z letališča London City včasih preslišana in da bodo imeli kar precej hrupnih letov. Ker poskušam snemati nekaj videoposnetkov za YouTube, je res nadležno, da moram snemati posnetek zaradi hrupnega letala. Zato sem se vprašal, ali so podatki, ki jih vidite na spletnih mestih, kot je flightradar24, javno dostopni, ko sem odkril, da je kaj podobnega na voljo v odprtem omrežju, se je rodila svetilka za zgodnje opozarjanje. Ni trajalo predolgo, da sem potem prišel na idejo, da bi za namestitev projekta uporabil repliko luči vzletno -pristajalne steze.

Več o omrežju OpenSky lahko izveste na https://www.opensky-network.org Tudi jaz sem si tokrat želel narediti lepo lečo iz smole namesto prosojnega PLA in čeprav imam sprejemnik ADS-B, ki sem ga želel obdržati to preprosto in poceni. ADS-B potrebuje tudi anteno, kar pa ne bi pomagalo, da bi svetilka šla na polico v pisarni. Zato upajmo, da vam bo zgradba zanimiva, saj zajema 3D tiskanje, oblikovanje smole in matematiko ter ekstrapolira položaje letal, ki bi lahko preleteli nad glavo.

1. korak: Oblikovanje ohišja

Iskanje Google ponuja veliko različnih modelov svetilk za vzletno -pristajalne steze, pri oblikovanju te pa so uporabili oblikovalske vplive različnih proizvajalcev pravih svetilk. Prilagojeno je tudi, da sedijo v sobi ali na polici in ne v polni velikosti, saj so v resnici veliko večje.

Modeli so bili pripravljeni v Fusion 360 in nekatere prejšnje elemente, kot je držalo za malino pi zero, sem uvažal iz prejšnjih projektov. Sposobnost ponovne uporabe elementov zahteva veliko glavobola pri pridobivanju osnov. Datoteke lahko prenesete tudi tukaj

2. korak: Ulivanje leč - #fail

Ulivanje leč - #fail
Ulivanje leč - #fail
Ulivanje leč - #fail
Ulivanje leč - #fail
Ulivanje leč - #fail
Ulivanje leč - #fail

Najpomembnejši oblikovni element te svetilke bo leča. Zato sem se tega najprej lotil, saj bi projekt brez lepega pristnega ogledala deloval. Tu dokumentiram napake, ki sem jih imel pri tem, ne glede na to, da sem se sprva odločil tudi za oranžno lečo. Luči za vzletno -pristajalne steze so v jantarjevi in modri barvi in šele potem, ko sem začel izdelovati jantarno, sem si premislil in se odločil, da želim modro.

Kolikor lahko razberem, se jantarne uporabljajo na zadrževalni črti, modre pa za postavitev vzletno -pristajalne steze, in zdi se, da so tiste bolj arhetipske, ki jih najdemo, če iščete luči vzletno -pristajalne steze. Vendar pa je tu moj prvi poskus izdelave oranžne leče. Za izdelavo objektiva sem nameraval uporabiti prozorno smolo z barvnim dodatkom. Čeprav sem naredil nekaj kalupov, sem se vprašal, ali bo mogoče natisniti 3D kalup in ga uporabiti. Tako sem začel izdelovati deljen kalup v 3D in ga natisniti v PetG. Prepričan obseg sproščanja plesni sem bil prepričan, da bo dovolj, da se plesni povečajo. Kot se je izkazalo z nekaj poskusi, sem smolo prilepil na kalup kot lepilo in jih ni bilo mogoče ločiti. Čeprav sem imel celotno lestvico, ki sem jo nameraval uporabiti, sem se odločil proti temu in natisnil lečo za uporabo s tradicionalnim silikonskim oblikovanjem.

3. korak: Različne vrste smole

Različne vrste smole
Različne vrste smole
Različne vrste smole
Različne vrste smole
Različne vrste smole
Različne vrste smole
Različne vrste smole
Različne vrste smole

Na hitro sem za ta projekt uporabil 3 vrste prozornih/barvnih smol.

Prvi je bil hobi trg, imenovan Pebeo -Gedeo in se običajno prodaja za kapsuliranje majhnih predmetov in se uporablja za nakit in namizne papirnate uteži itd. To je delovalo zelo dobro in se je lepo pozdravilo v približno 24-36 urah. Je pa precej drag za znesek, ki ga dobite, vendar je priročen in lahko dostopen v trgovinah za hobi in obrt. Mešamo v razmerju 2: 1. Druga je bila predhodno obarvana smola, ki jo v razmerju 10: 1 zmešamo s trdilcem, kar je trajalo najdlje, da se strdi, približno teden dni, preden se popolnoma strdi. Nazadnje je bila prozorna smola, ki je bila tudi mešana v razmerju 2: 1 in se je strdila v približno 2 dneh, to lahko obarvate s kapljicami pigmenta, vendar morate paziti, da vedno uporabljate isto barvno razmerje, če izdelujejo ločene serije. Deluje tudi najbolj stroškovno učinkovito. Nazadnje je RTV za kalup GP-3481 RTV, kar traja približno 24 ur, da se nastavi in ima precej dolg čas, da imate dovolj časa, da ga premešate in nato natočite.

Trenutno nimam vakuumskega lonca (trenutno po naročilu), tako da vas lahko oblijejo mehurčki v kalupu in polivanje smole. To ni prevelik problem za to, a s prozornim objektivom ali podobnim bi potem želeli razmišljati o tem, kako bi mehurčke izvlekli iz mešanic.

4. korak: Ulivanje leče v silikonski kalup št. 2

Image
Image
Ulivanje leče v silikonski kalup št. 2
Ulivanje leče v silikonski kalup št. 2
Ulivanje leče v silikonski kalup št. 2
Ulivanje leče v silikonski kalup št. 2

To je torej drugi poskus izdelave leče iz smole, prva stopnja pa je bila izdelava objektiva v Fusion 360 in ga nato natisniti v ABS -u ter vedro za držanje. To bi bilo prvo za kalup in pomaga zmanjšati količino uporabljenega silikona. To lahko preprosto naredite iz kartice, vendar je to le drugačen pristop. Da bi imel več možnosti za sprostitev iz kalupa, sem ga najprej lakiral, nato pa dobro pokril s sredstvom za odstranjevanje voska.

Nato sem natočil nekaj GP-3481, ki je približno RTV obale 27, in nato pustil, da se nastavi v naslednjih 24 urah pred demontažo. Ko sem to naredil, sem uporabil prozorno smolo, pomešano v razmerju 2: 1 s približno 4/5 kapljicami barvnega pigmenta, in jo dobro premešal dobre štiri minute. To vlijemo v kalup in nato v smolo vstavimo posodo, da kasneje zagotovimo praznino za svetilko ali LED. Po približno 24 urah je bila ta smola pripravljena za odstranitev in leča je izšla precej dobro. Prisotni so zračni mehurčki, vendar zaenkrat še nimam vakuumske posode, ki bi raztopila smolo pred vlivanjem.

5. korak: 3D tiskanje in priprava

3D tiskanje in priprava
3D tiskanje in priprava
3D tiskanje in priprava
3D tiskanje in priprava
3D tiskanje in priprava
3D tiskanje in priprava

Model je bil zasnovan tako, da se osrednji del priklopi na podlago. S tem se je izognilo prikrivanju med slikanjem. Celoten model je bil natisnjen v Hatchbox ABS in nato brušen. Začenši s peskom 60 do okrog 800 zrnca je dal temu modelu dovolj dobro površino.

6. korak: Montaža in barvanje

Montaža in slikanje
Montaža in slikanje
Montaža in slikanje
Montaža in slikanje
Montaža in slikanje
Montaža in slikanje

Ko so odtiski brušeni, so jih nato pobarvali z nekim temeljnim premazom. Rahlo brušeno in nato poškropljeno s sivo podlago. Glavni deli so bili pobarvani v signalno rumeno barvo ford, nato pa je bila za podlago uporabljena brooklandska zelena. vrhunce srebra tamiya so nato nanesli na vijake in nekaj molotow srebrnega kroma, uporabljenega na nosilcu leče.

7. korak: Najprej poiščite letala znotraj omejenega območja

Ko je strojna oprema razvrščena, je bilo treba delati na programski opremi. Zdaj obstaja nekaj spletnih mest, ki ponujajo sledenje letom, vendar ne veliko, ki ponujajo API za dostop do teh podatkov. Nekateri, ki to počnejo, to počnejo samo na komercialni osnovi, a na srečo obstaja eno spletno mesto, imenovano https://opensky-network.org, ki ga lahko uporabljate brezplačno.

Za dostop do teh podatkov se morate registrirati, nato pa lahko uporabite njihov API, ki ponuja več funkcij in načinov pridobivanja podatkov. Zanimajo nas vsi leti na določenem območju in za to imajo klic API -ja v živo. https://opensky-network.org/apidoc/ imenovano omejevalno polje. Za klic API -ja so potrebni vogali polja, ki vas zanimajo, seveda pa je naš središčni položaj naš zemljevid Lat/Lon. Na tem spletnem mestu lahko preverite, ali matematika deluje, kar nariše polje, odvisno od tega, kaj vnesete. Http://tools.geofabrik.de, vendar zaenkrat naslednji skript daje točke, ki jih moramo vključiti v API.

funkcija 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); $ polmer = 6371; $ parallel_radius = $ radij*cos ($ lat); $ lat_min = $ lat - $ half_side_in_km/$ polmer; $ lat_max = $ lat + $ half_side_in_km/$ polmer; $ 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); vrnitev matrike ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max);

Če želite preizkusiti svojo kodo, obstaja spletno mesto, kjer lahko vnesete lat/lon in si ogledate rezultate na zemljevidu: Oglejte si primer omejevalnega polja na zemljevidu

8. korak: Izračun smeri ravnin v zvezi z nami

Izračun smeri ravnin v zvezi z nami
Izračun smeri ravnin v zvezi z nami

Rezultati klica API -ja za omejevalno polje nam dajejo seznam letal, njihove dolžine/širine, hitrosti, nadmorske višine in smeri. Torej, naslednja stvar, ki jo moramo storiti, je pridobiti smer vsake ravnine glede na nas, da bomo lahko nadalje obdelali tiste, ki gredo vsaj v našo splošno smer. To lahko storimo, saj poznamo svoj položaj in lahko določimo kot od nas do vsake ravnine.

Za to uporabljam del kode, ki je bil prvotno v Javascriptu, zato sem ga tukaj pretvoril v PHP, * izračunajte (začetni) ležaj med dvema točkama * * iz: Letalske formule Eda Williamsa, 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 = sin ($ dLon) * cos ($ lat2);

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

Če želite pogledati stran, kjer so izvirne različice javascripta, je to povezava:

znotraj te kode si lahko ogledate tudi različne podprograme za vsako vrsto izračuna.

9. korak: Izračun prestrezanja s pogledom na krog

Izračun prestrezanja s pogledom na krog
Izračun prestrezanja s pogledom na krog

Tako imamo zdaj letalo, kjer je ležaj med njim in našo lokacijo manjši od 90 (pozitiven ali negativen), kar pomeni, da obstaja možnost, da bi letelo v bližini. S formulo haversine lahko z dolžino/širino ravnine in dolžino/širino naše hiše določimo tudi razdaljo, ki je oddaljena od nas.

Če pogledamo diagram, če okoli hiše narišemo krog, recimo polmer 3 milje, imamo to možnost videti, da karkoli leti. Zavedamo se razlike v smeri med ravnino in nami, poznamo tudi razdaljo ravnine od nas, tako da lahko nato izračunamo trikotnik s pomočjo dobre stare SOHCAHTOA, v tem primeru pa lahko s pomočjo kota Tan dobimo dolžina nasprotne strani. Če torej primerjamo to vrednost z vrednostjo polmera kroga okoli hiše, lahko ugotovimo, ali bo letalo letelo dovolj blizu, da ga vidimo. Naslednji korak, ki ga lahko naredimo, je določiti čas, ko bo letalo preletelo, z uporabo hitrosti zraka in razdalje, in če je to manj kot približno 45 sekund, prižgemo luč. To je del kode, ki jo uporabljam za ugotavljanje možnosti letenja. To počnem, ker je bližnje letališče in ko letala taksirajo naokoli, neizogibno kažejo na hišo. Ker pa je njihova nadmorska višina nič in hitrost hodi, to ne sme sprožiti alarma.

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 = zagorelo ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ plane_distance;

if (($ flight_angle <90) && ($ flight_intercept <3)) {// možen prelet mimo

}

return $ flight_intercept;

}

10. korak: Razdalja med dvema točkama na zemljevidu - formula Haversine

Razdalja med dvema točkama na zemljevidu - formula Haversine
Razdalja med dvema točkama na zemljevidu - formula Haversine

Zato moramo izračunati razdaljo med letalom in našo lokacijo. Na kratkih razdaljah na zemljevidu bi lahko približno izračunali razdaljo, a ker je Zemlja sferična, obstaja formula, imenovana formula haversine, ki vam omogoča, da upoštevate ukrivljeno površino. Formulo lahko preberete dalje:

Zdaj z izračunano razdaljo in poznamo hitrost letala lahko ugotovimo, koliko sekund bo trajalo, preden bo letalo nad glavo. Tako se bo lučka prižgala, če je kaj v 30 sekundah po letenju in imamo končno opozorilno lučko.

* temelji na 0n JS na naslovu instantglobe.com/CRANES/GeoCoordTool.html in se spremeni v PHP */

funkcija get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // srednji polmer zemlje 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; vrniti $ d; }

11. korak: Uvoz in določanje ravninske baze podatkov

Eden od drugih delov je, da odprto spletno mesto ponuja zbirko podatkov o letalih, ki jih je mogoče prenesti, skupaj z njihovimi klicnimi znaki in identitetami. Ima nekaj sto tisoč vnosov. Tako lahko to naložimo in naložimo lokalno v bazo podatkov MariaDB za iskanje (MySQL). Z vsakim letalom, ki se prikaže nad glavo, pridobimo njegove podrobnosti in posodobimo števec, da pokažemo, kolikokrat je bil viden.

Trenutno urejam tudi bazo podatkov, da označim letala, ki me zanimajo. Predvsem stare bojne ptice in druga podobna zanimiva letala. To poletje je nekajkrat preletel Mig-15. zato je cilj uporabiti opozorilno polje, ki sem ga dodal, in nato hitro utripati luč, ko se bliža kaj zanimivega

12. korak: Izboljšanje rezultatov in novih funkcij

Izboljšanje rezultatov in nove funkcije
Izboljšanje rezultatov in nove funkcije
Izboljšanje rezultatov in nove funkcije
Izboljšanje rezultatov in nove funkcije
Izboljšanje rezultatov in nove funkcije
Izboljšanje rezultatov in nove funkcije

Tako da teoretično vse deluje zelo dobro, vendar boste s podatki ugotovili, da obstajajo letala, ki letijo čez in se ne pojavljajo v API -ju.

To je zato, ker vsa letala ne uporabljajo transponderja ADS-B in ne uporabljajo starejših transponderjev na osnovi MLAT. Za pridobitev podatkov o položaju letal z uporabo sistema MLAT je potrebna vrsta sprejemnikov na tleh, da triangulirajo njihov položaj, nekatera spletna mesta, kot je flightradar24, pa imajo to večjo mrežo sodelavcev v primerjavi z opensky. Upam, da se bo sčasoma izboljšala tudi njihova pokritost in za dodajanje teh podatkov postavljam svoj sprejemnik MLAT.

13. korak: kodna baza

Ne pozabite, če boste to uporabljali, boste morda želeli odstraniti stavke SQL, če nimate baze podatkov o letalih, in dodati tudi svojo lastno vrednost Lon/Lat in ključ API za dostop do podatkov o letu.

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

define ("INTERVAL", (20 * 1)); funkcija fexp () {$ lat = "vaša zemljepisna širina"; $ lon = "vaša zemljepisna dolžina"; $ stran = 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"; odmev "Skeniranje neba"; $ start_time = mikro čas (res); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, TRUE); $ inbound = FALSE; $ num_planes = count ($ data ['stanja']); if ($ num_planes> 0) {echo "in lahko vidimo $ num_planes letala / n"; za ($ x = 0; $ x 0) {$ plane_eta = $ distplane/$ air_speed_kmh; } else {$ eta = 1; } if ((($ $ intercept) 0)) && ($ distplane0) {$ inbound = TRUE; odmev "------------------------------------------------ -------------------- / n "; echo "$ icao24 - [$ country $ klicni znak] na [$ geo_altitude_m M - $ geo_altitude_f ft]"; echo "[speed $ air_speed_kmh kmh and", round ($ distplane, 1), "km away] n"; echo "[na naslovu", round ($ plane_heading, 1), "] [homeangle $ heading_d]"; echo "[$ latitude, $ longitude] n"; echo "[flypast in", decimal_to_time ($ plane_eta), "now", round ($ intercept, 1), "km away / n"; odmev "------------------------------------------------ -------------------- / n "; $ DBi = nov mysqli ("127.0.0.1", "root", "vaše geslo", "awacs"); $ sql = "izberite * iz baze podatkov o letalu, kjer je` icao24` = '$ icao24' "; mysqli_set_charset ($ DBi, "utf8"); $ getplanedata = mysqli_query ($ DBi, $ sql) ali umre (mysqli_error ($ DBi)); $ row_getplanedata = mysqli_fetch_assoc ($ getplanedata); $ rows_getplanedata = mysqli_num_rows ($ getplanedata); if ($ rows_getplanedata> 0) {do {echo "klicni znak ="; echo $ row_getplanedata ['registracija']; odmev "je a"; echo $ row_getplanedata ['ime proizvajalca']; odmev ""; echo $ row_getplanedata ['model']; odmev "by"; echo $ row_getplanedata ['Manufacturericao']; odmev "v lasti"; echo $ row_getplanedata ['lastnik']; odmev "viden"; echo $ row_getplanedata ['obiski']; odmev "časov"; odmev "posebna ocena ="; echo $ row_getplanedata ['special']; odmev "\ n"; $ obiski = $ row_getplanedata ['obiski']+1; } while ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "Posodobi zbirko podatkovne zbirke letalskih postan obiskov = $ obiskov WHERE icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) ali umre (mysqli_error ($ DBi)); } else {echo "Te ravnine ni bilo mogoče najti v zbirki podatkov, zato sem jo dodal"; $ sqli = "VSTAVI V bazo podatkov o letalih (icao24, obiski, posebno) VREDNOSTI ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) ali umre (mysqli_error ($ DBi)); } odmev "----------------------------------------------- --------------------- / n "; } else {// odmeva "$ klicni znak"; }}} else {echo "in nebo je jasno / n"; } if ($ inbound) {echo "Vhodna ravnina / n"; $ command = "prašiči w 17 1"; execInBackground (ukaz $); } else {echo "brez dohodnih letov / n"; $ command = "prašiči w 17 0"; execInBackground (ukaz $); }} funkcija decimal_to_time ($ decimal) {$ offset = 0.002778; if ($ decimalno vrednost> $ offset) {$ decimal = $ decimalno vrednost - 0,002778; } $ ur = gmdate ('H', nadstropje ($ decimalno število * 3600)); $ minut = gmdate ('i', nadstropje ($ decimalno število * 3600)); $ seconds = gmdate ('s', nadstropje ($ decimalno število * 3600)); return str_pad ($ hours, 2, "0", STR_PAD_LEFT). ":". str_pad ($ minut, 2, "0", STR_PAD_LEFT). ":". str_pad ($ seconds, 2, "0", STR_PAD_LEFT); }/ * * izračunajte (začetno) lego med dvema točkama * * iz: Letalske formule Eda Williamsa, https://williams.best.vwh.net/avform.htm#Crs * vir = 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 = sin ($ dLon) * cos ($ lat2); $ x = cos ($ lat1)*sin ($ lat2) - sin ($ lat1)*cos ($ lat2)*cos ($ dLon); $ z = atan2 ($ y, $ x); $ zz = (rad2deg ($ z) +360)% 360; vrni $ 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 = zagorelo ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ plane_distance; return $ flight_intercept; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *// * * Uporabite formulo Haversine za izračun razdalje (v km) med dvema točkama, določenima s * zemljepisno širino/dolžino (v številskih stopinjah) * * od: Formula za preklop - RWSinnott, "Virtues of the Haversine", * Sky and Telescope, vol 68, no 2, 1984 * https://williams.best.vwh.net/avform.htm#Crs * * primer uporabe iz obrazca: * result.value = LatLon.distHaversine (lat1.value.parseDeg (), long1.value.parseDeg (), * lat2.value.parseDeg (), long2.value.parseDeg ()); * kjer so lat1, long1, lat2, long2 in rezultat polja obrazcev * vir = instantglobe.com/CRANES/GeoCoordTool.html */funkcija get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // srednji polmer zemlje 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; vrniti $ d; } funkcija 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); $ polmer = 6371; # Polmer vzporednika na določeni zemljepisni širini; $ parallel_radius = $ radij*cos ($ lat); $ lat_min = $ lat - $ half_side_in_km/$ polmer; $ lat_max = $ lat + $ half_side_in_km/$ polmer; $ 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); vrnitev matrike ($ 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 &"); }} funkcija checkForStopFlag () {// popolnoma izbirna vrnitev (TRUE); } funkcija start () {echo "zagon / n"; $ command = "prašiči w 17 1"; execInBackground (ukaz $); $ active = TRUE; while ($ active) {usleep (1000); // neobvezno, če želite biti pozorni if (microtime (true)> = $ nextTime) {fexp (); $ nextTime = mikro čas (true) + INTERVAL; } $ active = checkForStopFlag (); }} fexp (); start (); ?>

Korak 14: Ožičenje LED in stikala za izklop

Ožičenje LED in stikala za izklop
Ožičenje LED in stikala za izklop

Ožičenje tega projekta res ne bi moglo biti enostavnejše. Obstaja samo ena LED, ki je priključena na zatič 17 in ozemljena z vgrajenim uporom 270R.

Vključujem tudi gumb za izklop in vklop skupaj z LED za vklop, ki teče s podatkovnega zatiča TXd. Več o funkciji zaustavitve in zahtevani kodi lahko preberete na https://github.com/Howchoo/pi-power-button.git na spletnem mestu https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow… O dodajanju luči za moč lahko preberete tukaj

Priporočena: