quarta-feira, 12 de outubro de 2011

Arduino com MATLAB! Mini tutorial

--- Atualizado em 26/04/2014

É isso mesmo! Agora você pode ligar seu Arduino ou LaunchPad (com MSP430) na USB e escrever programas diretamente a partir do MATLAB ou do Simulink!! É muito bacana! Imagine o potencial: os programas são escritos e executados pelo MATLAB!

Fiz o teste com meu Arduino Mega. Testei no MATLAB R2009a com Windows Vista e deu certo! Também testei com sucesso com Arduino UNO no MATLAB R2013a rodando em Windows 8.

As informações a seguir se referem ao Arduino. Mas, se você usa LaunchPad com MSP430, você também pode usar esse pacote para fazer o MATLAB se comunicar com sua placa! Para isso, use o Energia IDE para carregar os arquivos "adio.pde" ou "adioe.pde". Podem ser usadas placas com MSP430G2553 e com MSP430G2452 (o G2231 não possui memória suficiente). Os demais passos são exatamente os mesmos.

Como exemplo, fiz um data logger simples. O programa amostra várias vezes a entrada analógica A2, ajusta o PWM da saída 11, guarda os valores num vetor e depois mostra o gráfico dos valores armazenados. Veja como ficou o resultado:

MATLAB obtendo dados de uma das entradas analógicas do Arduino.

Você pode baixar meu código aqui!

Preparei um passo-a-passo para fazer a conexão Arduino-MATLAB:

1. Faça download do toolbox do Arduino para o MATLAB:
http://www.mathworks.com/matlabcentral/fileexchange/32374

2. Instale o toolbox:
 - descompacte o arquivo e coloque a pasta ArduinoIO no caminho de sua proferência (por exemplo, na pasta work do MATLAB);
 - abra o MATLAB, vá até a pasta ArduinoIO e rode o arquivo "install_arduino.m" para que o caminho seja configurado corretamente;

3. Usando a IDE do Arduino (ou o Energia, caso use LaunchPad), transfira o programa "adio.pde" para a placa. Este programa está na pasta "...\ArduinoIO\pde";

4. Verifique a porta COM a que seu Arduino está conectado e feche a IDE;

5. De volta ao MATLAB, digite o seguinte comando (substitua 'COM8' pela porta onde seu Aduino está):
a = arduino('COM8')

Deve aparecer na tela a mensagem:
Attempting connection .............

Se tudo estiver correto, depois de alguns segundos surgirão as mensagens:
Basic Analog and Digital I/O (adio.pde) sketch detected !
Arduino successfully connected !

a = 

arduino object connected to COM8 port
Basic Analog & Digital I/O sketch (adio.pde) running on the board
...
e outras informações.

Pronto! A partir de agora sua placa está pronta para receber comandos diretamente do MATLAB!! Como primeiro teste, escreva:

a.pinMode(13,'output');
a.digitalWrite(13,1); 

O LED do pino 13 deve acender!

Você deve ter notado que a sintaxe no MATLAB é muito parecida com a da própria linguagem do Arduino, o que ajuda muito! Outros exemplos de comandos são:

a.digitalRead(4) % lê valor digital do pino 4

a.analogRead(2) % lê valor analógico do pino A2

a.analogWrite(11, 155) % ajusta o duty cycle do PWM do pino 11 para 155

a.serial % obtém a identificação da porta serial do Arduino

a.flush; % apaga os dados do buffer serial do Arduino

a.roundTrip(42) % envia um dado ao Arduino, que o envia de volta

Com esse pacote também é possível controlar servomotores e fazer a leitura de encoders diretamente do MATLAB. Para isso, ao invés de fazer o upload do arquivo "adio.pde" para o Arduino, você vai precisar usar o "adioe.pde" (encoder) ou o "adioes.pde" (encoder + servo). Para controlar motores CC, pode usar o "motor_v1.pde" ou o "motor_v2.pde". Veja mais detalhes em:
http://www.mathworks.com/matlabcentral/fileexchange/32374-matlab-support-package-for-arduino--aka-arduinoio-package-

Informações completas sobre o ArduinoIO Package para MATLAB estão em:
http://www.mathworks.com/academia/arduino-software/arduino-matlab.html

Bom divertimento e até a próxima!