Cuprins:

Microcontroler controlat MATLAB (Arduino MKR1000): 4 pași
Microcontroler controlat MATLAB (Arduino MKR1000): 4 pași

Video: Microcontroler controlat MATLAB (Arduino MKR1000): 4 pași

Video: Microcontroler controlat MATLAB (Arduino MKR1000): 4 pași
Video: Product Showcase: Arduino MKR1000 2024, Noiembrie
Anonim
Microcontroler controlat MATLAB (Arduino MKR1000)
Microcontroler controlat MATLAB (Arduino MKR1000)

Scopul proiectului nostru a fost să folosim MATLAB, precum și Arduino MKR1000, pe cât putem. Scopul nostru a fost să creăm un script care să permită anumitor caracteristici ale arduino să realizeze o anumită ieșire pe baza unei intrări specifice. Am folosit multe bucle și declarații condiționale prezentate în MATLAB care au făcut acest lucru posibil. De asemenea, am folosit MATLAB mobile folosind datele achiziționate de la giroscopul unui dispozitiv mobil pentru a îmbunătăți proiectul cât mai mult posibil.

Pasul 1: Piese și materiale

Piese și materiale
Piese și materiale
Piese și materiale
Piese și materiale
Piese și materiale
Piese și materiale

MATLAB 2018a

-Versiunea 2018 a MATLAB este cea mai preferată versiune, mai ales pentru că funcționează cel mai bine cu codul care se conectează la dispozitivul mobil. Cu toate acestea, majoritatea codului nostru poate fi interpretat de majoritatea versiunilor MATLAB.

Arduino MKR1000

-Acest este un dispozitiv specific care ne permite să conectăm circuite până la porturi digitale și analogice. Este vital să aveți, de asemenea, o placă de calcul pentru a merge împreună cu ea.

Accesorii

-Când foloseam MKR1000, aveam nevoie de piese accesorii pentru a îndeplini funcțiile necesare.

Aceasta include

  1. Servo
  2. Buton (6)
  3. Lumină LED RBG interschimbabilă
  4. Sârme simple
  5. panou (e)
  6. mini comutator de alimentare
  7. senzor de temperatura
  8. Rezistor de 330 ohmi
  9. Rezistor de 10K ohm
  10. Cablu USB-microUSB
  11. Laptop / desktop
  12. Dispozitiv mobil

De asemenea, trebuie remarcat faptul că există multe, multe alte accesorii care pot fi utilizate cu MKR1000

Pasul 2: Pachetul de asistență MATLAB Arduino

Pentru a utiliza corect Arduino MKR1000 prin MATLAB, trebuie să descărcați pachetul de asistență MATLAB pentru hardware Arduino. Această descărcare vă oferă acces la anumite funcții și comenzi direct pe placa arduino.

Puteți descărca pachetul de la linkul de mai jos

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

Pasul 3: Utilizarea senzorilor de date achiziționați de pe dispozitivul mobil

Utilizarea senzorilor de date achiziționați de pe dispozitivul mobil
Utilizarea senzorilor de date achiziționați de pe dispozitivul mobil

Aplicația MATLAB Mobile ne permite să folosim un dispozitiv mobil pentru a transmite în flux date folosind giroscopul său. Pentru a achiziționa datele prin MATLAB, obținem datele preluându-le din matricea de orientare de pe MATLAB mobile. Facem acest lucru creând o variabilă pentru fiecare coloană a matricei de orientare (Azimut, Pitch și Roll) și indexând fluxul constant de valori de pe dispozitivul mobil pe computer. Acest lucru ne permite să creăm declarații condiționale care vor preforma o ieșire dacă MATLAB preia o anumită intrare de date de pe dispozitivul mobil. Pentru a face acest lucru, veți avea nevoie de MATLAB mobil pe dispozitivul dvs. mobil și de pachetul de asistență pentru dispozitivul mobil pentru MATLAB pe computer.

Puteți descărca fișierul la linkul de mai jos

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

Pasul 4: Codul și porturile de cablare

Codul începe cu un mesaj de pornire care ne întreabă dacă vrem să pornim dispozitivul nostru de securitate la domiciliu. Dacă răspundem da și dăm codul de acces corect, scriptul sare imediat într-o buclă de timp. De acolo, începe să colecteze date de pe dispozitivul mobil. Există condiționalități care citesc aceste date. Putem debloca și bloca sistemul de pe dispozitivul nostru mobil, iar codul va transforma servo-ul și va clipi lumina LED în funcție de datele date de pe dispozitivul mobil

startup = questdlg („Doriți să activați sistemul ecoTECH Smart Home Energy System?”); % Începe secvența de activare a ecoTECHwaitfor (pornire); dacă pornire == "Da"% Dacă este selectat "Da" începe o secvență de activare și intră în bucla while la sfârșit power = "pornit"; m1 = msgbox ('Pornirea ecoTECH …'); pauză (2); șterge (m1); m1_wait = waitbar (0, 'Vă rugăm să așteptați …'); trepte = 25; pentru i = 1: pași pauză (.1); bara de așteptare (i / pași); % Actualizează ștergerea finală a barei de așteptare (m1_wait); COD DE PASĂ = [0 0 0 0]; % Inițializează codul de acces ii = 0; % Inițializează o variabilă utilizată pentru a ieși din bucle m2 = msgbox („ecoTECH pe deplin operațional!”); pauză (2); șterge (m2); elseif startup == "Nu" || pornire == "Anulare"% Dacă este selectat "Nu" sau "Anulare", atunci secvența de activare nu pornește și nu intră în bucla while power = "off"; m3 = msgbox ('Bine! La revedere!'); pauză (2); șterge (m3); Sfârșit

% ecoTECH în secțiunea de acțiune în timp ce este adevărat în timp ce putere == "pe"% Secțiunea cheie mobilă în timp ce este adevărată% Colectează date despre orientarea Roll a dispozitivului mobil KEY = m. Orientation (3); % Colectează date despre butoanele b2 = readDigitalPin (a, 'D2'); % Buton 2 (Roșu) b3 = readDigitalPin (a, 'D3'); % Buton 3 (alb) dacă CHEIE> = 35% în grade m4 = msgbox ('Welcome Home!'); writeDigitalPin (a, 'D8', 1); % Activează pauza de lumină verde (.5); writePosition (s, 1); % Întoarce servo pentru a debloca pauza ușii (2); writeDigitalPin (a, 'D8', 0); % Oprește ștergerea luminii verzi (m4); elseif CHEIE <= -35% în grade m5 = msgbox ('Ușă blocată!'); writeDigitalPin (a, 'D7', 1); % Activează pauza de lumină roșie (.5); writePosition (s, 0); % Întoarce servo pentru a bloca pauza ușii (2); writeDigitalPin (a, 'D7', 0); % Oprește ștergerea luminii roșii (m5); ii = 1; break% Ieșește în timp ce bucla conține cheie mobilă dacă ușa este blocată folosind dispozitivul mobil elseif b2 == 0 && b3 == 0% Iește în timp ce bucla conține cheie mobilă pentru a intra în secțiunea codului de acces sfârșitul sfârșitului pauză

După aceasta, poate introduce o altă buclă while. Aceasta în timp ce bucla controlează rezultatele pe baza intrărilor din butoane. Dacă prima buclă while este neglijabilă sau este necesară o blocare manuală, va introduce o altă buclă while în care este necesară o anumită parolă. Dacă parola este incorectă, va reporni bucla

în timp ce este adevărat dacă ii == 1% Iește în timp ce bucla conține cod de acces dacă ușa a fost deblocată odată cu sfârșitul dispozitivului mobil% Colectează date despre butoanele b5 = readDigitalPin (a, 'D5'); % Buton 5 (Albastru) b1 = readDigitalPin (a, 'D1'); % Buton 1 (Negru) b4 = readDigitalPin (a, 'D4'); % Buton 4 (alb) dacă b5 == 0% Pornește secțiunea de introducere a codului de acces pentru b = 1: 5 m6 = msgbox („Vă rugăm să apăsați și să țineți apăsat un buton”); pauză (2); șterge (m6); % Colectează date despre butoanele b1 = readDigitalPin (a, 'D1'); % Buton 1 (Negru) b2 = readDigitalPin (a, 'D2'); % Buton 2 (Roșu) b3 = readDigitalPin (a, 'D3'); % Buton 3 (alb) b4 = readDigitalPin (a, 'D4'); % Buton 4 (Galben) b5 = readDigitalPin (a, 'D5'); % Buton 5 (Albastru)% Înlocuiește valorile din parola inițială una câte una dacă b1 == 0 PASSCODE (0 + b) = 1; elseif b2 == 0 COD DE PASĂ (0 + b) = 2; elseif b3 == 0 COD DE PASĂ (0 + b) = 3; elseif b4 == 0 COD DE PASĂ (0 + b) = 4; elseif b5 == 0 PASSCODE = sprintf ('%. 0f%.0f%.0f%.0f', PASSCODE (1), PASSCODE (2), PASSCODE (3), PASSCODE (4)); % Transformă secvența butoanelor apăsate în numere apoi o convertește într-un capăt de șir de caractere% Sfârșitul buclei pentru introducerea cifrelor pentru codul de acces dacă PASSCODE == "2314"% Dacă codul de acces introdus se potrivește, ușa se deblochează câteva secunde, apoi se blochează m7 = msgbox ('Welcome Home!'); writeDigitalPin (a, 'D8', 1); % Activează pauza de lumină verde (.5); writePosition (s, 1); % Întoarce servo pentru a debloca pauza ușii (5); writeDigitalPin (a, 'D8', 0); % Dezactivează pauza de lumină verde (.1); writeDigitalPin (a, 'D7', 1); % Activează pauza de lumină roșie (.5); writePosition (s, 0); % Întoarce servo pentru a bloca pauza ușii (1); writeDigitalPin (a, 'D7', 0); % Oprește ștergerea luminii roșii (m7); ii = 1; break% Ieșește în timp ce bucla conține cod de acces după introducerea codului de acces corect elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Aprinde lumina roșie m8 = msgbox ('Parolă incorectă! Încercați din nou!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Oprește lumina roșie continuă% Vă permite să reintroduceți un sfârșit de parolă elseif b1 == 0 && b4 == 0% Ieși în bucla care conține secțiunea de parolă dacă nu doriți să introduceți o parolă ii = 1; pauză sfârșit sfârșit

Dacă este corect, va intra imediat într-o buclă de timp care controlează senzorul de temperatură. Dacă comutatorul este activat, bucla va continua și va reprezenta graficul în funcție de temperatură vs. Dacă este apăsat butonul conectat la senzorul de temperatură, acesta va trimite, de asemenea, un e-mail care vă va spune care este temperatura în „casa” dvs. Dacă comutatorul este oprit, acesta va termina imediat codul

t = 0; % Timp inițial = 0 secunde pauză (5)% Acordă timp utilizatorului să activeze comutatorul de temperatură SWITCH = readDigitalPin (a, 'D11'); % Colectează date despre comutatorul din pinul D11 în timp ce SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Colectează date despre comutatorul în tensiunea pin D11 = readVoltage (a, 'A1'); % Citește tensiunea de la senzorul de temperatură temp_C = (tensiune. * 1000 - 500)./ 10; % Convertește tensiunea în temperatură în ° C temp_F = (9/5). * Temp_C + 32; % Convertește de la ° C la ° F grafic (t, temp_C, 'b.') Așteptați titlul ('Temperatura camerei'); xlabel („Timp în secunde”); ylabel („Temperatură”); axa ([0, 180, 0, 100]); plot (t, temp_F, 'r.') legendă ('Temperatura în ° C', 'Temperatura în ° F') pauză (1); t = t + 1; % Contor de timp în secunde% Secțiunea e-mail b_temp = readDigitalPin (a, 'D0'); % Colectează datele butonului de temperatură (albastru) în pinul D0 dacă b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Sender setpref ('Internet', 'SMTP_Username', '[email protected]'); % Numele de utilizator al expeditorului setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Recuzită pentru parola expeditorului = 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] ',' temperatura camerei ecoTECH ', sprintf (' Temperatura curentă a camerei este%.1f ° C sau%.1f ° F. ', temp_C, temp_F)); % Trimite un e-mail destinatarului oferind date despre temperatura curentă a camerei fprintf („E-mail trimis cu succes! / N”) se termină dacă temp_F> = 75% Dacă temperatura camerei crește la 75 ° F … temp_AC = 65; % Schimbă temperatura termostatului la 65 ° F altfel dacă temp_F <= 65% Dacă temperatura camerei scade la 60 ° F … temp_AC = 80; % Schimbă temperatura termostatului la capătul de 80 ° F% Sfârșitul "SWITCH == 0" în timp ce bucla dacă puterea == "oprit" || ii == 1% Ieși din „alimentare == pornită” în timp ce sfârșitul pauzei de buclă se termină% Sfârșitul „putere == pornită” în timp ce bucla dacă puterea == „oprit” || ii == 1% Ieșește în întregime în timp ce sfârșitul pauzei de buclă

Aceasta a fost doar o scurtă prezentare generală a codului și funcționalității acestuia. Am atașat codul complet ca fișier pdf, dacă este necesar

Iată lista portului în care este conectat fiecare dispozitiv

1. LED RGB: pini digitali (7, 8, 9)

2. Servo: Pin digital 6

3. Butoane: Pinuri digitale (1, 2, 3, 4, 5)

4. Buton albastru pentru e-mail: Pin digital 0

5. Senzor de temperatură: Pin analogic 1

6. Comutator: Pin digital 11

Recomandat: