INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Komplexe Datenerfassung
05.03.2014, 21:32 (Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2014 21:36 von maximi1111.)
Beitrag #1
Komplexe Datenerfassung
Erst einmal Hallo an alle,

leider bin ich auf dem Arduino-Gebiet ein kompletter Neuling und ein paar Sachen sind mir noch unklar. Daher hoffe ich, bei euch ein wenig Hilfe zu finden.

Jetzt aber erst einmal zu meinem Projekt. Für die Uni plane ich gerade ein mobiles Datenerfassungsgerät. Klingt eigentlich ganz einfach und ist es bestimmt auch. Das Problem ist, dass ich ungefähr 15 Sensoren abgreifen will und die Daten auf einer SD-Karte speichern möchte und gleichzeitig drahtlos an einen Rechner übertragen möchte.

Als Hardware hätte ich mir jetzt vorgestellt, dass ich das "Arduino Mega2560 Rev3" und das "Arduino WiFI Shield" verwenden könnte. Dazu natürlich noch die Sensoren, die alle ein analoges Signal liefern.

Und jetzt zu meinen Fragen.

1. Wenn ich es richtig vertanden habe, dürfen die Sensoren nur Messspannungen zwischen 0V und 5V liefern, oder? Das sollte eigentlich aber auch das geringste Problem sein.

2. Wenn ich das "Arduino WiFI Shield" einbaue, habe ich dann noch immer alle 16 analogen Eingänge zu Verfügung. Auf den Bildern, die ich so gefunden habe, sicht es aus, als würden die Eingänge A0 bis A7 belegt werden. Allerdings verstehe ich alle Anleitungen so, dass diese eigentlich nicht gebraucht werden. Bleiben mir also trotz Wifi alle 16 analogen Eingänge "erhalten"?

3. Zum Speichern der Messwerte habe ich mir vorgestellt, dass ich alle Eingänge nacheinander abgreife und die Daten in einem String speichere. Den Code dazu habe ich gefunden und der dürfte dann in etwa so aussehen:

void loop()
{
// make a string for assembling the data to log:
String dataString = "";

// read 16 sensors and append to the string:
for (int analogPin = 0; analogPin < 16; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 2) {
dataString += ",";
}
}

Allerdings bin ich mir gerade nicht so sicher, wie groß die Zeitdifferenz zwischen dem ersten und dem letzten Messsignal wird. Immerhin erfolgt zwischen jedem Schreibvorgang ja eine if-Überprüfung der Schreibvorgang fürs Komma und der Schreibvorgang für das Messsignal. Hat jemand von euch eine Ahnung, wie groß das Delay ungefähr wird?

4. Und zu guter Letzt: Das Schreiben auf der SD-Karte und die Übertragung per Wifi können nicht zeitgleich erfolgen, wenn ich es richtig vertanden habe. Hat jemand von Euch Erfahrung damit, wie lange ungefähr die Datenübertragung dauert?

Vielen Dank für Eure Hilfe.
Einen schönen Abend noch.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2014, 20:01
Beitrag #2
RE: Komplexe Datenerfassung
Hallo maximi1111,
Zitat:Klingt eigentlich ganz einfach und ist es bestimmt auch
Naja, eher nicht Smile
Alles wichtige zm Wifi-Shield findest du hier: http://arduino.cc/de/Main/ArduinoWiFiShi...xjErc40_eA ua. auch die Portbelegeung/-nutzung auf dem Shield.
Zitat:Allerdings bin ich mir gerade nicht so sicher, wie groß die Zeitdifferenz zwischen dem ersten und dem letzten Messsignal wird.
Dabei dürfte der Code eher die geringste Rolle spielen, irgendwas im Microsekunden - Bereich. Viel wichtiger wird die Geschwindigkeit sein, mit der die Sensoren die Daten liefern. Meist haben die Sensoren auch so eine Art "Vorbereitungszeit" bis sie Daten liefern. Welche Sensoren möchtest du denn einsetzen?
Zitat: Hat jemand von Euch Erfahrung damit, wie lange ungefähr die Datenübertragung dauert?
Wohin auf die SD - Karte oder übers Wifi auf nen Server? Hängt natürlich auch von der realen Länge des zu übertragenden Strings ab.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2014, 20:59 (Dieser Beitrag wurde zuletzt bearbeitet: 06.03.2014 20:59 von maximi1111.)
Beitrag #3
RE: Komplexe Datenerfassung
Hi,

erst einmal Danke für deine Hilfe.
Momentan wollte ich eigentlich nur analoge Sensoren verwenden, da diese halt ein konstrantes Signal liefern und somit die Reaktionsgeschwindigkeit der Sensoren wegfällt.
Auf dieser Seite (http://arduino.cc/de/Reference/AnalogRead) habe ich gefunden, dass der Befehl AnalogRead 100 Mikrosekunden braucht. Das dürfte auf jeden Fall kurz genug sein. Allerdings kommt ja noch das Speichern des Wertes in einem String dazu. Für das Speichern finde ich leider keine genaue Zeitangabe, allerdings sollte das doch ungefähr im gleichen Bereich liegen, oder?

Über die drahtlose Übertragung habe ich mir bisher noch nicht allzu viele Gedanken gebacht, werde aber wahrscheinlich eher das XBee Pro verwenden, da es die höhere Reicheite hat (Die ich auch benötigen werde).

Die Datenübertragung bezieht sich primär auf das Beschreiben einer SD Karte.
Bisher habe ich mir das folgendermaßen vorgestellt:
Es sollen nacheinander alle Sensoren abgefragt werden, die Werte sollen dann solange in verschiedenen Strings gespeichert werden, bis alle Werte ausgelesen sind und dann sollen sie auf der SD Karte gespeichert werden.
Zur Länge des Strings: Auslesen wollte ich die Werte als int. Daher können sie ja maximal einen Wert von 1024 haben. Sprich max. 4 Zeichen für jeden Sensor und 14 Trennzeichen. Sollten dann also 74 Zeichen pro Messreihe sein.

Würde es hier eventuell Sinn machen, so lange die Messwerte zwischenzuspeichern, bis der interne Speicher voll ist und erst dann die Daten auf die SD Karte zu schreiben?

Gruß Max
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2014, 21:15
Beitrag #4
RE: Komplexe Datenerfassung
Hallo maximi1111,

Zitat:Allerdings kommt ja noch das Speichern des Wertes in einem String dazu.
Da hast du recht. Die Umwandlung von int in String ist wesentlich aufwändiger als das Abfragen der Pins. Von daher empfehle ich hier unbedingt die "Low-Level"-Funktionen von C zu benutzen und nicht zB. die String-Klasse des Arduino-Sprachschatzes. Diese Klasse ist zwar sehr universell und mächtig, daher intern aber auch recht komplex. Du solltest hier mal in Richtung itoa()-Funktion gucken.
Zitat:Es sollen nacheinander alle Sensoren abgefragt werden
Beim Uno gibt es die Möglichkeit Ports sozusagen in einem Rutsch abzufragen. Google mal nach "Arduino Port Register" vllt. findest du auch passendes zum Mega.
Zitat:Würde es hier eventuell Sinn machen, so lange die Messwerte zwischenzuspeichern, bis der interne Speicher voll ist
Das impliziert immer auch, dass du prüfen musst ob der Speicher voll ist oder eben das Datenvolumen eine max. Größe erreicht hat. Das ist aber auch wieder Code der abgearbeitet werden muss.

Bei deinem Projekt sind ja zwei Fragen interessant:
- In welchen Intervallen möchtest du messen?
- Wie weit dürfen 1. Wert und letzter Wert einer Messreihe zeitlich auseinander liegen?
Und ganz nebenbei nochmal: Welche Sensoren mölchtest du einsetzen?

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2014, 23:53 (Dieser Beitrag wurde zuletzt bearbeitet: 06.03.2014 23:55 von maximi1111.)
Beitrag #5
RE: Komplexe Datenerfassung
Hi,

gut, dann hole ich mal ein wenig weiter aus. In dem Projekt geht es um folgendes. An meiner Uni haben ein paar Studenten einen kleinen Rennwagen gebaut. Für ein optimales Training unseres Fahrers und die Abstimmung unseres Fahrwerks wollen wir ein paar Messwerte erfassen.

Folgende Werte sollen erfasst werden:
4 x Raddrehzahl
4 x Federwege
3 x Beschleunigung (3 Achsen)
1 x Lenkeinschlag
1 x Winkelmessung fürs Gaspedal
1 x Winkelmessung fürs Bremspedal

Welche Sensoren genau dafür verwendet werden sollen, steht noch nicht fest. Drundsätzlich würde ich halt analoge Sensoren bevorzugen, da diese halt schneller & leichter angesprochen werden können.

Die Messungen können auch mal insgesamt 15 Minuten dauern und die einzelnen Messreihen sollten natürlich möglichst schnell aufeinander folgen. Auch sollten die Messungen der einzelnen Sensoren möglichst schnell aufeinanderfolgen. Ein gleichzeitiges Abrufen der Pins wäre natürlich eine feine Sache dafür.
Deinen Tipp mit den Port Registern habe ich mir mal angeschaut und stoße dann relativ schnell auf Sachen wie "Arduino Port Manipulation". Das kann wohl zum Auslesen der Ports verwendet werden, allerdings bin ich mir nicht so ganz sicher, ob das auch mit analogen Signalen klappt. Alles was ich gefunden habe bezog sich darauf, dass die analogen Inputs auch als digitale Pins verwendet werden sollen.

Das Überprüfen ob der Speicher voll ist hätte ich mir gespart. Da ich ja weiß, dass jeder String 74 Zeichen enthält, müsste jeder String doch auch 74 Byte groß sein. Über die Größe des internen Speichers hätte ich nun grob berechnet, wieviele Strings zwischengespeichert werden können und hätte immer diese feste Anzahl verwendet.

Gruß Max
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.03.2014, 10:19
Beitrag #6
RE: Komplexe Datenerfassung
(06.03.2014 23:53)maximi1111 schrieb:  Deinen Tipp mit den Port Registern habe ich mir mal angeschaut und stoße dann relativ schnell auf Sachen wie "Arduino Port Manipulation". Das kann wohl zum Auslesen der Ports verwendet werden, allerdings bin ich mir nicht so ganz sicher, ob das auch mit analogen Signalen klappt. Alles was ich gefunden habe bezog sich darauf, dass die analogen Inputs auch als digitale Pins verwendet werden sollen.

Bei diesem Thema kenn ich mich zwar auch nicht so gut aus, aber ich würde vorschlagen, dass du zuerst in der Schleife alle Werte in einem Array zwischenspeicherst, weil das vermutlich schneller geht als die Konvertierung in einen String. Damit liegen die Werte näher beieinander.
Zusätzlich würde ich immer die aktuelle Zeit an der ersten Stelle deines Strings mit abspeichern. Das hilft später sicherlich dabei, die Zwischenzeiten vom Speichern zu interpolieren etc.
Die Zeit kannst du mit der Funktion millis() abfragen.

Alternativ ist auch noch eine Überlegung, dass du die Daten in einem Binärformat abspeicherst. Damit solltest du im besten Fall nur ca. 40% der Daten speichern müssen (5 Byte zu 2 Byte pro Zahl und Komma) und bist damit mehr als doppelt so schnell und die String-Konvertierung fällt zusätzlich weg.
Ein Desktop-Programm, was dieses Binärformat wieder in dein gewünschtes Format bringt, dauert 5 Minuten.

Abgesehen davon, glaube ich, dass du dir um die Auslesegeschwindigkeit keine allzugroßen Sorgen machen solltest. 14 Sensoren auszulesen würden ja ca. 1,4 ms dauern. Wenn du das mal gegen die Trägheit deiner mechanischen Komponenten stellst, ist das meiner Meinung nach vernachlässigbar.

Gruß, Alex
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.03.2014, 11:19
Beitrag #7
RE: Komplexe Datenerfassung
Moin,

zu Winkelmessungen fallen mir spontan Drehencoder ein.
Beschleunigungssensoren gibts auch ne Menge. Der BMA180 benutzt I2C. Damit braucht man nur 2 Adern, egal wieviele Sensoren dran hängen.
Drehzahlen könnte man mit Lichtschranken messen.
Wenn man das auf nen Mega macht, könnte man die Sache (zumindest teilweise) an Hardware-Interrupts koppeln. der Mega hat 6 davon.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste