مکانیابی با ماژول gps ، موقعیتیابی و تعیین محل یک جسم از دیرباز بحثی مهم به شمار میرفته است. امروز به مدد وجو ماهوارههای مختلف، به سادگی و رایگان میتوان موقعیت هر جسمی را تعیین نمود. شرکت ublox با تولید ماژولهای مختلف مکانیابی، یکی از شرکتهای پیشرو در زمینه تولید تجهیزات مکانیابی ماژول Gps است. یکی از ماژولهای پر استفاده این شرکت، ماژول Ublox Neo6M است که در اکثر پروژههای مکان یابی میتوان رد این ماژول را مشاهده نمود. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
بررسی ماژول Ublox-Neo6m
ماژول Ublox Neo6M پس از روشن شدن، دادههای خود در غالب فرمتی تحت عنوان (NMEA (National Marine Electronic Association که توسط نیروی دریایی ایالات متحده بنا نهاده شده است، به ما ارسال مینماید. ماژول gps، دادههای خود را تحت این فرمت به صورت بستههای با نامهای زیر ارسال مینماید:
- RMC
- GLL
- GSA
- GSV
- VTG
هر کدام از بستههای فوق، شامل فیلدهای اطلاعاتی هستند که بیانگر طول جغرافیایی، عرض جغرافیایی، سرعت، ارتفاع از سطح دریا، جهت حرکت، تعداد ماهوارههای قابل رویت، نوع ماهوارهها، میزان خطای مکانی و…. را ارائه میدهند. از آنجاییکه پس از اتصال ماژول gps به تغذیه، کلیه دادههای فوق دائما به میکروکنترلر از طریق رابط سریال UART ارسال میگردند، با توجه به حجم پایین حافظه میکروکنترلرها، ممکن است بافر سریال میکروکنترلر به سرعت پر شده و کار پردازش دادههای دریافتی با اختلال مواجه گردد؛ چراکه میتوان انتظار داشت که بافر سریال میکروکنترلر از نوع بافر حلقوی بوده و پس از پر شدن بافر، دادههای جدید از ابتدا بر روی بافر نوشته شده و اطلاعات قبلی از دست بروند. به همین جهت، بهینهسازی دادههای دریافتی از سوی ماژول gps، نیازی جدی محسوب میگردد. خوشبختانه این مشکل توسط طراحان این ماژول پیشبینی شده و میتوان تعیین نمود که چه دادههایی از سوی ماژول ارسال گردند و دادههای غیر لازم، فیلتر گردند.
ارسال دستورات
به همین جهت، با ارسال دستورات مشخص به ماژول، میتوان از ارسال پکتها، مانع شد. به طور کلی، داده RMC بهینه ترین دادهها شامل طول، عرض، سرعت و… را ارایه میدهد. بنابراین، با ارسال دستورات زیر، میتوان از ارسال سایر بستهها توسط ماژول gps جلوگیری نمود:
$PUBX,40,GLL,0,0,0,0*5C\r\n $PUBX,40,GSA,0,0,0,0*4E\r\n $PUBX,40,GSV,0,0,0,0*59\r\n $PUBX,40,VTG,0,0,0,0*5E\r\n $PUBX,40,GGA,0,0,0,0*5A\r\n
با ارسال دستورت فوق به ماژول gps، هر یک از بستههای غیر از بسته RMC فیلتر شده و دیگر ارسال نمیگردند. بدین ترتیب، میکروکنترلر تنها فیلدهای اطلاعاتی حاوی بسته RMC را دریافت خواهد نمود و این امر سبب سبک شدن بافر سریال شده و فرآیند جداسازی اطلاعات دریافتی از ماژول، بسیار کوتاه خواهد شد.
کد AVR تحت محیط کدویژن
در زیر کدهای پروژه قرار گرفته شده است. کدها تحت میکروکنترلر AVR Atmega16 و محیط کدویژن Codevision، توسعه یافته است:
/********************************************* This program was produced by the CodeWizardAVR V1.23.8c Standard Automatic Program Generator © Copyright 1998-2003 HP InfoTech s.r.l. http://www.hpinfotech.ro e-mail:office@hpinfotech.ro Project : Version : Date : 4/22/2019 Author : Moeen Saberi Company : Comments: Chip type : ATmega16 Program type : Application Clock frequency : 8.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *********************************************/ #include <mega16.h> // Standard Input/Output functions #include <stdio.h> #include <delay.h> // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTA=0x00; DDRA=0x00; // Port B initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTB=0x00; DDRB=0x00; // Port C initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0x00; TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off GICR|=0x00; MCUCR=0x00; MCUCSR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off // USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x33; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off // Analog Comparator Output: Off ACSR=0x80; SFIOR=0x00; // فرامین مربوط به توقف ارسال دادههای اضافی توسط ماژول printf("$PUBX,40,GGA,0,0,0,0*5A\r\n");//GGAتوقف ارسال بسته های delay_ms(700); //******************************** printf("$PUBX,40,GLL,0,0,0,0*5C\r\n");");//GLLتوقف ارسال بسته های delay_ms(700); //********************************* printf("$PUBX,40,GSA,0,0,0,0*4E\r\n");//");//GSAتوقف ارسال بسته های delay_ms(700); //******************************** printf("$PUBX,40,GSV,0,0,0,0*59\r\n");//");//GSVتوقف ارسال بسته های delay_ms(700); //******************************* printf("$PUBX,40,VTG,0,0,0,0*5E\r\n");");//VTGتوقف ارسال بسته های delay_ms(700); //********************************************************************* while (1) { // Place your code here }; }
وسایل مورد نیاز
ماژول مکان یاب NEO6MV2 GPS جی پی اس Gy-GPS6MV2
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
پروژه و دریافت بن ارسال رایگان
برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکههای اجتماعی از جمله آپارات و اینستگرام، با هشتگهای دیجی_اسپارک دانشجوکیت digispark daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
بابت اطلاعاتی که در وبسیاتتون قرار دادید بی نهایت ممنون و متشکرم. سرفراز و برقرار و شاد باشید همیشه
از لطف و همراهی شما بی نهایت سپاسگزارم
باسلام
میخوام با AVR زمان وتاریخ را با کد ویژن از ماژول GPS بخونم و با LCD 2X16 نمایش بدم
اگر ممکن هست لطف بفرمایید توضیح دهیم ممنون میشم
سلام
پیشنهاد می کنم سلسله آموزش های ماژول GPS را با کلیک بر روی این لینک دنبال کنید.