Sadržaj:

Rano upozorenje Raspberry PI svjetlo za pistu pomoću podataka o kartiranju leta: 14 koraka (sa slikama)
Rano upozorenje Raspberry PI svjetlo za pistu pomoću podataka o kartiranju leta: 14 koraka (sa slikama)

Video: Rano upozorenje Raspberry PI svjetlo za pistu pomoću podataka o kartiranju leta: 14 koraka (sa slikama)

Video: Rano upozorenje Raspberry PI svjetlo za pistu pomoću podataka o kartiranju leta: 14 koraka (sa slikama)
Video: BTT Octopus V1.1 - Klipper Configuration 2024, Srpanj
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 svjetiljka nastala je iz nekoliko razloga jer me uvijek zanimaju zrakoplovi koji lete iznad nas, a tijekom ljeta vikendom često lete prilično uzbudljivi. Iako ih imate tendenciju čuti samo dok prolaze. Drugi razlog je taj što se čini da će se putni pravac za odlazne avione s aerodroma London City ponekad čuti i da imaju prilično bučne letove. Budući da se bavim snimanjem nekih videozapisa za YouTube, zaista je neugodno morati odbaciti snimku zbog bučnog aviona. Pa sam se pitao jesu li podaci koje vidite na stranicama poput flightradar24 javno dostupni, kad sam otkrio da je nešto slično dostupno s opensky mreže, rođena je lampica za rano upozoravanje. Nije prošlo previše vremena da bi se onda 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 smolu leću umjesto da koristim prozirnu PLA i iako imam ADS-B prijemnik koji sam želio zadržati ovo jednostavno i jeftino ADS-B također treba antenu, a to ne bi bilo dovoljno da lampa ide na policu u uredu. Nadamo se da će vam izgradnja biti zanimljiva jer obuhvaća 3D ispis, kalupljenje smolom i matematiku, kao i ekstrapolaciju položaja zrakoplova koji bi mogli proći iznad glave.

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 prilagođen za sjedenje u sobi ili na polici, a ne u punoj veličini, jer su u stvarnom životu obično mnogo veći.

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

Korak 2: Lijevanje leća - #fail

Lijevanje leća - #neuspjeh
Lijevanje leća - #neuspjeh
Lijevanje leća - #neuspjeh
Lijevanje leća - #neuspjeh
Lijevanje leća - #neuspjeh
Lijevanje leća - #neuspjeh

Najvažniji element dizajna ove svjetiljke bit će leća. Pa sam se prvo pozabavio ovim jer je bez lijepog autentičnog stakla projekt uspio. Ovdje dokumentiram neuspjehe koje sam imao u pokušaju da to postignem, bez obzira na to što sam u početku odlučio i učiniti objektiv jantarnim. Svjetla za pistu dolaze i u jantarnoj i u plavoj boji, a tek nakon što sam počela izrađivati jantarnu, predomislila sam se i odlučila da želim plavu.

Koliko ja mogu zaključiti, jantarne se koriste na liniji držanja, a plave se koriste za postavljanje uzletno -sletne staze, a čini se da su to one arhetipskije pronađene ako tražite svjetla za pistu. Međutim, evo mog prvog pokušaja izrade jantarne leće. Za izradu leće 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 izrađivati podijeljeni kalup u 3D -u i ispisivati ga u PetG -u. Uvjeren sam da bi razumne količine otpuštanja plijesni bile dovoljne za sprječavanje plijesni. Kako se pokazalo s 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 protiv toga i ispisao leću 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 stolne utege itd. To je djelovalo prilično dobro 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 bila prethodno obojena smola koja se miješa u omjeru 10: 1 s učvršćivačem i to je trajalo najduže vrijeme stvrdnjavanja, otprilike tjedan dana da bude potpuno očvrslo. Posljednja je bila bistra smola, koja se također miješala u omjeru 2: 1 i očvrsnula u otprilike 2 dana, možete je obojiti kapljicama pigmenta, ali morate paziti da uvijek koristite isti omjer boje ako prave odvojene serije. Također djeluje najisplativije. Konačno, RTV za kalup je bio GP-3481 RTV, a za njegovo postavljanje potrebno je oko 24 sata i ima dosta vremena u loncu, tako da imate dovoljno vremena za miješanje i natočenje.

Trenutno nemam vakum 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 prozirnom lećom ili sličnim onda biste htjeli na neki način razmisliti kako biste mjehuriće izbacili iz mješavina.

