Läst RPM från Arduino-baserad IR-varvräknare med MATLAB GUI (2 / 3 steg)

Steg 2: Skriva koden

ARDUINO KOD

Koden för arduino är i princip samma som du hittar här: men eftersom här jag bara vill visa rpm värde (rps värdet och all "rps" och "rpm" text) så jag redigerade några rader (de som har Serial.print(), eftersom tidigare programmet var utformat för att presentera behandlingen på notepad-stil seriell övervaka men nu behöver vi bara rpm värde för att mata till statisk textsträng). OK, för att göra det snabbt och enkelt jag kopiera koden kan här, du kontrollera av dig själv för jämförelse med tidigare kod. Kom ihåg att det huvudsakliga syftet med arduino koden är bara att skickar ett värde till seriell comm, så att detta program är bara som ett exempel, om du har ett eget program som skriver ut värdet på någon sensor läsa att seriell sedan ignorera detta gå vidare till MATLAB-kod.

int sensorvalue; < br > int state1 = hög;
int state2;
float rps;
float varvtal.
lång prevMillis = 0;
långa intervall = 100;
långa currentTime;
lång prevTime = 1;
lång diffTime;
int sensorthreshold = 30. Detta värde anger gräns mellan mörka och ljusa,
Det måste provas som kan komma att ändras enligt på den
avståndet lysdioderna placeras.
för att se vilket nummer är bra, kolla sensorvalue variabelvärdet
som skrivs ut i den seriella monitorn < /p >< p > void setup()
{
Serial.BEGIN(9600);
pinMode(13,OUTPUT); tilldela stift 13 ledde som indikator eftersom vi inte kan se IR-ljus
}

void loop()
{
sensorvalue = analogRead(0); läsa från stift 0
IF(sensorvalue < sensorthreshold)
state1 = hög;
annat
state1 = låg;
digitalWrite(13,state1); som iR är ljus osynligt för oss, det ledde på stiftet 13
Ange status för kretsen.

IF(state2!=state1) {//counts när staten ändrar, som är från (mörk till ljus) eller
från (ljus till mörk), kom ihåg att IR-ljus är osynligt för oss.
om (state2 > state1) {
currentTime = micros(); Får arduino tid i mikrosekunder
diffTime = currentTime - prevTime; beräkna skillnaden från den senaste sensorer möta upp
RPS = 1000000/diffTime; beräkna hur många rev per sekund - bra att veta
RPM = 60000000/diffTime; beräkna hur många rev per minut

osignerade långa currentMillis = millis();

skriva ut till serial varje intervall - definieras vid variabler deklaration
om (currentMillis - prevMillis > intervall) {/ / se om nu redan ett intervall lång
prevMillis = currentMillis;
Serial.println(rpm); denna linje är redigerad från koden i föregående instructable
}

prevTime = currentTime;
}
state2 = state1;
}
/ * bara för test för att bestämma sensorthreshold
Delay(500);
Serial.println(sensorvalue);
*/

}

MATLAB-KOD

I din MATLAB GUI fönstret layout design, klicka på Visa - Editor (eller hitta en bild på papper och penna utan hand i verktygsfältet). En redaktör fönster öppnas med några kodifierar skriftligt redan, skrev MATLAB dem för dig utan problem. Bara skriva callback-funktionen för knappen, resten av koden kan lämnas orörd. I mitt fall döpte jag min växlingsknapp OnOffToggle, så den funktionen som jag skrev koden är funktionen OnOffToggle_Callback (hObject, eventdata, handtag).

Alla data som skickas via seriella hämtas här som en variabel rpmdata, så vi vill bara skriva ut det rpm data på skärmen, det är det. En sak till, kontrollera att du ansluter din arduino till rätt COM-port som du skriver i koden. I den här koden skrev jag COM3 eftersom jag anslutit min arduino till COM3.

Spara sedan din m-fil.

Nedan följer den fullständiga koden (Redigera bara funktionen OnOffToggle_Callback):

fungera varargout = gui(varargin)
% GUI MATLAB-kod för gui.fig
% GUI, av sig själv, skapar en ny GUI eller höjer de befintliga
% singleton *.
%
% H = GUI Returnerar referensen till en ny GUI eller handtaget för att
% den befintliga singleton *.
%
% GUI('CALLBACK',hObject,eventData,handles,...) kallar lokalen
% funktion som heter MOTRINGNING i GUI. M med viss indataargumenten.
%
% GUI('Property','Value',...) skapar en ny GUI eller höjer den
% befintliga singleton *. Start från vänster, är egenskapen värdepar
% tillämpas på GUI innan gui_OpeningFcn anropas. En
% okänd egenskapsnamn eller ogiltigt värde gör property ansökan
% stop. Alla ingångar överförs till gui_OpeningFcn via varargin.
%
% * Se GUI alternativ på GUIDENS Verktyg-menyn. Välj "GUI kan endast en
%-instansen ska köras (singleton) ".
%
% Se även: GUIDE, GUIDATA, GUIHANDLES
% Redigera texten ovan att ändra svaret för att hjälpa gui
% Senast ändrad av GUIDE v2.5 14-Mar-2015 01:06:09 < /p >< p > % börja initieringskod - redigera inte
gui_Singleton = 1;
gui_State = struct ('gui_Name', mfilename,...
'gui_Singleton', gui_Singleton...
'gui_OpeningFcn'...
'gui_OutputFcn'...
"gui_LayoutFcn", []...
"gui_Callback", []);
om nargin & & ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
slutet

om nargout
[varargout {1:nargout}] = gui_mainfcn (gui_State, varargin {:});
annat
gui_mainfcn (gui_State, varargin {:});
slutet
% Slutet initieringskod - inte redigera
%---Kör precis innan gui görs synliga.
funktion gui_OpeningFcn (hObject, eventdata, handtag, varargin)
% Denna funktion har ingen utgång args, se OutputFcn.
% hObject handtag till figur
% eventdata reserverade - definieras i en framtida version av MATLAB
% hanterar struktur med handtag och användardata (se GUIDATA)
% varargin befalla lina argumentera till gui (se VARARGIN)
% Väljer standard kommandoraden utdata för gui
handles.output = hObject;
% Uppdateringen hanterar struktur
guidata (hObject, handtag);
% UIWAIT gör gui vänta på användarsvar (se UIRESUME)
% uiwait(handles.figure1);
%---Utgångar från denna funktion returneras till kommandoraden.
fungera varargout = gui_OutputFcn (hObject, eventdata, handtag)
% varargout cell array för att returnera utdataargument (se VARARGOUT);
% hObject handtag till figur
% eventdata reserverade - definieras i en framtida version av MATLAB
% hanterar struktur med handtag och användardata (se GUIDATA)
% Få standard kommandoraden utdata från handtag struktur
varargout {1} = handles.output;
funktion currentEdit_Callback (hObject, eventdata, handtag)
funktion currentEdit_CreateFcn (hObject, eventdata, handtag)
% Ledtråd: redigeringskontroller har oftast en vit bakgrund på Windows.
% Se ISPC och dator.
om ispc & & isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
slutet

funktion OnOffToggle_Callback (hObject, eventdata, handtag)
button_state = get(hObject,'Value');
om button_state == get(hObject,'Max')
uppsättning (handtag. OnOffToggle, 'Sträng', 'Sluta');
drawnow;
Jag = 2;
medan jag > 1
rpmdata = serial('COM3','BaudRate',9600); % denna baudhastighet bör vara samma som det i Arduino kodifierar
fclose(instrfindall);
fopen(rpmdata);
b = fscanf(rpmdata);
set(handles.textCurrent,'String',b);
drawnow;
Delete(rpmdata)
om get(hObject,'Value') == get(hObject,'Min')
Break
slutet
slutet
uppsättning (handtag. OnOffToggle, 'Sträng', 'Start');
drawnow;
rpmdata = serial('COM3','BaudRate',9600);
fclose(rpmdata);
slutet

Se Steg
Relaterade Ämnen

Arduino-baserad optiska varvräknare

över tio år sedan, jag har lagt upp en webbsida med detaljerade instruktioner om att bygga en enkel elmotor baserat på en från den Beakman världen TV-show. Jag kallade det "Beakmans elmotor" sidan och under åren har det haft hundratusentals, om...

Infraröd varvräknare med Arduino

Hej, är detta bara ännu en varvräknare som du kan också hitta många tutorials ute. Det finns olika synsätt på att mäta rpm, vad jag använder här är baserad på analogRead metod som skrivet i arduino playground lärande sida (http://playground.arduino.c...

Kontrollera din arduino från din PC med Qt Gui

för min första instructable jag kommer att visa dig hur du använder Qt för att göra grafiska gränssnitt för din arduino (eller någon rs232 enhet)Så om du vill skapa din egen grafisk gränssnitt du vill kontrollera saker bara genom att klicka på knappa...

Åtgärd RPM - optisk varvräknare

Detta Instructable visar dig hur man gör en Bärbar Digital optisk varvräknare med hjälp av en Arduino Uno.I stället för en slitsad sensor har den en reflektion baserad sensor. Så:1. du behöver inte oroa dig för tjockleken på rotorn2. antal blad komme...

Arduino baserade Robotic Car(wireless controls+Autonomous)

Detta instructable handlar om en Arduino baserad robot bil som använder Arduino, Arduino programmeringsspråk, motor driver, en LCD-skärm visar aktuell status för bilen och även en Bluetooth-modul för trådlös kommunikation från en smartphone eller en...

Arduino-baserad byta spänningsregulatorer

DC till DC omvandlare används effektivt konvertera DC-spänningar. De har en verkningsgrad på upp till 95% vilket gör dem användbara för LED strips, CYKELLYSEN, batteriladdare och solar powered enheter. En spänningsomvandlare kräver en PWM källa som e...

Spåra din bil med en Arduino-baserad Lojack

Bilstölder är en verklig dra! Öka dina chanser att få tillbaka din bil genom att installera denna enkla Arduino-baserad tracker i bilen.Detta projekt är ganska enkel, och skulle vara ett bra projekt för nya Arduino programmerare letar efter något lit...

Att införa Climaduino - Arduino-baserad termostaten du styr från din telefon!

Uppdatering:Det finns en ny version av Climaduino och Climaduino Controller med några mycket väsentliga ändringar.Stöder flera zonerAnvänder Arduino YúnFungerar med Central luftkonditioneringKommunicerar med MQTT protokoll (kan integrera med andra sy...

Arduino-baserad Bi-color LED Matrix Flappy fågeln spel

Vi har byggt en hel del projekt med Bi-färg (rött och grönt) LED Matrix drivrutinsmodulen Kit från jolliFactory och har publicerat dem som instructables här. Var och en av dessa moduler använder två MAX7219 Display Driver ICs för att driva en Bi-colo...

Arduino-baserad skugga larm

Shadow larm används vanligen för skydd mot stöld. En skugga larm är en enhet som avger ett larm när en skugga faller på den. Beskrivs här är en enkel krets larm arduino baserade skugga. Denna kompakta skugga larm enhet kan avkänning en rörlig skugga...

Låg höjd miljöövervakning med en Arduino baserade väder Instrument och Aeropod Remote Sensing plattform

ProjektöversiktStudenter på New Lothrop High School i Michigan har arbetat tillsammans för att bygga en plattform för remote sensing låg höjd som kallas en "Aeropod" och rummen har det med ett "Arduino" baserade väder instrument att sa...

Montering en Arduino baserade rök / värme larm

Som ni kan se från denna bloggpost jag utvecklat grunderna för det här projektet för två år sedan som ett larm / avstängning switch för RepRap 3D skrivare kit som jag bara hade samlat ihop... och som hade rökt!Första projektetSedan dess har jag haft...

Mobile Robotics med repa: bygga en Arduino-baserad insekt-liknande Walker och programmera den med Scratch

Låt oss springa runt? Detta är en Arduino-baserad, lätt att bygga version av insekt-liknande walker med klädhängare tråd och ursprungligen skapades av Jerome Demers (se också detta instructable) och Gareth Branwyn. Det finns i två versioner:en fristå...

DIY Digital RPM varvräknare | RPM Counter med Arduino

Hej gott folk, jag skriver denna artikel för att dela mitt senaste projekt DIY RPM varvräknare eller du kan säga RPM counter. När du skapar ett projekt många gånger vi måste kontrollera varvtal och vi behöver RPM varvräknare som kan räkna runt Per mi...

Daves dans i en en Arduino baserade Motion känsliga ljus kostym

En Arduino baserad motion känsliga ljus kostymDet kan också Visa mönster och sådant även om det bara rörelse sensing i vid. Det använder en ADXL335 accelerometer känna bärare rörelse. Min vän Dave vänligt uttryckte det är dock steg med hans nya dans...

Sondering och fräsning ett kretskort med en Arduino-baserad CNC

Fram till nyligen PCB sondering genom att använda en Arduino var baserad CNC-maskin en ren dröm. Tack till folket på Chilipeppr.com vi har nu baserad ett webbaserat verktyg bänk för alla våra Arduino CNC produkter. Den bästa delen; Det är gratis och...

Arduino-baserad robot med IR radar

robot prototypen i detta Instructable är min andra Arduino-baserad "slumbot" som är en autonom robot. Den är kopplad med husgeråd och skrotar. Roboten ser"" med en IR-scanning sensor roteras ett servo. Det ser vänster, framåt, och rätt...

DIY Arduino baserad MIDI fot Controller

Jag har velat prova en gitarr looper ett tag, men jag gillar inte idén att använda pengar på en looper specifika pedal när jag kan använda en dator för det och eftersom jag har fått lära arduino för kul var mycket meningsfullt att göra en en arduino...

Arduino baserade Encrypter

vi alla vill göra detta cool Arduino projekt, som inte egentligen om flyttalsrenderingsmål, utan mer om programvaran. Väl är här en - Arduino baserad kryptering över Serial Monitor. Det var verkligen roligt att utforma. Det kan finnas otaliga tillämp...