Você algum dia já deve ter pensado: qual a latitude e longitude em que estou agora? Em que lugar do mundo eu estou? Será que consigo me ver acenando no Google Earth? OK, talvez a resposta seja não, mas seria incrível não seria? O Módulo GPS Arduino GY-GPS6MV2 permite fazer boa parte disso em tempo real.
Ele é um dispositivo incrível com uma ampla área de aplicação, geralmente é utilizado em Drones (dispositivos que tem autonomia de voo), além de poder ser adaptado em um carrinho ou qualquer outro projeto eletrônico em que seja necessário controlar a posição e a velocidade de deslocamento, por exemplo. Vale lembrar que trabalha com tensão de 3.3V, portanto fique atento para não danificá-lo.
Bastante preciso, sua antena intensifica a detecção de sinal, resultando em mais satélites detectados, tornando o dispositivo muito mais eficiente. Dentre as informações fornecidas é possível destacar a altitude, latitude, longitude, data, hora e velocidade de deslocamento. Com estes dados podemos localizar esses locais pelo Google Earth, obtendo assim, o seu local atual, ou ainda fazer com que o protótipo realize tarefas em determinada localização e horário.
No teste abaixo realizaremos a localização do dispositivo, utilizando o Arduino Uno para decodificar os dados recebidos pelo Módulo GPS e, através dos dados recebidos e informados obteremos as coordenadas.
Vídeo Módulo GPS Arduino GY-GPS6MV2
Produtos Utilizados:
- Módulo GPS Arduino GY-GPS6MV2 + Antena;
- Arduino Uno R3 + Cabo USB;
- Display LCD com fundo azul 16×2;
- Resistor 4K7 1/4W;
- Resistor 10kΩ;
- Jumpers
- Protoboard 830 Pontos.
Padrões de comunicação:
O padrão de comunicação do Módulo GPS Arduino GY-GPS6MV2 é a interface Serial RS-232, é um padrão de alta velocidade de transferência de dados que trabalha com a transferência de dados binários entre os dispositivos. Este padrão é o mesmo utilizado na comunicação do Arduino com o computador, o padrão utiliza somente 2 fios o TX (transceiver) e o RX (receiver), e é muito utilizado por impressoras, dispositivos USB, entre outros.
Montagem do Projeto
Para ligação basta conectar o Módulo GPS a saída 3.3V do Arduino e seguir as orientações conforme a imagem abaixo:
Funcionamento do Código
O código que estaremos utilizando fará a leitura dos dados recebidos pelo Módulo GPS, e enviará para a porta serial os valores de forma organizada. Estamos disponibilizando o código-fonte comentado para seu melhor entendimento.
Download do Programa Principal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
#include <Adafruit_GPS.h> #ifdef __AVR__ #include <SoftwareSerial.h> #endif #include <LiquidCrystal.h> #define mySerial Serial Adafruit_GPS GPS(&mySerial); #define GPSECHO true boolean usingInterrupt = false; void useInterrupt(boolean); LiquidCrystal lcd(12, 11, 10, 9, 8, 7); void setup() { lcd.begin(16, 2); Serial.begin(115200); Serial.println("www.usinainfo.com.br"); GPS.begin(9600); mySerial.begin(9600); GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); GPS.sendCommand(PGCMD_ANTENNA); #ifdef __arm__ usingInterrupt = false; #else useInterrupt(true); #endif mySerial.println(PMTK_Q_RELEASE); lcd.print("UsinaInfo"); lcd.setCursor(0, 1); lcd.print("Aguardando GPS"); delay(5000); lcd.clear(); } #ifdef __AVR__ SIGNAL(TIMER0_COMPA_vect) { char c = GPS.read(); #ifdef UDR0 if (GPSECHO) if (c) UDR0 = c; #endif } void useInterrupt(boolean v) { if (v) { OCR0A = 0xAF; TIMSK0 |= _BV(OCIE0A); usingInterrupt = true; } else { TIMSK0 &= ~_BV(OCIE0A); usingInterrupt = false; } } #endif //#ifdef__AVR__ uint32_t timer = millis(); void loop() { for(int tst1=0; tst1<8; tst1++) { if (! usingInterrupt) { char c = GPS.read(); if (GPSECHO) if (c) Serial.print(c); } if (GPS.newNMEAreceived()) { if (!GPS.parse(GPS.lastNMEA())) return; } if (timer > millis()) timer = millis(); if (millis() - timer > 2000) { timer = millis(); float var = GPS.speed; var = var*1.852; Serial.print("nTime: "); Serial.print(GPS.hour, DEC); Serial.print(':'); Serial.print(GPS.minute, DEC); Serial.print(':'); Serial.print(GPS.seconds, DEC); Serial.print('.'); Serial.println(GPS.milliseconds); Serial.print("Date: "); Serial.print(GPS.day, DEC); Serial.print('/'); Serial.print(GPS.month, DEC); Serial.print("/20"); Serial.println(GPS.year, DEC); Serial.print("Fix: "); Serial.print((int)GPS.fix); Serial.print(" quality: "); Serial.println((int)GPS.fixquality); Serial.print(GPS.longitude, 4); Serial.print(GPS.lon); Serial.print("Speed (Km/H): "); Serial.println(var); Serial.print("Altitude: "); Serial.println(GPS.altitude); Serial.print("Sat: "); Serial.println((int)GPS.satellites); // if (GPS.fix) // { lcd.setCursor(0,0); lcd.print("-"); lcd.print(GPS.latitude, 4); lcd.print(GPS.lat); lcd.setCursor(0,1); lcd.print("-"); lcd.print(GPS.longitude, 4); lcd.print(GPS.lon); delay(2000); } lcd.clear(); for(int tst=0; tst<8; tst++) { float var = GPS.speed; var = var*1.852; lcd.print(var); lcd.println("Km/H"); lcd.setCursor(0,1); lcd.print("Sat: "); lcd.print((int)GPS.satellites); delay(1000); lcd.clear(); } } } |
Conclusão
O Módulo GPS Arduino GY-GPS6MV2 é de alta qualidade e de grande precisão, apresenta ótimo funcionamento, inexistindo a necessidade de adaptações. Com ele é possível criar é projetos autônomos, sem a necessidade de motorista ou piloto. Enfim, a criatividade é sua, faça bom uso!
Autor: Leonardo Dalla Porta
Como faço no raspberry pi esse projeto?
Boa tarde Manuel!
Infelizmente não temos o referente projeto desenvolvido junto ao Raspberry, porém algumas informações como a alimentação do produto e o valor da tensão de comunicação devem ser verificadas.
Parabéns pelo projeto. Dentro de um apartamento, eu conseguiria saber exatamente qual andar a pessoa se encontra?
Olá Sandro,
Seria possível sim desenvolver um equipamento com essa função, muitos módulos gps fornecem a informação de altitude, ou caso o modulo não forneça você pode utilizar um barômetro digital para averiguar a altitude e determinar o andar que a pessoa está.
Espero que tenhamos ajudado
Why the 1.852 multiplier?
Good afternoon Viktor!
This value is to convert the unit knots to km/h. For mph it’s 1.15 the multiplier 😉