Sadržaj:

Rano upozorenje Raspberry PI svjetlo piste s podacima o kartiranju leta: 14 koraka (sa slikama)
Rano upozorenje Raspberry PI svjetlo piste s podacima o kartiranju leta: 14 koraka (sa slikama)

Video: Rano upozorenje Raspberry PI svjetlo piste s podacima o kartiranju leta: 14 koraka (sa slikama)

Video: Rano upozorenje Raspberry PI svjetlo piste s podacima o kartiranju leta: 14 koraka (sa slikama)
Video: Netaknuta napuštena afroamerička kuća - vrlo čudan nestanak! 2024, Juli
Anonim
Rano upozorenje Raspberry PI svjetlo piste pomoću podataka kartiranja leta
Rano upozorenje Raspberry PI svjetlo piste pomoću podataka kartiranja leta
Rano upozorenje Raspberry PI svjetlo piste pomoću podataka kartiranja leta
Rano upozorenje Raspberry PI svjetlo piste pomoću podataka kartiranja leta
Rano upozorenje Raspberry PI svjetlo piste pomoću podataka kartiranja leta
Rano upozorenje Raspberry PI svjetlo piste pomoću podataka kartiranja leta
Rano upozorenje Raspberry PI svjetlo piste pomoću podataka kartiranja leta
Rano upozorenje Raspberry PI svjetlo piste pomoću podataka kartiranja leta

Ova lampa je nastala iz nekoliko razloga jer me uvijek zanimaju avioni koji lete iznad nas, a tokom ljeta vikendom često lete prilično uzbudljivi. Iako ih obično čujete samo dok prolaze. Drugi razlog je taj što se čini da će se putni pravac za odlazne avione s aerodroma London City ponekad preslušati i da imaju prilično bučne letove. S obzirom na to da se bavim snimanjem nekih video zapisa za YouTube, zaista je neugodno morati odbaciti snimak zbog bučnog aviona. Pa sam se pitao jesu li podaci koje vidite na web lokacijama poput flightradar24 javno dostupni, kad sam otkrio da je nešto slično dostupno s opensky mreže, lampa za rano upozorenje je rođena. Nije prošlo previše vremena pa je došlo na ideju da se replika svjetla piste koristi za smještaj projekta.

Možete saznati više o OpenSky mreži na https://www.opensky-network.org Također sam ovaj put želio napraviti lijepu smolastu leću umjesto da koristim prozirnu PLA i iako imam ADS-B prijemnik koji sam želio zadržati ovako jednostavno i jeftino ADS-B takođe treba antenu, što ne bi bilo dovoljno da lampa ide na policu u kancelariji. Nadamo se da će vam konstrukcija biti zanimljiva jer pokriva 3D štampanje, oblikovanje smolom i matematiku, kao i za ekstrapolaciju položaja aviona koji bi potencijalno mogli proći iznad nas.

Korak 1: Dizajniranje kućišta

Google pretraživanje nudi mnogo različitih dizajna svjetiljki za pistu, a dizajn ove je napravljen korištenjem utjecaja dizajna iz mnogih različitih proizvođača pravih svjetiljki. Također je skalirano za sjedenje u sobi ili na polici umjesto u punoj veličini, jer su u stvarnom životu obično mnogo veće.

Dizajni su sastavljeni u Fusion 360 i uvezao sam neke prethodne elemente, poput držača maline pi zero iz prethodnih projekata. Mogućnost ponovne upotrebe elemenata oduzima mnogo glavobolje od savladavanja osnova. Datoteke možete preuzeti i ovdje

Korak 2: Lijevanje objektiva - #neuspjeh

Lijevanje objektiva - #neuspješno
Lijevanje objektiva - #neuspješno
Lijevanje objektiva - #neuspješno
Lijevanje objektiva - #neuspješno
Lijevanje objektiva - #neuspješno
Lijevanje objektiva - #neuspješno

Najvažniji element dizajna ove svjetiljke bit će sočivo. Pa sam se prvo pozabavio ovim jer je bez lijepog autentičnog stakla projekt uspio. Ovdje dokumentujem greške koje sam imao u pokušaju da to postignem, bez obzira na to što sam u početku odlučio i da objektiv napravim žuto. Svjetla za pistu dolaze i u žutoj i u plavoj boji, a tek nakon što sam počela proizvoditi jantarnu, predomislila sam se i odlučila da želim plavu.

Koliko mogu zaključiti, žute boje se koriste na liniji držanja, a plave se koriste za postavljanje uzletno -sletne staze, a čini se da su ovo arhetipskije pronađene ako tražite svjetla za pistu. Međutim, evo mog prvog pokušaja izrade jantarne leće. Za izradu objektiva namjeravao sam upotrijebiti prozirnu smolu s dodatkom u boji, iako sam napravio nekoliko kalupa prije nego što sam se pitao hoće li biti moguće ispisati 3D kalup i upotrijebiti to. Tako sam počeo s izradom podijeljenog kalupa u 3D -u i ispisivanjem u PetG -u. Razumne količine oslobađanja plijesni, bio sam uvjeren da će biti dovoljne za sprječavanje plijesni. Kako se ispostavilo, u nekoliko pokušaja učinio sam da se smola zalijepi za kalup poput ljepila i činilo se da ih nije moguće odvojiti. Iako sam imao onaj u punoj veličini koji sam namjeravao koristiti, odlučio sam se protiv toga i isprintao objektiv za upotrebu s tradicionalnim silikonskim kalupima.

Korak 3: Različite vrste smole

Različite vrste smole
Različite vrste smole
Različite vrste smole
Različite vrste smole
Različite vrste smole
Različite vrste smole
Različite vrste smole
Različite vrste smole

Brzo na stranu, za ovaj sam projekt upotrijebio 3 vrste prozirnih/obojenih smola.

Prva je bila Hobby market tipa Pebeo - Gedeo i obično se prodaje za kapsuliranje malih predmeta i koristi se za nakit i papirne utege itd. Ovo je prilično dobro funkcioniralo i lijepo se stvrdnulo za oko 24-36 sati. Međutim, prilično je skup za iznos koji dobijete, ali je zgodan i lako dostupan u hobi i zanatskim radnjama. Miješa se u omjeru 2: 1. Druga je prethodno obojena smola koja se miješa u omjeru 10: 1 s učvršćivačem i za to je trebalo najduže vrijeme da se stvrdne, otprilike sedmicu dana prije nego što se potpuno stvrdnula. Posljednja je bila bistra smola, koja se također miješala u omjeru 2: 1 i očvrsnula otprilike 2 dana, možete je obojiti kapljicama pigmenta, ali morate paziti da uvijek koristite isti omjer boje ako prave odvojene serije. Također funkcionira i kao najisplativiji. Na kraju, RTV za kalup je bio GP-3481 RTV, a za postavljanje je potrebno oko 24 sata i ima dosta vremena, pa imate dovoljno vremena da ga promiješate i natočite.

Trenutno nemam vakuumski lonac (trenutno po narudžbi) tako da vas mogu zadesiti mjehurići i u kalupu i u izlijevanju smole. To nije preveliki problem za ovo, ali s čistim objektivom ili sličnim, onda biste htjeli razmisliti na neki način kako biste uklonili mjehuriće iz mješavina.

Korak 4: Lijevanje objektiva u silikonski kalup #2

Image
Image
Lijevanje objektiva u silikonski kalup #2
Lijevanje objektiva u silikonski kalup #2
Lijevanje objektiva u silikonski kalup #2
Lijevanje objektiva u silikonski kalup #2

Dakle, ovo je drugi pokušaj izrade smole od smole, a prva faza je bila napraviti objektiv u Fusion 360, a zatim ga odštampati u ABS -u, kao i kantu za držanje. Ovo bi bilo prvo za kalup i pomaže pri smanjivanju količine silikona koji se koristi. Ovo možete lako napraviti od kartice, ali to je samo drugačiji pristup. Da bih mu dao veće šanse da se oslobodi iz kalupa, prvo sam ga lakirao, a zatim dobro obložio sredstvom za otpuštanje voska.

Zatim sam sipao GP-3481 koji se nalazi na obali RTV-a 27, a zatim ostavio da se stisne sljedećih 24 sata prije uklanjanja kalupa. Kad je to učinjeno, upotrijebio sam bistru smolu pomiješanu u omjeru 2: 1 s oko 4/5 kapi pigmenta u boji i dobro je promiješao dobra četiri minute. Sipao je ovo u kalup, a zatim stavio čašu u smolu, kako bi kasnije stvorio prazninu za lampu ili LED diode. Nakon otprilike 24 sata smola je bila spremna za uklanjanje i sočivo je ispalo prilično dobro. Prisutni su mjehurići zraka, ali još uvijek nemam vakuumsku posudu za degaziranje smole prije izlijevanja.

Korak 5: 3D štampanje i priprema

3D štampanje i priprema
3D štampanje i priprema
3D štampanje i priprema
3D štampanje i priprema
3D štampanje i priprema
3D štampanje i priprema

Model je dizajniran na način da se središnji dio utakne u bazu. Time se izbjeglo maskiranje tokom procesa slikanja. Cijeli model je odštampan u Hatchbox ABS -u, a zatim je brušen. Počevši od zrnavosti 60 do otprilike 800 zrnaca dala je dovoljno dobru završnu obradu površine za ovaj model.

Korak 6: Montaža i slikanje

Montaža i farbanje
Montaža i farbanje
Montaža i farbanje
Montaža i farbanje
Montaža i farbanje
Montaža i farbanje

Nakon što su otisci brušeni, obojeni su nekim temeljnim premazom. Lagano brušeno, a zatim poprskano sivim prajmerom. Glavni dijelovi ofarbani su u ford signalno žutu boju, a zatim je za podlogu korišćena bruoklandska zelena. odsjeci tamiya srebra zatim su naneseni na vijke, a neki molotow srebrni krom korišten na držaču objektiva.

Korak 7: Prvo pronađite avione unutar ograničavajućeg područja

S sortiranim hardverom, na softveru je trebalo raditi. Sada postoji nekoliko web lokacija koje pružaju praćenje letova, ali ne mnogo koje pružaju API za pristup tim podacima. Neki koji to rade, rade to samo na komercijalnoj osnovi, ali na sreću postoji jedna web lokacija pod nazivom https://opensky-network.org koju možete koristiti besplatno.

Da biste pristupili tim podacima, morate se registrirati, a zatim možete koristiti njihov API, koji nudi nekoliko funkcija i načina za izvlačenje podataka. Zanimaju nas svi letovi unutar nekog područja i za to imaju poziv API -ja uživo. https://opensky-network.org/apidoc/ koji se naziva granična kutija. API poziv zahtijeva uglove okvira koji vas zanimaju, naravno sa našim Lat/Lon -om kao središnjom tačkom. Na ovoj web stranici možete provjeriti matematičke rezultate koji iscrtavaju okvir ovisno o tome što unesete. Http://tools.geofabrik.de, ali za sada sljedeća skripta daje bodove koje moramo uključiti u 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); $ radijus = 6371; $ parallel_radius = $ radius*cos ($ lat); $ lat_min = $ lat - $ half_side_in_km/$ radijus; $ lat_max = $ lat + $ half_side_in_km/$ radijus; $ 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); povratni niz ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max);

Ako želite testirati svoj kôd, postoji web mjesto na kojem možete unijeti lat/lon i vidjeti rezultate na karti: Pogledajte primjer graničnog okvira na karti

Korak 8: Izračunavanje smjera aviona u odnosu na nas

Izračunavanje smjera aviona u odnosu na nas
Izračunavanje smjera aviona u odnosu na nas

Rezultati poziva API -ja za ograničavanje okvira daju nam popis aviona, njihov dužin/širinu, brzinu, nadmorsku visinu i smjer. Dakle, sljedeća stvar koju trebamo učiniti je dobiti smjer svake ravnine u odnosu na nas kako bismo mogli dalje obraditi one koji barem idu u našem općem smjeru. To možemo učiniti jer znamo svoj položaj i možemo odrediti kut od nas do svake ravni.

