Hallo ! Auf einigen Seite habe ich gesehen, dass es möglich ist die Eingangssignales des Arduinos direkt als Kurve in Matlab ausgeben zu können. Leider finde ich nirgends ein lauffähiges Beispiel. Hat Jemand einen Code (Für den Arduino und für Matlab), mit dem ich das ganze realisieren kann? Schön wäre es natürlich auch wenn ich alles direkt in eine *.cvs Datei speichern könnte, damit ich diese mit Latex auslesen und mir damit direkt fertige Diagramme in einer großen PDF erstellen lassen kann :)
Hallo Toricellie, also ein Beispiel für "direkt als Kurve ausgeben" habe ich jetzt nicht für dich. Hast du schon versucht die Daten via seriellen Port an den PC zu schicken und diese Daten mit Matlab auszulesen, speichern und als Plot darzustellen. Um welche Daten handelt es sich? Wie groß, wie schnell, ...? Un das Speichern in eine Datei deiner Wahl sollte auch möglich sein, obwohl ich eher den Weg gehen würde eine Grafik mit Matlab erstellen und diese dann als EPS oder JPG in dein Latex-File einzubinden. Wenn du die Grafiken mit tikz erstellst, kannst du einfach x- und y-Werte in eine .txt oder .dat speichern.
Ja, es gibt eine Funktion um den seriellen Port auszulesen. Ich weiß jetzt nicht genau wie schnell der Port Messwerte übermitteln kann. Jedenfalls muss ich das ganze nicht nur auslesen, sondern auch direkt darstellen können. Ich weiß das es geht, da ich ein paar YouTube Videos gesehen habe, doch meist ohne Code. In einem Video wurde die Kurve nach links hin immer kleiner skaliert, so das auch bei kontinuierlichen Messerwerten immer die gesamte Skala im blick hat. Die Grafik exportieren ginge auch, aber zum einen mag ich nur Vektorgrafiken und zum anderen erspart es sehr viel Arbeit. Wenn ich 100 Messreihen aufnehme und nach einem gewissen Schema als Datei abspeicher, kann ich mit Latex das Verzeichnis nach Dateinamen und Endungen durchsuchen, die Messwerte einlesen lassen und alle inkl. Achsenbeschriftung, Skalierung etc. in eine ganz große PDF schreiben lassen und das nur mit einem Klick.
Es gibt sogenannte support packs, u.a. auch für Arduino, siehe http://de.mathworks.com/hardware-support/arduino-matlab.html Hab' ich aber noch nicht benutzt. Ansonsten Serielle Schnittstelle, aber vorsicht, dank Java Unterbau ist die recht lahm, besser blockweise verarbeiten.
Wenn du wirklich nur ein Script zum Lesen brauchst reicht:
1 | s = serial('COM1','BaudRate',4800); |
2 | fopen(s); |
Und dann via fread (http://de.mathworks.com/help/matlab/ref/serial.fread.html?searchHighlight=fread) das gewünschte Format einlesen, etwa in einer Schleife die die "BytesAvailable" Property des Serial Port Objects prüft. Oder etwas ausgefuchster in einer sogenannten Serial Callback Funktion. Erfahrungsgemäß geht das ganze unter Win7 so bis etwa ~0,5MBaud, je nach verbauter Hardware. Unter Unix wars bei mir wesentlich langsamer, da ging nichtmal 100kBaud vernünftig.
Danke schon mal für die Antworten. Es hat alles soweit geklappt und ich konnte alles umsetzen. Jetzt möchte ich aber noch einen Schritt weiter gehen. Ich zwei Analoge Inputs als zwei Unterschiedliche Kurven ausgeben lassen. Mit
1 | s = serial('COM1','BaudRate',4800); |
2 | fopen(s); |
3 | |
4 | |
5 | while(x<1000) |
6 | x=x+1; |
7 | y1(x)=fscanf(s, '%d'); |
8 | end |
Kann ich jetzt beispielsweise den Wert eines Sensors grafisch darstellen. Da mir der Serielle Port immer weiter Daten übermittelt, die ich einfach nur plotte. Nur was ist, wenn ich jetzt über den Analogen Pin 1 und 2 jeweils unterschiedliche Werte bekomme und an die serielle Schnittstelle schicke? Wie kann ich unterscheiden von welchem Sensor der aktuelle Wert ist, der übermittelt wurde? Und wenn, wie kann ich jeden Wert separat als Kurve darstellen? Theoretisch sinkt doch dann meine Genauigkeit um die Hälfte, da ich mir die Übertragungsrate jetzt mit zwei Sensoren teile oder?
Toricellie schrieb: > Theoretisch sinkt doch dann meine Genauigkeit um die Hälfte Naja, die Genauigkeit bleibt gleich, du bekommst aber nur weniger Messwerte, d.h. der zeitliche Abstand zwischen den Messwerten wird größer werden. Du kannst dir ja ein einfachen Protokoll überlegen. Z.B.
1 | sende 'a' |
2 | Daten Pin1 |
3 | sende 'b' |
4 | Daten Pin2 |
5 | ...
|
In Matlab kannst du das empfangene Zeichen überprüfen und die Daten dem richtigen Vektor zuordnen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.