Sadržaj:

MATLAB kontrolirani mikrokontroler (Arduino MKR1000): 4 koraka
MATLAB kontrolirani mikrokontroler (Arduino MKR1000): 4 koraka

Video: MATLAB kontrolirani mikrokontroler (Arduino MKR1000): 4 koraka

Video: MATLAB kontrolirani mikrokontroler (Arduino MKR1000): 4 koraka
Video: Arduino Interface With MATLAB | Dept of ECE, AITS, Hyderabad | Pantech eLearning 2024, Srpanj
Anonim
MATLAB kontrolirani mikrokontroler (Arduino MKR1000)
MATLAB kontrolirani mikrokontroler (Arduino MKR1000)

Cilj našeg projekta bio je upotrijebiti MATLAB kao i Arduino MKR1000 koliko smo mogli. Naš cilj je bio stvoriti skriptu koja je omogućila određenim značajkama arduina da izvedu određeni izlaz na temelju određenog unosa. Koristili smo mnoge petlje i uvjetne izraze predstavljene u MATLAB -u koji su to omogućili. Također smo koristili MATLAB mobile koristeći podatke prikupljene s žiroskopa mobilnog uređaja kako bismo poboljšali projekt što je više moguće.

Korak 1: Dijelovi i materijali

Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali

MATLAB 2018a

-Matlab verzija za 2018. najpopularnija je verzija, ponajviše zato što najbolje radi s kodom koji se povezuje s mobilnim uređajem. Međutim, većina našeg koda može se tumačiti u većini verzija MATLAB -a.

Arduino MKR1000

-Ovo je poseban uređaj koji nam omogućuje povezivanje krugova do digitalnih i analognih priključaka. Od vitalnog je značaja da uz to imate i osnovnu ploču.

Pribor

-Kada smo koristili MKR1000, bili su nam potrebni dodatni dijelovi kako bismo izvršili potrebne funkcije.

Ovo uključuje

  1. Servo
  2. Gumb (6)
  3. Izmjenjivo RBG LED svjetlo
  4. Jednostavne žice
  5. matična ploča
  6. mini prekidač za napajanje
  7. senzor temperature
  8. Otpornik od 330 ohma
  9. 10K ohmski otpornik
  10. USB-microUSB kabel
  11. Laptop/desktop
  12. Mobilni uređaj

Također treba napomenuti da postoji mnogo, mnogo više dodatne opreme koja se može koristiti s MKR1000

Korak 2: MATLAB Arduino paket podrške

Da biste ispravno koristili Arduino MKR1000 putem MATLAB -a, morate preuzeti MATLAB paket za podršku za Arduino hardver. Ovo preuzimanje omogućuje vam pristup određenim funkcijama i naredbama izravno na arduino ploču.

Paket možete preuzeti na donjoj poveznici

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

Korak 3: Korištenje senzora podataka dobivenih s mobilnog uređaja

Korištenje senzora podataka dobivenih s mobilnog uređaja
Korištenje senzora podataka dobivenih s mobilnog uređaja

Mobilna aplikacija MATLAB omogućuje nam korištenje mobilnog uređaja za prijenos podataka pomoću njegovog žiroskopa. Za prikupljanje podataka putem MATLAB -a, podatke dobivamo preuzimanjem iz orijentacijske matrice s MATLAB mobile. To činimo stvaranjem varijable za svaki stupac orijentacijske matrice (Azimuth, Pitch i Roll) i indeksiranjem konstantnog niza vrijednosti s mobilnog uređaja na računalo. To nam omogućuje stvaranje uvjetnih izraza koji će unaprijed oblikovati izlaz ako MATLAB pokupi određeni unos podataka s mobilnog uređaja. Da biste to učinili, trebat će vam MATLAB mobile na mobilnom uređaju i paket podrške za mobilne uređaje za MATLAB na vašem računalu.

Datoteku možete preuzeti na donjoj poveznici

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

Korak 4: Kôd i priključci ožičenja

Kôd započinje porukom pri pokretanju koja nas pita želimo li pokrenuti kućni sigurnosni uređaj. Ako odgovorimo potvrdno i unesemo točan pristupni kod, skripta odmah uskače u while petlju. Odatle počinje prikupljanje podataka s mobilnog uređaja. Postoje uvjeti koji čitaju te podatke. Sustav možemo otključati i zaključati s našeg mobilnog uređaja, a kod će okrenuti servo i treptati LED svjetlo ovisno o danim podacima s mobilnog uređaja

startup = questdlg ('Želite li aktivirati ecoTECH Energetski sustav pametne kuće?'); % Počinje aktivacijski slijed ecoTECHwaitfor (pokretanje); ako je pokretanje == "Da" % Ako je odabrano "Da", započinje niz aktivacije i ulazi u while petlju na kraju power = "uključeno"; m1 = msgbox ('Pokretanje ecoTECH …'); stanka (2); izbrisati (m1); m1_wait = čekanje (0, 'Molimo pričekajte …'); koraci = 25; za i = 1: koraci pauze (.1); traka čekanja (i/koraci); % Ažurira brisanje kraja trake čekanja (m1_wait); PASSCODE = [0 0 0 0]; % Pokreće šifru ii = 0; % Pokreće varijablu koja se koristi za prekid petlji m2 = msgbox ('ecoTECH potpuno operativan!'); stanka (2); brisati (m2); elseif startup == "Ne" || startup == "Cancel" % Ako je odabrano "No" ili "Cancel", tada se aktivacijski niz ne pokreće i ne ulazi u power loop = "off"; m3 = msgbox ('U redu! Zbogom!'); stanka (2); brisanje (m3); kraj

% ecoTECH u odjeljku Akcije dok je istinito dok je napajanje == "uključeno" % Odjeljak mobilnog ključa dok je istinito % Prikuplja podatke o orijentaciji mobilnog uređaja prema roli KEY = m. Orijentacija (3); % Prikuplja podatke o gumbima b2 = readDigitalPin (a, 'D2'); % Gumb 2 (crveno) b3 = readDigitalPin (a, 'D3'); % Gumb 3 (bijelo) ako je KEY> = 35 % u stupnjevima m4 = msgbox ('Welcome Home!'); writeDigitalPin (a, 'D8', 1); % Uključuje pauzu zelenog svjetla (.5); writePosition (s, 1); % Okreće servo za otključavanje pauze vrata (2); writeDigitalPin (a, 'D8', 0); % Isključuje brisanje zelenog svjetla (m4); elseif KEY <= -35 % u stupnjevima m5 = msgbox ('Vrata zaključana!'); writeDigitalPin (a, 'D7', 1); % Uključuje pauzu crvenog svjetla (.5); writePosition (s, 0); % Okreće servo za zaključavanje pauze vrata (2); writeDigitalPin (a, 'D7', 0); % Isključuje brisanje crvenog svjetla (m5); ii = 1; break % Izlazi dok petlja sadrži mobilni ključ ako su vrata zaključana pomoću mobilnog uređaja elseif b2 == 0 && b3 == 0 % Izlazi dok petlja sadrži mobilni ključ za unos kraja završetka odjeljka lozinke

Nakon toga može ući u drugu while petlju. Ova petlja while kontrolira ishode na temelju ulaza s gumba. Ako je prva while petlja zanemariva ili je potrebno ručno zaključavanje, ući će u drugu while petlju gdje je potrebna određena lozinka. Ako je lozinka netočna, petlja će se ponovno pokrenuti

dok je istina ako je ii == 1 % Izlazi iz petlje koja sadrži zaporku ako su vrata bila otključana prekidom mobilnog uređaja % Prikuplja podatke o gumbima b5 = readDigitalPin (a, 'D5'); % Gumb 5 (plavo) b1 = readDigitalPin (a, 'D1'); % Gumb 1 (crno) b4 = readDigitalPin (a, 'D4'); % Gumb 4 (bijelo) ako je b5 == 0 % Pokreće odjeljak za unos lozinke za b = 1: 5 m6 = msgbox ('Molimo pritisnite i držite gumb A'); stanka (2); izbrisati (m6); % Prikuplja podatke o gumbima b1 = readDigitalPin (a, 'D1'); % Gumb 1 (crno) b2 = readDigitalPin (a, 'D2'); % Gumb 2 (crveno) b3 = readDigitalPin (a, 'D3'); % Gumb 3 (bijelo) b4 = readDigitalPin (a, 'D4'); % Gumb 4 (žuto) b5 = readDigitalPin (a, 'D5'); % Gumb % 5 (Plavo) % Zamjenjuje vrijednosti u početnoj šifri jednu po jednu ako je 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)); % Pretvara niz gumba pritisnutih u brojeve i pretvara ih u kraj kraja niza % Kraj for petlje za unos znamenki za šifru ako PASSCODE == "2314" % Ako se unesena šifra podudara, vrata se otključavaju na nekoliko sekundi, pa se zaključavaju m7 = msgbox ('Dobro došli kući!'); writeDigitalPin (a, 'D8', 1); % Uključuje pauzu zelenog svjetla (.5); writePosition (s, 1); % Okreće servo za otključavanje pauze vrata (5); writeDigitalPin (a, 'D8', 0); % Isključuje pauzu zelenog svjetla (.1); writeDigitalPin (a, 'D7', 1); % Uključuje pauzu crvenog svjetla (.5); writePosition (s, 0); % Okreće servo za zaključavanje pauze vrata (1); writeDigitalPin (a, 'D7', 0); % Isključuje brisanje crvenog svjetla (m7); ii = 1; break % Izlazi dok petlja sadrži lozinku nakon unosa ispravne lozinke elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Uključuje crveno svjetlo m8 = msgbox ('Neispravna šifra! Pokušajte ponovno!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Isključuje crveno svjetlo nastavlja se % Omogućuje vam ponovni unos kraja zaporke elseif b1 == 0 && b4 == 0 % Izlazi dok petlja sadrži odjeljak zaporke ako ne želite unijeti zaporku ii = 1; break end end

Ako je ispravno, odmah će ući u while petlju koja kontrolira osjetnik temperature. Ako je prekidač uključen, petlja će se nastaviti i iscrtavati grafikon temperature u odnosu na vrijeme, što će omogućiti da se vidi trend. Ako pritisnete gumb spojen na senzor temperature, također će vam poslati e -poruku s porukom koja je temperatura u vašem "domu". Ako je prekidač isključen, kôd će se odmah prekinuti

t = 0; % Početno vrijeme = 0 sekundi pauze (5) % Daje korisniku vrijeme za uključivanje temperaturnog prekidača SWITCH = readDigitalPin (a, 'D11'); % Prikuplja podatke o prekidaču u pin D11 dok je SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Prikuplja podatke o prekidaču na pinu D11 napon = readVoltage (a, 'A1'); % Čita napon s osjetnika temperature temp_C = (napon.*1000 - 500)./ 10; % Pretvara napon u temperaturu u ° C temp_F = (9/5).*Temp_C + 32; % Pretvara iz ° C u ° F iscrtavanje (t, temp_C, 'b.') Držanje naslova ('Sobna temperatura'); xlabel ('Vrijeme u sekundama'); ylabel ('Temperatura'); os ([0, 180, 0, 100]); plot (t, temp_F, 'r.') legenda ('Temperatura u ° C', 'Temperatura u ° F') pauza (1); t = t + 1; % Brojač vremena u sekundama % Odjeljak e-pošte b_temp = readDigitalPin (a, 'D0'); % Prikuplja podatke (plave) tipke za temperaturu na pinu D0 ako je b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Pošiljatelja setpref ('Internet', 'SMTP_Username', '[email protected]'); % Korisničko ime pošiljatelja setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Rekviziti lozinke pošiljatelja = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'istina'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('[email protected]', 'ecoTECH Sobna temperatura', sprintf ('Trenutna sobna temperatura je %.1f ° C ili %.1f ° F.', temp_C, temp_F)); % Šalje primatelju e-poruku s podacima o trenutnoj sobnoj temperaturi fprintf ('E-pošta uspješno poslana! / N') kraj ako je temp_F> = 75 % Ako se sobna temperatura poveća na 75 ° F … temp_AC = 65; % Mijenja temperaturu na termostatu na 65 ° F, inače temp_F <= 65 % Ako se sobna temperatura smanji na 60 ° F … temp_AC = 80; % Mijenja temperaturu na termostatu na 80 ° F kraj kraja % Kraj "SWITCH == 0" while petlje ako je napajanje == "isključeno" || ii == 1 % Izlazi iz "napajanja == uključeno" dok kraj prekida petlje završava % Kraj "napajanja == uključeno" dok je petlja ako je napajanje == "isključeno" || ii == 1 % Izlazi iz cijelog prekida stanke petlje

Ovo je bio samo kratak pregled koda i njegove funkcionalnosti. Po potrebi smo priložili cijeli kôd u pdf formatu

Ovdje je popis u koji port je priključen svaki uređaj

1. RGB LED: Digitalni pinovi (7, 8, 9)

2. Servo: Digitalni pin 6

3. Gumbi: digitalni pinovi (1, 2, 3, 4, 5)

4. Plavi gumb za e -poštu: digitalni pin 0

5. Senzor temperature: analogni pin 1

6. Prekidač: Digitalni pin 11

Preporučeni: