WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Drucksensor kontinuierlich auslesen und plotten

 

pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 14.01.2012, 17:10     Titel: Drucksensor kontinuierlich auslesen und plotten
  Antworten mit Zitat      
Liebe Leute,

mittels eines Arduino betreibe ich einen Drucksensor, (http://s7.directupload.net/file/d/2769/lyj8ucln_jpg.htm) dessen Spannung ich gern kontinuierlich auslesen und plotten möchte. Bisher sieht mein Code so aus, dass ich einfach eine Schleife durchlaufe und eine Pause eingebaut habe, aber das ist mir eben zu statisch und eben noch nicht das, was ich gern möchte:

Code:

clc
delete(instrfind({'Port'},{'COM4'}))
a = arduino('COM4');

av  = zeros(1,100);
i = zeros(1,100);

for n =1:length(av)
    i(n) = n;
    % Wert auslesen  
    av(n)=a.analogRead(0);
    % Wert in Spannung konvertieren
    av(n) = 5 * av(n) /1024;
    pause(0.1)
    plot(i, av, 'b.')
end

% close session
delete(a)
 


Wie bekomme ich es jetzt hin, dass ich eine Zeitachse mit exakten Zeitschritten habe, entlang derer ich mein Drucksignal erfassen kann und das Ganze so lange, bis ich das figure schließe.

Für jeden Ratschlag bin ich dankbar.

Beste Grüße

pfeili
Private Nachricht senden Benutzer-Profile anzeigen


pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 14.01.2012, 18:04     Titel:
  Antworten mit Zitat      
Ich habe es jetzt über eine Timer-function gemacht, hoffe aber, dass ihr mir noch Tipps zum Verbessern geben könnt. So sieht das bisher aus:

Code:

function T = timer_arduino_sensor(hObject, eventdata, handles)

% Timer vorbereiten
T = timer(...
    'Name'          , 'Timer1',...
    'Tag'           , 'Arduino',...
    'Period'       ,  0.1,...
    'ExecutionMode',  'fixedDelay',...
    'TimerFcn'     ,  {@function_arduino_sensor},...
    'StartFcn'     ,  {@function_arduino_sensor},...
    'StopFcn'      ,  {@function_arduino_sensor});

% Timer starten
start(T)
 


...und so die Timer-function:

Code:

function function_arduino_sensor(T, event)

persistent a av Zeit

switch (event.Type)
   
    case 'StartFcn'
        delete(instrfind({'Port'},{'COM4'}))
        clc
        a = arduino('COM4');    
        av = zeros(1,1000);
        Zeit = zeros(1,1000);
        figure(1)
    case 'TimerFcn'

        n = T.TasksExecuted;    
        av(n)= a.analogRead(0);
        av(n) = 5 * av(n) /1024;
        Zeit(n) = n * T.Period;
        plot(Zeit, av, 'b.')
        grid
        axis([0 100 0.5 4.5])
        xlabel('Zeit in s')
        ylabel('Spannung in V')
     
      if n == 1000
          stop(T)
      end
           
    case 'StopFcn'
       
        close 1
        % close session
        delete(a)

end
 


Für weitere Anregungen, Hinweise und Kritiken bin ich stets dankbar.

Beste Grüße

pfeili

Zuletzt bearbeitet von pfeili am 14.01.2012, 18:09, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 15.01.2012, 11:23     Titel:
  Antworten mit Zitat      
Liebe Leute,

da ich in diesem Beispiel die Periode von 1 s auf 0.1 s heruntergesetzt habe, stimmt natürlich die ausgegebene Zeitachse im Plot nicht mehr. Sicher gibt es da noch einen anderen Weg selbige zu generieren. Auch das Vorgeben meines willkürlich gewählten Abbruchkriteriums von n=1000 möchte ich so nicht habe. Der Plot soll einfach immer weiter laufen, bis ich ihn selbst beende.

Ein zweites Problem ist jetzt noch, dass ich beim weiteren Verkürzen der Timer-Periode auf 0.01 s kein figure mehr sehen kann. Es erscheint erst nach Durchlaufen der Messaufgaben. Kann ich das ändern?

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.01.2012, 12:06     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
stimmt natürlich die ausgegebene Zeitachse im Plot nicht mehr. Sicher gibt es da noch einen anderen Weg selbige zu generieren.


z.B. skalieren. Ich weiß aber nicht, welche Zeitachse du hast und welche du haben willst; insofern schwierig.

Zitat:
Der Plot soll einfach immer weiter laufen, bis ich ihn selbst beende.

Und wie willst du ihn beenden?

Zitat:
Kann ich das ändern?

Vermutlich mit DRAWNOW.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 15.01.2012, 18:17     Titel:
  Antworten mit Zitat      
Hallo Harald,

1. ich hätte gern eine Zeitachse auf Sekundenbasis. Bisher hatte ich es einfach so gemacht, dass meine TimerPeriod 1s gedauert hat und ich habe die Zeitachse so erstellt, dass ich die Durchlaufzahl mit dieser Periode multipliziert habe, um die entsprechende Sekunde zu meinen. Das ist aber sicher noch nicht die Art, wie man das machen könnte.

2. z.b. durch schließen des figures oder durch drücken von "esc" oder... eigentlich egal. das programm soll nur verstehen, dass schluss ist.

3. dazu muss ich mich mal belesen.

beste grüße und danke erstmal.

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.01.2012, 19:39     Titel:
  Antworten mit Zitat      
Hallo,

1. Erscheint mir durchaus sinnvoll.

2. Wenn der Timer beim Schließen der Figure beendet werden soll, kannst du das in die CloseRequestFcn stecken. Wenn auf Tastendruck reagiert werden soll, in die KeyPressFcn.

3. Da gibts nicht viel zu belesen. DRAWNOW an die Stelle, an der die Grafik aktualisiert werden soll.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 18.07.2012, 11:04     Titel:
  Antworten mit Zitat      
Hallo Leute,

ich habe da nochmal eine prinzipielle Frage. Bisher rechne ich die beim analogen Eingang des Arduinos (10bit) ankommenden Integers folgendermaßen in eine Spannung um:

Code:

% Wert in Spannung konvertieren
av(n) = 5 * av(n) /1024;
 


Der Sensor hat einen Messbereich bis 500 Pa und einen Signalausgang von 0.5 V bis 4.5 V. Nun ist meine Frage: sind die 5 V in meiner Formel dann überhaupt korrekt angesetzt? Eigentlich kann er die 1024 Bereiche doch nur auf 4 V aufteilen, also das delta_U.

Ich würde mich sehr über eure Hilfe freuen. Vielen Dank.

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.07.2012, 12:46     Titel:
  Antworten mit Zitat      
Hallo,

ich fände das naheliegender:

Code:
av = 0.5 + 4 * av / 1023

Das würde bedeuten, dass Zahlen von 0 bis 1023 gleichmäßig ("linear") auf den Bereich [0.5, 4.5] abgebildet werden. Ob das für deinen Sensor auch tatsächlich sinnvoll ist, kann ich natürlich nicht beurteilen.

Grüße,
Harald

P.S.: Ich habs mal angedeutet... man kann das vielleicht vektorisieren?
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 21.07.2012, 07:32     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Antwort. Ja, so ist es erst sinnvoll.

Danke nochmals und viele Grüße

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.