فهرست مطالب:

یافتن راه خود با GPS: 9 مرحله
یافتن راه خود با GPS: 9 مرحله

تصویری: یافتن راه خود با GPS: 9 مرحله

تصویری: یافتن راه خود با GPS: 9 مرحله
تصویری: کنترول گوشی دیگران با گوشی خود از راه دور 2024, نوامبر
Anonim
راه خود را با GPS پیدا کنید
راه خود را با GPS پیدا کنید

یک تمرین سریع در درک و استفاده از داده های GPS

  • زمان مورد نیاز: 2 ساعت
  • هزینه: 75 تا 150 دلار

برای سازندگان ، استفاده از داده های زمین فضایی با کیفیت بالا در پروژه های الکترونیکی بسیار ارزان شده است. و در چند سال گذشته ، ماژول های گیرنده GPS (سیستم موقعیت یابی جهانی) بسیار متنوع تر ، قدرتمندتر شده و به راحتی با تخته های توسعه مانند Arduino ، PIC ، Teensy و Raspberry Pi ادغام می شوند. اگر به ساختن در اطراف GPS فکر کرده اید ، زمان خوبی را برای شروع انتخاب کرده اید.

مرحله 1: چگونه کار می کند

ماژول GPS یک گیرنده رادیویی کوچک است که سیگنالهای پخش شده در فرکانسهای شناخته شده توسط ناوگان ماهواره ها را پردازش می کند. این ماهواره ها در مدارهای تقریباً دایره ای به دور زمین می چرخند و اطلاعات بسیار دقیق موقعیت و ساعت را به زمین زیر منتقل می کنند. اگر گیرنده زمینی بتواند به اندازه کافی این ماهواره ها را "ببیند" ، می تواند از آنها برای محاسبه مکان و ارتفاع خود استفاده کند.

هنگامی که پیام GPS می رسد ، گیرنده ابتدا زمان پخش آن را بررسی می کند تا ببیند چه زمانی ارسال شده است. از آنجا که سرعت یک موج رادیویی در فضا ثابت است (ج) ، گیرنده می تواند زمان پخش و دریافت را برای تعیین مسیری که سیگنال طی کرده است ، مقایسه کند. هنگامی که فاصله خود را از چهار یا چند ماهواره شناخته شده تعیین کرد ، محاسبه موقعیت خود یک مشکل نسبتاً مثلث سه بعدی است. اما برای انجام سریع و دقیق ، گیرنده باید بتواند اعداد را از 20 جریان داده به طور همزمان خرد کند. از آنجایی که سیستم GPS دارای هدف منتشر شده ای است که می تواند در همه جای زمین قابل استفاده باشد ، سیستم باید اطمینان حاصل کند که حداقل چهار ماهواره - ترجیحاً بیشتر - در هر زمان از هر نقطه از کره زمین قابل مشاهده است. در حال حاضر 32 ماهواره GPS در یک ابر پراکنده به ارتفاع 20 هزار کیلومتر رقص دقیق را انجام می دهند.

مرحله 2: طرفداران واقعیت

GPS نمی تواند بدون نظریه نسبیت اینشتین کار کند ، زیرا باید جبران 38 میکرو ثانیه ای شود که ساعت های اتمی در حال گردش در هر روز از اتساع زمان در میدان گرانشی زمین به دست می آورند.

مرحله 3: شروع به کار

شروع شدن
شروع شدن

پروژه شما هرچه که باشد ، ادغام GPS ساده است. اکثر ماژول های گیرنده با یک پروتکل سریال ساده ارتباط برقرار می کنند ، بنابراین اگر می توانید یک پورت سریال اضافی در برد کنترل خود پیدا کنید ، برای ایجاد اتصال فیزیکی فقط چند مشت سیم طول می کشد. و حتی اگر نه ، اکثر کنترلرها از حالت سریال شبیه سازی شده "نرم افزار" پشتیبانی می کنند که می توانید از آن برای اتصال به پین های دلخواه استفاده کنید.

برای مبتدیان ، ماژول Adafruit’s Ultimate GPS Breakout یک انتخاب خوب است. محصولات رقابتی زیادی در بازار وجود دارد ، اما Ultimate یک عملکرد خوب با قیمت مناسب است و دارای سوراخ های بزرگی است که به راحتی لحیم می شوند یا به یک تخته نان متصل می شوند.

ابتدا زمین و برق را وصل کنید. از نظر آردوینو ، این بدان معناست که یکی از پین های GND میکروکنترلر را به GND ماژول و پین +5V را به VIN ماژول وصل کنید. برای مدیریت انتقال داده ها ، همچنین باید پین های TX و RX ماژول را به آردوینو متصل کنید. من قصد دارم پینهای آردوینو 2 (TX) و 3 (RX) Arduino را برای این منظور انتخاب کنم ، حتی اگر پین 0 و 1 به طور خاص برای استفاده به عنوان "پورت سریال سخت افزاری" یا UART طراحی شده اند. چرا؟ زیرا من نمی خواهم تنها UART این پردازنده های AVR ارزان قیمت را هدر دهم. UART آردوینو به کانکتور USB داخلی متصل است و من دوست دارم آن را برای اشکال زدایی به رایانه وصل کنم.

مرحله 4: یک انگشت در جریان داده

یک انگشت در جریان اطلاعات
یک انگشت در جریان اطلاعات

بلافاصله با اعمال قدرت ، یک ماژول GPS ارسال تکه های داده متنی را در خط TX خود شروع می کند. ممکن است هنوز یک ماهواره واحد را نبیند ، به ویژه یک "تعمیر" نداشته باشد ، اما شیر داده بلافاصله روشن می شود و دیدن آنچه بیرون می آید جالب است. اولین طرح ساده ما (در زیر) چیزی جز نمایش این داده های پردازش نشده انجام نمی دهد.

#شامل #تعریف RXPin 2

#تعریف TXPin 3#تعریف GPSBaud 4800

#تعریف کنسول باود 115200

// اتصال سریال به دستگاه GPSSoftwareSerial ss (RXPin ، TXPin) ؛

void setup () {

Serial.begin (ConsoleBaud) ؛

ss.begin (GPSBaud) ؛

Serial.println ("GPS مثال 1") ؛

Serial.println ("نمایش داده های خام NMEA منتقل شده توسط ماژول GPS.") ؛

Serial.println ("توسط Mikal Hart") ؛ Serial.println ()؛

}

حلقه خالی ()

{if (ss.available ()> 0) // با رسیدن هر نویسه…

Serial.write (ss.read ())؛ //… آن را روی کنسول بنویسید

}

توجه: این طرح پین دریافت (RXPin) را 2 تعریف می کند ، هرچند قبلاً گفتیم که پین فرستنده (TX) به پین 2 متصل می شود. این یک منبع گیج کننده رایج است. RXPin پین دریافتی (RX) از نظر آردوینو است. به طور طبیعی ، باید به پین انتقال ماژول (TX) متصل شود و بالعکس.

این طرح را بارگذاری کرده و Serial Monitor را در 115 ، 200 baud باز کنید. اگر همه چیز در حال کار است ، باید یک جریان متراکم و بی پایان از رشته های متن را با کاما جدا کنید. هر کدام شبیه تصویر دوم در ابتدای پاراگراف خواهند بود.

این رشته های متمایز به عنوان جملات NMEA شناخته می شوند ، زیرا این قالب توسط انجمن ملی الکترونیک دریایی ابداع شده است. NMEA تعدادی از این جملات را برای داده های ناوبری اعم از ضروری (مکان و زمان) تا باطنی (نسبت سیگنال به نویز ماهواره ، واریانس مغناطیسی و غیره) تعریف می کند. سازندگان در مورد نوع جمله ای که گیرندگان آنها استفاده می کنند ناسازگار هستند ، اما GPRMC ضروری است. هنگامی که ماژول شما برطرف می شود ، باید تعداد مناسبی از این جملات GPRMC را مشاهده کنید.

مرحله 5: خود را بیابید

تبدیل خروجی ماژول خام به اطلاعاتی که برنامه شما واقعاً می تواند از آن استفاده کند بی اهمیت نیست. خوشبختانه کتابخانه های بزرگی در دسترس هستند که این کار را برای شما انجام می دهند. اگر از Ultimate Breakout آنها استفاده می کنید ، کتابخانه GPS Adafruit محبوب لیمور فرید یک انتخاب مناسب است. برای فعال کردن ویژگی های منحصر به فرد Ultimate (مانند ثبت اطلاعات داخلی) نوشته شده است و برخی از زنگ ها و سوت های خاص خود را اضافه می کند. با این حال ، کتابخانه تجزیه و تحلیل مورد علاقه من - و البته در اینجا من کاملاً بی طرف هستم - کتابی است که من نوشتم به نام TinyGPS ++. من آن را جامع ، قدرتمند ، مختصر و آسان برای استفاده طراحی کردم. بیایید آن را برای یک چرخش در نظر بگیریم.

مرحله 6: برنامه نویسی با TinyGPS ++

از دید برنامه نویس ، استفاده از TinyGPS ++ بسیار ساده است:

1) یک شی gps ایجاد کنید.

2) هر کاراکتری را که از ماژول به شی می رسد با استفاده از gps.encode () مسیریابی کنید.

3) هنگامی که می خواهید موقعیت یا ارتفاع یا زمان یا تاریخ خود را بدانید ، کافی است شی gps را پرس و جو کنید.

#شامل #شامل شود

#تعریف RXPin 2

#تعریف TXPin 3

#تعریف GPSBaud 4800

#تعریف کنسول باود 115200

// اتصال سریال به دستگاه GPSSoftwareSerial ss (RXPin ، TXPin) ؛

// شیء TinyGPS ++

TinyGPSPlus gps؛

void setup () {

Serial.begin (ConsoleBaud) ؛

ss.begin (GPSBaud) ؛

Serial.println ("GPS مثال 2") ؛

Serial.println ("یک ردیاب ساده با استفاده از TinyGPS ++.")؛

Serial.println ("توسط Mikal Hart") ؛

Serial.println ()؛

}

حلقه خالی () {

// اگر کاراکترهایی از GPS وارد شده باشد ، /

/ آنها را به شی ++ TinyGPS ارسال کنید

while (ss.available ()> 0)

gps.encode (ss.read ()) ؛

// بیایید مکان و ارتفاع جدید را نمایش دهیم

// هر زمان که هر یک از آنها به روز شده است

if (gps.location.isUpdated () || gps.altitude.isUpdated ())

{

Serial.print ("مکان:") ؛

Serial.print (gps.location.lat () ، 6) ؛

Serial.print ("،") ؛

Serial.print (gps.location.lng () ، 6) ؛

Serial.print ("ارتفاع:")؛

Serial.println (gps.altitude.meters ()) ؛

}

}

برنامه دوم ما به طور مداوم مکان و ارتفاع گیرنده را نشان می دهد و از TinyGPS ++ برای تجزیه کمک می کند. در یک دستگاه واقعی ، ممکن است این داده ها را به کارت SD وارد کرده یا روی LCD نمایش دهید. کتابخانه را بگیرید و FindingYourself.ino (در بالا) را ترسیم کنید. طبق معمول ، کتابخانه را در پوشه کتابخانه های Arduino نصب کنید. طرح را در آردوینو بارگذاری کرده و Serial Monitor را در 115 ، 200 baud باز کنید. باید موقعیت مکانی و ارتفاع خود را در زمان واقعی مشاهده کنید. برای مشاهده دقیق موقعیت خود ، برخی از مختصات عرض جغرافیایی/طول جغرافیایی را در Google Maps بچسبانید. حالا لپ تاپ را وصل کرده و برای قدم زدن یا رانندگی بروید. (اما به یاد داشته باشید که چشم خود را در جاده نگه دارید!)

مرحله 7: "بعد چهارم"

اگرچه ما GPS را با مکان در فضا مرتبط می کنیم ، اما فراموش نکنید که این ماهواره ها زمان و مهرهای داده را نیز ارسال می کنند. ساعت GPS به طور متوسط تا یک ده میلیونم ثانیه دقیق است و حد نظری حتی بیشتر است. حتی اگر برای پیگیری زمان فقط به پروژه خود نیاز دارید ، یک ماژول GPS همچنان ارزان ترین و آسان ترین راه حل است.

برای تبدیل FindingYourself.ino به یک ساعت فوق العاده دقیق ، فقط چند خط آخر را مانند این تغییر دهید:

if (gps.time.isUpdated ()) {

char buf [80]؛

sprintf (buf، "The time is٪ 02d:٪ 02d:٪ 02d"، gps.time.hour ()، gps.time.minute ()، gps.time.second ())؛ Serial.println (buf) ؛

}

مرحله 8: راه خود را بیابید

یافتن راه خود
یافتن راه خود

سومین و آخرین برنامه ما نتیجه یک چالش شخصی برای نوشتن یک طرح TinyGPS ++ خواندنی ، در کمتر از 100 خط کد است که با استفاده از دستورالعمل های متنی ساده مانند "مستقیم نگه دارید" یا "به سمت چپ منحرف شوید" کاربر را به مقصد هدایت می کند.

#شامل #شامل شود

#تعریف RXPin 2

#تعریف TXPin 3

#تعریف GPSBaud 4800

#تعریف کنسول باود 115200

// اتصال سریال به دستگاه GPSSoftwareSerial ss (RXPin ، TXPin) ؛

// شی TinyGPS ++ TinyGPSPlus gps؛

unsigned long lastUpdateTime = 0؛

#تعریف EIFFEL_LAT 48.85823#تعریف EIFFEL_LNG 2.29438

/* این مثال یک چارچوب اساسی برای نحوه استفاده از مسیر و فاصله برای هدایت یک فرد (یا هواپیمای بدون سرنشین) به مقصد را نشان می دهد. این مقصد برج ایفل است. آن را در صورت لزوم تغییر دهید

ساده ترین راه برای بدست آوردن مختصات lat/long این است که روی مقصد در Google Maps (maps.google.com) راست کلیک کرده و "What's here؟" را انتخاب کنید. این مقدار دقیق را در کادر جستجو قرار می دهد

*/

void setup () {

Serial.begin (ConsoleBaud) ؛

ss.begin (GPSBaud) ؛

Serial.println ("مثال GPS 3") ؛

Serial.println ("یک سیستم راهنمای نه چندان جامع") ؛

Serial.println ("توسط Mikal Hart") ؛

Serial.println ()؛

}

حلقه خالی () {

// اگر کاراکترهایی از GPS وارد شده است ، // آنها را در حالی که (ss.available ()> 0) gps.encode (ss.read ()) است به شیء TinyGPS ++ ارسال کنید.

// هر 5 ثانیه یک بروزرسانی انجام دهید

if (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ()؛

Serial.println ()؛

// وضعیت فعلی ما را تعیین کنید

double distanceToDestination = TinyGPSPlus:: distanceBetween

gps.location.lat () ، gps.location.lng () ، EIFFEL_LAT ، EIFFEL_LNG) ؛

course courseToDestination = TinyGPSPlus:: courseTo

gps.location.lat () ، gps.location.lng () ، EIFFEL_LAT ، EIFFEL_LNG) ؛

const char *directionToDestination = TinyGPSPlus:: cardinal (courseToDestination)؛

int courseChangeNeeded = (int) (360+ courseToDestination - gps.course.deg ())٪ 360؛

// اشکال زدایی Serial.print ("DEBUG: Course2Dest:") ؛

Serial.print (courseToDestination) ؛

Serial.print ("CurCourse:") ؛

Serial.print (gps.course.deg ()) ؛

Serial.print ("Dir2Dest:") ؛

Serial.print (directionToDestination) ؛

Serial.print ("RelCourse:")؛

Serial.print (courseChangeNeeded) ؛

Serial.print ("CurSpd:") ؛

Serial.println (gps.speed.kmph ()) ؛

// در فاصله 20 متری مقصد؟ ما اینجا هستیم

if (distanceToDestination <= 20.0)

{Serial.println ("تبریک می گویید!")؛

خروج (1) ؛

}

Serial.print ("DISTANCE:")؛ Serial.print (distanceToDestination) ؛

Serial.println ("متر برای رفتن.")؛

Serial.print ("دستورالعمل:")؛

// ایستاده؟ فقط نشان دهید که به کدام سمت بروید

if (gps.speed.kmph () <2.0)

{

Serial.print ("سر") ؛

Serial.print (directionToDestination) ؛

Serial.println (".") ؛

برگشت؛

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("مستقیم ادامه دهید!") ؛

else if (courseChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println ("کمی به سمت چپ بپیچید.")؛

else if (courseChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println ("کمی به سمت راست بپیچید.")؛

else if (courseChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println ("به چپ بپیچید.")؛

else if (courseChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println ("به راست بپیچید.")؛

دیگری

Serial.println ("به طور کامل بچرخید.")؛

}

}

با استفاده از روش TinyGPS ++ courseTo () ، هر 5 ثانیه کد مکان و مسیر کاربر (جهت سفر) را ضبط می کند و بلبرینگ (جهت مقصد) را محاسبه می کند. با مقایسه این دو بردار ، یک پیشنهاد برای ادامه مستقیم یا چرخش ایجاد می شود ، همانطور که در زیر نشان داده شده است.

طرح FindingYourWay.ino (بالا) را کپی کرده و در IDE آردوینو بچسبانید. مقصدی را در فاصله 1 کیلومتری یا 2 کیلومتری تعیین کنید ، طرح را در آردوینو بارگذاری کنید ، روی لپ تاپ خود اجرا کنید و ببینید آیا شما را به آنجا راهنمایی می کند یا خیر. اما مهمتر اینکه ، کد را مطالعه کنید و نحوه عملکرد آن را درک کنید.

مرحله نهم: جلوتر بروید

پتانسیل خلاق GPS بسیار زیاد است. یکی از رضایت بخش ترین چیزهایی که من تا به حال ساخته ام جعبه پازل دارای GPS است که فقط در یک مکان از قبل برنامه ریزی شده باز می شود. اگر قربانی شما می خواهد گنج را در داخل قفل کند ، باید بفهمد آن مکان مخفی کجاست و از نظر فیزیکی جعبه را به آنجا بیاورد. اولین ایده محبوب پروژه نوعی دستگاه ورود به سیستم است که موقعیت و ارتفاع دقیقه به دقیقه مثلاً یک کوهنورد را که در مسیر ترن پنین قدم می زند ثبت می کند. یا یکی از آن ردیاب های مغناطیسی زیرکانه ای که عوامل DEA در Breaking Bad روی اتومبیل های افراد بد چسبیده اند چطور؟ هر دو کاملاً امکان پذیر است و ساخت آنها احتمالاً سرگرم کننده خواهد بود ، اما من شما را تشویق می کنم که بیشتر از چیزهایی که می توانید در آمازون خریداری کنید ، بیشتر فکر کنید. آنجا دنیای بزرگی است تا آنجا که می توانید دور و بر بروید.

توصیه شده: