domenica 22 febbraio 2015

Collegamento Arduino - Matlab

La guida si riferisce al metodo utilizzato prima del rilascio del pacchetto di comunicazione ufficiale da parte di Mathworks per Arduino.

Questa guida vuole unire due strumenti, apparentemente, molto diversi:
Arduino, un micro controllore collegabile a diversi sensori 
Matlab, un programma d'analisi matematica

L'idea di base è utilizzare Arduino per la corretta connessione/accoppiamento di diversi sensori, lasciando a Matlab il compito di raccogliere ed analizzare i risultati.

Di base Arduino comunica in modo seriale con il computer o altri dispositivi, quindi per il corretto collegamento Arduino & Matlab è necessario iniziare - inizializzare - un canale di comunicazione; appunto seriale.

Per prima cosa iniziamo da Arduino, apriamo l'IDE che utilizziamo sempre per scrivere e caricare i nostri programmi dal pc ad Arduino:


Copiamo il programma seguente:
 void setup(){  
Serial.begin(9600);
Serial.println('a');
char a = 'b';
while (a !='a'){
a=Serial.read();
}
}
void loop(){
}

Il semplice programma inizializza una seriale a 9600 baud, scrivendo la lettera 'a' sulla seriale. Il ciclo si conclude  quando dalla seriale viene letto una lettera diversa da 'a' . In questo modo il dispositivo in ascolto avrà comunicato il corretto collegamento. Ora veniamo al codice Matlab:
Per prima cosa dobbiamo comunicare - nativamente - a Matlab la porta utilizzata da Arduino per comunicare, per farlo dobbiamo aprire un nuovo documento di testo ed inserire:
-Dgnu.io.rxtx.SerialPorts=/dev/ttyS0:/dev/ttyUSB0:/dev/ttyACM0
Salviamo il file di testo con il nome "java.opts" , dove 'java' è il nome ed il '.opts'  l'estensione. Ora dobbiamo fare in modo che Matlab  carichi il file quando necessario, scriviamo nella Command Window di Matlab i seguenti comandi, tenendo nota del risultato d'ogni uno:
matlabroot
e successivamente
computer('arch') 
Il file "java.opts" andrà salvato nella locazione: $MATLABROOT/bin/$ARCH
Dove andremo a sostituire i nomi colorati con i percorsi trovati dai comandi applicati prima in Command Window.


Ora apriamo Matlab, nuova funzione e copiamo il seguente programma:
 %scrivere in console  
%instrhwinfo ('serial')
%comPort = '/dev/ttyACM0';
%[ s,flag ] = setupSerial( comPort );

function [s,flag] = setupSerial(comPort)

flag = 1;

s=serial(comPort);
set(s,'DataBits',8);
set(s,'StopBits',1);
set(s,'BaudRate',9600);
set(s,'Parity','none');
fopen(s); % fopen (serial),Connect serial port object to device
a='b';
while (a~='a')
a=fread(s,1,'uchar'); % fread (serial),Read binary data from device
end
if(a=='a')
disp('serial read');
end
fprintf(s,'%c','a'); % fprintf (serial),Write text to device
mbox= msgbox('Serial Communication setup.'); uiwait(mbox);
fscanf(s,'%u'); % fscanf (serial),Read ASCII data from device, and format as text
end

La funzione setupSerial si occupa, nella prima parte, del corretta inizializzazione tramite la seriale con Arduino.
La seconda parte invia una lettera diversa dalla 'a' in ingresso ad Arduino, confermando l'avvenuto collegamento.
Usiamo 'mbox' per visualizzare a schermo un messaggio d'avvenuto collegamento.


Ora basterà caricare nella Command Windows di Matlab i seguenti comandi:

- porta di collegamento con Arduino con il comando:
comPort = '/dev/ttyACM0';
- avviare la funzione con il comando:
[ s,flag ] = setupSerial( comPort );

Se tutto risponde correttamente si visualizzerà un avviso con la scritta "Serial Communication setup" .

NOTE:
Come potete vedere dall'immagine qui sopra di Matlab, la finestra "current folder" è aperta sulla cartella contenente il file della funzione. Se così non fosse, potremmo riscontrare qualche messaggio d'errore tipo: Undefined function 'setupSerial' for input arguments of type 'char'


Nessun commento:

Posta un commento