Paso 5: El programa de ARDUINO que tira de él todos juntos
El programa de Arduino que desarrolló este prototipo utiliza la biblioteca de la SD. No estoy usando TinyGPS para interactuar con el receptor GPS o SoftwareSerial. No era necesario TinyGPS para este proyecto ya que estoy salvando raws mensajes NMEA a la tarjeta SD. En cuanto a la librería SoftwareSerial, después me encontré con unos temas que eran lentos para resolver que he decidido adherirse a la biblioteca serie de Arduino por defecto.
La desventaja de no utilizar SoftwareSerial en este proyecto es que el receptor GPS se usando pernos de RX/TX del Arduino para leer comandos de configuración y para enviar datos GPS a Arduino. Esto significa que no tenemos el Monitor de Arduino Serial disponible para la depuración. Más importante aún, tendremos que desconectar PIN0 (RX de la Arduino Uno) pin de TX del receptor GPS antes de subir un programa Arduino. Si no desconecta PIN0 (RX de Arduino) del receptor de GPS, probablemente dejará de subir el programa de Arduino desde la PC a la Arduino serial conflicto. Encontré esto para ser un precio pequeño para los avances en la codificación de compacidad y acortar el ciclo de desarrollo.
Los datos guardados por este programa a la SD se ven como la siguiente lista. Teóricamente, se generarán cinco líneas de datos GPS y sensor por segundo. Este registro se puede importar como un archivo delimitado por comas en una serie de aplicaciones como hojas de cálculo o bases de datos de depuración, análisis y gráficos:
- 446,425,542, GPRMC, 093116.200, A, N 3158.0155, 03551.5032, E, 18.78, 291.56, 111112,,, A * 54
- 443,442,542, GPRMC, 093116.400, A, N 3158.0159, 03551.5020, E, 18.78, 291.79 111112,,, A * 50
- 444,435,523, GPRMC, 093116.600, A, N 3158.0163, 03551.5009, E, 18.77, 292.32 111112,,, A * 53
- 444,432,525, PRMC, 093116.800, A, N 3158.0167, 03551.4998, E, 18.75, 292.88, 111112,,, A * 5A
// ====================== START PROGRAM ==========================
/*
Proyecto: Bump-O-Meter (registrador de datos de Geo para sensores)
Desarrollador: Hazim Bitar (techbitar arroba gmail punto com)
Descripción: Este programa lee los datos del sensor acelerómetro ADXL335 (X, Y, Z) o cualquier
datos del sensor guarda estos datos en una tarjeta SD junto con geo-localización y una fecha y hora
generado por el receptor de GPS de LS20031
Licencia: estoy colocando este código en el dominio público
FECHA: 16 DE NOVIEMBRE DE 2012
*/
#include
#define LED 8 / / LED de estado de operaciones del SD
#define BUFF_MAX 100 / / tamaño de búferes de GPS-SD
Archivo GPSlog;
void setup()
{
Serial.Begin(4800); El receptor GPS LS20031 debe establecerse en 4800 para el programa a trabajar
Puede utilizar las siguientes declaraciones para enviar comandos de configuración para el GPS de LS20031.
Pero para que funcione, debe ajustarse la velocidad en baudios en el receptor de GPS LS20031 a 4800.
Puede utilizar la utilidad 1.4 MiniGPS para configurar o consulta el receptor GPS LS20031.
//
LS20031 COMANDOS:
Serial.Print("$PMTK251,4800*27\r\n"); Ajuste velocidad GPS
Serial.Print("$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*2C\r\n"); Sistema RMC a 5 correcciones por segundo.
Serial.Print("$PMTK220,200*2C\r\n"); Tasa de actualización GPS de 5Hz
pinMode (10, salida); Por notas de la biblioteca de SD, pin 10 debe establecerse a la salida
pinMode (LED, salida);
if (!. ¿SD.Begin(4)) {/ / detecta tarjeta SD?
digitalWrite(LED,LOW); Apagar el LED de estado si no detección de SD
retorno;
}
Else digitalWrite (LED, alta); enciende el LED si detección de SD está bien
GPSlog = SD.open ("GPS.log", O_CREAT | O_WRITE); abierto/anexar a un archivo GPS.log
if (!. GPSlog) {/ / comprobar si el archivo se puede abrir
digitalWrite(LED,LOW); Apagar el LED de estado si no puede abrir archivo
retorno;
}
Else digitalWrite (LED, alta); encender LED de estado si el archivo abierto es aceptable
}
void loop()
{
char inBuffer [BUFF_MAX]; buffer utilizado para leer líneas NMEA del GPS
outBuffer Byte [BUFF_MAX]; buffer utilizado para escribir líneas NMEA a la tarjeta SD
int sizeBuffer = 0; contador de cuántos caracteres por línea
AQUÍ DECLARAMOS LAS VARIABLES DEL SENSOR MÁS O MENOS ANÁLOGO
char el an0 [4], an1 [4], an2 [4]; variables para almacenar valores de pin analógico de Char. Total 6 clavijas de 0-5
mientras que (Serial.available() > 0) / / si los datos en serie de GPS
{
sizeBuffer = Serial.readBytesUntil ('\n', inBuffer, BUFF_MAX); Lee una línea NMEA del GPS hasta final de línea
ESTO ES DONDE LEEMOS LOS VALORES DE LOS SENSORES
itoa (analogRead(A0), an0, 10); X leer y convertir el pin análogo numérico a char
itoa (analogRead(A1), an1, 10); // Y ..
itoa (analogRead(A2), an2, 10); // Z ..
para (int i = 0; i < BUFF_MAX; i ++) outBuffer [i] = inBuffer [i]; crear archivo CSV en SD
int j = 0;
ESTO ES DONDE ESCRIBIMOS LOS DATOS DEL SENSOR PARA EL ARCHIVO DE LA SD
Si (GPSlog) {}
GPSlog.print(an0); escribir ANALOG0 (X) en SD
GPSlog.print (",");
GPSlog.print(an1); escribir ANALOG1 (Y) a SD
GPSlog.print (",");
GPSlog.print(an2); escribir ANALOG2 (Z) en SD
GPSlog.print (",");
Si sólo desea salida NMEA conectado, todos los Estados de GPSlog.print comentario
GPSlog.write (outBuffer, sizeBuffer); Escribe salida NMEA del GPS a la SD
GPSlog.print("\r\n");
GPSlog.flush();
digitalWrite (LED, alta); Mantener el LED tanto registro de SD está trabajando.
}
Else {}
Si el archivo no abre, apagar LED
digitalWrite (LED, baja); Apagar LED si falla de escritura en archivo
}
}
}
// ================ END PROGRAM =====================
CÓMO AGREGAR O QUITAR LOS SENSORES PARA EL REGISTRADOR DE DATOS DE GEO
Este programa leerá hasta 6 sensores analógicos y guardar sus valores en la tarjeta SD. Hay dos lugares en el programa donde se necesita hacer cambios para adaptarse a sus necesidades:
1. DECLARAR VARIABLES DE SENSOR
En la sección de declaración, creamos variables de texto que contendrá los valores numéricos convertidos de los sensores antes de que los escriba en la tarjeta SD. Aquí, estamos declarando un máximo de 6 sensores analógicos. Reducir según sea necesario.
char el an0 [4], an1 [4], an2 [4]; AN3 [4]; AN4 [4]; AN5 [4];
2. LECTURA SENSORES
En esta parte del programa, convertimos las lecturas del sensor numérico a texto antes de que los escriba en la tarjeta SD. Cambiar el siguiente segmento de código en el programa para agregar o quitar los sensores según sea necesario. Puede tener hasta 6 sensores analógicos en este programa:
itoa (analogRead(A0), an0, 10);
itoa (analogRead(A1), an1, 10);
itoa (analogRead(A2), an2, 10);
itoa (analogRead(A3), an0, 10);
itoa (analogRead(A4), an1, 10);
itoa (analogRead(A5), an2, 10);
3. ESCRIBIR VALORES DE SENSORES A LA TARJETA SD
Después de leer los sensores arriba, escribimos los valores de texto para la tarjeta SD. En el segmento de código a continuación, añadimos una coma entre cada valor del sensor escrito en la tarjeta SD por lo que podemos separarlos. Esto hace más fácil importarlos en un programa de hoja de cálculo como texto delimitado por comas:
GPSlog.print(an0); escribir ANALOG0 en tarjeta SD
GPSlog.print (",");
GPSlog.print(an1); escribir ANALOG1 en tarjeta SD
GPSlog.print (",");
GPSlog.print(an2); escribir ANALOG2 en tarjeta SD
GPSlog.print (",");
GPSlog.print(an0); escribir ANALOG3 en tarjeta SD
GPSlog.print (",");
GPSlog.print(an1); escribir ANALOG4 en tarjeta SD
GPSlog.print (",");
GPSlog.print(an2); escribir ANALOG5 en tarjeta SD
GPSlog.print (",");