- Componentes necessários
- Módulo GPS
- Pin de STM32F103C8
- Diagrama de circuito e conexões
- Programação STM32F103C8 para interface de módulo GPS
- Encontrando Latitude e Longitude com GPS e STM32
GPS significa Global Positioning System e é usado para detectar a latitude e longitude de qualquer local da Terra, com a hora UTC exata (Universal Time Coordinated). Este dispositivo recebe as coordenadas do satélite a cada segundo, com hora e data. O GPS oferece grande precisão e também fornece outros dados além das coordenadas de posição.
Todos nós sabemos que o GPS é um dispositivo muito útil e muito comumente usado em telefones celulares e outros dispositivos portáteis para rastrear a localização. Ele tem uma gama muito ampla de aplicações em todos os campos, desde chamar um táxi em sua casa até rastrear a altitude dos aviões. Aqui estão alguns projetos úteis relacionados a GPS, que criamos anteriormente:
- Sistema de rastreamento de veículos
- Relógio GPS
- Sistema de Alerta de Detecção de Acidentes
- Tutorial de interface do módulo GPS Raspberry Pi
- Interface do Módulo GPS com Microcontrolador PIC
Aqui neste tutorial, faremos a interface de um módulo GPS com o microcontrolador STM32F103C8 para encontrar as coordenadas de localização e exibi-las em um display LCD 16x2.
Componentes necessários
- Microcontrolador STM32F103C8
- Módulo GPS
- Visor LCD 16x2
- Tábua de pão
- Fios de conexão
Módulo GPS
É um módulo GPS GY-NEO6MV2 XM37-1612. Este módulo GPS possui quatro pinos + 5V, GND, TXD e RXD. Ele se comunica usando os pinos seriais e pode ser facilmente conectado à porta serial do STM32F103C8.
O módulo GPS envia os dados no formato NMEA (veja a imagem abaixo). O formato NMEA consiste em várias frases, nas quais precisamos apenas de uma frase. Esta frase começa em $ GPGGA e contém as coordenadas, hora e outras informações úteis. Este GPGGA é conhecido como Dados de correção do sistema de posicionamento global. Saiba mais sobre como ler dados GPS e suas strings aqui.
Abaixo está um exemplo de string $ GPGGA, junto com sua descrição:
$ GPGGA, 104534.000,7791,0381, N, 06727.4434, E, 1,08,0.9,510,4, M, 43,9, M,, * 47
$ GPGGA, HHMMSS.SSS, latitude, N, longitude, E, FQ, NOS, HDP, altitude, M, altura, M,, dados de checksum
Mas aqui neste tutorial, estamos usando uma biblioteca GPS TinyGPSPlus que extrai todas as informações necessárias da frase NMEA, e só precisamos escrever uma linha simples de código para obter a latitude e longitude, que veremos mais tarde no tutorial.
Pin de STM32F103C8
STM32F103C8 (BLUE PILL) As portas de comunicação serial USART são mostradas na imagem pin out abaixo. Estes são de cor azul com (PA9-TX1, PA10-RX1, PA2-TX2, PA3-RX2, PB10-TX3, PB11-RX3). Possui três canais de comunicação.
Diagrama de circuito e conexões
Conexões de circuito entre o módulo GPS e STM32F103C8
Módulo GPS |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Conexões entre LCD 16x2 e STM32F103C8
Pin no LCD |
Nome do pino LCD |
Nome do pino STM32 |
1 |
Ground (Gnd) |
Solo (G) |
2 |
VCC |
5V |
3 |
VEE |
Pino do centro do potenciômetro |
4 |
Register Select (RS) |
PB11 |
5 |
Leitura / Escrita (RW) |
Solo (G) |
6 |
Habilitar (EN) |
PB10 |
7 |
Bit de dados 0 (DB0) |
Sem conexão (NC) |
8 |
Bit de dados 1 (DB1) |
Sem conexão (NC) |
9 |
Bit de dados 2 (DB2) |
Sem conexão (NC) |
10 |
Dados Bit 3 (DB3) |
Sem conexão (NC) |
11 |
Dados Bit 4 (DB4) |
PB0 |
12 |
Bit de dados 5 (DB5) |
PB1 |
13 |
Bit de dados 6 (DB6) |
PC13 |
14 |
Dados Bit 7 (DB7) |
PC14 |
15 |
LED positivo |
5V |
16 |
LED negativo |
Solo (G) |
Toda a configuração ficará assim:
Programação STM32F103C8 para interface de módulo GPS
O programa completo para encontrar localização usando o módulo GPS usando STM32 é fornecido no final deste projeto. STM32F103C8 pode ser programado usando Arduino IDE, simplesmente conectando-o ao PC via porta USB. Certifique-se de remover os pinos TX e RX durante o upload do código e conecte-o após o upload.
Para fazer a interface do GPS com o STM32, primeiro temos que baixar uma biblioteca do link GitHub TinyGPSPlus. Depois de baixar a biblioteca, ela pode ser incluída no IDE do Arduino em Sketch -> Incluir Biblioteca -> Adicionar Biblioteca.zip. A mesma biblioteca pode ser usada para fazer a interface do GPS com o Arduino.
Portanto, primeiro inclua os arquivos de biblioteca necessários e defina os pinos para LCD 16x2:
#incluir
Em seguida, crie um objeto chamado gps da classe TinyGPSPlus.
TinyGPSPlus gps;
Em seguida, na configuração do vazio , comece a comunicação serial com o módulo GPS usando Serial1.begin (9600). Serial1 é usado como a porta Serial 1 (Pins-PA9, PA10) do STM32F103C8.
Serial1.begin (9600);
Em seguida, exiba a mensagem de boas-vindas por algum tempo.
lcd.begin (16,2); lcd.print ("Circuit Digest"); lcd.setCursor (0,1); lcd.print ("STM32 com GPS"); atraso (4000); lcd.clear ();
A seguir, no loop vazio (), recebemos a latitude e longitude do GPS e verificamos se os dados recebidos são válidos ou não e exibimos as informações no monitor serial e LCD.
Verificar se os dados de localização disponíveis são válidos ou não
loc_valid = gps.location.isValid ();
Recebe os dados de latitude
lat_val = gps.location.lat ();
Recebe os dados de longitude
lng_val = gps.location.lng ();
Se dados inválidos forem recebidos, ele exibe “*****” no monitor serial e exibe “em espera” no LCD.
if (! loc_valid) { lcd.print ("Esperando"); Serial.print ("Latitude:"); Serial.println ("*****"); Serial.print ("Longitude:"); Serial.println ("*****"); atraso (4000); lcd.clear (); }
Se dados válidos forem recebidos, a latitude e a longitude serão exibidas no monitor serial, bem como no display LCD.
lcd.clear (); Serial.println ("LEITURA GPS:"); Serial.print ("Latitude:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("Longitude:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); atraso (4000);
A função a seguir fornece o atraso para ler os dados. Ele continua procurando os dados na porta serial.
estático vazio GPSDelay (ms longo sem sinal) { início longo sem sinal = milis (); fazer { while (Serial1.available ()) gps.encode (Serial1.read ()); } enquanto (milis () - início <ms); }
Encontrando Latitude e Longitude com GPS e STM32
Depois de construir a configuração e enviar o código, certifique-se de colocar o módulo GPS em uma área aberta para receber o sinal rapidamente. Às vezes, leva alguns minutos para receber o sinal, então espere um pouco. O LED começará a piscar no módulo GPS quando começar a receber o sinal e as coordenadas de localização serão exibidas no visor LCD.
Você pode verificar a latitude e longitude da localização usando o Google Maps. Basta ir ao Google maps com o GPS ligado e clicar no ponto azul. Irá mostrar o endereço com a latitude e longitude como mostrado na imagem abaixo
O código completo e o vídeo de demonstração são fornecidos abaixo.