Home > Technologie > Reading RPM von Arduino-basierte IR-Tachometer mit MATLAB GUI

Reading RPM von Arduino-basierte IR-Tachometer mit MATLAB GUI

0
Advertisement

Reading RPM von Arduino-basierte IR-Tachometer mit MATLAB GUI

Hallo nochmal, ein paar Tage zurück posted ich eine instructable von Infrarot-Tachometer Arduino verwenden, dann erkannte ich, dass anstatt des RPM-Wert in der Arduino IDE seriellen Monitor zu lesen, die RPM in einem richtigen Rahmen präsentiert aussehen würde mehr hallo-Tech. Also habe ich versucht, ein kleines Programm mit MATLAB GUI zu machen.

Ich weiß, ich kann dieses Projekt mit meinem vorherigen instructable fusionieren, aber ich ziehe einen neuen zu machen, weil vielleicht einige Leute haben schon ihre Mess getan und die Daten an das serielle Senden und wollen nur, um zu sehen, wie man MATLAB abrufen und diesen Wert zeigen Gesendet. Natürlich, auf diese Weise kann ich mehr instructables auch :)

Daher gehe ich einfach direkt zum MATLAB-Teil, denn das ist die Hauptsache, die wir hier besprechen werden. Alles andere außerhalb Ihres Computers USB-Anschluss beziehen sich bitte auf meine vorherige instructable: http: //www.instructables.com/id/Infrared-Tachomete ...

Schritt 1: Erstellen Sie GUI-Layout in MATLAB

Reading RPM von Arduino-basierte IR-Tachometer mit MATLAB GUI

Öffnen Sie Ihre MATLAB, dann geben Sie einen Befehl ein: "guide"

Wenn alles in Ordnung ist, öffnet sich ein Fenster für die Gestaltung des Layouts. Wenn Sie dieses Fenster nicht erhalten können, überprüfen Sie bitte, ob Sie dieses Modul in Ihrer MATLAB-Installation haben oder nicht. Meine MATLAB-Version ist R2012b mit Standardeinstellungen und Paketen installiert.

Nehmen wir an, dass Sie nach der Eingabe von "guide" etwas Gutes bekommen. Platzieren Sie Fensterkomponenten wie folgt:

- 1 Toggle-Taste

- 2 Statische Texte

Ordnen Sie das Layout, wie im Bild gezeigt (eigentlich das Layout ist bis zu Ihnen, so lange, wie es ist einfach zu bedienen und zu lesen), ändern Sie den Text (alles, was Sie wollen) in jedem Objekt, indem Sie den "String" Wert in der Eigenschaft zu modifizieren Inspector (Objekt auswählen - Rechtsklick - Property Inspector oder Doppelklick)

Speichern Sie dann diese Datei.

Schritt 2: Schreiben Sie den Code

ARDUINO CODE

Der Code für Arduino ist im Grunde das gleiche wie finden Sie hier: http: //www.instructables.com/id/Infrared-Tachomete ... aber weil hier möchte ich nur den Drehzahlwert zu zeigen (nicht der RPS - Wert und alle die "rps" und "rpm" text) so bearbeitet ich einige Zeilen (jene, die Serial.print (haben), denn zuvor wurde das Programm entwickelt, um die Lesung auf Notizblock-Stil seriellen Monitor darzustellen, aber jetzt brauchen wir nur den Drehzahlwert zu Feed in die statische Text-String). OK, um es schnell und einfach Ich kopiere den Code hier, können Sie mit Ihrem Selbst für den Vergleich mit dem vorherigen Code zu überprüfen. Denken Sie daran, dass der Hauptzweck des Arduino-Code ist nur ein Wert serielle Kommunikation zu passieren, so ist dieses Programm nur als Beispiel, wenn Sie Ihr eigenes Programm, das den Wert eines Sensors druckt auf serielle lesen, dann ignorieren diese gehen voran Den MATLAB-Code.

  Int sensorvalue; <br> int state1 = HIGH;  Int state2;  Schwimmer RPS;  Schwimmerdrehzahl;  Long prevMillis = 0;  Langes Intervall = 100;  Lange aktuelle Zeit;  Long prevTime = 1;  Lange Dauer;  Int sensorthreshold = 30;  // dieser Wert gibt den Grenzwert zwischen Dunkel und Licht an, // es muss getestet werden, da er auf die // Distanz der LEDs geändert werden kann.  // Um ​​zu sehen, welche Zahl gut ist, überprüfen Sie den Sensorwert Variablenwert // wie im seriellen Monitor ausgedruckt </ p> <p> void setup () {Serial.begin (9600);  PinMode (13, AUSGANG);  // weisen Pin 13 als Indikator an, weil wir das IR-Licht nicht sehen können} void loop () {sensorvalue = analogRead (0);  // von Pin 0 lesen, wenn (Sensorwert <sensorthreshold) state1 = HIGH;  Sonst Zustand1 = LOW;  DigitalWrite (13, state1);  // da iR-Licht unsichtbar für uns ist, zeigt die LED auf Pin 13 // den Zustand der Schaltung an.  If (state2! = State1) {// zählt, wenn die Zustandsänderung, die von (dunkel zu hell) oder // von (hell nach dunkel), dass IR-Licht unsichtbar für uns ist.  If (state2> state1) {currentTime = micros ();  // Erhalte die arduino Zeit in Mikrosekunden diffTime = currentTime - prevTime;  // Berechnen der Zeitdifferenz von den letzten Sensoren Treffen rps = 1000000 / diffTime;  // berechnen, wieviel Umdrehung pro Sekunde - gut zu wissen rpm = 60000000 / diffTime;  // Berechnen, wieviel Umdrehungen pro Minute unsigned long currentMillis = millis ();  // print to serial in jedem Intervall - definiert an der Variablendeklaration if (currentMillis - prevMillis> interval) {// sehen, ob jetzt schon ein Intervall long prevMillis = currentMillis;  Serial.println (rpm);  // Diese Zeile wird aus dem Code in prev instructable bearbeitet prevTime = currentTime;  } State2 = state1;  } / * Nur zum Testen, um die Empfindlichkeitsschwelle (500) zu bestimmen;  Serial.println (Sensorwert);  Aufrechtzuerhalten.

MATLAB-CODE

Klicken Sie in Ihrem MATLAB GUI-Layout-Design-Fenster auf View - Editor (oder finden Sie in der Symbolleiste ein Bild von Papier und Bleistift ohne Hand). Ein Editor-Fenster wird mit einigen Codes geschrieben bereits zu öffnen, schrieb MATLAB sie für Sie kein Problem. Schreiben Sie nur die Callback-Funktion für die Toggle-Taste, der Rest des Codes bleibt unberührt. In meinem Fall nannte ich meine Umschaltknopf OnOffToggle, so dass die Funktion, unter denen ich den Code geschrieben ist Funktion OnOffToggle_Callback (hObject, Eventdata, Griffe).

Alle Daten, die über die serielle Schnittstelle gesendet werden, werden hier als Variable rpmdata abgerufen, so dass wir nur diese RPM-Daten auf den Bildschirm drucken wollen. Eine weitere Sache, überprüfen Sie, dass Sie Ihren arduino an den korrekten COM-Hafen anschließen, während Sie im Code schreiben. In diesem Code schrieb ich COM3, weil ich mein Arduino mit COM3 verbunden.

Dann speichern Sie Ihre m-Datei.

Unten ist der vollständige Code (nur die OnOffToggle_Callback-Funktion bearbeiten):

  Funktion varargout = gui (varargin)% GUI MATLAB-Code für gui.fig% GUI selbst erstellt eine neue GUI oder hebt das vorhandene% singleton * an.  %% H = GUI gibt das Handle an eine neue GUI oder das Handle an% das vorhandene Singleton zurück *.  %% GUI ( 'CALLBACK', hObject, eventData, handles, ...) ruft die lokale% -Funktion CALLBACK in GUI.M mit den angegebenen Eingabeargumenten auf.  %% GUI ( 'Eigenschaft', 'Wert', ...) erzeugt eine neue GUI oder erhöht das% vorhandene Singleton *.  Von links beginnend werden Eigenschaftswertpaare% auf die GUI angewendet, bevor gui_OpeningFcn aufgerufen wird.  Ein% nicht erkannter Eigenschaftsname oder ungültiger Wert macht die Eigenschaftsanwendung% stop.  Alle Eingaben werden über varargin an gui_OpeningFcn übergeben.  %% * Siehe GUI-Optionen im GUIDE-Menü Extras.  Wählen Sie "GUI erlaubt nur eine% Instanz zu laufen (Singleton)".  Siehe%% auch: GUIDE, guidata, GUIHANDLES% Bearbeiten, um den oben stehenden Text die Antwort zu ändern gui% Zuletzt geändert von GUIDE v2.5 14-Mar-2015 01.06.09 </ p> <p>% Begin Initialisierung zu helfen Code - NICHT EDITIEREN gui_Singleton = 1;  gui_State = struct ( 'gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @gui_OpeningFcn, ... 'gui_OutputFcn', @gui_OutputFcn, ... 'gui_LayoutFcn', []. .. 'gui_Callback', []);  Wenn nargin && ischar (varargin {1}) gui_State.gui_Callback = str2func (varargin {1});  End if nargout [varargout {1: nargout}] = gui_mainfcn (gui_State, varargin {:});  Sonst gui_mainfcn (gui_State, varargin {:});  End% Ende des Initialisierungscodes - NICHT BEARBEITEN% --- Wird ausgeführt, bevor gui sichtbar gemacht wird.  Function gui_OpeningFcn (hObject, eventdata, handles, varargin)% Diese Funktion hat keine Ausgabeargs, siehe OutputFcn.  % HObject-Handle zur Abbildung% eventdata reserved - in einer zukünftigen Version von MATLAB% definiert handles Struktur mit Handles und Benutzerdaten (siehe GUIDATA)% varargin Befehlszeilenargumente für gui (siehe VARARGIN)% Wählen Sie die Standard-Befehlszeilenausgabe für gui-Handles .output = hObject;  % Update aktualisiert die Struktur guidata (hObject, handles);  % UIWAIT macht gui auf Benutzerantwort warten (siehe UIRESUME)% uiwait (handles.figure1);  % --- Ausgänge von dieser Funktion werden an die Befehlszeile zurückgegeben.  Function varargout = gui_OutputFcn (hObject, eventdata, handles)% varargout Zellenfeld für die Rückgabe von Ausgabeargs (siehe VARARGOUT);  % HObject-Handle zur Abbildung% eventdata reserved - wird in einer zukünftigen Version von MATLAB definiert% Handles-Struktur mit Handles und Benutzerdaten (siehe GUIDATA)% Holen Sie die Standardbefehlszeilenausgabe von Handles-Struktur varargout {1} = handles.output;  Funktion currentEdit_Callback (hObject, eventdata, handles) function currentEdit_CreateFcn (hObject, eventdata, Handles)% Hinweis: Edit-Steuerelemente haben in der Regel einen weißen Hintergrund unter Windows.  % Siehe ISPC und COMPUTER.  If ispc && isequal (get (hObject, 'BackgroundColor'), get (0, 'defaultUicontrolBackgroundColor')) gesetzt (hObject, 'BackgroundColor', 'weiß');  End-Funktion OnOffToggle_Callback (hObject, eventdata, Handles) button_state = get (hObject, 'Wert');  Wenn button_state == get (hObject, 'Max') gesetzt (handles.OnOffToggle, 'String', 'Stop');  gezogen;  I = 2;  Während i> 1 rpmdata = seriell ( 'COM3', 'BaudRate', 9600);  % Diese Baudrate sollte die gleiche sein wie die im Arduino-Code fclose (instrfindall);  Fopen (rpmdata);  B = fscanf (rpmdata);  Set (handles.textCurrent, 'String', b);  gezogen;  Löschen (rpmdata) wenn get (hObject, 'Wert') == get (hObject, 'Min') break end end set (handles.OnOffToggle, 'String', 'Start');  gezogen;  Rpmdata = seriell ( 'COM3', 'BaudRate', 9600);  Fclose (rpmdata);  Ende

Schritt 3: Führen Sie den rpm-Reader aus

Reading RPM von Arduino-basierte IR-Tachometer mit MATLAB GUI

Sobald Sie mit Ihrem Code fertig sind, schließen Sie Ihre arduino, drehen Sie das Rad und führen Sie Ihr Programm (grüne Dreieck Play-Like-Taste auf Editor oder Layout-Editor-Fenster). Ein Fenster deines Programms kommt heraus (mein ist, wie im Bild gezeigt), klicken Sie die Umschalttaste an und Sie sehen die gegenwärtige Drehzahl Ihres Rades dort.

Sie können sehen, wie das Programm im Video funktioniert.

Hoffentlich findet jemand dieses nützliche ... Jedes mögliches Rückgespräch wird geschätzt :) Dank!

Related Reading