اتصال ماژول GPS به رزبری‌پای

مقدمه

  • سیسستم موقعیت‌یاب جهانی (GPS) از سیگنال‌های ارسالی از ماهواره‌های فضایی و ایستگاه‌های زمینی استفاده کرده و موقعیت شما را در زمین مشخص می‌کند.
  • GPS سیگنال‌های فرکانس رادیویی ارسالی از ماهواره‌ها و ایستگاه‌های زمینی را دریافت می‌کند. GPS از این سیگنال‌ها استفاده کرده تا مکان دقیق را مشخص کند.
  • خود GPS هیچ اطلاعاتی منتقل نمی‌کند.
  • سیگنال‌های دریافتی از ماهواره‌ها و ایستگاه‌های زمینی دارای یک برچسب زمانی (Time Stamp) از لحظه‌ی انتقال سیگنال می‌باشند. با محاسبه‌ی اختلاف زمان ارسال سیگنال با زمان دریافت سیگنال، و با استفاده از سرعت سیگنال، می‌توان مسافت بین ماهواره و GPS دریافت کننده را با یک فرمول ساده سرعت و زمان مشخص کرد.
  • با استفاده از ۳ ماهواره یا بیشتر، مکان دقیق GPS را می‌توان محاسبه کرد.
  • برای اطلاعات بیشتر راجع به GPS و نحوه‌ی استفاده از ان، به مطلب ماژول گیرنده GPS در بخش ماژول‌ها و سنسورها رجوع کنید.
  • ماژول گیرنده GPS از UART برای ارتباط بین کنترلر یا ترمینال کامپیوتر استفاده می‌کند.
  • پیش از استفاده از UART روی رزبری‌پای، باید آن را پیکربندی و فعال کنید. برای اطلاعات بیشتر درباره‌ی UART در رزبری‌پای و نحوه‌ی استفاده از آن، به مطلب ارتباط UART رزبری‌پای با استفاده از پایتون و C در بخش رزبری‌پای رجوع کنید.

اتصال ماژول GPS به رزبری‌پای

دیاگرام اتصالات

اتصال ماژول GPS به رزبری‌پای

مثال

برای استخراج اطلاعات GPS، می‌خواهیم ارتباط بین رزبری‌پای را با ماژول GPS برقرار کنیم. با استفاده از پایتون و زبان WiringPi) C) می‌توان میان رزبری‌پای و ماژول GPS ارتباط برقرار کرد. برای برقراری این ارتباط، ماژول GPS را همانند شکل فوق به رزبری‌پای متصل کنید.

مطلب پیشنهادی:  نام کاربری و رمزعبور پیش‌ فرض رزبری پای (سیستم عامل رزبین)

استفاده از پایتون

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

برنامه پایتون

'''
GPS Interfacing with Raspberry Pi using Pyhton
http://www.electronicwings.com
'''
import serial               #import serial pacakge
from time import sleep
import webbrowser           #import package for opening link in browser
import sys                  #import system package

def GPS_Info():
    global NMEA_buff
    global lat_in_degrees
    global long_in_degrees
    nmea_time = []
    nmea_latitude = []
    nmea_longitude = []
    nmea_time = NMEA_buff[0]                    #extract time from GPGGA string
    nmea_latitude = NMEA_buff[1]                #extract latitude from GPGGA string
    nmea_longitude = NMEA_buff[3]               #extract longitude from GPGGA string

    print("NMEA Time: ", nmea_time,'\n')
    print ("NMEA Latitude:", nmea_latitude,"NMEA Longitude:", nmea_longitude,'\n')
   
    lat = float(nmea_latitude)                  #convert string into float for calculation
    longi = float(nmea_longitude)               #convertr string into float for calculation
   
    lat_in_degrees = convert_to_degrees(lat)    #get latitude in degree decimal format
    long_in_degrees = convert_to_degrees(longi) #get longitude in degree decimal format
   
#convert raw NMEA string into degree decimal format  
def convert_to_degrees(raw_value):
    decimal_value = raw_value/100.00
    degrees = int(decimal_value)
    mm_mmmm = (decimal_value - int(decimal_value))/0.6
    position = degrees + mm_mmmm
    position = "%.4f" %(position)
    return position
  
gpgga_info = "$GPGGA,"
ser = serial.Serial ("/dev/ttyS0")              #Open port with baud rate
GPGGA_buffer = 0
NMEA_buff = 0
lat_in_degrees = 0
long_in_degrees = 0

try:
    while True:
        received_data = (str)(ser.readline())                   #read NMEA string received
        GPGGA_data_available = received_data.find(gpgga_info)   #check for NMEA GPGGA string                
        if (GPGGA_data_available>0):
            GPGGA_buffer = received_data.split("$GPGGA,",1)[1]  #store data coming after "$GPGGA," string
            NMEA_buff = (GPGGA_buffer.split(','))               #store comma separated data in buffer
            GPS_Info()                                          #get time, latitude, longitude

            print("lat in degrees:", lat_in_degrees," long in degree: ", long_in_degrees, '\n')
            map_link = 'http://maps.google.com/?q=' + lat_in_degrees + ',' + long_in_degrees    #create link to plot location on Google map
            print("<<<<<<<<press ctrl+c to plot location on google maps>>>>>>\n")               #press ctrl+c to plot on map and exit
            print("------------------------------------------------------------\n")
                      
except KeyboardInterrupt:
    webbrowser.open(map_link)        #open current position information in google map
    sys.exit(0)

خروجی پایتون

  • خروجی در Python IDE
مطلب پیشنهادی:  فوت‌های کوزه‌گری در کار با ابزار Raspi-Config

اتصال ماژول GPS به رزبری‌پای

  • خروجی روی گوگل مپ

اتصال ماژول GPS به رزبری‌پای

  • برای ترسیم مکان روی گوگل مپ، باید URL link را برای گوگل مپ فراخوانی کنیم. می‌توان لینک زیر را همراه با طول و عرض استخراج شده برای بازکردن نقشه گوگل استفاده کرد.

http://maps.google.com/?q=<latitude>,<longitude>

استفاده از زبان C

  • می‌توان رشته‌ی NMEA GPGGA را استخراج کرده و روی پنجره‌ی خروجی چاپ کرد. در اینجا، از کتابخانه‌ی WiringPi زبان C برای خواندن ماژول GPS استفاده می‌کنیم.
  • این کتابخانه دیگه پشتیبانی و توسعه پیدا نمی‌کنه.

زبان C

/*
   GPS Interfacing with Raspberry Pi using C (WiringPi Library)
   http://www.electronicwings.com
*/

#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <wiringPi.h>
#include <wiringSerial.h>

int main ()
{
  int serial_port;
  char dat,buff[100],GGA_code[3];
  unsigned char IsitGGAstring=0;
  unsigned char GGA_index=0;
  unsigned char is_GGA_received_completely = 0;

  if ((serial_port = serialOpen ("/dev/ttyS0", 9600)) < 0)                    /* open serial port */
  {
    fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ;
    return 1 ;
  }

  if (wiringPiSetup () == -1)                                                                                                            /* initializes wiringPi setup */
  {
    fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ;
    return 1 ;
  }

  while(1){
                 
                   if(serialDataAvail (serial_port) )                  /* check for any data available on serial port */
                     {
                         dat = serialGetchar(serial_port);                /* receive character serially */                  
                         if(dat == '

خروجی

اتصال ماژول GPS به رزبری‌پای

نکته: هنگام برقراری ارتباط بین ماژول GPS و رزبری‌پای، از پورت سریال dev/ttyS0/ برای ارتباط UART استفاده می‌کنیم. اگر می‌خواهید ماژول را به رزبری‌پای ۲ یا مدل‌های پیشین وصل کنید، باید از پورت dev/ttyAMA0/ استفاده کنید.

مطلب پیشنهادی:  توابع I2C پایتون برای رزبری‌پای

منبع: ترجمه از سایت electronicwings.com

){
                                 IsitGGAstring = 0;
                                 GGA_index = 0;
                         }
                         else if(IsitGGAstring ==1){
                                   buff[GGA_index++] = dat;
                                   if(dat=='\r')
                                             is_GGA_received_completely = 1;
                                    }
                         else if(GGA_code[0]=='G' && GGA_code[1]=='G' && GGA_code[2]=='A'){
                                   IsitGGAstring = 1;
                                   GGA_code[0]= 0;
                                   GGA_code[0]= 0;
                                   GGA_code[0]= 0;                            
                                   }
                         else{
                                   GGA_code[0] = GGA_code[1];
                                   GGA_code[1] = GGA_code[2];
                                   GGA_code[2] = dat;
                                   }
                     }   
                if(is_GGA_received_completely==1){
                         printf("GGA: %s",buff);
                         is_GGA_received_completely = 0;
                }
           }
           return 0;
}

خروجی

اتصال ماژول GPS به رزبری‌پای

نکته: هنگام برقراری ارتباط بین ماژول GPS و رزبری‌پای، از پورت سریال dev/ttyS0/ برای ارتباط UART استفاده می‌کنیم. اگر می‌خواهید ماژول را به رزبری‌پای ۲ یا مدل‌های پیشین وصل کنید، باید از پورت dev/ttyAMA0/ استفاده کنید.

پیشنهاد می‌کنم در ادامه آموزش ساخت مسیریاب مکانی با استفاده از GSM SIM800 و آردوینو را هم مطالعه کنید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *