Taula de continguts:

Microcontrolador controlat MATLAB (Arduino MKR1000): 4 passos
Microcontrolador controlat MATLAB (Arduino MKR1000): 4 passos

Vídeo: Microcontrolador controlat MATLAB (Arduino MKR1000): 4 passos

Vídeo: Microcontrolador controlat MATLAB (Arduino MKR1000): 4 passos
Vídeo: Amazing arduino project 2024, Desembre
Anonim
Microcontrolador controlat MATLAB (Arduino MKR1000)
Microcontrolador controlat MATLAB (Arduino MKR1000)

L’objectiu del nostre projecte era utilitzar MATLAB i l’Arduino MKR1000 al màxim de les nostres possibilitats. El nostre objectiu era crear un script que permetés a certes funcions de l’arduino realitzar una determinada sortida en funció d’una entrada específica. Hem utilitzat molts bucles i declaracions condicionals que apareixen a MATLAB que ho han fet possible. També hem utilitzat el mòbil MATLAB mitjançant l'ús de dades adquirides del giroscopi d'un dispositiu mòbil per millorar el projecte al màxim.

Pas 1: peces i materials

Peces i materials
Peces i materials
Peces i materials
Peces i materials
Peces i materials
Peces i materials

MATLAB 2018a

-La versió 2018 de MATLAB és la versió més preferida, sobretot perquè funciona millor amb el codi que es connecta al dispositiu mòbil. Tanmateix, la majoria del nostre codi pot ser interpretat per la majoria de versions de MATLAB.

Arduino MKR1000

-Aquest és un dispositiu específic que ens permet connectar circuits fins a ports digitals i anàlegs. És vital que també tingueu una taula de treball per acompanyar-la.

Accessoris

-En utilitzar el MKR1000, necessitàvem peces accessòries per poder realitzar les funcions necessàries.

Això inclou

  1. Servo
  2. Botó (6)
  3. Llum LED intercanviable RBG
  4. Cables simples
  5. taulers
  6. mini interruptor d’alimentació
  7. sensor de temperatura
  8. Resistència de 330 ohm
  9. Resistència de 10K ohm
  10. Cable USB-microUSB
  11. Ordinador portàtil / escriptori
  12. Dispositiu mòbil

També cal destacar que hi ha molts, molts més accessoris que es poden utilitzar amb el MKR1000

Pas 2: paquet de suport MATLAB Arduino

Per utilitzar correctament l'Arduino MKR1000 mitjançant MATLAB, heu de descarregar el paquet de suport MATLAB per al maquinari Arduino. Aquesta descàrrega us permet accedir a determinades funcions i ordres directament a la placa arduino.

Podeu descarregar el paquet a l’enllaç següent

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

Pas 3: utilitzar els sensors de dades adquirits des del dispositiu mòbil

Ús de sensors de dades adquirits des de dispositius mòbils
Ús de sensors de dades adquirits des de dispositius mòbils

L’aplicació MATLAB Mobile ens permet utilitzar un dispositiu mòbil per transmetre dades mitjançant el seu giroscopi. Per adquirir les dades mitjançant MATLAB, les obtenim recuperant-les de la matriu d’orientació de MATLAB mòbil. Ho fem creant una variable per a cada columna de la matriu d’orientació (Azimut, Pitch i Roll) i indexant el flux constant de valors del dispositiu mòbil a l’ordinador. Això ens permet crear sentències condicionals que preformaran una sortida si MATLAB recull una entrada de dades específica del dispositiu mòbil. Per fer-ho, necessitareu MATLAB mòbil al vostre dispositiu mòbil i el paquet de suport per a dispositius mòbils de MATLAB al vostre ordinador.

Podeu descarregar el fitxer a l’enllaç següent

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

Pas 4: el codi i els ports de cablejat

El codi comença amb un missatge d’inici que ens pregunta si volem engegar el nostre dispositiu de seguretat domèstic. Si responem que sí i donem la contrasenya correcta, l'script salta immediatament en un bucle de temps. A partir d’aquí comença a recopilar dades del dispositiu mòbil. Hi ha condicionants que llegeixen aquestes dades. Podem desbloquejar i bloquejar el sistema des del nostre dispositiu mòbil i el codi farà girar el servo i parpellejarà la llum LED en funció de les dades donades del dispositiu mòbil

startup = questdlg ('Voleu activar el sistema energètic intel·ligent per a la llar ecoTECH?'); % Comença la seqüència d'activació de ecoTECHwaitfor (inici); si s'inicia == "Sí"% Si se selecciona "Sí", comença una seqüència d'activació i entra al bucle while al final power = "on"; m1 = msgbox ('Iniciant ecoTECH …'); pausa (2); esborrar (m1); m1_wait = barra d'espera (0, "Si us plau, espereu …"); passos = 25; per a i = 1: pausa de passos (.1); barra d'espera (i / steps); % Actualitza la supressió final de la barra d'espera (m1_wait); PASSCODE = [0 0 0 0]; % Inicialitza la contrasenya ii = 0; % Inicialitza una variable que s'utilitza per sortir dels bucles m2 = msgbox ('ecoTECH completament operatiu!'); pausa (2); esborrar (m2); elseif startup == "No" || startup == "Cancel"% Si se selecciona "No" o "Cancel", la seqüència d'activació no s'inicia i no entra al bucle while power = "off"; m3 = msgbox ('D'acord! Adéu!'); pausa (2); esborrar (m3); final

% ecoTECH a la secció d'acció mentre és cert mentre el poder == "activat"% Secció de tecles mòbils mentre és cert% Recopila dades sobre l'orientació de rotació del dispositiu mòbil KEY = m. Orientation (3); % Recull dades sobre els botons b2 = readDigitalPin (a, 'D2'); % Botó 2 (vermell) b3 = readDigitalPin (a, 'D3'); % Botó 3 (blanc) si CLAU = = 35% en graus m4 = msgbox ('Benvingut a casa!'); writeDigitalPin (a, 'D8', 1); % Activa la pausa de llum verda (, 5); writePosition (s, 1); % Gira el servo per desbloquejar la pausa de la porta (2); writeDigitalPin (a, 'D8', 0); % Apaga l'eliminació del llum verd (m4); elseif KEY <= -35% en graus m5 = msgbox ('Porta tancada!'); writeDigitalPin (a, 'D7', 1); % Activa la pausa del llum vermell (.5); writePosition (s, 0); % Gira el servo per bloquejar la pausa de la porta (2); writeDigitalPin (a, 'D7', 0); % Apaga la supressió de llum vermella (m5); ii = 1; break% Surt mentre el bucle conté clau mòbil si la porta està bloquejada mitjançant el dispositiu mòbil elseif b2 == 0 && b3 == 0% Surt mentre el bucle conté clau mòbil per entrar a la secció de contrasenya

Després d'això, pot entrar en un altre bucle while. Això mentre el bucle controla els resultats en funció de les entrades dels botons. Si el primer bucle while és insignificant o es requereix un bloqueig manual, s'introduirà un altre bucle while on sigui necessària una contrasenya específica. Si la contrasenya és incorrecta, es reiniciarà el bucle

mentre és cert si ii == 1% Surt mentre el bucle conté contrasenya si la porta es va desbloquejar amb la ruptura del dispositiu mòbil% Recopila dades sobre els botons b5 = readDigitalPin (a, 'D5'); % Botó 5 (blau) b1 = readDigitalPin (a, 'D1'); % Botó 1 (negre) b4 = readDigitalPin (a, 'D4'); % Botó 4 (blanc) si b5 == 0% Inicia la secció d'inici de contrasenya per a b = 1: 5 m6 = msgbox ("Si us plau, mantingueu premut un botó"); pausa (2); esborrar (m6); % Recull dades sobre els botons b1 = readDigitalPin (a, 'D1'); % Botó 1 (negre) b2 = readDigitalPin (a, 'D2'); % Botó 2 (vermell) b3 = readDigitalPin (a, 'D3'); % Botó 3 (blanc) b4 = readDigitalPin (a, 'D4'); % Botó 4 (groc) b5 = readDigitalPin (a, 'D5'); % Botó 5 (blau)% Substitueix els valors de la contrasenya inicial un per un si 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)); % Converteix la seqüència de botons premuts en números i després la converteix en un extrem de cadena. m7 = msgbox ('Benvingut a casa!'); writeDigitalPin (a, 'D8', 1); % Activa la pausa de llum verda (, 5); writePosition (s, 1); % Gira el servo per desbloquejar la pausa de la porta (5); writeDigitalPin (a, 'D8', 0); % Desactiva la pausa de llum verda (.1); writeDigitalPin (a, 'D7', 1); % Activa la pausa del llum vermell (.5); writePosition (s, 0); % Gira el servo per bloquejar la pausa de la porta (1); writeDigitalPin (a, 'D7', 0); % Apaga la supressió de llum vermella (m7); ii = 1; break% Surt mentre el bucle conté una contrasenya després d'introduir la contrasenya correcta elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Encén el llum vermell m8 = msgbox ('Contrasenya incorrecta! Torneu-ho a provar!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Apaga la llum vermella continua% Permet tornar a introduir una contrasenya final elseif b1 == 0 && b4 == 0% Surt mentre el bucle conté una secció de contrasenya si no voleu introduir una contrasenya ii = 1; trencament final final

Si és correcte, entrarà immediatament en un bucle while que controla el sensor de temperatura. Si l'interruptor està activat, el bucle continuarà i traçarà la representació de temperatura i temps, cosa que permetrà veure la tendència. Si es prem el botó connectat al sensor de temperatura, també us enviarà un missatge de correu electrònic indicant-vos quina temperatura hi ha a casa vostra. Si l’interruptor està desactivat, acabarà immediatament el codi

t = 0; % Temps inicial = 0 segons de pausa (5)% Dóna temps a l'usuari per activar l'interruptor de temperatura SWITCH = readDigitalPin (a, 'D11'); % Recull dades sobre l'interruptor del pin D11 mentre SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Recull dades sobre el commutador al voltatge del pin D11 = readVoltage (a, 'A1'); % Llegeix el voltatge del sensor de temperatura temp_C = (voltatge. * 1000 - 500)./ 10; % Converteix el voltatge en temperatura en ° C temp_F = (9/5). * Temp_C + 32; % Converteix el traçat de ° C a ° F (t, temp_C, 'b.') Retingut al títol ('Temperatura de l'habitació'); xlabel ('Temps en segons'); ylabel ('Temperatura'); eix ([0, 180, 0, 100]); gràfica (t, temp_F, 'r.') llegenda ('Temperatura en ° C', 'Temperatura en ° F') pausa (1); t = t + 1; % Comptador de temps en segons% Secció de correu electrònic b_temp = readDigitalPin (a, 'D0'); % Recull les dades del botó de temperatura (blau) al pin D0 si b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Sender setpref ('Internet', 'SMTP_Username', '[email protected]'); % Nom d'usuari del remitent setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); Props de la contrasenya del remitent% = 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 ambient ecoTECH ', sprintf (' La temperatura actual de l'habitació és%.1f ° C o%.1f ° F. ', temp_C, temp_F)); % Envia un missatge de correu electrònic al destinatari donant dades sobre la temperatura de l'habitació actual fprintf ('S'ha enviat un missatge de correu electrònic correctament! / N') finalitza si temp_F> = 75% Si la temperatura de l'habitació augmenta a 75 ° F … temp_AC = 65; % Canvia la temperatura del termòstat a 65 ° F, si la temperatura de l'habitació disminueix a 60 ° F … temp_AC = 80; % Canvia la temperatura del termòstat a l'extrem final de 80 ° F% Final de "SWITCH == 0" mentre es fa el bucle si == "s'apaga" || ii == 1% Surt de "power == on" mentre finalitza el tall de bucle% Final de "power == on" while loop if power == "off" || ii == 1% Surt complet mentre finalitza el salt del bucle

Aquesta va ser només una breu visió general del codi i la seva funcionalitat. Hem adjuntat el codi complet en format pdf si cal

Aquí teniu la llista de quin port està connectat cada dispositiu

1. LED RGB: pins digitals (7, 8, 9)

2. Servo: Pin digital 6

3. Botons: pins digitals (1, 2, 3, 4, 5)

4. Botó blau per correu electrònic: Pin digital 0

5. Sensor de temperatura: Pin analògic 1

6. Commutador: Pin digital 11

Recomanat: