HELP WITH THIS GPS

I need help me with this gps the model is SIM28M . I’m new to this and i tried tiny gps example test gps and cannot get the location or coordinates in serial monitor . when i use the baud rate in serial monitor other than 115200 it shows only star marks and in other baud rate i get only weird characters. i ran it for more than 1 hour using below code and didnt get any output im trying it in my balcony the antenna is outside . in program i ran it on 9600 baud rate.

connection :RX to arduino pin 4 and TX to arduino pin 3 , voltage supply 3.3 v

#include <SoftwareSerial.h>

#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/

TinyGPS gps;
SoftwareSerial ss(4, 3);

static void smartdelay(unsigned long ms);
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);

void setup()
{
  Serial.begin(115200);
  
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.println("Sats HDOP Latitude  Longitude  Fix  Date       Time     Date Alt    Course Speed Card  Distance Course Card  Chars Sentences Checksum");
  Serial.println("          (deg)     (deg)      Age                      Age  (m)    --- from GPS ----  ---- to London  ----  RX    RX        Fail");
  Serial.println("-------------------------------------------------------------------------------------------------------------------------------------");

  ss.begin(115200);
}

void loop()
{
  float flat, flon;
  unsigned long age, date, time, chars = 0;
  unsigned short sentences = 0, failed = 0;
  static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
  
  print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
  print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
  gps.f_get_position(&flat, &flon, &age);
  print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 10, 6);
  print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6);
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
  print_date(gps);
  print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 7, 2);
  print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
  print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
  print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
  print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0xFFFFFFFF : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
  print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? TinyGPS::GPS_INVALID_F_ANGLE : TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
  print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);

  gps.stats(&chars, &sentences, &failed);
  print_int(chars, 0xFFFFFFFF, 6);
  print_int(sentences, 0xFFFFFFFF, 10);
  print_int(failed, 0xFFFFFFFF, 9);
  Serial.println();
  
  smartdelay(1000);
}

static void smartdelay(unsigned long ms)
{
  unsigned long start = millis();
  do 
  {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}

static void print_float(float val, float invalid, int len, int prec)
{
  if (val == invalid)
  {
    while (len-- > 1)
      Serial.print('*');
    Serial.print(' ');
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1); // . and -
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i<len; ++i)
      Serial.print(' ');
  }
  smartdelay(0);
}

static void print_int(unsigned long val, unsigned long invalid, int len)
{
  char sz[32];
  if (val == invalid)
    strcpy(sz, "*******");
  else
    sprintf(sz, "%ld", val);
  sz[len] = 0;
  for (int i=strlen(sz); i<len; ++i)
    sz[i] = ' ';
  if (len > 0) 
    sz[len-1] = ' ';
  Serial.print(sz);
  smartdelay(0);
}

static void print_date(TinyGPS &gps)
{
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned long age;
  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  if (age == TinyGPS::GPS_INVALID_AGE)
    Serial.print("********** ******** ");
  else
  {
    char sz[32];
    sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",
        month, day, year, hour, minute, second);
    Serial.print(sz);
  }
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
  smartdelay(0);
}

static void print_str(const char *str, int len)
{
  int slen = strlen(str);
  for (int i=0; i<len; ++i)
    Serial.print(i<slen ? str[i] : ' ');
  smartdelay(0);
}

what is the baud rate should i write here?

ss.begin(115200);

what baud rate should i select in serial monitor ?

fast reply will be appreciated

Thanx in advance :slight_smile:

Please help me with this gps

You'll need to hold it closer to the camera. We can't see it.

i tried many codes

I'm not going to show you any of them, though. Nor am I going to tell you which GPS it is or how it is connected or powered.

Nor am I going to even tell you whether I took it outside.

Well, fine. Be that way.

PaulS:
You'll need to hold it closer to the camera. We can't see it.
I'm not going to show you any of them, though. Nor am I going to tell you which GPS it is or how it is connected or powered.

Nor am I going to even tell you whether I took it outside.

Well, fine. Be that way.

plzz im new i didnt find any help of like this gps please

plzz im new i didnt find any help of like this gps please

Saying "please" does not help. We can't read your mind, so you must:

  1. Read How to use this Forum
  2. Show us a pic or schematic of how everything is connected.
  3. Post your code. Put [ code ] and [ /code ] around it (no spaces).
  4. Tell us the make and model of that module. It looks like this one. If it is, the default baud rate is 115200.
  5. Tell us if you took it outside.
  6. Tell us how long you let it run.

Using a Google image search I was able to find a picture of the same board with the URL not blocked out:
www.campuscomponent.com

Sadly, they don't seem to sell that module anymore and don't seem to support it with libraries or documents.

The GPS unit is a SIM28M, according to the label in your picture. Have you searched for a datasheet or user manual for it? That would go a long way toward figuring out how to use it.

/dev:
Saying "please" does not help. We can't read your mind, so you must:

  1. Read How to use this Forum
  2. Show us a pic or schematic of how everything is connected.
  3. Post your code. Put [ code ] and [ /code ] around it (no spaces).
  4. Tell us the make and model of that module. It looks like this one. If it is, the default baud rate is 115200.
  5. Tell us if you took it outside.
  6. Tell us how long you let it run.

edited my post now u can check and help me

when i use the baud rate in serial monitor other than 115200 it shows only star marks and in other baud rate i get only weird characters.

So, the Arduino and the PC communicate at 115200. Don't change that unless you change both ends.

Dump that complex code. In loop(), see if there is data to read from the GPS. If there is, read it and send it to the serial monitor. Do NOTHING else.

Until the Arduino and the GPS are KNOWN to be talking to each other, parsing the data that they exchange makes no sense.

You should read the comments in that code, though. Particularly the one that says "assumes that you have a 4800-baud serial GPS device". Now, that may or may not be a valid assumption. When you see something from the GPS, if it looks like garbage, the assumption is invalid.

Like Paul said, this is the baud rate that the Arduino uses to talk to the PC:

  Serial.begin(115200);

This line of code must match the speed in the Serial Monitor window (lower-right corner). For now, leave it at this speed.

This is the baud rate that the Arduino uses to talk to the GPS on pins 3 and 4:

  ss.begin(115200);

You should try all the different baud rates here: 4800, 9600, 19200, 38400 and 115200. But...

Paul suggested getting rid of most of that parsing code, because you don't know if the baud rate is correct. Replace your main loop with some simple echo code:

void loop()
{
  while (ss.available())
    Serial.write( ss.read() );
}

That will just display each character from the GPS on your Serial Monitor window. It won't try to parse it. If the ss.begin baud rate is correct, you should see things like this in your Serial Monitor window:

$GPGGA,064951.000,2307.1256,N,12016.4438,E,1,8,0.95,39.9,M,17.8,M,,*65
$GPGSA,A,3,29,21,26,15,18,09,06,10,,,,,2.32,0.95,2.11*00
$GPGSV,3,1,09,29,36,029,42,21,46,314,43,26,44,020,43,15,21,321,39*7D
$GPGSV,3,2,09,18,26,314,40,09,57,170,44,06,20,229,37,10,26,084,37*77
$GPGSV,3,3,09,07,,,26*73
$GPRMC,064951.000,A,2307.1256,N,12016.4438,E,0.03,165.48,260406,3.05,W,A*2C
$GPVTG,165.48,T,,M,0.03,N,0.06,K,A*37

When that is working, you will know the baud rate is correct. Then you can go back to your original code.

Cheers,
/dev