Mục lục:

Cảnh báo sớm Đèn đường băng Raspberry PI sử dụng dữ liệu lập bản đồ chuyến bay: 14 bước (có hình ảnh)
Cảnh báo sớm Đèn đường băng Raspberry PI sử dụng dữ liệu lập bản đồ chuyến bay: 14 bước (có hình ảnh)

Video: Cảnh báo sớm Đèn đường băng Raspberry PI sử dụng dữ liệu lập bản đồ chuyến bay: 14 bước (có hình ảnh)

Video: Cảnh báo sớm Đèn đường băng Raspberry PI sử dụng dữ liệu lập bản đồ chuyến bay: 14 bước (có hình ảnh)
Video: Khi bị điểm kém #shorts #duolingo 2024, Tháng bảy
Anonim
Cảnh báo sớm Đèn đường băng Raspberry PI sử dụng dữ liệu lập bản đồ chuyến bay
Cảnh báo sớm Đèn đường băng Raspberry PI sử dụng dữ liệu lập bản đồ chuyến bay
Cảnh báo sớm Đèn đường băng Raspberry PI sử dụng dữ liệu lập bản đồ chuyến bay
Cảnh báo sớm Đèn đường băng Raspberry PI sử dụng dữ liệu lập bản đồ chuyến bay
Cảnh báo sớm Đèn đường băng Raspberry PI sử dụng dữ liệu lập bản đồ chuyến bay
Cảnh báo sớm Đèn đường băng Raspberry PI sử dụng dữ liệu lập bản đồ chuyến bay
Cảnh báo sớm Đèn đường băng Raspberry PI sử dụng dữ liệu lập bản đồ chuyến bay
Cảnh báo sớm Đèn đường băng Raspberry PI sử dụng dữ liệu lập bản đồ chuyến bay

Chiếc đèn này xuất phát từ một số lý do mà tôi luôn quan tâm đến những chiếc máy bay bay trên cao và trong suốt mùa hè vào cuối tuần, thường có một số chiếc khá thú vị bay xung quanh. Mặc dù bạn chỉ có xu hướng nghe thấy chúng khi chúng đi qua. Sau đó, lý do khác là có vẻ như đường bay của các máy bay đi từ sân bay Thành phố Luân Đôn đôi khi sẽ bị nghe lén và chúng có một số chuyến bay khá ồn ào. Khi tôi mải miết quay một số video cho YouTube, thật sự rất khó chịu khi phải bỏ đoạn ghi âm vì máy bay ồn ào. Vì vậy, tôi tự hỏi liệu dữ liệu mà bạn nhìn thấy trên các trang web như Flightradar24 có được công bố công khai hay không, khi tôi phát hiện ra thứ gì đó tương tự có sẵn từ mạng opensky, đèn cảnh báo sớm đã ra đời. Không mất quá nhiều thời gian để nảy ra ý tưởng sử dụng một bản sao của đèn đường băng để làm nơi xây dựng dự án.

Bạn có thể tìm hiểu thêm về Mạng OpenSky tại https://www.opensky-network.org Tôi cũng muốn lần này tạo ra một thấu kính nhựa tốt thay vì sử dụng PLA mờ và mặc dù tôi có một bộ thu ADS-B mà tôi muốn giữ lại điều này đơn giản và rẻ. ADS-B cũng cần một ăng-ten và điều này sẽ không làm được đối với một chiếc đèn trên kệ trong văn phòng. Vì vậy, hy vọng bạn sẽ thấy bản dựng thú vị vì nó bao gồm in 3D, đúc nhựa và toán học cũng như ngoại suy các vị trí của máy bay có khả năng bay qua.

Bước 1: Thiết kế vỏ máy

Tìm kiếm của Google đưa ra nhiều kiểu dáng khác nhau của đèn đường băng và thiết kế của kiểu này được tạo ra bằng cách sử dụng ảnh hưởng thiết kế từ nhiều loại đèn thực khác nhau. Nó cũng được thu nhỏ để đặt trong phòng hoặc trên giá chứ không phải là kích thước đầy đủ, vì chúng có xu hướng lớn hơn rất nhiều trong cuộc sống thực.

Các thiết kế được tạo ra trong Fusion 360 và tôi đã nhập một số yếu tố trước đó như bộ giữ số 0 raspberry pi từ các dự án trước đó. Việc có thể sử dụng lại các phần tử sẽ khiến bạn phải đau đầu khi tìm hiểu các kiến thức cơ bản. Bạn cũng có thể tải xuống các tệp tại đây

Bước 2: Đúc thấu kính - #fail

Đúc ống kính - #fail
Đúc ống kính - #fail
Đúc ống kính - #fail
Đúc ống kính - #fail
Đúc ống kính - #fail
Đúc ống kính - #fail

Yếu tố thiết kế quan trọng nhất của chiếc đèn này sẽ là thấu kính. Vì vậy, tôi đã giải quyết vấn đề này đầu tiên vì nếu không có một tấm kính trông thật đẹp thì dự án sẽ hoạt động. Tôi đang ghi lại ở đây những thất bại mà tôi đã gặp phải khi cố gắng đạt được điều đó, mặc dù ban đầu tôi cũng quyết định làm thấu kính có màu hổ phách. Đèn đường băng có cả màu hổ phách và màu xanh lam và chỉ sau khi tôi bắt đầu làm chiếc màu hổ phách, tôi mới thay đổi quyết định và quyết định rằng tôi muốn một chiếc màu xanh lam.

Từ những gì tôi có thể phát hiện ra, những cái màu hổ phách được sử dụng ở dây giữ và những cái màu xanh lam được sử dụng để lót đường băng, và đây là những cái có vẻ là nguyên mẫu hơn được tìm thấy nếu bạn tìm kiếm đèn đường băng. Tuy nhiên, đây là nỗ lực đầu tiên của tôi trong việc tạo ra một thấu kính màu hổ phách. Để tạo ra ống kính, tôi sẽ sử dụng nhựa trong suốt với chất phụ gia màu, và mặc dù tôi đã làm một vài khuôn trước khi tôi tự hỏi liệu có thể in một khuôn 3D và sử dụng nó hay không. Vì vậy, tôi bắt đầu với việc tạo một khuôn tách ở dạng 3D và in nó ra trong PetG. Tôi tin rằng số lượng nấm mốc được giải phóng một cách hợp lý là đủ để nói lên sự phát triển của nấm mốc. Hóa ra với một vài lần thử, tôi đã làm cho nhựa dính vào khuôn như keo và dường như không thể tách chúng ra. Mặc dù tôi đã có một tỷ lệ đầy đủ mà tôi sẽ sử dụng, tôi đã quyết định chống lại nó và in ra ống kính để sử dụng với khuôn đúc silicone truyền thống.

Bước 3: Các loại nhựa khác nhau

Các loại nhựa khác nhau
Các loại nhựa khác nhau
Các loại nhựa khác nhau
Các loại nhựa khác nhau
Các loại nhựa khác nhau
Các loại nhựa khác nhau
Các loại nhựa khác nhau
Các loại nhựa khác nhau

Để nhanh chóng sang một bên, tôi đã sử dụng 3 loại nhựa trong / màu cho dự án này.

Đầu tiên là loại thị trường Sở thích gọi là Pebeo - Gedeo và thường được bán để đóng gói các vật dụng nhỏ và được sử dụng cho đồ trang sức và chặn giấy để bàn, v.v. Loại này hoạt động khá tốt và được bảo dưỡng tốt trong khoảng 24-36 giờ. Tuy nhiên nó khá đắt so với số tiền bạn nhận được, nhưng tiện dụng và dễ dàng có sẵn trong các cửa hàng thủ công và sở thích. Nó được trộn với tỷ lệ 2: 1. Loại thứ hai là một loại nhựa có màu sẵn được trộn với tỷ lệ 10: 1 với chất làm cứng và điều này mất nhiều thời gian nhất để chữa khỏi, trung thực là khoảng một tuần trước khi nó đóng rắn hoàn toàn. Loại cuối cùng là một loại nhựa trong, cũng được trộn theo tỷ lệ 2: 1 và chất này được đóng rắn trong khoảng 2 ngày, bạn có thể tạo màu này bằng các giọt bột màu, nhưng bạn cần đảm bảo rằng bạn luôn sử dụng cùng một tỷ lệ màu nếu bạn đang thực hiện các lô riêng biệt. Nó cũng hoạt động hiệu quả nhất về chi phí. Cuối cùng RTV cho khuôn là RTV GP-3481 và điều này mất khoảng 24 giờ để thiết lập và có thời gian nấu khá lâu nên bạn có nhiều thời gian để trộn và sau đó đổ.

Hiện tại, tôi không có chậu chân không (hiện đang được đặt hàng) để bạn có thể bị bao vây bởi bong bóng trong cả khuôn và đổ nhựa. Không phải là vấn đề quá lớn đối với điều này, nhưng với một ống kính rõ ràng hoặc tương tự thì bạn sẽ muốn suy nghĩ về cách nào đó để loại bỏ các bong bóng ra khỏi hỗn hợp.

Bước 4: Đúc ống kính trong khuôn silicone # 2

Image
Image
Đúc ống kính trong khuôn silicone # 2
Đúc ống kính trong khuôn silicone # 2
Đúc ống kính trong khuôn silicone # 2
Đúc ống kính trong khuôn silicone # 2

Vì vậy, đây là nỗ lực thứ hai trong việc tạo ra một ống kính Resin và giai đoạn đầu tiên là làm cả một ống kính trong Fusion 360 và sau đó in nó trong ABS cũng như một cái thùng để đựng nó. Đây sẽ là cái trước đây cho khuôn và giúp giảm lượng silicone được sử dụng. Bạn có thể dễ dàng thực hiện điều này từ thẻ, nhưng nó chỉ là một cách tiếp cận khác. Để có cơ hội thoát ra khỏi khuôn tốt hơn, trước tiên tôi đánh vecni và sau đó phủ một lớp chất giải phóng sáp lên trên.

Sau đó, tôi đổ một số GP-3481 vào khoảng bờ 27 RTV và sau đó để nó thiết lập trong 24 giờ tiếp theo trước khi tháo khuôn. Sau khi hoàn thành việc này, tôi sử dụng nhựa trong trộn theo tỷ lệ 2: 1 với khoảng 4/5 giọt sắc tố màu và trộn đều trong bốn phút. Đổ chất này vào khuôn và sau đó cũng đặt một tấm kính bắn vào nhựa để tạo khoảng trống sau này cho đèn hoặc đèn LED. Sau khoảng 24 giờ, lớp nhựa này đã sẵn sàng để tháo ra và ống kính hoạt động khá tốt. Có bọt khí xuất hiện, nhưng tôi không có bình chân không để khử khí nhựa trước khi đổ.

Bước 5: In 3D và Chuẩn bị

In 3D và Chuẩn bị
In 3D và Chuẩn bị
In 3D và Chuẩn bị
In 3D và Chuẩn bị
In 3D và Chuẩn bị
In 3D và Chuẩn bị

Mô hình được thiết kế theo cách mà phần trung tâm cắm vào đế. Điều này để tránh bị che trong quá trình sơn. Toàn bộ mô hình đã được in trong Hatchbox ABS và sau đó được chà nhám. Bắt đầu với 60 grit cho đến khoảng 800 grit đã mang lại một bề mặt hoàn thiện đủ tốt cho mô hình này.

Bước 6: Lắp ráp và sơn

Lắp ráp và sơn
Lắp ráp và sơn
Lắp ráp và sơn
Lắp ráp và sơn
Lắp ráp và sơn
Lắp ráp và sơn

Sau khi các bản in được chà nhám, sau đó nó được sơn với một số lớp sơn lót cao cấp. Đánh nhám nhẹ sau đó phun sơn lót màu xám. Các bộ phận chính được sơn màu vàng tín hiệu ford, và sau đó là màu xanh lá cây brooklands được sử dụng cho phần đế. điểm nổi bật của bạc tamiya sau đó được áp dụng cho các bu lông và một số chrome bạc molotow được sử dụng trên giá đỡ ống kính.

Bước 7: Đầu tiên tìm máy bay trong vùng giới hạn

Với phần cứng được sắp xếp, phần mềm cần thiết để hoạt động. Hiện có một vài trang web cung cấp tính năng theo dõi chuyến bay, nhưng không nhiều trang web cung cấp API để truy cập dữ liệu đó. Một số làm được, chỉ làm như vậy trên cơ sở thương mại nhưng may mắn thay, có một trang web tên là https://opensky-network.org mà bạn có thể sử dụng miễn phí.

Để truy cập dữ liệu này, bạn phải đăng ký và sau đó bạn có thể sử dụng API của họ, nó cung cấp một số chức năng và cách để kéo dữ liệu. Chúng tôi quan tâm đến tất cả các chuyến bay trong một khu vực và họ có lệnh gọi API Trực tiếp cho điều đó. https://opensky-network.org/apidoc/ được gọi là hộp giới hạn. Lệnh gọi API yêu cầu các góc của hộp mà bạn quan tâm, dĩ nhiên là Vĩ độ / Kinh độ của chúng tôi là điểm trung tâm. Bạn có thể kiểm tra các công trình toán học trên trang web này, nó sẽ vẽ một hộp tùy thuộc vào những gì bạn nhập vào. Http://tools.geofabrik.de nhưng hiện tại, đoạn mã sau cung cấp những điểm mà chúng tôi cần để cắm vào API.

function get_bounds_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); $ bán kính = 6371; $llel_radius = $ radius * cos ($ lat); $ lat_min = $ lat - $ half_side_in_km / $ bán kính; $ lat_max = $ lat + $ half_side_in_km / $ bán kính; $ lon_min = $ lon - $ half_side_in_km / $ song song_radius; $ lon_max = $ lon + $ half_side_in_km / $ song song_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);

Nếu bạn muốn kiểm tra mã của mình, có một trang web nơi bạn có thể nhập vĩ độ / kinh độ và xem kết quả trên bản đồ: Xem ví dụ về hộp giới hạn trên bản đồ

Bước 8: Tính toán đầu máy bay liên quan đến chúng ta

Tính toán đầu máy bay liên quan đến chúng ta
Tính toán đầu máy bay liên quan đến chúng ta

Kết quả từ lệnh gọi API hộp giới hạn cung cấp cho chúng tôi danh sách các máy bay, Lon / vĩ độ, tốc độ, độ cao và hướng của chúng. Vì vậy, điều tiếp theo mà chúng ta cần làm là lấy tiêu đề của mỗi mặt phẳng liên quan đến chúng ta để chúng ta có thể xử lý thêm những mặt phẳng ít nhất là hướng về hướng chung của chúng ta. Chúng tôi có thể làm điều này khi chúng tôi biết vị trí của mình và có thể tính toán góc từ chúng tôi đến mỗi mặt phẳng.

Để làm điều đó, tôi sử dụng một đoạn mã mà từ đó ban đầu bằng Javascript, vì vậy tôi đã chuyển đổi nó ở đây thành PHP, * tính toán (ban đầu) chênh lệch giữa hai điểm * * từ: Ed Williams 'Aviation Formulary, https://williams.best.vwh.net/avform.htm#Crs * source = Instantglobe.com/CRANES/GeoCoordTool.html * / function get_bnking ($ 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; trả về $ zz;

Nếu bạn muốn xem trang chứa các phiên bản javascript gốc, đây là liên kết:

trong mã đó, bạn cũng có thể thấy các quy trình phụ khác nhau cho từng loại tính toán.

Bước 9: Tính một điểm chặn bằng cách nhìn vào một vòng tròn

Tính toán một điểm chặn bằng cách nhìn vào một vòng tròn
Tính toán một điểm chặn bằng cách nhìn vào một vòng tròn

Vì vậy, bây giờ chúng ta có một chiếc máy bay mà biên độ giữa nó và vị trí của chúng ta nhỏ hơn 90 (dương hoặc âm) và vì vậy điều này có nghĩa là có khả năng nó sẽ bay gần đó. Sử dụng công thức hasrsine, chúng ta cũng có thể tính toán bằng cách sử dụng Lon / Lat của máy bay và Lon / Lat của ngôi nhà của chúng ta trong khoảng cách mà nó cách xa chúng ta.

Nhìn vào biểu đồ, nếu chúng ta vẽ một vòng tròn xung quanh ngôi nhà của chúng ta, bán kính khoảng 3 dặm, điều này sẽ cho chúng ta cơ hội nhìn thấy bất cứ thứ gì bay qua. Chúng tôi biết sự khác biệt về hướng đi giữa máy bay và chúng tôi, chúng tôi cũng biết khoảng cách của máy bay từ chúng tôi để sau đó chúng tôi có thể tính tam giác bằng cách sử dụng SOHCAHTOA cũ tốt, và trong trường hợp này, sử dụng Tan của góc, chúng tôi có thể nhận được chiều dài cạnh đối diện. Vì vậy, nếu chúng ta so sánh giá trị này với giá trị bán kính của vòng tròn xung quanh ngôi nhà thì chúng ta có thể tìm ra liệu máy bay có bay đủ gần để chúng ta nhìn thấy nó hay không. Bước tiếp theo chúng ta có thể làm là tính ra thời gian mà máy bay sẽ bay qua bằng cách sử dụng tốc độ không khí và khoảng cách và nếu điều này nhỏ hơn khoảng 45 giây hoặc lâu hơn, chúng ta bật đèn. Đây là một đoạn mã mà tôi sử dụng để tìm ra cơ hội bay qua. Tôi làm điều này vì có một sân bay gần đó và khi máy bay đang chạy xung quanh, chúng chắc chắn sẽ chỉ vào nhà. Tuy nhiên, vì độ cao của chúng bằng 0 và tốc độ là tốc độ đi bộ, điều này sẽ không kích hoạt cảnh báo.

hàm 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)) {// có thể bay qua

}

trả lại $ flight_intercept;

}

Bước 10: Khoảng cách giữa hai điểm trên bản đồ - Công thức Haversine

Khoảng cách giữa hai điểm trên bản đồ - Công thức Haversine
Khoảng cách giữa hai điểm trên bản đồ - Công thức Haversine

Vì vậy, chúng tôi phải tính toán khoảng cách giữa máy bay và vị trí của chúng tôi. Trên những khoảng cách ngắn trên bản đồ, bạn có thể tính toán khoảng cách gần đúng, nhưng vì trái đất là hình cầu, nên có một công thức được gọi là công thức hasrsine cho phép bạn xem xét bề mặt cong. Bạn có thể đọc thêm về công thức:

Bây giờ với khoảng cách đã được tính toán và chúng ta biết tốc độ bay của máy bay, chúng ta có thể tính xem nó sẽ là bao nhiêu giây trước khi máy bay ở trên cao. Vì vậy, đèn sẽ sáng nếu có thứ gì đó trong vòng 30 giây kể từ flypast và cuối cùng chúng ta cũng có đèn cảnh báo.

* dựa trên 0n JS tại Instantglobe.com/CRANES/GeoCoordTool.html và được chuyển thành PHP * /

function get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // bán kính trung bình của trái đất tính bằng 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; trả lại $ d; }

Bước 11: Nhập và xác định cơ sở dữ liệu máy bay

Một trong những điểm khác là trang opensky cung cấp cơ sở dữ liệu có thể tải xuống về các mặt phẳng cùng với các lệnh gọi và định danh của chúng. Hàng trăm nghìn mục nhập của nó. Vì vậy, chúng tôi có thể tải xuống và tải nó cục bộ vào cơ sở dữ liệu MariaDB để tra cứu (MySQL). Với mỗi máy bay xuất hiện trên cao, chúng tôi truy xuất thông tin chi tiết của nó và cập nhật bộ đếm để hiển thị số lần máy bay đã được nhìn thấy.

Tôi hiện cũng đang chỉnh sửa cơ sở dữ liệu để làm nổi bật những chiếc máy bay mà tôi quan tâm. Chủ yếu là những con chim chiến cũ và những chiếc máy bay thú vị tương tự khác. Một vài lần trong mùa hè này, một chiếc Mig-15 đã bay qua. vì vậy mục đích là sử dụng trường cảnh báo tôi đã thêm và sau đó nháy đèn nhanh khi có thứ gì đó thú vị đang lướt qua

Bước 12: Cải thiện kết quả và các tính năng mới

Cải thiện kết quả và các tính năng mới
Cải thiện kết quả và các tính năng mới
Cải thiện kết quả và các tính năng mới
Cải thiện kết quả và các tính năng mới
Cải thiện kết quả và các tính năng mới
Cải thiện kết quả và các tính năng mới

Vì vậy, về lý thuyết, mọi thứ hoạt động khá tốt, nhưng bạn sẽ thấy với dữ liệu rằng có những máy bay bay qua không xuất hiện trong API.

Điều này là do không phải tất cả các máy bay đều đang sử dụng bộ phát đáp ADS-B và sử dụng bộ phát đáp cũ hơn dựa trên MLAT. Để có được dữ liệu vị trí trên máy bay sử dụng MLAT, nó yêu cầu một loạt máy thu trên mặt đất để xác định vị trí của chúng và một số trang web như Flightradar24 có mạng lưới cộng tác viên lớn hơn làm việc này so với opensky. Hy vọng rằng theo thời gian phạm vi phủ sóng của họ cũng sẽ được cải thiện và tôi đang thiết lập bộ thu MLAT của riêng mình để thêm vào dữ liệu này.

Bước 13: Codebase

Đừng quên nếu bạn định sử dụng điều này, bạn có thể muốn xóa các câu lệnh SQL nếu bạn không có cơ sở dữ liệu về máy bay và cũng thêm giá trị Lon / Lat và khóa API của riêng bạn để truy cập dữ liệu chuyến bay.

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

xác định ("INTERVAL", (20 * 1)); function fexp () {$ lat = "vĩ độ của bạn"; $ lon = "kinh độ của bạn"; $ phụ = 15,75; $ box = get_bounds_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"; echo "Quét SKY"; $ start_time = microtime (true); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, TRUE); $ inbound = FALSE; $ num_planes = count ($ data ['bang']); if ($ num_planes> 0) {echo "và chúng ta có thể thấy các mặt phẳng $ num_planes / n"; cho ($ x = 0; $ x 0) {$ plane_eta = $ distplane / $ air_speed_kmh; } else {$ eta = 1; } if ((($ intercept) 0)) && ($ distplane0) {$ inbound = TRUE; tiếng vang "------------------------------------------------ --------------------\n"; echo "$ icao24 - [$ country $ callign] tại [$ geo_altitude_m M - $ geo_altitude_f ft]"; echo "[speed $ air_speed_kmh kmh and", round ($ distplane, 1), "km xa] n"; echo "[trên một tiêu đề của", round ($ plane_heading, 1), "] [homeangle $ header_d]"; echo "[$ latitude, $ longitude] n"; echo "[flypast in", decimal_to_time ($ plane_eta), "now", round ($ intercept, 1), "km away / n"; tiếng vang "------------------------------------------------ --------------------\n"; $ DBi = new mysqli ("127.0.0.1", "root", "mật khẩu của bạn", "awacs"); $ sql = "select * from planedatabase where` icao24` = '$ icao24' "; mysqli_set_charset ($ DBi, "utf8"); $ getplanedata = mysqli_query ($ DBi, $ sql) hoặc die (mysqli_error ($ DBi)); $ row_getplanedata = mysqli_fetch_assoc ($ getplanedata); $ row_getplanedata = mysqli_num_rows ($ getplanedata); if ($ row_getplanedata> 0) {do {echo "callign ="; echo $ row_getplanedata ['đăng ký']; echo "là một"; echo $ row_getplanedata ['tên nhà sản xuất']; tiếng vang ""; echo $ row_getplanedata ['model']; echo "bởi"; echo $ row_getplanedata ['productionricao']; echo "thuộc sở hữu của"; echo $ row_getplanedata ['owner']; tiếng vang "đã thấy"; echo $ row_getplanedata ['lượt truy cập']; echo "lần"; echo "đánh giá đặc biệt ="; echo $ row_getplanedata ['đặc biệt']; echo "\ n"; $ lượt truy cập = $ row_getplanedata ['lượt truy cập'] + 1; } while ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "CẬP NHẬT Cơ sở dữ liệu máy bay SET lượt truy cập = $ lượt truy cập WHERE icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) hoặc die (mysqli_error ($ DBi)); } else {echo "Không thể tìm thấy mặt phẳng này trong DB nên thêm nó"; $ sqli = "CHÈN VÀO Cơ sở dữ liệu máy bay (icao24, lượt truy cập, đặc biệt) VALUES ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) hoặc die (mysqli_error ($ DBi)); } echo "----------------------------------------------- ---------------------\n"; } else {// echo "$ callign"; }}} else {echo "và bầu trời quang đãng / n"; } if ($ inbound) {echo "Máy bay đến / n"; $ command = "heo w 17 1"; executeInBackground ($ lệnh); } else {echo "không có chuyến bay đến / n"; $ command = "heo w 17 0"; executeInBackground ($ lệnh); }} function decimal_to_time ($ decimal) {$ offset = 0,002778; if ($ decimal> $ offset) {$ decimal = $ decimal - 0,002778; } $ hours = gmdate ('H', floor ($ decimal * 3600)); $ phút = gmdate ('i', tầng ($ thập phân * 3600)); $ seconds = gmdate ('s', floor ($ decimal * 3600)); trả về str_pad ($ giờ, 2, "0", STR_PAD_LEFT). ":". str_pad ($ phút, 2, "0", STR_PAD_LEFT). ":". str_pad ($ giây, 2, "0", STR_PAD_LEFT); } / * * tính toán (ban đầu) chênh lệch giữa hai điểm * * từ: Ed Williams 'Aviation Formulary, https://williams.best.vwh.net/avform.htm#Crs * source = Instantglobe.com/CRANES/GeoCoordTool. html * / function get_bashing ($ 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; trả về $ 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; trả lại $ flight_intercept; } / * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * / / * * Sử dụng công thức Haversine để Tính khoảng cách (tính bằng km) giữa hai điểm được chỉ định bởi * vĩ độ / kinh độ (theo độ số) * * từ: Công thức Haversine - RWSinnott, "Virtues of the Haversine", * Sky and Telescope, vol 68, no 2, 1984 * https://williams.best.vwh.net/avform.htm#Crs * * ví dụ sử dụng từ biểu mẫu: * result.value = LatLon.distHaversine (lat1.value.parseDeg (), long1.value.parseDeg (), * lat2.value.parseDeg (), long2.value.parseDeg ()); * trong đó lat1, long1, lat2, long2 và kết quả là các trường biểu mẫu * source = Instantglobe.com/CRANES/GeoCoordTool.html * / function get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // bán kính trung bình của trái đất tính bằng 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; trả lại $ d; } function get_bounds_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); $ bán kính = 6371; # Bán kính của vĩ tuyến tại vĩ độ đã cho; $llel_radius = $ radius * cos ($ lat); $ lat_min = $ lat - $ half_side_in_km / $ bán kính; $ lat_max = $ lat + $ half_side_in_km / $ bán kính; $ lon_min = $ lon - $ half_side_in_km / $ song song_radius; $ lon_max = $ lon + $ half_side_in_km / $ song song_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 executeInBackground ($ cmd) {if (substr (php_uname (), 0, 7) == "Windows") {pclose (popen ("start / B". $ cmd, "r")); } else {execute ($ cmd. "> / dev / null &"); }} function checkForStopFlag () {// hoàn toàn tùy chọn return (TRUE); } hàm start () {echo "start / n"; $ command = "heo w 17 1"; executeInBackground ($ lệnh); $ hoạt động = TRUE; while ($ active) {usleep (1000); // tùy chọn, nếu bạn muốn quan tâm if (microtime (true)> = $ nextTime) {fexp (); $ nextTime = microtime (true) + INTERVAL; } $ active = checkForStopFlag (); }} fexp (); bắt đầu(); ?>

Bước 14: Đấu dây đèn LED và Công tắc tắt máy

Đấu dây đèn LED và Công tắc tắt máy
Đấu dây đèn LED và Công tắc tắt máy

Hệ thống dây của dự án này thực sự không thể đơn giản hơn. Chỉ có một đèn LED được kết nối với chân 17 và nối đất với một điện trở 270R nội tuyến.

Tôi cũng bao gồm nút tắt và mở nguồn cùng với đèn LED nguồn chạy khỏi chân dữ liệu TXd. Bạn có thể đọc thêm về chức năng tắt máy và mã cần thiết tại https://github.com/Howchoo/pi-power-button.git từ trang https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow… Bạn có thể đọc về cách thêm đèn nguồn tại đây

Đề xuất: