Kazalo:

Krmiljeni mikrokrmilnik MATLAB (Arduino MKR1000): 4 koraki
Krmiljeni mikrokrmilnik MATLAB (Arduino MKR1000): 4 koraki

Video: Krmiljeni mikrokrmilnik MATLAB (Arduino MKR1000): 4 koraki

Video: Krmiljeni mikrokrmilnik MATLAB (Arduino MKR1000): 4 koraki
Video: Enciende y Apaga un Led con Arduino UNO 2024, November
Anonim
Krmiljeni mikrokrmilnik MATLAB (Arduino MKR1000)
Krmiljeni mikrokrmilnik MATLAB (Arduino MKR1000)

Cilj našega projekta je bil po svojih najboljših močeh uporabiti MATLAB in Arduino MKR1000. Naš cilj je bil ustvariti skript, ki je nekaterim funkcijam arduina omogočil izvajanje določenega izida na podlagi določenega vnosa. Uporabili smo številne zanke in pogojne izjave, predstavljene v MATLAB -u, ki so to omogočile. Uporabili smo tudi MATLAB mobile z uporabo podatkov, pridobljenih z žiroskopa mobilne naprave, da bi projekt čim bolj izboljšali.

1. korak: Deli in materiali

Deli in materiali
Deli in materiali
Deli in materiali
Deli in materiali
Deli in materiali
Deli in materiali

MATLAB 2018a

-Različica MATLAB za leto 2018 je najbolj priljubljena različica, predvsem zato, ker najbolje deluje s kodo, ki se poveže z mobilno napravo. Večino naše kode pa lahko razlaga večina različic MATLAB.

Arduino MKR1000

-To je posebna naprava, ki nam omogoča, da povežemo vezja do digitalnih in analognih vrat. Pomembno je, da si privoščite tudi načrt.

Dodatki

-Ko smo uporabljali MKR1000, smo za opravljanje potrebnih funkcij potrebovali dodatne dele.

To vključuje

  1. Servo
  2. Gumb (6)
  3. Zamenljiva RBG LED luč
  4. Preproste žice
  5. mizica
  6. mini stikalo za vklop
  7. temperaturni senzor
  8. 330 ohmski upor
  9. 10K ohmski upor
  10. USB-microUSB kabel
  11. Prenosni računalnik/namizni računalnik
  12. Mobilna naprava

Opozoriti je treba tudi, da je z MKR1000 mogoče uporabiti veliko, veliko več dodatkov

2. korak: Podporni paket MATLAB Arduino

Če želite pravilno uporabljati Arduino MKR1000 prek MATLAB -a, morate prenesti podporni paket MATLAB za strojno opremo Arduino. Ta prenos vam omogoča dostop do določenih funkcij in ukazov neposredno na ploščo arduino.

Paket lahko prenesete na spodnji povezavi

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

3. korak: Uporaba podatkovnih senzorjev, pridobljenih iz mobilne naprave

Uporaba podatkovnih senzorjev, pridobljenih iz mobilne naprave
Uporaba podatkovnih senzorjev, pridobljenih iz mobilne naprave

Mobilna aplikacija MATLAB nam omogoča uporabo mobilne naprave za pretakanje podatkov z uporabo njenega žiroskopa. Za pridobivanje podatkov prek MATLAB -a jih pridobimo tako, da jih pridobimo iz orientacijske matrice iz MATLAB mobile. To naredimo tako, da za vsak stolpec orientacijske matrike (Azimut, Pitch in Roll) ustvarimo spremenljivko in indeksiramo stalen tok vrednosti iz mobilne naprave v računalnik. To nam omogoča, da ustvarimo pogojne izjave, ki bodo vnaprej oblikovale izhod, če MATLAB pobere določen vnos podatkov iz mobilne naprave. Če želite to narediti, potrebujete MATLAB mobile v mobilni napravi in paket podpore za mobilne naprave za MATLAB v računalniku.

Datoteko lahko prenesete na spodnji povezavi

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

4. korak: Koda in priključki za ožičenje

Koda se začne z zagonskim sporočilom, ki vpraša, ali želimo zagnati svojo domačo varnostno napravo. Če odgovorimo pritrdilno in podamo pravilno geslo, skript takoj skoči v zanko while. Od tam začne zbirati podatke iz mobilne naprave. Obstajajo pogojniki, ki berejo te podatke. Sistem lahko odklenemo in zaklenemo z mobilne naprave, koda pa obrne servo in utripa LED lučko, odvisno od danih podatkov iz mobilne naprave

startup = questdlg ('Ali želite aktivirati ecoTECH Smart Home Energy System?'); % Začne aktivacijsko zaporedje ecoTECHwaitfor (zagon); če je zagon == "Da" % Če je izbrano "Da", se začne aktivacijsko zaporedje in vstopi v zanko while na koncu power = "on"; m1 = msgbox ('Zagon ecoTECH …'); premor (2); izbriši (m1); m1_wait = čakalna vrstica (0, 'Prosim počakajte …'); koraki = 25; za i = 1: premor korakov (.1); čakalna vrstica (i/koraki); % Posodobi izbris čakalne vrstice (m1_wait); PASSCODE = [0 0 0 0]; % Inicializira geslo ii = 0; % Inicializira spremenljivko, ki se uporablja za prekinitev zank m2 = msgbox ('ecoTECH popolnoma delujoč!'); premor (2); izbriši (m2); elseif zagon == "Ne" || startup == "Prekliči" % Če izberete "Ne" ali "Prekliči", se aktivacijsko zaporedje ne zažene in ne vnese napajanja zanke while = "izklopljeno"; m3 = msgbox ('V redu! Nasvidenje!'); premor (2); črtati (m3); konec

% ecoTECH v odseku v akciji, medtem ko je res, medtem ko je moč == "vklopljeno" % Odsek mobilnega ključa, medtem ko je res % Zbira podatke o usmerjenosti premika mobilne naprave KEY = m. Orientation (3); % Zbira podatke o gumbih b2 = readDigitalPin (a, 'D2'); % Gumb 2 (rdeča) b3 = readDigitalPin (a, 'D3'); % Gumb 3 (bela), če je KLJUČ>> 35 % v stopinjah m4 = msgbox ('Dobrodošli domov!'); writeDigitalPin (a, 'D8', 1); % Vklopi premor zelene luči (.5); writePosition (s, 1); % Obrne servo za odklepanje premora vrat (2); writeDigitalPin (a, 'D8', 0); % Izklopi brisanje zelene luči (m4); elseif KEY <= -35 % v stopinjah m5 = msgbox ('Door Locked!'); writeDigitalPin (a, 'D7', 1); % Vklopi premor pri rdeči luči (.5); writePosition (s, 0); % Obrne servo, da zaklene pavzo vrat (2); writeDigitalPin (a, 'D7', 0); % Izklopi brisanje rdeče luči (m5); ii = 1; break % Izstopi med zanko, ki vsebuje mobilni ključ, če so vrata zaklenjena z mobilno napravo.

Po tem lahko vstopi v drugo zanko while. Ta zanka while nadzoruje rezultate na podlagi vhodov iz gumbov. Če je prva zanka while zanemarljiva ali je potrebna ročna zapora, bo vstopila v drugo zanko while, kjer je potrebno določeno geslo. Če geslo ni pravilno, se bo zanka znova zagnala

medtem ko je true, če je ii == 1 % Izstopi iz zanke, ki vsebuje geslo, če so bila vrata odklenjena s prelomom mobilne naprave % Zbira podatke o gumbih b5 = readDigitalPin (a, 'D5'); % Gumb 5 (modra) b1 = readDigitalPin (a, 'D1'); % Gumb 1 (črna) b4 = readDigitalPin (a, 'D4'); % Gumb 4 (bela), če je b5 == 0 % Začne vnos gesla za b = 1: 5 m6 = msgbox ('Pritisnite in držite gumb A'); premor (2); izbriši (m6); % Zbira podatke o gumbih b1 = readDigitalPin (a, 'D1'); % Gumb 1 (črna) b2 = readDigitalPin (a, 'D2'); % Gumb 2 (rdeča) b3 = readDigitalPin (a, 'D3'); % Gumb 3 (bela) b4 = readDigitalPin (a, 'D4'); % Gumb 4 (rumen) b5 = readDigitalPin (a, 'D5'); % Gumb 5 (modra) % Zamenja vrednosti v začetni gesli eno za drugo, če 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)); % Pretvori zaporedje pritisnjenih gumbov v številke in ga nato pretvori v konec konca niza % Konec for zanke za vnos številk za geslo, če PASSCODE == "2314" % Če se vneseno geslo ujema, se vrata odklenejo za nekaj sekund in se zaklenejo m7 = msgbox ('Dobrodošli domov!'); writeDigitalPin (a, 'D8', 1); % Vklopi premor zelene luči (.5); writePosition (s, 1); % Obrne servo za odklepanje premora vrat (5); writeDigitalPin (a, 'D8', 0); % Izklopi premor zelene luči (.1); writeDigitalPin (a, 'D7', 1); % Vklopi premor pri rdeči luči (.5); writePosition (s, 0); % Obrne servo, da zaklene pavzo vrat (1); writeDigitalPin (a, 'D7', 0); % Izklopi brisanje rdeče luči (m7); ii = 1; break % Izstopi, medtem ko zanka vsebuje geslo, potem ko vnesete pravilno geslo elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Vklopi rdečo luč m8 = msgbox ('Nepravilna geslo! Poskusite znova!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Izklopi rdečo luč nadaljevanje % Omogoča ponovni vnos konca gesla elseif b1 == 0 && b4 == 0 % Izstopi, medtem ko zanka vsebuje razdelek gesla, če ne želite vnesti gesla ii = 1; konec konca preloma

Če je pravilno, takoj vstopi v zanko while, ki nadzoruje temperaturni senzor. Če je stikalo vklopljeno, se bo zanka nadaljevala in prikazala grafikon temperature v primerjavi s časom, kar omogoča ogled trenda. Če pritisnete gumb, priključen na temperaturni senzor, bo poslal tudi e -poštno sporočilo, v katerem je temperatura v vašem "domu". Če je stikalo izklopljeno, bo koda takoj končana

t = 0; % Začetni čas = 0 sekund premora (5) % Daje uporabniku čas, da vklopi temperaturno stikalo SWITCH = readDigitalPin (a, 'D11'); % Zbira podatke o stikalu v zatiču D11, medtem ko SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Zbira podatke o stikalu v zatiču D11 napetost = readVoltage (a, 'A1'); % Odčita napetost iz temperaturnega tipala temp_C = (napetost.*1000 - 500)./ 10; % Pretvori napetost v temperaturo v ° C temp_F = (9/5).*Temp_C + 32; % Pretvori iz ° C v ° F ploskev (t, temp_C, 'b.') Drži na naslovu ('sobna temperatura'); xlabel ('Čas v sekundah'); ylabel („temperatura“); os ([0, 180, 0, 100]); plot (t, temp_F, 'r.') legend ('Temperatura v ° C', 'Temperatura v ° F') premor (1); t = t + 1; % Števec časa v sekundah % E-poštni odsek b_temp = readDigitalPin (a, 'D0'); % Zbira podatke (modrega) temperaturnega gumba na pin D0, če 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]'); % Uporabniško ime pošiljatelja setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Podporniki gesla pošiljatelja = 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 ali %.1f ° F.', temp_C, temp_F)); % Prejemniku pošlje e-poštno sporočilo s podatki o trenutni sobni temperaturi. % Spremeni temperaturo na termostatu na 65 ° F, sicer temp_F <= 65 % Če se sobna temperatura zniža na 60 ° F … temp_AC = 80; % Spremeni temperaturo na termostatu na 80 ° F konec konca % Konec "SWITCH == 0" medtem ko je zanka, če je napajanje == "izklopljeno" || ii == 1 % Zapre "power == on" medtem ko konec prekinitve zanke % End "power == on" while loop če je power == "off" || ii == 1 % Zapušča celoten konec prekinitve zanke

To je bil le kratek pregled kode in njene funkcionalnosti. Po potrebi smo priložili celotno kodo kot pdf

Tu je seznam, v katera vrata je priključena vsaka naprava

1. LED RGB: digitalni zatiči (7, 8, 9)

2. Servo: digitalni pin 6

3. Gumbi: digitalni zatiči (1, 2, 3, 4, 5)

4. Modri gumb za e -pošto: digitalni pin 0

5. Temperaturni senzor: analogni pin 1

6. Stikalo: digitalni pin 11

Priporočena: