Pular para o conteúdo principal

Grove - GPS

Este módulo Grove - GPS é um dispositivo programável em campo e com bom custo-benefício, equipado com um SIM28 (u-blox 6 é a versão antiga) e configuração de comunicação serial. Ele possui um receptor GPS com 22 canais de rastreamento / 66 canais de aquisição. A sensibilidade de rastreamento e aquisição chega a -160 dBm, tornando-o uma ótima escolha para projetos de navegação pessoal e serviços de localização, bem como um produto de destaque entre os da mesma faixa de preço.

dica

Lançamos o Seeed GPS Modules Selection Guide, que ajudará você a escolher o módulo GPS que melhor atende às suas necessidades.

Versão

Versão do ProdutoAlteraçõesData de Lançamento
Grove - GPS V1.2InicialOut 2015

Recursos

  • Suporta protocolos NMEA e u-blox 6. (Até 10 de jan. de 2014, depois disso SIM28 em vez disso)
  • Baixo consumo de energia
  • Taxas de baud configuráveis
  • Interface compatível com Grove
dica

Para mais detalhes sobre os módulos Grove, consulte Grove System

Especificações

ParâmetroFaixa/Valor
Tensão de Entrada3,3/5V
BaudRate4800 - 57600(u-blox version)
BaudRate9600 - 115200(SIM28 version)
BaudRate Padrão9600

Plataformas Suportadas

ArduinoRaspberry Pi
cuidado

As plataformas mencionadas acima como suportadas são uma indicação da compatibilidade teórica ou de software do módulo. Na maior parte dos casos, fornecemos apenas biblioteca de software ou exemplos de código para a plataforma Arduino. Não é possível fornecer biblioteca de software / código de demonstração para todas as possíveis plataformas de MCU. Portanto, os usuários precisam escrever sua própria biblioteca de software.

Primeiros Passos

nota

Se esta é a primeira vez que você trabalha com Arduino, recomendamos fortemente que consulte Primeiros Passos com Arduino antes de começar.

Brincar com Arduino

Este exemplo simplesmente lê do GPS usando software serial e envia de volta pela porta serial.

Hardware

  • Passo 1. Prepare os itens abaixo:
Seeeduino V4.2Base ShieldGrove - GPS
enter image description hereenter image description hereenter image description here
Adquira agoraAdquira agoraAdquira agora
  • Passo 2. Conecte o Grove - GPS à porta D2 do Grove-Base Shield.
  • Passo 3. Conecte o Grove - Base Shield ao Seeeduino.
  • Passo 4. Conecte o Seeeduino ao PC através de um cabo USB.

nota

Se não tivermos o Grove Base Shield, também podemos conectar o Grove - GPS diretamente ao Seeeduino conforme abaixo.

SeeeduinoGrove - GPS
5VVermelho
GNDPreto
D3Branco
D2Amarelo

Software

nota

Observe que o software u-center é apenas para Windows.

  • Passo 1. Instale o software u-center.
  • Passo 2. Copie o código para a IDE do Arduino e faça o upload. Se você não souber como enviar o código, verifique como enviar código.
#include <SoftwareSerial.h>
SoftwareSerial SoftSerial(2, 3);
unsigned char buffer[64]; // buffer array for data receive over serial port
int count=0; // counter for buffer array
void setup()
{
SoftSerial.begin(9600); // the SoftSerial baud rate
Serial.begin(9600); // the Serial port of Arduino baud rate.
}

void loop()
{
if (SoftSerial.available()) // if date is coming from software serial port ==> data is coming from SoftSerial shield
{
while(SoftSerial.available()) // reading data into char array
{
buffer[count++]=SoftSerial.read(); // writing data into array
if(count == 64)break;
}
Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port
clearBufferArray(); // call clearBufferArray function to clear the stored data from the array
count = 0; // set counter of while loop to zero 
}
if (Serial.available()) // if data is available on hardware serial port ==> data is coming from PC or notebook
SoftSerial.write(Serial.read()); // write it to the SoftSerial shield
}


void clearBufferArray() // function to clear buffer array
{
for (int i=0; i<count;i++)
{
buffer[i]=NULL;
} // clear all index of array with command NULL
}
  • Passo 3. Abra o U-center.

  • Passo 4. Clique em Receiver -> Port e selecione a porta COM que o Arduino está usando.

  • Passo 5. Clique em Receiver -> Baudrate e certifique-se de que 9600 está selecionado.

  • Passo 6. Clique em View -> Text Console e você deverá obter uma janela que irá transmitir dados NMEA.

  • Passo 7. Abra o monitor serial. Você poderá ver como mostrado abaixo:

Também podemos visualizar dados no Google Earth:

  • Passo 1. Clique em File -> Database Export -> Google Earth KML

  • Passo 2. Isso deverá abrir o Google Earth com o histórico que foi capturado pelo u-center.

  • Passo 3. Alternativamente, os dados podem ser gravados pressionando o círculo vermelho na barra de ferramentas, que então perguntará onde você deseja salvar o registro.

  • Passo 4. Quando tivermos capturado dados suficientes, clique no quadrado preto para parar a gravação.

  • Passo 5. Podemos então converter o arquivo .ubx gerado para KML enviando o arquivo ubx para o GPSVisualizer.

Brincar com Raspberry Pi

Hardware

  • Passo 1. Prepare os itens abaixo:
Raspberry piGrovePi_PlusGrove - GPS
enter image description hereenter image description hereenter image description here
Adquira agoraAdquira agoraAdquira agora
  • Passo 2. Conecte o GrovePi_Plus ao Raspberry.
  • Passo 3. Conecte o sensor ao soquete RPISER do grovepi+ usando um cabo Grove.
  • Passo 4. Conecte o Raspberry ao PC através de um cabo USB.

Software

  • Passo 1. Siga Setting Software para configurar o ambiente de desenvolvimento.

  • Passo 2. Navegue até o diretório de demonstrações:

cd ~
git clone https://github.com/DexterInd/GrovePi.git
cd GrovePi/Software/Python/grove_gps
  • Passo 3. Para ver o código
nano grove_gps_data.py   # "Ctrl+x" to exit #
import serial, time
import smbus
import math
import RPi.GPIO as GPIO
import struct
import sys
#import ir_receiver_check

enable_debug=1
enable_save_to_file=0

#if ir_receiver_check.check_ir():
# print("Disable IR receiver before continuing")
# exit()

ser = serial.Serial('/dev/ttyAMA0', 9600, timeout = 0) #Open the serial port at 9600 baud
ser.flush()

def cleanstr(in_str):
out_str = "".join([c for c in in_str if c in "0123456789.-" ])
if len(out_str)==0:
out_str = "-1"
return out_str

def safefloat(in_str):
try:
out_str = float(in_str)
except ValueError:
out_str = -1.0
return out_str

class GPS:
#The GPS module used is a Grove GPS module https://www.seeedstudio.com/depot/Grove-GPS-p-959.html
inp=[]
# Refer to SIM28 NMEA spec file https://www.seeedstudio.com/wiki/images/a/a0/SIM28_DATA_File.zip
GGA=[]


#Read data from the GPS
def read(self):
while True:
GPS.inp=ser.readline()
if GPS.inp[:6] =='$GPGGA': # GGA data , packet 1, has all the data we need
break
time.sleep(0.1) #without the cmd program will crash
try:
ind=GPS.inp.index('$GPGGA',5,len(GPS.inp)) #Sometimes multiple GPS data packets come into the stream. Take the data only after the last '$GPGGA' is seen
GPS.inp=GPS.inp[ind:]
except ValueError:
print ("")
GPS.GGA=GPS.inp.split(",") #Split the stream into individual parts
return [GPS.GGA]

#Split the data into individual elements
def vals(self):
if enable_debug:
print(GPS.GGA)

time=GPS.GGA[1]

if GPS.GGA[2]=='': # latitude. Technically a float
lat =-1.0
else:
lat=safefloat(cleanstr(GPS.GGA[2]))

if GPS.GGA[3]=='': # this should be either N or S
lat_ns=""
else:
lat_ns=str(GPS.GGA[3])

if GPS.GGA[4]=='': # longitude. Technically a float
long=-1.0
else:
long=safefloat(cleanstr(GPS.GGA[4]))

if GPS.GGA[5]=='': # this should be either W or E
long_ew=""
else:
long_ew=str(GPS.GGA[5])

fix=int(cleanstr(GPS.GGA[6]))
sats=int(cleanstr(GPS.GGA[7]))

if GPS.GGA[9]=='':
alt=-1.0
else:
# change to str instead of float
# 27"1 seems to be a valid value
alt=str(GPS.GGA[9])
return [time,fix,sats,alt,lat,lat_ns,long,long_ew]

# Convert to decimal degrees
def decimal_degrees(self, raw_degrees):
try:
degrees = float(raw_degrees) // 100
d = float(raw_degrees) % 100 / 60
return degrees + d
except:
return raw_degrees


if __name__ == "__main__":
g=GPS()
if enable_save_to_file:
f=open("gps_data.csv",'w') #Open file to log the data
f.write("name,latitude,longitude\n") #Write the header to the top of the file
ind=0
while True:
time.sleep(0.01)
try:
x=g.read() #Read from GPS
[t,fix,sats,alt,lat,lat_ns,longitude,long_ew]=g.vals() #Get the individial values

# Convert to decimal degrees
if lat !=-1.0:
lat = g.decimal_degrees(safefloat(lat))
if lat_ns == "S":
lat = -lat

if longitude !=-1.0:
longitude = g.decimal_degrees(safefloat(longitude))
if long_ew == "W":
longitude = -longitude

# print ("Time:",t,"Fix status:",fix,"Sats in view:",sats,"Altitude",alt,"Lat:",lat,lat_ns,"Long:",long,long_ew)
try:
print("Time\t\t: %s\nFix status\t: %d\nSats in view\t: %d\nAltitude\t: %s\nLat\t\t: %f\nLong\t\t: %f") %(t,fix,sats,alt,lat,longitude)
except:
print("Time\t\t: %s\nFix status\t: %s\nSats in view\t: %s\nAltitude\t: %s\nLat\t\t: %s\nLong\t\t: %s") %(t,str(fix),str(sats),str(alt),str(lat),str(longitude))

s=str(t)+","+str(safefloat(lat)/100)+","+str(safefloat(longitude)/100)+"\n"

if enable_save_to_file:
f.write(s) #Save to file
time.sleep(2)
except IndexError:
print ("Unable to read")
except KeyboardInterrupt:
if enable_save_to_file:
f.close()
print ("Exiting")
sys.exit(0)
  • Passo 4. Execute a demonstração.
sudo python grove_gps_data.py

Nota

O GPS é melhor utilizado ao ar livre. Recomenda-se colocar seu Raspberry Pi do lado de fora da janela ou em qualquer lugar ao ar livre.

Observações sobre o módulo SIM28

  • Passo 1. O Grove-GPS mudou o módulo para SIM28, que possui o mesmo footprint da versão original.
  • Passo 2. Devemos usar as ferramentas "SIMCom GPS DEMO" para receber os dados do módulo SIM28.
  • Passo 3. Abra as ferramentas SIMCom_GPS_DEMO, vá para Module->properties->module->select SIM28.
  • Passo 4. SIMCom_GPS_DEMO_V1.07 é apenas para Windows.

  • Passo 5. Abra as ferramentas SIMCom_GPS_DEMO, vá para Module->connect. Selecione a porta serial utilizada pelo módulo GPS.

Visualizador de Esquemático Online

Recursos

Projetos

Projeto de Rastreador GPS/GPRS: Neste novo projeto, apresentaremos nosso Rastreador GPS conectado usando a técnica GPRS e o protocolo MQTT.

Suporte Técnico e Discussão sobre o Produto

Obrigado por escolher nossos produtos! Estamos aqui para lhe oferecer diferentes tipos de suporte para garantir que a sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...