Arduino Nano and Ublox GPS NEO 6m

Hello guys,
i'm making a small project for my car, a gps tracker with accelerometer.

The logic is: when accelerometer detects movement, a relay power on the gps attached to an external power source, and starting send coordinates.

For a testing purposes, i attached a blink led when i receive gps coordinates after detecting movements.
This is my circuit (without blinking led):

Everything works fine when arduino is attached on USB. I can see coordinates and the led is blinking.
When i attached a battery, seems that software serial is not working. The accelerometer detect movement, power on the gps with relay, the gps get the signal and lock (i can see the blue led on it blinkng) but arduino does not receive nothing.

I'm using a 3.7V 1500 mah Lipo attached to 5V pin with a booster (as you can see in image), but i have the same error with a 7.4V attached to Vin pin.

I'm using TinyGPS library to get coordinates and softwareserial library for communication (as all the examples found under gps communication).

Thanks in advance.
V.

When i attached a battery, seems that software serial is not working.

Nonsense. SoftwareSerial has no idea how your device is powered. It is FAR MORE likely that the battery is NOT sufficient to power the GPS (they are power hogs), so there is nothing for SoftwareSerial to read.

I can't see your picture - the site you used to host it is known for hosting viruses. In the Website and Forum part of the forum is a sticky that describes how to post pictures here.

PaulS:
Nonsense. SoftwareSerial has no idea how your device is powered. It is FAR MORE likely that the battery is NOT sufficient to power the GPS (they are power hogs), so there is nothing for SoftwareSerial to read.

I can't see your picture - the site you used to host it is known for hosting viruses. In the Website and Forum part of the forum is a sticky that describes how to post pictures here.

Thanks for answer, i edit the post to show image correctly.

PaulS:
Nonsense. SoftwareSerial has no idea how your device is powered. It is FAR MORE likely that the battery is NOT sufficient to power the GPS (they are power hogs), so there is nothing for SoftwareSerial to read

I agree when you say that SoftwareSerial has no idea how your device is powered. However, the GPS is powered with an external Power Source (5v) and get signal (blue led is blinking).

However, the GPS is powered with an external Power Source (5v)

Which your picture does not show. The connections on the GPS are not labeled, either.

Your code also appears to be missing in action.

Image updated.
The green wire is TX pin, the yellow one is RX pin.

I can't paste the code now because i'm not at home.
You can refer this:

/*********************
 *2 to GPS Module TX*
 *3 to GPS Module RX*
 *********************/

#include <SoftwareSerial.h>
#include <TinyGPS.h>

SoftwareSerial mySerial(2, 3);
TinyGPS gps;

void gpsdump(TinyGPS &gps);
void printFloat(double f, int digits = 2);

void setup()  
{
  // Oploen serial communications and wait for port to open:
  Serial.begin(9600);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
  delay(1000);
  Serial.println("uBlox Neo 6M");
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = "); 
  Serial.println(sizeof(TinyGPS));
  Serial.println(); 
}

void loop() // run over and over
{
  bool newdata = false;
  unsigned long start = millis();
  // Every 5 seconds we print an update
  while (millis() - start < 5000) 
  {
    if (mySerial.available()) 
    
    {
      char c = mySerial.read();
      //Serial.print(c);  // uncomment to see raw GPS data
      if (gps.encode(c)) 
      {
        newdata = true;
        break;  // uncomment to print new data immediately!
      }
    }
  }
  
  if (newdata) 
  {
    Serial.println("Acquired Data");
    Serial.println("-------------");
    gpsdump(gps);
    Serial.println("-------------");
    Serial.println();

    // BLINK LED HERE
  }
  
}

void gpsdump(TinyGPS &gps)
{
  long lat, lon;
  float flat, flon;
  unsigned long age, date, time, chars;
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned short sentences, failed;

  gps.get_position(&lat, &lon, &age);
  Serial.print("Lat/Long(10^-5 deg): "); Serial.print(lat); Serial.print(", "); Serial.print(lon); 
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");
  
  // On Arduino, GPS characters may be lost during lengthy Serial.print()
  // On Teensy, Serial prints to USB, which has large output buffering and
  //   runs very fast, so it's not necessary to worry about missing 4800
  //   baud GPS characters.

  gps.f_get_position(&flat, &flon, &age);
  Serial.print("Lat/Long(float): "); printFloat(flat, 5); Serial.print(", "); printFloat(flon, 5);
    Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  gps.get_datetime(&date, &time, &age);
  Serial.print("Date(ddmmyy): "); Serial.print(date); Serial.print(" Time(hhmmsscc): ");
    Serial.print(time);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  Serial.print("Date: "); Serial.print(static_cast<int>(month)); Serial.print("/"); 
    Serial.print(static_cast<int>(day)); Serial.print("/"); Serial.print(year);
  Serial.print("  Time: "); Serial.print(static_cast<int>(hour+8));  Serial.print(":"); //Serial.print("UTC +08:00 Malaysia");
    Serial.print(static_cast<int>(minute)); Serial.print(":"); Serial.print(static_cast<int>(second));
    Serial.print("."); Serial.print(static_cast<int>(hundredths)); Serial.print(" UTC +08:00 Malaysia");
  Serial.print("  Fix age: ");  Serial.print(age); Serial.println("ms.");

  Serial.print("Alt(cm): "); Serial.print(gps.altitude()); Serial.print(" Course(10^-2 deg): ");
    Serial.print(gps.course()); Serial.print(" Speed(10^-2 knots): "); Serial.println(gps.speed());
  Serial.print("Alt(float): "); printFloat(gps.f_altitude()); Serial.print(" Course(float): ");
    printFloat(gps.f_course()); Serial.println();
  Serial.print("Speed(knots): "); printFloat(gps.f_speed_knots()); Serial.print(" (mph): ");
    printFloat(gps.f_speed_mph());
  Serial.print(" (mps): "); printFloat(gps.f_speed_mps()); Serial.print(" (kmph): ");
    printFloat(gps.f_speed_kmph()); Serial.println();

  gps.stats(&chars, &sentences, &failed);
  Serial.print("Stats: characters: "); Serial.print(chars); Serial.print(" sentences: ");
    Serial.print(sentences); Serial.print(" failed checksum: "); Serial.println(failed);
}

void printFloat(double number, int digits)
{
  // Handle negative numbers
  if (number < 0.0) 
  {
     Serial.print('-');
     number = -number;
  }

  // Round correctly so that print(1.999, 2) prints as "2.00"
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i)
    rounding /= 10.0;
  
  number += rounding;

  // Extract the integer part of the number and print it
  unsigned long int_part = (unsigned long)number;
  double remainder = number - (double)int_part;
  Serial.print(int_part);

  // Print the decimal point, but only if there are digits beyond
  if (digits > 0)
    Serial.print("."); 

  // Extract digits from the remainder one at a time
  while (digits-- > 0) 
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    Serial.print(toPrint);
    remainder -= toPrint;
  }
}

Is it possible that the GPS ground (from external power source) is not the same of arduino (from battery)? If yes, how i can power on the module externally and achieve serial communication?

Thanks

Is it possible that the GPS ground (from external power source) is not the same of arduino (from battery)?

I do not see a connection between the GPS ground and the Arduino ground, so, yes that is a problem.

If yes, how i can power on the module externally and achieve serial communication?

Connect the grounds.