Go Down

Topic: [SOLUCIONADO] Elección de GPS (Read 3958 times) previous topic - next topic

_Manu_

#15
Apr 19, 2016, 09:02 pm Last Edit: Apr 19, 2016, 09:08 pm by _Manu_
Vale.....vaya fallo mas tonto,obviamente tiene que ir cruzados la entrada de uno es la salida del otro, he probado y ahora si que sale algo coherente:
Code: [Select]
$GPRMC,185820.000,A,4219.8769,N,00342.3100,W,0.49,56.89,190416,,,A*47
$GPGGA,185821.000,4219.8768,N,00342.3099,W,1,08,1.1,869.0,M,51.6,M,,0000*4D
$GPGSA,A,3,26,21,16,31,27,29,18,25,,,,,1.8,1.1,1.4*3C
$GPRMC,185821.000,A,4219.8768,N,00342.3099,W,0.41,56.89,190416,,,A*4E
$GPGGA,185822.000,4219.8768,N,00342.3101,W,1,08,1.1,868.7,M,51.6,M,,0000*48
$GPGSA,A,3,26,21,16,31,27,29,18,25,,,,,1.8,1.1,1.4*3C
$GPRMC,185822.000,A,4219.8768,N,00342.3101,W,0.04,56.89,190416,,,A*4C
$GPGGA,185823.000,4219.8767,N,00342.3101,W,1,08,1.1,868.0,M,51.6,M,,0000*41

La verdad ya lo siento por el fallo y haberte mareado por ello, ahora voy a ir probando los otros códigos.
Gracias.
Un saludo.

surbyte

Me alegro.
Sigue acá hasta evacuar todas tus dudas.

_Manu_

Bueno ya  presenté mi proyecto de fin de grado. Al final con lo que me explicasteis pude seguir adelante. Os dejo el código de mi proyecto. Consiste en tomar una serie de datos y guardarlos en una SD, usando las entradas analógicas y una entrada digital de un arduino UNO y una shield Data logger SD. Las variables que media eran: Voltaje, intensidad, temperatura, porcentaje de freno, porcentaje de acelerador y RPM. En cada captura de datos también se toma la posición GPS  y hora para luego poder visualizarlo en gráficas y mediante GoogleEarth. Espero que os sirva.
Un saludo.
P.D. El código está en dos mensajes no entra en uno solo.

Code: [Select]
/*TFG: DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE TELEMETRÍA
 * PARA UNA MOTO ELÉCTRICA DE COMPETICIÓN
 * AUTOR: MANUEL TORCA PALACÍN
 * UNIVERSIDAD DE BURGOS
 */
#include <SoftwareSerial.h>                         //
#include <TinyGPS.h>                                // Librerias para el GPS
#include <Wire.h>                                   //
#include <SPI.h>                                    //
#include <SD.h>                                     //
#include "RTClib.h"                                 // Librerías para la SD
#define RXPIN 2                                     // Uso de define ahorro de memoria
#define TXPIN 3                                     // Definición de los canales de comunicación del GPS
#define GPSBAUD 4800                                // Definición de transmisión de datos del GPS
#define inPotVolt A0                                // Definición de pines a usar
#define inPotInt A1                                 //
#define inPotTemp A2                                //
#define intPotFreno A3                              //
#define intPotAcelerador A4                         //
#define Hall 5                                      //
float Voltaje;                                      // Definición de variables
float Intensidad;                                   //
float Velocidad;                                    //
float Temperatura;                                    //
int Freno;                                          //
int Acelerador;                                     //
int rpm;                                            //
int Hallestado;                                     //
int t1=0;                                           //
int t2=0;                                           //
const int chipSelect = 10;                          // selección de pin
const bool eco = true ;                             //
bool cabecera=true;                                 //
TinyGPS gps;                                        // Creación de la instancia para el GPS
SoftwareSerial uart_gps(RXPIN, TXPIN);              //
RTC_DS1307 RTC;                                     // 
File logfile;                                       //
void getgps(TinyGPS &gps);                          // Declaración de prototipo de función
void setup()                                        //
  {                                                 //
//////////////////INICIALIZACÓN DE GPS////////////////
    Serial.begin(9600);                             //
    uart_gps.begin(GPSBAUD);                        //
    Serial.println(F(""));                          // Uso de la función F() para usar memoria flash, ahorro de memoria en un 10%
    Serial.println(F("Sistema de Telemetria por Manuel Torca Palacin"));
    Serial.println(F("       ...A la espera de señal...           "));
    Serial.println(F(""));                          //
//////////////////////////////////////////////////////
    pinMode(Hall,INPUT);                            //incialización de Sensor Hall   
 //////////////////INICIALIZACÓN DE SD////////////////
    Wire.begin();                                   //
    RTC.begin();                                    //
    pinMode(chipSelect,OUTPUT);                     //
     if (!SD.begin(chipSelect))                     // Detecta si hay una SD introducida, usa el Pin 10 digital
     {                                              //
          error("No hay tarjeta SD.");              //
     }                                              //
    else                                            //
    {                                               //
      Serial.println(F("Tarjeta SD inicializada."));//
    }                                               //
                                                    // se crea el fichero de registro
  char NomArc[] = "LOGGER00.CSV";                   //
  for (uint8_t i = 0; i < 100; i++)                 //Este bucle hace que no se sobreescriban los archivos, busca los archivos que hay y crea el archivo con la ultima numeración si el
     {                                              //ultimo es LOGGER10, recorre el bucle hasta  que el contador recorra hasta 11 con lo que genera LOGGER11 y como no hay archivo con
        NomArc[6] = i/10 + '0';                     //ese nombre lo crea y sale del bucle.
        NomArc[7] = i%10 + '0';                     //
        if (! SD.exists(NomArc))                    // Si no hay ningun archivo con ese nombre lo crea
            {                                       //
            logfile = SD.open(NomArc, FILE_WRITE);//
              break;                                // Sale del bucle
            }                                       //
     }                                              //
  if (! logfile)                                    //
   error("No se pudo crear el fichero de registro");//
                                                    //
  Serial.print(F("Registrando en: "));              // 
  Serial.println(NomArc);                           //
  /////////////FIN DE INICIALIZACIÓN//////////////////
}

_Manu_

Code: [Select]
void loop()
  {   
    if (cabecera==true)                                       // introdución de nombres de cabecera de columnas antes de la toma de la primera muestra.
    {                                                         //
      Serial.println(F("Lat,Long,hora,Voltaje,Intensidad,Velocidad,Temperatura,Freno,Acelerador,rpm"));      //En elGPS visualizer, En track options, en Desc.template poner(sin comillas):
                                                              //"Latitud: {Lat}º Longitud: {Long}º Tiempo: {hora} Voltaje: {Voltaje} Intensidad: {Intensidad} Velocidad: {Velocidad} Temperatura:{Temperatura} Freno:{Freno} Acelerador{Acelerador} rpm{rpm}  "
      logfile.println("Lat,Long,hora,Voltaje,Intensidad,Velocidad,Temperatura,Freno,Acelerador,rpm");
      cabecera=false;                                         //
    }                                                         //
    while(uart_gps.available())                               // Mientras el GPS mande datos se ejecuta el bucle
      {                                                       //
        int c = uart_gps.read();                              // Se carga el valor del dato en la variable
        if(gps.encode(c))                                     // Si hay un nuevo dato se toma datos y se guardan
          {                                                   //   
              t1=millis();                                    // Tiempo de inicio del bucle
/////////////////////CAPTURA DE DATOS///////////////////////////
              float latitud, longitud;                        //
              DateTime now = RTC.now();                       //
              Voltaje=analogRead(inPotVolt)*110.0/1024.0;     //
              Intensidad=analogRead(inPotInt)*500.0/1024.0;   //
              Temperatura=analogRead(inPotTemp)*5.0/1024.0;   // El sensor de temperatura introduce valores de 0.88V a 1.35V teniendo una capacidad de unas 96 muestras para el rango de 0ºC a 70ºC son suficientees
              Temperatura=(5500.0*(4305.0-4862.0*Temperatura))/(5227.0*Temperatura-262135.0); //Ecuación para la temperatura. Sonda KTY84
              Freno=analogRead(intPotFreno);                  //
              Acelerador=analogRead(intPotAcelerador);        //
              gps.f_get_position(&latitud, &longitud);        //
              Velocidad=gps.f_speed_kmph();                   //
              if(Velocidad>500)                               //
              {                                               //
                Velocidad=0.00;                               //corregir muestras iniciales de velociadad
                  }                                           //
             //CONTADOR DE RPM(Detección por flanco de subida)//
              int ant=0;                                      //
              int post=0;                                     //
              int contador=0;                                 //
              int estado=0;                                   //
              int tiempo=0;                                   //
              t2=0;                                           //
              tiempo=millis();                                //
              while( t2<=1000)                                //
                {                                             //
                  Hallestado=digitalRead(Hall);               //
                  if (Hallestado==HIGH)                       //
                    {                                         //
                      ant=1;                                  //
                      if (ant!=post)                          //
                           {                                  //
                             contador++;                      //
                          }                                   //
                      post=1;                                 //
                  }                                           //
                  else                                        //
                    {                                         //
                  post=0;                                     //
                  ant=0;                                      //
                  }                                           //
                 t2=millis()-tiempo;                          //
                }                                             //
               rpm=contador*60;                               //
               contador=0;                                    //               
/////////////MUESTRA DE DATOS POR CONSOLA///////////////////////             
              Serial.print(F("Lat/Long: "));                  //
              Serial.print(latitud,5);                        //
              Serial.print(", ");                             //
              Serial.print(longitud,5);                       //
              Serial.print(" ");                              //
              Serial.print(now.hour(), DEC);                  //
              Serial.print(':');                              //
              Serial.print(now.minute(), DEC);                //
              Serial.print(':');                              //
              Serial.print(now.second(), DEC);                //
              Serial.print(" ");                              //
              Serial.print(F("Voltaje= "));                   //
              Serial.print(Voltaje);                          //
              Serial.print(F("V "));                          //
              Serial.print(F("Intensidad= "));                //
              Serial.print(Intensidad);                       //
              Serial.print(F("A "));                          //
              Serial.print(F("Velocidad= "));                 //
              Serial.print(Velocidad);                        //
              Serial.print(F("Km/h "));                       //
              Serial.print(Temperatura);                      //
              Serial.print(F(" C "));                         //
              Serial.print(Freno);                            //
              Serial.print(F("bits "));                       //
              Serial.print(Acelerador);                       //
              Serial.print(F("bits "));                       //
              Serial.print(rpm);                              //
              Serial.println(F("rpm"));                       //
////////////////////////////////////////////////////////////////
//////////////////GUARDADR DATOS EN SD////////////////       
              logfile.print(latitud,5);             //
              logfile.print(", ");                  //
              logfile.print(longitud,5);            //
              logfile.print(',');                   //
              logfile.print(now.hour(), DEC);       //
              logfile.print(':');                   //
              logfile.print(now.minute(), DEC);     //
              logfile.print(':');                   //
              logfile.print(now.second(), DEC);     //
              logfile.print(",");                   //
              logfile.print(Voltaje);               //
              logfile.print(",");                   //
              logfile.print(Intensidad);            //
              logfile.print(",");                   //
              logfile.print(Velocidad);             //
              logfile.print(",");                   //
              logfile.print(Temperatura);           //
              logfile.print(",");                   //
              logfile.print(Freno);                 //
              logfile.print(",");                   //
              logfile.print(Acelerador);            //
              logfile.print(",");                   //
              logfile.println(rpm);                 //         
              logfile.flush();                      //
//////////////////////////////////////////////////////     
              Serial.println(abs((millis()-t1))); //verificación de tiempo de muestreo
        }
     }
}
void error(char *str)
{
  Serial.print("error: ");
  Serial.println(str);
 
  while(1);
}

Go Up