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.
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:
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 iniziamo da Arduino, apriamo l'IDE che utilizziamo sempre per scrivere e caricare i nostri programmi dal pc ad Arduino:
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/ttyACM0Salviamo 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:
matlabroote 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:
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:
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'
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'