Décodage gps sur port serie, vitesse en km/h et distance parcourue

Soyez le premier à donner votre avis sur cette source.

Snippet vu 27 555 fois - Téléchargée 30 fois

Contenu du snippet

Salut, voici un petit bou de code pour traiter les information venant d'un recepteur GPS sur le port serie. Moi personnelement j'utilise un GPS qui m'envoie les info par bluetooth. Le programme récupére simple les trames envoyé sur le RS232, et le plus dur est de les interprétaient.
Dans un premier temps je récupére la position GPS en coupant la chaine de caractaire recu, puis je l'enregistre. Quand j'ai un deuxiéme point (donc 1 seconde aprés) je fait un méchant calcul pour trouver la distance parcourue (je ne tient pas compte de la hauteur), puis comme c'est sur une periode de 1 seconde je multipli par 3600 pour avoir la vitesse entre les deux point. En faite c pas une vitesse instantanée mais une vitesse moyenne sur 1 seconde!!! a vous de jugé!!!
Ce soft marche pour les GPS avec les protocole NMEA-0183 (V3.01), GGA(1), GSA(3)
Les données que vous devez recevoir sont de ce types : $GPGGA,071603.815,4704.9358,N,00221.5265,E,1,06,1.9,184.7,M,,,,0000*01
Mais en gardant le même principe que moi vous pouvez l'adaptez a d'autre protocole GPS, le tous et de savoir où est quoi!!!
PS: il y a souvent un petit décalage par rapport au compteur de voiture, donc vous pouvez multipliez par 1.1 environs pour avoir comme votre voiture.

Source / Exemple :


Private Sub Timer1_Timer()
Dim Latitude_degre As Double
Dim Latitude_minute As Double
Dim Emisphére_N_S As String
Dim Longitude_degre  As Double
Dim Longitude_minute As Double
Dim Emisphére_E_O As String
Dim latitude1 As String
Dim debut As Integer
Dim l As Integer
Dim dla As Double
Dim dlg As Double
Dim a As Double

Temp = MSComm1.Input
If (InStr(Temp, "$GPGGA") <> 0) Then
    Temp = Mid(Temp, InStr(Temp, "$GPGGA"), 50)' recupére les 50 caractére suivant "$GPGGA"
    Temp = Mid(Temp, 1, 50)
    Label22.Caption = Temp
    If (Len(Temp) >= 50) Then
        debut = InStr(10, Temp, ",") + 1 'cherche le debut des coordonnée GPS
        Latitude_degre = Mid(Temp, debut, 2)
        'la variable l contient le nombre de chiffre qui représsente la latitude en minute(3 ou 4)
        l = InStr(debut + 2, Temp, ",") - InStr(debut + 2, Temp, ".") - 1
        Latitude_minute = Mid(Temp, debut + 2, 2) & "," & Mid(Temp, debut + 5, l)
        'Emisphére_N_S = Mid(Temp, debut + 10, 1)
        Longitude_degre = Mid(Temp, debut + 12, 3)
        'la variable l contient le nombre de chiffre qui représsente la longitude en minute(3 ou 4)
        l = InStr(debut + 15, Temp, ",") - InStr(debut + 15, Temp, ".") - 1
        Longitude_minute = Mid(Temp, debut + 15, 2) & "," & Mid(Temp, debut + 18, l)
        'Emisphére_E_O = Mid(Temp, debut + 23, 1)
        If (i = False) Then
            i = True
            Latitude_1 = (Latitude_degre + Latitude_minute / 60) * 3.14159265358979 / 180
            Longitude_1 = (Longitude_degre + Longitude_minute / 60) * 3.14159265358979 / 180
            dla = Abs(Latitude_1 - Latitude_2)
            dlg = Abs(Longitude_1 - Longitude_2)
            a = Sin(dla / 2) * Sin(dla / 2) + Cos(Latitude_1) * Cos(Latitude_2) * Sin(dlg / 2) * Sin(dlg / 2)
            distance = 6375 * 2 * Atn(Sqr(a)) * 1.1
        Else
            i = False
            Latitude_2 = (Latitude_degre + Latitude_minute / 60) * 3.14159265358979 / 180
            Longitude_2 = (Longitude_degre + Longitude_minute / 60) * 3.14159265358979 / 180
            dla = Abs(Latitude_2 - Latitude_1)
            dlg = Abs(Longitude_2 - Longitude_1)
            a = Sin(dla / 2) * Sin(dla / 2) + Cos(Latitude_1) * Cos(Latitude_2) * Sin(dlg / 2) * Sin(dlg / 2)
            distance = 6375 * 2 * Atn(Sqr(a)) * 1.1 ' pour avoir comme les compteur de voiture 
        End If
        distance_total = distance + distance_total
        Label3.Caption = distance_total
        Label1.Caption = distance * 3600 
        compteur_km_2 Label1.Caption
        Temp = ""
    End If
Else
    Temp = ""
End If
End Sub

Conclusion :


Néssiter pas a me posser des question si je n'ai pas été clair.

A voir également

Ajouter un commentaire

Commentaires

cs_Stephane
Messages postés
550
Date d'inscription
vendredi 5 janvier 2001
Statut
Membre
Dernière intervention
23 septembre 2006
-
salut

je peux pas tester ta source tout simplement parce que j'ai pas de gps :D

en revanche ce que tu pourrait faire c'est en comparant la vitesse à t, et t-1, déduire l'acceleration, pour pouvoir obtenir une vitesse instantanée théorique.

je ne suis pas sur que ca fonctionne mais ca devrait.

en donnant v1 et v2 (v2 la nouvelle vitesse)
l'acceleration vaut : a=(v2-v1)/1
et donc la vitesse instantané, avec t compris entre 0 et 1

vt = v2 + a*t
avec v2 la derniere vitesse

t represente le temps en seconde depuis la derniere reception

voila, j'espere que ta compris mes explication, et qu'elles marcheront si tu les appliquent.
++
bozo76
Messages postés
1
Date d'inscription
vendredi 29 avril 2005
Statut
Membre
Dernière intervention
11 août 2005
-
Super Prog Pompier je le testerai mais bon j'ai TomTom3 qui me donne ma vitesse instantanée qui est a vrai dire très proche de mon compteur qlors pourquoi ne pas essayer les 2 pour comparer !!! et je te dirais ce que vaut ta vitesse moyenne par contre elle ne sera valable que lorsque tu sera à vitesse stabilisé et pas lorsque tu démarre ou tu freines !!! Mais bon tu es sur la bonne voix pour développer TomTom 6 alors continue !!!

Et Merci stephane tu viens de résoudre un problème de physique de 1ère S ... (à le bon vieux temps)
j'espère que tu auras ton bac avec cette jolie démonstration. (lol) à moins que tu l'ai déjà dans ce cas : félicitations.

Bon allez moi j'ai un dossier technique sur les propagations des champs électrique à rédiger en Anglais !!
@ ++
et Merci pour ce petit prog
cs_Stephane
Messages postés
550
Date d'inscription
vendredi 5 janvier 2001
Statut
Membre
Dernière intervention
23 septembre 2006
-
bozo > j'ai mon bac S SI spé math

au vu de la phrase "je fait un méchant calcul pour trouver la distance parcourue" j'ai preferé expliquer "clairement" comment faire...

si je lui dit d'integrer 2 fois la distance parcourue, je sais pas s'il comprendra.
Donc je donne les formules.

a+
pompier0112
Messages postés
9
Date d'inscription
jeudi 9 novembre 2000
Statut
Membre
Dernière intervention
12 septembre 2005
-
Sthephane > la phrase "je fait un méchant calcul pour trouver la distance parcourue" un de l'humour pour les personne qui y connaissent rien.
Le but de ce soft dans un premier temps a été de traiter les informations recu sur le GPS, la vitesse est venu qu'aprés ce rajouté desssus, sans vouloir ce prendre la tête !!!

pour info, la double integration ne me fait pas peur -> Bac S, Prépa, Ecole d'ingénieur (3 iéme année)
Merci quand meme de vos commentaire . (pour ceux qui y connaissent rien)
bouv
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
-
Super code !
Si quelqu'un sait comment recupérer les mêmes infos depuis un GPS Bluetooth : l'info est la bienvenue.

Pompier0112>>Concernant l'altitude, tu ne sait pas comment la traiter ou c'est simplement parce que quand on utilise ça en ville la variation de niveau est souvent négligeable.

PS : J'ai pas de Bac S (simple STT compta), mais ces calculs ne me posent pas de pb. ;-)

Bonne prog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.