PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GPS gesteuerte Ansagen auf schienengebundenen Fahrzeug



Loety
12.05.2007, 19:46
Hallo zusammen !

Bin neu hier im Forum und hoffe das ihr mir etwas Starthilfe geben könnt.
Ich möchte mit einem GPS Modul das mit einem Atmel Controller und einem MP3 Modul verbunden ist an gezielten Punkten einer Wegstrecke
MP3 Files abspielen.

Die Wegstrecke ist immer die gleiche da es sich um ein schienengebundenes Fahrzeug handelt.
Also auf der Fahrt von A nach B sollen an mehreren Punkten der Wegstrecke automatisch an bestimmten Koordinaten vom MP3 Modul Files abgespielt werden.
Das MP3 Modul läßt sich per RS232 an einen Atmel Controller anbinden und ist hier jetzt auch nicht das Problem.

Mein Problem ist nun die Progammierung der GPS Auswertung.
Wie muß oder kann sowas aussehen ? Kann mir da jemand gute Tips geben ? Ich bin für alle Antworten dankbar !

Ich habe mir auch schon die Grundlagen der GPS Datensätze die man per RS232 auslesen kann angesehen.
Aber wie kann ich die im Controller so weiterverarbeiten das man auf einer Wegstrecke an bestimmten Punkten Aktionen auslösen kann ?

Dank an alle die mir weiterhelfen !!!

Grüße Loety

goara
12.05.2007, 19:55
in welcher grössenordun ist denn die strecke ? wegen der genauigkeit von dem gps ob das reicht ?
ansonsten musst den den conroller halt so programmieren, das er die gps werte mit den einegspeicherten vergleicht und wenn es uebreinstimmt wird die aktion ausgelöst..

Loety
12.05.2007, 20:14
Hallo goara !

Also die Stecken sind schon über mehrere Kilometer von A nach B und die
Punkte dazwischen sind auch mindestens zwischen 500 Metern und mehreren Kilometern.
Ich denke das GPS da genau genug ist oder ?

Wie sieht denn so eine Auswertung im Controller genau aus ?
Ich habe sowas noch nie gemacht.

Grüße Loety

Andree-HB
12.05.2007, 20:20
Wie sieht denn so eine Auswertung im Controller genau aus ?
Ich habe sowas noch nie gemacht.


Das Einlesen der Daten einer seriellen GPS-Maus an einem Controller ist sehr einfach. Dann würde ich Variablen bilden für Längen-/Breitengrad und diese dann mit einer Tabelle vergleichen, in der halt Deine Referenzpunkte eingetragen sind und dann bei Bedarf/Übereinstimmung entsprechende Aktionen auslösen.

Eine gute Erklärung des NMEA-Protokolles (aus einer GPS-Maus) gibt es hier :
http://www.kowoma.de/gps/zusatzerklaerungen/NMEA.htm

Loety
12.05.2007, 20:37
Hallo Andree-HB !

Wenn ich die Hardware an einem bestimmten Punkt am Fahrzeug befestigen würde habe ich denn dann gute Chancen das die Hardware immer wieder den Referenzpunkt erkennt ? :-k

Andree-HB
12.05.2007, 20:42
...Du kannst ja in einer Berechnung/einem Referenzvergleich einen kleinen Korrekturradius einrechnen (+/- 20m oder so), dann klappt das auf jeden Fall.

Gerade Heute habe ich mich wieder mit meiner GPS-Maus beschäftigt, da ich an einem neuen Projekt bezüglich der Kombination Koordinaten/Fotoaufnahmen arbeite und eine sehr einfache Möglichkeit gefunden, wie man sich unter Bascom-Basic Einzelvariablen aus einem eingelesenen String aus dem NMEA-Protokoll bildet, kann Dir das bei Bedarf als Grundlage gerne zur Verfügung stellen :




Dim A As Byte
Dim Gpsdata As String * 90
Dim Head As String * 6 , Arspec As String * 6
Dim Ar(13) As String * 12
Dim Bcount As Byte
Dim J As Byte
Config Serialin = Buffered , Size = 100
Enable Interrupts


Do
J = 1
Do
A = Inkey()
If A = 36 Then Input Gpsdata Noecho
Head = Mid(gpsdata , 1 , 5)
Loop Until Head = "GPGGA"
Bcount = Split(gpsdata , Ar(1) , ",")
For J = 1 To Bcount

Next
Gpsdata = ""
Print "Uhrzeit : " ; Ar(2)
Print "Breitengrad : " ; Ar(3)
Print "Nord / Sued : " ; Ar(4)
Print "Laengengrad : " ; Ar(5)
Print "East / West : " ; Ar(6)
Print "Messung : " ; Ar(7)
Print "Satelliten : " ; Ar(8)
Print "Genauigkeit : " ; Ar(9)
Print "Hoehe : " ; Ar(10)
Print "Einheit : " ; Ar(11)
Print "Dummy : " ; Ar(12)
Print "Dummy : " ; Ar(13)
Print ""

Loop
End


Ausgabe erfolgt dann in dieser Form :

Uhrzeit : 184942.265
Breitengrad : 5305.9370
Nord / Sued : N
Laengengrad : 00849.2339
East / West : E
Messung : 1
Satelliten : 04
Genauigkeit : 07.8
Hoehe : 8.9
Einheit : M
Dummy : 40.8
Dummy : M

Loety
12.05.2007, 21:00
Das sind ja schon viele Anhaltspunkte ! Super...Danke euch allen.

Aber ich muß nochmal dumm fragen wie man so eine Berechnung
auf die Beine stellt ??

Gibt es da Quellen oder Codeschnipsel um sich da reinzudenken?

Ich stehe da wirklich ganz am Anfang und wie ein Ochse vor dem Berg :(

Loety
12.05.2007, 21:14
Hallo Andree-HB !

Na da war dein Posting schneller als meine Frage !!

Gerne greife ich auf deine Erfahrungen zurück !!

Vielen Dank für deine Hilfe.

Grüße Loety

Andree-HB
12.05.2007, 21:15
...sehr unelegant aber einfach könnte man mit "if-Abfragen" arbeiten, salopp à la :

"wenn Längenvariable = Längenvorgabe Nummer 1 und Breitenvariable = Breitenvariablevorgabe Nummer 1 dann starte MP3 Nr.1"

"wenn Längenvariable = Längenvorgabe Nummer 2 und Breitenvariable = Breitenvariablevorgabe Nummer 2 dann starte MP3 Nr.2"

Loety
12.05.2007, 21:29
....und wie wäre dann elegant 8-[

Merke schon es ist wohl "einfacher" als ich gedacht habe.
Hatte mir das komplizierter vorgestellt !!

Schön das ihr mich bei meinen Gehversuchen so toll unterstützt.

Danke

Grüße Loety

plusminus
13.05.2007, 12:01
mir fällt auf die schnelle nicht ein, wie man das viel schöner machen sollte...


Dazu ist dieses Forum ja da ;)

gpsklaus
14.05.2007, 17:18
Hallo,
um die jeweiligen Messageausgabepunkte auch immer wieder sicher zu finden, würde ich Positionsfenster erzeugen. Damit meine ich die Verknüpfung aller im Bereich von z.B. +/- 100m um den gewünschten Positionspunkt liegenden Lat-/Lon-Positionswerte zu Fenstern. Alle innerhalb dieser Fenster befindlichen Positionsdaten würden dann zur Ausgabe des zugehörigen Sprachfiles führen.
Wenn man stattdessen immer nur auf ganz bestimmte Lat-/Lon-Werte wartet, dann dürfte die Suche oftmals ins Leere gehen

Übrigens:
Was für ein Spachmodul willst Du verwenden?
Ich habe hier schon mit dem uMP3 von roguerobotics experimentiert.
Siehe: http://www.kh-gps.de/ump3.htm

Klaus

Loety
15.05.2007, 13:21
Hallo gpsklaus !

Vielen Dank für deinen Tipp!! Habe auch schon deine Hompage besucht !
Du bist ja Profi auf dem GPS Gebiet.

Ich verwende folgendes MP3 Modul:

http://www.loetronic.de/mini_module.htm

dazu ein Entwicklerboard von:

http://www.mikroe.com/en/tools/bigavr/

und zur Bedienung des ganzen ein Touch Display von:

http://www.lcd-module.de/deu/pdf/grafik/edip240-7.pdf

Grüße Loety

Ratte
17.05.2007, 15:03
Weil ich da grad nix gefunden hab (bin vielleicht nur zu blöd): was kostet son touchdisplay?
Zum Thema: muss es GPS sein? evt könnte doch auch ein kleiner Funksender mit begrenzter Reichweite oder falls da Gerät fixiert ist sogar ne Batterie IR-LEDs reichen.

Loety
18.05.2007, 04:00
Hallo Ratte !

Guckst Du hier :

http://www.reichelt.de/?SID=27xHNaAKwQARsAACuOn0kaffef9cd9974539ec13bea35 d77b65a3;ACTION=3;LA=3;GROUP=A524;GROUPID=3010;ART ICLE=53982;START=0;SORT=artnr;OFFSET=16

Ja GPS muß sein da es sich nicht um Spielzeug handelt (Modellbahn oder sowas)

Grüße Loety

Ratte
18.05.2007, 11:17
schon klar... aber was spricht gegen einen sender mit so 10 m reichweite (oder ner passenden Antennencharakteristik, die den Empfangsbereich begrenzt)?

Loety
18.05.2007, 12:54
Hallo Ratte !

Also so wie ich das verstehe meinst Du eine Lösung mit ortsfesten
Einrichtungen an der Strecke oder ?
Das wäre aber viel zu aufwändig !!
So müßte ich ja sowohl im Fahrzeug als auch an der Strecke selber Technik einrichten.
Oder wie meinst Du das mit Deiner Idee ??

Grüße Loety

Ratte
18.05.2007, 13:09
ja, so meine ich das. Hängt immer von der strecke ab, ob sowas vernünftig geht, ich könnte mir aber vorstellen dass es so im Endeffekt billiger wird. (vorausgesetzt die Strecke wird nicht oft verändert)

Loety
09.02.2010, 22:11
Hallo,
um die jeweiligen Messageausgabepunkte auch immer wieder sicher zu finden, würde ich Positionsfenster erzeugen. Damit meine ich die Verknüpfung aller im Bereich von z.B. +/- 100m um den gewünschten Positionspunkt liegenden Lat-/Lon-Positionswerte zu Fenstern. Alle innerhalb dieser Fenster befindlichen Positionsdaten würden dann zur Ausgabe des zugehörigen Sprachfiles führen.
Wenn man stattdessen immer nur auf ganz bestimmte Lat-/Lon-Werte wartet, dann dürfte die Suche oftmals ins Leere gehen.


Klaus

Hallo gpsklaus,

ich habe das Projekt bis heute leider nicht weiter verfolgt, aber möchte nun nochmal einen neuen Versuch starten. Wie würde denn so etwas aussehen mit einem Positionsfenster ?
Hättest Du da mal einen Programmansatz für mich ?
Ich habe übrigens mittlerweile auch das uMP3 Modul aus Canada bei mir auf dem Tisch liegen, und würde es auch gerne für die Ansagen verwenden.
Hast Du da schon Erfahrungen mit gesammelt um es per Atmel anzusteuern ? Ich stelle es mir so vor, das ich alle benötigten Ansagen im Hauptverzeichniss der SD Karte speicher, und mir daraus mit Hilfe des Busy Signals die benötigten Ansagen quasi wieder zusammenbauen kann.
Leider habe ich dazu noch keinen Programmansatz, und würde mich über jede Hilfe freuen !

Liebe Grüße

Loety

Ls4
10.02.2010, 09:12
Also die Schritte sind folgende:

1.) NMEA Signale auslesen
2.) Vertraensbereich festlegen (z.B. +-5 Bogensekunden)
3.) Latitudinal und Longitudinal Daten auslesen
4.) Maximum und Minimum der erlaubten Daten berechnen.
Latitudinal +5 bogensekunden, latitudinal -5 Bogensekunden, Longitudinal +5 Bogensekunden, Longitudinal -5 Bogensekunden
5.) Vergleich der gespeicherten Werte mit dem Vratsuensbereich
long-5<gespeichert<long+5, lat-5<gespeichert<lat+5
6.) Wenn übereinstimmung, dann bestimmtes Mp3 abspielen

Viele Grüße,

Tim

Loety
10.02.2010, 13:24
Also die Schritte sind folgende:

1.) NMEA Signale auslesen
2.) Vertraensbereich festlegen (z.B. +-5 Bogensekunden)
3.) Latitudinal und Longitudinal Daten auslesen
4.) Maximum und Minimum der erlaubten Daten berechnen.
Latitudinal +5 bogensekunden, latitudinal -5 Bogensekunden, Longitudinal +5 Bogensekunden, Longitudinal -5 Bogensekunden
5.) Vergleich der gespeicherten Werte mit dem Vratsuensbereich
long-5<gespeichert<long+5, lat-5<gespeichert<lat+5
6.) Wenn übereinstimmung, dann bestimmtes Mp3 abspielen

Viele Grüße,

Tim
Hallo Tim,

danke das Du mir so schnell geantwortet hast, aber leider verstehe ich nur Bahnhof von dem was Du da geschrieben hast.

Könntest Du mir das vielleicht etwas genauer erklären ? Möchte das ganze in BASCOM programmieren, und benötige dafür falls möglich etwas genauere Angaben bzw. Erklärungen dazu. Etwas Code könnte auch nicht schaden wenn möglich O:)

Ich habe noch keine Erfahrungen mit dem Auswerten und weiterverarbeiten von GPS Daten.

Viele Grüße

Loety

Ls4
10.02.2010, 15:50
Hallo Loety,

mit Code kann ich nicht dienen, da ich mich a) nicht damit beschäftigt habe und b) kein Bascom kann ("nur" andere Sprachen)
aber ich kanns versuchen zur erklären.

1.) Deine GPS Maus gibt ein NMEA Signal aus. Das ist in der Regel ein Datenstrom über eine serielle Leitung. Da kommen dann Zeichen und anschließend Werte, die die Signale der GPS Maus wiedergeben. Die Nmea Signale selbst kenne ich nicht auswendig.
Aus diesen Signalen kannst du dann die Information für den Längengrad und den Breitengrad extrahieren und in zwei Variablen speichern. Damit hast du die aktuelle Position.
2.) Dein GPS hat natürlich keine 100%ige Genauigkeit. Also muss du eine Zone festlegen in der die gemessene Position liegen darf um die Date abzuspielen. Das wäre dann wenn du in beide Richtungen z.b. sagst +5 (Bogensekunden) ein Quadrat um deine gemessene Position. du hast dann 4 Werte nämlich Maximum/Minimum in Längsrichtung und Maximum/Minimum in Querrichtung.
3.)Die Position für die MP3 hast du vorher gemessen und irgendwo im Mikrocontroller gespeichert. Nun kannst du überprüfen ob die Position innerhalb des berechneten Quadrates liegt.
Wenn das so ist lößt du einfach die MP3 aus.

Ich hoffe das hat die ein wenig geholfen.

Viele Grüße,

Tim

Loety
10.02.2010, 16:33
Hallo Tim,

also der Aufbau von so einem GPS String sieht so aus :

$GPRMC,191410,A,4735.5634,N,00739.3538,E,0.0,0.0,1 81102,0.4,E,A*19

RMC Recommended Minimum Specific GPS/TRANSIT Data

1 universelle Zeit (UTC)
2 Empfängerwarnung, A = Daten OK, V = Warnung
3 Latitude
4 N / S
5 Longitude
6 E / W
7 Geschwindigkeit in Knoten
8 wahrer Kurs (ohne Bewegung) in deg
9 UT Datum
10 Magnetische Variation in deg
11 E / W
12 Checksumme


Aber wie genau beschreibe ich denn nun so ein quadratisches Fenster wie Du es meinst ? Wie sieht es denn in Zahlen ausgedrückt aus, wenn ich jetzt von einer beliebigen Position in alle Richtungen so einen Zuschlag von +/- 100m oder so angeben will ? :-k
Wie sage ich es meinem Programm ](*,)

Etwas Grundwissen in der Sprache C habe ich übrigens auch, aber ist halt nicht so die Welt !

Viele Grüße

Loety

Ls4
10.02.2010, 20:37
Hallo Loety,

ich bin auch nicht so der µC Profi. Ich studiere Informatik und habe mit dem Atmega88 meine Studienarbeit gemacht. Aber das Wissen kann man sehr gut auf µCs übertragen.

Ich würde es wie folgt machen.
1) String speichern
2) sequentiell durchlaufen, bis du zum 3 Komma kommst
Dann ließt du die ersten 2 Werte (Grad) die nächsten 2 Werte (Minuten) und den Rest. Das ganze kannst du dann nach folgendem Schema in Meter umrechnen:
http://www.rad-karlsruhe.de/gps.php?content=koordinaten_karten
Beachte in Nord Südrichtung geht der Grad wert von 0-90 also 2 Ziffern in Ost West Richtung von 0-180 also 3 Ziffern.
N oder S Bzw E oder W musst du natürlich auch lesen und speichern.
Nachdem du es in Meter umgerechnet hast kannst du natürlich einen ganz normalen Integer Vergleich machen.
Mit dem Kurs Signal kannst du acuh noch fest stellen in in Welche Richtung du fährst und Fahrtrichtungsabhängig MP3s abspielen.

Viele Grüße,

Tim

Loety
11.02.2010, 01:42
Hallo Tim,

also ich habe dann nochmal Zeit gehabt um die alte Tante Google zu bemühen, und bin auf eine super Formel gestoßen.

distance = sqrt(dx * dx + dy * dy)

mit distance: Entfernung in km
dx = 71.5 * (lon1 - lon2)
dy = 111.3 * (lat1 - lat2)
lat1, lat2, lon1, lon2: Breite, Länge in Grad

Diese Formel ist für meine Zwecke genau genug, da ich einen maximalen Einsatzradius von 50 km benötige.
Damit erspare ich mir auch die Umrechnung der Koordinaten, und kann diese 1:1 vom GPS Empfänger in die Formel übernehmen.

Beispiel:
Koordinate 1 : Lat. 49.9917 Lon. 8.41321
Koordinate 2 : Lat. 50.0049 Lon. 8.42182
Ergebnis : 1,593 km

Somit kann ich die aktuelle Entfernung zum Auslösepunkt ständig berechnen. Dabei vergleiche ich die momentane Entfernung mit der Zielkoordinate, und wenn ich mich bis auf sagen wir mal 100 Metern an diese genähert habe, löse ich die MP3 Datei aus.

Das müßte doch so klappen oder ? :-k

Viele Grüße

Loety

Bammel
11.02.2010, 10:59
Das ist der Sat des Pytagoras in einer kleinen abgewandelten form ;-)

Sry aber mit GPS kenn ich mich "noch" nicht aus.