Tabla de contenido:

Encontrar su camino con GPS: 9 pasos
Encontrar su camino con GPS: 9 pasos

Video: Encontrar su camino con GPS: 9 pasos

Video: Encontrar su camino con GPS: 9 pasos
Video: Como usar el GPS Google Maps, jamas te volverás a perder ;) 2024, Mes de julio
Anonim
Encontrar su camino con GPS
Encontrar su camino con GPS

Un ejercicio rápido para comprender y aplicar datos GPS

  • Tiempo requerido: 2 horas
  • Costo: $ 75– $ 150

Para los fabricantes, se ha vuelto bastante barato incorporar datos geoespaciales de alta calidad en proyectos de electrónica. Y en los últimos años, los módulos receptores GPS (Sistema de posicionamiento global) se han vuelto mucho más diversos, potentes y fáciles de integrar con placas de desarrollo como Arduino, PIC, Teensy y Raspberry Pi. Si ha estado pensando en construir en torno al GPS, ha elegido un buen momento para comenzar.

Paso 1: cómo funciona

Un módulo GPS es un pequeño receptor de radio que procesa señales transmitidas en frecuencias conocidas por una flota de satélites. Estos satélites giran alrededor de la Tierra en órbitas aproximadamente circulares, transmitiendo datos de posición y reloj extremadamente precisos al suelo debajo. Si el receptor terrestre puede "ver" suficientes de estos satélites, puede usarlos para calcular su propia ubicación y altitud.

Cuando llega un mensaje GPS, el receptor primero inspecciona su marca de tiempo de transmisión para ver cuándo fue enviado. Debido a que la velocidad de una onda de radio en el espacio es una constante conocida (c), el receptor puede comparar los tiempos de transmisión y recepción para determinar la distancia que ha viajado la señal. Una vez que ha establecido su distancia de cuatro o más satélites conocidos, calcular su propia posición es un problema bastante simple de triangulación 3D. Pero para hacer esto de manera rápida y precisa, el receptor debe poder procesar con agilidad números de hasta 20 flujos de datos a la vez. Dado que el sistema GPS tiene el objetivo publicado de ser utilizable en cualquier lugar de la Tierra, el sistema debe garantizar que al menos cuatro satélites - preferiblemente más - son visibles en todo momento desde todos los puntos del globo. Actualmente hay 32 satélites GPS que realizan una danza meticulosamente coreografiada en una nube dispersa a 20.000 kilómetros de altura.

Paso 2: Datos del ventilador

El GPS no podría funcionar sin la teoría de la relatividad de Einstein, ya que se debe compensar los 38 microsegundos que los relojes atómicos en órbita ganan cada día debido a la dilatación del tiempo en el campo gravitacional de la Tierra.

Paso 3: Comenzando

Empezando
Empezando

Sea cual sea su proyecto, el GPS es fácil de integrar. La mayoría de los módulos receptores se comunican con un protocolo en serie sencillo, por lo que si puede encontrar un puerto en serie de repuesto en la placa del controlador, solo necesitará un puñado de cables para realizar la conexión física. E incluso si no, la mayoría de los controladores admiten un modo de serie de "software" emulado que puede utilizar para conectarse a pines arbitrarios.

Para los principiantes, el módulo Ultimate GPS Breakout de Adafruit es una buena opción. Hay muchos productos de la competencia en el mercado, pero el Ultimate tiene un rendimiento sólido a un precio razonable, con grandes orificios pasantes que son fáciles de soldar o conectar a una placa de pruebas.

Primero, conecte tierra y energía. En términos de Arduino, esto significa conectar uno de los pines GND del microcontrolador al GND del módulo y el pin + 5V al VIN del módulo. Para administrar la transferencia de datos, también debe conectar los pines TX y RX del módulo al Arduino. Voy a seleccionar arbitrariamente los pines 2 (TX) y 3 (RX) de Arduino para este propósito, aunque los pines 0 y 1 están diseñados específicamente para usarse como un "puerto serie de hardware" o UART. Porque no quiero desperdiciar el único UART que tienen estos procesadores AVR de gama baja. El UART de Arduino está cableado al conector USB integrado y me gusta mantenerlo conectado a mi computadora para la depuración.

Paso 4: un dedo del pie en el flujo de datos

Un dedo del pie en el flujo de datos
Un dedo del pie en el flujo de datos

En el instante en que aplica energía, un módulo GPS comienza a enviar fragmentos de datos de texto en su línea TX. Es posible que todavía no vea un solo satélite, y mucho menos tenga una "solución", pero el grifo de datos se abre de inmediato y es interesante ver qué sale. Nuestro primer boceto simple (a continuación) no hace más que mostrar estos datos sin procesar.

#incluir #definir RXPin 2

# definir TXPin 3 # definir GPSBaud 4800

#define ConsoleBaud 115200

// La conexión en serie al dispositivo GPSSoftwareSerial ss (RXPin, TXPin);

configuración vacía () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Ejemplo 1 de GPS");

Serial.println ("Visualización de los datos NMEA sin procesar transmitidos por el módulo GPS.");

Serial.println ("por Mikal Hart"); Serial.println ();

}

bucle vacío ()

{if (ss.available ()> 0) // A medida que llega cada personaje…

Serial.write (ss.read ()); //… escríbelo en la consola

}

NOTA: El esquema define el pin de recepción (RXPin) como 2, aunque dijimos anteriormente que el pin de transmisión (TX) estaría conectado al pin 2. Esta es una fuente común de confusión. RXPin es el pin de recepción (RX) desde el punto de vista de Arduino. Naturalmente, debe estar conectado al pin de transmisión (TX) del módulo y viceversa.

Cargue este boceto y abra Serial Monitor a 115, 200 baudios. Si todo funciona, debería ver un flujo denso e interminable de cadenas de texto separadas por comas. Cada uno se parecerá a la segunda imagen al principio del párrafo.

Estas cadenas distintivas se conocen como oraciones NMEA, llamadas así porque el formato fue inventado por la Asociación Nacional de Electrónica Marítima. NMEA define varias de estas oraciones para datos de navegación que van desde lo esencial (ubicación y tiempo) hasta lo esotérico (relación señal / ruido de satélite, variación magnética, etc.). Los fabricantes son inconsistentes sobre qué tipos de oraciones usan sus receptores, pero GPRMC es esencial. Una vez que su módulo se solucione, debería ver un buen número de estas oraciones GPRMC.

Paso 5: Encuéntrate a ti mismo

No es trivial convertir la salida del módulo sin procesar en información que su programa realmente pueda usar. Afortunadamente, ya hay algunas bibliotecas excelentes disponibles para hacer esto por usted. La popular biblioteca de GPS Adafruit de Limor Fried es una opción conveniente si está utilizando su última ruptura. Está escrito para habilitar funciones exclusivas de Ultimate (como el registro de datos internos) y agrega algunas campanas y silbidos elegantes propios. Sin embargo, mi biblioteca de análisis favorita, y aquí estoy, por supuesto, completamente imparcial, es la que escribí llamada TinyGPS ++. Lo diseñé para que sea completo, potente, conciso y fácil de usar. Vamos a probarlo.

Paso 6: Codificación con TinyGPS ++

Desde el punto de vista del programador, usar TinyGPS ++ es muy simple:

1) Crea un objeto gps.

2) Enruta cada carácter que llega del módulo al objeto usando gps.encode ().

3) Cuando necesite saber su posición o altitud u hora o fecha, simplemente consulte el objeto gps.

#incluir #incluir

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// La conexión en serie al dispositivo GPSSoftwareSerial ss (RXPin, TXPin);

// El objeto TinyGPS ++

TinyGPSPlus gps;

configuración vacía () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Ejemplo de GPS 2");

Serial.println ("Un rastreador simple que usa TinyGPS ++.");

Serial.println ("por Mikal Hart");

Serial.println ();

}

bucle vacío () {

// Si ha llegado algún personaje del GPS, /

/ enviarlos al objeto TinyGPS ++

while (ss.available ()> 0)

gps.encode (ss.read ());

// Vamos a mostrar la nueva ubicación y altitud

// siempre que alguno de ellos haya sido actualizado

if (gps.location.isUpdated () || gps.altitude.isUpdated ())

{

Serial.print ("Ubicación:");

Serial.print (gps.location.lat (), 6);

Serial.print (",");

Serial.print (gps.location.lng (), 6);

Serial.print ("Altitud:");

Serial.println (gps.altitude.meters ());

}

}

Nuestra segunda aplicación muestra continuamente la ubicación y la altitud del receptor, utilizando TinyGPS ++ para ayudar con el análisis. En un dispositivo real, puede registrar estos datos en una tarjeta SD o mostrarlos en una pantalla LCD. Coge la biblioteca y dibuja FindingYourself.ino (arriba). Instale la biblioteca, como de costumbre, en la carpeta de bibliotecas de Arduino. Sube el boceto a tu Arduino y abre Serial Monitor a 115, 200 baudios. Debería ver la actualización de su ubicación y altitud en tiempo real. Para ver exactamente dónde se encuentra, pegue algunas de las coordenadas de latitud / longitud resultantes en Google Maps. Ahora conecte su computadora portátil y salga a dar un paseo o conducir. (¡Pero recuerde mantener la vista en la carretera!)

Paso 7: la "CUARTA DIMENSIÓN"

Aunque asociamos el GPS con la ubicación en el espacio, no olvide que esos satélites también transmiten marcas de fecha y hora. El reloj GPS promedio tiene una precisión de una diez millonésima de segundo, y el límite teórico es aún mayor. Incluso si solo necesita que su proyecto lleve un registro del tiempo, un módulo GPS puede ser la solución más barata y sencilla.

Para convertir FindingYourself.ino en un reloj súper preciso, simplemente cambie las últimas líneas de esta manera:

if (gps.time.isUpdated ()) {

char buf [80];

sprintf (buf, "El tiempo es% 02d:% 02d:% 02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);

}

Paso 8: Encontrar su camino

Encontrar tu camino
Encontrar tu camino

Nuestra tercera y última aplicación es el resultado de un desafío personal para escribir un boceto de TinyGPS ++ legible, en menos de 100 líneas de código, que guiaría al usuario a un destino usando instrucciones de texto simples como "seguir recto" o "virar a la izquierda".

#incluir #incluir

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// La conexión en serie al dispositivo GPSSoftwareSerial ss (RXPin, TXPin);

// El objeto TinyGPS ++ TinyGPSPlus gps;

unsigned long lastUpdateTime = 0;

#define EIFFEL_LAT 48.85823 # define EIFFEL_LNG 2.29438

/ * Este ejemplo muestra un marco básico de cómo se puede utilizar el rumbo y la distancia para guiar a una persona (o un dron) a un destino. Este destino es la Torre Eiffel. Cámbielo según sea necesario

La forma más fácil de obtener las coordenadas lat / long es hacer clic con el botón derecho en el destino en Google Maps (maps.google.com) y elegir "¿Qué hay aquí?". Esto coloca los valores exactos en el cuadro de búsqueda

*/

configuración vacía () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Ejemplo 3 de GPS");

Serial.println ("Un sistema de orientación no tan completo");

Serial.println ("por Mikal Hart");

Serial.println ();

}

bucle vacío () {

// Si ha llegado algún carácter desde el GPS, // envíelo al objeto TinyGPS ++ while (ss.available ()> 0) gps.encode (ss.read ());

// Cada 5 segundos, haz una actualización

if (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ();

Serial.println ();

// Establecer nuestro estado actual

double distanceToDestination = TinyGPSPlus:: distanceBetween

gps.location.lat (), gps.location.lng (), EIFFEL_LAT, EIFFEL_LNG);

double courseToDestination = TinyGPSPlus:: courseTo

gps.location.lat (), gps.location.lng (), EIFFEL_LAT, EIFFEL_LNG);

const char * directionToDestination = TinyGPSPlus:: cardinal (courseToDestination);

int courseChangeNeeded = (int) (360 + courseToDestination - gps.course.deg ())% 360;

// depurar Serial.print ("DEBUG: Course2Dest:");

Serial.print (courseToDestination);

Serial.print ("CurCourse:");

Serial.print (gps.course.deg ());

Serial.print ("Dir2Dest:");

Serial.print (directionToDestination);

Serial.print ("RelCourse:");

Serial.print (courseChangeNeeded);

Serial.print ("CurSpd:");

Serial.println (gps.speed.kmph ());

// ¿A 20 metros del destino? ¡Estaban aquí

si (distancia al destino <= 20.0)

{Serial.println ("FELICIDADES: ¡Has llegado!");

salida (1);

}

Serial.print ("DISTANCE:"); Serial.print (distancia al destino);

Serial.println ("metros por recorrer.");

Serial.print ("INSTRUCCIÓN:");

// ¿Quedarse quieto? Simplemente indique en qué dirección ir

si (gps.speed.kmph () <2.0)

{

Serial.print ("Cabeza");

Serial.print (directionToDestination);

Serial.println (".");

regreso;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("¡Siga recto!");

else if (courseChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println ("Vira ligeramente a la izquierda.");

else if (courseChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println ("Vira ligeramente a la derecha.");

else if (courseChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println ("Gire a la izquierda.");

else if (courseChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println ("Gire a la derecha.");

demás

Serial.println ("Dar la vuelta por completo");

}

}

Cada 5 segundos, el código captura la ubicación y el rumbo (dirección de viaje) del usuario y calcula el rumbo (dirección al destino), utilizando el método courseTo () de TinyGPS ++. La comparación de los dos vectores genera una sugerencia de seguir recto o girar, como se muestra a continuación.

Copie el boceto FindingYourWay.ino (arriba) y péguelo en el IDE de Arduino. Establezca un destino a 1 km o 2 km de distancia, cargue el boceto en su Arduino, ejecútelo en su computadora portátil y vea si lo guiará allí. Pero lo más importante es estudiar el código y comprender cómo funciona.

Paso 9: ir más lejos

El potencial creativo del GPS es enorme. Una de las cosas más satisfactorias que hice fue una caja de rompecabezas con GPS que se abre solo en una ubicación preprogramada. Si su víctima quiere tener el tesoro encerrado dentro, tiene que averiguar dónde está ese lugar secreto y llevar físicamente la caja allí. Una idea popular del primer proyecto es algún tipo de dispositivo de registro que registra la posición minuto a minuto y la altitud de, digamos, un excursionista que recorre el Trans-Pennine Trail. ¿O qué hay de uno de esos rastreadores magnéticos furtivos que los agentes de la DEA en Breaking Bad colocan en los coches de los malos? Ambos son totalmente factibles y probablemente sería divertido de construir, pero te animo a pensar de manera más amplia, más allá de las cosas que ya puedes comprar en Amazon. Hay un gran mundo ahí fuera. Recorre lo más lejos y lo más ancho que puedas.

Recomendado: