Arduino e MatLab

Ciao.

Sto tentando di interfacciare Arduino e MatLab. Per i casi pià semplici e banali ci sono riuscito (per.es potenziometro che modifica il grafico a indicatore circolare su matlab) ma non riesco a leggere in tempo reale di dati presi da un sensore (acc/girosc/termometro). Il sensore (GY-86) funziona benissimo con Arduino, caricando il codice dall'IDE (http://playground.arduino.cc/Main/MPU-6050?action=sourceblock&num=1), ma NON funziona con MatLab.

Chiedo gentilmente se qualcuno di voi ha già avuto successo con la simbiosi di cui sopra e sia disposto ad aiutarmi, aiutandomi a diradare la tanta nebbia che circonda i miei molti dubbi in materia.

Vedo, dai preliminari e pochi risultati che ho fin'ora ottenuto, che la simbiosi sembra essere un mezzo potentissimo per debugging ed analisi in tempo reale.

GRazie a chiunque sarà disposto ad aiutarmi. ciao marco

Hai già provato a fare una ricerca su internet? Su instructionables ci sono dei tutorial riguardo questo argomento http://www.instructables.com/id/Tutorial-6-MATLAB-and-Arduino-part-1-up-and-run/ mentre sul sito della mathworks c'è un'estensione apposita.

premetto che non conosco matlab, ma quando faccio letture di sensori (per esempio) cona ltri linguaggi, devo creare un "protocollo" di..sincronizzazione... ovvero il programma residente sul pc chide la lettura dei sensori, arduino risponde inviando una serie di dati (stringa) in una modalità studiata, in modo che il tuo programma (o chi per lui) prenda questi dai e li tratti come deveno essere trattati (in base a cosa vuoi che faccia).

ma la cosa fondamentale è che il tutto sia sincronizzato e il "formato" dei dati sia quello corretto... altrimenti non ti funzionerà mai nulla ;)

ciao ragazzi. grazie per le rapide risposte.

yoshi93 ,si ho gi guardato. Il link da accesso ad un video. Sono già riuscito a fare quello che lui fa nel video Sono riuscito anche a leggere l'output di arduino in Matlab, perè da porta analogica, prelevano il segnale PMW di onda quadra per evincere la grandeza analogica. Il paclage MatLab Arduino I/O permette di creare un ponte seriale tra matlabed arduino (il "protocollo" di cui parlava MArtinix).

Non riesco, però, a collegarmi alle porte TX ed RX. SU Arduino MEGA (quello che ho io) sono i pin 20 e 21.

A quei pin ho attaccato un sensore che è contemporaneamente gyroscopio+accelerometro+temperatura e bussola magnetica. Comunica attraverso porte TX ed RX (seriale di arduino), ma non so come assimilare i dati in tempo reale in MatLab per fare un grafico e vedere l'andamento con l'avanzare del tempo.

Qualcuno mi aiuta?

Potresti dirci il modello di sensore che hai? I pin 20 e 21 non sono quelli della porta seriale ma SDA e SCL.

Mi sa che sati facendo un pò di casino. Quel sensore è I2C quindi usa un protocollo "seriale" ma non come si intende comunemente TX/RX tipo RS232. I2C richiede uso della libreria Wire.h e quindi NON è la stessa cosa della seriale.

Non saprei se MatLab è in grado di interfacciarsi con I2C. Potresti interporre Arduino. Questi dialoga con il sensore e poi Arduino, via seriale, spedisce i dati al PC.

yoshi93, il nome del sensore è GY-86. Hai ragione i pin sono quelli sbagliati, mi son confuso. E soprattutto: nid69ita! Grazie! Sì, sto facendo un bel po di casino.

Hai ragione, ho le idee ancora molto confuse , come puoi vedere. E una apparente notazione ambigua ("seriale" che poi però non è realmente seriale) mi butta ancor più in confusione. QUindi grazie per il chiarimento.

QUel che scrivi, cioè il fatto di interporre Arduino come interlocutore, mi sembra una brillante soluzione. Come potrei fare? Cioè, da MatLab, come posso impartire il comando: prendi i dati e sputali sulla lavagna MatLab?

Grazie!

I2C è uno standard di comunicazione seriale solo che è diverso dall'rs232 che volevi usare tu. Per le connessioni, attacchi il sensore ai pin 20 e 21 poi attacchi l'arduino al pc con caricato sopra uno sketch che comunica con matlab e gli invia i dati. Su matlab dovrebbe esserci la possibilità di fare un oggetto di tipo seriale che puoi inizializzare con i giusti parametri ed usarlo per inviare ricevere dati. Come inviare i dati e come capire cosa ti sta arrivando dipende da te e da come funzionano le librerie che usi e ci si ricollega al discorso di Martinix.

yoshi93, grazie per la risposta.

In effetti è esattamento quello che ho fatto. COme ho scritto nel mio primo POST (risali la cronologia) gli esempi più semplici, non implicanti I2C, FUNZIONANO. Tutti. Senza problemi.

Per es., potenziomentri, LED, entrate ed uscite. Funziona tutto. In MatLab creo un oggetto seriale (vedi KIT http://www.mathworks.com/matlabcentral/fileexchange/32374-matlab-support-for-arduino--aka-arduinoio-package-). Quando devo scrivere su o leggere da Arduino, a partire da Matlab, ci riesco, anzi riuscivo, senza problemi.

Lo sketch che comunica con Arduino, c'è anch'esso. Se attacco i due dei 4 pin dell'accelerometro ai pin 20 e 21, come dici tu, PERCHé non funziona in MatLab?

QUel che faccio è: a=arduino('nome_porta') i Pin, da matlab, vengono definiti come 'input' a.pinMode(20,'input') a.pinMode(21,'input')

Poi quando richiedo un read, come devo procedere? AnalogRead che di solito uso mi da errore perchè dice che i pin analogici vanno fino al 15. E se richiedo una lettura in digitale (digitalRead) mi da sempre valore unitario (1).

Come fare?

Come ti ha detto nid nel tuo sketch devi usare la libreria Wire.h , con essa fai le letture dal sensore e poi le invii tramite seriale(rs232) la pc. Quindi ricapitolando la parte pc/arduino ti funziona , quello che ti resta da fare è modificare il programma su arduino per leggerti il sensore con il protocollo giusto e poi inviarti i dati.

Ragazzi grazie. Molte grazie. PEr quanto possa sembrarvi banale, non avevo capito che comunque bisognasse dare una ulteriore istruzione ad Arduino per mandare i dati via porta seriale da computer.

La catena giusto per chiarire meglio è:

matlab richiede il dato con un comando sulla seriale (rs232) arduino se ne accorge e fa una lettura da sensore (i2c) arduino formatta nel modo giusto i dati presi dal sensore arduino invia tramite seriale (rs232) matlab riceve e plotta come vuoi te

Ce l'ho fattaa!! :)

https://www.youtube.com/watch?v=bVewJjANAvY&feature=youtu.be

Guardando il video suppongo che tu debba ancora fare la parte relativa al sensore. Comunque bravo, una volta che avrai finito fai un video pure di quello :). Se hai ancora dubbi non esitare a domandare.

si, il sensore è ancora da testare. Un passo alla volta.

Questo è per il termometro. https://www.youtube.com/watch?v=vfjwZ6DdGuc&feature=youtu.be

Il prossimo passo è l'interpretazione dei dati dell'accelerometro. Riesco ad importarli in matlab, ma non capisco: i valori mi sembrano assurdi. Sono grandissimi. Si tratta di voltaggio in milliVolts? Che cosa sto leggendo??

salve a tutti, sto utilizzando arduino uno con dynamixel ax s1 (in cui vi sono collegati vari sensori) e altri motori dynamixel ax 12 che mi servono per far muovere un eventuale cosa.tutto ciò li voglio interfacciare tramite matlab. il punto è che quando uso solo i motori il mio programma matlab funziona bene mentre quando uso il motore con i sensori(infrared e sonori) non riesco a utilizzare il monitor seriale di matlab,qualcuno sa come posso fare?

ps i motori stanno collegati ai piedino tx-1 rx-0