Índice:

Microcontrolador controlado MATLAB (Arduino MKR1000): 4 etapas
Microcontrolador controlado MATLAB (Arduino MKR1000): 4 etapas

Vídeo: Microcontrolador controlado MATLAB (Arduino MKR1000): 4 etapas

Vídeo: Microcontrolador controlado MATLAB (Arduino MKR1000): 4 etapas
Vídeo: Push button for LED 2024, Julho
Anonim
Microcontrolador controlado MATLAB (Arduino MKR1000)
Microcontrolador controlado MATLAB (Arduino MKR1000)

O objetivo de nosso projeto era utilizar o MATLAB, bem como o Arduino MKR1000, da melhor maneira possível. Nosso objetivo era criar um script que permitisse que certos recursos do arduino executassem uma determinada saída com base em uma entrada específica. Usamos muitos loops e instruções condicionais apresentadas no MATLAB que tornaram isso possível. Também usamos o MATLAB mobile usando dados adquiridos do giroscópio de um dispositivo móvel para aprimorar o projeto tanto quanto possível.

Etapa 1: peças e materiais

Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais

MATLAB 2018a

-A versão 2018 do MATLAB é a versão preferida, principalmente porque funciona melhor com o código que se conecta ao dispositivo móvel. No entanto, a maior parte do nosso código pode ser interpretada pela maioria das versões do MATLAB.

Arduino MKR1000

-Este é um dispositivo específico que nos permite conectar circuitos às portas digitais e analógicas. É vital que você também tenha uma placa de ensaio para acompanhá-lo.

Acessórios

-Ao usar o MKR1000, precisamos de peças acessórias para realizar as funções necessárias.

Isso inclui

  1. Servo
  2. Botão (6)
  3. Luz LED RBG intercambiável
  4. Fios Simples
  5. tábua (s) de pão
  6. mini interruptor de energia
  7. sensor de temperatura
  8. Resistor de 330 ohm
  9. Resistor de 10K ohm
  10. Cabo USB-microUSB
  11. Laptop / desktop
  12. Dispositivo móvel

Deve-se notar também que existem muitos, muitos mais acessórios que podem ser usados com o MKR1000

Etapa 2: Pacote de suporte MATLAB Arduino

Para usar corretamente o Arduino MKR1000 por meio do MATLAB, você deve baixar o pacote de suporte MATLAB para hardware Arduino. Este download dá acesso a certas funções e comandos diretamente para a placa arduino.

Você pode baixar o pacote no link abaixo

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

Etapa 3: usando sensores de dados adquiridos de dispositivo móvel

Usando sensores de dados adquiridos de dispositivo móvel
Usando sensores de dados adquiridos de dispositivo móvel

O aplicativo MATLAB Mobile nos permite usar um dispositivo móvel para transmitir dados usando seu giroscópio. Para adquirir os dados por meio do MATLAB, obtemos os dados recuperando-os da matriz de orientação do MATLAB móvel. Fazemos isso criando uma variável para cada coluna da matriz de orientação (azimute, inclinação e rotação) e indexando o fluxo constante de valores do dispositivo móvel para o computador. Isso nos permite criar declarações condicionais que irão pré-formar uma saída se o MATLAB pegar uma entrada de dados específica do dispositivo móvel. Para fazer isso, você precisará do MATLAB mobile no seu dispositivo móvel e do pacote de suporte do dispositivo móvel para o MATLAB no seu computador.

Você pode baixar o arquivo no link abaixo

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

Etapa 4: o código e as portas de fiação

O código começa com uma mensagem de inicialização que pergunta se queremos iniciar nosso dispositivo de segurança doméstica. Se respondermos sim e fornecermos a senha correta, o script imediatamente salta para um loop while. A partir daí, ele começa a coletar dados do dispositivo móvel. Existem condicionais que lêem esses dados. Podemos desbloquear e bloquear o sistema de nosso dispositivo móvel, e o código irá ligar o servo e piscar a luz LED dependendo dos dados fornecidos pelo dispositivo móvel

startup = questdlg ('Você gostaria de ativar o sistema de energia residencial ecoTECH inteligente?'); % Começa a sequência de ativação de ecoTECHwaitfor (inicialização); se inicialização == "Sim"% Se "Sim" for selecionado, uma sequência de ativação começa e entra no loop while no final da alimentação = "ligado"; m1 = msgbox ('Iniciando ecoTECH…'); pausa (2); deletar (m1); m1_wait = waitbar (0, 'Por favor, aguarde …'); etapas = 25; para i = 1: pausa das etapas (.1); waitbar (i / etapas); % Atualiza a exclusão final da barra de espera (m1_wait); SENHA = [0 0 0 0]; % Inicializa a senha ii = 0; % Inicializa uma variável usada para quebrar os loops m2 = msgbox ('ecoTECH totalmente operacional!'); pausa (2); excluir (m2); elseif startup == "Não" || startup == "Cancelar"% Se "Não" ou "Cancelar" for selecionado, a sequência de ativação não inicia e não entra no while loop power = "off"; m3 = msgbox ('Ok! Adeus!'); pausa (2); excluir (m3); fim

% ecoTECH na seção de ação enquanto true while power == "on"% Mobile Key Section while true% Coleta dados sobre a orientação de rotação do dispositivo móvel KEY = m. Orientation (3); % Coleta dados sobre os botões b2 = readDigitalPin (a, 'D2'); % Botão 2 (vermelho) b3 = readDigitalPin (a, 'D3'); % Botão 3 (branco) se CHAVE> = 35% em graus m4 = msgbox ('Bem-vindo ao lar!'); writeDigitalPin (a, 'D8', 1); % Liga a pausa da luz verde (.5); writePosition (s, 1); % Gira o servo para destravar a pausa da porta (2); writeDigitalPin (a, 'D8', 0); % Apaga a luz verde delete (m4); elseif KEY <= -35% em graus m5 = msgbox ('Porta trancada!'); writeDigitalPin (a, 'D7', 1); % Liga a pausa da luz vermelha (.5); writePosition (s, 0); % Gira o servo para travar a pausa da porta (2); writeDigitalPin (a, 'D7', 0); % Apaga a luz vermelha delete (m5); ii = 1; break% Sai enquanto o loop contém a chave do celular se a porta estiver trancada usando o dispositivo móvel elseif b2 == 0 && b3 == 0% Sai enquanto o loop contém a chave do celular para inserir a seção da senha break end end

Depois disso, ele pode entrar em outro loop while. Este loop while controla os resultados com base nas entradas dos botões. Se o primeiro loop while for insignificante ou um bloqueio manual for necessário, ele entrará em outro loop while onde uma senha específica é necessária. Se a senha estiver incorreta, o loop será reiniciado

enquanto verdadeiro se ii == 1% Sai enquanto o loop contém a senha se a porta foi destrancada com o fim do dispositivo móvel% Coleta dados sobre os botões b5 = readDigitalPin (a, 'D5'); % Botão 5 (azul) b1 = readDigitalPin (a, 'D1'); % Botão 1 (preto) b4 = readDigitalPin (a, 'D4'); % Botão 4 (branco) se b5 == 0% Inicia a seção de inserção de senha para b = 1: 5 m6 = msgbox ('Pressione e segure um botão'); pausa (2); deletar (m6); % Coleta dados sobre os botões b1 = readDigitalPin (a, 'D1'); % Botão 1 (preto) b2 = readDigitalPin (a, 'D2'); % Botão 2 (vermelho) b3 = readDigitalPin (a, 'D3'); % Botão 3 (branco) b4 = readDigitalPin (a, 'D4'); % Botão 4 (amarelo) b5 = readDigitalPin (a, 'D5'); % Botão 5 (azul)% Substitui os valores na senha inicial, um de cada vez, se b1 == 0 PASSCODE (0 + b) = 1; elseif b2 == 0 SENHA (0 + b) = 2; elseif b3 == 0 SENHA (0 + b) = 3; elseif b4 == 0 SENHA (0 + b) = 4; elseif b5 == 0 SENHA = sprintf ('%. 0f%.0f%.0f%.0f', SENHA (1), SENHA (2), SENHA (3), SENHA (4)); % Transforma a sequência de botões pressionados em números, em seguida, converte em um final de string% Fim do loop for para inserir dígitos para a senha se PASSCODE == "2314"% Se a senha inserida corresponder, a porta destrava por alguns segundos e então tranca m7 = msgbox ('Bem-vindo ao lar!'); writeDigitalPin (a, 'D8', 1); % Liga a pausa da luz verde (.5); writePosition (s, 1); % Gira o servo para destravar a pausa da porta (5); writeDigitalPin (a, 'D8', 0); % Desliga a pausa da luz verde (.1); writeDigitalPin (a, 'D7', 1); % Liga a pausa da luz vermelha (.5); writePosition (s, 0); % Gira o servo para travar a pausa da porta (1); writeDigitalPin (a, 'D7', 0); % Apaga a luz vermelha delete (m7); ii = 1; break% Sai enquanto o loop contém a senha após inserir a senha correta elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Acende a luz vermelha m8 = msgbox ('Senha incorreta! Tente novamente!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Apaga a luz vermelha e continua% Permite que você insira novamente uma senha end elseif b1 == 0 && b4 == 0% Sai enquanto o loop contém a seção de senha se você não deseja inserir uma senha ii = 1; pausa fim fim

Se correto, ele entrará imediatamente em um loop while que controla o sensor de temperatura. Se a chave estiver ligada, o loop continuará e traçará o gráfico de temperatura vs. tempo, permitindo que se visualize a tendência. Se o botão conectado ao sensor de temperatura for pressionado, ele também enviará um e-mail informando qual é a temperatura em sua “casa”. Se a chave for desligada, o código será encerrado imediatamente

t = 0; % Tempo inicial = pausa de 0 segundos (5)% Dá tempo para o usuário ligar a chave de temperatura SWITCH = readDigitalPin (a, 'D11'); % Coleta dados sobre a chave no pino D11 enquanto SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Coleta dados sobre a chave no pino D11 tensão = readVoltage (a, 'A1'); % Lê a tensão do sensor de temperatura temp_C = (tensão. * 1000 - 500)./ 10; % Converte a tensão em temperatura em ° C temp_F = (9/5). * Temp_C + 32; % Converte do gráfico ° C para ° F (t, temp_C, 'b.') Retido no título ('Temperatura ambiente'); xlabel ('Tempo em segundos'); ylabel ('Temperatura'); eixo ([0, 180, 0, 100]); plot (t, temp_F, 'r.') legenda ('Temperatura em ° C', 'Temperatura em ° F') pausa (1); t = t + 1; % Contador de tempo em segundos% Seção de e-mail b_temp = readDigitalPin (a, 'D0'); % Coleta os dados do botão de temperatura (azul) no pino D0 se b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Sender setpref ('Internet', 'SMTP_Username', '[email protected]'); % Sender's username setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Props de senha do remetente = 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 (' A temperatura ambiente atual é%.1f ° C ou%.1f ° F. ', temp_C, temp_F)); % Envia um e-mail ao destinatário fornecendo dados sobre a temperatura ambiente atual fprintf ('E-mail enviado com sucesso! / N') end if temp_F> = 75% Se a temperatura ambiente aumentar para 75 ° F… temp_AC = 65; % Altera a temperatura no termostato para 65 ° F elseif temp_F <= 65% Se a temperatura ambiente diminuir para 60 ° F… temp_AC = 80; % Altera a temperatura no termostato para 80 ° F final% Fim de "SWITCH == 0" durante o loop se energia == "desligado" || ii == 1% Sai de "power == on" enquanto a quebra de loop termina% Fim de "power == on" enquanto loop se power == "off" || ii == 1% sai inteiro enquanto o loop termina

Esta foi apenas uma breve visão geral do código e sua funcionalidade. Anexamos o código completo em PDF, se necessário

Aqui está a lista de qual porta cada dispositivo está conectado

1. LED RGB: pinos digitais (7, 8, 9)

2. Servo: pino digital 6

3. Botões: pinos digitais (1, 2, 3, 4, 5)

4. Botão azul para e-mail: pino digital 0

5. Sensor de temperatura: Pino analógico 1

6. Interruptor: pino digital 11

Recomendado: