BraucheHilfe
09.06.2016, 12:50
Hallo zusammen,
ich bin neu auf dem Gebiet, was die Kommunikation zwischen Arduino und Matlab bzw. das Auslesen einer seriellen Schnittstelle angeht. Auch meine Programmierkenntnisse sind auf keinem hohen Stand. Deswegen hoffe ich, dass ihr mir weiter helfen könnt =)
Folgendes Problem. Ich messe mit dem Arduino Mega board die Spannung über einen Widerstand. In Reihe zu dem Widerstand befindet sich ein Plattenkondensator. Über die gemessene Spannung möchte ich dann den Strom und folglich die Ladung berchnen die auf den Plattenkondensator fließt.
Der Code auf dem Arduino:
const float sensorVoltage=A0;
void setup() {
Serial.begin(115200); // opens serial port, sets data rate to 9600 bps
}
void loop() {
float inputVoltage2=analogRead(sensorVoltage); // Spannungswert im bereich zw 0-1023
float voltage2=5*inputVoltage2/1024; // Skalierung auf 0-5V
Serial.println(voltage2);
}
Hier bekomme ich schon das erste Problem. Wenn ich in die Console schaue werden vor der ersten Zahl teilweise Leerzeichen gesendet? Wie kann ich das umgehen, weil ich ich denke das wird bei der Datenerfassung in Matlab Probleme verursachen? Mir ist klar, dass ich dabei sehr sehr viele Spannungswerte aufnehme.
Es schaut beispielweise so aus:
0.5
0.5
0.5
0.5
0.5
In Matlab möchte ich die verschiedenen Spannungswerte als Funktion plotten und dann darüber integrieren, sodass ich berechnen kann wie viel Strom auf die Platten geflossen ist. Dabei schreibe ich alle Messwerte die vom Arduino gesendet werden in einen array voltage[]. In xaxis[] steht dann die Anzahl an Messwerten, sodass ich mit plot(voltage,xaxis) meine Funktion bekomme.
Mein Matlab code:
close all;
clc;
delete(instrfind({'Port'},{'COM5'}));
serialport=serial('COM5');
serialport.BaudRate=115200; %abgleichen der BaudRate
warning('off','MATLAB:serial:fscanF:unsuccessfulRe ad');
fopen(serialport);
int x = 1000; %passe ich je nachdem wie ich es brauche an
int i = 1;
voltage=[]; %hier kann ich natürlich die Größe 'x' anpassen
xaxis=[]; %hier kann ich natürlich die Größe 'x' anpassen
while i<=x
voltage1(i)=fscanf(serialport,'%f');
xaxis(i)=i;
i=i+1;
end
Als Fehler kommt:
bei
voltage1(i)=fscanf(serialport,'%f');
Subscripted assignment dimension mismatch.
Wäre sehr nett, wenn ihr mir weiterhelfen könntet.
Viele Grüße!
ich bin neu auf dem Gebiet, was die Kommunikation zwischen Arduino und Matlab bzw. das Auslesen einer seriellen Schnittstelle angeht. Auch meine Programmierkenntnisse sind auf keinem hohen Stand. Deswegen hoffe ich, dass ihr mir weiter helfen könnt =)
Folgendes Problem. Ich messe mit dem Arduino Mega board die Spannung über einen Widerstand. In Reihe zu dem Widerstand befindet sich ein Plattenkondensator. Über die gemessene Spannung möchte ich dann den Strom und folglich die Ladung berchnen die auf den Plattenkondensator fließt.
Der Code auf dem Arduino:
const float sensorVoltage=A0;
void setup() {
Serial.begin(115200); // opens serial port, sets data rate to 9600 bps
}
void loop() {
float inputVoltage2=analogRead(sensorVoltage); // Spannungswert im bereich zw 0-1023
float voltage2=5*inputVoltage2/1024; // Skalierung auf 0-5V
Serial.println(voltage2);
}
Hier bekomme ich schon das erste Problem. Wenn ich in die Console schaue werden vor der ersten Zahl teilweise Leerzeichen gesendet? Wie kann ich das umgehen, weil ich ich denke das wird bei der Datenerfassung in Matlab Probleme verursachen? Mir ist klar, dass ich dabei sehr sehr viele Spannungswerte aufnehme.
Es schaut beispielweise so aus:
0.5
0.5
0.5
0.5
0.5
In Matlab möchte ich die verschiedenen Spannungswerte als Funktion plotten und dann darüber integrieren, sodass ich berechnen kann wie viel Strom auf die Platten geflossen ist. Dabei schreibe ich alle Messwerte die vom Arduino gesendet werden in einen array voltage[]. In xaxis[] steht dann die Anzahl an Messwerten, sodass ich mit plot(voltage,xaxis) meine Funktion bekomme.
Mein Matlab code:
close all;
clc;
delete(instrfind({'Port'},{'COM5'}));
serialport=serial('COM5');
serialport.BaudRate=115200; %abgleichen der BaudRate
warning('off','MATLAB:serial:fscanF:unsuccessfulRe ad');
fopen(serialport);
int x = 1000; %passe ich je nachdem wie ich es brauche an
int i = 1;
voltage=[]; %hier kann ich natürlich die Größe 'x' anpassen
xaxis=[]; %hier kann ich natürlich die Größe 'x' anpassen
while i<=x
voltage1(i)=fscanf(serialport,'%f');
xaxis(i)=i;
i=i+1;
end
Als Fehler kommt:
bei
voltage1(i)=fscanf(serialport,'%f');
Subscripted assignment dimension mismatch.
Wäre sehr nett, wenn ihr mir weiterhelfen könntet.
Viele Grüße!