INHOUDSOPGAWE:

MATLAB -beheerde mikrobeheerder (Arduino MKR1000): 4 stappe
MATLAB -beheerde mikrobeheerder (Arduino MKR1000): 4 stappe

Video: MATLAB -beheerde mikrobeheerder (Arduino MKR1000): 4 stappe

Video: MATLAB -beheerde mikrobeheerder (Arduino MKR1000): 4 stappe
Video: Enciende y Apaga un Led con Arduino UNO 2024, November
Anonim
MATLAB -beheerde mikrobeheerder (Arduino MKR1000)
MATLAB -beheerde mikrobeheerder (Arduino MKR1000)

Die doel van ons projek was om MATLAB sowel as die Arduino MKR1000 na die beste van ons vermoë te gebruik. Ons doel was om 'n script te skep waarmee sekere kenmerke van die arduino 'n sekere uitset kan lewer, gebaseer op 'n spesifieke invoer. Ons het baie lusse en voorwaardelike stellings in MATLAB gebruik wat dit moontlik gemaak het. Ons het ook MATLAB mobile gebruik deur data te gebruik wat verkry is uit die gyroscoop van 'n mobiele toestel om die projek soveel as moontlik te verbeter.

Stap 1: Onderdele en materiaal

Onderdele en materiaal
Onderdele en materiaal
Onderdele en materiaal
Onderdele en materiaal
Onderdele en materiaal
Onderdele en materiaal

MATLAB 2018a

-Die 2018 -weergawe van MATLAB is die mees gewilde weergawe, meestal omdat dit die beste werk met die kode wat met die mobiele toestel verbind word. Die meeste van ons kode kan egter deur die meerderheid MATLAB -weergawes geïnterpreteer word.

Arduino MKR1000

-Dit is 'n spesifieke toestel waarmee ons stroombane na beide digitale en analoge poorte kan dra. Dit is uiters belangrik dat u ook 'n broodbord het om daarmee saam te werk.

Toebehore

By die gebruik van die MKR1000 het ons bykomstige onderdele nodig om die nodige funksies uit te voer.

Dit sluit in

  1. Servo
  2. Knoppie (6)
  3. Verwisselbare RBG LED -lig
  4. Eenvoudige drade
  5. broodbord (e)
  6. mini -skakelaar
  7. Temperatuur sensor
  8. 330 ohm weerstand
  9. 10K ohm weerstand
  10. USB-mikroUSB-koord
  11. Skootrekenaar/lessenaar
  12. Mobiele toestel

Daar moet ook op gelet word dat daar baie meer bykomstighede is wat saam met die MKR1000 gebruik kan word

Stap 2: MATLAB Arduino -ondersteuningspakket

Om die Arduino MKR1000 deur MATLAB behoorlik te gebruik, moet u die MATLAB -ondersteuningspakket vir Arduino -hardeware aflaai. Hierdie aflaai gee u toegang tot sekere funksies en opdragte direk na die arduino -bord.

U kan die pakket aflaai op die onderstaande skakel

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

Stap 3: Die gebruik van datasensors verkry vanaf 'n mobiele toestel

Die gebruik van datasensors verkry vanaf 'n mobiele toestel
Die gebruik van datasensors verkry vanaf 'n mobiele toestel

Met die MATLAB Mobile -app kan ons 'n mobiele toestel gebruik om data te stroom met behulp van die gyroscoop. Om die data deur MATLAB te verkry, verkry ons die data deur dit op te haal uit die oriëntasiematriks van MATLAB mobile. Ons doen dit deur 'n veranderlike vir elke kolom van die oriëntasiematriks (Azimuth, Pitch en Roll) te skep en die konstante stroom waardes van die mobiele toestel na die rekenaar te indekseer. Dit stel ons in staat om voorwaardelike stellings te skep wat 'n uitset sal vorm as MATLAB 'n spesifieke data -invoer vanaf die mobiele toestel opneem. Om dit te kan doen, benodig u MATLAB -selfoon op u mobiele toestel en die ondersteuningspakket vir mobiele toestelle vir MATLAB op u rekenaar.

U kan die lêer aflaai op die onderstaande skakel

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

Stap 4: Die kode en bedrading hawens

Die kode begin met 'n opstartboodskap wat vra of ons ons tuisveiligheidstoestel wil begin. As ons ja antwoord en die korrekte wagwoord gee, spring die skrif onmiddellik in 'n rukkie. Van daar af begin dit data versamel vanaf die mobiele toestel. Daar is voorwaardes wat hierdie data lees. Ons kan die stelsel van ons mobiele toestel ontsluit en sluit, en die kode draai die servo en knip die LED -lig, afhangende van die gegewe data van die mobiele toestel

opstart = questdlg ('Wil u ecoTECH Smart Home Energy System aktiveer?'); % Begin met die aktiveringsvolgorde van ecoTECHwaitfor (opstart); as opstart == "Ja" % As "Ja" gekies word, begin 'n aktiveringsvolgorde en betree die terwyl -lus aan die einde krag = "aan"; m1 = msgbox ('Begin met ecoTECH …'); pouse (2); skrap (m1); m1_wait = wagbalk (0, 'Wag asseblief …'); stappe = 25; vir i = 1: stappe pouse (.1); wagbalk (i/stappe); % Werk die einde van die wagbalk -einde (m1_wait) op; PASSCODE = [0 0 0 0]; % Initialiseer wagwoord ii = 0; % Initialiseer 'n veranderlike wat gebruik word om uit lusse te breek m2 = msgbox ('ecoTECH volledig in werking!'); pouse (2); skrap (m2); elseif opstart == "Nee" || opstart == "Kanselleer" % As "Nee" of "Kanselleer" gekies word, dan begin die aktiveringsvolgorde nie en voer nie die while -lus in nie = "af"; m3 = msgbox ('Goed! totsiens!'); pouse (2); skrap (m3); einde

% ecoTECH in aksie afdeling terwyl dit waar is terwyl power == "on" % Mobile Key Section terwyl true % Versamel data oor die roloriëntasie van die mobiele toestel KEY = m. Orientation (3); % Versamel data oor die knoppies b2 = readDigitalPin (a, 'D2'); % Knoppie 2 (rooi) b3 = readDigitalPin (a, 'D3'); % Knoppie 3 (Wit) as KEY> = 35 % in grade m4 = msgbox ('Welcome Home!'); writeDigitalPin (a, 'D8', 1); % Skakel die groen ligpouse aan (.5); skryfPosisie (s, 1); % Draai die servo om die deurpouse (2) te ontsluit; writeDigitalPin (a, 'D8', 0); % Skakel die groen lig verwyder (m4) uit; elseif SLEUTEL <= -35 % in grade m5 = msgbox ('Deur gesluit!'); writeDigitalPin (a, 'D7', 1); % Skakel die rooi lig pouse (.5) aan; skryfPosisie (s, 0); % Draai die servo om die pouse van die deur te sluit (2); writeDigitalPin (a, 'D7', 0); % Skakel die rooi lig verwyder (m5) uit; ii = 1; breek % verlaat terwyl lus met mobiele sleutel bevat as die deur gesluit is met die mobiele toestel anders as b2 == 0 && b3 == 0 % Verlaat terwyl lus met mobiele sleutel bevat om die einde van die wagwoordseksie in te sluit

Hierna kan dit nog 'n while -lus invoer. Dit terwyl lus die uitkomste beheer op grond van die insette van die knoppies. As die lus vir die eerste keer onbeduidend is, of as 'n handmatige sluiting nodig is, sal dit 'n ander lus inskryf waar 'n spesifieke wagwoord nodig is. As die wagwoord verkeerd is, sal die lus weer begin

terwyl dit waar is as ii == 1 % Verlaat terwyl lus met wagwoord bevat as die deur oopgemaak is met die einde van die mobiele toestel % Versamel data oor die knoppies b5 = readDigitalPin (a, 'D5'); % Knoppie 5 (blou) b1 = readDigitalPin (a, 'D1'); % Knoppie 1 (Swart) b4 = readDigitalPin (a, 'D4'); % Knoppie 4 (Wit) as b5 == 0 % Begin met die invoer van wagwoordkode vir b = 1: 5 m6 = msgbox ('Druk en hou 'n knoppie ingedruk'); pouse (2); skrap (m6); % Versamel data oor die knoppies b1 = readDigitalPin (a, 'D1'); % Knoppie 1 (Swart) b2 = readDigitalPin (a, 'D2'); % Knoppie 2 (rooi) b3 = readDigitalPin (a, 'D3'); % Knoppie 3 (Wit) b4 = readDigitalPin (a, 'D4'); % Knoppie 4 (geel) b5 = readDigitalPin (a, 'D5'); % Knoppie 5 (blou) % Vervang die waardes in die aanvanklike wagwoord een vir een as 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)); % Draai die volgorde van knoppies wat in getalle ingedruk word, om en skakel dit om na 'n string -einde % m7 = msgbox ('Welkom tuis!'); writeDigitalPin (a, 'D8', 1); % Skakel die groen ligpouse aan (.5); skryfPosisie (s, 1); % Draai die servo om die pouse van die deur te ontsluit (5); writeDigitalPin (a, 'D8', 0); % Skakel die groen lig pouse (.1) af; writeDigitalPin (a, 'D7', 1); % Skakel die rooi lig pouse (.5) aan; skryfPosisie (s, 0); % Draai die servo om die deurpouse te sluit (1); writeDigitalPin (a, 'D7', 0); % Skakel die rooi lig verwyder (m7) uit; ii = 1; break % Verlaat terwyl lus met wagwoord bevat nadat die regte wagwoord ingevoer is anders as PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Skakel die rooi lig aan m8 = msgbox ('Verkeerde wagwoord! Probeer weer!'); wag vir (m8) writeDigitalPin (a, 'D7', 0); % Skakel die rooi lig voort % Laat u toe om weer 'n wagwoord in te voer, anders if b1 == 0 && b4 == 0 % Verlaat terwyl die lus met 'n wagwoordafdeling bevat as u nie 'n wagwoord wil invoer nie ii = 1; einde eindig

As dit korrek is, sal dit onmiddellik 'n while -lus binnegaan wat die temperatuursensor beheer. As die skakelaar aan is, gaan die lus deur en teken die temperatuur teenoor tydtelling, sodat 'n mens die neiging kan sien. As u op die knoppie wat met die temperatuursensor gekoppel is, ingedruk word, stuur dit ook 'n e -pos waarin u kan sien wat die temperatuur in u 'huis' is. As die skakelaar afgeskakel is, word die kode onmiddellik beëindig

t = 0; % Aanvanklike tyd = 0 sekondes pouse (5) % Gee tyd vir die gebruiker om die temperatuurskakelaar SWITCH = readDigitalPin (a, 'D11') aan te skakel; % Versamel data oor die skakelaar in pen D11 terwyl SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Versamel data oor die skakelaar in pen D11 spanning = readVoltage (a, 'A1'); % Lees die spanning van die temperatuursensor temp_C = (spanning.*1000 - 500)./ 10; % Skakel die spanning om in temperatuur in ° C temp_F = (9/5).*Temp_C + 32; % Omskakel van ° C na ° F plot (t, temp_C, 'b.') Hou titel ('Kamertemperatuur'); xlabel ('Tyd in sekondes'); ylabel ('temperatuur'); as ([0, 180, 0, 100]); plot (t, temp_F, 'r.') legende ('Temperatuur in ° C', 'Temperatuur in ° F') pouse (1); t = t + 1; % Tydteller in sekondes % E-posafdeling b_temp = readDigitalPin (a, 'D0'); % Versamel die data van die (blou) temperatuurknoppie in pen D0 as b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Sender setpref ('Internet', 'SMTP_Username', '[email protected]'); % Afsender se gebruikersnaam setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Sender se wagwoord rekwisiete = 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 kamertemperatuur ', sprintf (' Die huidige kamertemperatuur is %.1f ° C of %.1f ° F. ', temp_C, temp_F)); % Stuur 'n e-pos aan die ontvanger met gegewens oor die huidige kamertemperatuur fprintf ('E-pos suksesvol gestuur! / N') eindig as temp_F> = 75 % As die kamertemperatuur styg tot 75 ° F … temp_AC = 65; % Verander die temperatuur op die termostaat na 65 ° F anders as temp_F <= 65 % As die kamertemperatuur daal tot 60 ° F … temp_AC = 80; % Verander die temperatuur op die termostaat na 80 ° F einde einde % Einde van "SWITCH == 0" terwyl lus as power == "off" || ii == 1 % verlaat "power == aan" terwyl lusbreuk einde einde % einde van "power == aan" terwyl lus as power == "af" || ii == 1 % Verlaat heeltemal terwyl die lus onderbreek word

Dit was slegs 'n kort oorsig van die kode en die funksionaliteit daarvan. Ons het die volledige kode as 'n pdf aangeheg indien nodig

Hier is die lys van watter poort elke toestel aangesluit is

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

2. Servo: Digitale pen 6

3. Knoppies: Digitale penne (1, 2, 3, 4, 5)

4. Blou knoppie vir e -pos: Digitale pen 0

5. Temperatuursensor: analoog pen 1

6. Skakelaar: Digitale pen 11

Aanbeveel: