مسیریاب آفلاین و خورشیدی (پروژه TrailNAV)
تا حالا پیش اومده تو کوه و دشت یا مسیرهای آفرود، شارژ گوشیت به خاطر استفاده از GPS زود تموم بشه یا کلا آنتن نداشته باشی؟ گوشیهای هوشمند برای مسیریابی عالی هستن، اما تو طبیعتگردی چندتا مشکل بزرگ دارن: باتریشون زود خالی میشه، زیر نور آفتاب صفحهشون درست دیده نمیشه و کار با لمس صفحه وقتی دستکش دستته یا بارون میاد، حسابی کلافهکنندهست. به همین خاطر تصمیم گرفتیم تو این آموزش از آیسیمدار بریم سراغ ساخت یک گجت مسیریاب حرفهای و کاملا مستقل!
دستگاهی که میخوایم بسازیم اسمش TrailNAV هست. این گجت یک مسیریاب آفلاین و کممصرفه که با انرژی خورشیدی شارژ میشه و نیازی به اینترنت یا نقشهٔ آنلاین نداره. با استفاده از نمایشگر ePaper (جوهر الکترونیک)، مصرف باتری به حداقل رسیده و حتی زیر شدیدترین نور آفتاب هم کاملا خواناست.
علاوه بر این، قطعاتی مثل ماژول GPS و قطبنمای دیجیتال بهمون کمک میکنن تا بدون نیاز به گوشی، جهت و فاصله تا مقصد رو پیدا کنیم. پس اگه اهل طبیعتگردی، دوچرخهسواری یا کمپینگ هستی، قطعاتی که تو لیست پایین معرفی کردم رو آماده کن تا با هم این گجت خفن و کاربردی رو بسازیم!
- نمایش دقیق جهت حرکت
- راهنمای رسیدن به مقصد
- مصرف انرژی بسیار پایین
- خوانایی عالی نمایشگر زیر نور مستقیم آفتاب
- دوام طولانیمدت باتری
قطعات موردنیاز
- برد Seeed Studio XIAO ESP32-C6
- نمایشگر ePaper (جوهر الکترونیک) 2.7 اینچی Waveshare (رزولوشن 264x176)
- ماژول GPS مدل NEO-M8N
- ماژول قطبنمای دیجیتال QMC5883L
- باتری لیتیوم-یون 3.7 ولت به همراه جا باتری
- ماژول شارژر خورشیدی MPPT
- پنل خورشیدی کوچک 6 ولتی
- کلید قطع و وصل (On/Off)
- سیم جامپر
- ورق فوم برد PVC (سانبرد)
- هویه
- کاتر
- چسب
ویژگیهای اصلی این گجت
ایدهٔ ساخت TrailNAV از یه سؤال ساده شروع شد: "چی میشد اگه یه دستگاه مسیریاب سبک داشتیم که میتونست روزها تو طبیعت کار کنه، بدون اینکه به شبکه موبایل یا شارژ مداوم نیاز داشته باشه؟"
همونطور که میدونی، گوشیهای هوشمند برای محیطهای خشن و دورافتاده خیلی مناسب نیستن. مصرف بالای GPS باعث میشه باتری زود خالی بشه، نور آفتاب دیدن صفحه رو سخت میکنه و دستکش یا بارون هم کار با تاچ رو مختل میکنن. تازه عدم آنتندهی هم یه دردسر دیگهست! گجت TrailNAV برای حل دقیقا همین مشکلات طراحی شده.
نمایشگر فوقکممصرف ePaper: صفحه نمایش 2.7 اینچی جوهر الکترونیکی فقط موقع تغییر تصویر انرژی مصرف میکنه. این یعنی عمر باتری بهشدت بالا میره و زیر آفتاب هم مثل یه تکه کاغذ خواناست.
مسیریابی ماهوارهای بدون اینترنت: با کمک ماژول GPS مدل NEO-M8N، این دستگاه میتونه جهت، مسافت باقیمونده و راهنمای مقصد رو کاملا آفلاین محاسبه کنه. از طرفی ماژول قطبنمای QMC5883L هم بهصورت لحظهای جهت جغرافیایی رو بهت نشون میده.
شارژ مداوم با خورشید: یه پنل خورشیدی کوچیک پشت دستگاه قرار میگیره که از طریق ماژول MPPT باتری لیتیومی رو در طول روز شارژ میکنه تا خیالت از بابت تأمین انرژی راحت باشه.
رابط کاربری با دکمه فیزیکی: سه تا دکمهٔ ساده روی بدنه گذاشتیم تا حتی با دستکشهای ضخیم یا در حال حرکت هم بتونی راحت با دستگاه کار کنی.
عملکرد صددرصد آفلاین: این دستگاه هیچ نیازی به سیمکارت، سرور ابری یا نقشههای آنلاین نداره. برای همین، یه همراه بینقص برای کوهنوردی، دوچرخهسواری، کمپینگ و شرایط اضطراری به حساب میاد.
هدف ما این نیست که این دستگاه جای گوشی موبایل رو بگیره، بلکه میخوایم یه ابزار تخصصی و قابلاعتماد برای مسیریابی تو طبیعت داشته باشیم.
طراحی و ساخت قاب بدنه
قدم اول برای ساخت این گجت، تعیین ابعاد نهایی بدنه بر اساس اندازهٔ قطعات الکترونیکی بود. یه ابعاد جمعوجور 10 در 6.5 سانتیمتری در نظر گرفتیم تا راحت تو دست جا بشه و برای حمل در فضای باز ایدهآل باشه. برای زیباتر شدن ظاهر و خوشدستتر شدنش هم، گوشههای قاب رو با زاویه 45 درجه پخ زدیم.
قاب دستگاه رو با استفاده از ورق فوم برد PVC (سانبرد) طراحی کردیم. ساختار کلی شامل یه بخش کفی، چهار دیوارهٔ کناری و یه درپوش بالایی میشه. اول طرح رو تو نرمافزار کشیدیم و بعد روی کاغذ چاپ کردیم تا بتونیم به عنوان الگو ازش استفاده کنیم.
با کمک همون الگو، ورق PVC سهمیلیمتری رو با دقت خط کشیدیم و با استفاده از کاتر و خطکش فلزی برش زدیم و قاب رو سرهم کردیم.
بعد از ساخت قاب، تمام ماژولها رو سر جای خودشون محکم کردیم و با هویه و سیمهای جامپر اتصالات بینشون رو برقرار کردیم. تو قدم بعدی میتونی نقشهٔ دقیق سیمکشیها رو ببینی.
سیمکشی و اتصال قطعات به برد
برد ESP32-C6 مغز متفکر پروژه ماست و با تمام ماژولها شامل نمایشگر، GPS، قطبنما، دکمهها و سیستم تغذیه ارتباط برقرار میکنه.
نمایشگر ePaper از طریق پروتکل SPI به برد وصل میشه. برای این کار باید پین GPIO18 رو به MOSI، پین GPIO19 رو به SCK، پین GPIO21 رو به CS، پین GPIO22 رو به DC، پین GPIO23 رو به RST و در نهایت GPIO2 رو به پین BUSY متصل کنی. این نمایشگر با ولتاژ 3.3 ولت کار میکنه و وظیفهاش نشون دادن رابط کاربری دستگاهه.
قطبنمای QMC5883L از رابط I2C استفاده میکنه. پس پین GPIO0 رو برای SDA و پین GPIO1 رو برای SCL در نظر بگیر. این سنسور اطلاعات جهتیابی رو بهصورت لایو به سیستم میده.
ماژول GPS مدل NEO-M8N از طریق ارتباط UART دیتا میفرسته. پین GPIO17 رو به پایه TX ماژول GPS و پین GPIO16 رو به پایه RX اون وصل کن. ماژول GPS وظیفه داره طول و عرض جغرافیایی، سرعت، ارتفاع، زمان، تعداد ماهوارهها و مسیر حرکت رو برای ما مشخص کنه.
سه تا دکمهٔ فشاری هم داریم که بین پینهای برد و خط GND قرار میگیرن و تو حالت INPUT_PULLUP تنظیم میشن. پین GPIO6 برای دکمه چپ، GPIO5 برای دکمه راست و GPIO7 برای دکمه تأیید (OK) استفاده میشه.
یه باتری لیتیوم-یون 3.7 ولتی، انرژی کل سیستم رو از طریق ماژول شارژ MPPT تأمین میکنه. باتری به ترمینالهای B+ و B- ماژول شارژ وصل میشه و خروجیهای OUT+ و OUT- برق مدار ESP32-C6 رو تأمین میکنن. یه کلید راکر روی خط مثبت باتری قرار دادیم تا وقتی از دستگاه استفاده نمیکنی، بتونی کل جریان برق رو قطع کنی و باتری هدر نره.
در نهایت یه پنل خورشیدی به ورودی ماژول شارژ وصل میشه تا موقع استفاده تو فضای باز، باتری بهصورت خودکار شارژ بشه. اینطوری گجت ما کاملا مستقل و آفلاین کار میکنه.
برنامهنویسی و معماری کدهای دستگاه
نحوه کارکرد ترکیبی GPS و قطبنما
- دستگاه ما با ترکیب دادههای مسیریابی GPS و اطلاعات جهتیابی قطبنما، یه سیستم آفلاین و دقیق رو میسازه. این دو سنسور کنار هم قرار گرفتن تا ردیابی لحظهای، راهنمای جهت و مسیریابی رو بدون نیاز به اینترنت انجام بدن.
- ماژول GPS وظیفه داره موقعیت مکانی دقیق رو مشخص کنه و دیتای مختصات رو از طریق پروتکل UART برای برد ESP32-C6 بفرسته. کد ما با کمک کتابخانه TinyGPS++، این اطلاعات خام (NMEA) رو پردازش میکنه و پارامترهای مهمی مثل موقعیت فعلی، سرعت، ارتفاع و ساعت جهانی رو بیرون میکشه.
- وقتی یه مقصد رو مشخص میکنی، برنامه فاصله و زاویه انحراف از مسیر رو محاسبه میکنه. محاسبه فاصله نشون میده چقدر تا هدف راه داری و محاسبه زاویه بهت میگه مقصد نسبت به موقعیت الانت تو چه جهتی قرار داره.
- سیستم قطبنما از سنسور QMC5883L برای اندازهگیری میدان مغناطیسی زمین استفاده میکنه تا جهت دستگاه رو پیدا کنه. مزیتش اینه که برعکس GPS، قطبنما حتی وقتی ثابت ایستادی هم جهت رو دقیق نشون میده. این سنسور دائما زوایای بین 0 تا 360 درجه رو میفرسته تا به جهتهای اصلی مثل شمال و جنوب تبدیل بشه.
- حالا سیستم مسیریابی میاد زاویه انحراف GPS و جهت قطبنما رو با هم مقایسه میکنه تا یه دستورالعمل حرکتی تولید کنه. برنامه این زاویه نسبی رو محاسبه میکنه تا بفهمه باید کدوم وری بری.
- این زاویه نسبی تعیین میکنه که باید مستقیم بری، بپیچی به چپ یا راست. فلش روی صفحه هم دقیقا بر اساس همین زاویه میچرخه و جهت درست رو نشون میده.
- به جای رندر کردن نقشههای گرافیکی سنگین، از نمادهای گرافیکی ساده برای نشون دادن نقطه مقصد، موقعیت کاربر و فلش مسیریاب استفاده کردیم.
راهاندازی اولیه GPS و قفل شدن روی ماهوارهها
- وقتی دستگاه رو روشن میکنی، ماژول GPS شروع به جستجوی ماهوارههای اطراف میکنه تا بتونه موقعیت رو پیدا کنه. چون سیگنالها مستقیما از ماهوارهها میان، بهتره تو فضای باز باشی تا دستگاه زودتر قفل بشه و اطلاعات دقیقی بده. تو محیطهای بسته یا بین ساختمونهای بلند، سیگنال ضعیف میشه.
- تو مرحله اول راهاندازی، ماژول در حال اسکن ماهوارههاست و اطلاعاتی مثل سرعت و ارتفاع رو جمعآوری میکنه. وقتی سیگنال ثابت بشه و تعداد ماهوارههای کافی پیدا بشن، یه چراغ الایدی آبی روی ماژول GPS شروع به چشمک زدن میکنه. این چشمک زدن یعنی دستگاه با موفقیت قفل شده و داره دیتای معتبر رو برای برد میفرسته.
- بعد از این اتفاق، گجت ما شروع به نمایش اطلاعات لایو مثل طول و عرض جغرافیایی، سرعت، ساعت و تعداد ماهوارهها روی صفحه ePaper میکنه و سیستم مسیریابی رسما فعال میشه.
برای برنامهنویسی این پروژه از محیط Arduino IDE استفاده کردیم. پکیج بردهای ESP32 رو باید نصب کنی و برد ESP32C6 Dev Module رو از لیست انتخاب کنی. برای ارتباط با قطعات هم از چندتا کتابخونه استفاده کردیم.
- کتابخانه GxEPD2: برای راهاندازی نمایشگر ePaper
- کتابخانه TinyGPS++: برای تحلیل دادههای ماژول GPS
- کتابخانه DFRobot QMC5883L: برای راهاندازی ماژول قطبنما
اول از همه این کتابخونهها رو به هدر برنامه تو آردوینو اضافه کن:
#include <SPI.h>
#include <Wire.h>
#include <TinyGPS++.h>
#include <QMC5883LCompass.h>
#include <GxEPD2_BW.h>
#include <Fonts/FreeSerifBold9pt7b.h>
تو بخش setup باید سختافزارها رو مقداردهی اولیه کنی:
- راهاندازی ارتباط سریال مانیتور
- پیکربندی ارتباط UART ماژول GPS
- مقداردهی اولیه صفحه نمایشگر
- راهاندازی ماژول قطبنما
- تنظیم پینهای مربوط به دکمهها
تعریف حالتهای مختلف صفحه (Screen Modes):
enum ScreenMode
{
SCREEN_STATUS,
SCREEN_DESTINATIONS,
SCREEN_COMPASS,
SCREEN_NAVIGATION
};
الگوریتم کلی اجرای کد در دستگاه به شکل زیره:
BOOT DEVICE
WELCOME SCREEN
STATUS SCREEN
SELECT DESTINATION
START NAVIGATION
LIVE GPS + COMPASS GUIDANCE
جمعبندی و نتیجهگیری
دیدی چقدر جالب بود؟ ما موفق شدیم یه گجت مسیریاب خورشیدی و جمعوجور بسازیم که کاملا برای سفرهای خارج از جاده و طبیعتگردی طراحی شده. با ترکیب سیستم موقعیتیاب GPS، سنسور قطبنما و یه نمایشگر ePaper کممصرف، حالا یه دستگاه داریم که بدون نیاز به اینترنت و سرویسهای ابری، تو رو تا مقصد راهنمایی میکنه.
این دستگاه مفهوم مسیریابی رو خیلی ساده و کاربردی پیادهسازی کرده؛ از مختصات لایو استفاده میکنه، زاویهها رو محاسبه میکنه و بهترین مسیر حرکت رو با یه فلش نشون میده.
خوبی کار اینجاست که ما به جای درگیر شدن با رندر نقشههای سنگین گرافیکی، یه رابط کاربری نمادین و سبک ساختیم که روی محاسبه مسافت، جهت و راهنمایی لحظهای تمرکز داره و تجربهٔ جذابی از یه مسیریاب آفلاین رو ارائه میده.
این پروژه نشون داد که چطور میشه با ترکیب سنسورها و یه برنامهنویسی اصولی، ابزاری ساخت که تو شرایط سخت محیطی هم بشه بهش اعتماد کرد. امیدواریم از این آموزش در سایت آیسیمدار حسابی لذت برده باشی و این گجت کاربردی رو برای سفرهای بعدیت بسازی. اگه سؤالی داشتی یا نظری دربارهٔ این پروژه به ذهنت رسید، حتما تو بخش کامنتها برامون بنویس. موفق باشی!
فایلهای پیوست
تو میتونی اولین سازنده باشی!
اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر
این آموزش با استانداردهای اختصاصی آیسیمدار بازنویسی و بهینهسازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.








































گفتگوهای کاربران
هنوز نظری ثبت نشده؛ تو شروع کن!
هنوز نظری ثبت نشده؛ تو شروع کن!