Da bih to učinio, koristim dio koda koji je izvorno bio u Javascriptu pa sam ga ovdje pretvorio u PHP, * izračunajte (početni) smjer između dvije točke * * prema: Avijacijski formular Eda Williamsa, https://williams.best.vwh.net/avform.htm#Crs * izvor = 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; return $ zz;

Ako želite pogledati stranicu na kojoj se nalaze izvorne javascript verzije, ovo je veza:

unutar tog koda možete vidjeti i različite potprograme za svaku vrstu izračuna.

Korak 9: Izračunavanje presretanja gledanjem u krug

Izračunavanje presretanja gledanjem u krug
Izračunavanje presretanja gledanjem u krug

Dakle, sada imamo avion u kojem je smjer između njega i naše lokacije manji od 90 (pozitivan ili negativan), pa to znači da postoji šansa da bi mogao proletjeti u blizini. Koristeći formulu haversine, možemo također izračunati koristeći Lon/Lat ravnine i Lon/Lat naše kuće udaljenost koja je udaljena od nas.

Gledajući dijagram, ako nacrtamo krug oko naše kuće u radijusu od otprilike 3 milje, to nam daje priliku da vidimo bilo šta prelijetanje. Znamo razliku u smjeru kretanja između ravnine i nas, također znamo i udaljenost ravnine od nas, tako da tada možemo razraditi trokut koristeći stari dobri SOHCAHTOA, au ovom slučaju pomoću Tan kuta možemo dobiti suprotna strana dužine. Dakle, ako usporedimo ovu vrijednost s vrijednošću radijusa kruga oko kuće, tada možemo saznati hoće li avion letjeti dovoljno blizu da ga vidimo. Sljedeći korak koji možemo učiniti je odrediti vrijeme u kojem će avion proletjeti koristeći brzinu zraka i udaljenost, a ako je to manje od recimo 45 sekundi ili približno toga, palimo svjetlo. Ovo je dio koda koji koristim za utvrđivanje mogućnosti prelijetanja. Ja to radim jer se u blizini nalazi aerodrom i kada avioni taksiraju uokolo neizbježno pokazuju na kuću. Međutim, kako je njihova visina nula i brzina hoda, to ne bi trebalo aktivirati alarm.

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

if (($ flight_angle <90) && ($ flight_intercept <3)) {// moguće je proletjeti

}

return $ flight_intercept;

}

Korak 10: Rastojanje između dvije tačke na karti - formula Haversine

Udaljenost između dviju točaka na karti - formula Haversine
Udaljenost između dviju točaka na karti - formula Haversine

Zato moramo izračunati udaljenost između aviona i naše lokacije. Na kratkim udaljenostima na karti možete otprilike izračunati udaljenost, ali budući da je Zemlja sferična, postoji formula koja se naziva formula haversine koja vam omogućuje da uzmete u obzir zakrivljenu površinu. Formulu možete pročitati dalje:

Sada s izračunatom udaljenošću i znajući brzinu zrakoplova možemo izračunati koliko će sekundi proći prije nego što avion bude iznad glave. Dakle, svjetlo će se upaliti ako postoji nešto u roku od 30 sekundi od flypasta, a mi napokon imamo svoju lampicu upozorenja.

* zasnovano na 0n JS na stranici instantglobe.com/CRANES/GeoCoordTool.html i pretvoreno u PHP */

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

Korak 11: Uvoz i definisanje ravni baze podataka

Jedan od drugih detalja je da opensky web mjesto nudi bazu podataka o avionima koji se mogu preuzeti zajedno sa njihovim pozivnim znakovima i identitetima. Ima nekoliko stotina hiljada unosa. Tako da ovo možemo preuzeti i učitati lokalno u MariaDB bazu podataka za pretraživanje (MySQL). Sa svakim avionom koji se pojavi iznad nas, dohvaćamo njegove detalje i ažuriramo brojač kako bismo pokazali koliko je puta viđen.

