وقتی صحبت از ماهواره میشه، ذهن همه میره سمت سختافزارهای پیچیده، پنلهای خورشیدی، آنتنها و موتورهای پیشران. اما واقعیت اینه که مغز متفکر هر ماهوارهای، نرمافزار پرواز اونه. همون کدی که تصمیم میگیره ماهواره کجاست، به کدوم سمت بره، کی عکس بگیره و کی با زمین حرف بزنه.
یک سال پیش تصمیم گرفتم بدون هیچ پیشزمینه رسمی دانشگاهی، یه نرمافزار پرواز کامل برای ماهوارههای مکعبی (CubeSat) به زبان سی بنویسم. نتیجه شد یه چارچوب نرمافزاری سه هزار خطی که حالا میخوام داستانش رو باهاتون به اشتراک بذارم.
لینک کد در اخر متن قرار داده شده.
نرمافزار پرواز یعنی چی دقیقاً؟
تصور کنید یه جعبه فلزی به اندازه یه قوطی نوشابه رو با موشک پرتاب میکنن به فضا. این جعبه با سرعت هفت هزار متر بر ثانیه دور زمین میچرخه، توی خلأ کامل، با دمایی که از منفی صد تا مثبت صد درجه تغییر میکنه. حالا این جعبه باید:
بفهمه کجاست (با حسگرهای خورشید، ستاره، و جیپیاس)
خودش رو به سمت درست بچرخونه (با چرخهای عکسالعملی)
با زمین حرف بزنه (با رادیو)
دادههای علمی رو ذخیره کنه (روی کارت حافظه)
اگه یه جای کار خراب شد، خودش رو نجات بده
همه این کارها رو نرمافزار پرواز انجام میده.
توی این نرمافزار چی هست؟
ماهواره باید بدونه به کدوم سمت داره نگاه میکنه و بتونه خودش رو بچرخونه. من سه حالت مختلف براش طراحی کردم:
حالت کاهش دوران اولیه (Detumble): وقتی ماهواره تازه از موشک جدا میشه، داره با سرعت زیاد دور خودش میچرخه. این بخش با استفاده از چرخهای عکسالعملی، این دوران رو آروم آروم خنثی میکنه.
حالت جهتگیری به سمت خورشید (Sun Acquisition): بعد از آروم شدن، ماهواره باید پنلهای خورشیدیش رو به سمت خورشید بگیره تا باتریهاش شارژ بشن. این بخش با استفاده از حسگرهای خورشید، جهت درست رو پیدا میکنه.
حالت تثبیت بر روی زمین (Nadir Pointing): وقتی باتریها پر شدن، ماهواره باید دوربین یا حسگر علمیش رو به سمت زمین بگیره. این بخش با استفاده از محاسبات مداری، جهت نادیر (دقیقاً رو به زمین) رو حفظ میکنه.
همه این محاسبات با کواترنیونها (یه روش ریاضی برای نمایش چرخش در فضا) انجام میشه که از قفل شدن ژیروسکوپ جلوگیری میکنه.
ماهواره چطور با زمین حرف میزنه؟ از یه پروتکل قدیمی ولی فوقالعاده قابل اعتماد به اسم AX.25 استفاده کردم. همون پروتکلی که رادیوآماتورها از دهه هشتاد میلادی استفاده میکنن.
دادهها هم توی بستههای CCSDS بستهبندی میشن. این استانداردیه که ناسا و آژانس فضایی اروپا برای تمام ماموریتهاشون استفاده میکنن. یعنی ماهواره من با همون زبونی حرف میزنه که ماهوارههای مریخ نورد حرف میزنن.
ماهواره توی فضا مثل یه خونهست که باید مصرف برقش رو مدیریت کنه. پنلهای خورشیدی برق تولید میکنن، باتریها ذخیره میکنن، و بارهای مختلف (پردازنده، رادیو، دوربین) مصرف میکنن.
من یه شبیهساز کامل برای این سامانه نوشتم که:
شارژ و دشارژ باتری رو مدل میکنه
اگه ولتاژ باتری خیلی پایین بیاد، بارهای غیرضروری رو خاموش میکنه
اگه ماهواره توی سایه زمین باشه (گرفتگی)، مصرف رو به حداقل میرسونه
فضا جای خطرناکیه. تابشهای کیهانی میتونن بیتهای حافظه رو عوض کنن (پدیدهای به اسم Single Event Upset). پردازنده ممکنه هنگ کنه. حسگرها ممکنه داده اشتباه بفرستن.
برای مقابله با این مشکلات، چند لایه محافظتی پیاده کردم:
پاکساز حافظه (Memory Scrubber): هر شصت ثانیه، متغیرهای حیاتی رو بازنویسی میکنه تا از خطاهای ناشی از تابش جلوگیری بشه.
ساعت نگهبان (Watchdog Timer): اگه نرمافزار به هر دلیلی قفل کنه، یه تایمر سختافزاری بعد از چند ثانیه کل سامانه رو ریست میکنه.
حالت ایمن (Safe Mode): اگه یه مشکل جدی پیش بیاد (مثلاً باتری خیلی خالی بشه یا دما از حد بگذره)، ماهواره وارد یه حالت کممصرف میشه و فقط منتظر فرمان از زمین میمونه.
ماهواره همیشه توی دید ایستگاه زمینی نیست. پس باید دادههاش رو ذخیره کنه تا وقتی از بالای ایستگاه رد میشه، یکجا بفرسته.
من یه سیستم فایل ساده برای کارت حافظه پیاده کردم که:
بخش بوت مشابه FAT12 داره
تلهمتری رو هر سی ثانیه توی فایل TELEM.BIN ذخیره میکنه
دادههای علمی رو توی فایلهای جداگونه مثل SCI_01234.BIN نگه میداره
نرمافزار من میتونه با چندتا حسگر استاندارد فضایی ارتباط بگیره:
جیپیاس (UBX Protocol): موقعیت دقیق ماهواره رو میده (طول و عرض جغرافیایی، ارتفاع، سرعت)
ردیاب ستاره (Star Tracker): با عکسبرداری از ستارهها، وضعیت ماهواره رو با دقت صدم درجه تعیین میکنه
۱. بومیسازی فناوری فضایی: ایران داره توی حوزه پرتاب ماهواره پیشرفت میکنه. ولی نرمافزار پرواز همیشه یه بخش چالشبرانگیز بوده. این پروژه نشون میده که میشه توی داخل کشور هم نرمافزار استاندارد فضایی نوشت.
۲. متنباز بودن: من این کد رو به صورت عمومی منتشر کردم. هر تیم دانشجویی که بخواد ماهواره مکعبی بسازه، میتونه از این کد به عنوان پایه استفاده کنه.
۳. سطح جهانی: این نرمافزار از استانداردهای ناسا و آژانس فضایی اروپا پیروی میکنه. یعنی یه نوجوون ایرانی توی اتاقش کدی نوشته که همسطح بهترین آزمایشگاههای فضایی دنیاست.
برای دریافت کد (رایگان) به ایدی بنده در اپلیکیشن بله پیام بدهید : extramoz