الصنّاع العرب

مشروع حساب المسافة عن طريق الGPS وأرسال البيانات للجوال

مجاب عليه
1
0

السلام عليكم ورحمة الله وبركاته,,,,,

اما بعد  عندي مشروع تتبع في اطار منطقة معينة ولقد قمت بكتابته هذا الكود الذي سوف أرفقه أدناه ولكن المشكلة التي واجهته هي عدم حساب المسافة بشكل الصحيح و عدم حساب المسافة بشكل صحيح . ارجو من سيادتكم الرد … وجزاكم الله خير…

#include “TinyGPS++.h”
#include “SoftwareSerial.h”

SoftwareSerial serial_connection(2, 3); //RX=pin3, TX=pin2
TinyGPSPlus gps;
char phone_no[]=”00249112054684″;
int button=5;
const int time1=20000;
const long maxdis =90000;
boolean start =false;
void setup() {
Serial.begin(9600);//This opens up communications to the Serial monitor in the Arduino IDE
serial_connection.begin(9600); //This opens up communications to the GPS
Serial.println(“GPS Start”); //Just show to the monitor that the sketch has started
delay(1000);
pinMode(5,INPUT);
}
int t=0;
long o_lng =0;
long o_lat =0;
int count=0;
void loop() {

while(serial_connection.available())//While there are characters to come from the GPS
{

gps.encode(serial_connection.read());//This feeds the serial NMEA data into the library one char at a time

if(gps.location.isUpdated())//This will pretty much be fired all the time anyway but will at least reduce it to only after a package of NMEA data comes in
{
//Get the latest info from the gps object which it derived from the data sent by the GPS unit
Serial.println(“Satellite Count:”);
Serial.println(gps.satellites.value());
Serial.println(“Latitude:”);
Serial.println(gps.location.lat(), 6);
Serial.println(“Longitude:”);
Serial.println(gps.location.lng(), 6);
Serial.println(“Speed MPH:”);
Serial.println(gps.speed.mph());
Serial.println(“Altitude Feet:”);
Serial.println(gps.altitude.meters());
Serial.println(“distance :”);
Serial.println(dis(gps.location.lat(),gps.location.lng(),o_lat,o_lng),5);
Serial.println(“”);

// Initialization
count +=1;

if(digitalRead (5)==LOW){
o_lng =gps.location.lng();
o_lat =gps.location.lat();
start =true;
}
if (start) {
if (dis(gps.location.lat(),gps.location.lng(),o_lat,o_lng)>maxdis){

sendSMS(gps.location.lng(),gps.location.lat());

delay(time1);

}}
;}
}
}

void sendSMS(char l1,char l2) {
Serial.println(“AT+CMGF=1”);
delay(2000);
Serial.print(“AT+CMGS=\””);
Serial.print(phone_no);
Serial.write(0x22);
Serial.write(0x0D); // hex equivalent of Carraige return
Serial.write(0x0A); // hex equivalent of newline
delay(2000);
Serial.print(“Your Man is Out Area :”);
Serial.write(0x0A); // hex equivalent of newline
Serial.print(“https://www.google.com/maps/place/”);
Serial.print(gps.location.lat(), 6);
Serial.print(“N+”);
Serial.print(gps.location.lng(), 6);
Serial.print(“E”);
delay(500);
Serial.println (char(26));//the ASCII code of the ctrl+z is 26
}

float dis(float flat1, float flon1, float flat2, float flon2) {
flon1=radians(flon1);
flon2=radians(flon2);
flat1=radians(flat1);
flat2=radians(flat2);
float distance =6371000.0*acos(sin(flat1)*sin(flat2)+cos(flat1)*cos(flat2)*cos(flon2-flon1));

return distance;
}

  • فارس القنيعير
    أخ ادريس، هل انحلت المشكلة؟ يا ليت إذا انحلت تقبل الإجابة (المربع الأخضر أعلى يسار الجواب).
  • ادريس الحكيمي
    لم تحل المشكلة بعد
إجابة جيدة
1
0

السلام عليكم ورحمة الله وبركاته
اعتقد و الله اعلم ان المشكلة في نوع البيانات

long o_lng =0;
long o_lat =0;

المفترض تكون من نوع float وليس long

لأن العمليات الحسابيه على خطوط الطول و العرض تتعامل بالارقام العشرية عشر خانات + 6 بعد الفاصله المنقوطه للدقه الاكبر

  • ادريس الحكيمي
    غيرت نفس اجابتك ولكن لازالت المشكلة موجودة والخطاء أكبر من الاول ممكن ترسالي دالة المسافة بالامتار أو سنتيمير
  • owis sabry
    ارسل لنا قراءة الــGPS لو سمحت عشان نعرف نتابع
0
1

وعليكم السلام ورحمة الله وبركاته أخ أدريس.

هل يمكنك توضيح السؤال أكثر؟ ما الشريحة الالكترونية التي تستخدمها؟ وما هي نسبة الخطأ، هل هي كبيرة أم صغيرة (يعني هل تكون المسافة قريب من الصحيحة، ولكن بخطأ معين)؟ أم المسافة تكون عشوائية تماماً؟

  • ادريس الحكيمي
    هلا أخي فارس تسلم على الرد وأهتمامك بالسؤال . الشريحة المستخدمة موديولــ GY GPS6M2 أما بالنسبةللخطأ هو كبير جدأ والمسافة عشوائية في نفس المنطقة تعطينا أكثرمن قراءة واريد المسافة تجي في الامتار ولكن للاسف ما تجي .
إجابتك

من فضلك أولاً.

تابعنا