Forum: Mikrocontroller und Digitale Elektronik Wer kennt sich richtig gut mit ublox GPS Modulen aus?


von Christian J. (Gast)


Lesenswert?

Moinsen!

Gibt es hier vielleicht jemanden? Die Dinger sind doch zum Basteln 
ideal.

Folgendes:

Mein derzeitiger GPS Logger auf N8N Basis klappt mit Google Earth sehr 
gut. Problem ist nur, dass er auch beim Stillstand (z.b. Arbeitszeit) 
laufend Daten auspuckt, die dann als dicke Punkte-Knubbel zu sehen sind. 
Sehr unschön und auch Datenverschwendung. Das ublox Modul ist direkt an 
openlog gepappt und wurde mit u-center konfiguriert.

Ich weiss das sowas geht von einem alten Foto-Tagger aber leider nicht 
wie: Aktuell geht alle 5s ein NMEA Satz raus, GGA und RMC. Es gibt aber 
bei ucenter so Dinge wie Odometer, Profile für Gehen, Laufen, Auto usw.

Es soll nur ein Datensatz rausgehen, wenn eine Mindestwegstrecke erkannt 
wurde, sagen wir mal 25m um über der Toleranz zu bleiben. Nur dann soll 
ein NMEA Satz gesendet werden.

Ich sage gleich dazu, dass ich das probiert habe.... geht nicht. 
Vermutlich wegen konkurrierender Einstellungen. Klappt es nicht bleibt 
mir nur die Lösung mit einem uC und einem Vibrationsensor der den 
Stillstand erkennt und das Modul per Befehl abschaltet.

Jemand ne Idee? Bitte nicht "Handbuch lesen".. das hat mich auch nicht 
schlauer gemacht.

von drm (Gast)


Lesenswert?

>Bitte nicht "Handbuch lesen"..
tl;dr ?

von Sextant (Gast)


Lesenswert?

Christian J. schrieb:
> N8N

Meinst du das NEO-M8N?

von Günni (Gast)


Lesenswert?

Aus dem "Punkte-Knubbel" den Positionsmittelwert berechnen und dann den 
Abstand zu diesem bereinigten Punkt berechnen. Datentelegramme 
ignorieren, bei denen der Abstand unter dem vorgegebenen Mindestabstand 
liegt. Das kann man entweder mit einem handelsüblichen PC mit einem 
Basic- oder C-Progrämmchen oder auch mit einem der vielen 
"Bastelcomputer" machen.

von Stephan (Gast)


Lesenswert?

Christian J. schrieb:
> dass er auch beim Stillstand
Du möchtest bitte das "Handbuch" (aka "Receiver Protocol Description"), 
Kapitel "x.y Static Hold" lesen. Die Funktion sollte es in allen M8* 
geben.
VG, Stephan

von Christian J. (Gast)


Angehängte Dateien:

Lesenswert?

Moin,

also ich habe mir jetzt folgendes aufgebaut... die Funktion die ich 
wünsche läuft wohl nur mit dem internen Recorder, den ich aber nicht 
benutze. Dieser hat 16 Mbit Flash zur Verfügung. Er wird aktiviert mit 
Odometer und einigen Mausklicks oder Steuerbefehlen die der uC gibt. 
Nee....  ich habe meinen Recorder, openlog. Und der klappt ja prima.

Aufgebaut ist jetzt ein Arduino Pro Mini, der einen winzigen 3V3 DC/DC 
Wandler ansteuert, der einen Enable Pin hat. An dem Ardu hängt ein 
ADXL345 Gyro Sensor, der auf Motion Detection eingestellt ist und dann 
einen INT ausspuckt. Die üblichen Bewegungsmelder / Glasbruch etc. sind 
zu unempfindlich. Quecksilber gibt es nicht mehr, leider. Bewegt sich 
der Logger nicht mehr (Auto, Rucksack) soll das GPS abgeschaltet werden 
damit diese "Punkte-Knubbel" vermieden werden. Das sieht unschön aus. 
Zudem gibt es leider auch Ausreißer dabei.

Wie ich es abschalte ist noch offen, da es passieren kann, dass es 
mitten im Datensatz abbricht wenn ich den DC/DC abschalte und ich dann 
Fragmente habe, die einen Fehler erzeugen beim Import.

Ergo überlege ich ob ich die Funktion UBX-CFG-XXX nutze, es ab zu 
schalten, da die auch funktionierte im Test bei u-center. Der 
Stromverbrauch geht dann extrem zurück auf ca 17ma. (kann ich mit leben) 
Vermutlich sendet es dann weiter bis der Satz raus ist. Und bei einem 
"Hotstart" ist es auch schnell wieder da, meldet sich mit GPTXT.... 
erneut zum Dienst. GPTXT werden von Google Earth überlesen, das wertet 
nur GGA aus oder GRMC.

Oder aber ich leite die GPS Daten aus der UART durch den Ardu per 
SoftwareSerial (?) oder lausche zumindest an TX, ob sie zu Ende sind und 
schalte dann hart ab. Der Ardu hat ja sonst nichts zu tun, er dient nur 
als Monoflop für 5 Minuten. Kommt kein INT mehr schaltet er ab.

Static Hold schaue ich mir mal an....  gucken ob das ggf. ausreicht. 
Leider im Arbeitszimmer keinen Empfang, müsste einen Besensteil mit dem 
GPS aus dem Fenster halten. :-( Denn wie sich das liest setzt das bloss 
ein Flag für den FIX auf invalid, es werden aber weiter die Nachrichten 
an die UART geschickt.

von Jan H. (jan_h74) Flattr this


Lesenswert?

Ich glaube das an der seite van Ublox das nicht gemacht werden kan. Da 
muss du den logger intelligent machen, so das er nur logt wenn wirklich 
Bewegung erfasst werd. Mit Arduino IDE und eine SD karte ist das relatif 
einfach. Ich verwende eine ESP32 mit SD karte und eine Beitian BN220 gps 
(ahnlich an der Ublox M8n, aber billiger).

von Christian J. (Gast)


Lesenswert?

Jan H. schrieb:
> Ich glaube das an der seite van Ublox das nicht gemacht werden kan. Da
> muss du den logger intelligent machen, so das er nur logt wenn wirklich
> Bewegung erfasst werd. Mit Arduino IDE und eine SD karte ist das relatif
> einfach. Ich verwende eine ESP32 mit SD karte und eine Beitian BN220 gps
> (ahnlich an der Ublox M8n, aber billiger).

Ja, ich habe mir grad die Finger abgefroren als ich das Teil vom Balkon 
aus unter dem Dachfirst 5 Minuten in die Luft hielt. Es plappert immer 
weiter, muss es ja auch eigentlich. Ein Kopter will ja auch ständig 
Infos. Aber nach 3-4 Telegrammen frieren die Daten auch in den letzten 
Kommastellen ein wenn man Static Hold aktiviert und es gibt keine 
Punkt-Haufen mehr. Wohl viele Punkte aber die decken sich alle.

Ich werde meine Lösung fertig bauen dem Modul den Strom zu klauen, wenn 
sich nichts mehr bewegt und dazu dient eben der ADXL345. openlog bleibt 
bestromt, damit nicht immer neue Dateien enstehen. Ist ja nur ein 
einziger Bastel-Prototyp, keine Serie.

Mal ne Frage: Weisst du ob die Original Softserial gleichzeitig senden 
und empfangen kann? Falls ich mich entscheide den Arduino mit in den 
Datenweg ein zu schleifen.... denn der kann den ja ganz einfach 
abklemmen.

von Christian J. (Gast)


Angehängte Dateien:

Lesenswert?

Haut nicht hin. Bereits unter dem Dach einer Tanke, wo GPS gestört ist 
hauen mir die m/s ab. Und ich kenne leider keine Einstellung, die 
schlechten GPS Empfang weg filtert. Da kommen immer Daten raus, auch 
wenn sie krumm und schief sind. Und deren Auswertung wird dann halt 
einem uC überlassen.

von Wolfgang (Gast)


Lesenswert?

Christian J. schrieb:
> Bewegt sich der Logger nicht mehr (Auto, Rucksack) soll das GPS
> abgeschaltet werden damit diese "Punkte-Knubbel" vermieden werden.

Abschalten ist nicht das Problem. Interessant ist, wie du die Sache nach 
abgeschaltetem GPS wieder vernünftig hoch fahren willst. Das GPS braucht 
12.5 Minuten, um alle Almanachdaten im Empfänger zu aktualisieren.

Die Datenfilterung wirst du wohl in eine Separate Softwareschicht deiner 
Applikation auslagern müssen. GPS Empfänger einfach abschalten ist keine 
Lösung.

von Jan H. (jan_h74) Flattr this


Lesenswert?

Es gibt verschiedene parameter von diese gps die genau die Qualitat von 
signal angeben : Anzahl satelliten, und sAcc, hDop, vDop... Ich starte 
nur mit loggen wen da minimal Werte vorliegen : Anzahl Sat min 5, sAcc 
kleiner dan 1. Beim erste gps-fix (3 Sat) gibt den gps noch keine 
vernunftige Werte aus, sowohl pos. (Long, Lat) wie doppler speed kan 
sehr stark abweichen. Aber wie gesagt, diese Intelligenz muss in Logger 
eingebaut werden.

von Christian J. (Gast)


Lesenswert?

Jan H. schrieb:
> Anzahl satelliten, und sAcc, hDop, vDop... Ich starte
> nur mit loggen wen da minimal Werte vorliegen : Anzahl Sat min 5,

Ist schonmal ein guter Ansatz, danke! Hoffe ich auch ohne Parser hin zu 
kriegen, den will ich vermeiden wegen "kompliziert". Gibt so viele, 
leider oft schlecht dokumentiert.

Im Übrigen braucht ein GPS nur einmal die Woche (meist Montags) länger 
für den Fix (ca 5 Minuten), sonst ist es in 1 Minute betriebsbereit. Ich 
hatte das mal mit einem alten, was heute nicht mehr funktioniert: Diesem 
TomTom Ding, 14 Jahre alt. Per PC aktualisiert, 1 Woche lief es aber 
dann nicht mehr. Gleiches Spiel bis das Protokoll geändert wurde, dann 
konnte ich es wegwerfen.

von Christian J. (Gast)


Lesenswert?

Wolfgang schrieb:
> Abschalten ist nicht das Problem. Interessant ist, wie du die Sache nach
> abgeschaltetem GPS wieder vernünftig hoch fahren willst.

Doch ist es! Du kannst das M8N per Software abschalten und danach 
auswählen ob es einen Hot Start macht, einen Warm Start oder einen Cold 
Start. Damit stellt man sicher, dass die Telegramme sauber bleiben auf 
der SD karte. Denn die wollen ja interpretiert werden. Und ich vermute 
gefühlt dass es da Grenzen gibt, was die Datenfehler angeht. Bisher 
schaue ich manuell einmal durch, lösche Müll und leere Datenfelder. 
Mühsam bei 8h Daten alle 5s...

Du bzw. ich kann es auch per Hardware abschalten über den uC. Einfach 
DC/DC Enable = Low. Dann gibt es ganz sicher Datenfetzen auf der Karte. 
Es sei denn du lauscht an TX und wartest bis 1s nix mehr kam, schaltest 
dann ab. Der Warmstart dauert < 1 Minute, da das GPS noch die 
Satellitendaten drin hat vom Tage.

von Christian J. (Gast)


Lesenswert?

Moin,
für die, die es noch interessiert hier die Lösung.

Der Ardu Pro Mini wertet jetzt das ADXL345 aus auf kleinste 
Bewegungsänderungen. Da die eingebauten "Threshold" Funktionen nicht 
funktionierten mal kurz was eigenes programmiert.

Die 9600 baud Daten des M8N gehen durch den Ardu über die Softserial von 
Stoffregen. Die kann nämlich Duplex, was die von Arduino nicht kann. 
Eine Auswertung der GGA und RMC erfolgt nicht. Es wird nur kurz geschaut 
ob die 3 Kürzel am Anfang jeder Sendung stehen (GPTXT wird ignoriert), 
ob der Fix gültig ist im Feld 6 der GGA und > 6 Satelliten da sind und 
dann durchgereicht, alles andere wird verworfen. hdop und pdop beachte 
ich nicht. Telegramme ohne gültigen Fix werden von google earth zwar gar 
nicht beachtet wie ich bemerkt habe aber sie verstopfen die Karte eben.

Meldet der ADXL > 2 Minuten Stillstand wird das GPS stromlos geschaltet 
nachdem es 1s keinen Datenverkehr gab. Und auch der Ardu geht häufig 
schlafen. Bewegt sich wieder was startet das GPS wieder < 1min bis 1m30 
und die Daten gehen zur Karte durch sobald sie einen gültigen Fix zeigen 
und genug SATs da sind.

Meiner Meinung nach kann man so stromsparend loggen. Es mag sein, dass 
man die GPS Telegramme auch auswerten kann aber der Stromspar Mode 
funktioniert einfach nicht beim M8N. Er wird nicht akzeptiert, die 
Einstellung springt immer wieder zurück. Kann sein dass der Hardware Pin 
so verdrahtet ist, dass das nicht geht. Hatte auch viel Zirkus mit der 
Baudrate, die wollte zum Verrecken nicht auf 9600 gehen. Ob BRR, I2C 
EEPROm, Flash.. alles durchgeklickt zum Speichern. Irgendwann war es 
dann aber.

Zu openlog.... netterweise waren alle Module aus der Bucht falsch 
programmiert. Falsche Taktrate. Ich muss 19200 einstellen, damit ich 
9600 habe. 8 statt 16 Mhz verwendet beim "Hersteller". Liessen sich auch 
nicht neu flaschen, Bootloader wohl defekt.


Das wars....

von Christian J. (Gast)


Lesenswert?

Halllooooo....

können wir uns mal abgleichen was den Code angeht?
1
byte CheckValidFix(String *t)
2
{
3
  /* Müll filtern */
4
  if (!t->startsWith("$"))
5
    return 0;
6
7
  /* Infotext filtern */
8
  if (t->startsWith("$GNTXT"))
9
    return 0;
10
11
  /* Es werden nur gültige RMC und GGA Telegramme durchgelassen */  
12
  String gpscmd = "$GNRMC";     /* RMC String untersuchen */
13
  if (t->startsWith(gpscmd)) {
14
      /* Bei einem gültigen Telegramm steht "vorne" ein A, suchen ab Kommando*/
15
      int pos = t->indexOf("A",gpscmd.length());
16
      if ((pos > 0) && (pos < gpscmd.length()-3)) {
17
      /* Es wurde ein A gefunden, prüfe ob es nicht die Prüfsumme war zb *6A */
18
           SoftUART.println(*t);
19
           return 1;
20
      }
21
  }
22
  
23
  gpscmd = "$GNGGA";     /* GGA String untersuchen auf Anzahl Satelliten */
24
  if (t->startsWith(gpscmd)) {
25
    char telegram[128];
26
    char *p = telegram;
27
    t->toCharArray(telegram,t->length()); /* String in Buffer kopieren */
28
    /* Position des 6.ten Kommas anfahren */
29
    for (int i = 0; i < 7; i++) {
30
      while (*(++p) != ',');
31
    }
32
    int sats = atoi(++p);
33
    if (sats >= 5) {
34
      SoftUART.println(*t);
35
      return 1;
36
    }
37
  }

von Jan H. (jan_h74) Flattr this


Lesenswert?

Derzeit habe ich ein GPS verwendet für eine "Rover", ist einen RC-auto 
die wegepunkte anfahrt. Siehe auch : 
http://wiki.robotmc.be/index.php/Snelle_RC-car_met_GPS
Ich habe eine lib verwendet für die NMEA-frames 
(https://github.com/kosma/minmea), hat prima functioniert. Bei jeden 
boot sende ich bestimmte strings nach der neoM8n, sodas er nur die 
gewunschte telegrammen ausgibt. Auch die datarate (standard 1 Hz) kan so 
geandert werden, da verwende ich 5Hz oder 10Hz. Selbst den baudrate kan 
so geandert werden, mach ich aber nicht, 9600 baud reicht aus. Bei meine 
neue Project (gps-speedmessung für windsurfen) verwende ich jetzt das 
binair protocol von Ublox : ubx.navpvt (ca 100 bytes) erhalt alle 
wichtige dateien für mich. Auch hier verwende ich wieder eine lib für 
decodierung. Jetzt verwende ich Arduino mit eine ESP32 und ein Beitian 
BN220 gps. Das ist ein Ublox clone, billig und gut. Das ding muss 
folgendes machen :
Daten loggen in ubx an 5Hz / 10Hz nach eine SD-carte
Mittelwert max 2s, 10s, 30min, 60min, 100m, 200m, 1852m.
Auslesung auf ein display, jetzt ein e-paper 2.2 inch.
Webserver, so das die SD karte wireless ausgelesen werden kan. Und ja, 
das ganse muss auch noch wasserdicht werden....

von Christian J. (Gast)


Lesenswert?

Jan H. schrieb:
> Bei jeden
> boot sende ich bestimmte strings nach der neoM8n, sodas er nur die
> gewunschte telegrammen ausgibt. Auch die datarate (standard 1 Hz)

Inzwischen bin ich auch sowas wie Experte was die Dinger angeht. Die 
Beitian funktionieren genauso gut wie die ublox und verbrauchen sogar 
noch deutlich weniger Strom. ublox - 50-67ma, beitian 280 = 25-40 mA. 
Dass die ganz zufällig mit u-center eingestellt werden können dürfte 
wohl eher kein Zufall sein. Nur die Einschaltmeldung haben sie sicg 
geknffen, da auch noch ublox rein zu schreiben. Ansonsten eine 1:1 
Kopie, selbst UFG-CMD haben sie übernommen. Das U steht ja für Ublox.

Aber... die Bn-280N resetten sich ständig, wenn man unplausible Werte 
einstellt. zb ein Power Mode "Aggressive 1Hz" und eine Update Rate von 
5s. Das mögen sie nicht.

NMEA Parser.. naja, fix für RMC selbst geschrieben, man ersetze alle "," 
durch "0" und schon hat man eine Reihe Strings, die man mit strtok 
wandeln kann. Mehr als RMC braucht man eh nicht, da ist das A/V Flag das 
man auch noch einstellen kann wann es "ungültig" anzeigt. Ohne die sind 
diese "Punkte-Knubbel" aber unvermeidlich. Im Stand zicken die Koords 
gerne auch mal 20-25m rund um einen Punkt herum. 8h auf dem Parkplatz 
haben da einen echten Wust erzeugt, kreuz und quer ums Auto und die 
Geschwindigkeit wird teilsweise mit 800m/s ausgegeben, also heftig.

Bei Laufen im Schnee etc also unter 1m/s wird es aber kritisch, da liegt 
die Grenze wo der Position Hold Threshold noch wirksam ist.

Für Langzeit Logging ist ein Abschalten bei Stillstand unumgänglich und 
ein zusätzlicher Sensor (ADXL345) für Bewegung. Dann kriegt man das 
Ganze unter 2-3mA Ruhestrom.

von Wolfgang (Gast)


Lesenswert?

Christian J. schrieb:
> Gleiches Spiel bis das Protokoll geändert wurde, dann
> konnte ich es wegwerfen.

Welches Protokoll wurde geändert?
Das Problem tritt nicht zufällig seit dem 7. April 2019 auf?

von Christian J. (Gast)


Lesenswert?

Wolfgang schrieb:
> Welches Protokoll wurde geändert?
> Das Problem tritt nicht zufällig seit dem 7. April 2019 auf?

Doch... da warf ich mein schönes Tomtom One nach 10 Jahren weg, weil 
dessen Hardware nicht mehr mit dem neuen Format kompatibel war. Da lief 
wohl ein Zeit Zähler zurück auf 0 nach 20 Jahren. War ein tolles 
Teilchen. TomTom hat das auch bestätigt, dass es keinen Workaround gäbe 
bzw. sie keinen mehr erstellen werden, 2016 lief der Support bereits 
aus.

von Wolfgang (Gast)


Lesenswert?

Christian J. schrieb:
> Doch... da warf ich mein schönes Tomtom One nach 10 Jahren weg, weil
> dessen Hardware nicht mehr mit dem neuen Format kompatibel war.

An irgend einem Format hat sich überhaupt nichts geändert.
Da hatte TomTom schlicht und einfach ein schlampig programmiertes GPS 
Modul in seiner Kiste drin. Dass der Wochenzähler nur 10 Bit besitzt und 
deshalb von Zählerstand 1023 auf 0 springt und die Wochen wieder bei 0 
anfängt zu zählen, steht seit Anbeginn in der GPS-Spezifikation drin.
https://de.wikipedia.org/wiki/GPS-Woche

von Christian J. (Gast)


Lesenswert?

Ich habe einen kleinen Minilogger gebaut, der nur stur mitschreibt.

Darin werkelt jetzt ein Beitian BN-280 Modul. Nur meldet sich das Ding 
rotzfrech beim Einschalten mit

$GNTXT ... ublox-ag.com .....

usw.

Das Ding lässt sich auch komplett mit u-center einstellen.

Sind das illegale Klone? Funktionieren tun sie jedenfalls sehr gut, 
schlucken weniger Strom als die ubloxe...

von Bernd (Gast)


Lesenswert?

Christian J. schrieb:
> Funktionieren tun sie jedenfalls sehr gut,
> schlucken weniger Strom als die ubloxe
Außer einem Multimeter hast du doch gar kein Equipment um die Module zu 
charakterisieren.
Nur weil da kontinuierlich Datagramme rauskommen, heißt das noch lange 
nicht, das die Daten valide sind.

von Jan G. (Gast)


Lesenswert?

Christian J. schrieb:
> Sind das illegale Klone?

Den M8030 Chip kann man kaufen(wenn man genug bestell).

Ohne guten TCXO ist er aber wohl nicht so gut wie ein NEO M8N

von Christian J. (Gast)


Lesenswert?

Sehr interessant!

Beim Versuch die zurückgelegte Fahrstrecke meines Autos zu berechnen, 
ohne dabei irgendwelche Geo-Koordinaten zu verwenden bin ich auf die 
Idee gekommen, die GPS Geschwindigkeit, die in Knoten angegeben wird auf 
1s zu takten und daraus eine Integration / Summierung der Meter/1s zu 
machen.

Alternativ ginge das natürlich über eine genügend feine Rasterung des 
Lat/Long-Grids auf den kleinstmöglichen Abstand zweier Punkte nach 
Pythagroas.

Die GPS Geschwindigkeit wurde durch einen Blitzer mit Bussgeldbescheid 
überprüft, die ist auf den Kilometer genau! Geblitzt mit 56km/h, 3 
Abzug, also 59 und exakt 59 zeigte auch das Logfile für den Standort des 
Blitzers an. 15 Euro für die Stadtkasse :-)

Bei exakter Einstellung des Timers auf 1.0000s und Verwendung von double 
für die Geschwindigkeit, die ja durch 3600 geteilt werden muss ergibt 
sich auf 50 gefahrene Kilometer über Landstraße eine Abweichung von nur 
1.5km !!!

Ich bin absolut erstaunt, da mir natürlich keine Map zugrunde liegt 
anhand derer man das berechnen könnte, wie google maps und Navis es tun.

Sagenhaft was dieses kleine Maschinchen für 2,50 Euro leisten kann.

Bluepill rulez :-)

von Wolfgang (Gast)


Lesenswert?

Christian J. schrieb:
> Alternativ ginge das natürlich über eine genügend feine Rasterung des
> Lat/Long-Grids auf den kleinstmöglichen Abstand zweier Punkte nach
> Pythagroas.

Je kleiner der Abstand der Punkt ist, um so mehr wird die Änderung der 
Werte für Lat/Lon durch Messfehler (Rauschen) und Filteralgorithmen 
bestimmt. Ein gefundenes Korn beweist noch nicht, dass alles voller 
Futter liegt ;-)

von Christian J. (Gast)


Lesenswert?

Wolfgang schrieb:
> Ein gefundenes Korn beweist noch nicht, dass alles voller
> Futter liegt ;-)

Auf 220km heute
Tacho: 220,9
GPS: 219,5

Grumpf... das sind 1.1km. Werden wir noch ppm weise nachtrimmen müssen 
über die Tastrate der Timer. Werde erstmal 1/1000s dazu geben :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.