Matlab + Arduino

Bom! em primeiro lugar como um bom amante de eletrônica e da engenharia não podia deixar de postar algo entre ambos.

Arduino como alguns sabem nada mais é que um microcontrolador programável via linguage C com compilador multiplataforma capaz de interagir com o meio externo através de sensores ou circuitos eletrônicos, onde as aplicações são dos mais variados fins, desde ao acendimento de um led ao controle de um pequeno robô. E o melhor de tudo que você não precisa se preocupar com a configuração do hardware pois o compilador já faz isso tudo por você, só basta programar. O propósito desse post é como interagir o Arduino e o Matlab, qual é a vantagem disso? Você pode desfrutar que os dois tem de melhor. Todos sabem que o microcontrolador depois de programado  pelo compilador ele funciona de forma independente sem o uso do pc. Porém em certos momentos você não consegue saber a situação de determinadas variáveis externas que está acontecendo ali dentro do microcontrolador (ae que entra o Matlab), você pode monitorar essas variáveis e manipulá-las de várias formas, desde uma tabela de dados a um gráfico mostrando a situações dessas variáveis.

E ainda o Matlab tem um recurso chamado Embedded Coder, onde você pode fazer uma aplicação que seria quase impossível ou demoraria muito tempo para faze-la na mão grande, por exemplo: uma determinada aplicação de reconhecimento de imagem onde você teria que reconhecer um determinado objeto de uma determinada cor. O Matlab possui tais ferramentas que ajudaria no desenvolvimento e ainda geraria um código em C para serem embarcado nos microcontroladores.

Bom, vamos meter a mão na massa! O arduino que eu utilizo é o Duemilanove, hoje o seu semelhante se chamar Arduino Uno, enfim todos serve para mesma aplicação. Abaixo uma foto do Arduino Uno.

arduino_uno

No site do Arduino você tem maiores informações, desde um fóum com seção em português até as referências para linguagem C.

No site do Matlab, existe um pacote para ser usado com o arduino, ao descompactar verá várias pastas, uma delas chamada adiosrv com um arquivo também chamado adiosrv.pde, esse arquivo é o código fonte que deve ser compilado pelo compilador do arduino, você pode abrir ou copiar e colar no compilador e depois clilcar em Upload (Upload). Pronto, o arduino já pode se comunicar com o Matlab. Vamos agora pro Matlab, para o Matlab se comunicar com o arduino, é preciso que o arquivo arduino.m que veio dentro do pacote esteja na pasta do Current Folder do Matlab.

CurrentFolder

Um exemplo simples se encontra abaixo, onde faremos o acendimento do led que vem no Arduino, ele está em paralelo com o pino 13 do microcontrolador.

Pino13


%Execute os comandos em sequência no Command Window do Matalb

% Porta USB-Serial conectada ao arduino
a=arduino('COM5')

%Se conectando ao Arduino

%Setando o pino 13 como saída
a.pinMode(13,'output')

%Nível lógico 1 no pino 13, acendendo o led
a.digitalWrite(13,1)

%Nível lógico 0 no pino 13, apagando o led
a.digitalWrite(13,0)

Pronto, ae ta um exemplo simples e prático entre o Arduino e o Matlalb.

Alguns post na net relacionado:

Blog de Hamilton Sena http://hsena.wordpress.com/page/3/

Espero futuramente postar algo mais relacionado!

Até mais!

Abraços.

13 Comentários

  1. Laese

    Comunicação Matlab com microcontrolador via USB para controle de projetos reais:
    https://dl.dropbox.com/u/101922388/MatlabPM_USB/Matlab_PicUSB.pdf

    Responder
    1. Guto Melo

      Muito bom Laese!!

      Responder
  2. leandro

    Boa noite amigo, qual é o pacote não consigo baixar.

    Responder
    1. gutomelo
  3. Jesus Jenner

    Parabéns, Guto!

    Responder
  4. Diogo

    Olá!
    Estou querendo usar o matlab para um projeto mas estou com uma dúvida!

    É simples(bem noob na verdade) com o pacote de suporte “ArduinoIO”, se, eu embarcar o script install_arduino.m, no matlab, já tenho o necessário para a comunicação matlab->arduino. Correto?

    Logo, posso embarcar no arduino o código que eu escrever e assim interagir com o matlab! É isso mesmo!!!?

    Responder
    1. Guto Melo

      Diogo, o pacote ArduinoIO é para o Matlab comunicar com o arduino através da serial ou mandar alguma comando do tipo acionar uma porta e entre outros.Serve para aquisição de dados que é mandado pelo arduino ou vice-versa.

      Responder
      1. Diogo

        Sim! Testei e é isso mesmo!
        Obrigado!

        Guto não é querendo abusar da boa vontade…… mas você conhece sobre configuração do callback no guide-matlab ou conhece algum material específico sobre o guide?

        Responder
        1. gutomelo

          Diogo, tem um tempo que estou sem mexer no MatLab, não me lembro deste tipo de configuração. Mas qual é a sua necessidade? quem sabe poderei te ajudar.

          Responder
          1. Diogo

            É simples!

            Pretendo fazer uma simples interface arduino + matlab, onde, uso o matlab para disparar os eventos já embarcado(está terminado) do arduino e construir um gráfico em tempo real dos dados que são “printados” na porta serial.

            Eu consegui fazer isso no Python, porém estava desconfigurando e dando uns bugs e não consegui contornar! No Processing….. (putz fiquei meio perdido mas fiz um interface bem grosseira). E espero que a solução esteja no matlab!

            Consegui ativar eventos e construir gráficos separadamente(este último ainda estou “patinando” na programação, comecei a estudar matlab semana passada)!

            A ideia de trabalhar com o guide do matlab seria construir simples botões e uma zona para o gráfico, assim que disparar os eventos e chegar alguma coisa na porta serial o gráfico é plotado!

            E esse é o porque de ter-lhe perguntado como editar o callback do guide! Sei na onde mexer porém não sei como mexer!!!

            P.S. sou NOOB em programação estive aprendendo praticando no arduino.

  5. Diogo

    Guto!
    Tem como dá uma opinião no código que escrevi?

    Estou tendo problema com função indefinida! Para desobstruir a porta serial com o comando que enviei do matlab => arduino usei um “flushinput()”, contudo o matlab acusa este de não ser um comando do tipo “char”!

    Teria uma ideia de como contornar esse problema?
    Criei uma interface pelo teclado até compreender direito o “guide”!

    CÓDIGO MATLAB:

    % estou usando o led 13 onboard e um potenciômetro 10k no pino analógico A2, assim
    % testo a ação ativar um evento de pisca-pisca e leitura de valores na porta serial.

    clear all
    clc

    delete(instrfindall);
    Opcao1 = 1;

    arduino = serial(‘COM4′,’BaudRate’, 115200);

    fopen(arduino);

    while Opcao1

    Opcao1 = input(‘Entrar valor 1, 2, ou 0 (1=ON, 2=OFF, 0=EXIT): ‘);
    fprintf(arduino,’%s’,’Opcao1′);

    flushinput(‘Opcao1’) % apaga valor imprimido na porta serial.

    while Opcao1 ~= NaN
    tentativa4; % escrevi um código de aquisição e construção do gráfico à parte.
    end

    end
    %pause(0.001);
    fclose(arduino);

    delete(arduino);
    clear all;

    CÓDIGO ARDUINO:

    int led = 13;

    void setup()
    {
    Serial.begin(115200);
    pinMode(led,OUTPUT);
    }

    void loop()
    {
    char tecla = Serial.read();

    if (tecla == ‘1’)
    {

    int i;
    for(i=0; i<100;i++)
    {
    digitalWrite(led, HIGH);
    delay(100);
    digitalWrite(led, LOW);
    delay(100);
    Serial.println(analogRead(A2));
    }

    }
    }

    O resultado que tenho é; ativo o evento de "piscar" o led mas não consigo construir o gráfico! O erro impede que os dados sejam lidos pelo matlab!

    P.S. testei separadamente a aquisição e construção do gráfico o código foi funcional!

    O relatório de erro que o matlab me retorna é:

    Entrar valor 1, 2, ou 0 (1=ON, 2=OFF, 0=EXIT): 1
    Undefined function 'flushinput' for input arguments of type 'char'.

    Error in menu_popup (line 17)
    flushinput('Opcao1')

    Responder
  6. André

    e como que eu consigo enviar o arquivo arduino.m para o matlab?

    Responder
  7. Tcharlles

    Olá, não consigo encontrar o arquivo arduino_ml.zip para baixar, o link está indisponível. Poderia enviar o arquivo para o meu e-mail?
    meu e-mail: tcharllys1@hotmail.com

    Responder

Deixar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *