Sadržaj:
Video: MATLAB kontrolirani mikrokontroler (Arduino MKR1000): 4 koraka
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
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
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
- Servo
- Gumb (6)
- Izmjenjivo RBG LED svjetlo
- Jednostavne žice
- matična ploča
- mini prekidač za napajanje
- senzor temperature
- Otpornik od 330 ohma
- 10K ohmski otpornik
- USB-microUSB kabel
- Laptop/desktop
- 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
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