Obsah:

Riadený mikrokontrolér MATLAB (Arduino MKR1000): 4 kroky
Riadený mikrokontrolér MATLAB (Arduino MKR1000): 4 kroky

Video: Riadený mikrokontrolér MATLAB (Arduino MKR1000): 4 kroky

Video: Riadený mikrokontrolér MATLAB (Arduino MKR1000): 4 kroky
Video: Enciende y Apaga un Led con Arduino UNO 2024, November
Anonim
Riadený mikrokontrolér MATLAB (Arduino MKR1000)
Riadený mikrokontrolér MATLAB (Arduino MKR1000)

Cieľom nášho projektu bolo čo najlepšie využiť MATLAB a Arduino MKR1000. Našim cieľom bolo vytvoriť skript, ktorý umožní určitým funkciám arduina dosiahnuť určitý výstup na základe konkrétneho vstupu. Použili sme mnoho slučiek a podmienených príkazov uvedených v programe MATLAB, ktoré to umožnili. Tiež sme použili MATLAB mobile pomocou údajov získaných z gyroskopu mobilného zariadenia, aby sme projekt čo najviac vylepšili.

Krok 1: Diely a materiály

Diely a materiály
Diely a materiály
Diely a materiály
Diely a materiály
Diely a materiály
Diely a materiály

MATLAB 2018a

-Verzia MATLABu pre rok 2018 je najpreferovanejšou verziou, väčšinou preto, že najlepšie funguje s kódom, ktorý sa pripája k mobilnému zariadeniu. Väčšinu nášho kódu však môže interpretovať väčšina verzií MATLAB.

Arduino MKR1000

-Toto je špecifické zariadenie, ktoré nám umožňuje zapojiť obvody do digitálnych aj analógových portov. Je nevyhnutné, aby ste k nemu mali aj chlebovú dosku.

Príslušenstvo

-Pri použití MKR1000 sme potrebovali príslušenstvo, aby sme mohli vykonávať potrebné funkcie.

Toto zahŕňa

  1. Servo
  2. Tlačidlo (6)
  3. Vymeniteľné LED svetlo RBG
  4. Jednoduché drôty
  5. doska na pečenie
  6. mini vypínač
  7. teplotný senzor
  8. Odpor 330 ohmov
  9. Rezistor 10K ohmov
  10. USB-microUSB kábel
  11. Notebook/stolný počítač
  12. Mobilné zariadenie

Je tiež potrebné poznamenať, že existuje mnoho, oveľa viac príslušenstva, ktoré je možné použiť s MKR1000

Krok 2: Balíček podpory MATLAB Arduino

Aby ste mohli správne používať Arduino MKR1000 prostredníctvom MATLAB, musíte si stiahnuť podporný balík MATLAB pre hardvér Arduino. Toto stiahnutie vám umožní prístup k určitým funkciám a príkazom priamo na dosku arduino.

Balíček si môžete stiahnuť pomocou nižšie uvedeného odkazu

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

Krok 3: Používanie dátových senzorov získaných z mobilného zariadenia

Používanie dátových senzorov získaných z mobilného zariadenia
Používanie dátových senzorov získaných z mobilného zariadenia

Aplikácia MATLAB Mobile nám umožňuje používať mobilné zariadenie na streamovanie údajov pomocou jeho gyroskopu. Aby sme získali údaje prostredníctvom MATLABu, získavame údaje ich načítaním z orientačnej matice z MATLAB mobile. Vykonáme to tak, že pre každý stĺpec orientačnej matice (azimut, rozstup a zvitok) vytvoríme premennú a indexujeme konštantný tok hodnôt z mobilného zariadenia do počítača. To nám umožňuje vytvárať podmienené príkazy, ktoré vytvoria výstup, ak MATLAB vyzdvihne konkrétny vstup údajov z mobilného zariadenia. Na to budete potrebovať MATLAB mobile na svojom mobilnom zariadení a balík podpory mobilného zariadenia pre MATLAB na vašom počítači.

Súbor si môžete stiahnuť pomocou nižšie uvedeného odkazu

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

Krok 4: Kód a porty zapojenia

Kód začína správou pri spustení, ktorá sa pýta, či chceme spustiť naše domáce bezpečnostné zariadenie. Ak odpovieme áno a zadáme správny prístupový kód, skript okamžite skočí do cyklu while. Odtiaľ začne zhromažďovať údaje z mobilného zariadenia. Existujú podmienky, ktoré čítajú tieto údaje. Systém môžeme odomknúť a uzamknúť z nášho mobilného zariadenia a kód v závislosti od daných údajov z mobilného zariadenia zapne servo a začne blikať LED diódu

startup = questdlg ('Chcete aktivovať energetický systém smart home ecoTECH?'); % Začína sa aktivačná sekvencia ecoTECHwaitfor (spustenie); ak je spustenie == "Áno" % Ak je zvolené "Áno", spustí sa aktivačná sekvencia a na konci vstúpi do slučky while power = "zapnuté"; m1 = msgbox ('Spustenie systému ecoTECH …'); pauza (2); vymazať (m1); m1_wait = čakacia lišta (0, 'Čakajte prosím …'); kroky = 25; pre i = 1: pauza krokov (.1); čakacia lišta (i/kroky); % Aktualizuje odstránenie konca čakacej lišty (m1_wait); PASSCODE = [0 0 0 0]; % Inicializuje prístupový kód ii = 0; % Inicializuje premennú použitú na vyradenie zo slučiek m2 = msgbox ('ecoTECH plne funkčný!'); pauza (2); vymazať (m2); elseif spustenie == "Nie" || startup == "Zrušiť" % Ak je zvolené "Nie" alebo "Zrušiť", aktivačná sekvencia sa nespustí a nevstúpi do napájacej slučky while = "vypnuté"; m3 = msgbox ('Dobre! Zbohom!'); pauza (2); vymazať (m3); koniec

% ecoTECH v akčnej sekcii, kým je pravdivé, kým je napájanie == "zapnuté" % je v sekcii mobilného kľúča, zatiaľ čo je pravda % % Zhromažďuje údaje o tlačidlách b2 = readDigitalPin (a, 'D2'); % Tlačidlo 2 (červené) b3 = readDigitalPin (a, 'D3'); % Tlačidlo 3 (biele), ak je KĽÚČ>> 35 % v stupňoch m4 = msgbox („vitajte doma!“); writeDigitalPin (a, 'D8', 1); % Zapne pauzu zeleného svetla (.5); writePosition (s, 1); % Otáča servomotorom, aby sa odomkla pauza dverí (2); writeDigitalPin (a, 'D8', 0); % Vypne vymazanie zeleného svetla (m4); elseif KĽÚČ <= -35 % v stupňoch m5 = msgbox ('Dvere zamknuté!'); writeDigitalPin (a, 'D7', 1); % Zapne pozastavenie červeného svetla (.5); writePosition (s, 0); % Otočí servomotor, aby zablokoval pozastavenie dverí (2); writeDigitalPin (a, 'D7', 0); % Vypína mazanie červeného svetla (m5); ii = 1; break % Odíde zo slučky obsahujúcej mobilný kľúč, ak sú dvere uzamknuté pomocou mobilného zariadenia elseif b2 == 0 && b3 == 0 % Odíde zo slučky obsahujúcej mobilný kľúč na zadanie prístupového kódu koniec sekcie koniec konca

Potom môže vstúpiť do ďalšej slučky while. Táto slučka zatiaľ kontroluje výsledky na základe vstupov z tlačidiel. Ak je prvá slučka while zanedbateľná alebo je požadované manuálne uzamknutie, vstúpi do ďalšej slučky while, kde je potrebné konkrétne heslo. Ak je heslo nesprávne, slučku reštartuje

pokiaľ je to pravda, ii == 1 % Ukončí slučku obsahujúcu prístupový kód, ak boli dvere odomknuté koncom prerušenia mobilného zariadenia % Zbiera údaje o tlačidlách b5 = readDigitalPin (a, 'D5'); % Tlačidlo 5 (modré) b1 = readDigitalPin (a, 'D1'); % Tlačidlo 1 (čierne) b4 = readDigitalPin (a, 'D4'); % Tlačidlo 4 (biele), ak b5 == 0 % Spustí zadávanie kódu zadaním sekcie pre b = 1: 5 m6 = msgbox („Stlačte a podržte tlačidlo A“); pauza (2); vymazať (m6); % Zhromažďuje údaje o tlačidlách b1 = readDigitalPin (a, 'D1'); % Tlačidlo 1 (čierne) b2 = readDigitalPin (a, 'D2'); % Tlačidlo 2 (červené) b3 = readDigitalPin (a, 'D3'); % Tlačidlo 3 (biele) b4 = readDigitalPin (a, 'D4'); % Tlačidlo 4 (žlté) b5 = readDigitalPin (a, 'D5'); Tlačidlo % 5 (modré) % Nahrádza hodnoty v počiatočnom prístupovom kóde jeden po druhom, ak 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)); % Otočí postupnosť tlačidiel stlačených na čísla a potom ich prevedie na koniec reťazca % Koniec cyklu pre zadávanie číslic pre prístupový kód, ak PASSCODE == "2314" % Ak sa zadaný prístupový kód zhoduje, dvere sa na niekoľko sekúnd odomknú a potom sa uzamknú m7 = msgbox ('Vitajte doma!'); writeDigitalPin (a, 'D8', 1); % Zapne pauzu zeleného svetla (.5); writePosition (s, 1); % Otáča servomotorom, aby sa odomkla pauza dverí (5); writeDigitalPin (a, 'D8', 0); % Vypne pauzu zeleného svetla (.1); writeDigitalPin (a, 'D7', 1); % Zapne pozastavenie červeného svetla (.5); writePosition (s, 0); % Otočí servomotor, aby zablokoval pozastavenie dverí (1); writeDigitalPin (a, 'D7', 0); % Vypne vymazanie červeného svetla (m7); ii = 1; break % Ukončí cyklus obsahujúci prístupový kód po zadaní správneho prístupového kódu elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Zapne červené svetlo m8 = msgbox ('Nesprávny prístupový kód! Skúste to znova!'); čakať na (m8) writeDigitalPin (a, 'D7', 0); % Vypnúť červené svetlo pokračovať % Umožňuje vám znova zadať prístupový kód, inak b1 == 0 && b4 == 0 % Opustí slučku obsahujúcu sekciu s prístupovým kódom, ak nechcete zadať prístupový kód ii = 1; koniec konca konca

Ak je správny, okamžite vstúpi do slučky, ktorá ovláda snímač teploty. Ak je prepínač zapnutý, slučka bude pokračovať a vykresliť graf teploty oproti času, čo umožní trendu zobraziť. Ak stlačíte tlačidlo pripojené k snímaču teploty, odošle sa vám tiež e -mail s informáciou o teplote vo vašom „dome“. Ak je vypínač vypnutý, kód sa okamžite ukončí

t = 0; % Počiatočný čas = pauza 0 sekúnd (5) % Poskytuje používateľovi čas na zapnutie teplotného spínača SPÍNAČ = readDigitalPin (a, 'D11'); % Zhromažďuje údaje o prepínači na pine D11, zatiaľ čo SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Zhromažďuje údaje o prepínači v napätí na kolíku D11 = readVoltage (a, 'A1'); % Číta napätie z teplotného snímača teplota_C = (napätie.*1000 - 500)./ 10; % Konvertuje napätie na teplotu v ° C temp_F = (9/5).*Temp_C + 32; % Prevedie z grafu ° C na ° F (t, teplota_C, 'b.') Podržania titulu ('izbová teplota'); xlabel („Čas v sekundách“); ylabel („teplota“); os ([0, 180, 0, 100]); pozastavenie grafu (t, temp_F, 'r.') ('Teplota v ° C', 'Teplota v ° F') (1); t = t + 1; % Počítadlo času v sekundách % Časť e-mailu b_temp = readDigitalPin (a, 'D0'); % Zhromažďuje údaje (modrého) tlačidla teploty na kolíku D0, ak b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Sender setpref ('Internet', 'SMTP_Username', '[email protected]'); % Používateľské meno odosielateľa setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Rekvizity hesla odosielateľa = 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] ',' izbová teplota ecoTECH ', sprintf (' aktuálna izbová teplota je %.1f ° C alebo %.1f ° F. ', temp_C, temp_F)); % Pošle príjemcovi e-mail s údajmi o aktuálnom fprintf aktuálnej izbovej teploty ('E-mail bol úspešne odoslaný! / N') koniec, ak temp_F> = 75 % Ak sa izbová teplota zvýši na 75 ° F … temp_AC = 65; % Zmení teplotu na termostate na 65 ° F elseif teplota_F <= 65 % Ak teplota v miestnosti klesne na 60 ° F … teplota_AC = 80; % Zmení teplotu na termostate na koncový koniec 80 ° F % Koniec „SPÍNAČA == 0“počas cyklu, ak je napájanie == „vypnuté“|| ii == 1 % Ukončí "napájanie == zapnuté" pri konci prerušenia slučky % Koniec "napájania == zapnuté" pri slučke, ak je napájanie == "vypnuté" || ii == 1 % Ukončí sa celý, kým sa skončí koniec slučky

Toto bol len stručný prehľad kódu a jeho funkčnosti. V prípade potreby sme priložili celý kód vo formáte pdf

Tu je zoznam portov, ku ktorým sú jednotlivé zariadenia zapojené

1. RGB LED: digitálne piny (7, 8, 9)

2. Servo: digitálny kolík 6

3. Tlačidlá: Digitálne piny (1, 2, 3, 4, 5)

4. Modré tlačidlo pre e -mail: Digital Pin 0

5. Snímač teploty: analógový kolík 1

6. Prepínač: digitálny kolík 11

Odporúča: