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
DatenPin1
3
sende'b'
4
DatenPin2
5
...
In Matlab kannst du das empfangene Zeichen überprüfen und die Daten dem
richtigen Vektor zuordnen.
Eine eigene Frage?
Dieser Thread ist über 10 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.