Sommario:

Microcontrollore controllato MATLAB (Arduino MKR1000): 4 passaggi
Microcontrollore controllato MATLAB (Arduino MKR1000): 4 passaggi

Video: Microcontrollore controllato MATLAB (Arduino MKR1000): 4 passaggi

Video: Microcontrollore controllato MATLAB (Arduino MKR1000): 4 passaggi
Video: 1. Installing Matlab Arduino support Packages 2024, Luglio
Anonim
Microcontrollore controllato MATLAB (Arduino MKR1000)
Microcontrollore controllato MATLAB (Arduino MKR1000)

L'obiettivo del nostro progetto era utilizzare MATLAB e Arduino MKR1000 al meglio delle nostre capacità. Il nostro obiettivo era creare uno script che consentisse a determinate funzionalità di arduino di eseguire un determinato output in base a un input specifico. Abbiamo usato molti cicli e istruzioni condizionali presenti in MATLAB che lo hanno reso possibile. Abbiamo anche utilizzato MATLAB mobile utilizzando i dati acquisiti dal giroscopio di un dispositivo mobile per migliorare il progetto il più possibile.

Passaggio 1: parti e materiali

Parti e materiali
Parti e materiali
Parti e materiali
Parti e materiali
Parti e materiali
Parti e materiali

MATLAB 2018a

-La versione 2018 di MATLAB è la versione più preferita, soprattutto perché funziona meglio con il codice che si connette al dispositivo mobile. Tuttavia, la maggior parte del nostro codice può essere interpretata dalla maggior parte delle versioni di MATLAB.

Arduino MKR1000

-Questo è un dispositivo specifico che ci consente di cablare circuiti fino a porte sia digitali che analogiche. È fondamentale che tu abbia anche una breadboard per accompagnarlo.

Accessori

-Quando si utilizza il MKR1000, abbiamo bisogno di parti accessorie per eseguire le funzioni necessarie.

Ciò comprende

  1. Servo
  2. Pulsante (6)
  3. Luce LED RGB intercambiabile
  4. Fili semplici
  5. tagliere/e
  6. mini interruttore di alimentazione
  7. termometro
  8. Resistenza da 330 ohm
  9. Resistore da 10K ohm
  10. Cavo USB-microUSB
  11. Computer portatile/desktop
  12. Dispositivo mobile

Va anche notato che ci sono molti, molti altri accessori che possono essere utilizzati con il MKR1000

Passaggio 2: pacchetto di supporto Arduino MATLAB

Per utilizzare correttamente Arduino MKR1000 tramite MATLAB, è necessario scaricare il pacchetto di supporto MATLAB per l'hardware Arduino. Questo download ti dà accesso a determinate funzioni e comandi direttamente sulla scheda arduino.

Puoi scaricare il pacchetto al link sottostante

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

Passaggio 3: utilizzo dei sensori di dati acquisiti dal dispositivo mobile

Utilizzo di sensori di dati acquisiti da dispositivi mobili
Utilizzo di sensori di dati acquisiti da dispositivi mobili

L'app MATLAB Mobile ci consente di utilizzare un dispositivo mobile per lo streaming di dati utilizzando il suo giroscopio. Per acquisire i dati tramite MATLAB, otteniamo i dati recuperandoli dalla matrice di orientamento da MATLAB mobile. Lo facciamo creando una variabile per ogni colonna della matrice di orientamento (Azimut, Pitch e Roll) e indicizzando il flusso costante di valori dal dispositivo mobile al computer. Questo ci consente di creare dichiarazioni condizionali che eseguiranno un output se MATLAB rileva uno specifico input di dati dal dispositivo mobile. Per fare ciò, avrai bisogno di MATLAB mobile sul tuo dispositivo mobile e del pacchetto di supporto per dispositivi mobili per MATLAB sul tuo computer.

Puoi scaricare il file al link sottostante

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

Passaggio 4: il codice e le porte di cablaggio

Il codice inizia con un messaggio di avvio che chiede se vogliamo avviare il nostro dispositivo di sicurezza domestica. Se rispondiamo di sì e diamo il passcode corretto, lo script salta immediatamente in un ciclo while. Da lì, inizia a raccogliere dati dal dispositivo mobile. Ci sono condizionali che leggono questi dati. Possiamo sbloccare e bloccare il sistema dal nostro dispositivo mobile e il codice girerà il servo e lampeggerà la luce LED a seconda dei dati forniti dal dispositivo mobile

startup = questdlg('Vuoi attivare ecoTECH Smart Home Energy System?'); % Inizia la sequenza di attivazione di ecoTECHwaitfor(startup); if startup == "Sì" % Se è selezionato "Sì" inizia una sequenza di attivazione ed entra nel ciclo while alla fine power = "on"; m1 = msgbox('Avvio ecoTECH…'); pausa(2); cancella(m1); m1_wait = waitbar(0, 'Attendere prego…'); passi = 25; for i = 1:passi pausa(.1); barra di attesa(i/passi); % Aggiorna la barra di attesa end delete(m1_wait); PASSCODE = [0 0 0 0]; % Inizializza il passcode ii = 0; % Inizializza una variabile usata per uscire dai cicli m2 = msgbox('ecoTECH completamente operativo!'); pausa(2); cancella(m2); elseif avvio == "No" || startup == "Annulla" % Se è selezionato "No" o "Annulla" la sequenza di attivazione non si avvia e non entra nel ciclo while power = "off"; m3 = msgbox('Ok! Arrivederci!'); pausa(2); cancella(m3); fine

% ecoTECH in Action Section while true while power == "on" % Mobile Key Section while true % Raccoglie i dati sull'orientamento del Roll del dispositivo mobile KEY = m. Orientation(3); % Raccoglie i dati sui pulsanti b2 = readDigitalPin(a, 'D2'); % Pulsante 2 (Rosso) b3 = readDigitalPin(a, 'D3'); % Pulsante 3 (Bianco) se KEY >= 35 % in gradi m4 = msgbox('Benvenuto a casa!'); writeDigitalPin(a, 'D8', 1); % Accende la pausa luce verde(.5); writePosition(s, 1); % Ruota il servo per sbloccare la pausa della porta(2); writeDigitalPin(a, 'D8', 0); % Spegne la luce verde delete(m4); elseif KEY <= -35 % in gradi m5 = msgbox('Porta chiusa!'); writeDigitalPin(a, 'D7', 1); % Accende la pausa luce rossa(.5); writePosition(s, 0); % Ruota il servo per bloccare la pausa della porta(2); writeDigitalPin(a, 'D7', 0); % Spegne la luce rossa cancella(m5); ii = 1; break % Esce dal loop while contenente la chiave mobile se la porta è bloccata utilizzando il dispositivo mobile elseif b2 == 0 && b3 == 0 % Esce dal loop while contenente la chiave mobile per entrare nella sezione del passcode break end end

Dopo questo, può entrare in un altro ciclo while. Questo ciclo while controlla i risultati in base agli input dai pulsanti. Se il primo ciclo while è trascurabile o è richiesto un blocco manuale, entrerà in un altro ciclo while in cui è necessaria una password specifica. Se la password non è corretta, riavvierà il ciclo

while true se ii == 1 % Esce dal ciclo while contenente il passcode se la porta è stata sbloccata con il dispositivo mobile break end % Raccoglie i dati sui pulsanti b5 = readDigitalPin(a, 'D5'); % Pulsante 5 (Blu) b1 = readDigitalPin(a, 'D1'); % Pulsante 1 (Nero) b4 = readDigitalPin(a, 'D4'); % Pulsante 4 (bianco) se b5 == 0 % Avvia la sezione di immissione del codice di accesso per b = 1:5 m6 = msgbox('Premere e tenere premuto un pulsante'); pausa(2); cancella(m6); % Raccoglie i dati sui pulsanti b1 = readDigitalPin(a, 'D1'); % Pulsante 1 (Nero) b2 = readDigitalPin(a, 'D2'); % Pulsante 2 (Rosso) b3 = readDigitalPin(a, 'D3'); % Pulsante 3 (Bianco) b4 = readDigitalPin(a, 'D4'); % Pulsante 4 (Giallo) b5 = readDigitalPin(a, 'D5'); % Pulsante 5 (Blu) % Sostituisce uno alla volta i valori del passcode iniziale se 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)); % Trasforma la sequenza di pulsanti premuti in numeri, quindi la converte in una stringa end end % End of loop per l'immissione delle cifre per il passcode if PASSCODE == "2314" % Se il passcode inserito corrisponde, la porta si sblocca per alcuni secondi e poi si blocca m7 = msgbox('Bentornato a casa!'); writeDigitalPin(a, 'D8', 1); % Accende la pausa luce verde(.5); writePosition(s, 1); % Ruota il servo per sbloccare la pausa della porta(5); writeDigitalPin(a, 'D8', 0); % Spegne la pausa luce verde(.1); writeDigitalPin(a, 'D7', 1); % Accende la pausa luce rossa(.5); writePosition(s, 0); % Ruota il servo per bloccare la pausa della porta(1); writeDigitalPin(a, 'D7', 0); % Spegne la luce rossa delete(m7); ii = 1; break % Esce dal ciclo while contenente il passcode dopo aver inserito il passcode corretto elseif PASSCODE ~= "2314" writeDigitalPin(a, 'D7', 1); % Accende la luce rossa m8 = msgbox('Passcode errato! Riprova!'); waitfor(m8) writeDigitalPin(a, 'D7', 0); % Spegne la luce rossa continua % Ti permette di reinserire un passcode end elseif b1 == 0 && b4 == 0 % Esce dal ciclo while contenente la sezione del passcode se non vuoi inserire un passcode ii = 1; fine fine fine

Se corretto, entrerà immediatamente in un ciclo while che controlla il sensore di temperatura. Se l'interruttore è acceso, il ciclo continuerà e traccierà il grafico della temperatura in funzione del tempo, consentendo di visualizzare l'andamento. Se viene premuto il pulsante collegato al sensore di temperatura, ti invierà anche una mail che ti dice qual è la temperatura nella tua "casa". Se l'interruttore è spento, terminerà immediatamente il codice

t = 0; % Tempo iniziale = pausa di 0 secondi(5) % Dà il tempo all'utente di accendere l'interruttore della temperatura SWITCH = readDigitalPin(a, 'D11'); % Raccoglie i dati sullo switch nel pin D11 mentre SWITCH == 0 SWITCH = readDigitalPin(a, 'D11'); % Raccoglie i dati sull'interruttore nel pin D11 voltage = readVoltage(a, 'A1'); % Legge la tensione dal sensore di temperatura temp_C = (tensione.*1000 - 500)./10; % Converte la tensione in temperatura in °C temp_F = (9/5).*temp_C + 32; % Converte da °C a °F plot(t, temp_C, 'b.') hold on title('Room Temperature'); xlabel('Tempo in Secondi'); ylabel('Temperatura'); asse([0, 180, 0, 100]); plot(t, temp_F, 'r.') legend('Temperature in °C', 'Temperature in °F') pause(1); t = t + 1; % Contatore del tempo in secondi % Sezione e-mail b_temp = readDigitalPin(a, 'D0'); % Raccoglie i dati del pulsante (blu) della temperatura nel pin D0 if b_temp == 0 setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('Internet', 'E_mail', '[email protected]'); % Mittente setpref('Internet', 'SMTP_Username', '[email protected]'); % Nome utente del mittente setpref('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % password del mittente props = 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 Room Temperature', sprintf('La temperatura ambiente attuale è %.1f °C o %.1f °F.', temp_C, temp_F)); % Invia una e-mail al destinatario fornendo i dati sulla temperatura ambiente corrente fprintf('E-mail inviata con successo!\n') end if temp_F >= 75 % Se la temperatura ambiente sale a 75 °F… temp_AC = 65; % Cambia la temperatura sul termostato a 65 °F altrimenti se temp_F <= 65 % Se la temperatura ambiente scende a 60 °F… temp_AC = 80; % Cambia la temperatura sul termostato a 80 °F end end % End of "SWITCH == 0" while loop if power == "off" || ii == 1 % Esce da "power == on" while loop break end end % Fine del loop "power == on" while if power == "off" || ii == 1 % Esce dall'intero ciclo while break end

Questa era solo una breve panoramica del codice e della sua funzionalità. Se necessario, abbiamo allegato il codice completo in formato pdf

Ecco l'elenco delle porte a cui è collegato ciascun dispositivo

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

2. Servo: pin digitale 6

3. Pulsanti: pin digitali (1, 2, 3, 4, 5)

4. Pulsante blu per e-mail: Pin digitale 0

5. Sensore di temperatura: pin analogico 1

6. Interruttore: pin digitale 11

Consigliato: