সুচিপত্র:

ফ্লাইট ম্যাপিং ডেটা ব্যবহার করে প্রাথমিক সতর্কতা রাস্পবেরি পিআই রানওয়ে লাইট: 14 টি ধাপ (ছবি সহ)
ফ্লাইট ম্যাপিং ডেটা ব্যবহার করে প্রাথমিক সতর্কতা রাস্পবেরি পিআই রানওয়ে লাইট: 14 টি ধাপ (ছবি সহ)

ভিডিও: ফ্লাইট ম্যাপিং ডেটা ব্যবহার করে প্রাথমিক সতর্কতা রাস্পবেরি পিআই রানওয়ে লাইট: 14 টি ধাপ (ছবি সহ)

ভিডিও: ফ্লাইট ম্যাপিং ডেটা ব্যবহার করে প্রাথমিক সতর্কতা রাস্পবেরি পিআই রানওয়ে লাইট: 14 টি ধাপ (ছবি সহ)
ভিডিও: Duolingo ইংরেজি টেস্ট DET শব্দভান্ডার সর্বাধ... 2024, জুলাই
Anonim
ফ্লাইট ম্যাপিং ডেটা ব্যবহার করে প্রাথমিক সতর্কতা রাস্পবেরি পিআই রানওয়ে লাইট
ফ্লাইট ম্যাপিং ডেটা ব্যবহার করে প্রাথমিক সতর্কতা রাস্পবেরি পিআই রানওয়ে লাইট
ফ্লাইট ম্যাপিং ডেটা ব্যবহার করে প্রাথমিক সতর্কতা রাস্পবেরি পিআই রানওয়ে লাইট
ফ্লাইট ম্যাপিং ডেটা ব্যবহার করে প্রাথমিক সতর্কতা রাস্পবেরি পিআই রানওয়ে লাইট
ফ্লাইট ম্যাপিং ডেটা ব্যবহার করে প্রাথমিক সতর্কতা রাস্পবেরি পিআই রানওয়ে লাইট
ফ্লাইট ম্যাপিং ডেটা ব্যবহার করে প্রাথমিক সতর্কতা রাস্পবেরি পিআই রানওয়ে লাইট
ফ্লাইট ম্যাপিং ডেটা ব্যবহার করে প্রাথমিক সতর্কতা রাস্পবেরি পিআই রানওয়ে লাইট
ফ্লাইট ম্যাপিং ডেটা ব্যবহার করে প্রাথমিক সতর্কতা রাস্পবেরি পিআই রানওয়ে লাইট

এই প্রদীপটি বিভিন্ন কারণে এসেছে যে আমি সবসময় ওভারহেড উড়োজাহাজগুলিতে আগ্রহী এবং গ্রীষ্মকালে সপ্তাহান্তে প্রায়ই বেশ কিছু উত্তেজনাপূর্ণ উড়ন্ত হয়। যদিও আপনি শুধুমাত্র তাদের অতীত হিসাবে তাদের শুনতে ঝোঁক। তারপরে অন্য কারণ হল যে মনে হচ্ছে লন্ডন সিটি বিমানবন্দর থেকে বহির্গামী প্লেনের ফ্লাইট পথ কখনও কখনও শোনা যাবে এবং তাদের বেশ কিছু গোলমাল ফ্লাইট চলছে। যেহেতু আমি ইউটিউবের জন্য কিছু ভিডিও রেকর্ড করার জন্য ড্যাবল করছি এটি একটি বিরক্তিকর সমতলের কারণে একটি রেকর্ডিং স্ক্র্যাপ করা সত্যিই বিরক্তিকর। তাই আমি অবাক হয়েছি যে আপনি যে তথ্য ফ্লাইটারডার ২ like এর মতো সাইটগুলিতে দেখছেন তা সর্বজনীনভাবে পাওয়া যায়, একবার আমি আবিষ্কার করলাম ওপেনস্কি নেটওয়ার্ক থেকে অনুরূপ কিছু পাওয়া যায়, প্রাথমিক সতর্কবাণীর জন্ম হয়েছিল। প্রকল্পটি চালানোর জন্য রানওয়ে আলোর প্রতিরূপ ব্যবহার করার ধারণাটি আসতে খুব বেশি সময় লাগেনি।

আপনি ওপেনস্কাই নেটওয়ার্ক সম্পর্কে আরও জানতে পারেন https://www.opensky-network.org এ আমিও চেয়েছিলাম এইবার স্বচ্ছ পিএলএ ব্যবহার না করে একটি সুন্দর রজন লেন্স তৈরি করতে এবং যদিও আমার একটি এডিএস-বি রিসিভার আছে যা আমি রাখতে চেয়েছিলাম এই সহজ এবং সস্তা। এডিএস-বি-এরও একটি অ্যান্টেনা দরকার এবং এটি অফিসে শেল্ফে প্রদীপের জন্য এটি করবে না। তাই আশা করি আপনি বিল্ডটি আকর্ষণীয় পাবেন কারণ এটি 3D মুদ্রণ, রজন ছাঁচনির্মাণ এবং গণিতের পাশাপাশি বিমানের অবস্থানগুলিকে এক্সট্রোপলেট করতে পারে যা সম্ভাব্য ওভারহেড হতে পারে।

ধাপ 1: কেস ডিজাইন করা

গুগল সার্চ রানওয়ে ল্যাম্পের বিভিন্ন ডিজাইনের সাথে আসে এবং এটির নকশাটি বাস্তব ল্যাম্পের বিভিন্ন ধরণের নকশা প্রভাব ব্যবহার করে তৈরি করা হয়েছিল। এটি একটি আকারে বা একটি শেলফে পূর্ণ আকারের পরিবর্তে বসার জন্যও স্কেল করা হয়, কারণ তারা বাস্তব জীবনে অনেক বড় হয়ে থাকে।

ফিউশন in০ -এ নকশা তৈরি করা হয়েছিল এবং আমি পূর্ববর্তী কিছু প্রকল্প যেমন রাস্পবেরি পাই জিরো হোল্ডার আমদানি করেছি। উপাদানগুলি পুনরায় ব্যবহার করতে সক্ষম হওয়ায় মূল বিষয়গুলি থেকে বেরিয়ে আসার জন্য প্রচুর মাথাব্যথা লাগে। আপনি এখানে ফাইল ডাউনলোড করতে পারেন

ধাপ 2: লেন্স কাস্টিং - #ব্যর্থ

লেন্স কাস্টিং - #ব্যর্থ
লেন্স কাস্টিং - #ব্যর্থ
লেন্স কাস্টিং - #ব্যর্থ
লেন্স কাস্টিং - #ব্যর্থ
লেন্স কাস্টিং - #ব্যর্থ
লেন্স কাস্টিং - #ব্যর্থ

এই প্রদীপের সবচেয়ে গুরুত্বপূর্ণ নকশা উপাদান লেন্স হতে যাচ্ছে। তাই আমি এই প্রথম মোকাবেলা করেছি কারণ একটি সুন্দর খাঁটি লুকিং গ্লাস ছাড়া প্রকল্পটি কাজ করতে চলেছে। আমি এখানে সেই ব্যর্থতার নথিপত্র নথিভুক্ত করছি যা আমি তা অর্জনের চেষ্টা করেছিলাম, তা না করেও আমি প্রাথমিকভাবে লেন্স অ্যাম্বার করার সিদ্ধান্ত নিয়েছি। রানওয়ে লাইটগুলি অ্যাম্বার এবং নীল উভয় রঙে আসে এবং আমি অ্যাম্বার তৈরি করা শুরু করার পরেই আমি আমার মন পরিবর্তন করেছিলাম এবং সিদ্ধান্ত নিয়েছিলাম যে আমি একটি নীল চাই।

আমি যা করতে পারি তা থেকে অ্যাম্বারগুলি হোল্ডিং লাইনে ব্যবহার করা হয় এবং রানওয়ে লাইনে নীল রং ব্যবহার করা হয় এবং আপনি রানওয়ে লাইটের জন্য অনুসন্ধান করলে এগুলিই বেশি প্রত্নতাত্ত্বিক বলে মনে হয়। যাইহোক, এখানে একটি অ্যাম্বার লেন্স তৈরির আমার প্রথম প্রচেষ্টা। লেন্স তৈরির জন্য, আমি একটি রঙের সংযোজন সহ ক্লিয়ারকাস্ট রজন ব্যবহার করতে যাচ্ছিলাম, এবং যদিও আমি কিছু ছাঁচ তৈরি করেছি যদিও আমি ভেবেছিলাম যে এটি একটি 3D ছাঁচ মুদ্রণ করা এবং এটি ব্যবহার করা সম্ভব হবে কিনা। তাই আমি 3D তে একটি বিভক্ত ছাঁচ তৈরি এবং এটি PetG এ মুদ্রণ দিয়ে শুরু করেছি। যথাযথ পরিমাণে ছাঁচ রিলিজ আমি নিশ্চিত ছিলাম ছাঁচটি স্প্রেট করার জন্য যথেষ্ট। যেহেতু এটি কয়েকটি প্রচেষ্টার সাথে দেখা যাচ্ছে আমি আঠালো মত ছাঁচে আটকে রজন তৈরি করেছি এবং তাদের আলাদা করা সম্ভব বলে মনে হচ্ছে না। যদিও আমি সম্পূর্ণ স্কেল এক যে আমি ব্যবহার করতে যাচ্ছিলাম, আমি এর বিরুদ্ধে সিদ্ধান্ত নিয়েছি এবং traditionalতিহ্যগত সিলিকন ছাঁচনির্মাণের সাথে ব্যবহার করার জন্য লেন্স মুদ্রণ করেছি।

ধাপ 3: বিভিন্ন ধরণের রজন

বিভিন্ন ধরনের রজন
বিভিন্ন ধরনের রজন
বিভিন্ন ধরনের রজন
বিভিন্ন ধরনের রজন
বিভিন্ন ধরনের রজন
বিভিন্ন ধরনের রজন
বিভিন্ন ধরনের রজন
বিভিন্ন ধরনের রজন

একটি দ্রুত সরাইয়া হিসাবে, আমি এই প্রকল্পের জন্য 3 ধরনের পরিষ্কার/রঙিন রেজিন ব্যবহার করেছি।

প্রথমটি ছিল একটি শখের বাজারের ধরন যা Pebeo - Gedeo নামে পরিচিত এবং এটি সাধারণত ছোট ছোট জিনিসগুলিকে আবৃত করে বিক্রি করা হয় এবং গহনা এবং ডেস্ক পেপারওয়েট ইত্যাদির জন্য ব্যবহার করা হয়। তবে আপনি যে পরিমাণ পান তার জন্য এটি বেশ দামী, কিন্তু শখ এবং কারুশিল্পের দোকানে সহজ এবং সহজলভ্য। এটি 2: 1 অনুপাতে মিশ্রিত। দ্বিতীয়টি ছিল একটি প্রাক রঙের রজন যা হার্ডেনারের সাথে 10: 1 অনুপাতে মিশ্রিত হয় এবং এটি নিরাময়ে সবচেয়ে দীর্ঘ সময় নেয়, এটি সম্পূর্ণরূপে সুস্থ হওয়ার আগে সৎ হতে প্রায় এক সপ্তাহ সময় নেয়। শেষটি ছিল একটি পরিষ্কার রজন, যা 2: 1 অনুপাতেও মিশ্রিত হয়েছিল এবং এটি প্রায় 2 দিনের মধ্যে সেরে যায়, আপনি এটিকে রঙ্গক ফোঁটা দিয়ে রঙ করতে পারেন, তবে আপনাকে নিশ্চিত করতে হবে যে আপনি সর্বদা একই রঙ অনুপাত ব্যবহার করেন যদি আপনি আলাদা ব্যাচ তৈরি করছে। এটি সবচেয়ে সাশ্রয়ী মূল্যের কাজ করে। অবশেষে ছাঁচটির জন্য আরটিভি ছিল একটি জিপি -3481 আরটিভি এবং এটি সেট হতে প্রায় 24 ঘন্টা সময় নেয় এবং এতে বেশ দীর্ঘ সময় থাকে তাই আপনার এটি মিশ্রিত করার জন্য প্রচুর সময় থাকে এবং তারপর এটি pourেলে দিন।

বর্তমানে আমার কাছে একটি শূন্য পাত্র নেই (বর্তমানে অর্ডারে) যাতে আপনি ছাঁচ এবং রজন bothেলে উভয় বুদবুদ দ্বারা ঘিরে থাকতে পারেন। এর জন্য খুব বেশি সমস্যা নয়, তবে একটি পরিষ্কার লেন্স বা অনুরূপ দিয়ে আপনি মিশ্রণ থেকে বুদবুদগুলি বের করার জন্য কোনওভাবে চিন্তা করতে চান।

ধাপ 4: সিলিকন ছাঁচ #2 এ লেন্স ingালাই

Image
Image
সিলিকন ছাঁচ #2 এ লেন্স কাস্টিং
সিলিকন ছাঁচ #2 এ লেন্স কাস্টিং
সিলিকন ছাঁচ #2 এ লেন্স কাস্টিং
সিলিকন ছাঁচ #2 এ লেন্স কাস্টিং

সুতরাং এটি একটি রজন লেন্স তৈরির দ্বিতীয় প্রচেষ্টা এবং প্রথম পর্যায়ে ফিউশন 360 এ উভয় লেন্স তৈরি করা এবং তারপরে এটি ABS এবং এটি রাখার জন্য একটি বালতিতে মুদ্রণ করা। এটি ছাঁচের জন্য প্রাক্তন হবে এবং ব্যবহৃত সিলিকনের পরিমাণ কম রাখতে সাহায্য করবে। আপনি সহজেই কার্ডের বাইরে এটি তৈরি করতে পারেন, কিন্তু এটি একটি ভিন্ন পদ্ধতি। এটি ছাঁচ থেকে মুক্ত হওয়ার একটি ভাল সুযোগ দেওয়ার জন্য আমি প্রথমে এটিকে বার্নিশ করেছিলাম এবং তারপর এটি মোম রিলিজ এজেন্টের একটি ভাল আবরণ দিয়েছিলাম।

আমি তখন কিছু GP-3481 whichেলে দিলাম যা প্রায় 27 RTV এবং তারপর ডিমোল্ডিংয়ের আগে পরবর্তী 24 ঘন্টার মধ্যে এটি সেট হতে দিন। একবার এটি করা হয়ে গেলে আমি 2: 1 অনুপাতে পরিষ্কার রজন মিশ্রিত 4/5 ড্রপ রঙের রঙ্গক ব্যবহার করে এবং এটি ভাল চার মিনিটের জন্য ভালভাবে মিশ্রিত করি। এটি ছাঁচে Pেলে দিল এবং তারপরে রজনিতে একটি শট গ্লাস স্থাপন করল এবং পরে একটি বাতি বা LED এর জন্য একটি শূন্যতা প্রদান করল। প্রায় 24 ঘন্টা পরে এই রজনটি অপসারণের জন্য প্রস্তুত ছিল এবং লেন্সগুলি বেশ ভালভাবে বেরিয়ে এল। সেখানে বায়ু বুদবুদ আছে, কিন্তু এখনও Iালা আগে রজন degass করার জন্য আমার একটি ভ্যাকুয়াম জাহাজ নেই।

ধাপ 5: 3D মুদ্রণ এবং প্রস্তুতি

3D মুদ্রণ এবং প্রস্তুতি
3D মুদ্রণ এবং প্রস্তুতি
3D মুদ্রণ এবং প্রস্তুতি
3D মুদ্রণ এবং প্রস্তুতি
3D মুদ্রণ এবং প্রস্তুতি
3D মুদ্রণ এবং প্রস্তুতি

মডেলটি এমনভাবে ডিজাইন করা হয়েছিল যে কেন্দ্রীয় বিভাগটি বেসে প্লাগ করে। এটি ছিল পেইন্টিং প্রক্রিয়ার সময় মাস্কিং এড়ানো। পুরো মডেলটি হ্যাচবক্স এবিএসে মুদ্রিত হয়েছিল এবং তারপরে স্যান্ডেড হয়েছিল। প্রায় g০০ গ্রিট পর্যন্ত g০ টি গ্রিট দিয়ে শুরু করা এই মডেলের জন্য যথেষ্ট পরিমাণে সারফেস ফিনিশ দিয়েছে।

ধাপ 6: সমাবেশ এবং পেইন্টিং

সমাবেশ এবং পেইন্টিং
সমাবেশ এবং পেইন্টিং
সমাবেশ এবং পেইন্টিং
সমাবেশ এবং পেইন্টিং
সমাবেশ এবং পেইন্টিং
সমাবেশ এবং পেইন্টিং

একবার প্রিন্টগুলি বালি হয়ে গেলে, এটি তখন কিছু উচ্চ বিল্ড প্রাইমার দিয়ে আঁকা হয়েছিল। হালকা বালি এবং তারপর ধূসর প্রাইমারে স্প্রে করা হয়। মূল অংশগুলি ফোর্ড সিগন্যাল হলুদে আঁকা হয়েছিল এবং তারপরে বেসের জন্য ব্যবহৃত ব্রুকল্যান্ডস সবুজ। তামিয়া রূপার হাইলাইটগুলি তখন বোল্টগুলিতে প্রয়োগ করা হয়েছিল এবং কিছু মলোটো সিলভার ক্রোম লেন্স হোল্ডারে ব্যবহৃত হয়েছিল।

ধাপ 7: প্রথমে একটি সীমানা এলাকার মধ্যে প্লেন খুঁজুন

হার্ডওয়্যার সাজানোর সাথে সাথে সফটওয়্যারে কাজ করতে হবে। এখন কয়েকটি সাইট আছে যা ফ্লাইট ট্র্যাকিং প্রদান করে, কিন্তু অনেকগুলি নয় যে সেই ডেটা অ্যাক্সেস করার জন্য একটি API প্রদান করে। কিছু যা করে, শুধুমাত্র বাণিজ্যিক ভিত্তিতে করে কিন্তু সৌভাগ্যবশত https://opensky-network.org নামে একটি সাইট আছে যা আপনি বিনামূল্যে ব্যবহার করতে পারেন।

এই ডেটা অ্যাক্সেস করতে আপনাকে নিবন্ধন করতে হবে এবং তারপরে আপনি তাদের API ব্যবহার করতে পারেন, এটি বিভিন্ন ফাংশন এবং ডেটা টানার উপায় প্রদান করে। আমরা একটি এলাকার মধ্যে সমস্ত ফ্লাইটে আগ্রহী এবং তাদের জন্য একটি লাইভ API কল আছে। https://opensky-network.org/apidoc/ বাউন্ডিং বক্স বলা হয়। এপিআই কলের জন্য অবশ্যই বাক্সের কোণগুলির প্রয়োজন হয় যা আপনি অবশ্যই আমাদের ল্যাট/লনকে কেন্দ্র বিন্দু হিসাবে পছন্দ করেন। আপনি এই সাইটে গণিতের কাজগুলি পরীক্ষা করতে পারেন, যা আপনি টাইপ করেন তার উপর নির্ভর করে একটি বাক্স আঁকেন। https://tools.geofabrik.de কিন্তু এখন নিচের স্ক্রিপ্টটি আমাদের API এ প্লাগ করার জন্য প্রয়োজনীয় পয়েন্ট দেয়।

ফাংশন 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); $ 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_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: আমাদের সাথে সম্পর্কের মধ্যে প্লেনের শিরোনাম গণনা করা

আমাদের সাথে সম্পর্কের মধ্যে প্লেনের শিরোনাম গণনা করা
আমাদের সাথে সম্পর্কের মধ্যে প্লেনের শিরোনাম গণনা করা

বাউন্ডিং বক্স এপিআই কল থেকে প্রাপ্ত ফলাফল আমাদের প্লেনের একটি তালিকা, তাদের লন/ল্যাট, গতি, উচ্চতা এবং শিরোনাম দেয়। সুতরাং আমাদের পরবর্তী যে কাজটি করতে হবে তা হল আমাদের সম্বন্ধে প্রতিটি বিমানের শিরোনাম সংগ্রহ করা যাতে আমরা আরও কমপক্ষে আমাদের সাধারণ দিকের শিরোনামগুলিকে আরও প্রক্রিয়া করতে পারি। আমরা এটি করতে পারি যেমন আমরা আমাদের অবস্থান জানি এবং আমাদের থেকে প্রতিটি সমতলে কোণ বের করতে পারি।

এটি করার জন্য আমি কোডের একটি অংশ ব্যবহার করি যা মূলত জাভাস্ক্রিপ্টে ছিল তাই আমি এটিকে পিএইচপিতে রূপান্তর করেছি, * দুই পয়েন্টের মধ্যে গণনা (প্রাথমিক) ভারসাম্য ফাংশন 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)*sin ($ lat2) - sin ($ lat1)*cos ($ lat2)*cos ($ dLon); $ z = atan2 ($ y, $ x); $ zz = (rad2deg ($ z) +360)% 360; $ zz ফেরত দিন;

আপনি যদি মূল জাভাস্ক্রিপ্ট সংস্করণগুলির পৃষ্ঠাটি দেখতে চান তবে এটি লিঙ্ক:

সেই কোডের মধ্যে, আপনি প্রতিটি ধরণের গণনার জন্য বিভিন্ন উপ রুটিন দেখতে পারেন।

ধাপ 9: একটি বৃত্তের দিকে তাকিয়ে একটি বাধা গণনা করা

একটি বৃত্তের দিকে তাকিয়ে একটি ইন্টারসেপ্ট গণনা করা
একটি বৃত্তের দিকে তাকিয়ে একটি ইন্টারসেপ্ট গণনা করা

সুতরাং আমাদের এখন একটি সমতল আছে যেখানে এটি এবং আমাদের অবস্থানের মধ্যে বহন 90 এর কম (ইতিবাচক বা নেতিবাচক) এবং তাই এর মানে হল যে এটি কাছাকাছি উড়তে পারে। হাভারসাইন ফর্মুলা ব্যবহার করে আমরা প্লেনের লন/ল্যাট এবং আমাদের বাড়ির লন/ল্যাট ব্যবহার করে কাজ করতে পারি যা আমাদের থেকে দূরে।

ডায়াগ্রামের দিকে তাকিয়ে, যদি আমরা আমাদের বাড়ির প্রায় miles মাইল ব্যাসার্ধের চারপাশে একটি বৃত্ত আঁকতে পারি তবে এটি আমাদের উপর দিয়ে উড়ন্ত কিছু দেখার সুযোগ দেয়। আমরা সমতল এবং আমাদের মধ্যে শিরোনাম মধ্যে পার্থক্য জানি, আমরা আমাদের কাছ থেকে সমতল দূরত্ব জানি তাই আমরা তারপর ভাল পুরানো 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;

যদি (($ flight_angle <90) && ($ flight_intercept <3)) {// সম্ভাব্য ফ্লাই পাস্ট

}

$ flight_intercept ফেরত দিন;

}

ধাপ 10: একটি মানচিত্রে দুটি পয়েন্টের মধ্যে দূরত্ব - হাভারসাইন সূত্র

একটি মানচিত্রে দুটি পয়েন্টের মধ্যে দূরত্ব - হাভারসাইন ফর্মুলা
একটি মানচিত্রে দুটি পয়েন্টের মধ্যে দূরত্ব - হাভারসাইন ফর্মুলা

সুতরাং আমাদের সমতল এবং আমাদের অবস্থানের মধ্যে দূরত্ব গণনা করতে হবে। একটি মানচিত্রে সংক্ষিপ্ত দূরত্বে আপনি আনুমানিক দূরত্ব গণনা করতে পারেন, কিন্তু পৃথিবী গোলাকার হওয়ায় হভারসাইন ফর্মুলা নামে একটি সূত্র রয়েছে যা আপনাকে বাঁকা পৃষ্ঠকে বিবেচনা করতে দেয়। আপনি সূত্রটি আরও পড়তে পারেন:

এখন দূরত্ব গণনা এবং আমরা বিমানের এয়ারস্পিড জানি আমরা বিমানটি ওভারহেড হওয়ার আগে কত সেকেন্ড হবে তা বের করতে পারি। তাই ফ্লাইপাস্টের seconds০ সেকেন্ডের মধ্যে কিছু থাকলে আলো আসবে এবং শেষ পর্যন্ত আমাদের সতর্কবার্তা আছে।

* instantglobe.com/CRANES/GeoCoordTool.html এ 0n JS ভিত্তিক এবং পিএইচপি */

ফাংশন 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 = 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: প্লেন ডেটাবেস আমদানি এবং সংজ্ঞায়িত করা

অন্য টুকরাগুলির মধ্যে একটি হল যে ওপেনস্কি সাইট তাদের কলসাইন এবং পরিচয় সহ প্লেনের ডাউনলোডযোগ্য ডাটাবেস সরবরাহ করে। এর কয়েক লক্ষ এন্ট্রি। সুতরাং আমরা এটি ডাউনলোড করতে পারি এবং স্থানীয়ভাবে এটি মারিয়াডিবি ডাটাবেসে সন্ধানের জন্য (মাইএসকিউএল) লোড করতে পারি। ওভারহেড প্রদর্শিত প্রতিটি প্লেনের সাথে, আমরা তার বিবরণ পুনরুদ্ধার করি এবং এটি কতবার দেখা হয়েছে তা দেখানোর জন্য একটি কাউন্টার আপডেট করি।

আমি বর্তমানে যেসব প্লেনে আগ্রহী সেগুলোকে তুলে ধরার জন্য ডাটাবেজ সম্পাদনা করছি। এই গ্রীষ্মে কয়েকবার একটি মিগ -15 উড়ে গেছে। তাই লক্ষ্য হল আমি যোগ করা একটি সতর্কতা ক্ষেত্র ব্যবহার করা এবং তারপর আকর্ষণীয় কিছু শিরোনাম হলে দ্রুত আলোর ঝলকানি

ধাপ 12: ফলাফল এবং নতুন বৈশিষ্ট্য উন্নত করা

ফলাফল এবং নতুন বৈশিষ্ট্য উন্নত করা
ফলাফল এবং নতুন বৈশিষ্ট্য উন্নত করা
ফলাফল এবং নতুন বৈশিষ্ট্য উন্নত করা
ফলাফল এবং নতুন বৈশিষ্ট্য উন্নত করা
ফলাফল এবং নতুন বৈশিষ্ট্য উন্নত করা
ফলাফল এবং নতুন বৈশিষ্ট্য উন্নত করা

সুতরাং তত্ত্ব অনুসারে সবকিছুই বেশ ভালভাবে কাজ করে, কিন্তু আপনি এমন ডেটা খুঁজে পাবেন যে এমন প্লেন রয়েছে যা এপিআইতে দেখা যায় না।

এর কারণ হল যে সমস্ত প্লেন ADS-B ট্রান্সপন্ডার ব্যবহার করে না এবং MLAT ভিত্তিক পুরোনো ট্রান্সপন্ডার ব্যবহার করে। এমএলএটি ব্যবহার করে উড়োজাহাজের অবস্থানের তথ্য পেতে, তাদের অবস্থান ত্রিভুজ করার জন্য মাটিতে রিসিভারের একটি সিরিজ প্রয়োজন এবং ফ্লাইটারডার 24 এর মতো কিছু সাইট ওপেনস্কির তুলনায় অবদানকারীদের একটি বড় নেটওয়ার্ক রয়েছে। আশা করি সময়ের সাথে সাথে তাদের কভারেজও উন্নত হবে এবং আমি এই ডেটা যোগ করার জন্য আমার নিজস্ব MLAT রিসিভার স্থাপন করছি।

ধাপ 13: কোডবেস

যদি আপনি এটি ব্যবহার করতে যাচ্ছেন তবে ভুলে যাবেন না যদি আপনার প্লেনের ডাটাবেস না থাকে এবং আপনি ফ্লাইট ডেটা অ্যাক্সেস করার জন্য আপনার নিজস্ব লন/ল্যাট মান এবং এপিআই কী যুক্ত করতে পারেন তবে আপনি এসকিউএল স্টেটমেন্টগুলি সরাতে চাইতে পারেন।

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

সংজ্ঞায়িত করুন ("অন্তর্বর্তী", (20 * 1)); ফাংশন fexp () {$ lat = "আপনার অক্ষাংশ"; $ lon = "আপনার দ্রাঘিমাংশ"; $ পাশ = 15.75; $ box = get_bounding_box ($ lat, $ lon, $ side); $ latmin = $ box [0]; $ lonmin = $ box [1]; $ latmax = $ box [2]; $ লনম্যাক্স = $ বক্স [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); $ ইনবাউন্ড = মিথ্যা; $ num_planes = count ($ data ['states']); যদি ($ num_planes> 0) {echo "এবং আমরা $ num_planes প্লেন দেখতে পারি / n"; জন্য ($ x = 0; $ x 0) {$ plane_eta = $ distplane/$ air_speed_kmh; } অন্য {$ eta = 1; } যদি ((($ intercept) 0)) && ($ distplane0) {$ inbound = TRUE; প্রতিধ্বনি "------------------------------------------------ -------------------- n "; প্রতিধ্বনি "$ icao24 - [$ country $ callsign] এ [$ geo_altitude_m M - $ geo_altitude_f ft]"; প্রতিধ্বনি "[গতি $ air_speed_kmh kmh এবং", গোল ($ distplane, 1), "কিমি দূরে] n"; প্রতিধ্বনি "[একটি শিরোনামে", বৃত্তাকার ($ plane_heading, 1), "] [হোম্যাঙ্গেল $ হেডিং_ডি]"; প্রতিধ্বনি "[$ অক্ষাংশ, $ দ্রাঘিমাংশ] n"; echo "[flypast in", decimal_to_time ($ plane_eta), "now", round ($ intercept, 1), "km km / n"; প্রতিধ্বনি "------------------------------------------------ -------------------- n "; $ DBi = new mysqli ("127.0.0.1", "root", "your password", "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) {do {echo "callsign ="; প্রতিধ্বনি $ row_getplanedata ['নিবন্ধন']; প্রতিধ্বনি "একটি"; প্রতিধ্বনি $ row_getplanedata ['Manufacturename']; প্রতিধ্বনি ""; প্রতিধ্বনি $ row_getplanedata ['মডেল']; প্রতিধ্বনি "দ্বারা"; প্রতিধ্বনি $ row_getplanedata ['Manufactricricao']; প্রতিধ্বনি "মালিকানাধীন"; প্রতিধ্বনি $ row_getplanedata ['মালিক']; প্রতিধ্বনি "দেখা"; প্রতিধ্বনি $ row_getplanedata ['ভিজিট']; প্রতিধ্বনি "বার"; প্রতিধ্বনি "বিশেষ রেটিং ="; প্রতিধ্বনি $ row_getplanedata ['বিশেষ']; প্রতিধ্বনি "\ n"; $ ভিজিট = $ row_getplanedata ['ভিজিট']+1; } যখন ($ row_getplanedata = mysqli_fetch_assoc ($ getplanedata)); mysqli_free_result ($ getplanedata); $ sqli = "আপডেট এয়ারক্রাফট ডাটাবেজ SET ভিজিট = $ ভিজিট যেখানে icao24 = '$ icao24'"; mysqli_set_charset ($ DBi, "utf8"); $ updateplanedata = mysqli_query ($ DBi, $ sqli) অথবা ডাই (mysqli_error ($ DBi)); } অন্যথায় {প্রতিধ্বনি "এই সমতলটি ডিবিতে খুঁজে পাওয়া যায়নি তাই এটি যুক্ত করা হচ্ছে"; $ sqli = "INCERT INTO এয়ারক্রাফট ডেটাবেস (icao24, ভিজিট, স্পেশাল) VALUES ('$ icao24', 1, 1)"; $ updateplanedata = mysqli_query ($ DBi, $ sqli) অথবা ডাই (mysqli_error ($ DBi)); } প্রতিধ্বনি "----------------------------------------------- --------------------- / n "; } অন্যথায় {// echo "$ callsign"; }}} অন্যথায় {প্রতিধ্বনি "এবং আকাশ পরিষ্কার / n"; } যদি ($ ইনবাউন্ড) {ইকো "ইনবাউন্ড প্লেন / n"; $ কমান্ড = "শূকর w 17 1"; execInBackground ($ কমান্ড); } অন্যথায় {echo "কোন অন্তর্মুখী ফ্লাইট নেই" n "; $ কমান্ড = "শূকর w 17 0"; execInBackground ($ কমান্ড); }} ফাংশন decimal_to_time ($ decimal) {$ offset = 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); }/ * * দুটি পয়েন্টের মধ্যে গণনা (প্রাথমিক) বহন করে 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)*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 ফেরত দিন; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *// * * * অক্ষাংশ/দ্রাঘিমাংশ (সংখ্যাসূচক ডিগ্রিতে) দ্বারা নির্দিষ্ট দুটি পয়েন্টের মধ্যে দূরত্ব (কিলোমিটারে) গণনার জন্য হাভারসাইন সূত্র ব্যবহার করুন * থেকে: হাভারসাইন সূত্র - 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; // কিমি $ 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; # প্রদত্ত অক্ষাংশে সমান্তরাল ব্যাসার্ধ; $ parallel_radius = $ ব্যাসার্ধ*cos ($ lat); $ 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_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); } ফাংশন execInBackground ($ cmd) {if (substr (php_uname (), 0, 7) == "Windows") {pclose (popen ("start /B"। $ cmd, "r")); } অন্য {exec ($ cmd। "> /dev /null &"); }} ফাংশন checkForStopFlag () {// সম্পূর্ণ alচ্ছিক রিটার্ন (TRUE); } ফাংশন শুরু () {প্রতিধ্বনি "শুরু / n"; $ কমান্ড = "শূকর w 17 1"; execInBackground ($ কমান্ড); $ সক্রিয় = সত্য; যখন ($ সক্রিয়) {usleep (1000); // alচ্ছিক, যদি আপনি বিবেচনাশীল হতে চান যদি (microtime (true)> = $ nextTime) {fexp (); $ nextTime = মাইক্রোটাইম (সত্য) + অন্তর্বর্তী; } $ সক্রিয় = checkForStopFlag (); }} fexp (); শুরু (); ?>

ধাপ 14: এলইডি এবং শাটডাউন সুইচ ওয়্যারিং

এলইডি এবং শাটডাউন সুইচ ওয়্যারিং
এলইডি এবং শাটডাউন সুইচ ওয়্যারিং

এই প্রকল্পের ওয়্যারিং সত্যিই সহজ হতে পারে না। শুধুমাত্র একটি LED আছে যা পিন 17 এবং 270R রোধকারী ইনলাইনের সাথে স্থল সংযুক্ত।

আমি একটি পাওয়ার LED সহ একটি শাটডাউন এবং পাওয়ার আপ বোতাম অন্তর্ভুক্ত করি যা TXd ডেটা পিন বন্ধ করে দেয়। আপনি https://github.com/Howchoo/pi-power-button.git সাইটে https://howchoo.com/g/mwnlytk3zmm/how-to- থেকে শাটডাউন ফাংশন এবং প্রয়োজনীয় কোড সম্পর্কে আরও পড়তে পারেন। add-a-pow… আপনি এখানে পাওয়ার লাইট যোগ করার বিষয়ে পড়তে পারেন

প্রস্তাবিত: