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, Novembar
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 osnovu određenog unosa. Koristili smo mnoge petlje i uvjetne naredbe predstavljene u MATLAB -u koje su to omogućile. Koristili smo i MATLAB mobile koristeći podatke prikupljene sa žiroskopa mobilnog uređaja za poboljšanje projekta š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

-Verzija MATLAB -a za 2018. je najpoželjnija verzija, uglavnom zato što najbolje funkcionira 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 portova. Od vitalnog je značaja da uz to imate i osnovnu ploču.

Dodaci

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

Ovo uključuje

  1. Servo
  2. Dugme (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 ohm 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 pravilno koristili Arduino MKR1000 putem MATLAB -a, morate preuzeti MATLAB paket podrške za Arduino hardver. Ovo preuzimanje omogućuje vam pristup određenim funkcijama i naredbama izravno na arduino ploču.

Paket možete preuzeti na donjem linku

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

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

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

Mobilna aplikacija MATLAB omogućuje nam korištenje mobilnog uređaja za prijenos podataka pomoću njegovog žiroskopa. Da bismo pribavili podatke putem MATLAB -a, podatke prikupljamo preuzimanjem iz orijentacijske matrice s MATLAB mobile. To činimo stvaranjem varijable za svaki stupac orijentacijske matrice (Azimut, 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čunaru.

Datoteku možete preuzeti na donjem linku

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 počinje porukom pri pokretanju koja nas pita želimo li pokrenuti kućni sigurnosni uređaj. Ako odgovorimo potvrdno i damo tačan pristupni kôd, skripta odmah uskače u while petlju. Odatle počinje prikupljanje podataka s mobilnog uređaja. Postoje uvjeti koji čitaju ove podatke. S mobilnog uređaja možemo otključati i zaključati sistem, a kod će okrenuti servo i treptati LED svjetlo ovisno o danim podacima s mobilnog uređaja

startup = questdlg ('Želite li aktivirati ecoTECH energetski sistem pametne kuće?'); % Počinje redoslijed aktivacije 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 …'); pauza (2); delete (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 probijanje petlji m2 = msgbox ('ecoTECH potpuno operativan!'); pauza (2); brisati (m2); elseif startup == "Ne" || startup == "Cancel" % Ako je odabrano "No" ili "Cancel", tada sekvenca aktivacije ne počinje i ne ulazi u power loop = "off"; m3 = msgbox ('U redu! Zbogom!'); pauza (2); brisanje (m3); kraj

% ecoTECH u odjeljku Akcija 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 tipkama b2 = readDigitalPin (a, 'D2'); % Dugme 2 (crveno) b3 = readDigitalPin (a, 'D3'); % Dugme 3 (belo) ako je KEY> = 35 % u stepenima 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 svetla (.5); writePosition (s, 0); % Okreće servo za zaključavanje pauze vrata (2); writeDigitalPin (a, 'D7', 0); % Isključuje brisanje crvenog svetla (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 završetka odjeljka lozinke

Nakon toga može ući u drugu while petlju. Ova while petlja kontroliše ishode na osnovu unosa sa dugmadi. 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 netačna, petlja će se ponovo pokrenuti

dok je istina ako je ii == 1 % Izlazi iz petlje koja sadrži šifru ako su vrata bila otključana prekidačem mobilnog uređaja % Prikuplja podatke o gumbima b5 = readDigitalPin (a, 'D5'); % Dugme 5 (plavo) b1 = readDigitalPin (a, 'D1'); % Dugme 1 (crno) b4 = readDigitalPin (a, 'D4'); % Dugme 4 (belo) ako je b5 == 0 % Pokreće odeljak za unos lozinke za b = 1: 5 m6 = msgbox ('Molimo pritisnite i držite dugme A'); pauza (2); delete (m6); % Prikuplja podatke o tipkama b1 = readDigitalPin (a, 'D1'); % Dugme 1 (crno) b2 = readDigitalPin (a, 'D2'); % Dugme 2 (crveno) b3 = readDigitalPin (a, 'D3'); % Dugme 3 (belo) b4 = readDigitalPin (a, 'D4'); % Dugme 4 (žuto) b5 = readDigitalPin (a, 'D5'); % Dugme 5 (plavo) % Zamenjuje vrednosti 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 tipki pritisnutih u brojeve, a zatim ih pretvara u kraj kraja niza % Kraj for petlje za unos cifara 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 svetla (.5); writePosition (s, 0); % Okreće servo za zaključavanje pauze vrata (1); writeDigitalPin (a, 'D7', 0); % Isključuje brisanje crvenog svetla (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 lozinka! Pokušajte ponovo!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Isključuje crveno svjetlo nastavlja se % Omogućava vam da ponovo unesete kraj šifre elseif b1 == 0 && b4 == 0 % Izlazi dok petlja sadrži odjeljak lozinke ako ne želite unijeti šifru ii = 1; break end end

Ako je ispravno, odmah će ući u while petlju koja kontrolira senzor temperature. Ako je prekidač uključen, petlja će se nastaviti i iscrtavati grafikon temperature u odnosu na vrijeme, omogućavajući vam da vidite trend. Ako pritisnete dugme spojeno na temperaturni senzor, poslaće vam i poruku e -pošte koja vam kaže koja je temperatura u vašem "domu". Ako je prekidač isključen, kôd će se odmah prekinuti

t = 0; % Početno vreme = 0 sekundi pauze (5) % Daje korisniku vreme da uključi temperaturni prekidač SWITCH = readDigitalPin (a, 'D11'); % Prikuplja podatke o prekidaču na pinu D11 dok je SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Prikuplja podatke o prekidaču na pinu D11 napon = readVoltage (a, 'A1'); % Očitava napon sa senzora 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 grafika (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 % Odsek e-pošte b_temp = readDigitalPin (a, 'D0'); % Prikuplja podatke (plavog) dugmeta za temperaturu na pinu D0 ako je b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Sender setpref ('Internet', 'SMTP_Korisničko ime', '[email protected]'); % Korisničko ime pošiljaoca setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Rekviziti lozinke pošiljaoca = 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 Sobna temperatura', sprintf ('Trenutna sobna temperatura je %.1f ° C ili %.1f ° F.', temp_C, temp_F)); % Šalje e-poruku primatelju s podacima o trenutnoj sobnoj temperaturi fprintf ('E-pošta je uspješno poslana! / N') kraj ako je temp_F> = 75 % Ako se sobna temperatura poveća na 75 ° F … temp_AC = 65; % Menja 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 lista u koji port je priključen svaki uređaj

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

2. Servo: Digitalni pin 6

3. Dugmad: Digitalni pinovi (1, 2, 3, 4, 5)

4. Plavo dugme za e -poštu: digitalni pin 0

5. Senzor temperature: analogni pin 1

6. Prekidač: Digitalni pin 11

Preporučuje se: