INHOUDSOPGAWE:

Vroeë waarskuwing Framboos PI aanloopbaanlig met behulp van vliegkaartdata: 14 stappe (met foto's)
Vroeë waarskuwing Framboos PI aanloopbaanlig met behulp van vliegkaartdata: 14 stappe (met foto's)

Video: Vroeë waarskuwing Framboos PI aanloopbaanlig met behulp van vliegkaartdata: 14 stappe (met foto's)

Video: Vroeë waarskuwing Framboos PI aanloopbaanlig met behulp van vliegkaartdata: 14 stappe (met foto's)
Video: SCP-261 Pan-dimensionale Vending en Experiment Log 261 Ad De + Compleet + 2024, Julie
Anonim
Vroeë waarskuwing Framboos PI aanloopbaanlig met behulp van vliegkaartdata
Vroeë waarskuwing Framboos PI aanloopbaanlig met behulp van vliegkaartdata
Vroeë waarskuwing Framboos PI aanloopbaanlig met behulp van vliegkaartdata
Vroeë waarskuwing Framboos PI aanloopbaanlig met behulp van vliegkaartdata
Vroeë waarskuwing Framboos PI aanloopbaanlig met behulp van vliegkaartdata
Vroeë waarskuwing Framboos PI aanloopbaanlig met behulp van vliegkaartdata
Vroeë waarskuwing Framboos PI aanloopbaanlig met behulp van vliegkaartdata
Vroeë waarskuwing Framboos PI aanloopbaanlig met behulp van vliegkaartdata

Hierdie lamp kom uit verskeie redes omdat ek altyd geïnteresseerd is in die vliegtuie wat oor die hoof vlieg, en gedurende die somer in die naweke vlieg daar gereeld baie opwindende. Alhoewel u slegs die neiging het om hulle te hoor terwyl hulle verby gaan. Dan is die ander rede dat die vlugroete vir uitgaande vliegtuie vanaf die lughawe in London City soms gehoor word en dat daar 'n paar raserige vlugte is. Omdat ek 'n paar video's vir YouTube wil opneem, is dit regtig irriterend om 'n opname te moet afskaf weens 'n lawaaierige vliegtuig. Ek het dus gewonder of die data wat u op webwerwe soos flightradar24 sien, in die openbaar beskikbaar is, en sodra ek ontdek het dat iets soortgelyks by die opensky -netwerk beskikbaar is, is die vroeë waarskuwingslamp gebore. Dit het nie te lank geneem om die idee te kry om 'n replika van 'n aanloopbaanlig te gebruik om die projek te huisves nie.

U kan meer te wete kom oor The OpenSky Network op https://www.opensky-network.org. Ek wou ook hierdie keer 'n mooi harslens maak in plaas van deurskynende PLA te gebruik, en hoewel ek 'n ADS-B-ontvanger het wat ek wou hou so eenvoudig en goedkoop. Die ADS-B benodig ook 'n antenna, en dit sou nie help om 'n lamp op die rak in die kantoor te sit nie. Hopelik vind u die konstruksie interessant, aangesien dit 3D -drukwerk, harsvorming en wiskunde dek, sowel as om die posisies van vliegtuie wat moontlik oor die hoof kan beweeg, te ekstrapoleer.

Stap 1: Ontwerp die saak

Google -soektog bied baie verskillende ontwerpe van aanloopbaanlampe, en die ontwerp van hierdie lamp is gemaak met behulp van ontwerpinvloede van baie verskillende fabrikate van regte lampe. Dit word ook afgeskaal om in 'n kamer of op 'n rak te sit in plaas van in grootte, aangesien dit in die werklike lewe baie groter is.

Ontwerpe is in Fusion 360 opgestel en ek het 'n paar vorige elemente, soos die framboos pi nulhouer, uit vorige projekte ingevoer. Om elemente weer te kan gebruik, verg baie hoofpyn om die basiese beginsels te verminder. U kan die lêers ook hier aflaai

Stap 2: Gooi die lense - #fail

Giet die lense - #fail
Giet die lense - #fail
Giet die lense - #fail
Giet die lense - #fail
Giet die lense - #fail
Giet die lense - #fail

Die belangrikste ontwerpelement van hierdie lamp sou die lens wees. Dus het ek dit eers aangepak, sonder om 'n mooi, outentieke glas te kry, sou die projek werk. Ek beskryf hier die mislukkings wat ek in die poging gehad het om dit te bereik, sonder om te onthou dat ek ook aanvanklik besluit het om die lens amber te maak. Aanloopbane se ligte is beide amber en blou, en dit was eers nadat ek die amberkleurige een gemaak het, dat ek van plan verander het en besluit het dat ek 'n blou een wil hê.

Uit wat ek kan agterkom, word die amberkleurige by die houlyn gebruik, en die bloues word gebruik om die aanloopbaan aan te trek, en dit lyk asof dit meer argetipies is as u na die aanloopbaanligte soek. Hier is egter my eerste poging om 'n amber lens te maak. Om die lens te maak, gaan ek helderhars met 'n kleuradditief gebruik, en alhoewel ek 'n paar vorms gedoen het, het ek gewonder of dit moontlik sou wees om 'n 3D -vorm te druk en dit te gebruik. Daarom het ek begin met die maak van 'n gesplete vorm in 3D en dit in PetG gedruk. Oordeelkundige hoeveelhede vormvrystelling was ek oortuig dat dit genoeg sou wees om die vorm te laat spat. Soos dit blyk met die paar pogings, het ek die hars soos gom aan die vorm vasgemaak, en dit was skynbaar nie moontlik om dit te skei nie. Alhoewel ek die volledige skaal gehad het wat ek gaan gebruik, het ek daarteen besluit en die lens afgedruk om te gebruik met tradisionele silikoonvorm.

Stap 3: Verskillende soorte hars

Verskillende soorte hars
Verskillende soorte hars
Verskillende soorte hars
Verskillende soorte hars
Verskillende soorte hars
Verskillende soorte hars
Verskillende soorte hars
Verskillende soorte hars

As 'n vinnige eenkant het ek drie soorte helder/gekleurde harse vir hierdie projek gebruik.

Die eerste was 'n stokperdjie -mark genaamd Pebeo - Gedeo en word gewoonlik verkoop vir die inkapsel van klein voorwerpe en word gebruik vir juweliersware en papiergewigte, ens. Dit werk redelik goed en genees in ongeveer 24-36 uur. Dit is egter baie duur vir die hoeveelheid wat u kry, maar dit is handig en maklik beskikbaar in stokperdjie- en handwerkwinkels. Dit word gemeng in 'n verhouding van 2: 1. Die tweede was 'n vooraf gekleurde hars wat in 'n verhouding van 10: 1 met die verharder gemeng word, en dit het die langste tyd geneem om te genees, ongeveer 'n week om eerlik te wees voordat dit heeltemal genees is. Die laaste was 'n deursigtige hars, wat ook in die 2: 1 -verhouding gemeng is en dit in ongeveer 2 dae genees is; u kan dit met pigmentdruppels inkleur, maar u moet seker maak dat u altyd dieselfde kleurverhouding gebruik as u maak aparte bondels. Dit werk ook die mees koste -effektiewe uit. Laastens was die RTV vir die vorm 'n GP-3481 RTV, en dit neem ongeveer 24 uur om in te stel en het nogal 'n lang pot tyd, sodat u genoeg tyd het om dit te meng en dit dan te giet.

Op die oomblik het ek nie 'n vakuumpot nie (tans op bestelling), sodat u borrels in die vorm en die hars kan gooi. Nie 'n probleem hiervoor nie, maar met 'n duidelike lens of iets soortgelyks, sou u 'n manier wou oorweeg om die borrels uit die mengsels te verwyder.

Stap 4: giet die lens in silikoonvorm #2

Image
Image
Giet die lens in silikoonvorm #2
Giet die lens in silikoonvorm #2
Giet die lens in silikoonvorm #2
Giet die lens in silikoonvorm #2

Dit is dus die tweede poging om 'n hars -lens te maak, en die eerste fase was om 'n lens in Fusion 360 te maak en dit dan in ABS sowel as 'n emmer te druk. Dit is eersgenoemde vir die vorm en help om die hoeveelheid silikoon wat gebruik moet word, te verminder. U kan dit maklik uit kaart maak, maar dit is net 'n ander benadering. Om die kans groter te maak om uit die vorm te kom, het ek dit eers geverf en daarna 'n goeie bedekking met wasaflosmiddel gegee.

Ek gooi toe 'n paar GP-3481, wat ongeveer 27 RTV is, en laat dit dan oor die volgende 24 uur sit voordat dit gevorm word. Sodra dit klaar was, gebruik ek die helder hars gemeng in 'n verhouding van 2: 1 met ongeveer 4/5 druppels kleurpigment en meng dit goed vir vier minute. Giet dit in die vorm en plaas dan ook 'n skutglas in die hars om later 'n leemte vir 'n lamp of die LED's te gee. Na ongeveer 24 uur was hierdie hars gereed om te verwyder en die lens het redelik goed uitgekom. Daar is lugborrels, maar ek het nog nie 'n vakuumhouer om die hars te ontgas voordat dit gegooi word nie.

Stap 5: 3D -druk en voorbereiding

3D -druk en voorbereiding
3D -druk en voorbereiding
3D -druk en voorbereiding
3D -druk en voorbereiding
3D -druk en voorbereiding
3D -druk en voorbereiding

Die model is so ontwerp dat die sentrale gedeelte in die basis aansluit. Dit was vermy maskering tydens die verfproses. Die hele model is in Hatchbox ABS gedruk en daarna geskuur. Begin met 60 grint tot ongeveer 800 grit, wat 'n goeie genoeg oppervlakafwerking vir hierdie model gegee het.

Stap 6: Montering en verf

Montage en verf
Montage en verf
Montage en verf
Montage en verf
Montage en verf
Montage en verf

Nadat die afdrukke geskuur is, is dit geverf met 'n hoë onderlaag. Liggies geskuur en daarna met grys onderlaag gespuit. Die hoofdele is in Ford -seingeel geverf, en daarna is Brookland -groen vir die basis gebruik. hoogtepunte van tamiya silwer is daarna op die boute aangebring en 'n paar molotow silwer chroom op die lenshouer.

Stap 7: Soek eers vliegtuie binne 'n grensgebied

Met die hardeware gesorteer, moes daar aan die sagteware gewerk word. Daar is nou 'n paar webwerwe wat vlugopsporing bied, maar nie baie wat 'n API bied om toegang tot die data te verkry nie. Sommige wat dit doen, doen dit slegs op kommersiële basis, maar gelukkig is daar een webwerf genaamd https://opensky-network.org wat u gratis kan gebruik.

Om toegang tot hierdie data te verkry, moet u registreer, en dan kan u hul API gebruik; dit bied verskillende funksies en maniere om die data te haal. Ons is geïnteresseerd in al die vlugte binne 'n gebied, en hulle het 'n Live API -oproep daarvoor. https://opensky-network.org/apidoc/ 'bounding box' genoem. Die API -oproep vereis die hoeke van die boks waarin u belangstel, natuurlik ons Lat/Lon as die middelpunt. U kan die wiskunde op hierdie webwerf nagaan, wat 'n blokkie trek, afhangende van wat u intik."

funksie 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 ($ lengtegraad_in_grade); $ 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); retourskikking ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max);

As u u kode wil toets, is daar 'n webwerf waarop u die lat/lon kan invoer en die resultate op 'n kaart kan sien: sien 'n voorbeeld van 'n afgrensblok op 'n kaart

Stap 8: Berekening van die opskrif van die vliegtuie in verhouding tot ons

Berekening van die opskrif van die vliegtuie in verhouding tot ons
Berekening van die opskrif van die vliegtuie in verhouding tot ons

Die resultate van die API -oproep van die grensbus gee ons 'n lys van vliegtuie, hul Lon/lat, spoed, hoogte en koers. Die volgende ding wat ons moet doen, is om die opskrif van elke vlak ten opsigte van ons te kry, sodat ons diegene wat ten minste in ons algemene rigting op pad is, kan verwerk. Ons kan dit doen soos ons ons posisie ken en die hoek van ons na elke vlak kan uitwerk.

Om dit te kan doen, gebruik ek 'n stuk kode waarvan dit oorspronklik in Javascript was, en ek het dit hier omgeskakel na PHP, * bereken (aanvanklike) peiling tussen twee punte * * van: Ed Williams 'Aviation Formulary, https://williams.best.vwh.net/avform.htm#Crs * source = instantglobe.com/CRANES/GeoCoordTool.html */ funksie 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; gee $ zz terug;

As u na die bladsy wil kyk waar die oorspronklike javascript -weergawes is, is dit die skakel:

binne die kode kan u ook die verskillende subroetines vir elke tipe berekening sien.

Stap 9: Berekening van 'n afsnypunt deur na 'n sirkel te kyk

Berekening van 'n afsnypunt deur na 'n sirkel te kyk
Berekening van 'n afsnypunt deur na 'n sirkel te kyk

Ons het dus nou 'n vliegtuig waar die peiling tussen dit en ons ligging minder as 90 is (positief of negatief), en dit beteken dat daar 'n kans is dat dit naby kan vlieg. Deur die haversine -formule te gebruik, kan ons ook uitwerk met die Lon/Lat van die vliegtuig en die Lon/Lat van ons huis, die afstand wat dit van ons af is.

As ons na die diagram kyk, as ons 'n sirkel om ons huis trek met 'n radius van ongeveer 3 myl, gee dit ons 'n kans om iets te sien vlieg. Ons ken die verskil in die koers tussen die vliegtuig en ons, ons ken ook die afstand van die vliegtuig van ons sodat ons dan die driehoek kan uitwerk met behulp van die goeie ou SOHCAHTOA, en in hierdie geval kan ons die Tan van die hoek kry teenoorgestelde sylengte. As ons hierdie waarde dus vergelyk met die radiuswaarde van die sirkel om die huis, kan ons uitvind of die vliegtuig naby genoeg sal vlieg sodat ons dit kan sien. Die volgende stukkie wat ons kan doen, is om die tyd wat die vliegtuig verby vlieg, te bereken deur die lugspoed en die afstand te gebruik, en as dit ongeveer 45 sekondes is, skakel ons die lig aan. Dit is 'n bietjie van die kode wat ek gebruik om die kans op 'n vlieg uit te werk. Ek doen dit omdat daar 'n nabygeleë lughawe is en as die vliegtuie rondry, wys dit noodwendig na die huis. Aangesien hul hoogte nul is en die spoed styg, behoort dit nie die alarm te aktiveer nie.

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

as (($ flight_angle <90) && ($ flight_intercept <3)) {// moontlik verby vlieg

}

gee $ flight_intercept terug;

}

Stap 10: Afstand tussen twee punte op 'n kaart - Haversine -formule

Afstand tussen twee punte op 'n kaart - Haversine -formule
Afstand tussen twee punte op 'n kaart - Haversine -formule

Ons moet dus die afstand tussen die vliegtuig en ons ligging bereken. Op kort afstande op 'n kaart kan u die afstand ongeveer bereken, maar aangesien die aarde bolvormig is, is daar 'n formule genaamd die haversineformule waarmee u die geboë oppervlak kan in ag neem. U kan verder lees in die formule:

Met die berekende afstand en ons weet wat die lugsnelheid van die vliegtuig is, kan ons uitwerk hoeveel sekondes dit sal neem voordat die vliegtuig bo -op is. Die lig sal dus aangaan as daar iets binne 30 sekondes na vliegpos is, en ons het uiteindelik ons waarskuwingslig.

* gebaseer op 0n JS op instantglobe.com/CRANES/GeoCoordTool.html en verander in PHP */

funksie get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // aarde se gemiddelde radius in 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; gee $ d terug; }

Stap 11: Die vliegtuigdatabasis invoer en definieer

Een van die ander stukke is dat die opensky -webwerf 'n aflaaibare databasis van vliegtuie bied, saam met hul roepsein en idente. Dit is 'n paar honderd duisend inskrywings. Ons kan dit dus aflaai en plaaslik in 'n MariaDB -databasis laai om op te soek (MySQL). Met elke vliegtuig wat bo ons verskyn, haal ons die besonderhede daarvan op en werk 'n toonbank by om te wys hoeveel keer dit gesien is.

Ek is tans besig om die databasis te wysig om vliegtuie waarin ek belangstel, uit te lig. Hoofsaaklik ou warbirds en ander soortgelyke interessante vliegtuie. 'N Paar keer hierdie somer het 'n Mig-15 oorgevlieg. dus is die doel om 'n waarskuwingsveld te gebruik wat ek bygevoeg het en dan vinnig die lig te flits as iets interessants op pad is

Stap 12: Verbetering van resultate en nuwe funksies

Verbetering van resultate en nuwe funksies
Verbetering van resultate en nuwe funksies
Verbetering van resultate en nuwe funksies
Verbetering van resultate en nuwe funksies
Verbetering van resultate en nuwe funksies
Verbetering van resultate en nuwe funksies

So in teorie werk alles redelik goed, maar met die data sal u agterkom dat daar vliegtuie is wat nie in die API verskyn nie.

Dit is omdat nie alle vliegtuie die ADS-B-transponder gebruik nie en ouer transponders gebruik wat op MLAT gebaseer is. Om posisies oor vliegtuie met MLAT te verkry, is 'n reeks ontvangers op die grond nodig om hul posisie te trianguleer, en sommige webwerwe soos flightradar24 het 'n groter netwerk van bydraers wat dit doen in vergelyking met opensky. Hopelik sal hul dekking mettertyd ook verbeter, en ek stel my eie MLAT -ontvanger op om by hierdie data te voeg.

Stap 13: Kodebasis

Moenie vergeet dat as u dit gaan gebruik nie, u die SQL -stellings wil verwyder as u nie die databasis van vliegtuie het nie en ook u eie Lon/Lat -waarde en API -sleutel byvoeg vir toegang tot die vlugdata.

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

definieer ("INTERVAL", (20 * 1)); funksie fexp () {$ lat = "jou breedtegraad"; $ lon = "jou lengte"; $ sy = 15,75; $ box = get_bounding_box ($ lat, $ lon, $ side); $ latmin = $ boks [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"; eggo "Skandeer die lug"; $ start_time = mikrotyd (waar); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, WAAR); $ inkomend = ONWAAR; $ num_planes = count ($ data ['state']); if ($ num_planes> 0) {echo "en ons kan $ num_planes vliegtuie sien / n"; vir ($ x = 0; $ x 0) {$ plane_eta = $ distplane/$ air_speed_kmh; } anders {$ eta = 1; } if ((($ intercept) 0)) && ($ distplane0) {$ inbound = TRUE; eggo "------------------------------------------------- -------------------- / n "; eggo "$ icao24 - [$ country $ roepsein] by [$ geo_altitude_m M - $ geo_altitude_f ft]"; eggo "[spoed $ air_speed_kmh kmh en", rond ($ distplan, 1), "km weg] n"; eggo "[op 'n opskrif van", rond ($ plane_heading, 1), "] [homeangle $ heading_d]"; eggo "[$ breedtegraad, $ lengtegraad] n"; eggo "[flypast in", desimale_to_tyd ($ plane_eta), "nou", rond ($ onderskep, 1), "km weg / n"; eggo "------------------------------------------------- -------------------- / n "; $ DBi = nuwe mysqli ("127.0.0.1", "root", "u wagwoord", "awacs"); $ sql = "kies * uit vliegtuigdatabasis waar` icao24` = '$ icao24' "; mysqli_set_charset ($ DBi, "utf8"); $ getplanedata = mysqli_query ($ DBi, $ sql) of sterf (mysqli_error ($ DBi)); $ row_getplanedata = mysqli_fetch_assoc ($ getplanedata); $ rye_getplanedata = mysqli_num_rows ($ getplanedata); as ($ lines_getplanedata> 0) {do {echo "callsign ="; eggo $ row_getplanedata ['registrasie']; eggo "is 'n"; eggo $ row_getplanedata ['vervaardigersnaam']; eggo ""; eggo $ row_getplanedata ['model']; eggo "deur"; eggo $ row_getplanedata ['vervaardiger']; eggo "in besit van"; eggo $ row_getplanedata ['eienaar']; eggo "gesien"; eggo $ row_getplanedata ['besoeke']; eggo "tye"; eggo "spesiale gradering ="; eggo $ row_getplanedata ['spesiaal']; eggo "\ n"; $ besoeke = $ row_getplanedata ['besoeke']+1; } terwyl ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "UPDATE vliegtuigdatabasis SET besoeke = $ besoeke WAAR icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) of sterf (mysqli_error ($ DBi)); } anders {echo "Kon hierdie vliegtuig nie in die DB kry nie, so voeg dit by"; $ sqli = "INVOER IN VLIEGTuigdatabasis (icao24, besoeke, spesiale) WAARDES ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) of sterf (mysqli_error ($ DBi)); } eggo "----------------------------------------------- --------------------- / n "; } anders {// eggo "$ roepsein"; }}} anders {echo "en die lug is helder / n"; } if ($ inkomend) {echo "Inkomende vliegtuig / n"; $ command = "varke w 17 1"; execInBackground ($ opdrag); } anders {eggo "geen inkomende vlugte / n"; $ command = "varke w 17 0"; execInBackground ($ opdrag); }} funksie decimal_to_time ($ desimaal) {$ offset = 0.002778; as ($ desimaal> $ offset) {$ desimaal = $ desimaal - 0.002778; } $ uur = gmdate ('H', vloer ($ desimaal * 3600)); $ minute = gmdate ('i', vloer ($ desimaal * 3600)); $ sekondes = gmdate ('s', vloer ($ desimaal * 3600)); gee str_pad terug ($ uur, 2, "0", STR_PAD_LEFT). ":". str_pad ($ minute, 2, "0", STR_PAD_LEFT). ":". str_pad ($ sekondes, 2, "0", STR_PAD_LEFT); }/ * * bereken (aanvanklike) peiling tussen twee punte * * van: 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; gee $ zz terug; } funksie 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; gee $ flight_intercept terug; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *// * * Gebruik die Haversine -formule om die afstand (in km) tussen twee punte te bereken, gespesifiseer deur * breedtegraad/lengte (in numeriese grade) * * vanaf: Haversine -formule - RWSinnott, "Virtues of the Haversine", * Sky and Telescope, vol 68, no 2, 1984 * https://williams.best.vwh.net/avform.htm#Crs * * voorbeeldgebruik vanaf vorm: * result.value = LatLon.distHaversine (lat1.value.parseDeg (), long1.value.parseDeg (), * lat2.value.parseDeg (), long2.value.parseDeg ()); * waar lat1, long1, lat2, long2 en resultaat vormvelde is * source = instantglobe.com/CRANES/GeoCoordTool.html */function get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // aarde se gemiddelde radius in 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; gee $ d terug; } funksie 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 ($ lengtegraad_in_grade); $ radius = 6371; # Radius van die parallel op gegewe breedtegraad; $ 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); retourskikking ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max); } funksie execInBackground ($ cmd) {if (substraat (php_uname (), 0, 7) == "Windows") {pclose (popen ("start /B". $ cmd, "r")); } anders {exec ($ cmd. "> /dev /null &"); }} funksie checkForStopFlag () {// heeltemal opsionele opgawe (WAAR); } funksie begin () {echo "begin / n"; $ command = "varke w 17 1"; execInBackground ($ opdrag); $ aktief = WAAR; terwyl ($ aktief) {usleep (1000); // opsioneel, as u bedagsaam wil wees as (microtime (true)> = $ nextTime) {fexp (); $ nextTime = mikrotyd (waar) + INTERVAL; } $ active = checkForStopFlag (); }} fexp (); begin (); ?>

Stap 14: Bedrading van die LED en die afsluitskakelaar

Bedrading van die LED en die afsluitskakelaar
Bedrading van die LED en die afsluitskakelaar

Die bedrading van hierdie projek kan eintlik nie eenvoudiger wees nie. Daar is net die een LED wat aan pen 17 gekoppel is en met 'n 270R -weerstand inlyn gemaal word.

Ek sluit ook 'n afsluit- en aanskakelknoppie in, asook 'n aan / uit -LED wat van die TXd -datapennetjie afloop. U kan meer lees oor die afsluitingsfunksie en die vereiste kode op https://github.com/Howchoo/pi-power-button.git vanaf die webwerf https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow … U kan hier lees oor die toevoeging van 'n kraglamp

Aanbeveel: