Acquisizione multipla tramite Arduino Mega-LabVIEW

Salve a tutti,
per il mio progetto di tesi mi sono avvicinato alla piattaforma Arduino con l’intento di creare un sistema di acquisizione dati, mirato anche alla diagnostica, utilizzando come scheda di acquisizione proprio Arduino Mega (Uno degli obiettivi è il low cost). La mia domanda è legata alla possibilità di acquisire diversi segnali analogici e allo stesso tempo dei dati proveniente da un sensore GPS collegato ad una porta seriale. Tutti questi dati dovrebbero essere inviati poi ad un programma di misura (LabVIEW) per essere mostrati ed elaborati.

Mi chiedo però se e quanto questo sia possibile!

Sono riuscito ad acquisire la posizione (quindi il gps) ed ora mi accingo ad affrontare l’acquisizione di questi segnali analogici tuttavia mi chiedo come fare a separare i segnali provenienti dai sensori da quello proveniente dal gps dato che tutti passano dalla porta usb. Mi spiego meglio:

Il LabVIEW ha la possibilità di interfacciarsi con la scheda Arduino tramite un’apposito sketch rilasciato dalla casa produttrice, così posso leggere e comandare ingressi analogici,digitali etc. e quindi acquisire i segnali non è un grosso problema (Anche se sarò costretto ad aumentare la frequenza del clock dell’ADC per ottenere risultati di misura interessanti) tuttavia mi chiedo quanto sia possibile affiancare a questi dati anche quelli proveniente dal gps!

Il codice se pur basilare che mi permette di mandare i dati “nudi e crudi” da arduino al pc è in allegato!

sketch_oct03b.ino (156 Bytes)

Essendo il tuo primo post dovresti cortesemente presentarti nell'apposito thread indicando quali conoscenze hai di elettronica e di programmazione. E' utile sapere le competenze, ad esempio se uno è un informatico evitiamo di spiegare un ciclo for() o se uno è un elettronico evitiamo di spiegare cosa sia un led :slight_smile:

Ti posso dire da subito che le tue difficoltà non dipendono dalla scheda arduino "che poi sembra acquisisca solo valori", ma da il software che usi su PC. Per cui non sono argomenti che riguardano strettamente arduino, e non so neanche se molte persone di questo forum hanno usato il tuo software.

Se si volesse visualizzare risultati come valori numerici su PC e non ad esempio con "grafici", sarebbe facile crearsi un programma per PC e mettere appunto una comunicazione seriale con arduino che risolva tutti i problemi. In pratica arduino prima di inviare il valore numerico, invierebbe un comando "stringa o numero" per fare a capire al programma su PC che utilizzo deve fare con i dati trasmessi.

>AndreaDantoni95: come ti è stato detto, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

Mi scuso per la mia mancanza, ho provveduto appena visto le risposte a presentarmi.

torn24 cercherò di essere preciso e conciso per spiegarti il mio problema. Devo acquisire dei segnali analogici e anche il segnale gps, mandare tutto in modo conscio e veloce (dovrei campionare segnali con frequenza massima 400Hz) al software, il quale di fatto è in grado di comunicare efficacemente con Arduino tramite uno sketch LIFA.ino (che sta per LabVIEW Interface For Arduino) che mi permette di analizzare ingressi analogici scrivere su analog o digital etc. in modo perfetto ed efficace. In alternativa LabVIEW può interpretare Arduino come un ingresso seriale e basta, che di fatto è quello che ho dovuto fare per il segnale GPS dato che il LIFA non presenta questa funzione.

Ora la mia domanda è la seguente:

Quando acquisisco in modo "crudo" ,cioè senza dare nessuna indicazione ad Arduino, i dati in arrivo dal sensore GPS ottengo diverse stringhe (ogni stringa è un numero, una lettera o il nome del codice NMEA principale) che poi tramite software vado a comporre e decodificare (Compongo un array ordinato di fatto e poi lo decodifico). Il problema che mi pongo è quindi cosa accade se collego un sensore analogico ed il sensore GPS? I dati del sensore finirebbero in mezzo a quelli inviati dal GPS o no?! Posso dare un ordine a ciò che acquisisce e temporizzare tutto?

Una soluzione che ho pensato è proprio quella di trovare un modo per incastrare nei tempi le varie azioni che la scheda deve performare, o attraverso degli eventi che posso facilmente comandare.

P.S. Ho pensato a un switch case o un qualcosa di simile anche se in realtà io vorrei che lui facesse tutto insieme e mi mandasse tutti i dati "impacchettati" in modo da poter poi indirizzare ogni pacchetto alla sua destinazione.

Mi scuso per il mio essere prolisso e per le mie imprecisioni dovute alla non perfetta conoscenza del linguaggio di programmazione ed in generale di telecomunicazioni!

be ma tu memorizzerai in una variabile appropriata il dato ricevuto dal gps e in un’altra variabile il dato ricevuto dal/dai sensori
Poi sta a te costruire il pacchetto di dati da inviare a labview in modo che i singoli valori siano riconoscibili ed interpretabili dal lato pc

Ciao Patrick, grazie per la tua risposta. Puoi essere più preciso o guidarmi ad un testo dopo posso vedere e studiare ciò di cui mi parli? Non sono molto pratico di programmazione che non sia visiva per cui se mi potessi indicare qualcosa da dove leggere e capire ciò che mi accenni sarebbe perfetto!

Grazie a tutti per il tempo e gli sforzi che mi state dedicando!

Ho rimosso la serie di post inutili e polemici ripulendo la discussione. Ricordo solo il punto 16.4 del REGOLAMENTO. Grazie.

Guglielmo

AndreaDantoni95:
... guidarmi ad un testo dopo posso vedere e studiare ciò di cui mi parli? Non sono molto pratico di programmazione ....

Posso consigliarti, per iniziare, lo studio di QUESTO di proseguire con QUESTO e di acquistare un buon libro (es. QUESTO) :wink:

Guglielmo

Ciao, non conosco il software labview e non so cosa può fare e cosa ci si può fare, ma credo che l'attenzione dovrebbe rivolgersi a labview.

Se io devo leggere più sensori con arduino e trasmettere i dati posso usare diversi "trucchi" che non hanno una grossa difficoltà di programmazione su arduino. Potrei ad esempio leggere i sensori e dopo un tempo prestabilito, trasmettere in sequenza i valori da seriale, oppure arduino potrebbe leggere da seriale un carattere e in base al carattere ricevuto trasmettere da seriale i valori di uno specifico sensore.
Tutto questo non è molto complicato a mio avviso farlo su arduino, il problema è avere su PC un programma che si comporti da "controparte", nel senso su arduino decidiamo di fargli trasmettere i dati in un certo modo, con una certa soluzione al problema, ma il programma che usi labview potrebbe-dovrebbe essere pensato per "lavorare" in un modo specifico che potrebbe essere diverso da quello che vogliamo fare noi.

In pratica troviamo una soluzione su arduino ma a labview potrebbe non andare bene :wink:

Oltre a tutto quello consigliato da Guglielmo (che ti serve soprattutto per capire il mondo arduino) e che ti esorto a leggere, per quanto riguarda il tuo specifico problema potresti anche dare un'occhiata a questo

Ho dato uno sguardo all'ultimo link postato. Ho la conferma di quanto pensavo, non esiste difficoltà dalla parte programmazione arduino! Addirittura il codice dell'esempio può essere semplificato utilizzando degli
else if() al posto di if() annidati.

Sempre dall'articolo dice che è possibile inviare stringhe di comando dal software labview, quindi come detto in un mio precedente post, l'attenzione va posta su labview e cercare di capire COME inviare una stringa di comando e COME leggere dati da seriale in momenti diversi.

come dice l'OP

Il LabVIEW ha la possibilità di interfacciarsi con la scheda Arduino tramite un'apposito sketch rilasciato dalla casa produttrice, così posso leggere e comandare ingressi analogici,digitali etc. e quindi acquisire i segnali non è un grosso problema

quindi ciò che gli manca è appunto la parte arduino che non conosce :wink:

Intanto ringrazio tutti per l'aiuto, ho già stampato i testi forniti, ho pure un testo che si chiama cookbook, cercherò di studiare bene tutto poiché il problema che ho è proprio lato Arduino, mi serve una mano proprio a capire come lavorare con lui perché lato LabVIEW diciamo che "non ha segreti", ovviamente data la grandezza e la complessità del programma è un po' presuntuoso da dire così per questo virgoletto. Prima di porre ulteriori domande studierò il materiale che gentilmente mi avete fornito, non mi sembra corretto scrivere e chiedere se le risposte possono essere dentro questi testi! Vi ringrazio e una volta letto tutto vi aggiornerò con i miei dubbi.

Vi ringrazio ancora una volta, vi aggiornerò presto!

Per Patrick_M: Lo sketch fornito è di tipo base ma se fai una ricerca su internet puoi vedere tutte le sue funzionalità, giusto per capire la potenza e la versatilità di questo strumento, vedrai che rende tutto molto semplice ma non abbastanza flessibile per il mio impiego! Anche questo è un dubbio che spero di fugare! :wink:

Ho letto tutto quello che riguarda il manuale base software e qualcosina in più, rimango perplesso sul come coniugare la trasmissione seriale con il multitasking! Ho visto che si posso impostare un delay o ancora usare un case così da fare uno switch comunque sempre temporizzato. Ora vi chiedo:

Voglio acquisire n segnali (sui problemi di campionamento, adc, etc. già tutto visto) e anche i dati provenienti dal sensore gps, tutto insieme, come fare? Creare un array con tutti i dati provenienti dalle varie perferiche può essere interessante ma non sono certo di come farlo!

Qualunque cosa vi serva più nello specifico per aiutarmi posso dare altri recapiti e altri modi per comunicare extra forum così da non intasare la discussione!

Grazie per il tempo che mi avete dedicato!

diciamo subito che il multitasking qui non esiste :slight_smile:
e anche questo:

e anche i dati provenienti dal sensore gps, tutto insieme, come fare?

non è possibile
saranno comunque dati che verranno campionati uno dopo l'altro, seppur con tempi infinitesimi tra uno e l'altro poi come fai per un dato solo, dovrai gertire la concatenazione di tutti i dati in un unico messaggio da inviare oppure inviarli in modo separato. Sta sempre a te decidere il formato della/delle sequenze di caratteri/numeri da inviare in modo che il programma dall'altra parte riesca a discriminarli e a interpretarli. Non è detto che debba essere un array può essere anche una semplice sequenza di numeri trasmessi uno per volta.... le possibilità sono infinite