Բովանդակություն:
- Քայլ 1: Գործի ձևավորում
- Քայլ 2: Ոսպնյակների ձուլում - #ձախողում
- Քայլ 3. Խեժի տարբեր տեսակներ
- Քայլ 4. Ոսպնյակի ձուլումը սիլիկոնե բորբոսում #2
- Քայլ 5. 3D տպագրություն և պատրաստում
- Քայլ 6: Հավաքում և ներկում
- Քայլ 7. Նախ գտեք ինքնաթիռներ սահմանափակ տարածության մեջ
- Քայլ 8. Ինքնաթիռների վերնագրի հաշվարկը մեզ հետ կապված
- Քայլ 9. Ընդհատման հաշվարկ ՝ շրջագծին նայելով
- Քայլ 10. Քարտեզի երկու կետերի միջև հեռավորությունը `Haversine բանաձև
- Քայլ 11. Ինքնաթիռի տվյալների շտեմարանի ներմուծում և սահմանում
- Քայլ 12. Արդյունքների բարելավում և նոր հնարավորություններ
- Քայլ 13: Codebase
- Քայլ 14: LED- ի և անջատման անջատիչի միացում
Video: Վաղ նախազգուշացում Ազնվամորու PI թռիչքուղու լույս ՝ օգտագործելով թռիչքի քարտեզագրման տվյալները. 14 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:47
Այս լամպը առաջացել է մի քանի պատճառներով, որովհետև ինձ միշտ հետաքրքրում են ինքնաթիռները, որոնք թռչում են վերևում, իսկ ամառվա ընթացքում հանգստյան օրերին հաճախ լինում են բավականին հուզիչ ինքնաթիռներ: Չնայած դուք հակված եք լսել դրանք միայն այն ժամանակ, երբ նրանք անցնում են: Հետո մյուս պատճառն այն է, որ, թվում է, Լոնդոնի Սիթիի օդանավակայանից արտագնա ինքնաթիռների թռիչքի ուղին երբեմն կլսվի, և նրանց սպասվում են բավականին աղմկոտ թռիչքներ: YouTube- ի համար որոշ տեսանյութեր ձայնագրելիս դժվարանում եմ ձայնագրությունը ջնջել ՝ աղմկոտ ինքնաթիռի պատճառով: Հետևաբար, ես հետաքրքրվեցի, թե արդյոք այն տվյալները, որոնք դուք տեսնում եք թռիչքի նման կայքերում, հասանելի են հանրությանը, երբ հայտնաբերեցի, որ բացօթյա ցանցից նմանատիպ ինչ -որ բան հասանելի է, վաղ նախազգուշացման լամպը ծնվեց: Շատ երկար չպահանջվեց, որպեսզի այնուհետև միտք ծագի ՝ նախագիծը տեղավորելու համար օգտագործել թռիչքուղու լուսարձակի կրկնօրինակը:
Դուք կարող եք ավելին իմանալ OpenSky ցանցի մասին https://www.opensky-network.org կայքում ՝ ես նաև ցանկանում էի, որ այս անգամ կիսաթափանցիկ PLA- ի փոխարեն գեղեցիկ խեժ ոսպնյակ պատրաստեմ, և չնայած ունեմ ADS-B ընդունիչ, որը ցանկանում էի պահել այս պարզ և էժան: ADS-B- ին նույնպես անհրաժեշտ է ալեհավաք, և դա չի կարող անել, որ լամպը գրասենյակում պահի: Հուսանք, որ կառուցվածքը հետաքրքիր կգտնեք, քանի որ այն ընդգրկում է 3D տպագրություն, խեժերի ձևավորում և մաթեմատիկա, ինչպես նաև ինքնաթիռների այն դիրքերը, որոնք հնարավոր է վերևից անցնեն:
Քայլ 1: Գործի ձևավորում
Google- ի որոնումը գալիս է թռիչքուղու լամպի շատ տարբեր դիզայններով, և այս դիզայնը կատարվել է իրական լամպերի տարբեր մակնիշների դիզայնի ազդեցության միջոցով: Նաև չափված է սենյակում կամ դարակում նստելը, այլ ոչ թե ամբողջ չափսերը, քանի որ դրանք իրական կյանքում շատ ավելի մեծ են:
Նախագծերը կազմվել են Fusion 360 -ում, և ես ներմուծել եմ որոշ նախկին տարրեր, օրինակ `ազնվամորու pi զրո կրողը նախորդ նախագծերից: Տարրերը նորից օգտագործելու ունակությունը շատ բան է պահանջում գլխացավից ՝ հիմքերը թուլացնելու համար: Ֆայլերը կարող եք ներբեռնել նաև այստեղ ՝
Քայլ 2: Ոսպնյակների ձուլում - #ձախողում
Այս լամպի նախագծման ամենակարևոր տարրը լիներ ոսպնյակը: Այսպիսով, ես առաջին հերթին անդրադարձա դրան, քանի որ առանց գեղեցիկ իսկական տեսք ունեցող ապակու նախագիծը կաշխատի: Ես այստեղ վավերագրում եմ այն ձախողումները, որոնք ես ունեի դրան հասնելու համար, չդիմանալով, որ ես նույնպես սկզբում որոշեցի ոսպնյակը սաթ անել: Թռիչքուղու լույսերը գալիս են ինչպես սաթ, այնպես էլ կապույտ գույնով, և միայն այն բանից հետո, երբ ես սկսեցի պատրաստել սաթը, ես փոխեցի միտքս և որոշեցի, որ ուզում եմ կապույտ:
Ինչքանով որ ես կարող եմ պարզել, սաթերը օգտագործվում են պահման գծում, իսկ կապույտները `թռիչքուղու վրա, և դրանք այնպիսիներն են, որոնք, թվում է, ավելի արխետիպային են, եթե թռիչքուղու լույսեր եք փնտրում: Այնուամենայնիվ, ահա սաթե ոսպնյակ պատրաստելու իմ առաջին փորձը: Ոսպնյակը պատրաստելու համար ես պատրաստվում էի օգտագործել թափանցիկ խեժ ՝ գունային հավելումով, և չնայած ես մի քանի կաղապար եմ արել մինչ այդ, երբ մտածում էի, արդյոք հնարավոր կլինի տպել 3D ձև և օգտագործել այն: Այսպիսով, ես սկսեցի եռաչափ բորբոս պատրաստել և տպել այն PetG- ում: Ես համոզված էի, որ բորբոսի արտանետման ողջամիտ քանակությունը բավարար կլինի բորբոսը քերծելու համար: Ինչպես պարզվեց, մի քանի անգամ ես խեժը սոսնձի պես կպցրեցի բորբոսին, և պարզապես հնարավոր չէր թվում դրանք առանձնացնել: Չնայած ես ունեի լիարժեք մասշտաբը, որը ես պատրաստվում էի օգտագործել, ես որոշեցի դեմ լինել այն և տպեցի ոսպնյակը, որն օգտագործվում էր ավանդական սիլիկոնային ձուլման համար:
Քայլ 3. Խեժի տարբեր տեսակներ
Այս նախագծի համար ես օգտագործեցի 3 տեսակի թափանցիկ/գունավոր խեժեր:
Առաջինը հոբբի շուկայի տեսակ էր, որը կոչվում էր Pebeo - Gedeo և սովորաբար վաճառվում է փոքր իրեր պարունակելու համար և օգտագործվում է ոսկերչական իրերի և գրասեղանի համար և այլն: Այնուամենայնիվ, այն բավականին թանկ է ձեր ստացած գումարի համար, բայց հարմար է և հեշտությամբ հասանելի է հոբբիի և արհեստների խանութներում: Այն խառնվում է 2: 1 հարաբերակցությամբ: Երկրորդը նախապես գունավոր խեժ էր, որը խառնվում է կարծրացուցիչի հետ 10: 1 հարաբերակցությամբ, և դրա բուժումը տևեց ամենաերկարը ՝ անկեղծ ասած, մոտ մեկ շաբաթ, մինչև այն ամբողջությամբ բուժվելը: Վերջինը պարզ խեժ էր, որը նույնպես խառնվել էր 2: 1 հարաբերակցության մեջ և բուժվել մոտ 2 օրվա ընթացքում: Դուք կարող եք այն ներկել պիգմենտի կաթիլներով, բայց դուք պետք է համոզվեք, որ միշտ օգտագործում եք նույն գույնի հարաբերակցությունը, եթե պատրաստում են առանձին խմբաքանակներ: Այն նաև աշխատում է առավել ծախսարդյունավետ: Վերջապես, կաղապարի համար RTV- ն GP-3481 RTV էր, և դրա պատրաստումը տևում է մոտ 24 ժամ և ունի բավականին երկար ժամանակ, այնպես որ դուք շատ ժամանակ ունեք այն խառնելու և լցնելու համար:
Ներկայումս ես չունեմ թափվող կաթսա (ներկայումս պատվիրված է), որպեսզի կարողանաք պղպջակների միջով լցվել և բորբոսում, և խեժը լցնելիս: Սա այնքան էլ խնդիր չէ, բայց պարզ ոսպնյակի կամ նմանատիպի դեպքում դուք կցանկանայիք ինչ -որ կերպ մտածել խառնուրդներից պղպջակները հանելու մասին:
Քայլ 4. Ոսպնյակի ձուլումը սիլիկոնե բորբոսում #2
Այսպիսով, սա Resin ոսպնյակ պատրաստելու երկրորդ փորձն է, և առաջին փուլը Fusion 360- ում ոսպնյակ պատրաստելն էր, այնուհետև այն ABS- ով տպելը, ինչպես նաև այն պահելը: Սա առաջինը կլինի բորբոսի համար և օգնում է նվազեցնել օգտագործվող սիլիկոնի քանակը: Դուք կարող եք դա հեշտությամբ պատրաստել քարտից, բայց դա այլ մոտեցում է: Կաղապարից ազատվելու ավելի լավ հնարավորություն տալու համար ես սկզբում այն լաքապատեցի, այնուհետև նրան տվեցի լավ ծածկույթ `մոմ արձակող նյութով:
Այնուհետև ես լցրեցի GP-3481- ը, որը մոտ 27 RTV ափին է, այնուհետև թույլ տվեցի, որ այն ամրացվի հաջորդ 24 ժամվա ընթացքում, նախքան ապամոնտաժվելը: Երբ դա արվեց, ես օգտագործեցի 2: 1 հարաբերությամբ թափանցիկ խեժը ՝ գունավոր պիգմենտի մոտ 4/5 կաթիլով և լավ խառնեցի լավ չորս րոպե: Լցնել այն ձուլվածքի մեջ, այնուհետև կրակված ապակին տեղադրել խեժի մեջ, որպեսզի հետագայում դատարկություն լինի լամպի կամ լուսադիոդների համար: Մոտ 24 ժամ անց այս խեժը պատրաստ էր հեռացնել, և ոսպնյակը բավականին լավ դուրս եկավ: Կան օդային պղպջակներ, բայց ես դեռ չունեմ վակուումային անոթ, որը պետք է յուղազերծի խեժը նախքան թափելը:
Քայլ 5. 3D տպագրություն և պատրաստում
Մոդելը նախագծվել է այնպես, որ կենտրոնական հատվածը միացված է հիմքին: Սա պետք է լիներ ներկման գործընթացում դիմակազերծումից խուսափելու համար: Ամբողջ մոդելը տպագրվել է Hatchbox ABS- ով, այնուհետև հղկվել: Սկսած 60 մանրախիճից մինչև մոտ 800 մանրախիճ, այս մոդելի համար բավականաչափ մակերեսային երանգ էր տրվում:
Քայլ 6: Հավաքում և ներկում
Երբ տպումները մանրացված են, այնուհետև այն ներկվում է բարձրորակ նախաներկով: Թեթև հղկված, այնուհետև ցողված մոխրագույն այբբենարանով: Հիմնական մասերը ներկված են եղել ford ազդանշանի դեղին գույնով, իսկ այնուհետև կանաչի համար օգտագործվել են հիմքի համար: Տամիյա արծաթի կարևորագույն տարրերն այնուհետև կիրառվեցին պտուտակներին և ոսպնյակի ամրակի վրա օգտագործված որոշ մոլոտով արծաթե քրոմ:
Քայլ 7. Նախ գտեք ինքնաթիռներ սահմանափակ տարածության մեջ
Սարքավորումը դասավորված լինելով ՝ ծրագրային ապահովման վրա անհրաժեշտ էր աշխատել: Այժմ կան մի քանի կայքեր, որոնք ապահովում են թռիչքների հետևում, բայց ոչ շատերը, որոնք տրամադրում են այդ տվյալներին մուտք գործելու API: Ոմանք դա անում են, դա անում են միայն առևտրային հիմունքներով, բայց բարեբախտաբար կա մեկ կայք ՝ https://opensky-network.org, որը կարող եք անվճար օգտագործել:
Այս տվյալներին մուտք գործելու համար պետք է գրանցվել, այնուհետև կարող եք օգտագործել դրանց API- ն, այն տրամադրում է մի քանի գործառույթ և տվյալներ քաշելու եղանակներ: Մենք հետաքրքրված ենք բոլոր թռիչքներով մեկ տարածքում և նրանք դրա համար ունեն կենդանի 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; $ parallel_radius = $ շառավիղ*cos ($ լատ); $ lat_min = $ lat - $ half_side_in_km/$ շառավղով; $ lat_max = $ lat + $ half_side_in_km/$ շառավիղ; $ lon_min = $ lon - $ half_side_in_km/$ 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);
Եթե ցանկանում եք ստուգել ձեր ծածկագիրը, կա կայք, որտեղ կարող եք մուտքագրել լատ/լոնը և արդյունքները տեսնել քարտեզի վրա.
Քայլ 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 = մեղք ($ 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 -ից փոքր է (դրական կամ բացասական), և դա նշանակում է, որ հավանականություն կա, որ այն կարող է թռչել մոտակայքում: Օգտագործելով հերսինի բանաձևը, մենք կարող ենք նաև աշխատել ՝ օգտագործելով ինքնաթիռի Lon/Lat և մեր տան Lon/Lat հեռավորությունը, որը այն մեզանից հեռու է:
Նայելով գծապատկերին, եթե մենք մեր տան շուրջը գծենք ասենք մոտ 3 մղոն շառավղով, դա մեզ հնարավորություն է տալիս ինչ -որ բան թռչել վերևում: Մենք գիտենք ինքնաթիռի և մեր միջև ուղղության տարբերությունը, մենք նաև գիտենք ինքնաթիռի հեռավորությունը մեզանից, որպեսզի կարողանանք եռանկյունը մշակել հին և լավ SOHCAHTOA- ի միջոցով, և այս դեպքում անկյունի Tan- ի միջոցով կարող ենք ստանալ հակառակ կողմի երկարությունը: Այսպիսով, եթե մենք համեմատենք այս արժեքը տան շուրջ շրջանագծի շառավիղի արժեքի հետ, ապա կարող ենք պարզել, թե արդյոք ինքնաթիռը բավականաչափ մոտ կթռչի, որպեսզի մենք այն տեսնենք: Հաջորդ բանը, որ մենք կարող ենք անել, այն է, որ մշակենք այն ժամանակը, երբ ինքնաթիռը կթռչի անցյալով ՝ օգտագործելով օդի արագությունը և հեռավորությունը, և եթե դա ավելի քիչ է, քան մոտ 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;
եթե (($ flight_angle <90) && ($ flight_intercept <3)) {// հնարավոր է անցնել
}
վերադարձնել $ flight_intercept;
}
Քայլ 10. Քարտեզի երկու կետերի միջև հեռավորությունը `Haversine բանաձև
Այսպիսով, մենք պետք է հաշվարկենք ինքնաթիռի և մեր գտնվելու վայրի միջև հեռավորությունը: Քարտեզի կարճ հեռավորությունների վրա կարող եք մոտավորապես հաշվարկել հեռավորությունը, բայց քանի որ երկիրը գնդաձև է, կա մի բանաձև, որը կոչվում է հերսին բանաձև, որը թույլ է տալիս հաշվի առնել կոր մակերեսը: Կարող եք կարդալ բանաձևի մեջ ՝
Այժմ, երբ հաշվարկվում է հեռավորությունը և մենք գիտենք ինքնաթիռի օդային արագությունը, կարող ենք պարզել, թե քանի վայրկյան կլինի այն մինչև ինքնաթիռի վերևը բարձրանալը: Այսպիսով, լույսը կբացվի, եթե թռիչքի անցումից 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 կայքը առաջարկում է ինքնաթիռների ներբեռնվող տվյալների շտեմարան ՝ իրենց անվանումների և նշանների հետ միասին: Դրա մի քանի հարյուր հազար գրառում: Այսպիսով, մենք կարող ենք ներբեռնել սա և տեղում բեռնել այն MariaDB տվյալների բազայում ՝ որոնման համար (MySQL): Վերևում հայտնվող յուրաքանչյուր ինքնաթիռի հետ մենք վերցնում ենք դրա մանրամասները և թարմացնում հաշվիչը ՝ ցույց տալու համար, թե քանի անգամ է այն տեսել:
Ես նաև ներկայումս խմբագրում եմ տվյալների շտեմարանը `ինձ հետաքրքրող ինքնաթիռները լուսաբանելու համար: Հիմնականում հին մարտական թռչուններ և նման այլ հետաքրքիր ինքնաթիռներ: Այս ամռանը մի քանի անգամ Միգ -15 ինքնաթիռ է թռչել: ուստի նպատակն է օգտագործել իմ ավելացրած ահազանգման դաշտը և այնուհետև արագ լուսավորել լույսը, երբ ինչ -որ հետաքրքիր բան ավարտվում է
Քայլ 12. Արդյունքների բարելավում և նոր հնարավորություններ
Այսպիսով, տեսականորեն ամեն ինչ բավականին լավ է աշխատում, բայց տվյալների հետ դուք կգտնեք, որ կան ինքնաթիռներ, որոնք թռչում են դրա վրայով և API- ում չեն հայտնվում:
Դա պայմանավորված է նրանով, որ ոչ բոլոր ինքնաթիռներն են օգտագործում ADS-B հաղորդիչ և օգտագործում են ավելի հին հաղորդիչներ ՝ հիմնված MLAT- ի վրա: MLAT- ով օգտագործվող ինքնաթիռների դիրքի տվյալներ ստանալու համար անհրաժեշտ է, որ գետնին մի շարք ընդունիչներ եռանկյունացնեն իրենց դիրքը, և որոշ կայքեր, ինչպիսիք են flightradar24- ը, ունեն ավելի մեծ ներդրողների ցանց `բացվածի համեմատ: Հուսով եմ, որ ժամանակի ընթացքում նրանց ծածկույթը նույնպես կբարելավվի, և ես ստեղծում եմ իմ սեփական MLAT ընդունիչը `այս տվյալներին ավելացնելու համար:
Քայլ 13: Codebase
Մի մոռացեք, եթե պատրաստվում եք օգտագործել սա, գուցե ցանկանաք հեռացնել 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]; $ latmax = $ տուփ [2]; $ lonmax = $ տուփ [3]; $ flyurl = "https://opensky-network.org/api/states/all?lamin=$latmin&lomin=$lonmin&lamax=$latmax&lomax=$lonmax"; արձագանք «ՍԿԱՆԻ ՍԿԱՆԻ»; $ start_time = microtime (ճշմարիտ); $ json = file_get_contents ($ flyurl); $ data = json_decode ($ json, TRUE); $ ներգնա = ԿԵSE; $ num_planes = հաշվել ($ 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) {$ մուտքային = UEՇՄԱՐՏ; արձագանք »---------------------------------------------------- -------------------- / n "; արձագանք "$ icao24 - [$ country $ callign] at [$ geo_altitude_m M - $ geo_altitude_f ft]"; արձագանք "[արագություն $ air_speed_kmh կմ / ժ և", կլոր ($ distplane, 1), "կմ հեռավորության վրա] n"; արձագանք «[վերնագրի վրա», կլոր ($ plane_heading, 1), "] [homeangle $ heading_d]"; արձագանք "[$ լայնություն, $ երկայնություն] n"; արձագանք "[flypast in", decimal_to_time ($ plane_eta), "now", round ($ intercept, 1), "km away / n"; արձագանք »---------------------------------------------------- -------------------- / n "; $ DBi = new mysqli («127.0.0.1», «արմատ», «ձեր գաղտնաբառը», «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); եթե ($ rows_getplanedata> 0) {անել {echo "callign ="; echo $ row_getplanedata ['գրանցում']; արձագանք «է ա»; echo $ row_getplanedata ['manufacturername']; արձագանք ""; echo $ row_getplanedata ['մոդել']; արձագանք «ըստ»; echo $ row_getplanedata ['Manufactricao']; արձագանք «պատկանում է»; echo $ row_getplanedata ['սեփականատեր']; արձագանք «տեսել»; echo $ row_getplanedata ['այցելություններ']; արձագանք «ժամանակներ»; արձագանք «հատուկ գնահատական =»; echo $ row_getplanedata ['հատուկ']; արձագանք "\ n"; $ այցեր = $ row_getplanedata ['այցելություններ']+1; } while ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "ԹԱՐՄԱՆԵԼ ինքնաթիռի տվյալների շտեմարանի SET այցելություններ = $ այցելություններ ՈՐՏԵica icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) կամ die (mysqli_error ($ DBi)); } else {echo "Չհաջողվեց գտնել այս ինքնաթիռը DB- ում` ավելացնելով այն "; $ sqli = "ՄՏԱԵԼ Օդանավի տվյալների շտեմարան (icao24, այցելություններ, հատուկ) ԱՐUԵՔՆԵՐ ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) կամ die (mysqli_error ($ DBi)); } արձագանք "--------------------------------------------------- --------------------- / n "; } else {// արձագանք «$ callignign»; }}} այլ {echo "և երկինքը պարզ է / n"; } if ($ inbound) {echo "Inbound plane / n"; $ հրաման = "խոզեր w 17 1"; execInBackground ($ հրաման); } else {echo "մուտքային թռիչքներ չկան / n"; $ հրաման = "խոզեր w 17 0"; execInBackground ($ հրաման); }} տասնորդական_տ_աշխատանք (տասնորդական դոլար) {$ օֆսեթ = 0,002778; եթե ($ տասնորդական> $ օֆսեթ) {$ տասնորդական = $ տասնորդական - 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 * 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 = մեղք ($ 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 = tan ($ flight_angle_r); $ flight_intercept = $ flight_angle_t * $ plane_distance; վերադարձնել $ flight_intercept; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *// * * Օգտագործեք Haversine բանաձևը ՝ * լայնության/երկայնության (թվային աստիճաններով) * երկու * կետերի միջև հեռավորությունը (կմ) հաշվարկելու համար * * - ից ՝ Haversine բանաձևից - RWՍիննոթ, «Հավերսինի առաքինությունները», * Երկինք և աստղադիտակ, հատոր 68, թիվ 2, 1984 թ. = 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; // երկրի միջին շառավիղը կմ-ում $ 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; # Theուգահեռի շառավիղ տվյալ լայնության վրա; $ parallel_radius = $ շառավիղ*cos ($ լատ); $ lat_min = $ lat - $ half_side_in_km/$ շառավղով; $ lat_max = $ lat + $ half_side_in_km/$ շառավիղ; $ lon_min = $ lon - $ half_side_in_km/$ 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 ("start /B". $ cmd, "r")); } else {exec ($ cmd. "> /dev /null &"); }} գործառույթը checkForStopFlag () {// ամբողջովին կամընտիր վերադարձ (TRUE); } գործառույթի սկիզբ () {echo "start / n"; $ հրաման = "խոզեր w 17 1"; execInBackground ($ հրաման); $ ակտիվ = UEԻՇՏ; while ($ active) {usleep (1000); // ըստ ցանկության, եթե ցանկանում եք հաշվի առնել if (microtime (true)> = $ nextTime) {fexp (); $ nextTime = միկրո ժամանակ (ճշմարիտ) + INTERVAL; } $ active = checkForStopFlag (); }} fexp (); սկսել (); ?>
Քայլ 14: LED- ի և անջատման անջատիչի միացում
Այս նախագծի միացումն իսկապես ավելի պարզ չէր կարող լինել: Կա միայն մեկ LED, որը միացված է 17 -ի կապակցիչին և գետնին `270R ռեզիստորի ներսում:
Ես նաև ներառում եմ անջատման և սնուցման կոճակ, ինչպես նաև էներգիայի LED, որը դուրս է գալիս TXd տվյալների քորոցից: Դուք կարող եք ավելին կարդալ անջատման գործառույթի և պահանջվող ծածկագրի մասին ՝ https://github.com/Howchoo/pi-power-button.git կայքում ՝ https://howchoo.com/g/mwnlytk3zmm/how-to- add-a-pow… Էլեկտրական լամպ ավելացնելու մասին կարող եք կարդալ այստեղ
Խորհուրդ ենք տալիս:
Թռիչքի մոնիտոր `օգտագործելով ազնվամորի PI և DVB փայտիկ` 3 քայլ
Թռիչքի մոնիտոր ՝ օգտագործելով ազնվամորի PI և DVB փայտիկ. Եթե հաճախակի թռիչքներ եք անում կամ պարզապես ինքնաթիռով եք զբաղվում, ապա Flightradar- ը կամ Flightaware- ը պետք է ունենան վեբ կայքեր (կամ ծրագրեր, քանի որ կան նաև բջջային հավելվածներ), որոնք ամեն օր կօգտագործեք: հիմք. Երկուսն էլ թույլ են տալիս իրական ժամանակում հետևել ինքնաթիռներին, տեսնել թռիչք
LED թարթում ազնվամորու Pi- ով - Ինչպես օգտագործել GPIO կապում ազնվամորու Pi- ի վրա. 4 քայլ
LED թարթում ազնվամորու Pi- ով | Ինչպես օգտագործել GPIO կապում ազնվամորու Pi- ի վրա. Բարև տղերք, այս հրահանգներում մենք կսովորենք, թե ինչպես օգտագործել Raspberry pi- ի GPIO- ն: Եթե երբևէ օգտվել եք Arduino- ից, ապա հավանաբար գիտեք, որ մենք կարող ենք LED անջատիչ և այլն միացնել դրա կապումներին և այնպես անել, որ այն աշխատի: LED- ը թարթել կամ մուտքագրել անջատիչից, որպեսզի
Օգտագործելով Complex Arts Sensor Board- ը ՝ մաքուր տվյալները WiFi- ով վերահսկելու համար. 4 քայլ (նկարներով)
Օգտագործելով Complex Arts Sensor Board- ը ՝ մաքուր տվյալները WiFi- ով վերահսկելու համար. Երբևէ ցանկացե՞լ եք փորձարկել ժեստերի կառավարումը: Ձեռքի շարժումով ստիպո՞ւմ եք իրերին շարժվել: Վերահսկե՞լ երաժշտությունը ձեր դաստակի ոլորումով: Այս Instructable- ը ցույց կտա ձեզ, թե ինչպես: Complex Arts Sensor Board- ը (complexarts.net) բազմակողմանի միկրո
Հեշտ արթնացում. Խելացի արթնացման լույս ՝ պատրաստված ազնվամորու Pi- ով. 6 քայլ
Easy Wake-Up. Smart Wake-Up Light Made with Raspberry Pi: Intro curրագրի ծրագրի համար 1 Ես պետք է ինչ-որ բան պատրաստեի: Ինձ միշտ գրավում էր այն, թե ինչպես է արթնանալու լույսը օգուտ կբերի քեզ արթնանալուց, ինչպես Ֆիլիպսից: Այսպիսով, ես որոշեցի արթնացնելու լույս սարքել: Արթնացման լույսը պատրաստեցի Raspberr- ով
Նվագարկեք երգեր (MP3) Arduino- ի միջոցով ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա. 6 քայլ (նկարներով)
Նվագարկեք երգեր (MP3) Arduino- ի հետ ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա. Բարև տղերք, սա իմ առաջին ուսանելի տարբերակն է, հուսով եմ, որ այն ձեզ դուր կգա: Հիմնականում այս նախագծում ես օգտագործել եմ սերիական հաղորդակցություն իմ Arduino- ի և իմ նոութբուքի միջև, նոութբուքից երաժշտական տվյալներ փոխանցել Arduino- ին: Եվ օգտագործելով Arduino TIMERS t