Registrador de datos geo: Arduino + GPS + SD + acelerómetro para registrar, sello de tiempo y datos del sensor geo-tag (5 / 10 paso)

Paso 5: El programa de ARDUINO que tira de él todos juntos

Este programa lee el receptor del GPS de LS20031 y guarda las sentencias NMEA, generadas por el receptor como-es en la tarjeta SD.  El programa también lee X, Y, pins de la Z del acelerómetro ADXL335 y ahorra con cada línea NMEA guardados.

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 (",");

Artículos Relacionados

Registrador de datos de Sensor de luz y temperatura

Registrador de datos de Sensor de luz y temperatura

En este tutorial hago una temperatura y registrador de datos de sensor de luz con un Arduino para que puedo probar diferentes ubicaciones para plantas o lugares para dormir afuera en el verano que no se llega a mucho solPaso 1: Lo que se necesita1 pl
Enviar datos del sensor (DHT11 & BMP180) a ThingSpeak con un Arduino, utilizando ENC28J60 Ethercard

Enviar datos del sensor (DHT11 & BMP180) a ThingSpeak con un Arduino, utilizando ENC28J60 Ethercard

Nota: Este instructivo es para el viejo ENC26J60 Ethershield y ethercard. Si tienes el WIZ5100 moderno basado en Ethernetshield o un ESP8266 ir a visitar mi instructable que menciono a continuaciónSobre un año y medio atrás publiqué un instructivo qu
Escudo de acelerómetro para clase de física y más allá

Escudo de acelerómetro para clase de física y más allá

durante una clase de física nos preformado un experimento de física para medir el accleration debido a graivty - 9.8 m/s ^ 2 y mientras que no hizo ningún nuevos descubrimientos de la física que tenía una idea para mejorar el experimento. La manera e
Datos del sensor de Linkit una porción JSONP (ejemplo batería)

Datos del sensor de Linkit una porción JSONP (ejemplo batería)

Esto es parcial algo empecé a hacer con el Edison de Intel (ver aquí:). La idea es relativamente simple: presentar los datos del sensor como json(p) para que un habilitador de IoT (como freeboard.io) puede consumir fácilmente los datos. Como mínimo v
Hacer: es robótica Starter Kit de captura de datos del Sensor

Hacer: es robótica Starter Kit de captura de datos del Sensor

Instructable pasado hablamos un poco sobre lo que está haciendo el programa de linefollow.ino. Presenté un script en Python que nos permitirá analizar el bit a bit if declaraciones para ver cómo el valor que devuelve el método read_Optical() obtiene
Hacer: es robótica Starter Kit - envío de datos del Sensor sin cables

Hacer: es robótica Starter Kit - envío de datos del Sensor sin cables

En este Instructable van a tomar lo que hemos aprendido en "hacer: es robótica Starter Kit – conectividad inalámbrica" y "hacer: es robótica Starter Kit – captura de datos de los sensores" y combinar esta información para capturar dato
Utiliza tu iPhone para escanear vehículos códigos y leer datos del Sensor

Utiliza tu iPhone para escanear vehículos códigos y leer datos del Sensor

Con el uso de un muy barato (10$!) adaptador puede utilizar tu iPhone como herramienta de diagnóstico para averiguar del motor del cheque del vehículo ligero, borrar los códigos, o ve los sensores (tales como temperaturas, lecturas del sensor de oxíg
Envío de datos del Sensor de temperatura a base de datos de azul

Envío de datos del Sensor de temperatura a base de datos de azul

Este proyecto utiliza un Raspberry Pi B + a 2 sensores de temperatura y envía los datos a un origen de datos azul que puede utilizarse para crear gráficos.Un montón de código para acceder a los sensores de temperatura vino de Adafruit tutorial de Ada
Enviar datos del sensor (DHT11 & BMP180) a ThingSpeak con un Arduino, mediante cable o WiFi (ESP8266)

Enviar datos del sensor (DHT11 & BMP180) a ThingSpeak con un Arduino, mediante cable o WiFi (ESP8266)

Escribí este instructable porque Thingspeak - no importa lo fácil fijar para arriba - tiene algunos obstáculos que me topé y que, a juzgar por las reacciones, otras personas están luchando con así.Cosas que usted necesita:ArduinoEthernetShield WS5100
Transmisión de datos del Sensor de un ppDAQC placa de Pi usando InitialState

Transmisión de datos del Sensor de un ppDAQC placa de Pi usando InitialState

Las Placas de PippDAQC tablero de Control y adquisición de datos es una interfaz ideal entre los sensores y un Raspberry Pi. Con ocho analógicas y ocho entradas digitales, hasta 16 canales de mundo real datos pueden capturar por un solo ppDAQC Pi-pla
Leer datos del Sensor ultrasónico a FireFly

Leer datos del Sensor ultrasónico a FireFly

Este Instructable le mirando cómo configurar un Sensor ultrasónico utilizando Arduino y Firefly, con el fin de detectar la distancia de objetos y cualquier geometría cambiante dentro de Rhino y, finalmente, cómo utilizar los datos para la detección d
Arduino MATLAB - con acelerómetro ADXL330

Arduino MATLAB - con acelerómetro ADXL330

Seeeduino MEGA 2560 con ADXL330Referencia:http://Arduino.CC/en/Tutorial/ADXL3xxhttp://Playground.Arduino.CC/Main/ADX...https://www.Sparkfun.com/datasheets/C...Más proyectos, visite - http://retardokiddo.blogspot.sg/
Acelerómetro controlado, cabeza seguimiento Rover

Acelerómetro controlado, cabeza seguimiento Rover

Este proyecto fue una combinación de varias ideas que han venido juntos para crear a un impresionante rover.   El Rover es controlado usando un reloj equipado con un acelerómetro para registrar los movimientos y la inclinación de la muñeca.  El rover
Registrador de datos de carreras $8

Registrador de datos de carreras $8

Hoy en día muchas empresas producen sistemas de registro de datos para aplicaciones de carreras. Sin embargo, estos sistemas suelen comenzar alrededor $200-$300 y subirán desde allí. Hoy te voy a mostrar cómo construir un registrador de datos de acel