Arduino Mega GPS con pantalla LCD y registro SD: 9 pasos

Arduino Mega GPS con pantalla LCD y registro SD: 9 pasos

Tabla de contenido:

Anonim

Use su Audino Mega como un registrador de GPS con una clara pantalla LCD y 5 botones de función. Se utiliza un LED bicolor para proporcionar información de estado.

La tarjeta SD puede dejarse y leerse con un boceto del lector de tarjetas, con salida al monitor serie.

Esta instrucción le mostrará cómo se puede configurar una placa de GPS Adafruit Ultimate, basada en el chip MTK3339, para iniciar sesión en una tarjeta SD.

La pantalla lcd está configurada para mostrar:

  • Posición de latitud y longitud
  • Referencia nacional de Gid del Reino Unido
  • Altitud
  • Velocidad
  • Cojinete
  • Distancia recorrida desde el origen (el origen puede ser reiniciado)
  • Rango desde origen (como el cuervo)
  • Hora
  • Número de satélites
  • Dilución horizontal de posición (HDOP)
  • Estado de registro

Los valores de la pantalla LCD se pueden mostrar en unidades métricas o imperiales.

El concepto de registro original se desarrolló a partir de:

Maderero de ladyada

con la biblioteca SdFat de Bill Greiman

utilizando el chipset MTK3339

Suministros:

Paso 1: Requisitos

1) Arduino Mega 2560

La mega de Sainsmart también funciona.

2) LCD Keypad Shield http: //www.hobbytronics.co.uk/arduino-lcd-keypad-s …

El escudo del teclado sainsmart también funciona.

3) El protector del registrador gps definitivo de adafruit http: //proto-pic.co.uk/adafruit-ultimate-gps-logge …

4) Arduino Stackable (Shield) Header Kit - R3 http: //www.hobbytronics.co.uk/cables-connectors/p …

Saque los pasadores de los conectores de cabecera de una sola fila y utilice el plástico para crear longitudes de espaciadores para los conectores de cabecera apilables de protección.

5) Cátodo común bicolor rojo / verde con diámetro de 3 / 5mm

6) Tarjeta de memoria micro SD http: //www.hobbytronics.co.uk/4gb-microsd? Keyword = …

7) Resistor para control de corriente LED (depende del LED)

Si el LED requiere 10 ma @ 5V, la resistencia sería R = V / I = 5 / 0.010 = 500 ohmios

8) CAJA de plástico

Utilicé 15 cm * 10 cm * 5 cm y me habría vuelto más pequeño si pudiera haberlo obtenido.

9) Conector de alimentación de CC de 5,5 mm para Arduino http: //www.hobbytronics.co.uk/cables-connectors/dc …

9) Conector hembra mono de 3,5 mm.

10) Interruptor del panel (con./desc. Clasificado conveniente para 5v 500mA)

11) Portafusibles de panel con fusible rápido de 500 mA

12) Pequeños pies adhesivos de goma (8 necesarios)

13) espaciadores de nylon de 10 mm con diámetro interno de 3,3 mm http: //www.hobbytronics.co.uk/hardware/spacers-was …

Estos encajan perfectamente en los botones lcd para hacer extensiones. Utilice modelos de superglue de fabricantes para adjuntar. Aplicar utilizando una micro boquilla con cuidado!

14) Tornillos de 2-2.5 mm con tuercas y arandelas (se necesitan 3) para actuar como pilares de soporte para el Arduino. Un tornillo estrecho de 2cm de largo.

15) Pequeña longitud de clavija de 5mm. Tornillo pequeño para fijar. 3-4 pequeños lavados plásticos.

16) Hardboard para adaptarse a la parte inferior de la caja. La madera para hacer dos bases soporta el ancho de la caja.

17) Una batería: utilicé un LIPO de 2 celdas de 500 mAH. Necesitarás un Cargador lIPO para esto.

18) Conduce para que coincida con el tipo de terminal de la batería.

19) Un cable adaptador UFA a SMA opcional si planea agregar un arial externo.

El gps es muy sensible, todavía no he comprado un arial.

Paso 2: Comenzando

Lea el artículo de adafruit en el último gps

Otro artículo útil http: //learn.adafruit.com/adafruit-shield-compat …

Coloque 4 pies pequeños de goma en la base de Arduino Mega:

Esto proporcionará una superficie de montaje estable.

Evite los orificios de montaje.

Coloque los conectores apilables en la placa gps:

Asegúrate de usar los orificios más exteriores de la placa GPS. ¡Mira cómo va todo junto!

Inserté parcialmente el tablero en el arduino, luego soldé los 2 pines finales en cada sección con el tablero hacia abajo.

Se debe tener cuidado de no sobrecalentar el tablero. El resto de los pines se soldaron con el tablero quitado.

Use una longitud de conectores rectos de una fila y tire de las clavijas para hacer tiras de espaciadores. Ajuste los espaciadores en cada una de las 4 secciones de conectores apilables que tiene ahora en la placa GPS.

Suponiendo que está utilizando un Mega, Cortar las pistas a los pines 7, 8 y 10. como se muestra en el croquis. Use un bisturí afilado y corte con cuidado. Compruebe antes de cortar!

Coloque la batería del GPS y la tarjeta SD:

Inserte la batería, notando la polaridad.

Deslice con cuidado la tarjeta SD preformada en la ranura hasta que se mantenga en su lugar. Observe la alineación correcta.

Conecte 3 cables a CCS, TX y RX :

Doblé los cables en un conector apilable de 6 vías de repuesto a través de 90 grados y lo soldé en la fila con CSS / TX / RX

Esto me permite quitar los cables fácilmente, si es necesario.

Alternativamente, soldar los cables directamente.

Añadir el LED bicolor:

Verifique la hoja de datos de su LED bicolor y seleccione una resistencia para proporcionar la corriente correcta. Establecer la orientación para los leads. El LED debe ser del tipo de cátodo común.

Coloque temporalmente la placa LCD en la placa GPS, haga coincidir los orificios con cuidado!

Doble los cables de conexión utilizando pliegues de punta puntiaguda como soporte para lograr el perfil en el boceto.

El led debe despejar el final de la pantalla lcd en 10-12 mm y llegar a 4-5 mm por encima de ella para que salga del estuche.

Retire la pantalla LCD cuando haya establecido el perfil y la longitud del cable.

Suelde el LED, la resistencia y los 3 cables en la parte inferior de la placa GPS.

Led rojo al pin 2, verde al pin 3 y cátodo a través de resistencia a 0V.

Conecte el tablero GPS en el Arduino Mega:

Si está utilizando un Sainsmart, habrá dos conductores en cada lado que no estarán en los orificios de los zócalos. Antes del ensamblaje, los doblé ligeramente hacia afuera y coloqué un tubo termorretráctil en los pasadores expuestos.

Conecte los 3 cables al Arduino-RX a TX1, TX al RX1 y SSC al pin 32 (podría ser otro si lo desea)

Ponga el interruptor de GPS en SERIE SUAVE.

Conecte la placa LCD a la placa GPS:

Encuentre el orificio de montaje en la placa lcd al lado de los botones. Corte con cuidado una pieza de clavija de madera de 5 mm para sostener el extremo del botón de la pantalla LCD debajo del orificio de montaje. Debería descansar en el banco. Esto detendrá el balanceo de la pantalla LCD cuando se presionan los botones.

Coloque suficientes arandelas de plástico en la ranura para evitar que se cierre. Atornille la varilla de madera en su lugar, use un buen orificio piloto. Si es necesario, ajuste la altura con papel de lija / lavados. La varilla simplemente debe despejar el acceso a la toma de corriente Mega.

Paso 3: Hacer una caja

1) Cortar un pedazo de tableros duros para caber dentro de la base de la caja - Permitir al menos 2 mm de movimiento todo el año.

2) Coloque el Mega en la base: colóquelo cuidadosamente para permitir 15 mm desde el borde izquierdo de la pantalla LCD hacia la izquierda de la caja y 35 mm desde el borde frontal del LCD hacia la parte frontal de la caja. Marque y taladre un agujero de montaje. Avellana el fondo de la base. Coloque una tuerca y perno de 2 mm desde la parte inferior.

Vuelva a colocar el Arduino y coloque un segundo orificio; asegúrese de que el lcd esté paralelo a la base.

Añadir una tercera tuerca y tornillo. El montaje final será un tornillo desde la parte superior al orificio de montaje inferior derecho.

Corte y lime los pernos de montaje a la longitud adecuada.

3) Coloca la mega en sus monturas. Mida cuidadosamente la altura entre la parte superior de la caja y la parte superior de la pantalla LCD. Verifique la posición de la parte inferior de la tapa con respecto a la parte superior de la pantalla LCD.

Haz dos corredores rectangulares. La profundidad correcta para colocar la parte superior de la pantalla LCD. 1-2 mm debajo de la tapa inferior.

El corredor derecho debe ser Centrado en el orificio del tornillo para la posición de montaje inferior derecha.

Atornille a través de la parte superior de la base para asegurar los corredores. Evite el orificio de montaje.

Verifique la altura de la pantalla LCD con respecto a la tapa. No coloque la tapa. ¡El led se doblará!

4) Taladre el orificio del tornillo en la guía derecha. Encienda ligeramente el arandela alrededor del orificio del tornillo. Corte un espaciador de nylon de 10 mm para apoyar la sección inferior derecha de la tabla. Sostenga el espaciador en su lugar con el tornillo y pegue el espaciador en su lugar.

5) Coloque el Mega con el lcd paralelo al frente de la caja. Monte la base con un tornillo avellanado en cada corredor desde el exterior de la caja. Debe observarse una colocación cuidadosa.

6) Medir la ubicación del LED.. Perfore un pequeño agujero piloto en la tapa. Verifique que el LED esté alineado y abra el orificio a un tamaño libre para el LED. La tapa ahora continuará.

7) Medir y cortar el agujero para la pantalla LCD. - 1-2 mm menos que el tamaño externo del soporte de pantalla lcd.

8) Retire la base y corte dos tiras de cartulina corrugada para que coincida con la base de los corredores. Pégalos a los corredores. Luego, coloque 2 agujeros a través de la tarjeta para que coincidan con los agujeros de los tornillos. Vuelva a colocar la base. Ajuste la presión del tornillo hasta que la tapa encaje bien en la parte superior de la pantalla LCD (¡Ah, el espacio de 1-2 mm!)

9) Perfore los cinco agujeros de los botones:

Con cuidado pinte tippex blanco en la parte superior de los botones.

Mida la posición del botón inferior izquierdo. Taladre un agujero piloto en la tapa. Verifique que el orificio esté alineado. Ponga la tapa, haga brillar una antorcha desde arriba; la parte superior blanca del botón debe aparecer.

Ajuste el orificio piloto si es necesario con un archivo de agujas circular: vuelva a verificar la posición y taladre el orificio hasta el diámetro libre para un espaciador de nylon de 10 mm.

Repita para 4 botones más. Limpiar el tippex con espíritu blanco.

10) Agregue el botón Extensiones a la placa LCD:

Protege tu superficie de trabajo. Prepare un paño de papel. Retire todos los niños que distraen.

Compruebe que los espaciadores de Nylon de 10 mm se apoyan bien en los botones. Si es necesario, amplíe los orificios hasta lograr un ajuste de interferencia. Necesitará fabricantes de modelos de control de radio pegamento de cianoacrilato: viscosidad media a delgada y algunas boquillas de pegamento fino, también de un proveedor de modelos de control de radio. Montar el primer espaciador verticalmente. Luego, utilizando la boquilla más fina, aplique un poco de pegamento en el interior de la parte inferior del tubo. Invierta la placa lcd para evitar la infiltración en el interruptor. Espere un minuto y luego haga los otros botones siguiendo el mismo procedimiento. Deje el LCD invertido durante 30 minutos para permitir que el pegamento se cure. Mientras tanto, retire y deseche la boquilla fina. Limpie la botella de pegamento con un pañuelo de papel y vuelva a colocar la parte superior del pegamento.

¡Comprueba que la tapa de la caja encaja!

11) Perfore y monte el zócalo del cargador, el fusible del interruptor y el cable Arial (Si es requerido)

12) Retire el tornillo de la caja plástica de alivio de tensión del enchufe de alimentación de CC de 5,5 mm. Suelde un par de cables a los terminales- rojo para la punta. Use un tubo retráctil para aislar y colocar los cables en una curva antes de calentar. Retirar el estuche de alivio de tensión deja espacio para el soporte de madera.

13 Conecte el cableado como se muestra en la vista interna de la caja..

La punta del zócalo de phono debe estar conectada a la batería positiva.

La conexión conmutada en el zócalo de phono proporciona el suministro al resto del circuito.

14) Cortar el agujero para el conector USB y volver a montar el Arduino.

Incluya la conexión UFL al cable arial si es necesario, manéjelo con cuidado.

Apriete suavemente el tornillo de montaje final de la placa.

Compruebe el cableado con cuidado. ¡No acepto la responsabilidad por esta o cualquier otra característica contenida en!

15) Conecta la bateria y fijar en su lugar con velcro

Pegue 4 pies pequeños de goma a la base de la caja y estará completo.

Paso 4: Bibliotecas y Software

Tendrá que instalar dos bibliotecas:

1) Descargue e instale la biblioteca gps de adafruit

2) Instale la biblioteca de tarjetas sd de adafruit:

La instalación predeterminada no funcionará a menos que se elimine cualquier biblioteca sd existente de su carpeta Arduino aries. Por todos los medios haga esto e instale la biblioteca desde

O mantén tu biblioteca sd existente en su lugar y descarga SDADA.zip Que he modificado para aceptar llamadas a SDADA. Instalarlo en Arduino librerías SDADA De esta manera usted todavía puede utilizar la otra biblioteca SD

Si está utilizando la versión SDADA, se incluye en el boceto gps2.ino con la línea:

#incluir SDADA.h

Si no, comente esta línea y use: #include SD.h

Ambas bibliotecas tienen un ejemplo con el que puedes probar el GPS.

Las siguientes bibliotecas ya deberían estar instaladas por defecto:

LiquidCrystal.h

SoftwareSerial.h

SPI.h

avr / sleep.h

Descargar gps2.zip

Guarde gps2.ino y gps_card.ino en sus propias carpetas en su directorio de croquis de Arduino.

Abrir gps2.ino

Modificar la siguiente línea:

#incluir SDADA.h

para #incluir SD.h si no está utilizando mi biblioteca SD modificada

Este cambio también se aplica a gps_card.ino

Compruebe la configuración de la marca de LCD:

En la sección de configuración:

santo booleano = verdadero; // Establézcalo en verdadero si utiliza el escudo lcd sainsmart, falso para otro, por ejemplo, el escudo DFROBOT.

Establezca la variable sain de acuerdo con su elección de lcd.

Tenga en cuenta que las dos tarjetas LCD indicadas utilizan el pin 10 para configurar la luz de fondo. El botón de subir permite que la luz de fondo se apague, ahorrando energía de la batería.

gps2.ino ahora debería funcionar!

Los botones:

una) Seleccionar cambia la función mostrada en la 1ª línea del lcd:

Posición y altitud (longitud y latitud decimales, alternando con la altitud)

Posición (longitud decimal y latitud)

Posición en la inspección de artillería coordenadas este y norte más número de hoja del SO

Altitud

Ejecución total de la distancia desde el origen

Rango desde el origen

Hora

segundo) Izquierda alterna métrico / imperial.

do) Derecha alterna el registro:

Una L se muestra en la parte inferior derecha cuando se registra

Un ! la marca en esta posición indica que no hay tarjeta SD, o tarjeta no disponible

re) Arriba alterna la pantalla de nuevo. (Ahorro de energía útil.)

mi) Abajo restablece la distancia a cero:

Esto establece la posición actual como el origen para el rango. (El cuervo vuela distancia al origen.)

Para activar un botón, manténgalo presionado hasta que el led deje de parpadear. Luego suelte.

Paso 5: Usando la tarjeta SD en Gps2.ino

Configurando la tarjeta sd:

El pin de selección de chip por defecto y el pin de chipSelect real deben configurarse para la salida.

Se accede a la tarjeta SD con una declaración de inicio que incluye los pines utilizados por la tarjeta en la placa gps.

La velocidad de la tarjeta se establece en SPI_Full_SPEED.

En el caso de un error, el led muestra una señal de error en el encabezado del boceto.

Si la depuración se establece en verdadero en la configuración, también se envían los mensajes del monitor serie.

Si la tarjeta se inicializa correctamente, la variable hascard se establece en verdadero.

// Asegúrate de que el pin de selección de chip predeterminado esté configurado en

// salida, incluso si no lo usas:

pinMode (SS, SALIDA); // pin predeterminado mega select

pinMode (chipSelect, OUTPUT);

digitalWrite (chipSelect, LOW);

// ver si la tarjeta está presente y se puede inicializar:

if (! SD.begin (chipSelect, 11, 12, 13)) {

if (debug) Serial.println (F ("Card init. failed!"));

error (1);

} else {

if (! card.init (SPI_FULL_SPEED, chipSelect, 11, 12, 13)) {

error (2);

if (debug) {

Serial.println (F ("initialization failed. Things to check:"));

Serial.println (F ("* se inserta una tarjeta?"));

Serial.println (F ("* ¿Está correcto el cableado?"));

Serial.println (F ("* ¿Cambió el pin chipSelect para que coincida con su escudo o módulo?"));

}

}más{

hascard = true;

if (debug) Serial.println (F ("Card init. successed"));

}

}

Seleccionando el archivo SD para el registro:

Cuando el se presiona el botón derecho Se llama subrutina openfile.

Esto inspecciona la carpeta gps en busca de un nombre de archivo no utilizado en la secuencia GPSLOGnn.TXT, donde nn = 0 a 99.

Si se encuentra un archivo, establezca foundit en true.

if (! hascard) {return;} // no continúa si una tarjeta no existe o no está disponible

byte i;

nombre de archivo char 18;

strcpy (nombre de archivo, "/gps/GPSLOG00.TXT");

nombre de archivo 17 = char (0);

boolean foundit = falso;

para (i = 0; i <100; i ++) {

nombre de archivo 11 = '0' + i / 10;

nombre de archivo 12 = '0' + i% 10;

if (! SD.exists (nombre de archivo)) {

foundit = true; descanso;

}

}

Si todos los nombres de archivo están en uso, se encontró que sería falso y se le preguntará al usuario si los primeros 50 deben borrarse. Si esto no está bien, hascard se establece en falso para que no haya más intentos de registro.

si (! foundit) {

int thisbutton = -1;

lcd.clear ();

lcd.print ("Dir full-Erase?");

lcd.setCursor (0,1);

lcd.print ("Sel: Ok Derecha: No");

hacer{

thisbutton = read_LCD_buttons ();

} while (este botón == btnNONE);

lcd.clear ();

if (thisbutton == btnSELECT) {

lcd.print ("Borrar");

para (i = 0; i <50; i ++) {

nombre de archivo 11 = '0' + i / 10;

nombre de archivo 12 = '0' + i% 10;

if (SD.exists (nombre de archivo)) SD.remove (nombre de archivo);

}

i = 0;

nombre de archivo 11 = '0' + i / 10;

nombre de archivo 12 = '0' + i% 10;

}más{

error (4);

hascard = false;

regreso;

}

}

El archivo se puede abrir:

En caso de error, se emite información en serie y el código de error se indica mediante el led de estado.

Si tiene éxito, se genera la primera línea del archivo. Estos son los encabezados de las columnas.

Tenga en cuenta el uso de logfile.flush (). Esto asegura que toda la salida se envíe al archivo SD antes de continuar.

logfile = SD.open (nombre de archivo, FILE_WRITE);

if (! logfile) {

if (debug) {

Serial.print ("No se pudo crear");

Serial.println (nombre de archivo);

}

error (3);

hascard = false;

}más{

logging = true;

myfile = nombre de archivo;

logfile.println (pad ("Time", 13) + lpad ("Date", 9) + lpad ("Longitude", 10)

+ lpad ("Latitude", 10) + lpad ("Altitude", 9) + "m" + lpad ("Geoid", 9) + "m" + lpad ("Speed", 7) + "mph Bearing");

logfile.flush ();

if (debug) {Serial.print ("Escribiendo a"); Serial.println (nombre de archivo);}

}

lpad y almohadilla Son funciones de relleno de texto:

String lpad (String temp, byte L) {

byte mylen = temp.length ();

if (mylen> (L - 1)) return temp.substring (0, L-1);

para (byte i = 0; i <(L-mylen); i ++) temp = "" + temp;

temperatura de retorno

}

Pad de cadena (temp. De cadena, byte L) {

byte mylen = temp.length ();

if (mylen> (L - 1)) return

temp.substring (0, L-1);

para (byte i = 0; i <(L-mylen); i ++) temp = temp + "";

temperatura de retorno

}

Escribiendo en el archivo:

El bucle principal lee los gps y envía los valores a un archivo si se está realizando el registro. (Aparece una "L" en la esquina inferior derecha de la pantalla LCD).

Los valores están formateados para producir columnas de ancho fijo.

La función dtostrf (float, w, dp, buf) es una función de la biblioteca Arduino que toma una variable float y la convierte en una cadena, de ancho w con puntos decimales dp. buf es un búfer de caracteres que debe ser lo suficientemente grande para manejar la conversión.

He definido buf con "char buf 20;" en el encabezado del boceto.

El archivo se vacía antes de continuar.

ogfile.print (pad (mytime, 13)); // incluye mili segundos

logfile.print (pad (myyear, 9));

logfile.print (dtostrf (longitud, 10,5, buf));

logfile.print (dtostrf (latitud, 10,5, buf));

logfile.print (dtostrf (altitudem, 9,1, buf)); logfile.print ("m");

logfile.print (dtostrf (geoide, 9,1, buf)); logfile.print ("m");

logfile.print (dtostrf (speedmph, 7,2, buf)); logfile.print ("mph");

logfile.print (dtostrf (encabezado, 6,1, buf)); logfile.println ("deg");

logfile.flush ();

Cerrando el archivo:

Si la tarjeta no está disponible, vuelva, de lo contrario, descargue toda la salida restante a la tarjeta antes de cerrar el archivo.

void closefile () {

if (! hascard) volver;

logfile.flush ();

logfile.close ();

registro = falso;

if (debug) Serial.println ("File" + myfile + "closed");

}

Paso 6: Leyendo el gps

Configure las bibliotecas en el encabezado del script:

#include Adafruit_GPS.h

#include SoftwareSerial.h

HardwareSerial mySerial = Serial1;

Adafruit_GPS GPS (& mySerial);

Seleccione el gps en el inicio:

pinMode (chipSelect, OUTPUT);

digitalWrite (chipSelect, LOW);

GPS.begin (9600);

// Establecer la velocidad de actualización // 1Hz funciona bien y deja tiempo para realizar el registro GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // alternativamente, 0.1Hz, 5Hz y tasa de actualización de 10Hz

// RMC (mínimo recomendado): GGA (datos de reparación) que incluye la altitud GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA);

// Desactivar las actualizaciones sobre el estado de la antena, si el firmware lo permite

GPS.sendCommand (PGCMD_NOANTENNA);

Lea el GPS por interrupción con el fin de hacer eco al monitor en serie.

Tenga en cuenta que los datos se interpretan en realidad en el código de la biblioteca Adafruit_GPS.h, no en esta rutina de interrupción.

// Interrupción de 1 ms en el temporizador 0 para facilitar el eco de datos gps

si GPSECHO = true useInterrupt (true); // leer entrada por interrupción si es verdadero

¡Eso es! Repetir y leer:

GPS.newNMEAreceived () se establece en true si ha llegado nueva información de gps.

GPS.parse (stringptr) se establece en verdadero si los valores se han separado (analizado) con éxito de las cadenas de texto GPS sin formato.

GPS.fix se establece en verdadero si el GPS informa que tiene una corrección en su posición.

Si el gps tiene un arreglo, extraiga los valores de posición, altitud, velocidad, rumbo, tiempo, geoidheight, satélites y hdop.

La posición se devuelve en longitud decimal y latitud, velocidad en nudos, distancia en metros.

if (GPS.newNMEAreceived ()) {

char * stringptr = GPS.lastNMEA ();

if (! GPS.parse (stringptr)) return; // dale la vuelta si es falso

si (GPS.fix) {

digitalWrite (ledGreen, HIGH);

fijo = verdadero; // recordar el estado en caso de que cambie el proceso medio

mymillis = GPS.milliseconds;

myseconds = GPS.seconds;

mytime = String (GPS.hour) + ":" + String (GPS.minute) + ":";

logtime = mytime;

logtime + = String (int (myseconds + mymillis / 1000 + 0.1)); // redondear si dentro de 0.1 S

mytime + = String (myseconds + mymillis / 1000); // tiempo recordado completo

myyear = String (GPS.day) + "/" + String (GPS.month) + "/";

lcdyear = myyear; theyear = String (GPS.year);

myyear + = theyear;

mylen = theyear.length ();

lcdyear + = theyear.substring (mylen-1, mylen); // último dígito solo para encajar

latitud = GPS.latitudeDegrees;

longitud = GPS.longitudeDegrees;

altitudem = GPS.altitude;

altitudef = altitudem * fconvert;

speedknots = GPS.speed;

speedmph = speedknots * 1.15077945;

speedkph = speedknots * 1.85200;

rumbo = GPS.angle;

satélites = GPS.satellites;

geoide = GPS.geoidheight;

hdop = 7-int (GPS.HDOP + 0.5);

Paso 7: Posición de la cuadrícula nacional del Reino Unido y distancia recorrida

1) Conversión de posición en unidades de medidor de levantamiento de municiones de longitud y latitud decimales a Reino Unido Se detalla en un pdf suministrado por la encuesta de artillería:

http: //www.ordnancesurvey.co.uk/docs/support/guide …

La página 40 no hace una lectura ligera, pero proporciona las matemáticas necesarias.

Mi subrutina von ordnance (float phi, float lamda) implementa el cálculo.

Los valores devueltos tienen una precisión de + - 0.1 para el este y + - 0.02 para el norte. Esta falta de precisión se debe a la precisión limitada de la aritmética flotante de Arduino. El Arduino solo soporta "6-7" lugares decimales significativos.

El número de la hoja de inspección de municiones puede extraerse del dígito más significativo en los valores de longitud y latitud. Function String NE2NGR (float & east, float & north) realiza la extracción y se acredita a:

Alex http: //www.codeproject.com/Articles/13577/GPS-Der …

2) La distancia recorrida se puede calcular a partir de la diferencia en dos valores de latitud y longitud.

Para pequeñas diferencias, la estimación debe ser sospechosa debido a la falta de precisión inherente en una solución de GPS. La restricción en el soporte del lugar decimal de punto flotante de Arduino también afecta la precisión general. A pesar de esto, las estimaciones acumuladas de la distancia recorrida son razonables. El rango hasta el origen es bastante preciso, ya que solo implica la diferencia entre 2 ubicaciones.

El origen de los cálculos de distancia se puede restablecer con el botón inferior.

A velocidades bajas, muestro las posiciones durante un período de tres segundos para aumentar la probabilidad de que la diferencia de posición sea mayor que la distancia de incertidumbre en la corrección del GPS. A velocidades más altas reduzco el tiempo entre las posiciones muestreadas. Este tiempo es controlado por la variable dlimit.

La subrutina float distance_between (float lat1, float long1, float lat2, float long2) devuelve la distancia.

El trabajo original está acreditado a Maarten Lamers.

Paso 8: Leyendo la sdcard usando gps_card.ino

Este boceto asume que usted ha conectado un monitor serial, preferiblemente uno con la capacidad de copiar texto.

Desafortunadamente, el monitor Arduino Serial predeterminado parece no ofrecer esta característica. (Yo escribí mi propia.)

CoolTerm por Roger Meier hace el trabajo

Si está utilizando la configuración predeterminada de la biblioteca SD, haga el cambio:

#include SD.h en lugar de #include SDADA.h

Ajuste el monitor de serie a una velocidad de 115200.

Cuando se ejecute el croquis, se probará la tarjeta SD y Muestra el tamaño de la tarjeta y los detalles del directorio gps.

Escriba el nombre de un archivo y se abrirá y se mostrará.

Los archivos individuales se pueden eliminar usando # borrar nombre de archivo

Los datos se presentan en columnas de ancho fijo con delimitadores de espacio.

Suponiendo que puede copiar el texto, usar los valores de Excel es muy sencillo.

Paso 9: Especificaciones

los Pantalla LCD tiene una línea superior seleccionable y una línea inferior que consiste en:

Número de satélites

Velocidad

HDOP- Dilución horizontal de posición.

Cojinete

El estado de registro:

  • "L" - Registro
  • "" - No está registrando
  • "!" - La tarjeta SD no está presente o no está disponible

La línea superior:

Posición de latitud y longitud en grados, alternando con la altitud

Latitud y Longitud en grados

Referencia nacional de Gid del Reino Unido

Altitud

Distancia recorrida desde el origen (el origen puede ser reiniciado)

Rango de origen

Hora

Notas:

Valores LCD en métricos o imperiales.

Para la pantalla LCD, una velocidad de <= corte (0.65) mph se muestra como 0

El número de satélites se muestra como una barra vertical en la esquina inferior izquierda. El número más grande que se puede mostrar es 8, después de eso la barra está llena.

HDOP se indica en la barra móvil inferior central. HDOP indica la extensión de los satélites observados: el aumento en la extensión aumenta la precisión y el número de HDOP disminuye. Los valores de HDOP de 1 son muy buenos!

Una precisión HDOP de <0.5 se muestra con una barra completa.

Se muestra un HDOP de 0.5 a 1.5 (1) con 7 barras.

Un HDOP de 6 se muestra con 1 barra.

Un HDOP de> 6 no muestra barras.

Botones:

a) Seleccione los cambios de lcd 1ª línea entre

altitud / posición (longitud y latitud)

posición (largo y lat)

posición en la inspección de artillería x, y coordenadas

altitud

hora

b) Izquierda alterna métrica / imperial

c) Derecho alterna el registro

d) Activa o desactiva la pantalla trasera (ahorro de energía útil)

e) Abajo restablece la distancia a cero y establece la posición actual como el origen para el rango (la distancia de vuelo al origen)

Para activar un botón, mantenga presionado hasta que el led deje de parpadear. Luego suelte.

Indicador LED:

Intervalo de 1 segundo Rojo intermitente - Sin corrección

Intervalo de 1 segundo Verde intermitente - Reparar

Cuatro destellos cortos de color verde: se ha presionado un botón

1 destello rojo repetido 5 veces - Error 1: Falló el inicio de la tarjeta SD

2 destellos rojos repetidos 5 veces - Error 2: Falló el inicio de la velocidad de la tarjeta SD

3 destellos rojos repetidos 5 veces - Error 3: No se puede crear el archivo de registro

4 destellos rojos repetidos 5 veces: error 4: 100 archivos en la carpeta de registro y no se eliminan

La estimación de distancia acumulada tendrá errores de redondeo acumulativos de varias posiciones de intervalo de un segundo.

El rango será más preciso ya que solo lo determinan dos ubicaciones.

Tenga en cuenta que la precisión del valor del levantamiento de la artillería es limitada. Los valores flotantes de arduino tienen entre 6 y 7 decimales significativos. La fórmula de conversión implica muchos cálculos y los errores de redondeo tienen efectos acumulativos. En última instancia, la precisión está restringida por los valores devueltos de pecado, cos y tan.

El valor del este parece ser exacto a + - 0.1

El norte a + - 0.02.

En comparación, los valores de longitud / latitud parecen precisos a + - 0.00001

Conectar un ufl a un cable SMA no afecta el rendimiento. Sólo un arial activo (1575.42MHz) sería reconocido por el chip GPS.