Korak 4: Lijevanje leće u silikonski kalup #2

Image
Image
Lijevanje leće u silikonski kalup #2
Lijevanje leće u silikonski kalup #2
Lijevanje leće u silikonski kalup #2
Lijevanje leće u silikonski kalup #2

Dakle, ovo je drugi pokušaj izrade smole od smole, a prva faza bila je izrada objektiva u Fusion 360, a zatim ispis u ABS -u, kao i kanta 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. Kako bih mu dao veće šanse za oslobađanje iz kalupa, prvo sam ga lakirao, a zatim dobro obložio sredstvom za otpuštanje voska.

Zatim sam natočio GP-3481 koji je približno obale RTV-a, a zatim pustio da se slijedećih 24 sata prije demontaže. Nakon što sam to učinio, upotrijebio sam bistru smolu pomiješanu u omjeru 2: 1 s oko 4/5 kapi pigmenta u boji i dobro je promiješao dobre četiri minute. Ulijte ovo u kalup, a zatim stavite staklo u smolu, kako biste kasnije stvorili prazninu za svjetiljke ili LED diode. Nakon otprilike 24 sata smola je bila spremna za uklanjanje i leća je ispala prilično dobro. Prisutni su mjehurići zraka, ali još uvijek nemam vakuumsku posudu za degaziranje smole prije izlijevanja.

Korak 5: 3D ispis i priprema

3D ispis i priprema
3D ispis i priprema
3D ispis i priprema
3D ispis i priprema
3D ispis i priprema
3D ispis i priprema

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

Korak 6: Montaža i slikanje

Montaža i slikanje
Montaža i slikanje
Montaža i slikanje
Montaža i slikanje
Montaža i slikanje
Montaža i slikanje

Nakon što su otisci brušeni, obojani su nekim temeljnim premazom. Lagano brušeno, a zatim poprskano sivim temeljnim premazom. Glavni dijelovi obojani su u ford signalno žutu boju, a zatim bruoklandsko zeleno korišteno za podlogu. odsjeci tamiya srebra zatim su naneseni na vijke, a neki molotow srebrni krom korišten na držaču leće.

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

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

Za pristup 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 kutove okvira koji vas zanimaju, naravno naš Lat/Lon kao središnja točka. Na ovoj web stranici možete provjeriti matematičke rezultate koji iscrtavaju okvir ovisno o tome što upisujete. Http://tools.geofabrik.de, ali zasad 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); return array ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max);

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

Korak 8: Izračun 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 duljinu/širinu, brzinu, nadmorsku visinu i smjer. Dakle, sljedeća stvar koju moramo 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 ravnine.

Za to koristim dio koda koji je izvorno bio u Javascriptu pa sam ga ovdje pretvorio u PHP, * izračunajte (početni) smjer između dviju točaka * * prema: Zrakoplovni 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; vratiti $ zz;

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

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

Korak 9: Izračunavanje presretanja gledanjem u krug

Izračunavanje presjeka gledanjem u krug
Izračunavanje presjeka gledanjem u krug

Dakle, sada imamo zrakoplov gdje 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 letjeti u blizini. Koristeći formulu haversine, također možemo izračunati pomoću 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, recimo radijusa oko 3 milje, to nam daje priliku vidjeti bilo što prelijetanje. Znamo razliku u smjeru kretanja između ravnine i nas, također znamo i udaljenost ravnine od nas pa možemo zatim razraditi trokut koristeći stari dobri SOHCAHTOA, a u ovom slučaju pomoću Tan kuta možemo dobiti suprotna duljina strane. 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 oko 45 sekundi, palimo svjetlo. Ovo je dio koda koji koristim za utvrđivanje mogućnosti prelijetanja. Činim to s obzirom da se nalazi zračna luka u blizini, a kad se avioni taksiraju uokolo, oni neizbježno pokazuju na kuću. Međutim, budući da im je nadmorska 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 = preplanuli ($ 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: Udaljenost između dviju točaka 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šeg položaja. Na kratkim udaljenostima na karti možete otprilike izračunati udaljenost, ali kako 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 zrakoplov bude iznad glave. Dakle, svjetlo će se upaliti ako postoji nešto unutar 30 sekundi od flypasta, a mi napokon imamo svoju lampicu upozorenja.

* zasnovano na 0n JS -u 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; vratiti $ d; }

Korak 11: Uvoz i definiranje ravni baze podataka

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

Također uređujem bazu podataka kako bih istaknuo avione koji me zanimaju. Uglavnom stare ratne ptice i drugi slični zanimljivi avioni. Nekoliko puta ovog ljeta je preletio Mig-15. pa je cilj upotrijebiti polje upozorenja koje sam dodao i zatim brzo zasvijetliti kad nešto zanimljivo krene

Korak 12: Poboljšanje rezultata i novih značajki

Poboljšanje rezultata i nove značajke
Poboljšanje rezultata i nove značajke
Poboljšanje rezultata i nove značajke
Poboljšanje rezultata i nove značajke
Poboljšanje rezultata i nove značajke
Poboljšanje rezultata i nove značajke

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

To je zato što svi zrakoplovi ne koriste ADS-B transponder i ne koriste starije transpondere temeljene 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 neka web mjesta poput flightradar24 imaju veću mrežu suradnika koji to rade u usporedbi s opensky. Nadam se da će se s vremenom i njihova pokrivenost poboljšati, a ja postavljam vlastiti MLAT prijemnik koji će dodati ove podatke.

Korak 13: Baza kodova

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"; odjek "Skeniranje neba"; $ start_time = mikrovreme (istina); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, ISTINA); $ 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; jeka "------------------------------------------------ -------------------- / 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"; jeka "------------------------------------------------ -------------------- / n "; $ DBi = novi mysqli ("127.0.0.1", "root", "vaša lozinka", "awacs"); $ sql = "odaberi * iz baze podataka zrakoplova gdje je` icao24` = '$ icao24' "; mysqli_set_charset ($ DBi, "utf8"); $ getplanedata = mysqli_query ($ DBi, $ sql) ili umrijeti (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č']; jeka " "; echo $ row_getplanedata ['model']; echo "by"; echo $ row_getplanedata ['Manufacturericao']; odjek "u vlasništvu"; echo $ row_getplanedata ['vlasnik']; odjek "viđen"; echo $ row_getplanedata ['posjeta']; odjek "vremena"; echo "posebna ocjena ="; echo $ row_getplanedata ['special']; odjek "\ n"; $ posjeta = $ row_getplanedata ['posjeta']+1; } while ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "AŽURIRAJ PODATKE baze zrakoplova SET posjeta = $ posjeta WHERE icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) ili umrijeti (mysqli_error ($ DBi)); } else {echo "Nije moguće pronaći ovu ravninu u bazi podataka pa je dodajem"; $ sqli = "INSERT INTO avio -baza podataka (icao24, posjeti, posebno) VRIJEDNOSTI ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) ili umrijeti (mysqli_error ($ DBi)); } jeka "----------------------------------------------- --------------------- / n "; } else {// echo "$ 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', kat ($ decimalno * 3600)); $ minute = gmdate ('i', kat ($ decimalno * 3600)); $ seconds = gmdate ('s', kat ($ decimalno * 3600)); return str_pad ($ sati, 2, "0", STR_PAD_LEFT). ":". str_pad ($ minute, 2, "0", STR_PAD_LEFT). ":". str_pad ($ sekundi, 2, "0", STR_PAD_LEFT); }/ * * izračunajte (početni) ležaj između dviju točaka * * prema: Zrakoplovni formular Eda Williamsa, https://williams.best.vwh.net/avform.htm#Crs * izvor = 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; vratiti $ 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 = preplanuli ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ avion_distance; return $ flight_intercept; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *// * * Upotrijebite formulu Haversine za izračun udaljenosti (u km) između dviju točaka specificiranih * zemljopisnom širinom/dužinom (u numeričkim stupnjevima) * * iz: Formule za preklop - 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 * source = instantglobe.com/CRANES/GeoCoordTool.html */function 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; vratiti $ 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; # Polumjer paralele na zadanoj zemljopisnoj š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); return array ($ 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); // izborno, ako želite biti obzirni if (microtime (true)> = $ nextTime) {fexp (); $ nextTime = mikrovreme (istinito) + INTERVAL; } $ active = checkForStopFlag (); }} fexp (); početak(); ?>

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 s 270R otpornikom.

Uključujem i gumb za isključivanje i uključivanje zajedno sa LED diodom za napajanje koja teče s podatkovnog pina TXd. Više o funkciji isključivanja i potrebnom kodu 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čeni: