Daftar Isi:

Peringatan Dini Lampu Runway Raspberry PI Menggunakan Data Pemetaan Penerbangan: 14 Langkah (dengan Gambar)
Peringatan Dini Lampu Runway Raspberry PI Menggunakan Data Pemetaan Penerbangan: 14 Langkah (dengan Gambar)

Video: Peringatan Dini Lampu Runway Raspberry PI Menggunakan Data Pemetaan Penerbangan: 14 Langkah (dengan Gambar)

Video: Peringatan Dini Lampu Runway Raspberry PI Menggunakan Data Pemetaan Penerbangan: 14 Langkah (dengan Gambar)
Video: Alat Peringatan Dini Bencana 2024, November
Anonim
Peringatan Dini Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Peringatan Dini Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Peringatan Dini Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Peringatan Dini Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Peringatan Dini Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Peringatan Dini Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Peringatan Dini Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan
Peringatan Dini Raspberry PI Runway Light Menggunakan Data Pemetaan Penerbangan

Lampu ini muncul dari beberapa alasan karena saya selalu tertarik dengan pesawat yang terbang di atas kepala dan selama musim panas di akhir pekan sering ada beberapa yang cukup menarik terbang di sekitar. Meskipun Anda hanya cenderung mendengarnya saat mereka lewat. Kemudian alasan lainnya adalah sepertinya jalur penerbangan untuk pesawat keluar dari bandara London City kadang-kadang akan terdengar dan mereka memiliki beberapa penerbangan yang cukup berisik. Karena saya mencoba-coba merekam beberapa video untuk YouTube, sangat menjengkelkan harus menghapus rekaman karena pesawat yang bising. Jadi saya bertanya-tanya apakah data yang Anda lihat di situs seperti flightradar24 tersedia untuk umum, begitu saya menemukan sesuatu yang serupa tersedia dari jaringan opensky, lampu peringatan dini lahir. Tidak butuh waktu lama untuk kemudian muncul ide untuk menggunakan replika lampu landasan pacu untuk menampung proyek tersebut.

Anda dapat mengetahui lebih lanjut tentang Jaringan OpenSky di https://www.opensky-network.org Saya juga ingin kali ini membuat lensa resin yang bagus daripada menggunakan PLA tembus pandang dan meskipun saya memiliki penerima ADS-B yang ingin saya simpan sederhana dan murah ini. ADS-B juga membutuhkan antena dan ini tidak akan berguna jika lampu diletakkan di rak kantor. Jadi mudah-mudahan Anda akan menemukan build yang menarik karena mencakup pencetakan 3D, pencetakan Resin dan matematika serta untuk memperkirakan posisi pesawat yang berpotensi melintas di atas kepala.

Langkah 1: Merancang Kasing

Pencarian Google muncul dengan berbagai desain lampu landasan pacu dan desain yang satu ini dibuat menggunakan pengaruh desain dari berbagai merek lampu asli. Ini juga diskalakan untuk duduk di ruangan atau di rak daripada ukuran penuh, karena mereka cenderung jauh lebih besar dalam kehidupan nyata.

Desain dibuat di Fusion 360 dan saya mengimpor beberapa elemen sebelumnya seperti pemegang raspberry pi zero dari proyek sebelumnya. Mampu menggunakan kembali elemen membutuhkan banyak sakit kepala karena mendapatkan dasar-dasarnya. Anda juga dapat mengunduh file di sini

Langkah 2: Casting Lensa - #fail

Casting Lensa - #fail
Casting Lensa - #fail
Casting Lensa - #fail
Casting Lensa - #fail
Casting Lensa - #fail
Casting Lensa - #fail

Elemen desain terpenting dari lampu ini adalah lensanya. Jadi saya menangani ini terlebih dahulu karena tanpa kaca asli yang bagus, proyek ini akan berhasil. Saya mendokumentasikan di sini kegagalan yang saya coba untuk mencapainya, meskipun pada awalnya saya juga memutuskan untuk membuat lensa menjadi kuning. Lampu landasan pacu datang dalam warna kuning dan biru dan hanya setelah saya mulai membuat yang kuning, saya berubah pikiran dan memutuskan bahwa saya menginginkan yang biru.

Dari apa yang saya lihat, yang Amber digunakan di garis penahan dan yang biru digunakan untuk melapisi landasan, dan inilah yang tampaknya paling banyak ditemukan jika Anda mencari lampu landasan. Namun, inilah upaya pertama saya membuat lensa kuning. Untuk membuat lensa, saya akan menggunakan resin bening dengan aditif warna, dan meskipun saya telah melakukan beberapa cetakan sebelumnya, saya bertanya-tanya apakah mungkin untuk mencetak cetakan 3D dan menggunakannya. Jadi saya mulai dengan membuat cetakan terpisah dalam 3D dan mencetaknya di PetG. Jumlah pelepasan cetakan yang bijaksana, saya yakin akan cukup untuk memisahkan cetakan. Ternyata dengan beberapa upaya saya membuat resin menempel pada cetakan seperti lem dan sepertinya tidak mungkin untuk memisahkannya. Meskipun saya memiliki lensa skala penuh yang akan saya gunakan, saya memutuskan untuk tidak menggunakannya dan mencetak lensa untuk digunakan dengan cetakan silikon tradisional.

Langkah 3: Berbagai Jenis Resin

Berbagai Jenis Resin
Berbagai Jenis Resin
Berbagai Jenis Resin
Berbagai Jenis Resin
Berbagai Jenis Resin
Berbagai Jenis Resin
Berbagai Jenis Resin
Berbagai Jenis Resin

Sebagai tambahan singkat, saya menggunakan 3 jenis resin bening/berwarna untuk proyek ini.

Yang pertama adalah jenis pasar Hobi yang disebut Pebeo - Gedeo dan biasanya dijual untuk membungkus barang-barang kecil dan digunakan untuk perhiasan dan pemberat kertas meja dll. Ini bekerja dengan cukup baik dan sembuh dengan baik dalam waktu sekitar 24-36 jam. Namun cukup mahal untuk jumlah yang Anda dapatkan, tetapi berguna dan mudah tersedia di toko hobi dan kerajinan. Ini dicampur dengan rasio 2:1. Yang kedua adalah resin pra-warna yang dicampur pada rasio 10:1 dengan pengeras dan ini membutuhkan waktu paling lama untuk disembuhkan, sekitar seminggu sebelum benar-benar sembuh. Yang terakhir adalah resin bening, yang juga dicampur dalam rasio 2:1 dan ini sembuh dalam waktu sekitar 2 hari, Anda dapat mewarnai ini dengan tetes pigmen, tetapi Anda perlu memastikan bahwa Anda selalu menggunakan rasio warna yang sama jika Anda membuat batch terpisah. Ini juga bekerja dengan biaya yang paling efektif. Terakhir RTV untuk cetakan adalah RTV GP-3481 dan ini membutuhkan waktu sekitar 24 jam untuk disetel dan memiliki waktu panci yang cukup lama sehingga Anda memiliki banyak waktu untuk mencampurnya dan kemudian menuangkannya.

Saat ini saya tidak memiliki vacumn pot (sedang dipesan) sehingga Anda dapat dilanda gelembung di cetakan dan penuangan resin. Tidak terlalu menjadi masalah untuk ini, tetapi dengan lensa bening atau sejenisnya maka Anda pasti ingin memikirkan cara untuk mengeluarkan gelembung dari campuran.

Langkah 4: Mencetak Lensa dalam Cetakan Silikon #2

Image
Image
Pengecoran Lensa dalam Cetakan Silikon #2
Pengecoran Lensa dalam Cetakan Silikon #2
Mencetak Lensa dalam Cetakan Silikon #2
Mencetak Lensa dalam Cetakan Silikon #2

Jadi ini adalah upaya kedua membuat lensa Resin dan tahap pertama adalah membuat kedua lensa di Fusion 360 dan kemudian mencetaknya di ABS serta ember untuk menampungnya. Ini akan menjadi cetakan pertama dan membantu mengurangi jumlah silikon yang akan digunakan. Anda dapat dengan mudah membuat ini dari kartu, tetapi hanya pendekatan yang berbeda. Untuk memberikan kesempatan yang lebih baik untuk dilepaskan dari cetakan, pertama-tama saya memolesnya dan kemudian memberikannya penutup yang baik dari zat pelepas lilin.

Saya kemudian menuangkan beberapa GP-3481 yaitu sekitar pantai 27 RTV dan kemudian membiarkannya selama 24 jam berikutnya sebelum demoulding. Setelah ini selesai, saya menggunakan resin bening yang dicampur dengan rasio 2:1 dengan sekitar 4/5 tetes pigmen warna dan mencampurnya dengan baik selama empat menit. Tuang ini ke dalam cetakan dan kemudian letakkan gelas tembakan ke dalam resin juga untuk memberikan kekosongan nanti baik untuk lampu atau LED. Setelah sekitar 24 jam resin ini siap untuk dilepas dan lensa keluar dengan cukup baik. Ada gelembung udara, tetapi saya belum memiliki wadah vakum untuk menghilangkan gas resin sebelum menuangkan.

Langkah 5: Pencetakan dan Persiapan 3D

Pencetakan dan Persiapan 3D
Pencetakan dan Persiapan 3D
Pencetakan dan Persiapan 3D
Pencetakan dan Persiapan 3D
Pencetakan dan Persiapan 3D
Pencetakan dan Persiapan 3D

Model dirancang sedemikian rupa sehingga bagian tengah dihubungkan ke alas. Hal ini untuk menghindari masking selama proses pengecatan. Seluruh model dicetak di Hatchbox ABS dan kemudian diampelas. Dimulai dengan 60 grit hingga sekitar 800 grit memberikan permukaan akhir yang cukup baik untuk model ini.

Langkah 6: Perakitan dan Pengecatan

Perakitan dan Pengecatan
Perakitan dan Pengecatan
Perakitan dan Pengecatan
Perakitan dan Pengecatan
Perakitan dan Pengecatan
Perakitan dan Pengecatan

Setelah cetakan diampelas, kemudian dicat dengan beberapa primer build tinggi. Diampelas ringan lalu disemprot dengan primer abu-abu. Bagian utama dicat dengan warna kuning sinyal ford, dan kemudian warna hijau brooklands digunakan untuk alasnya. highlight dari tamiya silver kemudian diaplikasikan pada baut dan beberapa molotow silver chrome digunakan pada lens holder.

Langkah 7: Pertama Temukan Pesawat Dalam Area Batas

Dengan perangkat keras diurutkan, perangkat lunak perlu dikerjakan. Ada beberapa situs sekarang 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 situs bernama https://opensky-network.org yang dapat Anda gunakan secara gratis.

Untuk mengakses data ini Anda harus mendaftar dan kemudian Anda dapat menggunakan API mereka, menyediakan beberapa fungsi dan cara untuk menarik data. Kami tertarik dengan semua penerbangan dalam suatu area dan mereka memiliki panggilan API Langsung untuk itu. https://opensky-network.org/apidoc/ disebut kotak pembatas. Panggilan API membutuhkan sudut-sudut kotak yang Anda minati dengan tentu saja Lintang/Bujur kami sebagai titik pusat. Anda dapat memeriksa pekerjaan matematika situs ini, yang menggambar kotak tergantung pada apa yang Anda ketik. https://tools.geofabrik.de tetapi untuk saat ini skrip berikut memberikan poin yang kita perlukan untuk menyambungkan ke API.

function 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); $jari-jari = 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);

Jika Anda ingin menguji kode Anda, ada situs tempat Anda dapat memasukkan lintang/bujur dan melihat hasilnya di peta: Lihat contoh kotak pembatas di peta

Langkah 8: Menghitung Heading Pesawat Terkait dengan Kami

Menghitung Heading Pesawat Sehubungan Dengan Kami
Menghitung Heading Pesawat Sehubungan Dengan Kami

Hasil dari panggilan API kotak pembatas memberi kita daftar pesawat, Lon/lat, kecepatan, ketinggian, dan arahnya. Jadi hal selanjutnya yang perlu kita lakukan adalah mendapatkan heading dari setiap plane dalam kaitannya dengan kita sehingga kita dapat memproses lebih lanjut yang setidaknya menuju ke arah umum kita. Kita dapat melakukan ini karena kita mengetahui posisi kita dan dapat menentukan sudut dari kita ke setiap bidang.

Untuk melakukan itu saya menggunakan sepotong kode yang aslinya dalam Javascript jadi saya mengubahnya di sini ke PHP, * menghitung (awal) bantalan antara dua titik * * dari: Formularium Penerbangan Ed Williams, 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; kembali $zz;

Jika Anda ingin melihat halaman di mana versi javascript asli berada, ini adalah tautannya:

di dalam kode tersebut, Anda juga dapat melihat berbagai sub rutin untuk setiap jenis perhitungan tersebut.

Langkah 9: Menghitung Intersepsi dengan Melihat Lingkaran

Menghitung Intersepsi dengan Melihat Lingkaran
Menghitung Intersepsi dengan Melihat Lingkaran

Jadi kami sekarang memiliki pesawat di mana bantalan antara itu dan lokasi kami kurang dari 90 (baik positif atau negatif) dan ini berarti ada kemungkinan pesawat itu terbang dekat. Dengan menggunakan rumus haversine, kita juga dapat menghitung dengan menggunakan Lon/Lat pesawat dan Lon/Lat rumah kita jaraknya dari kita.

Melihat diagram, jika kita menggambar lingkaran di sekitar rumah kita katakanlah sekitar radius 3 mil, ini memberi kita kesempatan untuk melihat sesuatu yang terbang di atasnya. Kita mengetahui perbedaan heading antara pesawat dan kita, kita juga mengetahui jarak pesawat dari kita sehingga kita dapat menghitung segitiga menggunakan SOHCAHTOA lama yang baik, dan dalam hal ini menggunakan Tan dari sudut kita dapat memperoleh panjang sisi yang berlawanan. Jadi jika kita membandingkan nilai ini dengan nilai radius lingkaran di sekitar rumah, kita dapat mengetahui apakah pesawat akan terbang cukup dekat untuk kita lihat. Hal selanjutnya yang bisa kita lakukan adalah menghitung waktu pesawat akan terbang lewat dengan menggunakan kecepatan udara dan jarak dan jika ini kurang dari kira-kira 45 detik atau lebih kita nyalakan lampu. Ini adalah sedikit kode yang saya gunakan untuk mengetahui kemungkinan terbang di atas. Saya melakukan ini karena ada bandara terdekat dan ketika pesawat terbang di sekitar mereka pasti menunjuk ke rumah. Namun karena ketinggiannya nol dan kecepatan berjalan, ini seharusnya tidak memicu alarm.

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

if (($flight_angle<90) && ($flight_intercept<3)){ // kemungkinan terbang melewati

}

kembalikan $flight_intercept;

}

Langkah 10: Jarak Antara Dua Titik di Peta - Rumus Haversine

Jarak Antara Dua Titik pada Peta - Rumus Haversine
Jarak Antara Dua Titik pada Peta - Rumus Haversine

Jadi kita harus menghitung jarak antara pesawat dan lokasi kita. Pada jarak pendek di peta, Anda dapat menghitung jarak secara kira-kira, tetapi karena bumi berbentuk bola, ada rumus yang disebut rumus haversine yang memungkinkan Anda mempertimbangkan permukaan lengkung. Anda dapat membaca lebih lanjut ke dalam rumus:

Sekarang dengan menghitung jarak dan kita mengetahui kecepatan pesawat, kita dapat menghitung berapa detik sebelum pesawat berada di atas kepala. Jadi lampu akan menyala jika ada sesuatu dalam waktu 30 detik dari flypast dan kami akhirnya memiliki lampu peringatan kami.

* berbasis 0n JS di instantglobe.com/CRANES/GeoCoordTool.html dan diubah menjadi PHP */

function get_distHaversine ($home_lat, $home_lon, $plane_lat, $plane_lon) { $R = 6371; // radius rata-rata 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(persegi($a), kuadrat(1-$a)); $d = $R * $c; kembali $d; }

Langkah 11: Mengimpor dan Mendefinisikan Database Pesawat

Salah satu bagian lainnya adalah bahwa situs opensky menawarkan database pesawat yang dapat diunduh bersama dengan tanda panggilan dan identitasnya. Beberapa ratus ribu entri. Jadi kita dapat mengunduh ini dan memuatnya secara lokal ke dalam database MariaDB untuk pencarian (MySQL). Dengan setiap pesawat yang muncul di atas kepala, kami mengambil detailnya dan memperbarui penghitung untuk menunjukkan berapa kali itu terlihat.

Saya juga sedang mengedit database untuk menyoroti pesawat yang saya minati. Terutama burung perang tua dan pesawat menarik serupa lainnya. Beberapa kali musim panas ini sebuah Mig-15 telah terbang. jadi tujuannya adalah menggunakan bidang peringatan yang telah saya tambahkan dan kemudian menyalakan lampu dengan cepat ketika sesuatu yang menarik sedang menuju

Langkah 12: Meningkatkan Hasil dan Fitur Baru

Meningkatkan Hasil dan Fitur Baru
Meningkatkan Hasil dan Fitur Baru
Meningkatkan Hasil dan Fitur Baru
Meningkatkan Hasil dan Fitur Baru
Meningkatkan Hasil dan Fitur Baru
Meningkatkan Hasil dan Fitur Baru

Jadi secara teori semuanya bekerja dengan cukup baik, tetapi Anda akan menemukan dengan data bahwa ada pesawat yang terbang di atas yang tidak muncul di API.

Ini karena tidak semua pesawat menggunakan transponder ADS-B dan menggunakan transponder lama yang berbasis MLAT. Untuk mendapatkan data posisi pesawat menggunakan MLAT, diperlukan serangkaian penerima di darat untuk melakukan triangulasi posisi mereka dan beberapa situs seperti flightradar24 memiliki jaringan kontributor yang lebih besar yang melakukan hal ini dibandingkan dengan opensky. Mudah-mudahan seiring waktu jangkauan mereka akan meningkat juga dan saya menyiapkan receiver MLAT saya sendiri untuk menambah data ini.

Langkah 13: Basis kode

Jangan lupa jika Anda akan menggunakan ini, Anda mungkin ingin menghapus pernyataan SQL jika Anda tidak memiliki database pesawat dan juga menambahkan nilai Lon/Lat dan kunci API Anda sendiri untuk mengakses data penerbangan.

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

define("INTERVAL", (20 * 1)); function fexp() { $lat = "garis lintang Anda"; $lon = "garis bujur anda"; $sisi = 15,75; $kotak = get_bounding_box($lat, $lon, $sisi); $latmin = $kotak[0]; $lonmin = $kotak[1]; $latmax = $kotak[2]; $lonmaks = $kotak[3]; $flyurl = "https://opensky-network.org/api/states/all?lamin=$latmin&lomin=$lonmin&lamax=$latmax&lomax=$lonmax"; echo "Memindai SKY"; $start_time = waktu mikro(true); $json = file_get_contents($flyurl); $data = json_decode($json, BENAR); $masuk = SALAH; $num_planes = count($data['status']); if ($num_planes >0) { echo " dan kita dapat melihat $num_planes planes\n "; untuk ($x =0; $x 0) { $plane_eta = $distplane/$air_speed_kmh; }else { $eta = 1; } if ((($intercept)0)) && ($distplane0){ $masuk = TRUE; gema "------------------------------------------------ --------------------\n"; echo "$icao24 - [$negara $callsign] di [$geo_altitude_m M -- $geo_altitude_f ft] "; echo "[kecepatan $air_speed_kmh kmh and ", round($distplane, 1), "km]\n"; echo "[pada heading ", round($plane_heading, 1), "] [homeangle $heading_d] "; echo "[$lintang, $bujur]\n"; echo "[melewati dalam ", decimal_to_time($plane_eta), " sekarang ", round($intercept, 1), "km jauhnya\n"; gema "------------------------------------------------ --------------------\n"; $DBi = new mysqli("127.0.0.1", "root", "password anda", "awacs"); $sql = "pilih * dari basis data pesawat dimana `icao24`='$icao24'"; mysqli_set_charset($DBi, "utf8"); $getplanedata = mysqli_query($DBi, $sql) or die(mysqli_error($DBi)); $row_getplanedata = mysqli_fetch_assoc($getplanedata); $rows_getplanedata = mysqli_num_rows($getplanedata); if($rows_getplanedata>0) { lakukan { echo "callsign="; echo $row_getplanedata['registration']; gema " adalah "; echo $row_getplanedata['nama produsen']; gema " "; echo $row_getplanedata['model']; gema "oleh"; echo $row_getplanedata['manufacturericao']; echo "milik"; echo $row_getplanedata['pemilik']; gema "terlihat"; echo $row_getplanedata['kunjungan']; echo "kali"; echo " peringkat khusus="; echo $row_getplanedata['khusus']; gema "\n"; $kunjungan = $row_getplanedata['visits']+1; } while ($row_getplanedata = mysqli_fetch_assoc($getplanedata)); mysqli_free_result($getplanedata); $sqli = "PERBARUI SET kunjungan pesawatdatabase = $kunjungan WHERE icao24 = '$icao24'"; mysqli_set_charset($DBi, "utf8"); $updateplanedata = mysqli_query($DBi, $sqli) or die(mysqli_error($DBi)); } else { echo "Tidak dapat menemukan bidang ini di DB jadi tambahkan"; $sqli = "INSERT INTO aircraftdatabase (icao24, kunjungan, khusus) VALUES ('$icao24', 1, 1)"; $updateplanedata = mysqli_query($DBi, $sqli) or die(mysqli_error($DBi)); } echo "----------------------------------------------- ---------------------\n"; } else { // echo "$tanda panggilan"; } } } else { echo " dan langit cerah\n "; } if ($masuk) { echo "Pesawat masuk\n"; $command = "babi w 17 1"; execInBackground($perintah); } else { echo "tidak ada penerbangan masuk\n"; $command = "babi w 17 0"; execInBackground($perintah); } } function decimal_to_time($desimal) { $offset = 0,002778; if ($desimal>$offset) { $desimal = $desimal - 0,002778; } $jam = gmdate('H', floor($desimal * 3600)); $menit = gmdate('i', floor($desimal * 3600)); $detik = gmdate('s', floor($desimal * 3600)); kembali str_pad($jam, 2, "0", STR_PAD_LEFT). ":". str_pad($menit, 2, "0", STR_PAD_LEFT). ":". str_pad($detik, 2, "0", STR_PAD_LEFT); } /* * menghitung (awal) bantalan antara dua titik * * dari: Formularium Penerbangan Ed Williams, 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; kembali $zz; } function 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; kembalikan $flight_intercept; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* * Gunakan rumus Haversine untuk Menghitung jarak (dalam km) antara dua titik yang ditentukan oleh * lintang/bujur (dalam derajat numerik) * * dari: rumus 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 formulir: * result.value = LatLon.distHaversine(lat1.value.parseDeg(), long1.value.parseDeg(), * lat2.value.parseDeg(), long2.value.parseDeg()); * di mana lat1, long1, lat2, long2, dan result adalah bidang formulir * source = instantglobe.com/CRANES/GeoCoordTool.html */ function get_distHaversine ($home_lat, $home_lon, $plane_lat, $plane_lon) { $R = 6371; // radius rata-rata 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(persegi($a), kuadrat(1-$a)); $d = $R * $c; kembali $d; } function 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); $jari-jari = 6371; # Radius paralel pada garis lintang tertentu; $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); } function execInBackground($cmd) { if (substr(php_uname(), 0, 7) == "Windows"){ pclose(popen("start /B ". $cmd, "r")); } else { exec($cmd. " > /dev/null &"); } } function checkForStopFlag() { // sepenuhnya opsional return(TRUE); } fungsi mulai() { echo "mulai\n"; $command = "babi w 17 1"; execInBackground($perintah); $aktif = BENAR; while($aktif) { usleep(1000); // opsional, jika Anda ingin menjadi perhatian if (microtime(true) >= $nextTime) { fexp(); $nextTime = waktu mikro(benar) + INTERVAL; } $aktif = checkForStopFlag(); } } fexp(); Mulailah(); ?>

Langkah 14: Menghubungkan LED dan Sakelar Shutdown

Menghubungkan LED dan Sakelar Shutdown
Menghubungkan LED dan Sakelar Shutdown

Pengkabelan proyek ini sangat sederhana. Hanya ada satu LED yang terhubung ke pin 17 dan ground dengan resistor 270R inline.

Saya juga menyertakan tombol matikan dan nyalakan bersama dengan LED daya yang mematikan pin data TXd. Anda dapat membaca lebih lanjut tentang fungsi shutdown dan kode yang diperlukan di https://github.com/Howchoo/pi-power-button.git dari situs https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow… Anda dapat membaca tentang menambahkan lampu daya di sini

Direkomendasikan: