Índice:
- Etapa 1: peças e materiais
- Etapa 2: Pacote de suporte MATLAB Arduino
- Etapa 3: usando sensores de dados adquiridos de dispositivo móvel
- Etapa 4: o código e as portas de fiação
Vídeo: Microcontrolador controlado MATLAB (Arduino MKR1000): 4 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
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
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
- Servo
- Botão (6)
- Luz LED RBG intercambiável
- Fios Simples
- tábua (s) de pão
- mini interruptor de energia
- sensor de temperatura
- Resistor de 330 ohm
- Resistor de 10K ohm
- Cabo USB-microUSB
- Laptop / desktop
- 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
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:
Motor de passo controlado por motor de passo sem microcontrolador !: 6 etapas
Motor de passo controlado por motor de passo sem microcontrolador !: Neste instrutivo rápido, faremos um controlador de motor de passo simples usando um motor de passo. Este projeto não requer circuitos complexos ou um microcontrolador. Então, sem mais delongas, vamos começar
Motor de passo controlado por motor de passo sem microcontrolador (V2): 9 etapas (com imagens)
Motor de passo controlado por motor de passo sem microcontrolador (V2): Em um dos meus Instructables anteriores, mostrei como controlar um motor de passo usando um motor de passo sem um microcontrolador. Foi um projeto rápido e divertido, mas veio com dois problemas que serão resolvidos neste Instructable. Então, sagacidade
Robô controlado por voz usando o microcontrolador 8051: 4 etapas (com imagens)
Robô controlado por voz usando o microcontrolador 8051: Um robô controlado por voz assume o comando especificado na forma de voz. Qualquer que seja o comando dado através do módulo de voz ou módulo Bluetooth, ele é decodificado pelo controlador existente e, portanto, o comando dado é executado. Aqui neste projeto, eu
Configuração de bits de fusível do microcontrolador AVR. Criando e enviando na memória flash do microcontrolador o programa de LED piscando: 5 etapas
Configuração de bits de fusível do microcontrolador AVR. Criando e Carregando na Memória Flash do Microcontrolador o Programa de LED Piscando .: Neste caso iremos criar um programa simples em código C e gravá-lo na memória do microcontrolador. Vamos escrever nosso próprio programa e compilar o arquivo hex, usando o Atmel Studio como plataforma de desenvolvimento integrada. Vamos configurar o fusível bi
Como fazer um robô controlado por celular. Baseado em DTMF - Sem microcontrolador e programação - Controle de qualquer lugar do mundo - RoboGeeks: 15 etapas
Como fazer um robô controlado por celular. Baseado em DTMF | Sem microcontrolador e programação | Controle de qualquer lugar do mundo | RoboGeeks: Quer fazer um robô que possa ser controlado de qualquer lugar do mundo, vamos fazer isso