Indholdsfortegnelse:

Tidlig advarsel Raspberry PI Runway Light ved hjælp af flyvekortdata: 14 trin (med billeder)
Tidlig advarsel Raspberry PI Runway Light ved hjælp af flyvekortdata: 14 trin (med billeder)

Video: Tidlig advarsel Raspberry PI Runway Light ved hjælp af flyvekortdata: 14 trin (med billeder)

Video: Tidlig advarsel Raspberry PI Runway Light ved hjælp af flyvekortdata: 14 trin (med billeder)
Video: Как работают световые перья и световые пистолеты NES Zapper 2024, Juli
Anonim
Tidlig advarsel Raspberry PI Runway Light ved hjælp af flyvekortdata
Tidlig advarsel Raspberry PI Runway Light ved hjælp af flyvekortdata
Tidlig advarsel Raspberry PI Runway Light ved hjælp af flyvekortdata
Tidlig advarsel Raspberry PI Runway Light ved hjælp af flyvekortdata
Tidlig advarsel Raspberry PI Runway Light ved hjælp af flyvekortdata
Tidlig advarsel Raspberry PI Runway Light ved hjælp af flyvekortdata
Tidlig advarsel Raspberry PI Runway Light ved hjælp af flyvekortdata
Tidlig advarsel Raspberry PI Runway Light ved hjælp af flyvekortdata

Denne lampe opstod af flere årsager, idet jeg altid er interesseret i de fly, der flyver over hovedet, og om sommeren i weekenderne er der ofte nogle ret spændende, der flyver rundt. Selvom du kun har en tendens til at høre dem, når de går forbi. Så er den anden grund, at det ser ud til, at flyvevejen for udgående fly fra London City lufthavn til tider vil blive overhørt, og de har nogle temmelig støjende flyvninger. Da jeg var ved at optage nogle videoer til YouTube, er det virkelig irriterende at skulle skrotte en optagelse på grund af et støjende fly. Så jeg spekulerede på, om de data, du ser på websteder som flightradar24, er offentligt tilgængelige, da jeg opdagede, at noget lignende var tilgængeligt fra opensky -netværket, blev den tidlige advarselslampe født. Det tog ikke alt for lang tid at komme på ideen om at bruge en kopi af en landingsbane til at huse projektet.

Du kan finde ud af mere om The OpenSky Network på https://www.opensky-network.org Jeg ville også denne gang lave en flot harpiksobjektiv i stedet for at bruge gennemsigtig PLA, og selvom jeg har en ADS-B-modtager, jeg gerne ville beholde dette enkle og billige. ADS-B har også brug for en antenne, og det ville ikke gøre for en lampe at komme på hylden på kontoret. Så forhåbentlig finder du bygningen interessant, da den dækker 3D -print, harpiksstøbning og matematik samt at ekstrapolere positionerne af fly, der potentielt kan passere overhead.

Trin 1: Design af sagen

Google -søgning kommer med mange forskellige designs af landingsbanelampe, og designet af denne blev lavet ved hjælp af designpåvirkninger fra mange forskellige mærker af rigtige lamper. Det er også skaleret til at sidde i et værelse eller på en hylde frem for fuld størrelse, da de har en tendens til at være meget større i virkeligheden.

Design blev udarbejdet i Fusion 360, og jeg importerede nogle tidligere elementer, såsom hindbær pi zero -holderen fra tidligere projekter. At kunne genbruge elementer tager meget af hovedpinen ud af at få det grundlæggende ned. Du kan også downloade filerne her

Trin 2: Støbning af linserne - #fail

Støbning af linserne - #fail
Støbning af linserne - #fail
Støbning af linserne - #fail
Støbning af linserne - #fail
Støbning af linserne - #fail
Støbning af linserne - #fail

Det vigtigste designelement i denne lampe var linsen. Så jeg tacklede dette først som uden et flot autentisk glas, som projektet skulle fungere. Jeg dokumenterer her de fejl, jeg havde i forsøget på at opnå det, uden at modstå, at jeg også i første omgang besluttede at gøre linsen rav. Banebelysning kommer i både rav og blå, og det var først efter jeg var begyndt at lave det gule, at jeg ændrede mening og besluttede, at jeg ville have en blå.

Efter hvad jeg kan finde ud af, bruges de ravfarvede ved holdelinjen, og de blå bruges til at linke landingsbanen, og det er dem, der synes at være de mere arketypiske, der findes, hvis du søger efter landingsbaner. Men her er mit første forsøg på at lave en ravfarvet linse. For at lave linsen skulle jeg bruge clearcast -harpiks med et farvetilsætningsstof, og selvom jeg har lavet et par forme før, spekulerede jeg på, om det var muligt at udskrive en 3D -form og bruge det. Så jeg startede med at lave en splitform i 3D og udskrive den i PetG. Skikkelige mængder skimmelsvamp, jeg var overbevist om, ville være nok til at sprede formen. Som det viser sig med et par forsøg, fik jeg harpiksen til at hænge fast i formen som lim, og det virkede bare ikke til at adskille dem. Selvom jeg havde den i fuld skala, som jeg skulle bruge, besluttede jeg mig imod det og udskrev objektivet til brug med traditionel silikoneformning.

Trin 3: Forskellige typer harpiks

Forskellige typer harpiks
Forskellige typer harpiks
Forskellige typer harpiks
Forskellige typer harpiks
Forskellige typer harpiks
Forskellige typer harpiks
Forskellige typer harpiks
Forskellige typer harpiks

Som en hurtig side brugte jeg 3 typer klare/farvede harpikser til dette projekt.

Den første var en Hobby -markedstype kaldet Pebeo - Gedeo og sælges normalt til indkapsling af små genstande og bruges til smykker og skrivebordspapirvægte osv. Dette fungerede ret godt og helbredte pænt på cirka 24-36 timer. Det er dog ret dyrt for det beløb, du får, men er praktisk og let tilgængeligt i hobby- og håndværksbutikker. Det blandes i et forhold på 2: 1. Den anden var en præfarvet harpiks, der blandes i et forhold på 10: 1 med hærderen, og dette tog den længste tid at hærde, cirka en uge for at være ærlig, før den var fuldstændig hærdet. Den sidste var en klar harpiks, der også blev blandet i forholdet 2: 1 og dette hærdet på cirka 2 dage, du kan farve dette med dråber pigment, men du skal sørge for, at du altid bruger det samme farveforhold, hvis du laver separate partier. Det fungerer også det mest omkostningseffektive. Endelig var RTV for formen en GP-3481 RTV, og det tager cirka 24 timer at indstille og har en ganske lang grydetid, så du har masser af tid til at blande den og derefter hælde den.

I øjeblikket har jeg ikke en vakuumkande (i øjeblikket på bestilling), så du kan blive plaget af bobler i både formen og harpiksen. Ikke for meget et problem for dette, men med en klar linse eller lignende, så vil du overveje en eller anden måde at få boblerne ud af blandingerne.

Trin 4: Støbning af linsen i silikoneform #2

Image
Image
Støbning af linsen i silikoneform #2
Støbning af linsen i silikoneform #2
Støbning af linsen i silikoneform #2
Støbning af linsen i silikoneform #2

Så dette er det andet forsøg på at lave et harpiksobjektiv, og det første trin var at lave både et objektiv i Fusion 360 og derefter printe det i ABS samt en spand til at holde det. Dette ville være førstnævnte til formen og hjælper med at holde mængden af silikone, der skal bruges, nede. Du kan nemt lave dette ud af kort, men det er bare en anden tilgang. For at give den en bedre chance for at blive frigivet fra formen lakede jeg den først og gav den derefter en god belægning af voksfrigivelsesmiddel.

Jeg hældte derefter noget GP-3481, der er omkring shore 27 RTV, og lod det derefter sætte sig i løbet af de næste 24 timer, før det formedes. Når dette var gjort, brugte jeg den klare harpiks blandet i forholdet 2: 1 med ca. 4/5 dråber af farvepigmentet og blandede det godt i godt fire minutter. Hældte dette i formen og placerede derefter et skudglas i harpiksen for at give et hul senere for enten en lampe eller LED'erne. Efter cirka 24 timer var denne harpiks klar til at fjerne, og objektivet kom ret godt ud. Der er luftbobler til stede, men endnu har jeg ikke et vakuumbeholder til at afgasse harpiksen, før det hældes.

Trin 5: 3D -udskrivning og forberedelse

3D -udskrivning og forberedelse
3D -udskrivning og forberedelse
3D -udskrivning og forberedelse
3D -udskrivning og forberedelse
3D -udskrivning og forberedelse
3D -udskrivning og forberedelse

Modellen er designet på en måde, så den centrale sektion tilsluttes basen. Dette var for at undgå maskering under malingsprocessen. Hele modellen blev trykt i Hatchbox ABS og derefter slebet. Startende med 60 korn op til omkring 800 grus gav en god nok overfladefinish til denne model.

Trin 6: Montering og maling

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

Når udskrifterne er slebet, blev det derefter malet med en højprimer. Slibes let og sprøjtes derefter i grå primer. Hoveddelene blev malet i ford signal gul, og derefter blev brooklands grøn brugt til basen. højdepunkter af tamiya sølv blev derefter påført boltene og nogle molotow sølv krom brugt på linseholderen.

Trin 7: Find først fly inden for et afgrænsningsområde

Med hardwaren sorteret skulle softwaren bearbejdes. Der er et par steder nu, der giver flyvesporing, men ikke mange, der giver en API til at få adgang til disse data. Nogle der gør det, gør det kun på kommercielt grundlag, men heldigvis er der et websted kaldet https://opensky-network.org, som du kan bruge gratis.

For at få adgang til disse data skal du registrere, og derefter kan du bruge deres API, det giver flere funktioner og måder at trække dataene på. Vi er interesseret i alle flyvninger inden for et område, og de har et Live API -opkald til det. https://opensky-network.org/apidoc/ kaldet afgrænsningsboks. API -opkaldet kræver de hjørner af boksen, som du er interesseret i, selvfølgelig vores Lat/Lon som centrum. Du kan kontrollere, om matematikken fungerer på dette websted, der tegner en boks afhængigt af, hvad du skriver. Http://tools.geofabrik.de, men i øjeblikket giver følgende script de punkter, vi har brug for at tilslutte API'en.

funktion 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); $ 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); return array ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max);

Hvis du vil teste din kode, er der et websted, hvor du kan indtaste lat/lon og se resultaterne på et kort: Se et afgrænsningsfelteksempel på et kort

Trin 8: Beregning af overskriften på flyene i forhold til os

Beregning af overskriften på flyene i forhold til os
Beregning af overskriften på flyene i forhold til os

Resultaterne fra grænsekassens API -opkald giver os en liste over fly, deres Lon/lat, hastighed, højde og kurs. Så den næste ting, vi skal gøre, er at få overskriften på hvert plan i forhold til os, så vi kan behandle dem, der i det mindste er på vej i vores generelle retning. Vi kan gøre dette, da vi kender vores position og kan beregne vinklen fra os til hvert plan.

For at gøre det bruger jeg et stykke kode, som oprindeligt var i Javascript, så jeg konverterede det her til PHP, * beregne (indledende) peiling mellem to punkter * * fra: Ed Williams 'Aviation Formulary, https://williams.best.vwh.net/avform.htm#Crs * source = instantglobe.com/CRANES/GeoCoordTool.html */ funktion 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; returnere $ zz;

Hvis du vil se på siden, hvor de originale javascript -versioner er, er dette linket:

inden for denne kode kan du også se de forskellige underrutiner for hver beregningstype.

Trin 9: Beregning af en aflytning ved at se på en cirkel

Beregning af en aflytning ved at se på en cirkel
Beregning af en aflytning ved at se på en cirkel

Så vi har nu et fly, hvor peilingen mellem det og vores placering er mindre end 90 (enten positiv eller negativ), og det betyder, at der er en chance for, at det kan flyve i nærheden. Ved hjælp af haversine -formlen kan vi også regne ud ved at bruge flyets Lon/Lat og Lon/Lat i vores hus den afstand, den er væk fra os.

Ser vi på diagrammet, giver vi os en chance for at se noget flyve over, hvis vi tegner en cirkel omkring vores hus med en radius på cirka 3 miles. Vi kender forskellen i kursen mellem flyet og os, vi kender også flyets afstand fra os, så vi derefter kan udarbejde trekanten ved hjælp af den gode gamle SOHCAHTOA, og i dette tilfælde ved hjælp af Tan af vinklen kan vi få modsatte sidelængde. Så hvis vi sammenligner denne værdi med radiusværdien af cirklen omkring huset, kan vi så finde ud af, om flyet vil flyve tæt nok til, at vi kan se det. Den næste bit, vi kan gøre, er at regne ud det tidspunkt, hvor flyet vil flyve forbi ved at bruge lufthastigheden og afstanden, og hvis dette er mindre end sige cirka 45 sekunder eller deromkring, tænder vi lyset. Dette er lidt af koden, som jeg bruger til at regne chancen for en flyve over. Jeg gør dette, da der er en nærliggende lufthavn, og når flyene kører rundt, peger de uundgåeligt på huset. Men da deres højde er nul og hastigheden er i gang, bør dette ikke udløse alarmen.

funktion 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 flyve forbi

}

retur $ flight_intercept;

}

Trin 10: Afstand mellem to punkter på et kort - Haversine -formel

Afstand mellem to punkter på et kort - Haversine -formel
Afstand mellem to punkter på et kort - Haversine -formel

Så vi skal beregne afstanden mellem flyet og vores placering. På korte afstande på et kort kunne du omtrent beregne afstanden, men da jorden er kugleformet, er der en formel kaldet haversinformlen, der giver dig mulighed for at tage højde for den buede overflade. Du kan læse mere ind i formlen:

Nu med beregnet afstand, og vi kender flyets lufthastighed, kan vi regne ud, hvor mange sekunder det vil være, før flyet er overhead. Så lyset tændes, hvis der er noget inden for 30 sekunder efter flypast, og vi endelig har vores advarselslampe.

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

funktion get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // jordens middelradius 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; returnere $ d; }

Trin 11: Import og definition af flydatabasen

Et af de andre stykker er, at opensky -webstedet tilbyder en downloadbar database med fly sammen med deres kaldesignaler og identer. Dens flere hundrede tusinde poster. Så vi kan downloade dette og indlæse det lokalt i en MariaDB -database til opslag (MySQL). Med hvert fly, der vises overhead, henter vi dets detaljer og opdaterer en tæller for at vise, hvor mange gange det er set.

Jeg redigerer også i øjeblikket databasen for at fremhæve fly, som jeg er interesseret i. Hovedsagelig gamle warbirds og andre lignende interessante fly. Et par gange i sommer er en Mig-15 fløjet over. så målet er at bruge et advarselsfelt, jeg har tilføjet, og derefter blinke lyset hurtigt, når noget interessant er på vej over

Trin 12: Forbedring af resultater og nye funktioner

Forbedring af resultater og nye funktioner
Forbedring af resultater og nye funktioner
Forbedring af resultater og nye funktioner
Forbedring af resultater og nye funktioner
Forbedring af resultater og nye funktioner
Forbedring af resultater og nye funktioner

Så i teorien fungerer alt ret godt, men du vil med dataene opdage, at der er fly, der flyver over, som ikke vises i API'en.

Dette skyldes, at ikke alle fly bruger ADS-B-transponderen og bruger ældre transpondere baseret på MLAT. For at få positionsdata om fly ved hjælp af MLAT kræver det en række modtagere på jorden for at triangulere deres position, og nogle steder som flightradar24 har et større netværk af bidragydere, der gør dette sammenlignet med opensky. Forhåbentlig vil deres dækning med tiden også blive bedre, og jeg opretter min egen MLAT -modtager for at tilføje til disse data.

Trin 13: Kodebase

Glem ikke, at hvis du vil bruge dette, vil du måske fjerne SQL -sætningerne, hvis du ikke har databasen over fly og også tilføje din egen Lon/Lat -værdi og API -nøgle til adgang til flyvedata.

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

definere ("INTERVAL", (20 * 1)); funktion fexp () {$ lat = "din breddegrad"; $ lon = "din længdegrad"; $ 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 "Scanning af SKY"; $ start_time = mikrotid (sand); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, TRUE); $ indgående = FALSKT; $ num_planes = count ($ data ['tilstande']); hvis ($ num_planes> 0) {echo "og vi kan se $ num_planes plane / n"; for ($ x = 0; $ x 0) {$ plane_eta = $ distplane/$ air_speed_kmh; } andet {$ eta = 1; } hvis ((($ intercept) 0)) && ($ distplane0) {$ inbound = TRUE; ekko "------------------------------------------------ -------------------- / n "; ekko "$ icao24 - [$ country $ kaldesignal] ved [$ geo_altitude_m M - $ geo_altitude_f ft]"; ekko "[hastighed $ air_speed_kmh kmh og", rund ($ distplan, 1), "km væk] n"; echo "[på en overskrift af", rund ($ plane_heading, 1), "] [homeangle $ heading_d]"; ekko "[$ breddegrad, $ længdegrad] n"; ekko "[flypast in", decimal_to_time ($ plane_eta), "nu", rund ($ intercept, 1), "km væk / n"; ekko "------------------------------------------------ -------------------- / n "; $ DBi = ny mysqli ("127.0.0.1", "root", "din adgangskode", "awacs"); $ sql = "vælg * fra flydatabase, hvor` icao24` = '$ icao24' "; mysqli_set_charset ($ DBi, "utf8"); $ getplanedata = mysqli_query ($ DBi, $ sql) eller die (mysqli_error ($ DBi)); $ row_getplanedata = mysqli_fetch_assoc ($ getplanedata); $ rows_getplanedata = mysqli_num_rows ($ getplanedata); hvis ($ rows_getplanedata> 0) {do {echo "callsign ="; ekko $ row_getplanedata ['registrering']; ekko "er a"; ekko $ row_getplanedata ['fabrikantnavn']; ekko " "; ekko $ row_getplanedata ['model']; ekko "af"; echo $ row_getplanedata ['fabrikanticao']; ekko "ejet af"; ekko $ row_getplanedata ['ejer']; ekko "set"; ekko $ row_getplanedata ['besøg']; ekko "tider"; ekko "special rating ="; ekko $ row_getplanedata ['special']; ekko "\ n"; $ besøg = $ row_getplanedata ['besøg']+1; } mens ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "OPDATER flydatabase SET besøg = $ besøg HVOR icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) eller die (mysqli_error ($ DBi)); } else {echo "Kunne ikke finde dette fly i DB så tilføjede det"; $ sqli = "INDLÆG I flydatabase (icao24, besøg, special) VÆRDIER ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) eller die (mysqli_error ($ DBi)); } ekko "----------------------------------------------- --------------------- / n "; } andet {// ekko "$ callign"; }}} else {echo "og himlen er klar / n"; } hvis ($ indgående) {echo "Indgående fly / n"; $ command = "grise m 17 1"; execInBackground ($ kommando); } ellers {ekko "ingen indgående flyvninger / n"; $ command = "grise m 17 0"; execInBackground ($ kommando); }} funktion decimal_to_time ($ decimal) {$ offset = 0.002778; hvis ($ decimal> $ offset) {$ decimal = $ decimal - 0.002778; } $ timer = gmdate ('H', etage ($ decimal * 3600)); $ minutter = gmdate ('i', etage ($ decimal * 3600)); $ sekunder = gmdate ('s', etage ($ decimal * 3600)); return 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 (indledende) peiling mellem 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; returnere $ zz; } funktion 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; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *// * * Brug Haversine -formel til at beregne afstand (i km) mellem to punkter angivet med * breddegrad/længdegrad (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 * * brug af 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 formularfelter * source = instantglobe.com/CRANES/GeoCoordTool.html */function get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // jordens middelradius 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; returnere $ d; } funktion 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); $ radius = 6371; # Radius af parallellen på den givne 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); return array ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max); } funktion execInBackground ($ cmd) {if (substr (php_uname (), 0, 7) == "Windows") {pclose (popen ("start /B". $ cmd, "r")); } ellers {exec ($ cmd. "> /dev /null &"); }} funktion checkForStopFlag () {// fuldstændig valgfri retur (SAND); } funktionsstart () {echo "starter / n"; $ command = "grise m 17 1"; execInBackground ($ kommando); $ aktiv = SAND; mens ($ aktiv) {usleep (1000); // valgfri, hvis du vil være hensynsfuld, hvis (microtime (true)> = $ nextTime) {fexp (); $ nextTime = mikrotid (sand) + INTERVAL; } $ active = checkForStopFlag (); }} fexp (); Start(); ?>

Trin 14: Tilslutning af LED'en og afbryderkontakten

Tilslutning af LED og afbryderkontakt
Tilslutning af LED og afbryderkontakt

Ledninger til dette projekt kunne virkelig ikke være enklere. Der er kun den ene LED, der er forbundet til pin 17 og jordet med en 270R modstand inline.

Jeg inkluderer også en nedlukning og tænd / sluk -knap sammen med en strøm -LED, der kører TXd -datapinden. Du kan læse mere om nedlukningsfunktionen og den nødvendige kode på https://github.com/Howchoo/pi-power-button.git fra webstedet https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow … Du kan læse om at tilføje et power-lys her

Anbefalede: