Sisukord:

MATLAB -i juhitav mikrokontroller (Arduino MKR1000): 4 sammu
MATLAB -i juhitav mikrokontroller (Arduino MKR1000): 4 sammu

Video: MATLAB -i juhitav mikrokontroller (Arduino MKR1000): 4 sammu

Video: MATLAB -i juhitav mikrokontroller (Arduino MKR1000): 4 sammu
Video: Episode 01: MATLAB link to Arduino (MATLAB GUI interfacing with Arduino) 2024, November
Anonim
MATLAB juhitav mikrokontroller (Arduino MKR1000)
MATLAB juhitav mikrokontroller (Arduino MKR1000)

Meie projekti eesmärk oli kasutada nii hästi kui võimalik nii MATLAB -i kui ka Arduino MKR1000. Meie eesmärk oli luua skript, mis võimaldas arduino teatud funktsioonidel konkreetse sisendi põhjal teatud väljundit esitada. Kasutasime seda MATLABis palju silmuseid ja tingimuslauseid. Kasutasime ka mobiiltelefoni MATLAB, kasutades projekti võimalikult täiustamiseks mobiilseadme güroskoobist saadud andmeid.

Samm: osad ja materjalid

Osad ja materjalid
Osad ja materjalid
Osad ja materjalid
Osad ja materjalid
Osad ja materjalid
Osad ja materjalid

MATLAB 2018a

-MATLABi 2018. aasta versioon on kõige eelistatum versioon, enamasti seetõttu, et see töötab kõige paremini mobiilseadmega ühendatava koodiga. Enamikku meie koodidest saab siiski tõlgendada enamiku MATLAB -i versioonidega.

Arduino MKR1000

-See on spetsiifiline seade, mis võimaldab meil ühendada vooluahelaid nii digitaalsete kui ka analoogsete portidega. On ülioluline, et teil oleks kaasas ka leivalaud.

Tarvikud

-MKR1000 kasutamisel vajasime vajalike funktsioonide täitmiseks tarvikuid.

See sisaldab

  1. Servo
  2. Nupp (6)
  3. Vahetatav RBG LED -tuli
  4. Lihtsad juhtmed
  5. leivaplaat (id)
  6. mini toitelüliti
  7. temperatuuriandur
  8. 330 oomi takisti
  9. 10K oomi takisti
  10. USB-microUSB juhe
  11. Sülearvuti/lauaarvuti
  12. Mobiilseade

Samuti tuleb märkida, et koos MKR1000 -ga saab kasutada palju -palju lisatarvikuid

Samm: MATLAB Arduino tugipakett

Arduino MKR1000 nõuetekohaseks kasutamiseks MATLAB -i kaudu peate alla laadima Arduino riistvara jaoks mõeldud MATLAB -i tugipaketi. See allalaadimine annab teile juurdepääsu teatud funktsioonidele ja käskudele otse arduino tahvlile.

Paketi saate alla laadida allolevalt lingilt

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

Samm: mobiilseadmest hangitud andurite kasutamine

Mobiilseadmest hangitud andurite kasutamine
Mobiilseadmest hangitud andurite kasutamine

Mobiilirakendus MATLAB võimaldab meil kasutada güroskoobi abil andmete voogesitamiseks mobiilseadet. Andmete hankimiseks MATLAB -i kaudu saame andmed MATLAB -mobiililt orienteerumismaatriksilt toomisega. Selleks loome orientatsioonimaatriksi iga veeru jaoks (Azimuth, Pitch ja Roll) muutuja ning indekseerime mobiilseadmest arvutisse püsiva väärtuste voo. See võimaldab meil luua tingimuslauseid, mis koostavad väljundi, kui MATLAB võtab mobiilseadmest konkreetse andmesisendi. Selleks vajate oma mobiilseadmes mobiili MATLAB ja arvutis mobiilseadme tugipaketti MATLAB.

Faili saate alla laadida allolevalt lingilt

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

Samm: kood ja juhtmestiku pordid

Kood algab käivitamisteatega, milles küsitakse, kas soovime oma koduvalveseadet käivitada. Kui vastame jaatavalt ja anname õige pääsukoodi, hüppab skript kohe mõnda aega. Sealt hakkab ta mobiilseadmest andmeid koguma. On tingimusi, mis loevad neid andmeid. Saame süsteemi avada ja lukustada oma mobiilseadmest ning kood pöörab servo ja vilgutab LED -tule, sõltuvalt mobiilseadmest saadud andmetest

startup = questdlg ('Kas soovite aktiveerida ecoTECH Smart Home Energy System?'); % Alustab ecoTECHwaitfor (käivitamine) aktiveerimisjärjestust; kui käivitamine == "Jah" % Kui valite "Jah", algab aktiveerimisjärjestus ja siseneb samasilmusesse lõpus power = "on"; m1 = msgbox ('ecoTECH käivitamine …'); paus (2); kustutada (m1); m1_wait = ooteriba (0, 'Palun oota …'); sammud = 25; i = 1: sammude paus (.1); ooteriba (i/sammud); % Värskendab ooteliba kustutamist (m1_wait); PASSCODE = [0 0 0 0]; % Initsialiseerib pääsukoodi ii = 0; % Initsialiseerib muutuja, mida kasutatakse silmustest väljamurdmiseks m2 = msgbox ('ecoTECH täielikult töökorras!'); paus (2); kustuta (m2); elseif käivitamine == "Ei" || startup == "Tühista" % Kui valite "Ei" või "Tühista", siis aktiveerimisjärjestus ei käivitu ja ei sisene samasilmusvõimsusele = "välja"; m3 = msgbox ('Okei! Hüvasti!'); paus (2); kustutada (m3); lõpp

% ecoTECH tegevussektsioonis, kuigi tõene, samas kui toide == "on" % mobiilivõtme sektsioon, samas kui tõsi % Kogub andmeid mobiilseadme rull -orientatsiooni kohta KEY = m. Orientation (3); % Kogub andmeid nuppude kohta b2 = readDigitalPin (a, 'D2'); % Nupp 2 (punane) b3 = readDigitalPin (a, 'D3'); % Nupp 3 (valge), kui KEY> = 35 % kraadides m4 = msgbox ('Tere tulemast koju!'); writeDigitalPin (a, 'D8', 1); % Lülitab rohelise tule pausi (.5) sisse; writePosition (s, 1); % Keerab servo, et avada uksepaus (2); writeDigitalPin (a, 'D8', 0); % Lülitab rohelise tule kustutamise välja (m4); elseif KEY <= -35 % kraadides m5 = msgbox ('Uks lukus!'); writeDigitalPin (a, 'D7', 1); % Lülitab sisse punase tule pausi (.5); writePosition (s, 0); % Pöörab servo ukse pausi lukustamiseks (2); writeDigitalPin (a, 'D7', 0); % Lülitab punase tule kustutamise välja (m5); ii = 1; break % Väljub, kui silmus sisaldab mobiilivõtit, kui uks on lukustatud mobiilseadme abil

Pärast seda võib see siseneda teise samasse ahelasse. See tsükkel kontrollib tulemusi nuppude sisendite põhjal. Kui esimese aja tsükkel on tühine või on vaja käsitsi lukustada, sisestab see teise ajalise tsükli, kus on vaja konkreetset parooli. Kui parool on vale, käivitab see ahela uuesti

kuigi tõene, kui ii == 1 % Väljub, kui pääsukoodi sisaldav silmus avatakse, kui uks avatakse mobiilseadme katkestamise lõpus % Kogub andmeid nuppude kohta b5 = readDigitalPin (a, 'D5'); % Nupp 5 (sinine) b1 = readDigitalPin (a, 'D1'); % Nupp 1 (must) b4 = readDigitalPin (a, 'D4'); % Nupp 4 (valge), kui b5 == 0 % Alustab parooli sisestamise sektsiooni b = 1: 5 m6 = msgbox ('Palun vajutage ja hoidke nuppu'); paus (2); kustutada (m6); % Kogub andmeid nuppude kohta b1 = readDigitalPin (a, 'D1'); % Nupp 1 (must) b2 = readDigitalPin (a, 'D2'); % Nupp 2 (punane) b3 = readDigitalPin (a, 'D3'); % Nupp 3 (valge) b4 = readDigitalPin (a, 'D4'); % Nupp 4 (kollane) b5 = readDigitalPin (a, 'D5'); % Nupp 5 (sinine) % Asendab algse pääsukoodi väärtused ükshaaval, kui 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)); % Muudab vajutatud nuppude jada numbriteks ja teisendab need stringide lõppu % Lõpu lõpuks pääsukoodi numbrite sisestamiseks, kui PASSCODE == "2314" % Kui sisestatud parool sobib, avaneb uks mõneks sekundiks ja seejärel lukustub m7 = msgbox ('Tere koju!'); writeDigitalPin (a, 'D8', 1); % Lülitab rohelise tule pausi (.5) sisse; writePosition (s, 1); % Keerab servo, et avada uksepaus (5); writeDigitalPin (a, 'D8', 0); % Lülitab rohelise tule pausi (.1) välja; writeDigitalPin (a, 'D7', 1); % Lülitab sisse punase tule pausi (.5); writePosition (s, 0); % Pöörab servo ukse pausi lukustamiseks (1); writeDigitalPin (a, 'D7', 0); % Lülitab punase tule kustutamise välja (m7); ii = 1; break % Väljub samas, kui tsükkel sisaldab pääsukoodi pärast õige pääsukoodi sisestamist elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Lülitab punase tule sisse m8 = msgbox ('Vale pääsukood! Proovi uuesti!'); oota (m8) writeDigitalPin (a, 'D7', 0); % Lülitab punase tule välja jätkuvalt % Võimaldab teil pääsukoodi uuesti sisestada katkesta lõpp

Kui see on õige, siseneb see kohe temperatuuriandurit juhtivale ajaringile. Kui lüliti on sisse lülitatud, jätkub tsükkel ja joonistatakse temperatuuri ja aja graafik, võimaldades trendi vaadata. Kui vajutate temperatuurianduriga ühendatud nuppu, saadab see teile ka e -kirja, mis ütleb teile, milline temperatuur on teie kodus. Kui lüliti on välja lülitatud, lõpetab see koodi kohe

t = 0; % Esialgne aeg = 0 sekundit pausi (5) % Annab kasutajale aega temperatuurilüliti sisselülitamiseks SWITCH = readDigitalPin (a, 'D11'); % Kogub andmeid lüliti kohta tihvtis D11, samal ajal kui SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Kogub andmeid lüliti kohta tihvti D11 pinges = readVoltage (a, 'A1'); % Loeb pinge temperatuuriandurilt temp_C = (pinge.*1000 - 500)./ 10; % Teisendab pinge temperatuuriks ° C temp_F = (9/5).*Temp_C + 32; % Teisendab ° C -st ° F graafikuks (t, temp_C, 'b.'), Hoidke pealkirja ('Ruumi temperatuur'); xlabel ('Aeg sekundites'); ylabel ('Temperatuur'); telg ([0, 180, 0, 100]); graafiku (t, temp_F, 'r.') legend ('Temperatuur ° C', 'Temperatuur ° F') paus (1); t = t + 1; % Aja loendur sekundites % E-posti jaotis b_temp = readDigitalPin (a, 'D0'); % Kogub pinge D0 (sinise) temperatuuri nupu andmed, kui b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Saatja setpref ('Internet', 'SMTP_Username', '[email protected]'); % Saatja kasutajanimi setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Saatja parooli rekvisiidid = 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 Room Temperature', sprintf ('Praegune toatemperatuur on %.1f ° C või %.1f ° F.', temp_C, temp_F)); % Saadab e-kirja saajale, andes andmed hetke toatemperatuuri kohta fprintf ('E-kiri edukalt saadetud! / N') lõpp, kui temp_F> = 75 % Kui toatemperatuur tõuseb 75 ° F… temp_AC = 65; % Muudab termostaadi temperatuuri 65 ° F muidu temp_F <= 65 % Kui toatemperatuur langeb temperatuurini 60 ° F… temp_AC = 80; % Muudab termostaadi temperatuuri 80 ° F lõpp -otsa % "SWITCH == 0" lõpp, samas kui silmus, kui toide == "väljas" || ii == 1 % Väljub "toide == sisselülitatud", samal ajal kui silmus katkeb lõppu % "Toide == sisse", kui tsükkel on toide == "väljas" || ii == 1 % Väljub täielikult, samal ajal kui silmuskatkestus lõpeb

See oli vaid lühike ülevaade koodist ja selle toimivusest. Vajadusel oleme lisanud täieliku koodi pdf -failina

Siin on nimekiri sellest, millisesse pessa iga seade on ühendatud

1. RGB LED: digitaalsed tihvtid (7, 8, 9)

2. Servo: digitaalne tihvt 6

3. Nupud: digitaalsed tihvtid (1, 2, 3, 4, 5)

4. Sinine nupp e -posti jaoks: digitaalne pin 0

5. Temperatuuriandur: analoogtapp 1

6. Lüliti: digitaalne tihvt 11

Soovitan: