Სარჩევი:

ადრეული გაფრთხილება ჟოლოს PI ასაფრენი ბილიკი ფრენის რუკების მონაცემების გამოყენებით: 14 ნაბიჯი (სურათებით)
ადრეული გაფრთხილება ჟოლოს PI ასაფრენი ბილიკი ფრენის რუკების მონაცემების გამოყენებით: 14 ნაბიჯი (სურათებით)

ვიდეო: ადრეული გაფრთხილება ჟოლოს PI ასაფრენი ბილიკი ფრენის რუკების მონაცემების გამოყენებით: 14 ნაბიჯი (სურათებით)

ვიდეო: ადრეული გაფრთხილება ჟოლოს PI ასაფრენი ბილიკი ფრენის რუკების მონაცემების გამოყენებით: 14 ნაბიჯი (სურათებით)
ვიდეო: რატომ გვჭირდება ადრეული გაფრთხილების სისტემა? 2024, ივლისი
Anonim
ადრეული გაფრთხილება ჟოლოს PI ასაფრენი ბილიკი სინათლე ფრენის რუკების მონაცემების გამოყენებით
ადრეული გაფრთხილება ჟოლოს PI ასაფრენი ბილიკი სინათლე ფრენის რუკების მონაცემების გამოყენებით
ადრეული გაფრთხილება ჟოლოს PI ასაფრენი ბილიკი სინათლე ფრენის რუქების მონაცემების გამოყენებით
ადრეული გაფრთხილება ჟოლოს PI ასაფრენი ბილიკი სინათლე ფრენის რუქების მონაცემების გამოყენებით
ადრეული გაფრთხილება ჟოლოს PI ასაფრენი ბილიკი სინათლე ფრენის რუქების მონაცემების გამოყენებით
ადრეული გაფრთხილება ჟოლოს PI ასაფრენი ბილიკი სინათლე ფრენის რუქების მონაცემების გამოყენებით
ადრეული გაფრთხილება ჟოლოს PI ასაფრენი ბილიკი სინათლე ფრენის რუკების მონაცემების გამოყენებით
ადრეული გაფრთხილება ჟოლოს PI ასაფრენი ბილიკი სინათლე ფრენის რუკების მონაცემების გამოყენებით

ეს ნათურა წარმოიშვა რამოდენიმე მიზეზის გამო, რომ მე ყოველთვის მაინტერესებს თვითმფრინავები, რომლებიც დაფრინავენ თავზე და ზაფხულის განმავლობაში შაბათ -კვირას ხშირად საკმაოდ მიმზიდველები დაფრინავენ გარშემო. მიუხედავად იმისა, რომ თქვენ მხოლოდ ისმენთ მათ, როდესაც ისინი წარსულში მიდიან. მეორე მიზეზი ის არის, რომ როგორც ჩანს ლონდონის ქალაქის აეროპორტიდან გამავალი თვითმფრინავების ფრენის ბილიკი ზოგჯერ მოისმენს და მათ საკმაოდ ხმაურიანი ფრენები აქვთ. როგორც მე იშურებს YouTube– ისთვის რამდენიმე ვიდეოს ჩაწერაში, ნამდვილად მაღიზიანებს ჩანაწერის გაუქმება ხმაურიანი თვითმფრინავის გამო. ასე რომ, მე დავინტერესდი, არის თუ არა მონაცემები საჯაროდ ხელმისაწვდომი იმ საიტებზე, როგორიცაა flyradar24, როდესაც აღმოვაჩინე, რომ მსგავსი რამ ხელმისაწვდომი იყო ღია ქსელიდან, ადრეული გამაფრთხილებელი ნათურა დაიბადა. არც ისე დიდი დრო დასჭირდა იმის შემდგომ, რომ იდეა გამოეყენებინა ასაფრენი ბილიკის შუქის პროექტის ასამოქმედებლად.

თქვენ შეგიძლიათ გაიგოთ მეტი OpenSky ქსელის შესახებ https://www.opensky-network.org აქ ასევე მინდოდა გამეკეთებინა ლამაზი ფისოვანი ლინზა გამჭვირვალე PLA– ს ნაცვლად და მიუხედავად იმისა, რომ მე მაქვს ADS-B მიმღები, რომლის შენარჩუნება მინდოდა ეს მარტივი და იაფი. ADS-B– ს ასევე სჭირდება ანტენა და ეს არ ნიშნავს იმას, რომ ნათურა შევიდეს თაროზე ოფისში. ვიმედოვნებთ, რომ თქვენ ნახავთ, რომ მშენებლობა საინტერესოა, რადგან ის მოიცავს 3D ბეჭდვას, ფისოვანი ჩამოსხმა და მათემატიკა, ასევე თვითმფრინავების პოზიციების ექსტრაპოლაციისთვის, რომლებიც პოტენციურად შეიძლება გადალახოს თავზე.

ნაბიჯი 1: საქმის დიზაინი

Google– ის ძიებაში მოდის ასაფრენი ბილიკის მრავალი განსხვავებული დიზაინი და ამ დიზაინის დიზაინი განხორციელდა რეალური ნათურების მრავალი განსხვავებული მარკის დიზაინის გავლენის გამოყენებით. ასევე მასშტაბურია იჯდეს ოთახში ან თაროზე და არა სრულ ზომაზე, რადგან ისინი რეალურ ცხოვრებაში ბევრად უფრო დიდია.

დიზაინი შემუშავდა Fusion 360 – ში და მე შემოვიტანე წინა ელემენტები, როგორიცაა ჟოლოს პი ნულოვანი დამჭერი წინა პროექტებიდან. ელემენტების ხელახალი გამოყენების უნარი ბევრ თავის ტკივილს იღებს საფუძვლების ამოღებიდან. თქვენ ასევე შეგიძლიათ ჩამოტვირთოთ ფაილები აქ

ნაბიჯი 2: ლინზების ჩამოსხმა - #მარცხი

ლინზების ჩამოსხმა - #მარცხი
ლინზების ჩამოსხმა - #მარცხი
ლინზების ჩამოსხმა - #მარცხი
ლინზების ჩამოსხმა - #მარცხი
ლინზების ჩამოსხმა - #მარცხი
ლინზების ჩამოსხმა - #მარცხი

ამ ნათურის ყველაზე მნიშვნელოვანი დიზაინის ელემენტი იქნება ობიექტივი. ასე რომ, მე ამას პირველად გავუმკლავდი, რადგან ლამაზი ავთენტური გარეგნობის შუშის გარეშე პროექტი აპირებდა მუშაობას. მე ვაფიქსირებ აქ იმ წარუმატებლობებს, რაც მე მქონდა ამის მისაღწევად, მაგრამ არ გავუძელი იმას, რომ მე ასევე თავდაპირველად გადავწყვიტე ობიექტივის ქარვა. ასაფრენი ბილიკი მოდის როგორც ქარვისფერში, ასევე ცისფერში და მხოლოდ მას შემდეგ რაც დავიწყე ქარვის დამზადება, გადავიფიქრე და გადავწყვიტე, რომ ლურჯი მინდა.

რაც მე შემიძლია განვსაზღვრო ქარვის პირობა გამოიყენება დასაჭერ ხაზთან, ხოლო ცისფერი პირობა გამოიყენება ასაფრენი ბილიკის დასაფარავად, და ეს არის ის, რაც, როგორც ჩანს, უფრო არქეტიპულია, თუ თქვენ მოძებნით ასაფრენ ბილიკს. თუმცა, აქ არის ჩემი პირველი მცდელობა ქარვის ობიექტივის დამზადების. ლინზის გასაკეთებლად ვაპირებდი გამჭვირვალე ფისის გამოყენებას ფერადი დანამატით და მიუხედავად იმისა, რომ მანამდე რამდენიმე ფორმა გავაკეთე, მაინტერესებდა შესაძლებელი იქნებოდა თუ არა 3D ფორმატის დაბეჭდვა და მისი გამოყენება. ასე რომ, მე დავიწყე სამგანზომილებიანი ფორმის დამზადება და მისი დაბეჭდვა PetG– ში. ლოგიკური რაოდენობის mold გათავისუფლების მე დავრწმუნდი, რომ საკმარისი იქნება sperate mold. როგორც ირკვევა რამოდენიმე მცდელობით მე გავაკეთე ფისოვანი ჩარჩოზე წებოს მსგავსად და უბრალოდ არ ჩანდა მათი განცალკევება. მიუხედავად იმისა, რომ მე მქონდა სრული მასშტაბი, რომლის გამოყენებას ვაპირებდი, მე მივიღე წინააღმდეგი და დავბეჭდე ლინზა, რომ გამოვიყენო ტრადიციული სილიკონის ჩამოსხმისთვის.

ნაბიჯი 3: სხვადასხვა სახის ფისოვანი

სხვადასხვა სახის ფისები
სხვადასხვა სახის ფისები
სხვადასხვა სახის ფისები
სხვადასხვა სახის ფისები
სხვადასხვა სახის ფისები
სხვადასხვა სახის ფისები
სხვადასხვა სახის ფისები
სხვადასხვა სახის ფისები

ამ მხრივ, მე გამოვიყენე 3 სახის გამჭვირვალე/ფერადი ფისები ამ პროექტისათვის.

პირველი იყო ჰობის ბაზრის ტიპი სახელწოდებით Pebeo - Gedeo და ჩვეულებრივ იყიდება მცირე ზომის ნივთების დასაფარავად და გამოიყენება სამკაულებისა და სამაგიდო ქაღალდის ნაწარმისთვის და ა.შ. ეს საკმაოდ კარგად მუშაობდა და მშვენივრად კურნავდა დაახლოებით 24-36 საათში. ეს საკმაოდ ძვირია იმ თანხისთვის, რომელსაც მიიღებთ, მაგრამ მოსახერხებელია და ადვილად ხელმისაწვდომია ჰობის და ხელნაკეთობების მაღაზიებში. ის შერეულია 2: 1 თანაფარდობით. მეორე იყო წინასწარ შეღებილი ფისი, რომელიც შერეულია გამკაცრებელთან 10: 1 თანაფარდობით და ამას ყველაზე დიდი დრო დასჭირდა განკურნება, გულახდილად გითხრათ ერთი კვირა, სანამ ის სრულად განიკურნებოდა. ბოლო იყო გამჭვირვალე ფისი, რომელიც ასევე შერეული იყო 2: 1 თანაფარდობით და განიკურნა დაახლოებით 2 დღეში, თქვენ შეგიძლიათ შეღებოთ იგი პიგმენტის წვეთებით, მაგრამ თქვენ უნდა დარწმუნდეთ, რომ ყოველთვის იყენებთ იმავე ფერის თანაფარდობას, თუ აკეთებენ ცალკეულ პარტიებს. ის ასევე მუშაობს ყველაზე ეკონომიურად. დაბოლოს, RTV ობისთვის იყო GP-3481 RTV და ამის დაყენებას დაახლოებით 24 საათი სჭირდება და საკმაოდ დიდი დრო აქვს ქოთანში, ასე რომ თქვენ გაქვთ ბევრი დრო მისი შერევისთვის და შემდეგ დაასხით.

ამჟამად მე არ მაქვს საცურაო ქოთანი (ამჟამად შეკვეთით), ასე რომ თქვენ შეგიძლიათ იყოთ ბუშტუკებით ყალიბში და ფისაში ასხამენ. ეს არ არის ძალიან მნიშვნელოვანი, მაგრამ გამჭვირვალე ლინზით ან მსგავსით, თქვენ გინდათ როგორმე იფიქროთ იმაზე, თუ როგორ ამოიღოთ ბუშტები ნარევიდან.

ნაბიჯი 4: ლინზის ჩამოსხმა სილიკონის ფორმაში #2

Image
Image
ლითონის ჩამოსხმა სილიკონის ფორმაში #2
ლითონის ჩამოსხმა სილიკონის ფორმაში #2
ლითონის ჩამოსხმა სილიკონის ფორმაში #2
ლითონის ჩამოსხმა სილიკონის ფორმაში #2

ასე რომ, ეს არის მეორე მცდელობა ფისოვანი ობიექტივის დამზადებისათვის და პირველი ეტაპი იყო როგორც ობიექტივის დამზადება Fusion 360 -ში და შემდეგ მისი დაბეჭდვა ABS– ით, ასევე ვედრო მის შესანახად. ეს იქნება პირველი ყალიბისთვის და ხელს უწყობს სილიკონის რაოდენობის შემცირებას. თქვენ შეგიძლიათ მარტივად გააკეთოთ ეს ბარათიდან, მაგრამ ეს უბრალოდ განსხვავებული მიდგომაა. ლოგინიდან გათავისუფლების უკეთესი შანსისათვის, მე მას ჯერ ლაქი გავუკეთე და შემდეგ ცვილის გამოშვების აგენტის კარგი საფარი მივეცი.

მე მაშინვე ჩამოვასხი GP-3481, რომელიც ნაპირზეა 27 RTV და შემდეგ დავუშვი, რომ ჩამოშორდეს მომდევნო 24 სთ-ში. ამის დასრულების შემდეგ მე გამოვიყენე გამჭვირვალე ფისი შერეული 2: 1 თანაფარდობით, ფერის პიგმენტის დაახლოებით 4/5 წვეთი და კარგად ავურიე ოთხი წუთის განმავლობაში. ჩაასხით იგი ყალიბში და შემდეგ მოათავსეთ გასროლილი ჭიქა ფისში, რათა მოგვიანებით გამოჩნდეს სიცარიელე ნათურისთვის ან LED- ებისთვის. დაახლოებით 24 საათის შემდეგ ეს ფისი მზად იყო ამოსაღებად და ობიექტივი საკმაოდ კარგი გამოვიდა. აქ არის ჰაერის ბუშტები, მაგრამ ჯერჯერობით არ მაქვს ვაკუუმური ჭურჭელი, რომელიც ასხამს ფისას ჩამოსხმის წინ.

ნაბიჯი 5: 3D ბეჭდვა და მომზადება

3D ბეჭდვა და მომზადება
3D ბეჭდვა და მომზადება
3D ბეჭდვა და მომზადება
3D ბეჭდვა და მომზადება
3D ბეჭდვა და მომზადება
3D ბეჭდვა და მომზადება

მოდელი შეიქმნა ისე, რომ ცენტრალური განყოფილება ჩაერთოს ბაზაში. ეს შეღებვის პროცესში ნიღბის თავიდან აცილების მიზნით მოხდა. მთელი მოდელი დაბეჭდილია ჰეჩბოქსის ABS- ში და შემდეგ ქვიშაშია. 60 გრიტით დაწყებული დაახლოებით 800 გრიტმა მისცა საკმაოდ კარგი ზედაპირის ამ მოდელის დასრულება.

ნაბიჯი 6: შეკრება და შეღებვა

შეკრება და ფერწერა
შეკრება და ფერწერა
შეკრება და ფერწერა
შეკრება და ფერწერა
შეკრება და ფერწერა
შეკრება და ფერწერა

მას შემდეგ, რაც ანაბეჭდები დაფარულია, იგი შეღებილია მაღალი აგებულების პრაიმერით. მსუბუქად ქვიშა და შემდეგ შესხურება ნაცრისფერ პრაიმერში. ძირითადი ნაწილები შეღებილია ფორდის სიგნალში ყვითლად, შემდეგ კი მწვანე ბუდეები გამოიყენება ბაზისთვის. ტამიას ვერცხლის მაჩვენებლები შემდეგ იქნა გამოყენებული ჭანჭიკებზე და ზოგიერთი მოლოტოვური ვერცხლის ქრომი გამოყენებული იყო ლინზების დამჭერზე.

ნაბიჯი 7: ჯერ იპოვეთ თვითმფრინავები შემოსაზღვრულ არეალში

ტექნიკის დალაგებით, პროგრამულ უზრუნველყოფაზე მუშაობა იყო საჭირო. ამჟამად არის რამოდენიმე საიტი, რომლებიც უზრუნველყოფენ ფრენის თვალთვალს, მაგრამ არა ბევრი, რომელიც უზრუნველყოფს API- ს ამ მონაცემებზე წვდომისათვის. ზოგი ამას აკეთებს, მხოლოდ კომერციულ საფუძველზე, მაგრამ საბედნიეროდ არის ერთი საიტი სახელწოდებით https://opensky-network.org, რომელიც შეგიძლიათ უფასოდ გამოიყენოთ.

ამ მონაცემებზე წვდომისათვის თქვენ უნდა დარეგისტრირდეთ და შემდეგ შეგიძლიათ გამოიყენოთ მათი API, ის იძლევა რამდენიმე ფუნქციას და მონაცემების ამოღების გზებს. ჩვენ დაინტერესებული ვართ ყველა ფრენით რომელიმე რეგიონში და მათ აქვთ პირდაპირი API ზარი ამისათვის. https://opensky-network.org/apidoc/ ეწოდება შეზღუდვის ყუთი. API ზარი მოითხოვს ყუთის კუთხეებს, რომლითაც თქვენ დაინტერესებული ხართ, რა თქმა უნდა, ჩვენი ლატ/ლონ, როგორც ცენტრალური წერტილი. თქვენ შეგიძლიათ შეამოწმოთ მათემატიკური სამუშაოები ამ საიტზე, რომელიც დახაზავს ყუთს იმისდა მიხედვით, თუ რას აკრიფებთ. Http://tools.geofabrik.de

ფუნქცია 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); $ რადიუსი = 6371; $ პარალელური_რადიუსი = $ რადიუსი*cos ($ ლათ); $ lat_min = $ lat - $ ნახევარი_კმ/$ რადიუსი; $ lat_max = $ lat + $ ნახევარი_კმ/$ რადიუსი; $ lon_min = $ lon - $ half_side_inmkm/$ parallel_radius; $ lon_max = $ lon + $ half_side_inmkm/$ 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); დაბრუნების მასივი ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max);

თუ გსურთ შეამოწმოთ თქვენი კოდი, არის საიტი, სადაც შეგიძლიათ შეიყვანოთ lat/lon და ნახოთ შედეგები რუკაზე: იხილეთ შეზღუდვის ყუთის მაგალითი რუკაზე

ნაბიჯი 8: ჩვენთან მიმართებაში თვითმფრინავების სათაურის გამოთვლა

ჩვენთან დაკავშირებით თვითმფრინავების სათაურის გამოთვლა
ჩვენთან დაკავშირებით თვითმფრინავების სათაურის გამოთვლა

შემოსაზღვრული ყუთის API ზარის შედეგები გვაძლევს თვითმფრინავების ჩამონათვალს, მათ ლონ/ლატ, სიჩქარეს, სიმაღლეს და მიმართულებას. შემდეგი, რაც უნდა გავაკეთოთ არის მივიღოთ თითოეული თვითმფრინავის სათაური ჩვენთან მიმართებაში, რათა შემდგომში შევძლოთ მათი დამუშავება, რომლებიც სულ მცირე ჩვენი ზოგადი მიმართულებით მიემართებიან. ჩვენ შეგვიძლია ამის გაკეთება, რადგან ჩვენ ვიცით ჩვენი პოზიცია და შეგვიძლია განვსაზღვროთ კუთხე ჩვენგან თითოეულ სიბრტყემდე.

ამისათვის მე ვიყენებ კოდის ნაწილს, საიდანაც თავდაპირველად იყო Javascript– ში, ასე რომ მე აქ გადავიყვანე PHP– ზე, * გამოთვალეთ (საწყისი) ორ წერტილს შორის * * საწყისიდან: ედ უილიამსის საავიაციო ფორმულა, https://williams.best.vwh.net/avform.htm#Crs * წყარო = instantglobe.com/CRANES/GeoCoordTool.html */ ფუნქცია 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 = ცოდვა ($ dLon) * cos ($ lat2);

$ x = cos ($ lat1)*ცოდვა ($ lat2) - ცოდვა ($ lat1)*cos ($ lat2)*cos ($ dLon); $ z = atan2 ($ y, $ x); $ zz = (rad2deg ($ z) +360)% 360; $ zz დაბრუნება;

თუ გსურთ გადახედოთ გვერდს, სადაც არის ორიგინალური javascript ვერსიები, ეს არის ბმული:

ამ კოდის შიგნით, თქვენ ასევე შეგიძლიათ ნახოთ სხვადასხვა ქვეგანყოფილება თითოეული ტიპის გაანგარიშებისთვის.

ნაბიჯი 9: ჩაჭრის გაანგარიშება წრის დათვალიერებით

ჩაჭრის გამოთვლა წრის დათვალიერებით
ჩაჭრის გამოთვლა წრის დათვალიერებით

ამრიგად, ჩვენ ახლა გვაქვს თვითმფრინავი, სადაც მას და ჩვენს ადგილსამყოფელს შორის 90 -ზე ნაკლებია (დადებითი ან უარყოფითი) და ეს ნიშნავს, რომ არსებობს შანსი, რომ მან ახლომდებარე ფრენა შეძლოს. ჰავერსინის ფორმულის გამოყენებით ჩვენ ასევე შეგვიძლია ვიმუშაოთ თვითმფრინავის ლონ/ლატის და ჩვენი სახლის ლონ/ლატის მანძილზე, რაც ის ჩვენგან შორსაა.

დიაგრამის დათვალიერებისას, თუ ჩვენ ვხატავთ წრეს ჩვენი სახლის გარშემო, ვთქვათ დაახლოებით 3 მილის რადიუსზე, ეს გვაძლევს იმის შანსს, რომ დავინახოთ რაიმე, რაც თავზე დაფრინავს. ჩვენ ვიცით განსხვავება თვითმფრინავსა და ჩვენ შორის, ჩვენ ასევე ვიცით თვითმფრინავის მანძილი ჩვენგან, ასე რომ ჩვენ შეგვიძლია სამკუთხედის შემუშავება ძველი კარგი SOHCAHTOA– ს გამოყენებით და ამ შემთხვევაში კუთხის ტანის გამოყენებით ჩვენ შეგვიძლია მივიღოთ საპირისპირო მხარის სიგრძე. ასე რომ, თუ ჩვენ შევადარებთ ამ მნიშვნელობას სახლის გარშემო წრის რადიუსის მნიშვნელობასთან, მაშინ შეგვიძლია გავარკვიოთ, გაფრინდება თუ არა თვითმფრინავი იმდენად ახლოს, რომ ჩვენ დავინახოთ იგი. შემდეგი, რისი გაკეთებაც ჩვენ შეგვიძლია გავაკეთოთ არის დროის გამოთვლა, როდესაც თვითმფრინავი გაფრინდება ჰაერის სიჩქარისა და მანძილის გამოყენებით და თუ ეს ნაკლებია ვიდრე დაახლოებით 45 წამი ჩვენ ვანთებთ შუქს. ეს არის ცოტაოდენი კოდი, რომელსაც მე ვიყენებ იმისთვის, რომ განვსაზღვრო ფრენის შანსი. მე ამას ვაკეთებ, რადგან არის ახლომდებარე აეროპორტი და როდესაც თვითმფრინავები ტაქსით მოძრაობენ, ისინი აუცილებლად მიანიშნებენ სახლზე. თუმცა, რადგან მათი სიმაღლე ნულის ტოლია და სიჩქარე მიდის სიჩქარით, ეს არ უნდა გამოიწვიოს მაღვიძარა.

ფუნქცია 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 = რუჯი ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ plane_distance;

if (($ flight_angle <90) && ($ flight_intercept <3)) {// შესაძლებელია ფრენის გავლა

}

დაბრუნება $ flight_intercept;

}

ნაბიჯი 10: მანძილი რუქაზე ორ წერტილს შორის - ჰავერსინის ფორმულა

მანძილი რუქაზე ორ წერტილს შორის - ჰავერსინის ფორმულა
მანძილი რუქაზე ორ წერტილს შორის - ჰავერსინის ფორმულა

ასე რომ, ჩვენ უნდა გამოვთვალოთ მანძილი თვითმფრინავსა და ჩვენს მდებარეობას შორის. მოკლე დისტანციებზე რუქაზე შეგიძლიათ დაახლოებით გამოთვალოთ მანძილი, მაგრამ რადგან დედამიწა სფერულია, არსებობს ფორმულა სახელწოდებით ჰავერსინის ფორმულა, რომელიც საშუალებას გაძლევთ გაითვალისწინოთ მრუდი ზედაპირი. შეგიძლიათ წაიკითხოთ ფორმულაში:

ახლა გამოთვლილი მანძილით და ჩვენ ვიცით თვითმფრინავის საჰაერო სიჩქარე, ჩვენ შეგვიძლია გამოვთვალოთ რამდენი წამი იქნება თვითმფრინავის გადაფრენამდე. ასე რომ, შუქი აინთება, თუკი არის რაღაც გაფრენიდან 30 წამში და ჩვენ საბოლოოდ გვაქვს ჩვენი გამაფრთხილებელი შუქი.

* დაფუძნებულია 0n JS- ზე instantglobe.com/CRANES/GeoCoordTool.html და გადაიქცა PHP */

ფუნქცია get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // დედამიწის საშუალო რადიუსი კმ $ dLat = deg2rad ($ plane_lat- $ home_lat); $ dLon = deg2rad ($ plane_lon- $ home_lon); $ lat1 = deg2rad ($ home_lat); $ lat2 = deg2rad ($ plane_lat);

$ a = ცოდვა ($ dLat/2) * ცოდვა ($ dLat/2) + cos ($ lat1) * cos ($ lat2) * ცოდვა ($ dLon/2) * ცოდვა ($ dLon/2);

$ c = 2 * atan2 (sqrt ($ a), sqrt (1- $ a)); $ d = $ R * $ c; $ d დაბრუნება; }

ნაბიჯი 11: თვითმფრინავების მონაცემთა ბაზის იმპორტი და განსაზღვრა

ერთ -ერთი სხვა ნაწილია ის, რომ openky საიტი გთავაზობთ თვითმფრინავების მონაცემთა ბაზას, მათთან ერთად დარეკვის ნიშნებსა და ident– ებს. მისი რამდენიმე ასეული ათასი ჩანაწერი. ჩვენ შეგვიძლია გადმოვწეროთ და ჩავტვირთოთ ადგილობრივად MariaDB მონაცემთა ბაზაში საძიებლად (MySQL). ყოველი თვითმფრინავი, რომელიც თავზე ჩანს, ჩვენ ვიღებთ მის დეტალებს და ვაახლებთ მრიცხველს, რათა ვაჩვენოთ რამდენჯერ არის ნანახი.

მე ასევე ვარედაქტირებ მონაცემთა ბაზას იმ თვითმფრინავების ხაზგასასმელად, რომლებიც მაინტერესებს. ძირითადად ძველი საბრძოლო ფრინველები და სხვა მსგავსი საინტერესო თვითმფრინავები. ამ ზაფხულს რამდენჯერმე გადაფრინდა მიგ -15. ასე რომ, მიზანია გამოვიყენო გამაფრთხილებელი ველი, რომელიც მე დავამატე და შემდეგ სწრაფად აანთო შუქი, როდესაც რაიმე საინტერესო მიდის წინ

ნაბიჯი 12: შედეგების გაუმჯობესება და ახალი მახასიათებლები

შედეგების გაუმჯობესება და ახალი მახასიათებლები
შედეგების გაუმჯობესება და ახალი მახასიათებლები
შედეგების გაუმჯობესება და ახალი მახასიათებლები
შედეგების გაუმჯობესება და ახალი მახასიათებლები
შედეგების გაუმჯობესება და ახალი მახასიათებლები
შედეგების გაუმჯობესება და ახალი მახასიათებლები

ასე რომ, თეორიულად ყველაფერი საკმაოდ კარგად მუშაობს, მაგრამ მონაცემებით ნახავთ, რომ არის თვითმფრინავები, რომლებიც დაფრინავენ თავზე და არ ჩანს API– ში.

ეს იმიტომ ხდება, რომ ყველა თვითმფრინავი არ იყენებს ADS-B გადამცემს და იყენებს ძველ ტრანსპონდერებს MLAT- ის საფუძველზე. MLAT– ის გამოყენებით თვითმფრინავების პოზიციის მონაცემების მოსაპოვებლად საჭიროა ადგილზე მიმღებთა რიგი, რათა მოახდინონ თავიანთი პოზიციის სამკუთხედი და ზოგიერთ საიტს, როგორიცაა flightradar24, აქვთ კონტრიბუტორების უფრო დიდი ქსელი, ვიდრე openky. ვიმედოვნებთ, რომ დროთა განმავლობაში მათი დაფარვაც გაუმჯობესდება და მე ვქმნი საკუთარ MLAT მიმღებს, რომ დავამატო ეს მონაცემები.

ნაბიჯი 13: კოდის ბაზა

ნუ დაგავიწყდებათ, თუ აპირებთ ამის გამოყენებას, შეიძლება დაგჭირდეთ SQL განცხადებების წაშლა, თუ არ გაქვთ თვითმფრინავების მონაცემთა ბაზა და ასევე დაამატეთ თქვენი საკუთარი Lon/Lat მნიშვნელობა და API გასაღები ფრენის მონაცემებზე წვდომისათვის.

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

განსაზღვრა ("INTERVAL", (20 * 1)); ფუნქცია fexp () {$ lat = "თქვენი გრძედი"; $ lon = "თქვენი გრძედი"; $ მხარე = 15.75; $ box = get_bounding_box ($ lat, $ lon, $ side); $ latmin = $ ყუთი [0]; $ lonmin = $ ყუთი [1]; $ ლატმაქსი = $ ყუთი [2]; $ lonmax = $ ყუთი [3]; $ flyurl = "https://opensky-network.org/api/states/all?lamin=$latmin&lomin=$lonmin&lamax=$latmax&lomax=$lonmax"; ექო "სკანირების SKY"; $ start_time = მიკროტაიმი (ჭეშმარიტი); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, TRUE); $ შემომავალი = FALSE; $ num_planes = რაოდენობა ($ data ['შტატები']); if ($ num_planes> 0) {echo "და ჩვენ შეგვიძლია ვნახოთ $ num_planes თვითმფრინავები / n"; ($ x = 0; $ x 0) {$ plane_eta = $ distplane/$ air_speed_kmh; } სხვა {$ eta = 1; } if ((($ intercept) 0)) && ($ distplane0) {$ შემოსული = TRUE; ექო "---------------------------------------------------- -------------------- / n "; ექო "$ icao24 - [$ country $ callignign] at [$ geo_altitude_m M - $ geo_altitude_f ft]"; ექო "[სიჩქარე $ air_speed_kmh კმ და", მრგვალი ($ დისპლანი, 1), "კმ მოშორებით] n"; ექო "[სათაურზე", მრგვალი ($ plane_heading, 1), "] [homeangle $ heading_d]"; ექო "[$ გრძედი, $ გრძედი] n"; ექო "[flypast in", decimal_to_time ($ plane_eta), "now", round ($ intercept, 1), "km km / n"; ექო "---------------------------------------------------- -------------------- / n "; $ DBi = new mysqli ("127.0.0.1", "root", "თქვენი პაროლი", "awacs"); $ sql = "აირჩიეთ * თვითმფრინავის მონაცემთა ბაზიდან, სადაც` icao24` = '$ icao24' "; mysqli_set_charset ($ DBi, "utf8"); $ getplanedata = mysqli_query ($ DBi, $ sql) ან die (mysqli_error ($ DBi)); $ row_getplanedata = mysqli_fetch_assoc ($ getplanedata); $ rows_getplanedata = mysqli_num_rows ($ getplanedata); if ($ rows_getplanedata> 0) {do {echo "callign ="; ექო $ row_getplanedata ['რეგისტრაცია']; ექო "არის ა"; ექო $ row_getplanedata ['მწარმოებლის სახელი']; ექო ""; ექო $ row_getplanedata ['მოდელი']; ექო "by"; ექო $ row_getplanedata ['Manufactricao']; ექო "საკუთრებაშია"; ექო $ row_getplanedata ['მფლობელი']; ექო "ჩანს"; ექო $ row_getplanedata ['ვიზიტები']; ექო "დრო"; ექო "სპეციალური რეიტინგი ="; ექო $ row_getplanedata ['სპეციალური']; ექო "\ n"; $ visit = $ row_getplanedata ['ვიზიტები']+1; } while ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "განაახლეთ თვითმფრინავების მონაცემთა ბაზა SET ვიზიტები = $ ვიზიტები WHERE icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) ან die (mysqli_error ($ DBi)); } else {echo "ვერ ვიპოვე ეს თვითმფრინავი DB- ში ასე რომ დაემატა"; $ sqli = "ჩასვით თვითმფრინავების მონაცემთა ბაზაში (icao24, ვიზიტები, სპეციალური) ღირებულებები ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) ან die (mysqli_error ($ DBi)); } ექო "--------------------------------------------------- --------------------- / n "; } else {// ექო "$ callignign"; }}} სხვა {ექო "და ცა ნათელია / n"; } if ($ შემომავალი) {echo "შემომავალი სიბრტყე / n"; $ command = "ღორები w 17 1"; execInBackground ($ ბრძანება); } else {echo "შემომავალი ფრენები არ არის / n"; $ command = "ღორები w 17 0"; execInBackground ($ ბრძანება); }} ფუნქცია decimal_to_time ($ ათობითი) {$ ოფსეტური = 0.002778; if ($ ათობითი> $ ოფსეტური) {$ ათობითი = $ ათობითი - 0.002778; } $ საათი = gmdate ('H', სართული ($ ათობითი * 3600)); $ წუთი = gmdate ('i', იატაკი ($ ათობითი * 3600)); $ წამი = gmdate ('s', სართული ($ ათობითი * 3600)); დაბრუნების str_pad ($ საათი, 2, "0", STR_PAD_LEFT). ":". str_pad ($ წუთი, 2, "0", STR_PAD_LEFT). ":". str_pad ($ წამი, 2, "0", STR_PAD_LEFT); }/ * * გამოთვალეთ (საწყისი) ორ წერტილს შორის * * შემდეგიდან: ედ უილიამსის საავიაციო ფორმულა, https://williams.best.vwh.net/avform.htm#Crs * წყარო = instantglobe.com/CRANES/GeoCoordTool. html */ ფუნქცია 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 = ცოდვა ($ dLon) * cos ($ lat2); $ x = cos ($ lat1)*ცოდვა ($ lat2) - ცოდვა ($ lat1)*cos ($ lat2)*cos ($ dLon); $ z = atan2 ($ y, $ x); $ zz = (rad2deg ($ z) +360)% 360; $ zz დაბრუნება; } ფუნქცია 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 = რუჯი ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ plane_distance; დაბრუნება $ flight_intercept; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *// * * გამოიყენეთ ჰავერსინის ფორმულა, რომ გამოთვალოთ მანძილი (კმ) ორ წერტილს შორის * განედის/გრძედის (რიცხვითი ხარისხით) * *: ჰავერსინის ფორმულა - RWსინოტი, "ჰავერსინის სათნოება", * ცა და ტელესკოპი, ტომი 68, 2 2, 1984 * https://williams.best.vwh.net/avform.htm#Crs * * გამოყენების მაგალითი ფორმიდან: * შედეგი = LatLon.distHaversine (lat1.value.parseDeg (), long1.value.parseDeg (), * lat2.value.parseDeg (), long2.value.parseDeg ()); * სადაც lat1, long1, lat2, long2 და შედეგი არის ფორმის ველები * წყარო = instantglobe.com/CRANES/GeoCoordTool.html */ფუნქცია get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // დედამიწის საშუალო რადიუსი კმ $ dLat = deg2rad ($ plane_lat- $ home_lat); $ dLon = deg2rad ($ plane_lon- $ home_lon); $ lat1 = deg2rad ($ home_lat); $ lat2 = deg2rad ($ plane_lat); $ a = ცოდვა ($ dLat/2) * ცოდვა ($ dLat/2) + cos ($ lat1) * cos ($ lat2) * ცოდვა ($ dLon/2) * ცოდვა ($ dLon/2); $ c = 2 * atan2 (sqrt ($ a), sqrt (1- $ a)); $ d = $ R * $ c; $ d დაბრუნება; } ფუნქცია 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); $ რადიუსი = 6371; # პარალელის რადიუსი მოცემულ განედებზე; $ პარალელური_რადიუსი = $ რადიუსი*cos ($ ლათ); $ lat_min = $ lat - $ ნახევარი_კმ/$ რადიუსი; $ lat_max = $ lat + $ ნახევარი_კმ/$ რადიუსი; $ lon_min = $ lon - $ half_side_inmkm/$ parallel_radius; $ lon_max = $ lon + $ half_side_inmkm/$ 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); დაბრუნების მასივი ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max); } ფუნქცია execInBackground ($ cmd) {if (substr (php_uname (), 0, 7) == "Windows") {pclose (popen ("დაწყება /B". $ cmd, "r")); } else {exec ($ cmd. "> /dev /null &"); }} ფუნქცია checkForStopFlag () {// სრულიად არჩევითი დაბრუნება (TRUE); } ფუნქციის დაწყება () {ექო "დაწყება / n"; $ command = "ღორები w 17 1"; execInBackground ($ ბრძანება); $ აქტიური = TRUE; ხოლო ($ აქტიური) {usleep (1000); // სურვილისამებრ, თუ გსურთ გაითვალისწინოთ, თუ (microtime (true)> = $ nextTime) {fexp (); $ nextTime = მიკროტაიმი (ჭეშმარიტი) + ინტერვალი; } $ აქტიური = checkForStopFlag (); }} fexp (); დაწყება (); ?>>

ნაბიჯი 14: LED- ის გაყვანილობა და გამორთვის შეცვლა

LED- ის გაყვანილობა და გამორთვის შეცვლა
LED- ის გაყვანილობა და გამორთვის შეცვლა

ამ პროექტის გაყვანილობა ნამდვილად არ შეიძლება იყოს უფრო მარტივი. არის მხოლოდ ერთი LED, რომელიც დაკავშირებულია პინ 17 -თან და მიწასთან 270R რეზისტორის ჩამონტაჟებით.

მე ასევე ჩავრთავ გამორთვისა და ჩართვის ღილაკს, ასევე დენის LED- ს, რომელიც გადის TXd მონაცემთა პინზე. შეგიძლიათ მეტი წაიკითხოთ გამორთვის ფუნქციისა და კოდის შესახებ, რომელიც საჭიროა https://github.com/Howchoo/pi-power-button.git საიტიდან https://howchoo.com/g/mwnlytk3zmm/how-to- დამატება

გირჩევთ: