Sommario:
- Passaggio 1: parti e materiali
- Passaggio 2: pacchetto di supporto Arduino MATLAB
- Passaggio 3: utilizzo dei sensori di dati acquisiti dal dispositivo mobile
- Passaggio 4: il codice e le porte di cablaggio
Video: Microcontrollore controllato MATLAB (Arduino MKR1000): 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
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
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
- Servo
- Pulsante (6)
- Luce LED RGB intercambiabile
- Fili semplici
- tagliere/e
- mini interruttore di alimentazione
- termometro
- Resistenza da 330 ohm
- Resistore da 10K ohm
- Cavo USB-microUSB
- Computer portatile/desktop
- 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
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:
Motore passo-passo controllato da motore passo-passo senza microcontrollore!: 6 passaggi
Motore passo-passo controllato da motore passo-passo senza microcontrollore!: In questo rapido Instructable, creeremo un semplice controller per motore passo-passo utilizzando un motore passo-passo. Questo progetto non richiede circuiti complessi o un microcontrollore. Quindi, senza ulteriori indugi, iniziamo
Motore passo-passo controllato da motore passo-passo senza microcontrollore (V2): 9 passaggi (con immagini)
Motore passo-passo controllato da motore passo-passo senza microcontrollore (V2): in uno dei miei precedenti Instructables, ti ho mostrato come controllare un motore passo-passo usando un motore passo-passo senza microcontrollore. È stato un progetto veloce e divertente, ma è arrivato con due problemi che verranno risolti in questo Instructable. Quindi, spirito
Roomba controllato da MATLAB: 5 passaggi
MATLAB Controlled Roomba: l'obiettivo di questo progetto è utilizzare MATLAB e un robot programmabile iRobot modificato. Il nostro gruppo ha unito le nostre capacità di codifica per creare uno script MATLAB che utilizza molte funzioni di iRobot, inclusi i sensori di dislivello, i sensori di paraurti
Configurazione dei fusibili del microcontrollore AVR. Creazione e caricamento nella memoria flash del microcontrollore del programma di lampeggio dei LED.: 5 passaggi
Configurazione dei fusibili del microcontrollore AVR. Creazione e caricamento nella memoria flash del microcontrollore del LED lampeggiante Program.: In questo caso creeremo un semplice programma in codice C e lo masterizzeremo nella memoria del microcontrollore. Scriveremo il nostro programma e compileremo il file esadecimale, utilizzando Atmel Studio come piattaforma di sviluppo integrata. Configurare il fusibile bi
Come realizzare un robot mobile controllato - Basato su DTMF - Senza microcontrollore e programmazione - Controllo da qualsiasi parte del mondo - RoboGeeks: 15 passaggi
Come realizzare un robot mobile controllato | Basato su DTMF | Senza microcontrollore e programmazione | Controllo da qualsiasi parte del mondo | RoboGeeks: Vuoi creare un robot che possa essere controllato da qualsiasi parte del mondo, facciamolo