Location are not accurate GPS neo6m

For the discussion of Arduino related topics.

Moderator: phalanx

Post Reply
izzet5510
Posts: 1
Joined: Wed Sep 19, 2018 9:31 am

Location are not accurate GPS neo6m

Post by izzet5510 » Wed Sep 19, 2018 9:36 am

hello im izzat from malaysia
i wanna ask someone who can help me for my accident alert system project

im using arduino uno , gsm 900a , gps neo 6m , accelerometer
already compile the command but the location is detect in china and keep repeate the same location
someone can plss fix my problem , the command is attach and no error



#include<SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
SoftwareSerial Serial1(10,11); //make RX arduino line is pin 2, make TX arduino line is pin 3.
SoftwareSerial gps(3,4);


#define x A1
#define y A2
#define z A3

int xsample=0;
int ysample=0;
int zsample=0;

#define samples 10

#define minVal -50
#define MaxVal 50

int i=0,k=0;
int gps_status=0;
float latitude=0;
float logitude=0;
String Speed="";
String gpsString="";
char *test="$GPRMC";

void initModule(String cmd, char *res, int t)
{
while(1)
{
Serial.println(cmd);
Serial1.println(cmd);
delay(100);
while(Serial1.available()>0)
{
if(Serial1.find(res))
{
Serial.println(res);
delay(t);
return;
}

else
{
Serial.println("Error");
}
}
delay(t);
}
}

void setup()
{
Serial1.begin(9600);
Serial.begin(9600);
lcd.begin(16,2);//Defining 16 columns and 2 rows of lcd display
lcd.backlight();//To Power ON the back light
//lcd.backlight();// To Power OFF the back light
lcd.print("Accident Alert ");
lcd.setCursor(0,1);
lcd.print(" System ");
delay(2000);
lcd.clear();
lcd.print("Initializing");
lcd.setCursor(0,1);
lcd.print("Please Wait...");
delay(1000);

Serial.println("Initializing....");
initModule("AT","OK",1000);
initModule("ATE1","OK",1000);
initModule("AT+CPIN?","READY",1000);
initModule("AT+CMGF=1","OK",1000);
initModule("AT+CNMI=2,2,0,0,0","OK",1000);
Serial.println("Initialized Successfully");
lcd.clear();
lcd.print("Initialized");
lcd.setCursor(0,1);
lcd.print("Successfully");
delay(2000);
lcd.clear();
lcd.print("Callibrating ");
lcd.setCursor(0,1);
lcd.print("Acceleromiter");
for(int i=0;i<samples;i++)
{
xsample+=analogRead(x);
ysample+=analogRead(y);
zsample+=analogRead(z);
}

xsample/=samples;
ysample/=samples;
zsample/=samples;

Serial.println(xsample);
Serial.println(ysample);
Serial.println(zsample);
delay(1000);

lcd.clear();
lcd.print("Waiting For GPS");
lcd.setCursor(0,1);
lcd.print(" Signal ");
delay(2000);
gps.begin(9600);
get_gps();
show_coordinate();
delay(2000);
lcd.clear();
lcd.print("GPS is Ready");
delay(1000);
lcd.clear();
lcd.print("System Ready");
Serial.println("System Ready..");
}

void loop()
{
int value1=analogRead(x);
int value2=analogRead(y);
int value3=analogRead(z);

int xValue=xsample-value1;
int yValue=ysample-value2;
int zValue=zsample-value3;

Serial.print("x=");
Serial.println(xValue);
Serial.print("y=");
Serial.println(yValue);
Serial.print("z=");
Serial.println(zValue);

if(xValue < minVal || xValue > MaxVal || yValue < minVal || yValue > MaxVal || zValue < minVal || zValue > MaxVal)
{
get_gps();
show_coordinate();
lcd.clear();
lcd.print("Sending SMS ");
Serial.println("Sending SMS");
Send();
Serial.println("SMS Sent");
delay(2000);
lcd.clear();
lcd.print("System Ready");
}
}

void gpsEvent()
{
gpsString="";
while(1)
{
while (gps.available()>0) //Serial incoming data from GPS
{
char inChar = (char)gps.read();
gpsString+= inChar; //store incoming data from GPS to temparary string str[]
i++;
// Serial.print(inChar);
if (i < 7)
{
if(gpsString[i-1] != test[i-1]) //check for right string
{
i=0;
gpsString="";
}
}
if(inChar=='\r')
{
if(i>60)
{
gps_status=1;
break;
}
else
{
i=0;
}
}
}
if(gps_status)
break;
}
}

void get_gps()
{
lcd.clear();
lcd.print("Getting GPS Data");
lcd.setCursor(0,1);
lcd.print("Please Wait.....");
gps_status=0;
int x=0;
while(gps_status==0)
{
gpsEvent();
int str_lenth=i;
coordinate2dec();
i=0;x=0;
str_lenth=0;
}
}

void show_coordinate()
{
lcd.clear();
lcd.print("Lat:");
lcd.print(latitude);
lcd.setCursor(0,1);
lcd.print("Log:");
lcd.print(logitude);
Serial.print("Latitude:");
Serial.println(latitude);
Serial.print("Longitude:");
Serial.println(logitude);
Serial.print("Speed(in knots)=");
Serial.println(Speed);
delay(2000);
lcd.clear();
lcd.print("Speed(Knots):");
lcd.setCursor(0,1);
lcd.print(Speed);
}

void coordinate2dec()
{
String lat_degree="";
for(i=20;i<=21;i++)
lat_degree+=gpsString;

String lat_minut="";
for(i=22;i<=28;i++)
lat_minut+=gpsString;

String log_degree="";
for(i=32;i<=34;i++)
log_degree+=gpsString;

String log_minut="";
for(i=35;i<=41;i++)
log_minut+=gpsString;

Speed="";
for(i=45;i<48;i++) //extract longitude from string
Speed+=gpsString;

float minut= lat_minut.toFloat();
minut=minut/60;
float degree=lat_degree.toFloat();
latitude=degree+minut;

minut= log_minut.toFloat();
minut=minut/60;
degree=log_degree.toFloat();
logitude=degree+minut;
}

void Send()
{
Serial1.println("AT");
delay(500);
serialPrint();
Serial1.println("AT+CMGF=1");
delay(500);
serialPrint();
Serial1.print("AT+CMGS=");
Serial1.print('"');
Serial1.print("+60175216020"); //mobile no. for SMS alert
Serial1.println('"');
delay(500);
serialPrint();
Serial1.print("Latitude:");
Serial1.println(latitude);
delay(500);
serialPrint();
Serial1.print(" longitude:");
Serial1.println(logitude);
delay(500);
serialPrint();
Serial1.print(" Speed:");
Serial1.print(Speed);
Serial1.println("Knots");
delay(500);
serialPrint();
Serial1.print("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q=");
Serial1.print(latitude,6);
Serial1.print("+"); //28.612953, 77.231545 //28.612953,77.2293563
Serial1.print(logitude,6);
Serial1.write(26);
delay(2000);
serialPrint();
}

void serialPrint()
{
while(Serial1.available()>0)
{
Serial.print(Serial1.read());
}
}

jremington
Support Volunteer
Posts: 2300
Joined: Fri Jun 15, 2007 9:41 pm
Location: Eugene, Or

Re: Location are not accurate GPS neo6m

Post by jremington » Fri Sep 21, 2018 5:01 pm

Please edit your post to add code tags. Use the "</>" button on the full editor.

n1ist
Support Volunteer
Posts: 1034
Joined: Wed Mar 22, 2006 11:02 am

Re: Location are not accurate GPS neo6m

Post by n1ist » Mon Sep 24, 2018 5:51 pm

joyknights wrote:
Sun Sep 23, 2018 6:40 pm
Is that the reason why his location is incorrect?
No, but it lets the program be properly formatted so people are more likely to look at the code and hopefully see what's wrong.
/mike

Valen
Support Volunteer
Posts: 1743
Joined: Wed Dec 22, 2010 2:05 am

Re: Location are not accurate GPS neo6m

Post by Valen » Fri Oct 19, 2018 4:07 pm

Aside from that, there are a bunch of serial.print statements in there. Does nothing show in Serial Monitor? If it does, why is it not posted? There is a Serial.print command commented out in GPSEvent. Remove the // to turn it back on, compile and receive what the GPS is actually sending. Then compare that to how the location is calculated and displayed.

Post Reply