Isi kandungan:

Amaran Awal Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan: 14 Langkah (dengan Gambar)
Amaran Awal Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan: 14 Langkah (dengan Gambar)

Video: Amaran Awal Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan: 14 Langkah (dengan Gambar)

Video: Amaran Awal Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan: 14 Langkah (dengan Gambar)
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Julai
Anonim
Amaran Awal Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Amaran Awal Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Amaran Awal Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Amaran Awal Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Amaran Awal Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Amaran Awal Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Amaran Awal Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Amaran Awal Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan

Lampu ini berpunca dari beberapa sebab kerana saya selalu berminat dengan pesawat yang terbang di atas dan pada musim panas di hujung minggu sering terdapat beberapa pesawat yang cukup menarik. Walaupun anda cenderung untuk mendengarnya semasa mereka melaluinya. Maka alasan lain adalah kerana nampaknya jalan penerbangan untuk penerbangan keluar dari lapangan terbang London City kadang-kadang terdengar dan mereka mempunyai beberapa penerbangan yang cukup bising. Oleh kerana saya berusaha merakam beberapa video untuk YouTube, sangat menjengkelkan apabila saya membuang rakaman kerana pesawat yang bising. Oleh itu, saya tertanya-tanya apakah data yang anda lihat di laman web seperti flightradar24 tersedia untuk umum, setelah saya menemui sesuatu yang serupa tersedia dari rangkaian opensky lampu amaran awal dilahirkan. Tidak terlalu lama kemudian muncul ide menggunakan replika lampu landasan untuk menempatkan projek ini.

Anda boleh mengetahui lebih lanjut mengenai Rangkaian OpenSky di https://www.opensky-network.org Saya juga mahu kali ini membuat lensa resin yang bagus daripada menggunakan PLA lut dan walaupun saya mempunyai penerima ADS-B yang saya mahu simpan ini ringkas dan murah. ADS-B juga memerlukan antena dan ini tidak akan membolehkan lampu menyala di rak pejabat. Oleh itu, semoga anda dapat memperoleh binaan yang menarik kerana merangkumi pencetakan 3D, pencetakan Resin dan matematik untuk memperkirakan kedudukan pesawat yang berpotensi melepasi overhead.

Langkah 1: Merangka Kes

Carian Google dilengkapi dengan pelbagai reka bentuk lampu landasan dan reka bentuk yang satu ini dibuat menggunakan pengaruh reka bentuk dari pelbagai jenis lampu nyata. Ia juga diperkecil untuk duduk di ruangan atau di rak daripada ukuran penuh, kerana mereka cenderung jauh lebih besar dalam kehidupan nyata.

Reka bentuk dibuat di Fusion 360 dan saya mengimport beberapa elemen sebelumnya seperti pemegang raspberry pi zero dari projek sebelumnya. Mampu menggunakan semula elemen memerlukan banyak pening kerana tidak meletakkan asasnya. Anda juga boleh memuat turun fail di sini

Langkah 2: Melemparkan Lensa - #fail

Melemparkan Kanta - # gagal
Melemparkan Kanta - # gagal
Melemparkan Kanta - # gagal
Melemparkan Kanta - # gagal
Melemparkan Kanta - # gagal
Melemparkan Kanta - # gagal

Unsur reka bentuk yang paling penting dari lampu ini adalah lensa. Oleh itu, saya menyelesaikannya terlebih dahulu kerana tanpa kaca yang kelihatan asli, projek itu akan berjaya. Saya mendokumentasikan kegagalan yang saya hadapi dalam mencapainya, tetapi saya juga pada awalnya memutuskan untuk menjadikan lensa itu amber. Lampu landasan terdapat dalam warna kuning dan biru dan hanya setelah saya mula membuat ambar, saya berubah fikiran dan memutuskan bahawa saya mahukan lampu biru.

Dari apa yang dapat saya ketahui Amber yang digunakan di garisan penahan dan yang berwarna biru digunakan untuk membariskan landasan, dan inilah yang nampaknya yang lebih arketip ditemui jika anda mencari lampu landasan. Namun, inilah percubaan pertama saya untuk membuat kanta kuning. Untuk membuat lensa, saya akan menggunakan resin clearcast dengan bahan tambahan warna, dan walaupun saya telah melakukan beberapa acuan sebelum saya bertanya-tanya apakah mungkin untuk mencetak cetakan 3D dan menggunakannya. Oleh itu, saya mulakan dengan membuat acuan split dalam bentuk 3D dan mencetaknya di PetG. Sejumlah pelepasan acuan yang banyak saya yakin akan cukup untuk menumis cetakan. Ternyata dengan beberapa percubaan saya membuat resin menempel pada acuan seperti gam dan nampaknya tidak mungkin untuk memisahkannya. Walaupun saya menggunakan skala penuh yang akan saya gunakan, saya memutuskannya dan mencetak lensa untuk digunakan dengan cetakan silikon tradisional.

Langkah 3: Jenis Resin yang berbeza

Jenis Resin yang berbeza
Jenis Resin yang berbeza
Jenis Resin yang berbeza
Jenis Resin yang berbeza
Jenis Resin yang berbeza
Jenis Resin yang berbeza
Jenis Resin yang berbeza
Jenis Resin yang berbeza

Sebagai langkah cepat, saya menggunakan 3 jenis resin yang jelas / berwarna untuk projek ini.

Yang pertama adalah jenis pasar Hobi yang disebut Pebeo - Gedeo dan biasanya dijual untuk memasukkan barang-barang kecil dan digunakan untuk perhiasan dan alat tulis meja dll. Ini berfungsi dengan baik dan sembuh dengan baik dalam kira-kira 24-36 jam. Walau bagaimanapun, ia cukup mahal untuk jumlah yang anda dapat, tetapi berguna dan mudah didapati di kedai hobi dan kraf. Ia bercampur dengan nisbah 2: 1. Yang kedua adalah resin pra-warna yang dicampurkan pada nisbah 10: 1 dengan pengeras dan ini memerlukan penyembuhan paling lama, kira-kira seminggu untuk jujur sebelum sembuh sepenuhnya. Yang terakhir adalah resin yang jernih, yang juga dicampurkan dalam nisbah 2: 1 dan ini sembuh dalam kira-kira 2 hari, anda boleh mewarnainya dengan titisan pigmen, tetapi anda perlu memastikan bahawa anda selalu menggunakan nisbah warna yang sama jika anda membuat kumpulan yang terpisah. Ia juga berfungsi paling efektif. Terakhir RTV untuk acuan adalah RTV GP-3481 dan ini memerlukan masa sekitar 24 jam untuk disiapkan dan mempunyai masa periuk yang cukup lama sehingga anda mempunyai banyak masa untuk mencampurkannya dan kemudian menuangkannya.

Pada masa ini, saya tidak mempunyai kekosongan (semasa pesanan) supaya anda dapat diliputi oleh gelembung di dalam acuan dan pencucian resin. Tidak terlalu banyak masalah untuk ini, tetapi dengan lensa yang jelas atau serupa maka anda ingin memikirkan entah bagaimana untuk mengeluarkan gelembung dari campuran.

Langkah 4: Melemparkan Lensa dalam Acuan Silikon # 2

Image
Image
Melemparkan Lensa dalam Acuan Silikon # 2
Melemparkan Lensa dalam Acuan Silikon # 2
Melemparkan Lensa dalam Acuan Silikon # 2
Melemparkan Lensa dalam Acuan Silikon # 2

Jadi ini adalah percubaan kedua untuk membuat lensa Resin dan tahap pertama adalah membuat kedua lensa di Fusion 360 dan kemudian mencetaknya dalam ABS serta baldi untuk memegangnya. Ini akan menjadi bekas untuk acuan dan membantu mengurangkan jumlah silikon yang akan digunakan. Anda boleh mengeluarkan kad ini dengan mudah, tetapi pendekatannya berbeza. Untuk memberikannya peluang yang lebih baik untuk dibebaskan dari acuan, saya mula-mula memolesnya dan kemudian memberikannya pelindung pelindung lilin yang baik.

Saya kemudian menuangkan beberapa GP-3481 yang berukuran sekitar 27 RTV pantai dan kemudian membiarkannya dipasang selama 24 jam berikutnya sebelum melakukan demoulding. Setelah selesai, saya menggunakan resin jernih yang dicampur pada nisbah 2: 1 dengan kira-kira 4/5 tetes pigmen warna dan mencampurkannya dengan baik selama empat minit. Tuang ini ke dalam acuan dan kemudian letakkan kaca tembakan ke dalam resin juga untuk memberikan kekosongan kemudian untuk lampu atau lampu LED. Selepas kira-kira 24 jam, resin ini siap dikeluarkan dan lensa keluar dengan baik. Terdapat gelembung udara, tetapi saya belum mempunyai vakum vakum untuk membuang resin sebelum menuangkan.

Langkah 5: Percetakan dan Penyediaan 3D

Percetakan dan Penyediaan 3D
Percetakan dan Penyediaan 3D
Percetakan dan Penyediaan 3D
Percetakan dan Penyediaan 3D
Percetakan dan Penyediaan 3D
Percetakan dan Penyediaan 3D

Model ini direka dengan cara bahagian tengah terpasang ke pangkalan. Ini untuk mengelakkan penyamaran semasa proses melukis. Keseluruhan model dicetak dalam Hatchbox ABS dan kemudian diampelas. Bermula dengan 60 grit hingga sekitar 800 grit memberikan permukaan yang cukup baik untuk model ini.

Langkah 6: Pemasangan dan Lukisan

Pemasangan dan Lukisan
Pemasangan dan Lukisan
Pemasangan dan Lukisan
Pemasangan dan Lukisan
Pemasangan dan Lukisan
Pemasangan dan Lukisan

Setelah cetakan diampelas, ia kemudian dicat dengan beberapa buku asas yang tinggi. Berpasir ringan dan kemudian disembur di primer kelabu. Bahagian utama dicat dengan isyarat kuning, dan kemudian brooklands hijau digunakan untuk pangkalan. sorotan perak tamiya kemudian dilekatkan pada selak dan beberapa krom perak molotow digunakan pada pemegang lensa.

Langkah 7: Cari Pesawat Pertama di Kawasan yang Terhad

Dengan perkakasan yang disusun, perisian perlu diusahakan. Kini terdapat beberapa laman web yang menyediakan pelacakan penerbangan, tetapi tidak banyak yang menyediakan API untuk mengakses data tersebut. Beberapa yang melakukannya, hanya melakukannya secara komersial tetapi untungnya ada satu laman web yang disebut https://opensky-network.org yang boleh anda gunakan secara percuma.

Untuk mengakses data ini, Anda harus mendaftar dan kemudian anda dapat menggunakan API mereka, ia menyediakan beberapa fungsi dan cara untuk menarik data. Kami berminat dengan semua penerbangan di suatu kawasan dan mereka mempunyai panggilan API Langsung untuk itu. https://opensky-network.org/apidoc/ disebut kotak pengikat. Panggilan API memerlukan sudut kotak yang anda minati tentu Lat / Lon kami sebagai titik tengah. Anda boleh menyemak matematik yang berfungsi di laman web ini, yang menarik kotak bergantung pada apa yang anda taipkan. Http://tools.geofabrik.de tetapi buat masa ini skrip berikut memberikan poin yang perlu kita pasangkan ke dalam API.

fungsi 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 ($ longitud_in_degrees); $ jejari = 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); pulangan susunan ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max);

Sekiranya anda ingin menguji kod anda, ada laman web di mana anda boleh memasukkan lat / lon dan melihat hasilnya di peta: Lihat contoh kotak pembatas pada peta

Langkah 8: Mengira Tajuk Pesawat yang Berkaitan dengan Kami

Mengira Tajuk Pesawat yang Berkaitan dengan Kita
Mengira Tajuk Pesawat yang Berkaitan dengan Kita

Hasil dari panggilan API kotak pengikat memberi kami senarai pesawat, Lon / lat, kelajuan, ketinggian dan arahnya. Oleh itu, perkara seterusnya yang perlu kita lakukan adalah mendapatkan arah setiap pesawat yang berkaitan dengan kita sehingga kita dapat memproses lebih jauh lagi yang paling tidak menuju ke arah umum kita. Kita boleh melakukan ini kerana kita tahu kedudukan kita dan dapat menentukan sudut dari kita ke setiap satah.

Untuk melakukan itu, saya menggunakan sekeping kod yang berasal dari Javascript sehingga saya menukarnya ke sini menjadi PHP, * hitung (awal) beza antara dua mata * * dari: Ed Williams 'Aviation Formulary, https://williams.best.vwh.net/avform.htm#Crs * source = instantglobe.com/CRANES/GeoCoordTool.html * / fungsi 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; pulangkan $ zz;

Sekiranya anda ingin melihat halaman di mana versi javascript asal, ini adalah pautan:

dalam kod tersebut, anda juga dapat melihat pelbagai sub rutin untuk setiap jenis pengiraannya.

Langkah 9: Mengira Pintas dengan Melihat Bulatan

Mengira Pintas dengan Melihat Bulatan
Mengira Pintas dengan Melihat Bulatan

Oleh itu, kita sekarang mempunyai pesawat di mana jarak antara dan lokasi kita kurang dari 90 (positif atau negatif) dan ini bermakna ada kemungkinan ia terbang dekat. Dengan menggunakan formula haversine, kita juga boleh menggunakan Lon / Lat pesawat dan Lon / Lat rumah kita dengan jarak yang jauh dari kita.

Melihat gambar rajah, jika kita melukis bulatan di sekitar rumah kita kira-kira 3 mil radius ini memberi kita peluang untuk melihat apa-apa yang terbang di atas. Kita tahu perbezaan arah antara pesawat dan kita, kita juga tahu jarak pesawat dari kita sehingga kita dapat menyelesaikan segitiga dengan menggunakan SOHCAHTOA lama yang baik, dan dalam hal ini dengan menggunakan sudut sudut kita dapat memperoleh panjang sisi yang bertentangan. Oleh itu, jika kita membandingkan nilai ini dengan nilai jejari bulatan di sekitar rumah, kita dapat mengetahui apakah pesawat akan terbang cukup dekat untuk kita melihatnya. Bit seterusnya yang dapat kita lakukan adalah menentukan masa di mana pesawat akan terbang melewati dengan menggunakan kelajuan dan jarak udara dan jika ini kurang dari kira-kira 45 saat atau lebih, kita menyalakan lampu. Ini adalah sedikit kod yang saya gunakan untuk mengusahakan peluang terbang. Saya melakukan ini kerana terdapat lapangan terbang yang berdekatan dan ketika kapal terbang menaiki teksi di sekitar mereka pasti menghala ke rumah. Namun kerana ketinggian mereka adalah sifar dan kecepatan berjalan dengan pantas, ini seharusnya tidak mencetuskan penggera.

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

jika (($ flight_angle <90) && ($ flight_intercept <3)) {// kemungkinan terbang lewat

}

pulangkan $ flight_intercept;

}

Langkah 10: Jarak Antara Dua Titik pada Peta - Formula Haversine

Jarak antara dua titik pada peta - Formula Haversine
Jarak antara dua titik pada peta - Formula Haversine

Oleh itu, kita mesti mengira jarak antara pesawat dan lokasi kita. Pada jarak pendek pada peta, anda dapat mengira jaraknya, tetapi karena bumi berbentuk bulat, ada formula yang disebut formula haversine yang memungkinkan anda mempertimbangkan permukaan melengkung. Anda boleh membaca lebih lanjut ke dalam formula:

Sekarang dengan jarak yang dikira dan kita mengetahui kelajuan udara pesawat kita dapat menentukan berapa saat sebelum pesawat berada di atas. Jadi lampu akan menyala jika ada sesuatu dalam 30 saat flypast dan akhirnya kita mempunyai lampu amaran.

* berdasarkan 0n JS di instantglobe.com/CRANES/GeoCoordTool.html dan berubah menjadi PHP * /

fungsi get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // radius min bumi dalam 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; pulangkan $ d; }

Langkah 11: Mengimport dan Menentukan Pangkalan Data Pesawat

Salah satu bahagian lain ialah laman web opensky menawarkan pangkalan data pesawat yang boleh dimuat turun bersama dengan tanda nama dan id mereka. Beberapa ratus ribu penyertaannya. Oleh itu, kita boleh memuat turunnya dan memuatkannya secara tempatan ke dalam pangkalan data MariaDB untuk mencari (MySQL). Dengan setiap pesawat yang kelihatan di atas, kami mengambil butirannya dan mengemas kini kaunter untuk menunjukkan berapa kali ia dilihat.

Saya juga sedang mengedit pangkalan data untuk menyerlahkan pesawat yang saya minati. Terutama burung perang tua dan pesawat lain yang serupa. Beberapa kali pada musim panas ini, Mig-15 telah terbang. jadi tujuannya adalah menggunakan medan amaran yang telah saya tambahkan dan kemudian menyalakan lampu dengan pantas apabila sesuatu yang menarik sedang menuju ke arahnya

Langkah 12: Meningkatkan Hasil dan Ciri Baru

Meningkatkan Hasil dan Ciri Baru
Meningkatkan Hasil dan Ciri Baru
Meningkatkan Hasil dan Ciri Baru
Meningkatkan Hasil dan Ciri Baru
Meningkatkan Hasil dan Ciri Baru
Meningkatkan Hasil dan Ciri Baru

Jadi secara teori semuanya berfungsi dengan baik, tetapi anda akan dapati dengan data bahawa terdapat pesawat yang terbang di atas yang tidak muncul di API.

Ini kerana tidak semua pesawat menggunakan transponder ADS-B dan menggunakan transponder lama berdasarkan MLAT. Untuk mendapatkan data kedudukan pada pesawat yang menggunakan MLAT, ia memerlukan serangkaian penerima di darat untuk menyatukan kedudukan mereka dan beberapa laman web seperti flightradar24 mempunyai rangkaian penyumbang yang lebih besar melakukan ini berbanding dengan opensky. Mudah-mudahan dari masa ke masa liputan mereka juga bertambah baik dan saya menyediakan penerima MLAT saya sendiri untuk menambah data ini.

Langkah 13: Pangkalan Data

Jangan lupa jika anda akan menggunakan ini, anda mungkin mahu menghapus pernyataan SQL jika anda tidak mempunyai pangkalan data pesawat dan juga menambah nilai Lon / Lat anda sendiri dan kunci API untuk mengakses data penerbangan.

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

tentukan ("INTERVAL", (20 * 1)); fungsi fexp () {$ lat = "garis lintang anda"; $ lon = "garis bujur anda"; $ sisi = 15.75; $ box = get_bounding_box ($ lat, $ lon, $ sisi); $ latmin = $ kotak [0]; $ lonmin = $ kotak [1]; $ latmax = $ kotak [2]; $ lonmax = $ kotak [3]; $ flyurl = "https://opensky-network.org/api/states/all?lamin=$latmin&lomin=$lonmin&lamax=$latmax&lomax=$lonmax"; gema "Mengimbas SKY"; $ start_time = microtime (benar); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, BENAR); $ masuk = SALAH; $ num_planes = kiraan ($ data ['menyatakan']); if ($ num_planes> 0) {echo "dan kita dapat melihat pesawat $ num_planes / n"; untuk ($ x = 0; $ x 0) {$ plane_eta = $ distplane / $ air_speed_kmh; } lain {$ eta = 1; } jika ((($ intercept) 0)) && ($ distplane0) {$ inbound = TRUE; gema "------------------------------------------------ -------------------- / n "; echo "$ icao24 - [$ country $ callingign] pada [$ geo_altitude_m M - $ geo_altitude_f ft]"; echo "[speed $ air_speed_kmh kmh and", bulat ($ distplane, 1), "km km] n"; gema "[pada judul", bulat ($ plane_heading, 1), "] [homeangle $ heading_d]"; gema "[$ latitud, $ longitud] n"; echo "[flypast in", decimal_to_time ($ plane_eta), "now", bulat ($ pintasan, 1), "km jauh / n"; gema "------------------------------------------------ -------------------- / n "; $ DBi = mysqli baru ("127.0.0.1", "root", "kata laluan anda", "awacs"); $ sql = "pilih * dari pangkalan data pesawat di mana` icao24` = '$ icao24' "; mysqli_set_charset ($ DBi, "utf8"); $ getplanedata = mysqli_query ($ DBi, $ sql) atau mati (mysqli_error ($ DBi)); $ row_getplanedata = mysqli_fetch_assoc ($ getplanedata); $ rows_getplanedata = mysqli_num_rows ($ getplanedata); if ($ rows_getplanedata> 0) {do {echo "callingign ="; echo $ row_getplanedata ['pendaftaran']; gema "adalah"; echo $ row_getplanedata ['Manufactername']; gema ""; echo $ row_getplanedata ['model']; gema "oleh"; echo $ row_getplanedata ['factoryicao']; gema "dimiliki oleh"; echo $ row_getplanedata ['pemilik']; gema "dilihat"; echo $ row_getplanedata ['lawatan']; gema "kali"; echo "penilaian khas ="; echo $ row_getplanedata ['istimewa']; gema "\ n"; $ lawatan = $ row_getplanedata ['lawatan'] + 1; } sementara ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "KEMASKINI SET datadatabase lawatan = $ melawat DI MANA icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) atau mati (mysqli_error ($ DBi)); } lain {echo "Tidak dapat menemui pesawat ini di DB sehingga menambahkannya"; $ sqli = "MASUKKAN DALAM pangkalan data pesawat (icao24, lawatan, khas) NILAI ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) atau mati (mysqli_error ($ DBi)); } gema "----------------------------------------------- --------------------- / n "; } lain {// gema "$ callingign"; }}} lain {gema "dan langit cerah / n"; } jika ($ masuk) {echo "Pesawat masuk / n"; $ command = "babi w 17 1"; execInBackground (perintah $); } lain {echo "tiada penerbangan masuk / n"; $ command = "babi w 17 0"; execInBackground (perintah $); }} fungsi decimal_to_time ($ perpuluhan) {$ offset = 0.002778; jika ($ perpuluhan> $ mengimbangi) {$ perpuluhan = $ perpuluhan - 0,002778; } $ jam = gmdate ('H', lantai ($ perpuluhan * 3600)); $ minit = gmdate ('i', lantai ($ perpuluhan * 3600)); $ saat = gmdate ('s', lantai ($ perpuluhan * 3600)); kembali str_pad ($ jam, 2, "0", STR_PAD_LEFT). ":". str_pad ($ minit, 2, "0", STR_PAD_LEFT). ":". str_pad ($ saat, 2, "0", STR_PAD_LEFT); } / * * hitung (awal) yang berkait antara dua titik * * dari: Ed Williams 'Aviation Formulary, https://williams.best.vwh.net/avform.htm#Crs * source = instantglobe.com/CRANES/GeoCoordTool. html * / fungsi 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; pulangkan $ zz; } fungsi 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; pulangkan $ flight_intercept; } / * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * / / * * Gunakan formula Haversine untuk Mengira jarak (dalam km) antara dua titik yang ditentukan oleh * latitud / longitud (dalam darjah berangka) * * dari: Formula Haversine - RWSinnott, "Virtues of the Haversine", * Sky and Telescope, vol 68, no 2, 1984 * https://williams.best.vwh.net/avform.htm#Crs * * contoh penggunaan dari bentuk: * result.value = LatLon.distHaversine (lat1.value.parseDeg (), long1.value.parseDeg (), * lat2.value.parseDeg (), long2.value.parseDeg ()); * di mana lat1, long1, lat2, long2, dan hasilnya adalah medan borang * source = instantglobe.com/CRANES/GeoCoordTool.html * / function get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // radius min bumi dalam 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; pulangkan $ d; } fungsi 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 ($ longitud_in_degrees); $ jejari = 6371; # Radius selari pada garis lintang yang diberi; $ 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); pulangan susunan ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max); } fungsi execInBackground ($ cmd) {if (substr (php_uname (), 0, 7) == "Windows") {pclose (popen ("start / B". $ cmd, "r")); } lain {exec ($ cmd. "> / dev / null &"); }} fungsi checkForStopFlag () {// pulangan pilihan sepenuhnya (BENAR); } fungsi mula () {echo "start / n"; $ command = "babi w 17 1"; execInBackground (perintah $); $ aktif = BENAR; semasa ($ aktif) {usleep (1000); // pilihan, jika anda ingin bertimbang rasa jika (microtime (true)> = $ nextTime) {fexp (); $ nextTime = microtime (true) + INTERVAL; } $ aktif = checkForStopFlag (); }} fexp (); mulakan (); ?>

Langkah 14: Pendawaian LED dan Suis Mati

Pendawaian LED dan Suis Tutup
Pendawaian LED dan Suis Tutup

Pendawaian projek ini sebenarnya tidak lebih mudah. Hanya ada satu LED yang disambungkan ke pin 17 dan tanah dengan perintang 270R sebaris.

Saya juga menyertakan butang shutdown dan power up bersama LED power yang mematikan pin data TXd. Anda boleh membaca lebih lanjut mengenai fungsi penutupan dan kod yang diperlukan di https://github.com/Howchoo/pi-power-button.git dari laman web https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow… Anda boleh membaca tentang menambahkan lampu kuasa di sini

Disyorkan: