Beschleunigungszeiten mit Arduino

Guten Abend liebe Community,

da ich hier schon seit Längerem einen MEGA 2560 rumliegen habe, habe ich überlegt etwas zu bauen. Ich möchte ein Gerät bauen mit dem man die Beschleunigungszeiten und die g-Werte eins Autos messen kann. Dazu will ich diesen GPS-Sensor kaufen

http://www.adafruit.com/products/746

und diesen Beschleunigungssensor

http://www.google.de/imgres?imgurl=http://www.ozhobbies.eu/images/PDR_0191ozh.jpg&imgrefurl=http://www.ozhobbies.eu/arduino/arduino-beschleunigungssensor-shield/&h=300&w=464&sz=78&tbnid=JZhgG3tR-cnGGM:&tbnh=90&tbnw=139&zoom=1&usg=__iGDjQXlBkSlpIsUuESP6VjSDp1Q%3D&docid=4txdwFvujexoHM&sa=X&ei=lPr3UvWPM4WetAaPu4CADQ&sqi=2&ved=0CEMQ9QEwAQ&dur=4290

Als Userinterface würde ein kleines Display und ein paar Taster dienen.

Nun zu meiner Frage. Hat der MEGA2560 genug Rechenleistung um laufend die Geschwindigkeit aus den GPS-Daten zu berechnen, die Beschleunigswerte auszurechnen, Daten an das Display zu senden und die Taster zu überwachen.

Genauigkeit ist mir schon wichtig. Es sollte ein 10Hz GPS-Sensor sein, wobei ich aber gelesen habe dass man nicht die vollen 10Hz nutzen kann, weil die TX Datenübertragung nicht schnell genug ist. Beschleunigszeiten möchte ich mindestens auf eine Nachkommastelle genau messen.

Schön wäre, wenn man zusätzlich die Daten auf eine SD-Karte speichern, passende Adapter gibt es ja ;) So, ich hoffe ich habe bis jetzt nichts vergessen.

Edit: an Programmierkenntnissen sollte es nicht scheitern, habe eine Ausbildung zum Informatiker und studiere zur Zeit angewandte Informatik. Hab allerdings noch nicht viel mit µ-Controllern gemacht.

Mit freundlichen Grüßen

Das Modul sendet anscheinend nur mit 9600 Baud. Das sind etwa 1ms pro Zeichen.

Wenn du nur einen bestimmten Wert ausgeben willst und nicht alles, sollte das eigentlich gehen. Die Beschränkung scheint die Ausgabe zu sein. Nicht das Auslesen an sich.

P.S.: Das Modul hat eingebauten Flash Speicher:

The other cool feature of the new MTK3339-based module (which we have tested with great success) is the built in datalogging ability. Since there is a microcontroller inside the module, with some empty FLASH memory, the newest firmware now allows sending commands to do internal logging to that FLASH. The only thing is that you do need to have a microcontroller send the "Start Logging" command. [...] The time, date, longitude, latitude, and height is logged every 15 seconds and only when there is a fix. The internal FLASH can store about 16 hours of data, it will automatically append data so you don't have to worry about accidentally losing data if power is lost. It is not possible to change what is logged and how often, as its hardcoded into the module but we found that this arrangement covers many of the most common GPS datalogging requirements

Wobei 15 Sekunden zu wenig für dich sein werden, da du ja nicht nur die Position willst. Dann musst du es doch per Hand machen.

Hallo,

wofür brauchst Du die GPS Daten?

Eine Alleskönner ohne GPS wäre das Teil hier: oder andere 10-DOF Sensormodule

http://www.exp-tech.de/Sensoren/Beschleunigung/AltIMU-10-Gyro-Beschleunigungssensor-Kompass-Altimeter-L3GD20-LSM303DLHC-LPS331AP.html

Edit: die GPS Daten hängen eh immer etwas hinterher zur Positionermittlung. Vielleicht kannste ja die Geschwindigkeitsdaten und/oder zurückgelegten Weg vom Onboard-Diagnosestecker entlocken was jedes Auto hat. Die Standardfunktionen sind genormt.

Jop, ich möchte das alles per Hand ausrechnen, mir geht es dabei hauptsächlich um den Lerneffekt, bin Student und habe jetzt Ferien :)

@Doc_Arduino: sehe ich richtig, dass du die Beschleunigungszeit, bzw. die aktuelle Geschwindigkeit aus den g-Sensor Daten berechnen möchtest (Integration)? Ich denke es wird recht ungenau. Beispielsweise wenn man einen Offset bei der Geschwindigkeit hat, sprich wenn ich das Gerät während der Fahrt einschalten würde. Außerdem sind die Beschleunigungswerte ja auch nicht unendlich genau :)

Daten aus dem ODB-System auszulesen wäre an dieser Stelle bestimmt die bessere Möglichkeit, aber ich möchte zusätzlich aus diesem Projekt etwas über GPS Berechnung lernen.

Edit: ich habe mich von diesem Gerät inspirieren lassen: http://www.leitspeed.de/driftbox/driftbox/driftbox.php

Hallo,

ne, ich dachte es wäre genauer die Beschleunigszeit und Geschwindigkeit aus den OBD Daten auszulesen. Die Geschwindigkeit bekommste direkt zum auslesen. Die Beschleunigung kannste berechnen aus den OBD Daten.

Meine Frage wäre nur. Wozu braucht man GPS Daten wenn es um Beschleunigung geht? Das verstehe ich nicht. Eine Positionsermittlung mittels GPS hängt immer etwas den aktuellen Zustand/Position hinterher wenn man sich bewegt. Ein Beschleunigungssensor liefert Dir sofortige IST Werte.

Ich möchte einfach ein wenig mit den GPS Daten arbeiten. Über die Vektorrechnung die Position und Geschwindigkeit berechnen. Das ganze aber eben nicht nur auf Papier sondern auch als Code implementieren.
Frage mich aber, ob die Berechnungen auf den µ-controller nicht zu lange dauern werden.

Wegen der GPS-Verzögerung: deshalb will ich einen 10Hz Sensor nehmen, meistens werden ja nur 1Hz Sensoren verwendet.

Aber wie gesagt, ich stimme dir schon zu, dass es praktischer wäre, die ODB-Daten zu verwenden, aber vllt möchte ich das Teil dann auf einem Fahrrad nutzen :smiley:

Für die reine g-Kraft Anzeige will ich aber natürlich einen echten g-Sensor verwenden

Andy__: Ich möchte einfach ein wenig mit den GPS Daten arbeiten. Über die Vektorrechnung die Position und Geschwindigkeit berechnen.

Berechnungen auf dem Arduino können - je nachdem wie Du rechnest - ungenauer werden als auf einem PC, da die Arduino-Software nur mit "einfach" genauen Gleitkommazahlen rechnet. Bei typischen Anwendungen spielt das zwar keine große Rolle, aber wenn Du den Abstand zwischen zwei nahe beieinander liegenden geographischen Positionen mit Hilfe von trigonometrischen Funktionen bei über 6000 Kilometer Erdradius am Ende auf den Zentimeter genau heraus bekommen möchtest, bekommst Du unter Umständen Probleme.

Die Deklaration von "double" statt "float" hilft dabei nicht weiter, denn auf der AVR-Plattform gilt, dass "double" auch nur "float" Variablen mit anderem Namen, aber nicht mit anderer Genauigkeit sind.

Die Geschwindigkeit brauchst Du übrigens nicht zu berechnen, das macht ein GPS-Modul schon selbst. Du brauchst also die Geschwindigkeit nur aus den gelieferten Daten auslesen.

Allenfalls, wenn Du die Beschleunigung aus den GPS-Daten haben wolltest, müßtest Du Dir diese aus der Änderung der Geschwindigkeit selbst ausrechnen.

Das mit den Gleitkommazahlen bzw. allgemein mit der Größe der Datentypen ist bei kleinen Rechnern so. Aber ich denke es sollte reichen. Sonst muss ich mir meinen eigenen Zahlentyp basteln :D Auf einen Zentimeter genau wäre natürlich ein Traum, aber ich glaube eine so hohe Genauigkeit geben die Positionsdaten und Uhrzeit der Satelliten nicht her. Brauche ich eigentlich auch nicht. Wenns auf ein paar Meter genau ist, passts :)

Noch zu Beschleunigung. Ich brauche zwei Arten von Beschleunigungen: 1. möchte ich die benötigte Zeit um zB. 0-100 zu beschleunigen messen, dazu will ich aus der Geschwindigkeit des GPS-Sensors die Rechnung aufstellen.

  1. möchte ich die aktuellen g-Kräfte anzeigen lassen, um zum Beispiel die Fliehkraft in einer Kurve "messen" zu können. dafür soll ein g-Sensor dienen.

Danke für den Hinweis, dass man die Geschwindigkeit aus dem GPS-Sensor direkt auslesen kann, weißt du, ob man auch die eigene Position auslesen kann? Also ich meine, ob man die Position erst aus den Vektoren berechnen muss oder einfach ablesen kann. Funktionieren diese Sachen bei allen Sensoren? Zu dem im 1.Post genannten GPS-Sensor finde ich nicht allzu viele Daten. Hab aber die Beispielprogramme noch nicht angescheut.. Wenn es sich um einen 10Hz Sensor handelt, kann ich dann zehn mal pro Sekunde die Geschwindigkeit auslesen und bekomme stets aktuelle Daten?

Entschuldigung für die vielen Fragen :/ möchte nur nicht später doch einen anderen Sensor kaufen müssen :)

Andy__: Danke für den Hinweis, dass man die Geschwindigkeit aus dem GPS-Sensor direkt auslesen kann, weißt du, ob man auch die eigene Position auslesen kann? Also ich meine, ob man die Position erst aus den Vektoren berechnen muss oder einfach ablesen kann.

Jeder GPS-Empfänger kann mindestens die GPRMC-Datensätze anzeigen. RMC steht für "recommended minimum sentence C", also "empfohlener Minimumdatensatz".

Dazu gehören - Uhrzeit (mindestens auf die Sekunde genau) - Status des GPS-Fixings (Aktiv oder ungültig) - Breitengrad - Längengrad - Geschwindigkeit - "wahre" Bewegungsrichtung in Grad - Geschwindigkeit in Knoten - Datum - magnetische Missweisung

Die Position selbst ist also immer problemlos auslesbar.

Nur "Änderungen der Position", also Entfernungen, mußt Du Dir selbst ausrechnen. Und dazu bietet Dir selbst der Minimum-Datensatz zwei verschiedene Möglichkeiten an.

Angenommen, Du hast zwei Minimum-Datensätze mit einem Zeitabstand von einer Sekunde.

Dann kannst Du den Abstand der beiden Positionen entweder ermitteln über: - Abstand auf dem Erd-Ellipsoid zwischen Längengrad-1/Breitengrad-1 und Längengrad-2/Breitengrad-2 oder - Geschwindigkeit und Richtungswinkel

Andy__: Wenn es sich um einen 10Hz Sensor handelt, kann ich dann zehn mal pro Sekunde die Geschwindigkeit auslesen und bekomme stets aktuelle Daten?

Ja. Ich selbst habe noch nie einen 10Hz-Sensor gehabt, aber soweit mir bekannt ist, werden allerdings auch die schnellen GPS-Sensoren mit einer eher langsamen Grundkonfiguration ausgeliefert, z.B. Datenrate 1 Hz und 9600 Baud. Die Daten werden dann regelmäßig im Sekundentakt geliefert. Und wenn Du eine schnellere GPS-Datenrate und/oder schnellere Baudrate haben möchtest, dann mußt Du das GPS-Modul mit Steuerbefehlen umkonfigurieren. Dazu hat ein GPS-Modul nicht nur einen Sendepin TX, über den GPS-Positionsdaten ausgegeben werden, sondern auch einen Empfangspin RX, über den das Modul Steuerbefehle entgegennehmen kann. Welche Steuerbefehle ein bestimmtes Modul versteht, steht im Datenblatt des Herstellers.

Du kannst übrigens nicht nur GPS-Datenrate und Baudrate an den Modulen programmieren, sondern ganz viele weitere Parameter. Z.B. welche NMEA-Datensätze regelmäßig "von alleine" ausgegeben werden sollen, ob Datensätze "auf Anforderung" ausgegeben werden sollen und vieles andere mehr. Es gibt Steuerbefehle, die nur so lange wirken, bis das GPS-Modul das nächste mal startet, und es gibt Steuerbefehle, die das GPS-Modul dauerhaft umkonfigurieren, so dass es nach einem Neustart eine gegenüber der Default-Konfiguration geänderte Konfiguration aufweist. Manche Hersteller bieten für Ihre Module auch einen firmeneigenen "Binärmodus" an statt des standardmäßigen NMEA-Modus, bei dem ASCII-Klartext übertragen wird.

Angaben zu bestimmten GPS-Modulen findest Du immer im Datenblatt des Herstellers.

Wow, größten Dank für deine sehr ausführliche Antwort. Scheinst dich mit GPS wirklich gut auszukennen :)

Ich habe zuerst angenommen, dass ich von dem GPS-Sensor nur die Positionen einzelner Satelliten (x, y, z) und den Zeitstempel bekomme. Daraus wollte ich dann vektoriell meine Position(x, y, z) ausrechnen. Habe mit dem Algorithmus schon angefangen und bin irgendwo in einer quadratischen(!) Gauss-Rechnung stehengeblieben :/ Sehr viel Zeit verschwendet :(. Aber naja, dafür Matrizen- und Vektorrechnung aufgefrischt xD

Nur sicherheitshalber: Ist es mit dem MEGA2560 möglich, gleichzeitig mit dem GPS-Sensor über TX- und RX-Leitungen, mit dem g-Sensor über die SDA- und SCL-Leitungen und zusätzlich mit einem Display zu kommunizieren?

Andy__: Wow, größten Dank für deine sehr ausführliche Antwort. Scheinst dich mit GPS wirklich gut auszukennen :)

Für den Hausgebrauch reicht es. ;)

Andy__: Ich habe zuerst angenommen, dass ich von dem GPS-Sensor nur die Positionen einzelner Satelliten (x, y, z) und den Zeitstempel bekomme. Daraus wollte ich dann vektoriell meine Position(x, y, z) ausrechnen.

Nein, diese Berechnungen macht der GPS-Chipsatz auf dem GPS-Modul.

Du bekommst im allgemeinen "NMEA-Daten" vom GPS-Modul, das ist ein Format aus ASCII-Klartextzeilen. Datensatzerklärungen von dem, was Du aus dem Modul heraus bekommst, zum Beispiel hier: http://www.kowoma.de/gps/zusatzerklaerungen/NMEA.htm

Andy__: Nur sicherheitshalber: Ist es mit dem MEGA2560 möglich, gleichzeitig mit dem GPS-Sensor über TX- und RX-Leitungen, mit dem g-Sensor über die SDA- und SCL-Leitungen und zusätzlich mit einem Display zu kommunizieren?

Kein Problem. Das könnte sogar der UNO problemlos.

Was aber der Vorteil des MEGA beim Entwickeln hochperformanter GPS-Anwendungen ist: Der MEGA hat mehrere serielle Schnittstellen. D.h. beim MEGA kannst Du das GPS-Modul an "Serial1" hängen und die Daten vom GPS-Modul an Serial1 empfangen UND Du kannst gleichzeitig über "Serial" Debug-Daten an den Seriellen Monitor auf dem PC ausgeben. D.h. mit dem MEGA kannst Du gleichzeitig auf einer seriellen Schnittstelle mit dem Entwickler-PC kommunizieren und auf der anderen seriellen Schnittstelle vom GPS-Modul Daten empfangen.

Serial-Debugmeldungen an den seriellen Monitor zu senden ist bei Arduino ja so ziemlich die einzige Debug-Möglichkeit, denn weil das Zielsystem nicht das System ist, auf dem das Programm entwickelt wird, stehen Dir die auf hochentwickelten PC-Compilern verfügbaren Debug-Möglichkeiten wie Breakpoints, Watch-Ausdrücke und ähnliches ja nicht zur Verfügung.

jurs: Serial-Debugmeldungen an den seriellen Monitor zu senden ist bei Arduino ja so ziemlich die einzige Debug-Möglichkeit, denn weil das Zielsystem nicht das System ist, auf dem das Programm entwickelt wird, stehen Dir die auf hochentwickelten PC-Compilern verfügbaren Debug-Möglichkeiten wie Breakpoints, Watch-Ausdrücke und ähnliches ja nicht zur Verfügung.

Für VisualMicro gibt es einen Debugger, der alle normalen Features unterstützt: http://www.visualmicro.com/post/2012/05/05/Debug-Arduino-Overview.aspx

Kostet aber Geld

Das hört sich super an, gut dass ich mich damals für den MEGA entschieden haben :) Die Möglichkeit, debuggen zu können ist toll, war mir beim Kauf des Controllers nicht bewusst.

Der Controller war eigentlich für ein anderes Projekt gedacht. Ich wollte einen Quadrocopter bauen, samt der PWM-Steuerung der Motoren, bis ich dann erfahren habe, dass für solche dinge 3-Phasen-Motoren verwendet werden. Das hat dann den Geld- und Zeitraum gesprengt :(, vielleicht werde ich es irgendwann später noch einmal angehen.

Da aber diesmal alles zu klappen scheint und bezahlbar ist, werde ich die Sensoren und das Display bestellen. Bei Neuigkeiten oder auch Fragen werde ich hier natürlich berichten :)