Indholdsfortegnelse:

MATLAB -kontrolleret mikrokontroller (Arduino MKR1000): 4 trin
MATLAB -kontrolleret mikrokontroller (Arduino MKR1000): 4 trin

Video: MATLAB -kontrolleret mikrokontroller (Arduino MKR1000): 4 trin

Video: MATLAB -kontrolleret mikrokontroller (Arduino MKR1000): 4 trin
Video: LED's control using switch case function || arduino project || Push button || arduino program || diy 2024, November
Anonim
MATLAB kontrolleret mikrokontroller (Arduino MKR1000)
MATLAB kontrolleret mikrokontroller (Arduino MKR1000)

Målet med vores projekt var at udnytte MATLAB såvel som Arduino MKR1000 efter bedste evne. Vores mål var at skabe et script, der tillod visse funktioner i arduinoen at udføre et bestemt output baseret på et specifikt input. Vi brugte mange sløjfer og betingede udsagn i MATLAB, der gjorde dette muligt. Vi brugte også MATLAB -mobil ved at bruge data hentet fra en mobilenheds gyroskop til at forbedre projektet så meget som muligt.

Trin 1: Dele og materialer

Dele og materialer
Dele og materialer
Dele og materialer
Dele og materialer
Dele og materialer
Dele og materialer

MATLAB 2018a

-2018 -versionen af MATLAB er den mest foretrukne version, mest fordi den fungerer bedst med den kode, der opretter forbindelse til den mobile enhed. Det meste af vores kode kan imidlertid fortolkes af de fleste MATLAB -versioner.

Arduino MKR1000

-Dette er en specifik enhed, der giver os mulighed for at føre kredsløb op til både digitale og analoge porte. Det er vigtigt, at du også har et brødbræt til at følge med.

tilbehør

-Når vi brugte MKR1000, havde vi brug for tilbehør til at udføre de nødvendige funktioner.

Dette inkluderer

  1. Servo
  2. Knap (6)
  3. Udskifteligt RBG LED -lys
  4. Enkle ledninger
  5. brødbræt
  6. mini afbryder
  7. temperatur måler
  8. 330 ohm modstand
  9. 10K ohm modstand
  10. USB-microUSB ledning
  11. Bærbar/desktop
  12. Mobil enhed

Det skal også bemærkes, at der er mange, mange flere tilbehør, der kan bruges med MKR1000

Trin 2: MATLAB Arduino -supportpakke

For at kunne bruge Arduino MKR1000 korrekt gennem MATLAB, skal du downloade MATLAB -supportpakken til Arduino -hardware. Denne download giver dig adgang til bestemte funktioner og kommandoer direkte til arduino -kortet.

Du kan downloade pakken på nedenstående link

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

Trin 3: Brug af datasensorer erhvervet fra mobilenhed

Brug af datasensorer erhvervet fra mobilenhed
Brug af datasensorer erhvervet fra mobilenhed

MATLAB Mobile -appen giver os mulighed for at bruge en mobilenhed til at streame data ved hjælp af dets gyroskop. For at erhverve dataene via MATLAB får vi dataene ved at hente dem fra orienteringsmatrixen fra MATLAB mobile. Vi gør dette ved at oprette en variabel for hver kolonne i orienteringsmatrixen (Azimuth, Pitch og Roll) og indeksere den konstante strøm af værdier fra mobilenheden til computeren. Dette giver os mulighed for at oprette betingede udsagn, der vil præforme et output, hvis MATLAB opfanger et specifikt datainput fra den mobile enhed. For at gøre dette skal du bruge MATLAB -mobil på din mobilenhed og understøttelsespakke til mobilenheder til MATLAB på din computer.

Du kan downloade filen på nedenstående link

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

Trin 4: Koden og ledningsportene

Koden begynder med en startmeddelelse, der spørger, om vi vil starte vores hjemmesikkerhedsenhed. Hvis vi svarer ja og giver den korrekte adgangskode, hopper scriptet straks i et stykke loop. Derfra begynder det at indsamle data fra den mobile enhed. Der er betingelser, der læser disse data. Vi kan låse og låse systemet fra vores mobile enhed, og koden vil dreje servoen og blinke LED -lampen afhængigt af de givne data fra den mobile enhed

startup = questdlg ('Vil du aktivere ecoTECH Smart Home Energy System?'); % Starter aktiveringssekvens for ecoTECHwaitfor (opstart); hvis opstart == "Ja" % Hvis der vælges "Ja", starter en aktiveringssekvens og går ind i mensløkken ved afslutningen power = "on"; m1 = msgbox ('Start af ecoTECH …'); pause (2); slet (m1); m1_wait = ventelinje (0, 'Vent venligst …'); trin = 25; for i = 1: trin pause (.1); ventelinje (i/trin); % Opdaterer ventelinens sletning (m1_wait); PASSCODE = [0 0 0 0]; % Initialiserer adgangskode ii = 0; % Initialiserer en variabel, der bruges til at bryde ud af sløjfer m2 = msgbox ('ecoTECH fuldt operationel!'); pause (2); slet (m2); elseif opstart == "Nej" || startup == "Annuller" % Hvis "Nej" eller "Annuller" er valgt, starter aktiveringssekvensen ikke og indtaster ikke while loop power = "off"; m3 = msgbox ('Okay! Farvel!'); pause (2); slet (m3); ende

% ecoTECH in Action Section while true while power == "on" % Mobile Key Section while true % Indsamler data om rullens retning for den mobile enhed KEY = m. Orientation (3); % Indsamler data om knapperne b2 = readDigitalPin (a, 'D2'); % Knap 2 (rød) b3 = readDigitalPin (a, 'D3'); % Knap 3 (hvid) hvis KEY> = 35 % i grader m4 = msgbox ('Velkommen hjem!'); writeDigitalPin (a, 'D8', 1); % Tænder for det grønne lys pause (.5); writePosition (s, 1); % Drejer servoen for at låse dørpausen (2) op; writeDigitalPin (a, 'D8', 0); % Deaktiverer sletning af grønt lys (m4); elseif NØGLE <= -35 % i grader m5 = msgbox ('Door Locked!'); writeDigitalPin (a, 'D7', 1); % Tænder pause for rødt lys (.5); writePosition (s, 0); % Drejer servoen for at låse dørpausen (2); writeDigitalPin (a, 'D7', 0); % Deaktiverer sletning af rødt lys (m5); ii = 1; break % Afslut, mens loop indeholder mobilnøgle, hvis døren er låst ved hjælp af den mobile enhed ellers b2 == 0 && b3 == 0 % Afslutter, mens loop indeholder mobilnøgle for at indtaste adgangskoden sektion break end end

Efter dette kan den indtaste en anden while loop. Dette mens loop styrer resultaterne baseret på input fra knapperne. Hvis den første mens loop er ubetydelig, eller en manuel låsning er påkrævet, vil den indtaste en anden mens loop, hvor en bestemt adgangskode er nødvendig. Hvis adgangskoden er forkert, genstarter sløjfen igen

while true if ii == 1 % Afslutter mens loop indeholder adgangskode, hvis døren blev låst op med mobilenhedens afbrydelse % Indsamler data om knapperne b5 = readDigitalPin (a, 'D5'); % Knap 5 (blå) b1 = readDigitalPin (a, 'D1'); % Knap 1 (sort) b4 = readDigitalPin (a, 'D4'); % Knap 4 (Hvid) hvis b5 == 0 % Starter adgangskodeindtastningssektion for b = 1: 5 m6 = msgbox ('Tryk og hold en knap'); pause (2); slet (m6); % Indsamler data om knapperne b1 = readDigitalPin (a, 'D1'); % Knap 1 (sort) b2 = readDigitalPin (a, 'D2'); % Knap 2 (rød) b3 = readDigitalPin (a, 'D3'); % Knap 3 (hvid) b4 = readDigitalPin (a, 'D4'); % Knap 4 (gul) b5 = readDigitalPin (a, 'D5'); % Knap 5 (blå) % Erstatter værdierne i den oprindelige adgangskode én ad gangen, hvis b1 == 0 PASSCODE (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)); % Vender rækkefølgen af knapper, der trykkes ind i tal, og konverterer den derefter til en strengende ende m7 = msgbox ('Velkommen hjem!'); writeDigitalPin (a, 'D8', 1); % Tænder for det grønne lys pause (.5); writePosition (s, 1); % Drejer servoen for at låse dørpausen (5) op; writeDigitalPin (a, 'D8', 0); % Deaktiverer det grønne lys pause (.1); writeDigitalPin (a, 'D7', 1); % Tænder for det røde lys pause (.5); writePosition (s, 0); % Drejer servoen for at låse dørpausen (1); writeDigitalPin (a, 'D7', 0); % Deaktiverer sletning af det røde lys (m7); ii = 1; break % Afslut, mens loop indeholder adgangskode efter indtastning af den korrekte adgangskode elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Tænder det røde lys m8 = msgbox ('Forkert adgangskode! Prøv igen!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Slukker det røde lys fortsæt % Giver dig mulighed for at indtaste en adgangskode igen ifb1 == 0 && b4 == 0 % Afslutter mens loop indeholder kodeordssektion, hvis du ikke vil indtaste en adgangskode ii = 1; pause ende ende

Hvis det er korrekt, vil det straks gå ind i en while -sløjfe, der styrer temperatursensoren. Hvis kontakten er tændt, vil sløjfen fortsætte og plotte temperaturen vs. tid plottet, så man kan se tendensen. Hvis der trykkes på knappen, der er forbundet til temperatursensoren, sender den også en e -mail, der fortæller dig, hvad temperaturen er i dit "hjem". Hvis kontakten er slukket, afslutter den straks koden

t = 0; % Starttid = 0 sekunders pause (5) % Giver tid for brugeren til at tænde temperaturkontakten SWITCH = readDigitalPin (a, 'D11'); % Indsamler data om kontakten i pin D11, mens SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Indsamler data om kontakten i pin D11 spænding = readVoltage (a, 'A1'); % Læser spændingen fra temperatursensoren temp_C = (spænding.*1000 - 500)./ 10; % Konverterer spændingen til temperatur i ° C temp_F = (9/5).*Temp_C + 32; % Konverterer fra ° C til ° F plot (t, temp_C, 'b.') Hold on titel ('Rumtemperatur'); 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; % Tæller i sekunder % E-mail Afsnit b_temp = readDigitalPin (a, 'D0'); % Indsamler dataene for den (blå) temperaturknap i pin D0, hvis b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Sender setpref ('Internet', 'SMTP_Username', '[email protected]'); % Afsenders brugernavn setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Afsenders adgangskode rekvisitter = 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 Rumtemperatur ', sprintf (' Den aktuelle rumtemperatur er %.1f ° C eller %.1f ° F. ', temp_C, temp_F)); % Sender en e-mail til modtageren med data om den aktuelle stuetemperatur fprintf ('E-mail med succes sendt! / N') slutter hvis temp_F> = 75 % Hvis rumtemperaturen stiger til 75 ° F… temp_AC = 65; % Ændrer temperaturen på termostaten til 65 ° F elseif temp_F <= 65 % Hvis rumtemperaturen falder til 60 ° F… temp_AC = 80; % Ændrer temperaturen på termostaten til 80 ° F endeenden % Slut på "SWITCH == 0" mens loop, hvis strøm == "off" || ii == 1 % Afslutter "strøm == tændt", mens sløjfepause slut slutter % Slutter på "strøm == tændt", mens sløjfe, hvis strøm == "slukker" || ii == 1 % Afslutter hele, mens loop -slutningen slutter

Dette var blot en kort oversigt over koden og dens funktionalitet. Vi har vedhæftet den fulde kode som en pdf, hvis det er nødvendigt

Her er listen over, hvilken port hver enhed er tilsluttet

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

2. Servo: Digital pin 6

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

4. Blå knap til e -mail: Digital pin 0

5. Temperatursensor: Analog pin 1

6. Kontakt: Digital pin 11

Anbefalede: