Innehållsförteckning:

MATLAB -kontrollerad mikrokontroller (Arduino MKR1000): 4 steg
MATLAB -kontrollerad mikrokontroller (Arduino MKR1000): 4 steg

Video: MATLAB -kontrollerad mikrokontroller (Arduino MKR1000): 4 steg

Video: MATLAB -kontrollerad mikrokontroller (Arduino MKR1000): 4 steg
Video: CPE417 - MKR1000 Problem 4 2024, November
Anonim
MATLAB kontrollerad mikrokontroller (Arduino MKR1000)
MATLAB kontrollerad mikrokontroller (Arduino MKR1000)

Målet med vårt projekt var att använda MATLAB såväl som Arduino MKR1000 efter bästa förmåga. Vårt mål var att skapa ett manus som tillät vissa funktioner i arduino att utföra en viss utgång baserat på en specifik ingång. Vi använde många loopar och villkorliga uttalanden i MATLAB som gjorde detta möjligt. Vi använde också MATLAB -mobil genom att använda data som samlats in från en mobil enhets gyroskop för att förbättra projektet så mycket som möjligt.

Steg 1: Delar och material

Delar och material
Delar och material
Delar och material
Delar och material
Delar och material
Delar och material

MATLAB 2018a

-2018 -versionen av MATLAB är den mest föredragna versionen, mest för att den fungerar bäst med koden som ansluts till den mobila enheten. De flesta av våra koder kan dock tolkas av de flesta MATLAB -versioner.

Arduino MKR1000

-Detta är en specifik enhet som gör att vi kan koppla kretsar upp till både digitala och analoga portar. Det är viktigt att du också har en brödbräda att gå med på.

Tillbehör

-När vi använde MKR1000 behövde vi tillbehör för att utföra de nödvändiga funktionerna.

Detta inkluderar

  1. Servo
  2. Knapp (6)
  3. Utbytbart RBG LED -ljus
  4. Enkla trådar
  5. brödbräda
  6. mini strömbrytare
  7. temperatursensor
  8. 330 ohm motstånd
  9. 10K ohm motstånd
  10. USB-microUSB-sladd
  11. Bärbar/stationär dator
  12. Mobilenhet

Det bör också noteras att det finns många, många fler tillbehör som kan användas med MKR1000

Steg 2: MATLAB Arduino -supportpaket

För att kunna använda Arduino MKR1000 genom MATLAB korrekt måste du ladda ner MATLAB -supportpaketet för Arduino -hårdvara. Denna nedladdning ger dig tillgång till vissa funktioner och kommandon direkt till arduino -kortet.

Du kan ladda ner paketet på länken nedan

www.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware

Steg 3: Använda datasensorer förvärvade från mobilenhet

Använda datasensorer förvärvade från mobilenhet
Använda datasensorer förvärvade från mobilenhet

Med MATLAB Mobile -appen kan vi använda en mobil enhet för att strömma data med hjälp av dess gyroskop. För att förvärva data via MATLAB, hämtar vi data genom att hämta dem från orienteringsmatrisen från MATLAB mobile. Vi gör detta genom att skapa en variabel för varje kolumn i orienteringsmatrisen (Azimuth, Pitch och Roll) och indexera den konstanta strömmen av värden från den mobila enheten till datorn. Detta gör att vi kan skapa villkorliga uttalanden som kommer att förforma en utdata om MATLAB hämtar en specifik datainmatning från den mobila enheten. För att göra detta behöver du MATLAB -mobil på din mobila enhet och stödpaketet för mobila enheter för MATLAB på din dator.

Du kan ladda ner filen på länken nedan

www.mathworks.com/matlabcentral/fileexchange/51235-matlab-support-package-for-apple-ios-sensors

Steg 4: Koden och ledningsportarna

Koden börjar med ett startmeddelande som frågar om vi vill starta vår hemmasäkerhetsenhet. Om vi svarar ja och ger rätt lösenord hoppar manuset omedelbart in i en stundslinga. Därifrån börjar det samla in data från den mobila enheten. Det finns villkor som läser dessa data. Vi kan låsa upp och låsa systemet från vår mobila enhet, och koden vrider servon och blinkar LED -lampan beroende på den angivna data från den mobila enheten

startup = questdlg ('Vill du aktivera ecoTECH Smart Home Energy System?'); % Börjar aktiveringssekvensen för ecoTECHwaitfor (start); om start == "Ja" % Om "Ja" väljs startar en aktiveringssekvens och går in i stundslingan vid slutet power = "on"; m1 = msgbox ('Starta ecoTECH …'); paus (2); radera (m1); m1_wait = waitbar (0, "Vänta …"); steg = 25; för i = 1: steg paus (.1); väntelista (i/steg); % Uppdaterar väntelistens borttagning (m1_wait); PASSCODE = [0 0 0 0]; % Initierar lösenord ii = 0; % Initierar en variabel som används för att bryta ut slingor m2 = msgbox ('ecoTECH fullt fungerande!'); paus (2); radera (m2); elseif start == "Nej" || start == "Avbryt" % Om "Nej" eller "Avbryt" har valts så startar inte aktiveringssekvensen och går inte in medan loop -ström = "av"; m3 = msgbox ('Okej! Hejdå!'); paus (2); radera (m3); slutet

% ecoTECH in Action Section medan true while power == "on" % Mobile Key Section while true % Samlar in data om rullningsorienteringen för den mobila enheten KEY = m. Orientation (3); % Samlar in data om knapparna b2 = readDigitalPin (a, 'D2'); % Knapp 2 (röd) b3 = readDigitalPin (a, 'D3'); % Knapp 3 (vit) om KEY> = 35 % i grader m4 = msgbox ('Välkommen hem!'); writeDigitalPin (a, 'D8', 1); % Slår på grönt ljus paus (.5); writePosition (s, 1); % Vänder på servon för att låsa upp dörrpausen (2); writeDigitalPin (a, 'D8', 0); % Stänger av radering av grönt ljus (m4); elseif KEY <= -35 % in degrees m5 = msgbox ('Door Locked!'); writeDigitalPin (a, 'D7', 1); % Slår på rödljuspausen (.5); writePosition (s, 0); % Stänger servon för att låsa dörrpausen (2); writeDigitalPin (a, 'D7', 0); % Stänger av radering av rött ljus (m5); ii = 1; bryta % Avslutar medan slinga innehåller mobilnyckel om dörren är låst med den mobila enheten annars b2 == 0 && b3 == 0 % Avgår medan slingan innehåller mobilnyckeln för att ange lösenordsavsnittets slut

Efter detta kan den ange en annan medan loop. Detta medan loop styr utgångarna baserat på ingångarna från knapparna. Om den första medan slingan är försumbar, eller om en manuell låsning krävs, kommer den att ange en annan medan loop där ett specifikt lösenord behövs. Om lösenordet är felaktigt startar det om slingan

medan sant om ii == 1 % Avslutar medan slinga innehåller lösenord om dörren var upplåst med den mobila enhetens slut slut % Samlar in data om knapparna b5 = readDigitalPin (a, 'D5'); % Knapp 5 (blå) b1 = readDigitalPin (a, 'D1'); % Knapp 1 (svart) b4 = readDigitalPin (a, 'D4'); % Knapp 4 (vit) om b5 == 0 % Startar inmatning av avsnittskoden för b = 1: 5 m6 = msgbox ('Please Press And Hold A Button'); paus (2); radera (m6); % Samlar in data om knapparna b1 = readDigitalPin (a, 'D1'); % Knapp 1 (svart) b2 = readDigitalPin (a, 'D2'); % Knapp 2 (röd) b3 = readDigitalPin (a, 'D3'); % Knapp 3 (vit) b4 = readDigitalPin (a, 'D4'); % Knapp 4 (gul) b5 = readDigitalPin (a, 'D5'); % Knapp 5 (blå) % Ersätter värdena i den ursprungliga lösenordet ett i taget om b1 == 0 LÖSENKOD (0+b) = 1; elseif b2 == 0 PASSCODE (0+b) = 2; elseif b3 == 0 PASSCODE (0+b) = 3; elseif b4 == 0 PASSCODE (0+b) = 4; elseif b5 == 0 PASSCODE = sprintf ('%. 0f%.0f%.0f%.0f', PASSCODE (1), PASSCODE (2), PASSCODE (3), PASSCODE (4)); % Förvandlar sekvensen av knappar som trycks till siffror och konverterar den sedan till en strängänds slut m7 = msgbox ('Välkommen hem!'); writeDigitalPin (a, 'D8', 1); % Slår på grönt ljus paus (.5); writePosition (s, 1); % Vänder på servon för att låsa upp dörrpausen (5); writeDigitalPin (a, 'D8', 0); % Stänger av pausen för grönt ljus (.1); writeDigitalPin (a, 'D7', 1); % Slår på rödljuspausen (.5); writePosition (s, 0); % Vänder servon för att låsa dörrens paus (1); writeDigitalPin (a, 'D7', 0); % Stänger av radering av rött ljus (m7); ii = 1; break % Avslutar medan loop innehåller lösenord efter att ha angett rätt lösenord elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Tänder den röda lampan m8 = msgbox ('Felaktigt lösenord! Försök igen!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Stänger av det röda ljuset fortsätter % Gör att du kan ange ett lösenord på nytt annars if b1 == 0 && b4 == 0 % Avslutar medan loop innehåller lösenordssektion om du inte vill ange ett lösenord ii = 1; bryta slutet slut

Om det är korrekt kommer det omedelbart att gå in i en stundslinga som styr temperatursensorn. Om omkopplaren är på fortsätter slingan och plottar temperaturen mot tiden, så att en kan se trenden. Om knappen som är ansluten till temperaturgivaren trycks in kommer den också att skicka ett mejl med information om temperaturen i ditt "hem". Om omkopplaren stängs av, kommer den omedelbart att avsluta koden

t = 0; % Initial tid = 0 sekunder paus (5) % Ger tid för användaren att slå på temperaturomkopplaren SWITCH = readDigitalPin (a, 'D11'); % Samlar in data om omkopplaren i stift D11 medan SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Samlar in data om omkopplaren i stift D11 -spänning = readVoltage (a, 'A1'); % Avläser spänningen från temperaturgivaren temp_C = (spänning.*1000 - 500)./ 10; % Konverterar spänningen till temperatur i ° C temp_F = (9/5).*Temp_C + 32; % Konverterar från ° C till ° F tomt (t, temp_C, 'b.') Håll på titel ('Rumstemperatur'); xlabel ('Time in Seconds'); ylabel ('temperatur'); axel ([0, 180, 0, 100]); plot (t, temp_F, 'r.') legend ('Temperatur i ° C', 'Temperatur i ° F') paus (1); t = t + 1; % Tidsräknare i sekunder % E-postavsnitt b_temp = readDigitalPin (a, 'D0'); % Samlar in data för (blå) temperaturknappen i stift D0 om b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Avsändare setpref ('Internet', 'SMTP_Username', '[email protected]'); % Avsändarens användarnamn setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Avsändarens lösenord rekvisita = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('[email protected] ',' ecoTECH Rumstemperatur ', sprintf (' Den aktuella rumstemperaturen är %.1f ° C eller %.1f ° F. ', temp_C, temp_F)); % Skickar ett e-postmeddelande till mottagaren med uppgifter om den aktuella rumstemperaturen fprintf ('E-post skickades! / N') slutar om temp_F> = 75 % Om rumstemperaturen stiger till 75 ° F… temp_AC = 65; % Ändrar temperaturen på termostaten till 65 ° F annars om temp_F <= 65 % Om rumstemperaturen sjunker till 60 ° F… temp_AC = 80; % Ändrar temperaturen på termostaten till 80 ° F ändänd % Slut på "SWITCH == 0" medan slinga om ström == "off" || ii == 1 % Avslutar "power == on" medan loop -break -slutet slutar % End of "power == on" while loop if power == "off" || ii == 1 % Avslutar hela medan slingan bryts

Detta var bara en kort översikt över koden och dess funktion. Vi har bifogat hela koden som pdf om det behövs

Här är listan över vilken port varje enhet är ansluten till

1. RGB LED: Digitala stift (7, 8, 9)

2. Servo: Digital Pin 6

3. Knappar: Digitala pins (1, 2, 3, 4, 5)

4. Blå knapp för e -post: Digital Pin 0

5. Temperatursensor: Analog stift 1

6. Brytare: Digital stift 11

Rekommenderad: