Arduino + MATLAB

Como acadêmico de um curso de engenharia, utilizo muito o MATLAB para simulação matemática.

– Deixa ser chato Hamilton conta logo como comunicar o MATLAB com o ARDUINO. Tá bom vamos lá!!!

Mas primeiro um pouco de teoria.

Como foi visto no post “O que é Arduino” o mesmo é uma placa de fácil manipulação e programação, mas podemos usar o Arduino também como uma interface de comunicação  entre o PC.

Em muitos projetos não é necessário que o Arduino trabalhe como um processador independente, mas como um dispositivo intermediário através do qual há a conexão de sensores, leds, motores, etc a um computador. Nesta configuração, a placa e o PC ficam conectados e se comunicam através da porta USB/serial. Um aplicativo executado no PC (que no nosso caso será a classe arduino.m  instanciado) interage com outros aparelhos conectados à placa.

Para que essa interação seja feita é necessário adicionar o firmware adiosrv.pde que fará o papel de informar os status e as ações do Arduino. Abaixo segue um diagrama de como isso funciona.

 

ArduinoMatlab

Vamos agora para pratica:

  1. Faça o download do arduino-matlab em http://www.mathworks.com/academia/arduino-software/arduino-matlab.html, após o download pegue o arquivo adiosvr.pde que encontra-se dentro da pasta adiosvr e grave no Arduino via IDE de programação. Caso não saiba como fazer isso, assista o vídeo do post “O que é Arduino” .
  2. Abra o MATLAB, adicione o arquivo arduino.m no WORKSPACE, a partir desse momento o MATLAB já esta pronto para se comunicar com o Arduino.
  3. Dentro do arquivo que foi baixado arduino-matlab contém diversos exemplos mas segue abaixo um exemplo de utilização de escrita e leitura digital e analógica, como também a disposição dos pinos na placa do Arduino.

    arduino_board

     

    
    % conectando ao arduino 
    a=arduino('COM5')
    
    % especificando os modos que os pinos 4, 13 e  5 iram trabalhar 
    a.pinMode(2,'input'); 
    a.pinMode(13,'output'); 
    a.pinMode(9,'output');
    
    % Efetuando uma leitura digital no pino 4 
    dv=a.digitalRead(4)
    
    % escrevendo o que tem na variavel dv  (0 or 1) no pino 13 
    a.digitalWrite(13,dv)
    
    % lendo a entrada analógica no pino 5 (NB: não é o pino 5 digital) 
    av=a.analogRead(5)
    
    % normalizando av de 0:1023 para 0:255 
    av=(av/1023)*255
    
    % escrevendo a saida av no pino 9 (pwm)  
    a.analogWrite(9,av)
    
    % fechando a seção 
    delete(a)
    
    

    Segue abaixo imagens de outro código executado no command do MATLAB junto com o hardware.

     

     

    Para mais informações segue um PDF feito pelo Giampiero Campa mostrando mais detalhadamente com usar essa ferramenta: http://www.mathworks.cn/matlabcentral/fileexchange/27843-arduino-io-package-slides-and-examples

    Segue também um target para utilizar junto com o SIMULINK: http://www.mathworks.com/academia/arduino-software/arduino-simulink.html

    Anúncios

    25 comentários em “Arduino + MATLAB

    1. Pingback: Arduino + Python + FIRMATA « Acarajé Turbinado

    2. Pingback: Os números de 2010 « Acarajé Turbinado

    3. Hamilton,

      Como havia comentado…. hehehe eu utilizei as informacões acima para começar a brincar com o arduino, gostei das dicas…. PARABÉNS pela iniciativa…

      Abraços

    4. BAIANINHOOOOO!!
      Show de bola seu tutorial, funcionou perfeitamente!!!

      VLW!!

    5. Muito bom seu tutorial.

      Eu estou tentando acessar os pinos TX e RX do Arduíno para enviar e receber dados via XBee, gostaría de saber se isso é possível utilizando esse patch.
      Utilizando as funções dentro do pacote, não é possível acessar os pinos 0 e 1, você poderia me ajudar?

    6. Pingback: Os números de 2010 | hamiltonsena.net

    7. Excelente cara. Poderia postar mais exemplos do uso do arduino junto ao matlab? gostaria de simular vôos (trajetoria) de aeromodelismo (aviao com arduino) no matlab, é possivel?

    8. Hamilton,
      Obrigado as suas informaçoes estam a ser muito boas mas eu tenho um problema eu sou utilizador de Mac osx e quando defino a minha porta serial Por Ex: a=arduino(‘dev/cu.usbserial-A400AQKM’) ele nao reconhece a minha porta
      como eu posso fazer ?

      Obrigado

    9. Muito bom trabalho, estou tentando fazer um controlador PID de temperatura com Matlab e arduino.

    10. Precisa ter cadastro no site do mathworks? Pois não estou encontrando o link para download …

    11. Conssegui fazer o download mesmo sem cadastro rsrs. Mas tenho mais uma pergunta:
      Preciso bastante trabalhar com display LCD(queria fazer pelo matlab,pois irei trabalhar com redes neurais no meio do projeto), e creio que nessas bibliotecas de comunicação não tem nada para manipulação de LCD…como eu resolveria isso?
      Queria trabalhar, por exemplo, códigos desse tipo no matlab, so que o arduino.m não dispôe de nada para isso…

      #include
      LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
      lcd.begin(16, 2);
      lcd.print(“RAA”);

    12. Hamilton, parabéns pelo site e pelos tutoriais! Veja se pode me ajudar, usando o arduino para leitura de uma tensão da rede o resultado é colocado numa tabela e o gráfico feito em excel fica perfeito (senoidal), agora usando o arduino + matlab a leitura fica horrível, acredito que deva haver alguma diferença na frequência da leitura. Sabe o que pode ser?

    13. Pingback: Arduino + Python + FIRMATA | HamiltonSena.NET

    14. Hamilton, parabéns, seus tutoriais são muito bons.
      Quero saber se tem como fazer o MATLAB entender todas as funções do Arduino, porque pelo que vi com aqueles códigos base da comunicação entre eles, somente algumas funções são compreendidas pelo MATLAB.

    15. Hamilton!
      Estou mudando de linguagem para aquisição de dados do arduino e estou “patinando” no matlab!

      Você sabe como ativar um evento no arduino pelo matlab?

      Por exemplo o código blink do ardino!
      Para enviar um comando pela porta serial que ative o “pisca pisca” como seria?

      No arduino embarcado ficaria algo:

      int n;
      int pin = 13;

      void setup()
      {
      Serial.begin(9600);
      pinMode(pin, OUTPUT);
      }

      void loop()
      {
      if(Serial.available() > 0)
      {
      n = Serial.read();

      if(n == 49)
      {
      int i;
      for(i=0; i<10; i++){
      digitalWrite(pin,HIGH);
      delay(500);
      digitalWrite(pin,LOW);
      delay(500);
      }
      }
      }
      }

      Como poderia escrever no matlab?
      O que tenho tentado não está dando certo!
      Tem com dá uma força?

    16. Opa!

      DESCULPA errei feio no código do arduino!!

      É esse:

      int valor;
      int poten = 2;
      int outputValue = 0;

      void setup()
      {
      Serial.begin(9600);
      pinMode(poten,OUTPUT);
      }

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

      if (tecla == ‘l’)
      {
      valor = analogRead(poten);
      outputValue = map(valor, 0, 1023, 0, 255);

      int i;
      for(i=0; i arduino pela porta serial?

      Tem com dá uma força?

      P.S. desculpe pelo post anterior não prestei atenção!

    17. Pingback: HamiltonSena.NET » Os números de 2010

    18. Sim!
      A ideia base do sketch no arduino será como eu coloquei (acima), contudo seja necessário fazer alterações para incluir cobrir alguma especificidade do acelerômetro (nunca trabalhei com um)!
      Para evitar problemas de comunicação nos comandos tente trabalhar com valores ascii ao invés de letras.
      Quanto ao matlab, se a sua necessidade for somente controlar! Creio não haverá grande dificuldades! Contudo se houver a necessidade de fazer aquisição de dados sugiro que monte separadamente o controle e aquisição e depois “case” os dois em um único programa!

      Dependendo do seu arduino (Due ou o Yún) o matlab R2014a seria o recomendado por que tem suporte, todavia é possível usar o R2013a (testei no arduino Due e deu certo para o eu queria no meu projeto).

      Falou!

    Deixe um comentário

    Preencha os seus dados abaixo ou clique em um ícone para log in:

    Logotipo do WordPress.com

    Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

    Imagem do Twitter

    Você está comentando utilizando sua conta Twitter. Sair / Alterar )

    Foto do Facebook

    Você está comentando utilizando sua conta Facebook. Sair / Alterar )

    Foto do Google+

    Você está comentando utilizando sua conta Google+. Sair / Alterar )

    Conectando a %s