Trenutno uređujem i bazu podataka kako bih istaknuo avione koji me zanimaju. Uglavnom stare ratne ptice i druge slične zanimljive avione. Nekoliko puta ovog ljeta je preletio Mig-15. pa je cilj upotrijebiti polje upozorenja koje sam dodao, a zatim brzo zasvijetliti kada se nešto zanimljivo sprema

Korak 12: Poboljšanje rezultata i novih funkcija

Poboljšanje rezultata i novih funkcija
Poboljšanje rezultata i novih funkcija
Poboljšanje rezultata i novih funkcija
Poboljšanje rezultata i novih funkcija
Poboljšanje rezultata i novih funkcija
Poboljšanje rezultata i novih funkcija

Dakle, u teoriji sve funkcionira prilično dobro, ali s podacima ćete otkriti da postoje avioni koji prelijeću i koji se ne pojavljuju u API -ju.

To je zato što ne koriste svi avioni ADS-B transponder i koriste starije transpondere zasnovane na MLAT-u. Za dobivanje podataka o položaju zrakoplova pomoću MLAT -a potreban je niz prijemnika na zemlji kako bi triangulirali njihov položaj, a neke web lokacije poput flightradar24 imaju veću mrežu suradnika koji to rade u odnosu na opensky. Nadam se da će se s vremenom i njihova pokrivenost poboljšati, pa postavljam vlastiti MLAT prijemnik koji će dodati ove podatke.

Korak 13: Baza podataka

Ne zaboravite, ako ćete ovo koristiti, možda biste htjeli ukloniti SQL izraze ako nemate bazu podataka o ravninama, a također dodati vlastitu vrijednost Lon/Lat i API ključ za pristup podacima o letu.

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

define ("INTERVAL", (20 * 1)); funkcija fexp () {$ lat = "vaša geografska širina"; $ lon = "vaša geografska dužina"; $ strana = 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"; eho "Skeniranje neba"; $ start_time = microtime (tačno); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, TRUE); $ inbound = FALSE; $ num_planes = count ($ data ['stanja']); if ($ num_planes> 0) {echo "i možemo vidjeti $ num_planes avione / n"; za ($ x = 0; $ x 0) {$ plane_eta = $ distplane/$ air_speed_kmh; } else {$ eta = 1; } if (((($ intercept) 0)) && ($ distplane0) {$ inbound = TRUE; eho "------------------------------------------------ -------------------- / n "; echo "$ icao24 - [$ country $ pozivni 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 zaglavlju", okrugli ($ plane_heading, 1), "] [homeangle $ heading_d]"; echo "[$ latitude, $ longitude] n"; echo "[flypast in", decimal_to_time ($ plane_eta), "now", round ($ presretanje, 1), "km away / n"; eho "------------------------------------------------ -------------------- / n "; $ DBi = novi mysqli ("127.0.0.1", "root", "vaša lozinka", "awacs"); $ sql = "odaberi * iz baze podataka aviona gdje je` icao24` = '$ icao24' "; mysqli_set_charset ($ DBi, "utf8"); $ getplanedata = mysqli_query ($ DBi, $ sql) ili die (mysqli_error ($ DBi)); $ row_getplanedata = mysqli_fetch_assoc ($ getplanedata); $ rows_getplanedata = mysqli_num_rows ($ getplanedata); if ($ rows_getplanedata> 0) {do {echo "pozivni znak ="; echo $ row_getplanedata ['registracija']; echo "je a"; echo $ row_getplanedata ['proizvođač']; echo ""; echo $ row_getplanedata ['model']; echo "by"; echo $ row_getplanedata ['Manufacturericao']; eho "u vlasništvu"; echo $ row_getplanedata ['owner']; eho "viđeno"; echo $ row_getplanedata ['posjeta']; echo "puta"; echo "special rating ="; echo $ row_getplanedata ['special']; echo "\ n"; $ posjeta = $ row_getplanedata ['posjeta']+1; } while ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "AŽURIRAJ PODEŠAVANJE baze podataka aviona = $ posjeta WHERE icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) ili umreti (mysqli_error ($ DBi)); } else {echo "Nisam mogao pronaći ovaj avion u bazi podataka pa ga dodajem"; $ sqli = "INSERT INTObaze podataka aviona (icao24, posete, posebno) VREDNOSTI ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) ili die (mysqli_error ($ DBi)); } echo "----------------------------------------------- --------------------- / n "; } else {// eho "$ pozivni znak"; }}} else {echo "i nebo je vedro / n"; } if ($ inbound) {echo "Ulazna ravnina / n"; $ command = "svinje w 17 1"; execInBackground ($ naredba); } else {echo "nema dolaznih letova / n"; $ command = "svinje w 17 0"; execInBackground ($ naredba); }} funkcija decimal_to_time ($ decimal) {$ offset = 0.002778; if ($ decimal> $ offset) {$ decimal = $ decimal - 0.002778; } $ hours = gmdate ('H', sprat ($ decimalno * 3600)); $ minute = gmdate ('i', kat ($ decimalno * 3600)); $ seconds = gmdate ('s', sprat ($ decimalno * 3600)); return str_pad ($ sati, 2, "0", STR_PAD_LEFT). ":". str_pad ($ minute, 2, "0", STR_PAD_LEFT). ":". str_pad ($ seconds, 2, "0", STR_PAD_LEFT); }/ * * izračunajte (početni) smjer između dvije točke * * iz: Avijacijskog formulara Ed Williams -a, 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; return $ zz; } funkcija get_intercept ($ home_head, $ plane_head, $ plane_distance) {$ flight_angle = abs (abs ($ home_head - $ plane_head) - 180); $ flight_angle_r = deg2rad ($ flight_angle); $ flight_angle_t = tan ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ avion_distance; return $ flight_intercept; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *// * * Koristite formulu Haversine za izračun udaljenosti (u km) između dviju točaka specificiranih * zemljopisnom širinom/dužinom (u numeričkim stupnjevima) * * iz: Formule Haversine - RWSinnott, "Vrline Haversinea", * Nebo i teleskop, vol 68, br 2, 1984 * https://williams.best.vwh.net/avform.htm#Crs * * primjer upotrebe iz obrasca: * result.value = LatLon.distHaversine (lat1.value.parseDeg (), long1.value.parseDeg (), * lat2.value.parseDeg (), long2.value.parseDeg ()); * gdje su lat1, long1, lat2, long2 i rezultat polja obrasca * izvor = instantglobe.com/CRANES/GeoCoordTool.html */funkcija get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // srednji radijus zemlje u 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; return $ 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); $ radijus = 6371; # Poluprečnik paralele na datoj geografskoj širini; $ parallel_radius = $ radius*cos ($ lat); $ lat_min = $ lat - $ half_side_in_km/$ radijus; $ lat_max = $ lat + $ half_side_in_km/$ radijus; $ 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); povratni niz ($ 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 &"); }} checkForStopFlag () {// potpuno neobavezan return (TRUE); } funkcija start () {echo "pokretanje / n"; $ command = "svinje w 17 1"; execInBackground ($ naredba); $ active = TRUE; while ($ active) {usleep (1000); // opcionalno, ako želite biti pažljivi if (microtime (true)> = $ nextTime) {fexp (); $ nextTime = mikrovreme (tačno) + INTERVAL; } $ active = checkForStopFlag (); }} fexp (); start (); ?>

Korak 14: Ožičenje LED diode i prekidača za isključivanje

Ožičenje LED diode i prekidača za isključivanje
Ožičenje LED diode i prekidača za isključivanje

Ožičenje ovog projekta ne može biti jednostavnije. Postoji samo jedna LED dioda koja je spojena na pin 17 i uzemljena sa 270R otpornikom.

Uključujem i dugme za isključivanje i uključivanje, zajedno sa LED diodom za napajanje koja teče sa TXd pina za prenos podataka. Više o funkciji isključivanja i kodu koji je potreban možete pročitati na https://github.com/Howchoo/pi-power-button.git sa web stranice https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow… O dodavanju svjetla za napajanje možete pročitati ovdje

Preporučuje se: