Innholdsfortegnelse:

MATLAB kontrollert mikrokontroller (Arduino MKR1000): 4 trinn
MATLAB kontrollert mikrokontroller (Arduino MKR1000): 4 trinn

Video: MATLAB kontrollert mikrokontroller (Arduino MKR1000): 4 trinn

Video: MATLAB kontrollert mikrokontroller (Arduino MKR1000): 4 trinn
Video: Arduino Interface With MATLAB | Dept of ECE, AITS, Hyderabad | Pantech eLearning 2024, November
Anonim
MATLAB kontrollert mikrokontroller (Arduino MKR1000)
MATLAB kontrollert mikrokontroller (Arduino MKR1000)

Målet med prosjektet vårt var å utnytte MATLAB så vel som Arduino MKR1000 etter beste evne. Målet vårt var å lage et skript som tillot visse funksjoner i arduinoen å utføre en bestemt utgang basert på en bestemt inngang. Vi brukte mange sløyfer og betingede utsagn i MATLAB som gjorde dette mulig. Vi brukte også MATLAB mobil ved å bruke data hentet fra en mobilenhets gyroskop for å forbedre prosjektet så mye som mulig.

Trinn 1: Deler og materialer

Deler og materialer
Deler og materialer
Deler og materialer
Deler og materialer
Deler og materialer
Deler og materialer

MATLAB 2018a

-2018 -versjonen av MATLAB er den mest foretrukne versjonen, hovedsakelig fordi den fungerer best med koden som kobles til mobilenheten. Imidlertid kan det meste av koden vår tolkes av de fleste MATLAB -versjoner.

Arduino MKR1000

-Dette er en spesifikk enhet som lar oss koble kretser til både digitale og analoge porter. Det er viktig at du også har et brødbrett som du kan følge med på.

Tilbehør

-Når vi brukte MKR1000, trengte vi tilbehør for å utføre de nødvendige funksjonene.

Dette inkluderer

  1. Servo
  2. Knapp (6)
  3. Utskiftbart RBG LED -lys
  4. Enkle ledninger
  5. brødbrett (er)
  6. mini strømbryter
  7. temperatur sensor
  8. 330 ohm motstand
  9. 10K ohm motstand
  10. USB-microUSB-ledning
  11. Bærbar/stasjonær
  12. Mobil enhet

Det skal også bemerkes at det er mange, mange flere tilbehør som kan brukes med MKR1000

Trinn 2: MATLAB Arduino Support Package

For å kunne bruke Arduino MKR1000 gjennom MATLAB riktig, må du laste ned MATLAB Support Package for Arduino Hardware. Denne nedlastingen gir deg tilgang til visse funksjoner og kommandoer direkte til arduino -kortet.

Du kan laste ned pakken på lenken nedenfor

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

Trinn 3: Bruke datasensorer hentet fra mobilenhet

Bruke datasensorer hentet fra mobilenhet
Bruke datasensorer hentet fra mobilenhet

Med MATLAB Mobile -appen kan vi bruke en mobilenhet til å streame data ved hjelp av gyroskopet. For å skaffe dataene gjennom MATLAB, får vi dataene ved å hente dem fra orienteringsmatrisen fra MATLAB mobile. Vi gjør dette ved å opprette en variabel for hver kolonne i orienteringsmatrisen (Azimuth, Pitch og Roll), og indeksere den konstante strømmen av verdier fra mobilenheten til datamaskinen. Dette lar oss lage betingede utsagn som vil forhåndsforme en utgang hvis MATLAB henter en bestemt datainngang fra mobilenheten. For å gjøre dette trenger du MATLAB -mobil på mobilenheten din, og støttepakken for mobile enheter for MATLAB på datamaskinen din.

Du kan laste ned filen på lenken nedenfor

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

Trinn 4: Koden og ledningsportene

Koden begynner med en oppstartsmelding som spør om vi ønsker å starte hjemmesikkerhetsenheten. Hvis vi svarer ja, og gir riktig passord, hopper skriptet umiddelbart inn i en stund -sløyfe. Derfra begynner det å samle inn data fra den mobile enheten. Det er betingelser som leser disse dataene. Vi kan låse opp og låse systemet fra mobilenheten vår, og koden vil snu servoen og blinke LED -lampen avhengig av de oppgitte dataene fra den mobile enheten

oppstart = questdlg ('Vil du aktivere ecoTECH Smart Home Energy System?'); % Starter aktiveringssekvensen til ecoTECHwaitfor (oppstart); hvis oppstart == "Ja" % Hvis "Ja" er valgt starter en aktiveringssekvens og går inn i mens -sløyfen på slutten power = "on"; m1 = msgbox ('Start opp ecoTECH …'); pause (2); slett (m1); m1_wait = ventelinje (0, "Vennligst vent …"); trinn = 25; for i = 1: trinn pause (.1); ventelinje (i/trinn); % Oppdaterer sletting av ventelinjen (m1_wait); PASSKODE = [0 0 0 0]; % Initialiserer passord ii = 0; % Initialiserer en variabel som brukes til å bryte ut av løkker m2 = msgbox ('ecoTECH fullt operativt!'); pause (2); slett (m2); elseif oppstart == "Nei" || oppstart == "Avbryt" % Hvis "Nei" eller "Avbryt" er valgt, starter ikke aktiveringssekvensen og angir ikke mens sløyfen er strøm = "av"; m3 = msgbox ('Ok! Farvel!'); pause (2); slett (m3); slutt

% ecoTECH in Action Section while true while power == "on" % Mobile Key Section while true % Samler inn data om roll -orienteringen til den mobile enheten KEY = m. Orientation (3); % Samler inn data om knappene b2 = readDigitalPin (a, 'D2'); % Knapp 2 (rød) b3 = readDigitalPin (a, 'D3'); % Knapp 3 (hvit) hvis KEY> = 35 % i grader m4 = msgbox ('Welcome Home!'); writeDigitalPin (a, 'D8', 1); % Slår på grønt lyspause (.5); writePosition (s, 1); % Snu servoen for å låse opp dørpausen (2); writeDigitalPin (a, 'D8', 0); % Slår av det grønne lyset slette (m4); elseif KEY <= -35 % in degrees m5 = msgbox ('Door Locked!'); writeDigitalPin (a, 'D7', 1); % Slår på rødt lyspause (.5); writePosition (s, 0); % Slår servoen for å låse dørpausen (2); writeDigitalPin (a, 'D7', 0); % Slår av slettet rødt lys (m5); ii = 1; break % Avsluttes mens sløyfe inneholder mobilnøkkel hvis døren er låst med den mobile enheten ellers hvis b2 == 0 && b3 == 0 % Avslutter mens sløyfen inneholder mobilnøkkelen for å angi passordseksjonens ende ende

Etter dette kan den gå inn i en annen mens loop. Dette mens sløyfen styrer utfallene basert på inngangene fra knappene. Hvis den første mens sløyfen er ubetydelig, eller det er nødvendig med en manuell låsing, vil den legge inn en annen mens sløyfe der et spesifikt passord er nødvendig. Hvis passordet er feil, starter sløyfen på nytt

mens sant hvis ii == 1 % Avslutter mens sløyfe inneholder passord hvis døren ble låst opp med mobilenhetens slutt slutt % Samler data om knappene b5 = readDigitalPin (a, 'D5'); % Knapp 5 (blå) b1 = readDigitalPin (a, 'D1'); % Knapp 1 (svart) b4 = readDigitalPin (a, 'D4'); % Knapp 4 (hvit) hvis b5 == 0 % Starter passordinntastingsdelen for b = 1: 5 m6 = msgbox ('Vennligst trykk og hold inne en knapp'); pause (2); slett (m6); % Samler inn data om knappene b1 = readDigitalPin (a, 'D1'); % Knapp 1 (svart) b2 = readDigitalPin (a, 'D2'); % Knapp 2 (rød) b3 = readDigitalPin (a, 'D3'); % Knapp 3 (hvit) b4 = readDigitalPin (a, 'D4'); % Knapp 4 (gul) b5 = readDigitalPin (a, 'D5'); % Knapp 5 (blå) % Erstatter verdiene i den første passordet én om gangen hvis b1 == 0 PASSKODE (0+b) = 1; elseif b2 == 0 PASSKODE (0+b) = 2; elseif b3 == 0 PASSKODE (0+b) = 3; elseif b4 == 0 PASSKODE (0+b) = 4; elseif b5 == 0 PASSCODE = sprintf ('%. 0f%.0f%.ff%.0f', PASSCODE (1), PASSCODE (2), PASSCODE (3), PASSCODE (4)); % Slår sekvensen av knapper som trykkes inn i tall og konverterer den deretter til en strengende ende m7 = msgbox ('Velkommen hjem!'); writeDigitalPin (a, 'D8', 1); % Slår på grønt lyspause (.5); writePosition (s, 1); % Vri servoen for å låse opp dørpausen (5); writeDigitalPin (a, 'D8', 0); % Slår av grønt lyspause (.1); writeDigitalPin (a, 'D7', 1); % Slår på rødt lyspause (.5); writePosition (s, 0); % Slår servoen for å låse dørpausen (1); writeDigitalPin (a, 'D7', 0); % Slår av slettet rødt lys (m7); ii = 1; break % Avslutter mens sløyfe inneholder passord etter å ha angitt riktig passord elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Slår på det røde lyset m8 = msgbox ('Feil passord! Prøv igjen!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Slår av det røde lyset fortsetter % Lar deg angi en passord på nytt, hvis b1 == 0 && b4 == 0 % Avslutter mens sløyfen inneholder passorddelen hvis du ikke vil angi en kode ii = 1; pause ende ende

Hvis det er riktig, vil det umiddelbart gå inn i en stund -sløyfe som styrer temperatursensoren. Hvis bryteren er på, vil sløyfen fortsette gjennom og plotte temperaturen mot tiden plottet, slik at en kan se trenden. Hvis du trykker på knappen som er koblet til temperatursensoren, vil den også sende en e -post som forteller deg hva temperaturen er i ditt "hjem". Hvis bryteren er slått av, avsluttes koden umiddelbart

t = 0; % Starttid = 0 sekunder pause (5) % Gir brukeren tid til å slå på temperaturbryteren SWITCH = readDigitalPin (a, 'D11'); % Samler inn data om bryteren i pin D11 mens SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Samler inn data om bryteren i pin D11 spenning = readVoltage (a, 'A1'); % Leser spenningen fra temperatursensoren temp_C = (spenning.*1000 - 500)./ 10; % Konverterer spenningen til temperatur i ° C temp_F = (9/5).*Temp_C + 32; % Konverterer fra ° C til ° F plott (t, temp_C, 'b.') Hold on title ('Romtemperatur'); xlabel ('Time in Seconds'); ylabel ('Temperatur'); akse ([0, 180, 0, 100]); plot (t, temp_F, 'r.') legend ('Temperatur i ° C', 'Temperatur i ° F') pause (1); t = t + 1; % Tidsteller i sekunder % E-post seksjon b_temp = readDigitalPin (a, 'D0'); % Samler dataene til (blå) temperaturknappen i pin D0 hvis b_temp == 0 setpref ('Internett', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internett', 'E_mail', '[email protected]'); % Sender setpref ('Internett', 'SMTP_Username', '[email protected]'); % Avsenders brukernavn setpref ('Internett', 'SMTP_Password', 'Integral_ecoTECH'); % Avsenders passordrekvisitter = 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 Romtemperatur ', sprintf (' Gjeldende romtemperatur er %.1f ° C eller %.1f ° F. ', temp_C, temp_F)); % Sender en e-post til mottakeren med data om gjeldende romtemperatur fprintf ('E-posten er sendt! / N') avsluttes hvis temp_F> = 75 % Hvis romtemperaturen stiger til 75 ° F… temp_AC = 65; % Endrer temperaturen på termostaten til 65 ° F ellers hvis temp_F <= 65 % Hvis romtemperaturen synker til 60 ° F… temp_AC = 80; % Endrer temperaturen på termostaten til 80 ° F endeenden % Slutten på "SWITCH == 0" mens sløyfe hvis strøm == "off" || ii == 1 % Avslutter "power == on" mens sløyfeavbruddsslutt slutten % Slutt på "power == på" mens loop hvis power == "off" || ii == 1 % Avsluttes hele mens sløyfen brytes

Dette var bare en kort oversikt over koden og funksjonaliteten. Vi har vedlagt hele koden som pdf om nødvendig

Her er listen over hvilken port hver enhet er koblet til

1. RGB LED: Digitale pins (7, 8, 9)

2. Servo: Digital pin 6

3. Knapper: Digitale pins (1, 2, 3, 4, 5)

4. Blå knapp for e -post: Digital pin 0

5. Temperatursensor: Analog pin 1

6. Bryter: Digital pin 11

Anbefalt: