Innholdsfortegnelse:

Tidlig advarsel Raspberry PI Runway Light ved bruk av flykartdata: 14 trinn (med bilder)
Tidlig advarsel Raspberry PI Runway Light ved bruk av flykartdata: 14 trinn (med bilder)

Video: Tidlig advarsel Raspberry PI Runway Light ved bruk av flykartdata: 14 trinn (med bilder)

Video: Tidlig advarsel Raspberry PI Runway Light ved bruk av flykartdata: 14 trinn (med bilder)
Video: Автомобильный кемпинг на горе - тент для палатки и грузовика 2024, Juli
Anonim
Tidlig advarsel Raspberry PI Runway Light ved bruk av flykartdata
Tidlig advarsel Raspberry PI Runway Light ved bruk av flykartdata
Tidlig advarsel Raspberry PI Runway Light ved bruk av flykartdata
Tidlig advarsel Raspberry PI Runway Light ved bruk av flykartdata
Tidlig advarsel Raspberry PI Runway Light ved bruk av flykartdata
Tidlig advarsel Raspberry PI Runway Light ved bruk av flykartdata
Tidlig advarsel Raspberry PI Runway Light ved bruk av flykartdata
Tidlig advarsel Raspberry PI Runway Light ved bruk av flykartdata

Denne lampen kom fra flere grunner ved at jeg alltid er interessert i flyene som flyr overhead, og om sommeren i helgene er det ofte noen ganske spennende som flyr rundt. Selv om du bare pleier å høre dem når de går forbi. Så er den andre grunnen at det ser ut til at flyveien for utgående fly fra London City flyplass noen ganger vil bli overhørt, og de har noen ganske bråkete flyreiser. Å være som jeg kan spille inn noen videoer for YouTube, det er virkelig irriterende å måtte kaste opp et opptak på grunn av et støyende fly. Så jeg lurte på om dataene du ser på nettsteder som flightradar24 er offentlig tilgjengelige, da jeg oppdaget at noe lignende var tilgjengelig fra opensky -nettverket, ble den tidlige varsellampen født. Det tok ikke så lang tid å komme på ideen om å bruke en kopi av et rullebanelys for å huse prosjektet.

Du kan finne ut mer om The OpenSky Network på https://www.opensky-network.org Jeg ønsket også at jeg denne gangen skulle lage et fint harpiksobjektiv i stedet for å bruke gjennomsiktig PLA, og selv om jeg har en ADS-B-mottaker jeg ønsket å beholde dette enkelt og billig. ADS-B trenger også en antenne, og dette ville ikke gjøre for en lampe å gå på hyllen på kontoret. Så forhåpentligvis finner du bygningen interessant da den dekker 3D -utskrift, harpiksstøping og matematikk også for å ekstrapolere posisjonene til fly som potensielt kan passere overhead.

Trinn 1: Designe saken

Google -søk kommer med mange forskjellige design av rullebanelampe, og designet til denne ble laget ved hjelp av designpåvirkning fra mange forskjellige merker av ekte lamper. Det er også skalert for å sitte i et rom eller på en hylle i stedet for i full størrelse, da de pleier å være mye større i virkeligheten.

Design ble tegnet i Fusion 360, og jeg importerte noen tidligere elementer, for eksempel bringebær pi null -holderen fra tidligere prosjekter. Å kunne gjenbruke elementer tar mye av hodepinen ut av å få det grunnleggende ned. Du kan også laste ned filene her

Trinn 2: Støping av linsene - #fail

Støping av linsene - #fail
Støping av linsene - #fail
Støping av linsene - #fail
Støping av linsene - #fail
Støping av linsene - #fail
Støping av linsene - #fail

Det viktigste designelementet til denne lampen skulle være linsen. Så jeg taklet dette først som uten et pent autentisk glass som prosjektet skulle fungere. Jeg dokumenterer her mislykkene jeg hadde med å prøve å oppnå det, uten å motstå at jeg også bestemte meg for å gjøre linsen gult. Rullebanelys kommer i både gult og blått, og det var først etter at jeg hadde begynt å lage det gule, at jeg ombestemte meg og bestemte at jeg ville ha en blå.

Etter det jeg kan finne ut, brukes de gule på holdelinjen og de blå brukes til å linke rullebanen, og det er de som ser ut til å være de mer arketypiske som finnes hvis du søker etter banelys. Men her er mitt første forsøk på å lage et gult objektiv. For å lage linsen, skulle jeg bruke klarcast -harpiks med et fargetilsetningsstoff, og selv om jeg har gjort noen former før jeg lurte på om det skulle være mulig å skrive ut en 3D -form og bruke den. Så jeg begynte med å lage en delt form i 3D og skrive den ut i PetG. Skikkelige mengder muggutslipp jeg var overbevist om ville være nok til å sperre formen. Som det viser seg med et par forsøk, gjorde jeg harpiksen festet til formen som lim, og det virket ikke som om det var mulig å skille dem. Selv om jeg hadde den i full skala som jeg skulle bruke, bestemte jeg meg for det og skrev ut linsen for bruk med tradisjonell silikonstøping.

Trinn 3: Ulike typer harpiks

Ulike typer harpiks
Ulike typer harpiks
Ulike typer harpiks
Ulike typer harpiks
Ulike typer harpiks
Ulike typer harpiks
Ulike typer harpiks
Ulike typer harpiks

Som en rask side brukte jeg 3 typer klare/fargede harpikser til dette prosjektet.

Den første var en Hobby -markedstype som heter Pebeo - Gedeo og selges normalt for innkapsling av små gjenstander og brukes til smykker og skrivebordspapirvekter osv. Dette fungerte ganske bra og herdet pent på omtrent 24-36 timer. Det er imidlertid ganske dyrt for beløpet du får, men er praktisk og lett tilgjengelig i hobby- og håndverksbutikker. Det blandes i et forhold på 2: 1. Den andre var en ferdigfarget harpiks som blandes i et forhold på 10: 1 med herderen, og dette tok lengst tid å herde, omtrent en uke for å være ærlig før den var helt herdet. Den siste var en klar harpiks, som også ble blandet i 2: 1 -forholdet, og dette herdet på omtrent 2 dager, du kan farge dette med dråper pigment, men du må sørge for at du alltid bruker det samme fargeforholdet hvis du lager separate partier. Det fungerer også ut som det mest kostnadseffektive. Til slutt var RTV for formen en GP-3481 RTV, og dette tar omtrent 24 timer å sette og har ganske lang grytetid, så du har god tid til å blande den og deretter helle den.

For øyeblikket har jeg ikke en høstgryte (for tiden på bestilling), slik at du kan bli plaget av bobler i både formen og harpiksen. Ikke for mye problem for dette, men med et klart objektiv eller lignende, vil du tenke på en måte å få boblene ut av blandingene.

Trinn 4: Støpe linsen i silikonform #2

Image
Image
Støping av linsen i silikonform #2
Støping av linsen i silikonform #2
Støping av linsen i silikonform #2
Støping av linsen i silikonform #2

Så dette er det andre forsøket på å lage et harpiksobjektiv, og det første trinnet var å lage både et objektiv i Fusion 360 og deretter skrive det ut i ABS samt en bøtte for å holde det. Dette vil være førstnevnte for formen og bidrar til å holde nede mengden silikon som skal brukes. Du kan enkelt lage dette av kort, men det er bare en annen tilnærming. For å gi den en bedre sjanse for å bli frigjort fra formen, lakk jeg den først og ga den deretter et godt dekk av voksfrigjøringsmiddel.

Jeg helte deretter noen GP-3481, som er omtrent 27 RTV, og lot den deretter sette seg i løpet av de neste 24 timene før forming. Når dette var gjort, brukte jeg den klare harpiksen blandet i et forhold på 2: 1 med ca. 4/5 dråper av fargepigmentet og blandet godt i fire minutter. Helles dette i formen og plasserte deretter et skuddglass i harpiksen også for å gi et tomrom senere for enten en lampe eller LED -lampene. Etter omtrent 24 timer var denne harpiksen klar til å fjerne, og linsen kom ganske bra ut. Det er luftbobler tilstede, men ennå har jeg ikke et vakuumkar for å avgass harpiksen før det helles.

Trinn 5: 3D -utskrift og forberedelse

3D -utskrift og forberedelse
3D -utskrift og forberedelse
3D -utskrift og forberedelse
3D -utskrift og forberedelse
3D -utskrift og forberedelse
3D -utskrift og forberedelse

Modellen ble designet på en måte som den sentrale delen kobles til basen. Dette var for å unngå maskering under malingsprosessen. Hele modellen ble trykt i Hatchbox ABS og deretter pusset. Fra 60 korn opp til ca 800 korn ga en god nok overflatebehandling for denne modellen.

Trinn 6: Montering og maling

Montering og maling
Montering og maling
Montering og maling
Montering og maling
Montering og maling
Montering og maling

Når utskriftene er slipt, ble det deretter malt med en høy bygningsgrunning. Lett pusset og deretter sprayet i grå primer. Hoveddelene ble malt i Ford -signalgult, og deretter ble Brooklands Green brukt til basen. høydepunkter av tamiya sølv ble deretter påført boltene og litt molotow sølv krom brukt på linseholderen.

Trinn 7: Finn først fly innenfor et grenseområde

Med maskinvaren sortert, måtte programvaren jobbes med. Det er et par nettsteder nå som tilbyr flysporing, men ikke mange som gir et API for å få tilgang til disse dataene. Noen som gjør det, gjør det bare på kommersiell basis, men heldigvis er det ett nettsted som heter https://opensky-network.org som du kan bruke gratis.

For å få tilgang til disse dataene må du registrere deg, og deretter kan du bruke deres API, det gir flere funksjoner og måter å trekke dataene på. Vi er interessert i alle flyvninger innenfor et område, og de har en Live API -samtale for det. https://opensky-network.org/apidoc/ kalt begrensningsboks. API -samtalen krever hjørnene av boksen som du er interessert i, selvfølgelig Lat/Lon som sentrum. Du kan sjekke om matematikken fungerer på dette nettstedet, som tegner en boks avhengig av hva du skriver inn. Http://tools.geofabrik.de, men foreløpig gir følgende skript poengene vi trenger for å koble til API.

funksjon 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 ($ lengdegrad_in_grader); $ radius = 6371; $ parallel_radius = $ radius*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/$ 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); returmatrise ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max);

Hvis du vil teste koden din, er det et nettsted hvor du kan angi lat/lon og se resultatene på et kart: Se et avgrensningseksempel på et kart

Trinn 8: Beregning av overskriften til flyene i forhold til oss

Beregning av overskriften til flyene i forhold til oss
Beregning av overskriften til flyene i forhold til oss

Resultatene fra begrensningsboksen API -anrop gir oss en liste over fly, deres Lon/lat, hastighet, høyde og kurs. Så det neste vi må gjøre er å skaffe kursen til hvert plan i forhold til oss, slik at vi kan viderebehandle de som i det minste er på vei i vår generelle retning. Vi kan gjøre dette slik vi kjenner vår posisjon og kan regne ut vinkelen fra oss til hvert plan.

For å gjøre det bruker jeg et stykke kode som opprinnelig var i Javascript, så jeg konverterte det her til PHP, * beregne (initial) peiling mellom to punkter * * fra: Ed Williams 'Aviation Formulary, https://williams.best.vwh.net/avform.htm#Crs * source = instantglobe.com/CRANES/GeoCoordTool.html */ funksjon 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; return $ zz;

Hvis du vil se på siden der de originale javascript -versjonene er, er dette lenken:

innenfor denne koden kan du også se de forskjellige delrutinene for hver type beregning.

Trinn 9: Beregning av et skjæringspunkt ved å se på en sirkel

Beregning av et skjæringspunkt ved å se på en sirkel
Beregning av et skjæringspunkt ved å se på en sirkel

Så vi har nå et fly der peilingen mellom det og posisjonen vår er mindre enn 90 (enten positiv eller negativ), og det betyr at det er en sjanse for at det kan fly i nærheten. Ved å bruke haversine -formelen kan vi også regne ut å bruke Lon/Lat på flyet og Lon/Lat i huset vårt, avstanden det er fra oss.

Ser vi på diagrammet, hvis vi tegner en sirkel rundt huset vårt med en radius på omtrent 3 miles, gir dette oss en sjanse til å se noe som flyr over. Vi vet forskjellen i kursen mellom flyet og oss, vi vet også avstanden til flyet fra oss, så vi kan deretter regne ut trekanten ved å bruke den gode gamle SOHCAHTOA, og i dette tilfellet kan vi ved hjelp av Tan av vinkelen få tak i motsatt sidelengde. Så hvis vi sammenligner denne verdien med radiusverdien til sirkelen rundt huset, kan vi finne ut om flyet vil fly nær nok til at vi kan se det. Den neste biten vi kan gjøre er å regne ut tiden flyet skal fly forbi ved å bruke lufthastigheten og avstanden, og hvis dette er mindre enn si ca 45 sekunder eller så, slår vi på lyset. Dette er litt av koden som jeg bruker for å regne ut sjansen for å fly over. Jeg gjør dette ettersom det er en flyplass i nærheten, og når flyene drosjer rundt, peker de uunngåelig på huset. Men ettersom høyden er null og farten er gangtempo, bør dette ikke utløse alarmen.

funksjon 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;

hvis (($ flight_angle <90) && ($ flight_intercept <3)) {// mulig fly forbi

}

retur $ flight_intercept;

}

Trinn 10: Avstand mellom to punkter på et kart - Haversine -formelen

Avstand mellom to punkter på et kart - Haversine -formelen
Avstand mellom to punkter på et kart - Haversine -formelen

Så vi må beregne avstanden mellom flyet og plasseringen vår. På korte avstander på et kart kan du omtrent beregne avstanden, men ettersom jorden er sfærisk, er det en formel som kalles haversinformel som lar deg ta hensyn til den buede overflaten. Du kan lese videre inn i formelen:

Nå med beregnet avstand og vi kjenner flyets hastighet kan vi regne ut hvor mange sekunder det vil være før flyet er overhead. Så lyset tennes hvis det er noe innen 30 sekunder etter flypast, og vi endelig har et varsellampe.

* basert 0n JS på instantglobe.com/CRANES/GeoCoordTool.html og ble til PHP */

funksjon get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // jordens gjennomsnittlige radius i 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; retur $ d; }

Trinn 11: Importere og definere flydatabasen

En av de andre delene er at opensky -siden tilbyr en nedlastbar database med fly sammen med deres kallesignaler og identer. Det er flere hundre tusen oppføringer. Så vi kan laste ned dette og laste det lokalt inn i en MariaDB -database for oppslag (MySQL). Med hvert fly som vises overhead, henter vi detaljene og oppdaterer en teller for å vise hvor mange ganger det har blitt sett.

Jeg redigerer også databasen for å markere fly som jeg er interessert i. Hovedsakelig gamle warbirds og andre lignende interessante fly. Et par ganger i sommer har en Mig-15 fløy over. så målet er å bruke et varselfelt jeg har lagt til, og deretter blinke lyset raskt når noe interessant er på vei over

Trinn 12: Forbedre resultater og nye funksjoner

Forbedre resultater og nye funksjoner
Forbedre resultater og nye funksjoner
Forbedre resultater og nye funksjoner
Forbedre resultater og nye funksjoner
Forbedre resultater og nye funksjoner
Forbedre resultater og nye funksjoner

Så i teorien fungerer alt ganske bra, men du vil finne med dataene at det er fly som flyr over som ikke vises i API.

Dette er fordi ikke alle fly bruker ADS-B-transponderen og bruker eldre transpondere basert på MLAT. For å få posisjonsdata om fly ved bruk av MLAT krever det en rekke mottakere på bakken for å triangulere posisjonen sin, og noen nettsteder som flightradar24 har et større nettverk av bidragsytere som gjør dette sammenlignet med opensky. Forhåpentligvis vil dekningen også bli bedre over tid, og jeg setter opp min egen MLAT -mottaker for å legge til disse dataene.

Trinn 13: Kodebase

Ikke glem at hvis du skal bruke dette, vil du kanskje fjerne SQL -setningene hvis du ikke har databasen over fly og også legge til din egen Lon/Lat -verdi og API -nøkkel for å få tilgang til flydataene.

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

definere ("INTERVAL", (20 * 1)); funksjon fexp () {$ lat = "din breddegrad"; $ lon = "lengdegraden din"; $ side = 15,75; $ box = get_bounding_box ($ lat, $ lon, $ side); $ latmin = $ box [0]; $ lonmin = $ boks [1]; $ latmax = $ boks [2]; $ lonmax = $ boks [3]; $ flyurl = "https://opensky-network.org/api/states/all?lamin=$latmin&lomin=$lonmin&lamax=$latmax&lomax=$lonmax"; ekko "Skanning av SKY"; $ start_time = microtime (true); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, TRUE); $ inbound = FALSE; $ num_planes = count ($ data ['states']); if ($ num_planes> 0) {echo "og vi kan se $ num_planes plane / n"; for ($ x = 0; $ x 0) {$ plane_eta = $ distplane/$ air_speed_kmh; } annet {$ eta = 1; } if ((($ intercept) 0)) && ($ distplane0) {$ inbound = TRUE; ekko "------------------------------------------------ -------------------- / n "; echo "$ icao24 - [$ country $ kallesignal] ved [$ geo_altitude_m M - $ geo_altitude_f ft]"; ekko "[hastighet $ air_speed_kmh kmh og", rund ($ distplane, 1), "km away] n"; echo "[on a heading of", round ($ plane_heading, 1), "] [homeangle $ heading_d]"; ekko "[$ breddegrad, $ lengdegrad] n"; echo "[flypast in", decimal_to_time ($ plane_eta), "now", round ($ intercept, 1), "km away / n"; ekko "------------------------------------------------ -------------------- / n "; $ DBi = ny mysqli ("127.0.0.1", "root", "passordet ditt", "awacs"); $ sql = "velg * fra flydatabasen der` icao24` = '$ icao24' "; mysqli_set_charset ($ DBi, "utf8"); $ getplanedata = mysqli_query ($ DBi, $ sql) eller dø (mysqli_error ($ DBi)); $ row_getplanedata = mysqli_fetch_assoc ($ getplanedata); $ rows_getplanedata = mysqli_num_rows ($ getplanedata); if ($ rows_getplanedata> 0) {do {echo "callsign ="; ekko $ row_getplanedata ['registrering']; ekko "er a"; echo $ row_getplanedata ['produsentnavn']; ekko " "; ekko $ row_getplanedata ['modell']; ekko "av"; echo $ row_getplanedata ['manufacturericao']; ekko "eid av"; ekko $ row_getplanedata ['eier']; ekko "sett"; ekko $ row_getplanedata ['besøk']; ekko "ganger"; ekko "spesiell vurdering ="; ekko $ row_getplanedata ['spesiell']; ekko "\ n"; $ besøk = $ row_getplanedata ['besøk']+1; } mens ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "OPPDATER flydatabase SET besøk = $ besøk HVOR icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) eller die (mysqli_error ($ DBi)); } else {echo "Kunne ikke finne dette flyet i DB så legger det til"; $ sqli = "SETT INN i flydatabasen (icao24, besøk, spesial) VERDIER ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) eller die (mysqli_error ($ DBi)); } ekko "----------------------------------------------- --------------------- / n "; } annet {// ekko "$ kallesignal"; }}} annet {echo "og himmelen er klar / n"; } if ($ inbound) {echo "Inbound plane / n"; $ command = "griser m 17 1"; execInBackground ($ kommando); } annet {ekko "ingen inngående flyreiser / n"; $ command = "griser m 17 0"; execInBackground ($ kommando); }} funksjon desimal_til_tid ($ desimal) {$ offset = 0.002778; hvis ($ desimal> $ offset) {$ desimal = $ desimal - 0.002778; } $ timer = gmdate ('H', etasje ($ desimal * 3600)); $ minutter = gmdate ('i', etasje ($ desimal * 3600)); $ sekunder = gmdate ('s', etasje ($ desimal * 3600)); retur str_pad ($ timer, 2, "0", STR_PAD_LEFT). ":". str_pad ($ minutter, 2, "0", STR_PAD_LEFT). ":". str_pad ($ sekunder, 2, "0", STR_PAD_LEFT); }/ * * beregne (første) peiling mellom to punkter * * fra: Ed Williams 'Aviation Formulary, 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 = sin ($ 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; } funksjon 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; retur $ flight_intercept; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *// * * Bruk Haversine -formel for å beregne avstand (i km) mellom to punkter angitt med * breddegrad/lengdegrad (i numeriske grader) * * fra: Haversine -formel - RWSinnott, "Virtues of the Haversine", * Sky and Telescope, vol 68, nr. 2, 1984 * https://williams.best.vwh.net/avform.htm#Crs * * bruk av eksempel fra form: * result.value = LatLon.distHaversine (lat1.value.parseDeg (), long1.value.parseDeg (), * lat2.value.parseDeg (), long2.value.parseDeg ()); * hvor lat1, long1, lat2, long2 og resultat er skjemafelt * source = instantglobe.com/CRANES/GeoCoordTool.html */function get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // jordens gjennomsnittlige radius i 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; retur $ d; } funksjon 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 ($ lengdegrad_in_grader); $ radius = 6371; # Radius av parallellen på gitt breddegrad; $ parallel_radius = $ radius*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/$ 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); returmatrise ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max); } function execInBackground ($ cmd) {if (substr (php_uname (), 0, 7) == "Windows") {pclose (popen ("start /B". $ cmd, "r")); } annet {exec ($ cmd. "> /dev /null &"); }} function checkForStopFlag () {// helt valgfri retur (TRUE); } funksjon start () {echo "starter / n"; $ command = "griser m 17 1"; execInBackground ($ kommando); $ active = TRUE; mens ($ active) {usleep (1000); // valgfritt, hvis du vil være hensynsfull om (microtime (true)> = $ nextTime) {fexp (); $ nextTime = mikrotid (true) + INTERVAL; } $ active = checkForStopFlag (); }} fexp (); start(); ?>

Trinn 14: Tilkopling av LED og avstengningsbryter

Kabling av LED og avstengningsbryter
Kabling av LED og avstengningsbryter

Kabling av dette prosjektet kunne egentlig ikke vært enklere. Det er bare den ene LED -en som er koblet til pin 17 og jordet med en 270R motstand inline.

Jeg inkluderer også en avstengnings- og strømknapp sammen med en strøm -LED som går av TXd -datapinnen. Du kan lese mer om nedstengningsfunksjonen og koden som kreves på https://github.com/Howchoo/pi-power-button.git fra nettstedet https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow … Du kan lese om hvordan du legger til et strømlys her

Anbefalt: