תוכן עניינים:

אזהרה מוקדמת פסל PI פטל באמצעות מסלולי מיפוי טיסה: 14 שלבים (עם תמונות)
אזהרה מוקדמת פסל PI פטל באמצעות מסלולי מיפוי טיסה: 14 שלבים (עם תמונות)

וִידֵאוֹ: אזהרה מוקדמת פסל PI פטל באמצעות מסלולי מיפוי טיסה: 14 שלבים (עם תמונות)

וִידֵאוֹ: אזהרה מוקדמת פסל PI פטל באמצעות מסלולי מיפוי טיסה: 14 שלבים (עם תמונות)
וִידֵאוֹ: TAKEN ONBOARD A UFO: Five True Cases 2024, יולי
Anonim
אזהרה מוקדמת פטל PI פטל באמצעות מסלולי מיפוי טיסות
אזהרה מוקדמת פטל PI פטל באמצעות מסלולי מיפוי טיסות
אזהרה מוקדמת פטל PI פטל באמצעות מסלולי מיפוי טיסות
אזהרה מוקדמת פטל PI פטל באמצעות מסלולי מיפוי טיסות
אזהרה מוקדמת פטל PI פטל באמצעות מסלולי מיפוי טיסות
אזהרה מוקדמת פטל PI פטל באמצעות מסלולי מיפוי טיסות
אזהרה מוקדמת פסל PI פטל באמצעות מסלולי מיפוי טיסות
אזהרה מוקדמת פסל PI פטל באמצעות מסלולי מיפוי טיסות

מנורה זו נבעה מכמה סיבות בכך שאני תמיד מתעניין במטוסים שטסים מעל ובמהלך הקיץ בסופי שבוע לעתים קרובות יש כמה די מרגשים שטסים מסביב. למרות שאתה נוטה לשמוע אותם רק כשהם עוברים. ואז הסיבה השנייה היא שנראה כי נתיב הטיסה של מטוסים יוצאים משדה התעופה בלונדון סיטי יישמע לפעמים ויש להם טיסות די רועשות. להיות כמו שאני מתעסק בהקלטת כמה סרטונים ליוטיוב זה ממש מעצבן שצריך לגרוט הקלטה בגלל מטוס רועש. אז תהיתי אם הנתונים שאתה רואה באתרים כמו flightradar24 זמינים לציבור, ברגע שגיליתי שמשהו דומה זמין ברשת opensky נורת האזהרה המוקדמת נולדה. לא לקח יותר מדי זמן ואז העלה את הרעיון להשתמש בהעתק של מנורת מסלול כדי לשכן את הפרויקט.

תוכל ללמוד עוד על רשת OpenSky בכתובת https://www.opensky-network.org רציתי גם שהפעם תעשה עדשת שרף נחמדה במקום להשתמש ב- PLA שקוף ולמרות שיש לי מקלט ADS-B שרציתי לשמור זה פשוט וזול. ה- ADS-B צריך גם אנטנה וזה לא יעזור למנורה שתעלה על המדף במשרד. אז אני מקווה שתמצא את המבנה מעניין מכיוון שהוא מכסה הדפסה תלת -ממדית, דפוס שרף ומתמטיקה וכן להעריך את מיקומם של מטוסים שעלולים לעבור תקורה.

שלב 1: עיצוב המארז

החיפוש של גוגל מציע עיצובים רבים ושונים של מנורת מסלול והעיצוב של זה נוצר תוך שימוש בהשפעות עיצוביות של יצרנים רבים ושונים של מנורות אמיתיות. זה גם משתנה לשבת בחדר או על מדף ולא בגודל מלא, מכיוון שהם נוטים להיות הרבה יותר גדולים במציאות.

עיצובים גובשו ב- Fusion 360 וייבאתי כמה אלמנטים קודמים כגון מחזיק פי אפל פטל מפרויקטים קודמים. היכולת להשתמש מחדש באלמנטים לוקחת הרבה מכאב הראש מהורדת היסודות. תוכל גם להוריד את הקבצים כאן

שלב 2: יציקת העדשות - #fail

הטלת העדשות - #fail
הטלת העדשות - #fail
הטלת העדשות - #fail
הטלת העדשות - #fail
הטלת העדשות - #fail
הטלת העדשות - #fail

המרכיב העיצובי החשוב ביותר במנורה זו יהיה העדשה. אז התמודדתי עם זה תחילה, מבלי שבמראה זכוכית אותנטית יפה הפרויקט עומד לעבוד. אני מתעד כאן את הכישלונות שהיו לי בניסיון להשיג זאת, מבלי שהחלטתי גם בתחילה להפוך את העדשה לצהובה. אורות המסלול מגיעים בצבעי ענבר וכחול ורק לאחר שהתחלתי להפוך את הענבר, שיניתי את דעתי והחלטתי שאני רוצה כחול.

ממה שאני יכול להבין אלה משמשים את הענבר בקו ההחזקה והכחולים משמשים לקו המסלול, ואלה אלה שנראים כארכיטיפיים יותר שנמצאים אם אתה מחפש אורות מסלול. עם זאת, הנה הניסיון הראשון שלי ליצור עדשה ענבר. כדי לייצר את העדשה, עמדתי להשתמש בשרף ברור עם תוסף צבע, ולמרות שעשיתי כמה תבניות לפני שתהיתי אם אפשר יהיה להדפיס תבנית תלת מימד ולהשתמש בזה. אז התחלתי לייצר תבנית מפוצלת בתלת מימד ולהדפיס אותה ב- PetG. כמויות נבונות של שחרור עובש שוכנעתי שתספיק להפיח את התבנית. כפי שמתברר עם שני הניסיונות גרמתי שהשרף נדבק לתבנית כמו דבק ופשוט לא נראה שניתן להפריד ביניהם. למרות שהייתה לי את הסקאלה המלאה שאני הולכת להשתמש בה, החלטתי נגדה והדפסתי את העדשה לשימוש עם דפוס סיליקון מסורתי.

שלב 3: סוגים שונים של שרף

סוגים שונים של שרף
סוגים שונים של שרף
סוגים שונים של שרף
סוגים שונים של שרף
סוגים שונים של שרף
סוגים שונים של שרף
סוגים שונים של שרף
סוגים שונים של שרף

כצעד מהיר, השתמשתי ב -3 סוגים של שרפים שקופים/צבעוניים לפרויקט זה.

הראשון היה מסוג שוק תחביבים בשם Pebeo - Gedeo והוא נמכר בדרך כלל לאטום פריטים קטנים ומשמש לתכשיטים וניירות שולחן וכו '. זה עבד די טוב והתרפא יפה תוך כ- 24-36 שעות. עם זאת, זה די יקר עבור הסכום שאתה מקבל, אבל זה נוח וזמין בקלות בחנויות תחביב ומלאכה. הוא מעורב ביחס של 2: 1. השני היה שרף צבוע מראש אשר מעורבב ביחס של 10: 1 עם מקשה וזה לקח את הארוך ביותר לריפוי, כשבוע למען האמת לפני שהוא נרפא במלואו. האחרון היה שרף שקוף, שגם הוא מעורבב ביחס 2: 1 וזה נרפא תוך יומיים בערך, אתה יכול לצבוע אותו בטיפות פיגמנט, אך עליך לוודא שתמיד תשתמש באותו יחס צבע אם אתה מכינים קבוצות נפרדות. זה גם מסתדר הכי חסכוני. לבסוף ה- 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 טיפות של פיגמנט הצבע וערבבתי אותו היטב במשך ארבע דקות טובות. שפכו את זה לתוך התבנית ולאחר מכן הניחו זכוכית ירו לתוך השרף גם כדי לספק חלל מאוחר יותר עבור מנורה או של נוריות. לאחר כ 24 שעות שרף זה היה מוכן להסרה והעדשה יצאה די טוב. קיימות בועות אוויר, אך עדיין אין לי כלי ואקום להסיר את השרף לפני היריקה.

שלב 5: הדפסה והכנה תלת מימדית

הדפסה והכנה תלת מימדית
הדפסה והכנה תלת מימדית
הדפסה והכנה תלת מימדית
הדפסה והכנה תלת מימדית
הדפסה והכנה תלת מימדית
הדפסה והכנה תלת מימדית

הדגם תוכנן באופן שבו החלק המרכזי מתחבר לבסיס. זה היה כדי להימנע מסיכה במהלך תהליך הצביעה. הדגם כולו הודפס ב- Hatchbox ABS ולאחר מכן שיייף. החל מ- 60 חצץ עד כ -800 חצץ נתן גימור משטח מספיק טוב לדגם זה.

שלב 6: הרכבה וצביעה

הרכבה וצביעה
הרכבה וצביעה
הרכבה וצביעה
הרכבה וצביעה
הרכבה וצביעה
הרכבה וצביעה

לאחר שיוף ההדפסים, הוא נצבע אז בפריימר בעל מבנה גבוה. מלטשים קלות ואז מרוססים בפריימר אפור. החלקים העיקריים נצבעו בצהוב סימן פורד, ואז ירוק ברוקלנד שימש לבסיס. לאחר מכן הוחלו דגשים של כסף טאמיה על הברגים וכמה כרום כסף תילו בשימוש על מחזיק העדשה.

שלב 7: מצא תחילה מטוסים בתוך שטח מגביל

כשהחומרה ממוינת, צריך לעבוד על התוכנה. ישנם כמה אתרים המספקים מעקב אחר טיסות, אך לא רבים המספקים API לגישה לנתונים אלה. חלק שכן, רק עושים זאת על בסיס מסחרי אך למרבה המזל יש אתר אחד בשם https://opensky-network.org שתוכל להשתמש בו בחינם.

כדי לגשת לנתונים אלה עליך לרשום ולאחר מכן תוכל להשתמש ב- API שלהם, הוא מספק מספר פונקציות ודרכים למשוך את הנתונים. אנו מעוניינים בכל הטיסות בתוך אזור ויש להם קריאת Live API לכך. https://opensky-network.org/apidoc/ נקרא תיבת גבול. קריאת ה- API דורשת את פינות הקופסה שאתה מעוניין בהן, כמובן Lat/Lon שלנו כנקודת המרכז. אתה יכול לבדוק האם המתמטיקה פועלת באתר זה, המצייר תיבה בהתאם למה שאתה מקליד."

פונקציה 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); $ 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); מערך החזרה ($ box_lat_min, $ box_lon_min, $ box_lat_max, $ box_lon_max);

אם ברצונך לבדוק את הקוד שלך, יש אתר שבו תוכל להזין את lat/lon ולראות את התוצאות במפה: עיין בדוגמה של תיבה מגבילה במפה

שלב 8: חישוב כותרת המטוסים ביחס אלינו

חישוב כותרת המטוסים ביחס אלינו
חישוב כותרת המטוסים ביחס אלינו

התוצאות משיחת ה- API של התיבה הגובלת נותנות לנו רשימה של מטוסים, Lon/Lat שלהם, מהירות, גובה וכותרת. אז הדבר הבא שעלינו לעשות הוא להשיג את הכותרת של כל מישור ביחס אלינו, כך שנוכל להמשיך לעבד את אלה שלפחות הולכים לכיוון הכללי שלנו. אנו יכולים לעשות זאת כפי שאנו מכירים את עמדתנו ויכולים לחשב את הזווית מאיתנו לכל מטוס.

לשם כך אני משתמש בקטע קוד שממנו היה במקור ב- Javascript אז הפכתי אותו לכאן ל- PHP, * לחשב את הנושא (ההתחלתי) בין שתי נקודות * * מתוך: נוסחת תעופה של אד וויליאמס, https://williams.best.vwh.net/avform.htm#Crs * source = 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 = sin ($ dLon) * cos ($ lat2);

$ x = cos ($ lat1)*sin ($ lat2) - sin ($ lat1)*cos ($ lat2)*cos ($ dLon); $ z = atan2 ($ y, $ x); $ zz = (rad2deg ($ z) +360)% 360; החזר $ zz;

אם אתה רוצה להסתכל על הדף שבו נמצאות גרסאות javascript המקוריות, זהו הקישור:

בתוך קוד זה, תוכל גם לראות את שגרת המשנה השונות עבור כל סוג חישוב.

שלב 9: חישוב יירוט על ידי הסתכלות על מעגל

חישוב יירוט על ידי הסתכלות על מעגל
חישוב יירוט על ידי הסתכלות על מעגל

אז יש לנו כעת מטוס שבו הנושא בינו לבין המיקום שלנו הוא פחות מ -90 (חיובי או שלילי) ולכן זה אומר שיש סיכוי שהוא עלול לעוף ליד. באמצעות נוסחת ה- haversine נוכל גם להתאמן באמצעות Lon/Lat של המטוס ו- Lon/Lat של הבית שלנו המרחק שהוא רחוק מאיתנו.

בהסתכלות על התרשים, אם נצייר עיגול מסביב לביתנו של רדיוס של כ -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 = tan ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ plane_distance;

if (($ flight_angle <90) && ($ flight_intercept <3)) {// אפשר לטוס בעבר

}

החזר $ flight_intercept;

}

שלב 10: מרחק בין שתי נקודות במפה - נוסחת Haversine

מרחק בין שתי נקודות במפה - נוסחת Haversine
מרחק בין שתי נקודות במפה - נוסחת Haversine

אז עלינו לחשב את המרחק בין המטוס למיקום שלנו. על מרחקים קצרים במפה תוכל לחשב בערך את המרחק, אך מכיוון שכדור הארץ הוא כדורית, יש נוסחה הנקראת נוסחת האברסין המאפשרת לך להתחשב במשטח המעוקל. תוכל לקרוא עוד בנוסחה:

עכשיו כשהמרחק מחושב ואנו יודעים את מהירות האוויר של המטוס נוכל לחשב כמה שניות יעברו לפני שהמטוס יעלה. כך שהאור יידלק אם יש משהו תוך 30 שניות מרגע הטיסה ולבסוף יש לנו את נורית האזהרה שלנו.

* מבוסס 0n JS ב- instantglobe.com/CRANES/GeoCoordTool.html והפך ל- PHP */

פונקציה get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // רדיוס ממוצע של כדור הארץ ב- 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; החזר $ d; }

שלב 11: ייבוא והגדרת מסד הנתונים של המטוס

אחד החלקים הנוספים הוא כי אתר opensky מציע מאגר נתונים להורדה של מטוסים יחד עם שלטי השיחות והרעיונות שלהם. כמה מאות אלפי ערכים שלה. אז נוכל להוריד את זה ולטעון אותו באופן מקומי למסד נתונים של MariaDB לחיפוש (MySQL). עם כל מטוס שמופיע מעל, אנו מאחזרים את פרטיו ומעדכנים מונה כדי להראות כמה פעמים הוא נראה.

אני גם עורך כעת את מסד הנתונים כדי להדגיש מטוסים שאני מעוניין בהם. בעיקר עופות מלחמה ישנים ומטוסים מעניינים דומים אחרים. כמה פעמים הקיץ טס מיג -15. אז המטרה היא להשתמש בשדה התראה שהוספתי ולאחר מכן להבהב את האור במהירות כאשר משהו מעניין עובר

שלב 12: שיפור התוצאות והתכונות החדשות

שיפור התוצאות והתכונות החדשות
שיפור התוצאות והתכונות החדשות
שיפור התוצאות והתכונות החדשות
שיפור התוצאות והתכונות החדשות
שיפור התוצאות והתכונות החדשות
שיפור התוצאות והתכונות החדשות

אז בתיאוריה הכל עובד די טוב, אבל עם הנתונים תגלו שיש מטוסים שעפים מעל שלא מופיעים ב- API.

הסיבה לכך היא שלא כל המטוסים משתמשים בטרנספנדר ADS-B ומשתמשים בטרנספנדר ישן יותר המבוסס על MLAT. כדי להשיג נתוני מיקום על מטוסים באמצעות MLAT, נדרשת סדרת מקלטים בשטח כדי לשבש את מיקומם ולכמה אתרים כמו flightradar24 יש רשת תורמים גדולה יותר שעושה זאת בהשוואה לאופנסקי. אני מקווה שעם הזמן הכיסוי שלהם ישתפר גם אני ואקים מקלט 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 = $ 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"; הד "סריקת SKY"; $ start_time = microtime (true); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, TRUE); $ נכנס = FALSE; $ num_planes = count ($ data ['states']); if ($ num_planes> 0) {echo "ונוכל לראות $ num_planes מטוסים / n"; עבור ($ x = 0; $ x 0) {$ plane_eta = $ distplane/$ air_speed_kmh; } אחר {$ eta = 1; } if ((($ intercept) 0)) && ($ distplane0) {$ inbound = TRUE; הד "------------------------------------------------ -------------------- / n "; הד "$ icao24 - [$ country $ callign] ב- [$ geo_altitude_m M - $ geo_altitude_f ft]"; הד "[מהירות $ air_speed_kmh kmh ו-", עגול ($ מטוס, 1), "ק"מ משם] n"; הד "[בכותרת של", עגול ($ plane_heading, 1), "] [homeangle $ heading_d]"; הד "[$ קו הרוחב, $ אורך] n"; הד "[מהירות זרימה פנימה", decimal_to_time ($ plane_eta), "עכשיו", עגול ($ יירוט, 1), "ק"מ משם / n"; הד "------------------------------------------------ -------------------- / n "; $ DBi = 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); $ lines_getplanedata = mysqli_num_rows ($ getplanedata); if ($ lines_getplanedata> 0) {do {echo "callsign ="; הד $ row_getplanedata ['רישום']; הד "הוא a"; הד $ row_getplanedata ['שם משתמש']; הד ""; הד $ row_getplanedata ['מודל']; הד "על ידי"; הד $ row_getplanedata ['fabrikant']; הד "בבעלות"; הד $ row_getplanedata ['בעלים]; הד "נראה"; הד $ row_getplanedata ['ביקורים']; הד "פעמים"; הד "דירוג מיוחד ="; הד $ row_getplanedata ['מיוחד']; הד "\ n"; $ ביקורים = $ 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, ביקורים, מיוחדים) VALUES ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) או die (mysqli_error ($ DBi)); } הד "------------------------------------------------- --------------------- / n "; } אחר {// הד "אות קריאה"; }}} אחר {echo "והשמיים בהירים / n"; } if ($ נכנס) {echo "מטוס נכנס / n"; $ command = "חזירים w 17 1"; execInBackground (פקודה $); } אחר {הד "אין טיסות נכנסות / n"; $ command = "חזירים w 17 0"; execInBackground (פקודה $); }} פונקציה decimal_to_time ($ עשרוני) {$ offset = 0.002778; אם ($ עשרוני> $ קיזוז) {$ עשרוני = $ עשרוני - 0.002778; } $ hours = gmdate ('H', קומה ($ עשרוני * 3600)); $ דקות = gmdate ('i', רצפה ($ עשרוני * 3600)); $ שניות = gmdate ('s', floor ($ עשרוני * 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 * 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; החזר $ 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 = tan ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ plane_distance; החזר $ flight_intercept; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *// * * השתמש בנוסחת Haversine לחישוב המרחק (בק"מ) בין שתי נקודות שצוין על ידי * קו הרוחב/אורך (במעלות מספריות) * * מתוך: נוסחת Haversine - RWסינוט, "סגולות הרברז", * שמיים וטלסקופ, כרך 68, מס '2, 1984 * https://williams.best.vwh.net/avform.htm#Crs * * שימוש לדוגמא מטופס: * result.value = LatLon.distHaversine (lat1.value.parseDeg (), long1.value.parseDeg (), * lat2.value.parseDeg (), long2.value.parseDeg ()); * כאשר lat1, long1, lat2, long2 והתוצאה הם שדות טופס * source = instantglobe.com/CRANES/GeoCoordTool.html */function get_distHaversine ($ home_lat, $ home_lon, $ plane_lat, $ plane_lon) {$ R = 6371; // רדיוס ממוצע של כדור הארץ ב- 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; החזר $ 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); $ 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); מערך החזרה ($ 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 () {// החזרה אופציונלית לחלוטין (TRUE); } פונקציית התחלה () {הד "התחלה / n"; $ command = "חזירים w 17 1"; execInBackground (פקודה $); $ active = TRUE; while ($ active) {usleep (1000); // אופציונלי, אם אתה רוצה להתחשב אם (microtime (true)> = $ nextTime) {fexp (); $ nextTime = microtime (true) + INTERVAL; } $ active = checkForStopFlag (); }} fexp (); הַתחָלָה(); ?>

שלב 14: חיווט הנורית ומתג הכיבוי

חיווט הלד ומתג הכיבוי
חיווט הלד ומתג הכיבוי

חיווט הפרויקט הזה באמת לא יכול להיות פשוט יותר. יש רק ה- LED היחיד שמחובר לסיכה 17 ונטחן עם הנגד 270R מוטבע.

אני כולל גם כפתור כיבוי והפעלה יחד עם נורית הפעלה הפועלת מהסיכה של נתוני TXd. תוכל לקרוא עוד על פונקציית הכיבוי והקוד הנדרש בכתובת https://github.com/Howchoo/pi-power-button.git מהאתר https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow … תוכל לקרוא על הוספת נורת כוח כאן

מוּמלָץ: